From b0db80055fbb862803a3400098cbaa06ba557f16 Mon Sep 17 00:00:00 2001 From: Lixing Gu Date: Thu, 28 Mar 2024 10:46:56 -0400 Subject: [PATCH 01/68] Upload a fix --- src/EnergyPlus/RoomAirModelManager.cc | 238 +++++++++--------- src/EnergyPlus/RoomAirModelManager.hh | 2 +- .../unit/RoomAirflowNetwork.unit.cc | 160 ++++++++++++ 3 files changed, 280 insertions(+), 120 deletions(-) diff --git a/src/EnergyPlus/RoomAirModelManager.cc b/src/EnergyPlus/RoomAirModelManager.cc index d7aa8ac9986..4c968a81d1e 100644 --- a/src/EnergyPlus/RoomAirModelManager.cc +++ b/src/EnergyPlus/RoomAirModelManager.cc @@ -58,6 +58,7 @@ // EnergyPlus Headers #include +#include #include #include #include @@ -71,19 +72,30 @@ #include #include #include +#include #include #include +#include +#include #include #include #include +#include #include #include +#include #include #include #include #include #include +#include +#include #include +#include +#include +#include +#include #include namespace EnergyPlus { @@ -1635,11 +1647,20 @@ namespace RoomAir { roomAFNNodeHVAC.SupplyFraction = ipsc->rNumericArgs(iEquipArg); roomAFNNodeHVAC.ReturnFraction = ipsc->rNumericArgs(iEquipArg); + // get equipment index + int EquipIndex = 0; + for (int thisZoneEquipNum = 1; thisZoneEquipNum <= state.dataZoneEquip->ZoneEquipList(iZone).NumOfEquipTypes; + ++thisZoneEquipNum) { + if (Util::SameString(state.dataZoneEquip->ZoneEquipList(iZone).EquipName(thisZoneEquipNum), roomAFNNodeHVAC.Name)) { + EquipIndex = state.dataZoneEquip->ZoneEquipList(iZone).EquipIndex(thisZoneEquipNum); + break; + } + } IntEquipError = CheckEquipName(state, roomAFNNodeHVAC.Name, roomAFNNodeHVAC.SupplyNodeName, roomAFNNodeHVAC.ReturnNodeName, - TotNumEquip, + EquipIndex, roomAFNNodeHVAC.zoneEquipType); if (!IntEquipError) { @@ -2676,7 +2697,7 @@ namespace RoomAir { std::string const &EquipName, // Equipment Name std::string &SupplyNodeName, // Supply node name std::string &ReturnNodeName, // Return node name - int TotNumEquip, // how many of this equipment type + int EquipIndex, // Equipment index DataZoneEquipment::ZoneEquipType zoneEquipType) { @@ -2693,210 +2714,188 @@ namespace RoomAir { using Fans::GetFanOutletNode; // Return value - bool EquipFind; // True if an error is found + bool EquipFind = false; // if true, equip is found - // FUNCTION LOCAL VARIABLE DECLARATIONS: - int NumAlphas; - int NumNumbers; - int Status; // Used in GetObjectItem - int MaxNums = 0; // Maximum number of numeric input fields - int MaxAlphas = 0; // Maximum number of alpha input fields - int TotalArgs = 0; // Total number of alpha and numeric arguments(max) for a - Array1D_string Alphas; // Alpha input items for object - Array1D Numbers; // Numeric input items for object bool errorfound; - - NumAlphas = 1; - NumNumbers = 1; - EquipFind = false; + int SupplyNodeNum = 0; + int ReturnNodeNum = 0; SupplyNodeName = ""; if (zoneEquipType == DataZoneEquipment::ZoneEquipType::Invalid) return EquipFind; - std::string_view equipTypeName = DataZoneEquipment::zoneEquipTypeNamesUC[(int)zoneEquipType]; - state.dataInputProcessing->inputProcessor->getObjectDefMaxArgs(state, equipTypeName, TotalArgs, NumAlphas, NumNumbers); - - MaxNums = max(MaxNums, NumNumbers); - MaxAlphas = max(MaxAlphas, NumAlphas); - - if (MaxNums > NumNumbers) { - Numbers.allocate(MaxNums); - Numbers = 0.0; - } else if (!allocated(Numbers)) { - Numbers.allocate(MaxNums); - } - - if (MaxAlphas > NumAlphas) { - Alphas.allocate(MaxAlphas); - Alphas = ""; - } else if (!allocated(Alphas)) { - Alphas.allocate(NumAlphas); - } - - for (int I = 1; I <= TotNumEquip; ++I) { - state.dataInputProcessing->inputProcessor->getObjectItem(state, equipTypeName, I, Alphas, NumAlphas, Numbers, NumNumbers, Status); - if (Util::SameString(Alphas(1), EquipName)) { - EquipFind = true; - break; - } - } - switch (zoneEquipType) { case DataZoneEquipment::ZoneEquipType::VariableRefrigerantFlowTerminal: { // ZoneHVAC:TerminalUnit : VariableRefrigerantFlow - SupplyNodeName = Alphas(4); - ReturnNodeName = ""; // Zone return node + SupplyNodeNum = HVACVariableRefrigerantFlow::GetVRFTUZoneInletAirNode(state, EquipIndex); } break; case DataZoneEquipment::ZoneEquipType::EnergyRecoveryVentilator: { // ZoneHVAC : EnergyRecoveryVentilator - int nodeNum = GetFanOutletNode(state, "Fan:OnOff", Alphas(4), errorfound); - if (errorfound) { - } - SupplyNodeName = state.dataLoopNodes->NodeID(nodeNum); // ????? - ReturnNodeName = ""; // Zone exhaust node + SupplyNodeNum = GetFanOutletNode(state, "Fan:OnOff", EquipName, errorfound); } break; case DataZoneEquipment::ZoneEquipType::FourPipeFanCoil: { // ZoneHVAC : FourPipeFanCoil - SupplyNodeName = Alphas(6); - ReturnNodeName = Alphas(5); + SupplyNodeNum = state.dataFanCoilUnits->FanCoil(EquipIndex).AirOutNode; + ReturnNodeNum = state.dataFanCoilUnits->FanCoil(EquipIndex).AirInNode; } break; case DataZoneEquipment::ZoneEquipType::OutdoorAirUnit: { // ZoneHVAC : OutdoorAirUnit - SupplyNodeName = Alphas(13); - ReturnNodeName = Alphas(14); + SupplyNodeNum = state.dataOutdoorAirUnit->OutAirUnit(EquipIndex).AirOutletNode; + ReturnNodeNum = state.dataOutdoorAirUnit->OutAirUnit(EquipIndex).AirInletNode; } break; case DataZoneEquipment::ZoneEquipType::PackagedTerminalAirConditioner: { // ZoneHVAC : PackagedTerminalAirConditioner - SupplyNodeName = Alphas(4); - ReturnNodeName = Alphas(3); + SupplyNodeNum = state.dataUnitarySystems->unitarySys[EquipIndex - 1].getAirOutNode(state, EquipName, 0, errorfound); + ReturnNodeNum = state.dataUnitarySystems->unitarySys[EquipIndex - 1].getAirInNode(state, EquipName, 0, errorfound); } break; case DataZoneEquipment::ZoneEquipType::PackagedTerminalHeatPump: { // ZoneHVAC : PackagedTerminalHeatPump - SupplyNodeName = Alphas(4); - ReturnNodeName = Alphas(3); + SupplyNodeNum = state.dataUnitarySystems->unitarySys[EquipIndex - 1].getAirOutNode(state, EquipName, 0, errorfound); + ReturnNodeNum = state.dataUnitarySystems->unitarySys[EquipIndex - 1].getAirInNode(state, EquipName, 0, errorfound); } break; case DataZoneEquipment::ZoneEquipType::UnitHeater: { // ZoneHVAC : UnitHeater - SupplyNodeName = Alphas(4); - ReturnNodeName = Alphas(3); + ReturnNodeNum = state.dataUnitHeaters->UnitHeat(EquipIndex).AirInNode; + SupplyNodeNum = state.dataUnitHeaters->UnitHeat(EquipIndex).AirOutNode; } break; case DataZoneEquipment::ZoneEquipType::UnitVentilator: { // ZoneHVAC : UnitVentilator - SupplyNodeName = Alphas(7); - ReturnNodeName = Alphas(6); + ReturnNodeNum = state.dataUnitVentilators->UnitVent(EquipIndex).AirInNode; + SupplyNodeNum = state.dataUnitVentilators->UnitVent(EquipIndex).AirOutNode; } break; case DataZoneEquipment::ZoneEquipType::VentilatedSlab: { // ZoneHVAC : VentilatedSlab - SupplyNodeName = Alphas(20); - ReturnNodeName = Alphas(18); + ReturnNodeNum = state.dataVentilatedSlab->VentSlab(EquipIndex).ReturnAirNode; + SupplyNodeNum = state.dataVentilatedSlab->VentSlab(EquipIndex).ZoneAirInNode; } break; case DataZoneEquipment::ZoneEquipType::PackagedTerminalHeatPumpWaterToAir: { // ZoneHVAC : WaterToAirHeatPump - SupplyNodeName = Alphas(4); - ReturnNodeName = Alphas(3); + SupplyNodeNum = state.dataUnitarySystems->unitarySys[EquipIndex - 1].getAirOutNode(state, EquipName, 0, errorfound); + ReturnNodeNum = state.dataUnitarySystems->unitarySys[EquipIndex - 1].getAirInNode(state, EquipName, 0, errorfound); } break; case DataZoneEquipment::ZoneEquipType::WindowAirConditioner: { // ZoneHVAC : WindowAirConditioner - SupplyNodeName = Alphas(4); - ReturnNodeName = Alphas(3); + ReturnNodeNum = state.dataWindowAC->WindAC(EquipIndex).AirInNode; + SupplyNodeNum = state.dataWindowAC->WindAC(EquipIndex).AirOutNode; } break; case DataZoneEquipment::ZoneEquipType::BaseboardElectric: { // ZoneHVAC : Baseboard : RadiantConvective : Electric + // convective equipment without node connection. Will handle later SupplyNodeName = ""; // convection only } break; case DataZoneEquipment::ZoneEquipType::BaseboardWater: { // ZoneHVAC : Baseboard : RadiantConvective : Water + // convective equipment without node connection. Will handle later SupplyNodeName = ""; } break; case DataZoneEquipment::ZoneEquipType::BaseboardSteam: { // ZoneHVAC : Baseboard : RadiantConvective : Steam + // convective equipment without node connection. Will handle later SupplyNodeName = ""; } break; case DataZoneEquipment::ZoneEquipType::BaseboardConvectiveElectric: { // ZoneHVAC : Baseboard : Convective : Electric + // convective equipment without node connection. Will handle later SupplyNodeName = ""; } break; case DataZoneEquipment::ZoneEquipType::BaseboardConvectiveWater: { // ZoneHVAC : Baseboard : Convective : Water + // convective equipment without node connection. Will handle later SupplyNodeName = ""; } break; case DataZoneEquipment::ZoneEquipType::HighTemperatureRadiant: { // ZoneHVAC : HighTemperatureRadiant + // Radiative equipment without node connection. Will handle later SupplyNodeName = ""; } break; case DataZoneEquipment::ZoneEquipType::DehumidifierDX: { // ZoneHVAC : Dehumidifier : DX - SupplyNodeName = Alphas(4); - ReturnNodeName = Alphas(3); + ReturnNodeNum = state.dataZoneDehumidifier->ZoneDehumid(EquipIndex).AirInletNodeNum; + SupplyNodeNum = state.dataZoneDehumidifier->ZoneDehumid(EquipIndex).AirOutletNodeNum; } break; case DataZoneEquipment::ZoneEquipType::PurchasedAir: { // ZoneHVAC : IdealLoadsAirSystem - SupplyNodeName = Alphas(3); - ReturnNodeName = Alphas(4); + ReturnNodeNum = state.dataPurchasedAirMgr->PurchAir(EquipIndex).ZoneExhaustAirNodeNum; + SupplyNodeNum = state.dataPurchasedAirMgr->PurchAir(EquipIndex).ZoneSupplyAirNodeNum; } break; case DataZoneEquipment::ZoneEquipType::RefrigerationChillerSet: { // ZoneHVAC : RefrigerationChillerSet - SupplyNodeName = Alphas(5); - ReturnNodeName = Alphas(4); + // May not apply + // SupplyNodeName = Alphas(5); + // ReturnNodeName = Alphas(4); } break; case DataZoneEquipment::ZoneEquipType::HybridEvaporativeCooler: { // ZoneHVAC : HybridUnitaryAirConditioners - SupplyNodeName = Alphas(11); - ReturnNodeName = Alphas(9); + ReturnNodeNum = state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(EquipIndex).InletNode; + SupplyNodeNum = state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(EquipIndex).OutletNode; } break; case DataZoneEquipment::ZoneEquipType::ExhaustFan: { // Fan : ZoneExhaust - SupplyNodeName = ""; // ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? May not use + + // SupplyNodeName = ""; // ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? May not use } break; case DataZoneEquipment::ZoneEquipType::HeatPumpWaterHeater: { // WaterHeater : HeatPump - SupplyNodeName = Alphas(8); - ReturnNodeName = Alphas(7); + ReturnNodeNum = state.dataWaterThermalTanks->HPWaterHeater(EquipIndex).HeatPumpAirInletNode; + SupplyNodeNum = state.dataWaterThermalTanks->HPWaterHeater(EquipIndex).HeatPumpAirOutletNode; // For AirTerminals, find matching return node later } break; case DataZoneEquipment::ZoneEquipType::AirTerminalDualDuctConstantVolume: { // AirTerminal : DualDuct : ConstantVolume - SupplyNodeName = Alphas(1); - ReturnNodeName = ""; + // Air teminal components are handled later + // SupplyNodeName = Alphas(1); + // ReturnNodeName = ""; } break; case DataZoneEquipment::ZoneEquipType::AirTerminalDualDuctVAV: { // AirTerminal : DualDuct : VAV - SupplyNodeName = Alphas(1); - ReturnNodeName = ""; + // Air teminal components are handled later + // SupplyNodeName = Alphas(1); + // ReturnNodeName = ""; } break; case DataZoneEquipment::ZoneEquipType::AirTerminalSingleDuctConstantVolumeReheat: { // AirTerminal : SingleDuct : ConstantVolume : Reheat - SupplyNodeName = Alphas(1); - ReturnNodeName = ""; + // Air teminal components are handled later + // SupplyNodeName = Alphas(1); + // ReturnNodeName = ""; } break; case DataZoneEquipment::ZoneEquipType::AirTerminalSingleDuctConstantVolumeNoReheat: { // AirTerminal : SingleDuct : - // ConstantVolume : NoReheat - SupplyNodeName = Alphas(4); - ReturnNodeName = ""; + // Air teminal components are handled later + // SupplyNodeName = Alphas(4); + // ReturnNodeName = ""; } break; case DataZoneEquipment::ZoneEquipType::AirTerminalSingleDuctVAVReheat: { // AirTerminal : SingleDuct : VAV : Reheat - SupplyNodeName = Alphas(1); - ReturnNodeName = ""; + // Air teminal components are handled later + // SupplyNodeName = Alphas(1); + // ReturnNodeName = ""; } break; case DataZoneEquipment::ZoneEquipType::AirTerminalSingleDuctVAVNoReheat: { // AirTerminal : SingleDuct : VAV : NoReheat - SupplyNodeName = Alphas(1); - ReturnNodeName = ""; + // Air teminal components are handled later + // SupplyNodeName = Alphas(1); + // ReturnNodeName = ""; } break; case DataZoneEquipment::ZoneEquipType::AirTerminalSingleDuctSeriesPIUReheat: { // AirTerminal : SingleDuct : SeriesPIU : Reheat - SupplyNodeName = Alphas(1); - ReturnNodeName = ""; + // Air teminal components are handled later + // SupplyNodeName = Alphas(1); + // ReturnNodeName = ""; } break; case DataZoneEquipment::ZoneEquipType::AirTerminalSingleDuctParallelPIUReheat: { // AirTerminal : SingleDuct : ParallelPIU : Reheat - SupplyNodeName = Alphas(1); - ReturnNodeName = ""; + // Air teminal components are handled later + // SupplyNodeName = Alphas(1); + // ReturnNodeName = ""; } break; case DataZoneEquipment::ZoneEquipType::AirTerminalSingleDuctCAVFourPipeInduction: { // AirTerminal : SingleDuct : - // ConstantVolume : FourPipeInduction - SupplyNodeName = Alphas(1); - ReturnNodeName = ""; + // Air teminal components are handled later + // ConstantVolume : FourPipeInduction + // SupplyNodeName = Alphas(1); + // ReturnNodeName = ""; } break; case DataZoneEquipment::ZoneEquipType::AirTerminalSingleDuctVAVReheatVariableSpeedFan: { // AirTerminal : SingleDuct : VAV - // : Reheat : VariableSpeedFan - SupplyNodeName = Alphas(1); - ReturnNodeName = ""; + // Air teminal components are handled later + // : Reheat : VariableSpeedFan + // SupplyNodeName = Alphas(1); + // ReturnNodeName = ""; } break; case DataZoneEquipment::ZoneEquipType::AirTerminalSingleDuctVAVHeatAndCoolReheat: { // AirTerminal : SingleDuct : VAV : // HeatAndCool : Reheat - SupplyNodeName = Alphas(1); - ReturnNodeName = ""; + // Air teminal components are handled later + // SupplyNodeName = Alphas(1); + // ReturnNodeName = ""; } break; case DataZoneEquipment::ZoneEquipType::AirTerminalSingleDuctVAVHeatAndCoolNoReheat: { // AirTerminal : SingleDuct : VAV : // HeatAndCool : NoReheat - SupplyNodeName = Alphas(1); - ReturnNodeName = ""; + // Air teminal components are handled later + // SupplyNodeName = Alphas(1); + // ReturnNodeName = ""; } break; case DataZoneEquipment::ZoneEquipType::AirTerminalSingleDuctConstantVolumeCooledBeam: { // AirTerminal : SingleDuct : // ConstantVolume : CooledBeam - SupplyNodeName = Alphas(5); - ReturnNodeName = ""; + // Air teminal components are handled later + // SupplyNodeName = Alphas(5); + // ReturnNodeName = ""; } break; case DataZoneEquipment::ZoneEquipType::AirTerminalDualDuctVAVOutdoorAir: { // AirTerminal : DualDuct : VAV : OutdoorAir - SupplyNodeName = Alphas(3); - ReturnNodeName = ""; + // Air teminal components are handled later + // SupplyNodeName = Alphas(3); + // ReturnNodeName = ""; } break; case DataZoneEquipment::ZoneEquipType::AirLoopHVACReturnAir: { // AirLoopHVACReturnAir - SupplyNodeName = Alphas(4); // - ReturnNodeName = ""; // + // Air teminal components are handled later + // SupplyNodeName = Alphas(4); // + // ReturnNodeName = ""; // } break; default: { assert(false); @@ -2904,14 +2903,15 @@ namespace RoomAir { } // switch - // Need to find a better to handle allocate and deallocate - if (MaxAlphas > NumAlphas) { - Alphas.deallocate(); + if (SupplyNodeNum > 0) { + SupplyNodeName = state.dataLoopNodes->NodeID(SupplyNodeNum); + EquipFind = true; } - if (MaxNums > NumNumbers) { - Numbers.deallocate(); + if (ReturnNodeNum > 0) { + ReturnNodeName = state.dataLoopNodes->NodeID(ReturnNodeNum); + } else { + ReturnNodeName = ""; } - return EquipFind; } diff --git a/src/EnergyPlus/RoomAirModelManager.hh b/src/EnergyPlus/RoomAirModelManager.hh index 3b5f3b9751d..bf030e7fdd0 100644 --- a/src/EnergyPlus/RoomAirModelManager.hh +++ b/src/EnergyPlus/RoomAirModelManager.hh @@ -89,7 +89,7 @@ namespace RoomAir { std::string const &EquipName, // Equipment Name std::string &SupplyNodeName, // Supply node name std::string &ReturnNodeName, // Return node name - int TotNumEquip, // how many of this equipment type + int EquipIndex, // Equipment index DataZoneEquipment::ZoneEquipType zoneEquipType); // equipment type number } // namespace RoomAir diff --git a/tst/EnergyPlus/unit/RoomAirflowNetwork.unit.cc b/tst/EnergyPlus/unit/RoomAirflowNetwork.unit.cc index 17e86e9a5c0..7393e698b6d 100644 --- a/tst/EnergyPlus/unit/RoomAirflowNetwork.unit.cc +++ b/tst/EnergyPlus/unit/RoomAirflowNetwork.unit.cc @@ -53,6 +53,7 @@ // EnergyPlus Headers #include "Fixtures/EnergyPlusFixture.hh" #include +#include #include #include #include @@ -67,14 +68,34 @@ #include #include #include +#include +#include +#include +#include #include +#include +#include +#include #include #include +#include +#include +#include #include +#include #include #include +#include #include #include +#include +#include +#include +#include +#include +#include +#include +#include #include #include @@ -579,3 +600,142 @@ TEST_F(EnergyPlusFixture, RoomAirInternalGains_InternalHeatGains_Check) EXPECT_TRUE(compare_err_stream(error_string, true)); } + +TEST_F(EnergyPlusFixture, RoomAirflowNetwork_CheckEquipName_Test) +{ + // Test #6321 + bool check; + std::string const EquipName = "ZoneEquip"; + std::string SupplyNodeName; + std::string ReturnNodeName; + int TotNumEquip = 1; + int EquipIndex = 1; // Equipment index + DataZoneEquipment::ZoneEquipType zoneEquipType; + + state->dataLoopNodes->NodeID.allocate(2); + state->dataLoopNodes->Node.allocate(2); + state->dataLoopNodes->NodeID(1) = "SupplyNode"; + state->dataLoopNodes->NodeID(2) = "ReturnNode"; + + state->dataHVACVarRefFlow->GetVRFInputFlag = false; + state->dataHVACVarRefFlow->VRFTU.allocate(1); + state->dataHVACVarRefFlow->VRFTU(1).VRFTUOutletNodeNum = 1; + + zoneEquipType = DataZoneEquipment::ZoneEquipType::VariableRefrigerantFlowTerminal; + state->dataHVACVarRefFlow->NumVRFTU = 1; + check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, EquipIndex, zoneEquipType); + if (check) { + EXPECT_EQ("SupplyNode", SupplyNodeName); + } + + zoneEquipType = DataZoneEquipment::ZoneEquipType::EnergyRecoveryVentilator; + state->dataFans->GetFanInputFlag = false; + state->dataFans->Fan.allocate(1); + state->dataFans->Fan(1).FanName = EquipName; + state->dataFans->Fan(1).OutletNodeNum = 1; + check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, EquipIndex, zoneEquipType); + if (check) { + EXPECT_EQ("SupplyNode", SupplyNodeName); + } + + zoneEquipType = DataZoneEquipment::ZoneEquipType::FourPipeFanCoil; + state->dataFanCoilUnits->FanCoil.allocate(1); + state->dataFanCoilUnits->FanCoil(EquipIndex).AirOutNode = 1; + state->dataFanCoilUnits->FanCoil(EquipIndex).AirInNode = 2; + check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, EquipIndex, zoneEquipType); + if (check) { + EXPECT_EQ("SupplyNode", SupplyNodeName); + EXPECT_EQ("ReturnNode", ReturnNodeName); + } + + zoneEquipType = DataZoneEquipment::ZoneEquipType::OutdoorAirUnit; + state->dataOutdoorAirUnit->OutAirUnit.allocate(1); + state->dataOutdoorAirUnit->OutAirUnit(EquipIndex).AirOutletNode = 1; + state->dataOutdoorAirUnit->OutAirUnit(EquipIndex).AirInletNode = 2; + check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, EquipIndex, zoneEquipType); + if (check) { + EXPECT_EQ("SupplyNode", SupplyNodeName); + EXPECT_EQ("ReturnNode", ReturnNodeName); + } + + zoneEquipType = DataZoneEquipment::ZoneEquipType::PackagedTerminalAirConditioner; + UnitarySystems::UnitarySys thisUnit; + state->dataUnitarySystems->unitarySys.push_back(thisUnit); + state->dataUnitarySystems->getInputOnceFlag = false; + state->dataUnitarySystems->unitarySys[EquipIndex - 1].Name = EquipName; + state->dataUnitarySystems->numUnitarySystems = 1; + state->dataUnitarySystems->unitarySys[EquipIndex - 1].AirOutNode = 1; + state->dataUnitarySystems->unitarySys[EquipIndex - 1].AirInNode = 2; + check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, EquipIndex, zoneEquipType); + if (check) { + EXPECT_EQ("SupplyNode", SupplyNodeName); + EXPECT_EQ("ReturnNode", ReturnNodeName); + } + + zoneEquipType = DataZoneEquipment::ZoneEquipType::PackagedTerminalHeatPump; + // UnitarySystems::UnitarySys thisUnit; + // state->dataUnitarySystems->unitarySys.push_back(thisUnit); + state->dataUnitarySystems->getInputOnceFlag = false; + state->dataUnitarySystems->unitarySys[EquipIndex - 1].Name = EquipName; + state->dataUnitarySystems->numUnitarySystems = 1; + state->dataUnitarySystems->unitarySys[EquipIndex - 1].AirOutNode = 1; + state->dataUnitarySystems->unitarySys[EquipIndex - 1].AirInNode = 2; + check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, EquipIndex, zoneEquipType); + if (check) { + EXPECT_EQ("SupplyNode", SupplyNodeName); + EXPECT_EQ("ReturnNode", ReturnNodeName); + } + zoneEquipType = DataZoneEquipment::ZoneEquipType::PackagedTerminalHeatPumpWaterToAir; + // UnitarySystems::UnitarySys thisUnit; + // state->dataUnitarySystems->unitarySys.push_back(thisUnit); + state->dataUnitarySystems->getInputOnceFlag = false; + state->dataUnitarySystems->unitarySys[EquipIndex - 1].Name = EquipName; + state->dataUnitarySystems->numUnitarySystems = 1; + state->dataUnitarySystems->unitarySys[EquipIndex - 1].AirOutNode = 1; + state->dataUnitarySystems->unitarySys[EquipIndex - 1].AirInNode = 2; + check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, EquipIndex, zoneEquipType); + if (check) { + EXPECT_EQ("SupplyNode", SupplyNodeName); + EXPECT_EQ("ReturnNode", ReturnNodeName); + } + + zoneEquipType = DataZoneEquipment::ZoneEquipType::UnitHeater; + state->dataUnitHeaters->UnitHeat.allocate(1); + state->dataUnitHeaters->UnitHeat(EquipIndex).AirOutNode = 1; + state->dataUnitHeaters->UnitHeat(EquipIndex).AirInNode = 2; + check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, EquipIndex, zoneEquipType); + if (check) { + EXPECT_EQ("SupplyNode", SupplyNodeName); + EXPECT_EQ("ReturnNode", ReturnNodeName); + } + + zoneEquipType = DataZoneEquipment::ZoneEquipType::UnitVentilator; + state->dataUnitVentilators->UnitVent.allocate(1); + state->dataUnitVentilators->UnitVent(EquipIndex).AirOutNode = 1; + state->dataUnitVentilators->UnitVent(EquipIndex).AirInNode = 2; + check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, EquipIndex, zoneEquipType); + if (check) { + EXPECT_EQ("SupplyNode", SupplyNodeName); + EXPECT_EQ("ReturnNode", ReturnNodeName); + } + + zoneEquipType = DataZoneEquipment::ZoneEquipType::VentilatedSlab; + state->dataVentilatedSlab->VentSlab.allocate(1); + state->dataVentilatedSlab->VentSlab(EquipIndex).ZoneAirInNode = 1; + state->dataVentilatedSlab->VentSlab(EquipIndex).ReturnAirNode = 2; + check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, EquipIndex, zoneEquipType); + if (check) { + EXPECT_EQ("SupplyNode", SupplyNodeName); + EXPECT_EQ("ReturnNode", ReturnNodeName); + } + + zoneEquipType = DataZoneEquipment::ZoneEquipType::WindowAirConditioner; + state->dataWindowAC->WindAC.allocate(1); + state->dataWindowAC->WindAC(EquipIndex).AirOutNode = 1; + state->dataWindowAC->WindAC(EquipIndex).AirInNode = 2; + check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, EquipIndex, zoneEquipType); + if (check) { + EXPECT_EQ("SupplyNode", SupplyNodeName); + EXPECT_EQ("ReturnNode", ReturnNodeName); + } +} From c7628e5035fcafe238083c5b596c57de8ec72821 Mon Sep 17 00:00:00 2001 From: Lixing Gu Date: Thu, 28 Mar 2024 11:27:28 -0400 Subject: [PATCH 02/68] Clang format --- tst/EnergyPlus/unit/RoomAirflowNetwork.unit.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tst/EnergyPlus/unit/RoomAirflowNetwork.unit.cc b/tst/EnergyPlus/unit/RoomAirflowNetwork.unit.cc index 7393e698b6d..c2fa7ba3407 100644 --- a/tst/EnergyPlus/unit/RoomAirflowNetwork.unit.cc +++ b/tst/EnergyPlus/unit/RoomAirflowNetwork.unit.cc @@ -72,8 +72,8 @@ #include #include #include -#include #include +#include #include #include #include @@ -89,14 +89,14 @@ #include #include #include -#include #include #include +#include #include #include #include -#include #include +#include #include using namespace EnergyPlus; From 29251076a079f06e841baf55a75ec3ecf35b8219 Mon Sep 17 00:00:00 2001 From: Lixing Gu Date: Thu, 28 Mar 2024 15:00:43 -0400 Subject: [PATCH 03/68] Different node names --- .../unit/RoomAirflowNetwork.unit.cc | 58 +++++++++++++------ 1 file changed, 39 insertions(+), 19 deletions(-) diff --git a/tst/EnergyPlus/unit/RoomAirflowNetwork.unit.cc b/tst/EnergyPlus/unit/RoomAirflowNetwork.unit.cc index c2fa7ba3407..4d789a28e83 100644 --- a/tst/EnergyPlus/unit/RoomAirflowNetwork.unit.cc +++ b/tst/EnergyPlus/unit/RoomAirflowNetwork.unit.cc @@ -628,6 +628,8 @@ TEST_F(EnergyPlusFixture, RoomAirflowNetwork_CheckEquipName_Test) EXPECT_EQ("SupplyNode", SupplyNodeName); } + state->dataLoopNodes->NodeID(1) = "SupplyNode1"; + state->dataLoopNodes->NodeID(2) = "ReturnNode1"; zoneEquipType = DataZoneEquipment::ZoneEquipType::EnergyRecoveryVentilator; state->dataFans->GetFanInputFlag = false; state->dataFans->Fan.allocate(1); @@ -635,29 +637,35 @@ TEST_F(EnergyPlusFixture, RoomAirflowNetwork_CheckEquipName_Test) state->dataFans->Fan(1).OutletNodeNum = 1; check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, EquipIndex, zoneEquipType); if (check) { - EXPECT_EQ("SupplyNode", SupplyNodeName); + EXPECT_EQ("SupplyNode1", SupplyNodeName); } + state->dataLoopNodes->NodeID(1) = "SupplyNode2"; + state->dataLoopNodes->NodeID(2) = "ReturnNode2"; zoneEquipType = DataZoneEquipment::ZoneEquipType::FourPipeFanCoil; state->dataFanCoilUnits->FanCoil.allocate(1); state->dataFanCoilUnits->FanCoil(EquipIndex).AirOutNode = 1; state->dataFanCoilUnits->FanCoil(EquipIndex).AirInNode = 2; check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, EquipIndex, zoneEquipType); if (check) { - EXPECT_EQ("SupplyNode", SupplyNodeName); - EXPECT_EQ("ReturnNode", ReturnNodeName); + EXPECT_EQ("SupplyNode2", SupplyNodeName); + EXPECT_EQ("ReturnNode2", ReturnNodeName); } + state->dataLoopNodes->NodeID(1) = "SupplyNode3"; + state->dataLoopNodes->NodeID(2) = "ReturnNode3"; zoneEquipType = DataZoneEquipment::ZoneEquipType::OutdoorAirUnit; state->dataOutdoorAirUnit->OutAirUnit.allocate(1); state->dataOutdoorAirUnit->OutAirUnit(EquipIndex).AirOutletNode = 1; state->dataOutdoorAirUnit->OutAirUnit(EquipIndex).AirInletNode = 2; check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, EquipIndex, zoneEquipType); if (check) { - EXPECT_EQ("SupplyNode", SupplyNodeName); - EXPECT_EQ("ReturnNode", ReturnNodeName); + EXPECT_EQ("SupplyNode3", SupplyNodeName); + EXPECT_EQ("ReturnNode3", ReturnNodeName); } + state->dataLoopNodes->NodeID(1) = "SupplyNode4"; + state->dataLoopNodes->NodeID(2) = "ReturnNode4"; zoneEquipType = DataZoneEquipment::ZoneEquipType::PackagedTerminalAirConditioner; UnitarySystems::UnitarySys thisUnit; state->dataUnitarySystems->unitarySys.push_back(thisUnit); @@ -668,10 +676,12 @@ TEST_F(EnergyPlusFixture, RoomAirflowNetwork_CheckEquipName_Test) state->dataUnitarySystems->unitarySys[EquipIndex - 1].AirInNode = 2; check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, EquipIndex, zoneEquipType); if (check) { - EXPECT_EQ("SupplyNode", SupplyNodeName); - EXPECT_EQ("ReturnNode", ReturnNodeName); + EXPECT_EQ("SupplyNode4", SupplyNodeName); + EXPECT_EQ("ReturnNode4", ReturnNodeName); } + state->dataLoopNodes->NodeID(1) = "SupplyNode5"; + state->dataLoopNodes->NodeID(2) = "ReturnNode5"; zoneEquipType = DataZoneEquipment::ZoneEquipType::PackagedTerminalHeatPump; // UnitarySystems::UnitarySys thisUnit; // state->dataUnitarySystems->unitarySys.push_back(thisUnit); @@ -682,9 +692,11 @@ TEST_F(EnergyPlusFixture, RoomAirflowNetwork_CheckEquipName_Test) state->dataUnitarySystems->unitarySys[EquipIndex - 1].AirInNode = 2; check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, EquipIndex, zoneEquipType); if (check) { - EXPECT_EQ("SupplyNode", SupplyNodeName); - EXPECT_EQ("ReturnNode", ReturnNodeName); + EXPECT_EQ("SupplyNode5", SupplyNodeName); + EXPECT_EQ("ReturnNode5", ReturnNodeName); } + state->dataLoopNodes->NodeID(1) = "SupplyNode6"; + state->dataLoopNodes->NodeID(2) = "ReturnNode6"; zoneEquipType = DataZoneEquipment::ZoneEquipType::PackagedTerminalHeatPumpWaterToAir; // UnitarySystems::UnitarySys thisUnit; // state->dataUnitarySystems->unitarySys.push_back(thisUnit); @@ -695,47 +707,55 @@ TEST_F(EnergyPlusFixture, RoomAirflowNetwork_CheckEquipName_Test) state->dataUnitarySystems->unitarySys[EquipIndex - 1].AirInNode = 2; check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, EquipIndex, zoneEquipType); if (check) { - EXPECT_EQ("SupplyNode", SupplyNodeName); - EXPECT_EQ("ReturnNode", ReturnNodeName); + EXPECT_EQ("SupplyNode6", SupplyNodeName); + EXPECT_EQ("ReturnNode6", ReturnNodeName); } + state->dataLoopNodes->NodeID(1) = "SupplyNode7"; + state->dataLoopNodes->NodeID(2) = "ReturnNode7"; zoneEquipType = DataZoneEquipment::ZoneEquipType::UnitHeater; state->dataUnitHeaters->UnitHeat.allocate(1); state->dataUnitHeaters->UnitHeat(EquipIndex).AirOutNode = 1; state->dataUnitHeaters->UnitHeat(EquipIndex).AirInNode = 2; check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, EquipIndex, zoneEquipType); if (check) { - EXPECT_EQ("SupplyNode", SupplyNodeName); - EXPECT_EQ("ReturnNode", ReturnNodeName); + EXPECT_EQ("SupplyNode7", SupplyNodeName); + EXPECT_EQ("ReturnNode7", ReturnNodeName); } + state->dataLoopNodes->NodeID(1) = "SupplyNode8"; + state->dataLoopNodes->NodeID(2) = "ReturnNode8"; zoneEquipType = DataZoneEquipment::ZoneEquipType::UnitVentilator; state->dataUnitVentilators->UnitVent.allocate(1); state->dataUnitVentilators->UnitVent(EquipIndex).AirOutNode = 1; state->dataUnitVentilators->UnitVent(EquipIndex).AirInNode = 2; check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, EquipIndex, zoneEquipType); if (check) { - EXPECT_EQ("SupplyNode", SupplyNodeName); - EXPECT_EQ("ReturnNode", ReturnNodeName); + EXPECT_EQ("SupplyNode8", SupplyNodeName); + EXPECT_EQ("ReturnNode8", ReturnNodeName); } + state->dataLoopNodes->NodeID(1) = "SupplyNode9"; + state->dataLoopNodes->NodeID(2) = "ReturnNode9"; zoneEquipType = DataZoneEquipment::ZoneEquipType::VentilatedSlab; state->dataVentilatedSlab->VentSlab.allocate(1); state->dataVentilatedSlab->VentSlab(EquipIndex).ZoneAirInNode = 1; state->dataVentilatedSlab->VentSlab(EquipIndex).ReturnAirNode = 2; check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, EquipIndex, zoneEquipType); if (check) { - EXPECT_EQ("SupplyNode", SupplyNodeName); - EXPECT_EQ("ReturnNode", ReturnNodeName); + EXPECT_EQ("SupplyNode9", SupplyNodeName); + EXPECT_EQ("ReturnNode9", ReturnNodeName); } + state->dataLoopNodes->NodeID(1) = "SupplyNode10"; + state->dataLoopNodes->NodeID(2) = "ReturnNode10"; zoneEquipType = DataZoneEquipment::ZoneEquipType::WindowAirConditioner; state->dataWindowAC->WindAC.allocate(1); state->dataWindowAC->WindAC(EquipIndex).AirOutNode = 1; state->dataWindowAC->WindAC(EquipIndex).AirInNode = 2; check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, EquipIndex, zoneEquipType); if (check) { - EXPECT_EQ("SupplyNode", SupplyNodeName); - EXPECT_EQ("ReturnNode", ReturnNodeName); + EXPECT_EQ("SupplyNode10", SupplyNodeName); + EXPECT_EQ("ReturnNode10", ReturnNodeName); } } From 4f79ab334f4ad91c995604c12adef518d19686a5 Mon Sep 17 00:00:00 2001 From: Tanaya Mankad Date: Tue, 16 Apr 2024 11:02:01 -0600 Subject: [PATCH 04/68] Adjust dry-bulb temperature of mixed air if the air state is unphysical. --- src/EnergyPlus/MixedAir.cc | 9 +++ tst/EnergyPlus/unit/MixedAir.unit.cc | 86 ++++++++++++++++++++++++++++ 2 files changed, 95 insertions(+) diff --git a/src/EnergyPlus/MixedAir.cc b/src/EnergyPlus/MixedAir.cc index a3193ac1013..d066d6e20bf 100644 --- a/src/EnergyPlus/MixedAir.cc +++ b/src/EnergyPlus/MixedAir.cc @@ -4693,6 +4693,15 @@ void CalcOAMixer(EnergyPlusData &state, int const OAMixerNum) // Mixed air temperature is calculated from the mixed air enthalpy and humidity ratio. state.dataMixedAir->OAMixer(OAMixerNum).MixTemp = Psychrometrics::PsyTdbFnHW(state.dataMixedAir->OAMixer(OAMixerNum).MixEnthalpy, state.dataMixedAir->OAMixer(OAMixerNum).MixHumRat); + + // Check for saturation temperature > dry-bulb temperature and modify temperature at constant enthalpy + auto T_sat = + Psychrometrics::PsyTsatFnHPb(state, state.dataMixedAir->OAMixer(OAMixerNum).MixEnthalpy, state.dataMixedAir->OAMixer(OAMixerNum).MixPressure); + if (state.dataMixedAir->OAMixer(OAMixerNum).MixTemp < T_sat) { + state.dataMixedAir->OAMixer(OAMixerNum).MixTemp = T_sat; + state.dataMixedAir->OAMixer(OAMixerNum).MixHumRat = + Psychrometrics::PsyWFnTdbH(state, T_sat, state.dataMixedAir->OAMixer(OAMixerNum).MixEnthalpy); + } } // End of Calculation/Simulation Section of the Module diff --git a/tst/EnergyPlus/unit/MixedAir.unit.cc b/tst/EnergyPlus/unit/MixedAir.unit.cc index 77793bce9c7..0992973dc5d 100644 --- a/tst/EnergyPlus/unit/MixedAir.unit.cc +++ b/tst/EnergyPlus/unit/MixedAir.unit.cc @@ -7666,4 +7666,90 @@ TEST_F(EnergyPlusFixture, OAController_LowExhaustMassFlowTest) EXPECT_TRUE(AirLoopCntrlInfo.HeatingActiveFlag); EXPECT_EQ(1, curOACntrl.HRHeatingCoilActive); } + +TEST_F(EnergyPlusFixture, MixedAir_TemperatureError) +{ + std::string const idf_objects = delimited_string({ + " OutdoorAir:NodeList,", + " Outdoor Air Inlet; !-Node or NodeList Name 1", + + " Controller:OutdoorAir,", + " OA Controller 1, !- Name", + " Relief Air Outlet Node, !- Relief Air Outlet Node Name", + " Air Loop Inlet Node, !- Return Air Node Name", + " Mixed Air Node, !- Mixed Air Node Name", + " Outdoor Air Inlet, !- Actuator Node Name", + " autosize, !- Minimum Outdoor Air Flow Rate {m3/s}", + " autosize, !- Maximum Outdoor Air Flow Rate {m3/s}", + " DifferentialDryBulb, !- Economizer Control Type", // Economizer should open for this one, so OA flow should be > min OA + " ModulateFlow, !- Economizer Control Action Type", + " 20, !- Economizer Maximum Limit Dry-Bulb Temperature {C}", + " , !- Economizer Maximum Limit Enthalpy {J/kg}", + " , !- Economizer Maximum Limit Dewpoint Temperature {C}", + " , !- Electronic Enthalpy Limit Curve Name", + " , !- Economizer Minimum Limit Dry-Bulb Temperature {C}", + " NoLockout, !- Lockout Type", // No lockout + " FixedMinimum, !- Minimum Limit Type", + " , !- Minimum Outdoor Air Schedule Name", + " , !- Minimum Fraction of Outdoor Air Schedule Name", + " , !- Maximum Fraction of Outdoor Air Schedule Name", + " , !- Mechanical Ventilation Controller Name", + " , !- Time of Day Economizer Control Schedule Name", + " No, !- High Humidity Control", + " , !- Humidistat Control Zone Name", + " , !- High Humidity Outdoor Air Flow Ratio", + " No; !- Control High Indoor Humidity Based on Outdoor Humidity Ratio", + + " OutdoorAir:Mixer,", + " OA Mixer, !- Name", + " Mixed Air Node, !- Mixed Air Node Name", + " Outdoor Air Inlet, !- Outdoor Air Stream Node Name", + " Relief Air Outlet Node, !- Relief Air Stream Node Name", + " Air Loop Inlet Node; !- Return Air Stream Node Name", + + " AirLoopHVAC:ControllerList,", + " OA Sys 1 controller, !- Name", + " Controller:OutdoorAir, !- Controller 1 Object Type", + " OA Controller 1; !- Controller 1 Name", + + " AirLoopHVAC:OutdoorAirSystem:EquipmentList,", + " OA Sys 1 Equipment list, !- Name", + " OutdoorAir:Mixer, !- Component 2 Object Type", + " OA Mixer; !- Component 2 Name", + + " AirLoopHVAC:OutdoorAirSystem,", + " OA Sys 1, !- Name", + " OA Sys 1 controller, !- Controller List Name", + " OA Sys 1 Equipment list; !- Outdoor Air Equipment List Name", + }); + + ASSERT_TRUE(process_idf(idf_objects)); + GetOAControllerInputs(*state); + + EXPECT_EQ(1, GetNumOAMixers(*state)); + + auto return_node = state->dataMixedAir->OAMixer(1).RetNode; + auto outdoor_air_node = state->dataMixedAir->OAMixer(1).InletNode; + + state->dataLoopNodes->Node(outdoor_air_node).Temp = -17.3; + state->dataLoopNodes->Node(outdoor_air_node).HumRat = 0.0008; + state->dataLoopNodes->Node(outdoor_air_node).Enthalpy = -15312; + state->dataLoopNodes->Node(outdoor_air_node).Press = 99063; + state->dataLoopNodes->Node(outdoor_air_node).MassFlowRate = 0.1223; + state->dataLoopNodes->Node(return_node).Temp = 20.0; + state->dataLoopNodes->Node(return_node).HumRat = 0.0146; + state->dataLoopNodes->Node(return_node).Enthalpy = 57154; + state->dataLoopNodes->Node(return_node).Press = 99063; + state->dataLoopNodes->Node(return_node).MassFlowRate = 0.2923; + + MixedAir::SimOAMixer( + *state, state->dataAirLoop->OutsideAirSys(1).ComponentName(1), state->dataAirLoop->OutsideAirSys(1).ComponentIndex(1)); + + auto T_sat = Psychrometrics::PsyTsatFnHPb( + *state, state->dataMixedAir->OAMixer(1).MixEnthalpy, state->dataMixedAir->OAMixer(1).MixPressure); + + // T_db must be >= T_sat at the mixed-air node to remain physical + EXPECT_TRUE(state->dataMixedAir->OAMixer(1).MixTemp >= T_sat); +} + } // namespace EnergyPlus From ab7cdb48f2ffde91816b3679f8bba72618e5fbcc Mon Sep 17 00:00:00 2001 From: Lixing Gu Date: Thu, 2 May 2024 15:48:08 -0400 Subject: [PATCH 05/68] Address comments --- src/EnergyPlus/FanCoilUnits.cc | 22 ++++++ src/EnergyPlus/FanCoilUnits.hh | 2 + src/EnergyPlus/PurchasedAirManager.cc | 15 ++++ src/EnergyPlus/PurchasedAirManager.hh | 2 + src/EnergyPlus/RoomAirModelManager.cc | 49 +++++++------ src/EnergyPlus/UnitHeater.cc | 33 +++++++++ src/EnergyPlus/UnitHeater.hh | 3 + src/EnergyPlus/VentilatedSlab.cc | 31 ++++++++ src/EnergyPlus/VentilatedSlab.hh | 4 + src/EnergyPlus/WaterThermalTanks.cc | 30 ++++++++ src/EnergyPlus/WaterThermalTanks.hh | 4 + src/EnergyPlus/ZoneDehumidifier.cc | 30 ++++++++ src/EnergyPlus/ZoneDehumidifier.hh | 4 + .../unit/RoomAirflowNetwork.unit.cc | 73 +++++++++++++++++++ 14 files changed, 278 insertions(+), 24 deletions(-) diff --git a/src/EnergyPlus/FanCoilUnits.cc b/src/EnergyPlus/FanCoilUnits.cc index a0aee8a8243..f2895c5f470 100644 --- a/src/EnergyPlus/FanCoilUnits.cc +++ b/src/EnergyPlus/FanCoilUnits.cc @@ -4221,6 +4221,28 @@ namespace FanCoilUnits { return 0; } + int GetFanCoilAirInNode(EnergyPlusData &state, int const FanCoilNum) + { + + // FUNCTION INFORMATION: + // AUTHOR B Griffith + // DATE WRITTEN Dec 2006 + + // PURPOSE OF THIS FUNCTION: + // lookup function for OA inlet node for ventilation rate reporting + + if (state.dataFanCoilUnits->GetFanCoilInputFlag) { + GetFanCoilUnits(state); + state.dataFanCoilUnits->GetFanCoilInputFlag = false; + } + + if (FanCoilNum > 0 && FanCoilNum <= state.dataFanCoilUnits->NumFanCoils) { + return state.dataFanCoilUnits->FanCoil(FanCoilNum).AirInNode; + } + + return 0; + } + int GetFanCoilOutAirNode(EnergyPlusData &state, int const FanCoilNum) { diff --git a/src/EnergyPlus/FanCoilUnits.hh b/src/EnergyPlus/FanCoilUnits.hh index 300a6dd400a..931b397dbe6 100644 --- a/src/EnergyPlus/FanCoilUnits.hh +++ b/src/EnergyPlus/FanCoilUnits.hh @@ -322,6 +322,8 @@ namespace FanCoilUnits { int GetFanCoilZoneInletAirNode(EnergyPlusData &state, int FanCoilNum); + int GetFanCoilAirInNode(EnergyPlusData &state, int FanCoilNum); + int GetFanCoilOutAirNode(EnergyPlusData &state, int FanCoilNum); int GetFanCoilReturnAirNode(EnergyPlusData &state, int FanCoilNum); diff --git a/src/EnergyPlus/PurchasedAirManager.cc b/src/EnergyPlus/PurchasedAirManager.cc index 162961ae20f..11788a042cc 100644 --- a/src/EnergyPlus/PurchasedAirManager.cc +++ b/src/EnergyPlus/PurchasedAirManager.cc @@ -3327,6 +3327,21 @@ int GetPurchasedAirReturnAirNode(EnergyPlusData &state, int const PurchAirNum) return GetPurchasedAirReturnAirNode; } +int GetPurchasedAirZoneExhaustAirNode(EnergyPlusData &state, int PurchAirNum) +{ + if (state.dataPurchasedAirMgr->GetPurchAirInputFlag) { + GetPurchasedAir(state); + state.dataPurchasedAirMgr->GetPurchAirInputFlag = false; + } + + int GetPurchasedAirZoneExhaustAirNode = 0; + if (PurchAirNum > 0 && PurchAirNum <= state.dataPurchasedAirMgr->NumPurchAir) { + GetPurchasedAirZoneExhaustAirNode = state.dataPurchasedAirMgr->PurchAir(PurchAirNum).ZoneExhaustAirNodeNum; + } + + return GetPurchasedAirZoneExhaustAirNode; +} + Real64 GetPurchasedAirMixedAirTemp(EnergyPlusData &state, int const PurchAirNum) { diff --git a/src/EnergyPlus/PurchasedAirManager.hh b/src/EnergyPlus/PurchasedAirManager.hh index d2351e18c95..b3ab5c618fc 100644 --- a/src/EnergyPlus/PurchasedAirManager.hh +++ b/src/EnergyPlus/PurchasedAirManager.hh @@ -379,6 +379,8 @@ namespace PurchasedAirManager { int GetPurchasedAirReturnAirNode(EnergyPlusData &state, int PurchAirNum); + int GetPurchasedAirZoneExhaustAirNode(EnergyPlusData &state, int PurchAirNum); + Real64 GetPurchasedAirMixedAirTemp(EnergyPlusData &state, int PurchAirNum); Real64 GetPurchasedAirMixedAirHumRat(EnergyPlusData &state, int PurchAirNum); diff --git a/src/EnergyPlus/RoomAirModelManager.cc b/src/EnergyPlus/RoomAirModelManager.cc index 4c968a81d1e..96f459c6e09 100644 --- a/src/EnergyPlus/RoomAirModelManager.cc +++ b/src/EnergyPlus/RoomAirModelManager.cc @@ -1262,7 +1262,7 @@ namespace RoomAir { int TotNumOfRAFNNodeGainsLists; int TotNumOfRAFNNodeHVACLists; int TotNumEquip; - bool IntEquipError; + bool IntEquipFound; auto &ipsc = state.dataIPShortCut; ipsc->cCurrentModuleObject = "RoomAirSettings:AirflowNetwork"; @@ -1651,19 +1651,20 @@ namespace RoomAir { int EquipIndex = 0; for (int thisZoneEquipNum = 1; thisZoneEquipNum <= state.dataZoneEquip->ZoneEquipList(iZone).NumOfEquipTypes; ++thisZoneEquipNum) { - if (Util::SameString(state.dataZoneEquip->ZoneEquipList(iZone).EquipName(thisZoneEquipNum), roomAFNNodeHVAC.Name)) { + if (Util::SameString(state.dataZoneEquip->ZoneEquipList(iZone).EquipName(thisZoneEquipNum), roomAFNNodeHVAC.Name) && + roomAFNNodeHVAC.zoneEquipType == state.dataZoneEquip->ZoneEquipList(iZone).EquipType(thisZoneEquipNum)) { EquipIndex = state.dataZoneEquip->ZoneEquipList(iZone).EquipIndex(thisZoneEquipNum); break; } } - IntEquipError = CheckEquipName(state, + IntEquipFound = CheckEquipName(state, roomAFNNodeHVAC.Name, roomAFNNodeHVAC.SupplyNodeName, roomAFNNodeHVAC.ReturnNodeName, EquipIndex, roomAFNNodeHVAC.zoneEquipType); - if (!IntEquipError) { + if (!IntEquipFound) { ShowSevereError(state, format("GetRoomAirflowNetworkData: Invalid {} = {}", ipsc->cAlphaFieldNames(3 + (iEquip - 1) * 2), @@ -2732,12 +2733,12 @@ namespace RoomAir { SupplyNodeNum = GetFanOutletNode(state, "Fan:OnOff", EquipName, errorfound); } break; case DataZoneEquipment::ZoneEquipType::FourPipeFanCoil: { // ZoneHVAC : FourPipeFanCoil - SupplyNodeNum = state.dataFanCoilUnits->FanCoil(EquipIndex).AirOutNode; - ReturnNodeNum = state.dataFanCoilUnits->FanCoil(EquipIndex).AirInNode; + SupplyNodeNum = FanCoilUnits::GetFanCoilZoneInletAirNode(state,EquipIndex); + ReturnNodeNum = FanCoilUnits::GetFanCoilAirInNode(state, EquipIndex); } break; case DataZoneEquipment::ZoneEquipType::OutdoorAirUnit: { // ZoneHVAC : OutdoorAirUnit - SupplyNodeNum = state.dataOutdoorAirUnit->OutAirUnit(EquipIndex).AirOutletNode; - ReturnNodeNum = state.dataOutdoorAirUnit->OutAirUnit(EquipIndex).AirInletNode; + SupplyNodeNum = OutdoorAirUnit::GetOutdoorAirUnitZoneInletNode(state,EquipIndex); + ReturnNodeNum = OutdoorAirUnit::GetOutdoorAirUnitReturnAirNode(state, EquipIndex); } break; case DataZoneEquipment::ZoneEquipType::PackagedTerminalAirConditioner: { // ZoneHVAC : PackagedTerminalAirConditioner SupplyNodeNum = state.dataUnitarySystems->unitarySys[EquipIndex - 1].getAirOutNode(state, EquipName, 0, errorfound); @@ -2748,24 +2749,24 @@ namespace RoomAir { ReturnNodeNum = state.dataUnitarySystems->unitarySys[EquipIndex - 1].getAirInNode(state, EquipName, 0, errorfound); } break; case DataZoneEquipment::ZoneEquipType::UnitHeater: { // ZoneHVAC : UnitHeater - ReturnNodeNum = state.dataUnitHeaters->UnitHeat(EquipIndex).AirInNode; - SupplyNodeNum = state.dataUnitHeaters->UnitHeat(EquipIndex).AirOutNode; + ReturnNodeNum = UnitHeater::GetUnitHeaterAirInletNode(state, EquipIndex); + SupplyNodeNum = UnitHeater::GetUnitHeaterAirOutletNode(state, EquipIndex); } break; case DataZoneEquipment::ZoneEquipType::UnitVentilator: { // ZoneHVAC : UnitVentilator - ReturnNodeNum = state.dataUnitVentilators->UnitVent(EquipIndex).AirInNode; - SupplyNodeNum = state.dataUnitVentilators->UnitVent(EquipIndex).AirOutNode; + ReturnNodeNum = UnitVentilator::GetUnitVentilatorReturnAirNode(state, EquipIndex); + SupplyNodeNum = UnitVentilator::GetUnitVentilatorZoneInletAirNode(state, EquipIndex); } break; case DataZoneEquipment::ZoneEquipType::VentilatedSlab: { // ZoneHVAC : VentilatedSlab - ReturnNodeNum = state.dataVentilatedSlab->VentSlab(EquipIndex).ReturnAirNode; - SupplyNodeNum = state.dataVentilatedSlab->VentSlab(EquipIndex).ZoneAirInNode; + ReturnNodeNum = VentilatedSlab::GetVentilatedSlabReturnAirNode(state, EquipIndex); + SupplyNodeNum = VentilatedSlab::GetVentilatedSlabZoneAirInNode(state, EquipIndex); } break; case DataZoneEquipment::ZoneEquipType::PackagedTerminalHeatPumpWaterToAir: { // ZoneHVAC : WaterToAirHeatPump SupplyNodeNum = state.dataUnitarySystems->unitarySys[EquipIndex - 1].getAirOutNode(state, EquipName, 0, errorfound); ReturnNodeNum = state.dataUnitarySystems->unitarySys[EquipIndex - 1].getAirInNode(state, EquipName, 0, errorfound); } break; case DataZoneEquipment::ZoneEquipType::WindowAirConditioner: { // ZoneHVAC : WindowAirConditioner - ReturnNodeNum = state.dataWindowAC->WindAC(EquipIndex).AirInNode; - SupplyNodeNum = state.dataWindowAC->WindAC(EquipIndex).AirOutNode; + ReturnNodeNum = WindowAC::GetWindowACReturnAirNode(state, EquipIndex); + SupplyNodeNum = WindowAC::GetWindowACZoneInletAirNode(state, EquipIndex); } break; case DataZoneEquipment::ZoneEquipType::BaseboardElectric: { // ZoneHVAC : Baseboard : RadiantConvective : Electric // convective equipment without node connection. Will handle later @@ -2792,12 +2793,12 @@ namespace RoomAir { SupplyNodeName = ""; } break; case DataZoneEquipment::ZoneEquipType::DehumidifierDX: { // ZoneHVAC : Dehumidifier : DX - ReturnNodeNum = state.dataZoneDehumidifier->ZoneDehumid(EquipIndex).AirInletNodeNum; - SupplyNodeNum = state.dataZoneDehumidifier->ZoneDehumid(EquipIndex).AirOutletNodeNum; + ReturnNodeNum = ZoneDehumidifier::GetZoneDehumidifierAirInletNodeNum(state, EquipIndex); + SupplyNodeNum = ZoneDehumidifier::GetZoneDehumidifierAirOutletNodeNum(state, EquipIndex); } break; case DataZoneEquipment::ZoneEquipType::PurchasedAir: { // ZoneHVAC : IdealLoadsAirSystem - ReturnNodeNum = state.dataPurchasedAirMgr->PurchAir(EquipIndex).ZoneExhaustAirNodeNum; - SupplyNodeNum = state.dataPurchasedAirMgr->PurchAir(EquipIndex).ZoneSupplyAirNodeNum; + ReturnNodeNum = PurchasedAirManager::GetPurchasedAirZoneExhaustAirNode(state, EquipIndex); + SupplyNodeNum = PurchasedAirManager::GetPurchasedAirZoneInletAirNode(state, EquipIndex); } break; case DataZoneEquipment::ZoneEquipType::RefrigerationChillerSet: { // ZoneHVAC : RefrigerationChillerSet // May not apply @@ -2805,16 +2806,16 @@ namespace RoomAir { // ReturnNodeName = Alphas(4); } break; case DataZoneEquipment::ZoneEquipType::HybridEvaporativeCooler: { // ZoneHVAC : HybridUnitaryAirConditioners - ReturnNodeNum = state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(EquipIndex).InletNode; - SupplyNodeNum = state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(EquipIndex).OutletNode; + ReturnNodeNum = HybridUnitaryAirConditioners::GetHybridUnitaryACReturnAirNode(state, EquipIndex); + SupplyNodeNum = HybridUnitaryAirConditioners::GetHybridUnitaryACZoneInletNode(state, EquipIndex); } break; case DataZoneEquipment::ZoneEquipType::ExhaustFan: { // Fan : ZoneExhaust // SupplyNodeName = ""; // ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? May not use } break; case DataZoneEquipment::ZoneEquipType::HeatPumpWaterHeater: { // WaterHeater : HeatPump - ReturnNodeNum = state.dataWaterThermalTanks->HPWaterHeater(EquipIndex).HeatPumpAirInletNode; - SupplyNodeNum = state.dataWaterThermalTanks->HPWaterHeater(EquipIndex).HeatPumpAirOutletNode; + ReturnNodeNum = WaterThermalTanks::GetHeatPumpWaterHeaterAirInletNodeNum(state, EquipIndex); + SupplyNodeNum = WaterThermalTanks::GetHeatPumpWaterHeaterAirOutletNodeNum(state, EquipIndex); // For AirTerminals, find matching return node later } break; case DataZoneEquipment::ZoneEquipType::AirTerminalDualDuctConstantVolume: { // AirTerminal : DualDuct : ConstantVolume diff --git a/src/EnergyPlus/UnitHeater.cc b/src/EnergyPlus/UnitHeater.cc index 89859c180b3..9407d59945b 100644 --- a/src/EnergyPlus/UnitHeater.cc +++ b/src/EnergyPlus/UnitHeater.cc @@ -2023,6 +2023,39 @@ namespace UnitHeater { } } + int GetUnitHeaterAirOutletNode(EnergyPlusData &state, int UnitHeaterNum) + { + // Return value + int GetUnitHeaterAirOutletNode = 0; + + if (state.dataUnitHeaters->GetUnitHeaterInputFlag) { + GetUnitHeaterInput(state); + state.dataUnitHeaters->GetUnitHeaterInputFlag = false; + } + + if (UnitHeaterNum > 0 && UnitHeaterNum <= state.dataUnitHeaters->NumOfUnitHeats) { + GetUnitHeaterAirOutletNode = state.dataUnitHeaters->UnitHeat(UnitHeaterNum).AirOutNode; + } + + return GetUnitHeaterAirOutletNode; + } + + int GetUnitHeaterAirInletNode(EnergyPlusData &state, int UnitHeaterNum) + { + int GetUnitHeaterAirInletNode = 0; + + if (state.dataUnitHeaters->GetUnitHeaterInputFlag) { + GetUnitHeaterInput(state); + state.dataUnitHeaters->GetUnitHeaterInputFlag = false; + } + + if (UnitHeaterNum > 0 && UnitHeaterNum <= state.dataUnitHeaters->NumOfUnitHeats) { + GetUnitHeaterAirInletNode = state.dataUnitHeaters->UnitHeat(UnitHeaterNum).AirInNode; + } + + return GetUnitHeaterAirInletNode; + } + } // namespace UnitHeater } // namespace EnergyPlus diff --git a/src/EnergyPlus/UnitHeater.hh b/src/EnergyPlus/UnitHeater.hh index 33e9950cdf9..f78b2d6f7ae 100644 --- a/src/EnergyPlus/UnitHeater.hh +++ b/src/EnergyPlus/UnitHeater.hh @@ -203,6 +203,9 @@ namespace UnitHeater { void ReportUnitHeater(EnergyPlusData &state, int const UnitHeatNum); // Unit index in unit heater array + int GetUnitHeaterAirOutletNode(EnergyPlusData &state, int OAUnitNum); + + int GetUnitHeaterAirInletNode(EnergyPlusData &state, int OAUnitNum); } // namespace UnitHeater struct UnitHeatersData : BaseGlobalStruct diff --git a/src/EnergyPlus/VentilatedSlab.cc b/src/EnergyPlus/VentilatedSlab.cc index 6e50944431f..1954642d413 100644 --- a/src/EnergyPlus/VentilatedSlab.cc +++ b/src/EnergyPlus/VentilatedSlab.cc @@ -4761,6 +4761,37 @@ namespace VentilatedSlab { } } + int GetVentilatedSlabReturnAirNode(EnergyPlusData &state, int const VentSlabNum) + { + int ReturnAirNode = 0; + if (state.dataVentilatedSlab->GetInputFlag) { + GetVentilatedSlabInput(state); + state.dataVentilatedSlab->GetInputFlag = false; + } + + if (VentSlabNum > 0 && VentSlabNum <= state.dataVentilatedSlab->NumOfVentSlabs) { + ReturnAirNode = state.dataVentilatedSlab->VentSlab(VentSlabNum).ReturnAirNode; + } + + return ReturnAirNode; + } + + int GetVentilatedSlabZoneAirInNode(EnergyPlusData &state, int const VentSlabNum) + { + int ZoneAirInNode = 0; + + if (state.dataVentilatedSlab->GetInputFlag) { + GetVentilatedSlabInput(state); + state.dataVentilatedSlab->GetInputFlag = false; + } + + if (VentSlabNum > 0 && VentSlabNum <= state.dataVentilatedSlab->NumOfVentSlabs) { + ZoneAirInNode = state.dataVentilatedSlab->VentSlab(VentSlabNum).ZoneAirInNode; + } + + return ZoneAirInNode; + } + //***************************************************************************************** } // namespace VentilatedSlab diff --git a/src/EnergyPlus/VentilatedSlab.hh b/src/EnergyPlus/VentilatedSlab.hh index 276d487f058..a889522a110 100644 --- a/src/EnergyPlus/VentilatedSlab.hh +++ b/src/EnergyPlus/VentilatedSlab.hh @@ -383,6 +383,10 @@ namespace VentilatedSlab { void ReportVentilatedSlab(EnergyPlusData &state, int const Item); // Index for the ventilated slab under consideration within the derived types + int GetVentilatedSlabReturnAirNode(EnergyPlusData &state, int const VentSlabNum); + + int GetVentilatedSlabZoneAirInNode(EnergyPlusData &state, int const VentSlabNum); + //***************************************************************************************** } // namespace VentilatedSlab diff --git a/src/EnergyPlus/WaterThermalTanks.cc b/src/EnergyPlus/WaterThermalTanks.cc index fd0a2527d4e..019e7411770 100644 --- a/src/EnergyPlus/WaterThermalTanks.cc +++ b/src/EnergyPlus/WaterThermalTanks.cc @@ -12625,4 +12625,34 @@ bool GetHeatPumpWaterHeaterNodeNumber(EnergyPlusData &state, int const NodeNumbe return HeatPumpWaterHeaterNodeException; } +int GetHeatPumpWaterHeaterAirInletNodeNum(EnergyPlusData &state, int HPNum) +{ + int HeatPumpWaterHeaterAirInletNodeNum = 0; + if (state.dataWaterThermalTanks->getWaterThermalTankInputFlag) { + GetWaterThermalTankInput(state); + state.dataWaterThermalTanks->getWaterThermalTankInputFlag = false; + } + + if (HPNum > 0 && HPNum <= state.dataWaterThermalTanks->numHeatPumpWaterHeater) { + HeatPumpWaterHeaterAirInletNodeNum = state.dataWaterThermalTanks->HPWaterHeater(HPNum).HeatPumpAirInletNode; + } + + return HeatPumpWaterHeaterAirInletNodeNum; +} + +int GetHeatPumpWaterHeaterAirOutletNodeNum(EnergyPlusData &state, int HPNum) +{ + int HeatPumpWaterHeaterAirOutletNodeNum = 0; + if (state.dataWaterThermalTanks->getWaterThermalTankInputFlag) { + GetWaterThermalTankInput(state); + state.dataWaterThermalTanks->getWaterThermalTankInputFlag = false; + } + + if (HPNum > 0 && HPNum <= state.dataWaterThermalTanks->numHeatPumpWaterHeater) { + HeatPumpWaterHeaterAirOutletNodeNum = state.dataWaterThermalTanks->HPWaterHeater(HPNum).HeatPumpAirOutletNode; + } + + return HeatPumpWaterHeaterAirOutletNodeNum; +} + } // namespace EnergyPlus::WaterThermalTanks diff --git a/src/EnergyPlus/WaterThermalTanks.hh b/src/EnergyPlus/WaterThermalTanks.hh index 27a488f56c3..fc7bae1b424 100644 --- a/src/EnergyPlus/WaterThermalTanks.hh +++ b/src/EnergyPlus/WaterThermalTanks.hh @@ -989,6 +989,10 @@ namespace WaterThermalTanks { bool GetHeatPumpWaterHeaterNodeNumber(EnergyPlusData &state, int NodeNumber); + int GetHeatPumpWaterHeaterAirInletNodeNum(EnergyPlusData &state, int HPNum); + + int GetHeatPumpWaterHeaterAirOutletNodeNum(EnergyPlusData &state, int HPNum); + } // namespace WaterThermalTanks struct WaterThermalTanksData : BaseGlobalStruct diff --git a/src/EnergyPlus/ZoneDehumidifier.cc b/src/EnergyPlus/ZoneDehumidifier.cc index 95aa88d1a5a..b2689917565 100644 --- a/src/EnergyPlus/ZoneDehumidifier.cc +++ b/src/EnergyPlus/ZoneDehumidifier.cc @@ -1181,6 +1181,36 @@ namespace ZoneDehumidifier { return FindZoneDehumidifierNodeNumber; } + int GetZoneDehumidifierAirOutletNodeNum(EnergyPlusData &state, int ZoneDehumidNum) + { + int ZoneDehumidifierAirOutletNodeNum = 0; + if (state.dataZoneDehumidifier->GetInputFlag) { + GetZoneDehumidifierInput(state); + state.dataZoneDehumidifier->GetInputFlag = false; + } + + if (ZoneDehumidNum > 0 && ZoneDehumidNum <= (int)state.dataZoneDehumidifier->ZoneDehumid.size()) { + ZoneDehumidifierAirOutletNodeNum = state.dataZoneDehumidifier->ZoneDehumid(ZoneDehumidNum).AirOutletNodeNum; + } + + return ZoneDehumidifierAirOutletNodeNum; + } + + int GetZoneDehumidifierAirInletNodeNum(EnergyPlusData &state, int ZoneDehumidNum) + { + int ZoneDehumidifierAirInletNodeNum = 0; + if (state.dataZoneDehumidifier->GetInputFlag) { + GetZoneDehumidifierInput(state); + state.dataZoneDehumidifier->GetInputFlag = false; + } + + if (ZoneDehumidNum > 0 && ZoneDehumidNum <= (int)state.dataZoneDehumidifier->ZoneDehumid.size()) { + ZoneDehumidifierAirInletNodeNum = state.dataZoneDehumidifier->ZoneDehumid(ZoneDehumidNum).AirInletNodeNum; + } + + return ZoneDehumidifierAirInletNodeNum; + } + } // namespace ZoneDehumidifier } // namespace EnergyPlus diff --git a/src/EnergyPlus/ZoneDehumidifier.hh b/src/EnergyPlus/ZoneDehumidifier.hh index 0444b8b91f2..6da985a515f 100644 --- a/src/EnergyPlus/ZoneDehumidifier.hh +++ b/src/EnergyPlus/ZoneDehumidifier.hh @@ -153,6 +153,10 @@ namespace ZoneDehumidifier { bool GetZoneDehumidifierNodeNumber(EnergyPlusData &state, int NodeNumber); // Node being tested + int GetZoneDehumidifierAirOutletNodeNum(EnergyPlusData &state, int ZoneDehumidNum); + + int GetZoneDehumidifierAirInletNodeNum(EnergyPlusData &state, int ZoneDehumidNum); + } // namespace ZoneDehumidifier struct ZoneDehumidifierData : BaseGlobalStruct diff --git a/tst/EnergyPlus/unit/RoomAirflowNetwork.unit.cc b/tst/EnergyPlus/unit/RoomAirflowNetwork.unit.cc index 4d789a28e83..c5feb4ae39c 100644 --- a/tst/EnergyPlus/unit/RoomAirflowNetwork.unit.cc +++ b/tst/EnergyPlus/unit/RoomAirflowNetwork.unit.cc @@ -78,6 +78,7 @@ #include #include #include +#include #include #include #include @@ -646,6 +647,8 @@ TEST_F(EnergyPlusFixture, RoomAirflowNetwork_CheckEquipName_Test) state->dataFanCoilUnits->FanCoil.allocate(1); state->dataFanCoilUnits->FanCoil(EquipIndex).AirOutNode = 1; state->dataFanCoilUnits->FanCoil(EquipIndex).AirInNode = 2; + state->dataFanCoilUnits->NumFanCoils = 1; + state->dataFanCoilUnits->GetFanCoilInputFlag = false; check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, EquipIndex, zoneEquipType); if (check) { EXPECT_EQ("SupplyNode2", SupplyNodeName); @@ -658,6 +661,8 @@ TEST_F(EnergyPlusFixture, RoomAirflowNetwork_CheckEquipName_Test) state->dataOutdoorAirUnit->OutAirUnit.allocate(1); state->dataOutdoorAirUnit->OutAirUnit(EquipIndex).AirOutletNode = 1; state->dataOutdoorAirUnit->OutAirUnit(EquipIndex).AirInletNode = 2; + state->dataOutdoorAirUnit->NumOfOAUnits = 1; + state->dataOutdoorAirUnit->GetOutdoorAirUnitInputFlag = false; check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, EquipIndex, zoneEquipType); if (check) { EXPECT_EQ("SupplyNode3", SupplyNodeName); @@ -717,6 +722,8 @@ TEST_F(EnergyPlusFixture, RoomAirflowNetwork_CheckEquipName_Test) state->dataUnitHeaters->UnitHeat.allocate(1); state->dataUnitHeaters->UnitHeat(EquipIndex).AirOutNode = 1; state->dataUnitHeaters->UnitHeat(EquipIndex).AirInNode = 2; + state->dataUnitHeaters->NumOfUnitHeats = 1; + state->dataUnitHeaters->GetUnitHeaterInputFlag = false; check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, EquipIndex, zoneEquipType); if (check) { EXPECT_EQ("SupplyNode7", SupplyNodeName); @@ -729,6 +736,8 @@ TEST_F(EnergyPlusFixture, RoomAirflowNetwork_CheckEquipName_Test) state->dataUnitVentilators->UnitVent.allocate(1); state->dataUnitVentilators->UnitVent(EquipIndex).AirOutNode = 1; state->dataUnitVentilators->UnitVent(EquipIndex).AirInNode = 2; + state->dataUnitVentilators->NumOfUnitVents = 1; + state->dataUnitVentilators->GetUnitVentilatorInputFlag = false; check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, EquipIndex, zoneEquipType); if (check) { EXPECT_EQ("SupplyNode8", SupplyNodeName); @@ -741,6 +750,8 @@ TEST_F(EnergyPlusFixture, RoomAirflowNetwork_CheckEquipName_Test) state->dataVentilatedSlab->VentSlab.allocate(1); state->dataVentilatedSlab->VentSlab(EquipIndex).ZoneAirInNode = 1; state->dataVentilatedSlab->VentSlab(EquipIndex).ReturnAirNode = 2; + state->dataVentilatedSlab->NumOfVentSlabs = 1; + state->dataVentilatedSlab->GetInputFlag = false; check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, EquipIndex, zoneEquipType); if (check) { EXPECT_EQ("SupplyNode9", SupplyNodeName); @@ -753,9 +764,71 @@ TEST_F(EnergyPlusFixture, RoomAirflowNetwork_CheckEquipName_Test) state->dataWindowAC->WindAC.allocate(1); state->dataWindowAC->WindAC(EquipIndex).AirOutNode = 1; state->dataWindowAC->WindAC(EquipIndex).AirInNode = 2; + state->dataWindowAC->WindAC(EquipIndex).OAMixIndex = 1; + state->dataWindowAC->NumWindAC = 1; + state->dataWindowAC->GetWindowACInputFlag = false; + state->dataMixedAir->NumOAMixers = 1; + state->dataMixedAir->OAMixer.allocate(1); + state->dataMixedAir->OAMixer(1).RetNode = 2; + state->dataMixedAir->GetOAMixerInputFlag = false; check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, EquipIndex, zoneEquipType); if (check) { EXPECT_EQ("SupplyNode10", SupplyNodeName); EXPECT_EQ("ReturnNode10", ReturnNodeName); } + + state->dataLoopNodes->NodeID(1) = "SupplyNode11"; + state->dataLoopNodes->NodeID(2) = "ReturnNode11"; + zoneEquipType = DataZoneEquipment::ZoneEquipType::DehumidifierDX; + state->dataZoneDehumidifier->ZoneDehumid.allocate(1); + state->dataZoneDehumidifier->ZoneDehumid(EquipIndex).AirOutletNodeNum = 1; + state->dataZoneDehumidifier->ZoneDehumid(EquipIndex).AirInletNodeNum = 2; + state->dataZoneDehumidifier->GetInputFlag = false; + check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, EquipIndex, zoneEquipType); + if (check) { + EXPECT_EQ("SupplyNode11", SupplyNodeName); + EXPECT_EQ("ReturnNode11", ReturnNodeName); + } + + state->dataLoopNodes->NodeID(1) = "SupplyNode12"; + state->dataLoopNodes->NodeID(2) = "ReturnNode12"; + zoneEquipType = DataZoneEquipment::ZoneEquipType::PurchasedAir; + state->dataPurchasedAirMgr->PurchAir.allocate(1); + state->dataPurchasedAirMgr->PurchAir(EquipIndex).ZoneSupplyAirNodeNum = 1; + state->dataPurchasedAirMgr->PurchAir(EquipIndex).ZoneExhaustAirNodeNum = 2; + state->dataPurchasedAirMgr->NumPurchAir = 1; + state->dataPurchasedAirMgr->GetPurchAirInputFlag = false; + check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, EquipIndex, zoneEquipType); + if (check) { + EXPECT_EQ("SupplyNode12", SupplyNodeName); + EXPECT_EQ("ReturnNode12", ReturnNodeName); + } + + state->dataLoopNodes->NodeID(1) = "SupplyNode13"; + state->dataLoopNodes->NodeID(2) = "ReturnNode13"; + zoneEquipType = DataZoneEquipment::ZoneEquipType::PurchasedAir; + state->dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner.allocate(1); + state->dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(EquipIndex).OutletNode = 1; + state->dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(EquipIndex).InletNode = 2; + state->dataHybridUnitaryAC->NumZoneHybridEvap = 1; + state->dataHybridUnitaryAC->GetInputZoneHybridEvap = false; + check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, EquipIndex, zoneEquipType); + if (check) { + EXPECT_EQ("SupplyNode13", SupplyNodeName); + EXPECT_EQ("ReturnNode13", ReturnNodeName); + } + + state->dataLoopNodes->NodeID(1) = "SupplyNode14"; + state->dataLoopNodes->NodeID(2) = "ReturnNode14"; + zoneEquipType = DataZoneEquipment::ZoneEquipType::PurchasedAir; + state->dataWaterThermalTanks->HPWaterHeater.allocate(1); + state->dataWaterThermalTanks->HPWaterHeater(EquipIndex).HeatPumpAirOutletNode = 1; + state->dataWaterThermalTanks->HPWaterHeater(EquipIndex).HeatPumpAirInletNode = 2; + state->dataWaterThermalTanks->numHeatPumpWaterHeater = 1; + state->dataWaterThermalTanks->getWaterThermalTankInputFlag = false; + check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, EquipIndex, zoneEquipType); + if (check) { + EXPECT_EQ("SupplyNode14", SupplyNodeName); + EXPECT_EQ("ReturnNode14", ReturnNodeName); + } } From b989dc0e4031627fe397f2d7f525abd389477605 Mon Sep 17 00:00:00 2001 From: Lixing Gu Date: Thu, 2 May 2024 16:12:27 -0400 Subject: [PATCH 06/68] Clang format --- src/EnergyPlus/RoomAirModelManager.cc | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/EnergyPlus/RoomAirModelManager.cc b/src/EnergyPlus/RoomAirModelManager.cc index 4a5a124a4cf..0ec8890ecc5 100644 --- a/src/EnergyPlus/RoomAirModelManager.cc +++ b/src/EnergyPlus/RoomAirModelManager.cc @@ -2724,21 +2724,19 @@ namespace RoomAir { if (zoneEquipType == DataZoneEquipment::ZoneEquipType::Invalid) return EquipFind; - ErrorObjectHeader eoh{routineName, equipTypeName, EquipName}; - switch (zoneEquipType) { case DataZoneEquipment::ZoneEquipType::VariableRefrigerantFlowTerminal: { // ZoneHVAC:TerminalUnit : VariableRefrigerantFlow SupplyNodeNum = HVACVariableRefrigerantFlow::GetVRFTUZoneInletAirNode(state, EquipIndex); } break; case DataZoneEquipment::ZoneEquipType::EnergyRecoveryVentilator: { // ZoneHVAC : EnergyRecoveryVentilator - SupplyNodeNum = GetFanOutletNode(state, "Fan:OnOff", EquipName, errorfound); + //SupplyNodeNum = GetFanOutletNode(state, "Fan:OnOff", EquipName, errorfound); } break; case DataZoneEquipment::ZoneEquipType::FourPipeFanCoil: { // ZoneHVAC : FourPipeFanCoil - SupplyNodeNum = FanCoilUnits::GetFanCoilZoneInletAirNode(state,EquipIndex); + SupplyNodeNum = FanCoilUnits::GetFanCoilZoneInletAirNode(state, EquipIndex); ReturnNodeNum = FanCoilUnits::GetFanCoilAirInNode(state, EquipIndex); } break; case DataZoneEquipment::ZoneEquipType::OutdoorAirUnit: { // ZoneHVAC : OutdoorAirUnit - SupplyNodeNum = OutdoorAirUnit::GetOutdoorAirUnitZoneInletNode(state,EquipIndex); + SupplyNodeNum = OutdoorAirUnit::GetOutdoorAirUnitZoneInletNode(state, EquipIndex); ReturnNodeNum = OutdoorAirUnit::GetOutdoorAirUnitReturnAirNode(state, EquipIndex); } break; case DataZoneEquipment::ZoneEquipType::PackagedTerminalAirConditioner: { // ZoneHVAC : PackagedTerminalAirConditioner From 73c79b284dbd11b47519f25d372d99a51a8fa415 Mon Sep 17 00:00:00 2001 From: Lixing Gu Date: Thu, 2 May 2024 16:33:50 -0400 Subject: [PATCH 07/68] Clang format --- src/EnergyPlus/RoomAirModelManager.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/EnergyPlus/RoomAirModelManager.cc b/src/EnergyPlus/RoomAirModelManager.cc index 0ec8890ecc5..3d75e46788e 100644 --- a/src/EnergyPlus/RoomAirModelManager.cc +++ b/src/EnergyPlus/RoomAirModelManager.cc @@ -2729,7 +2729,7 @@ namespace RoomAir { SupplyNodeNum = HVACVariableRefrigerantFlow::GetVRFTUZoneInletAirNode(state, EquipIndex); } break; case DataZoneEquipment::ZoneEquipType::EnergyRecoveryVentilator: { // ZoneHVAC : EnergyRecoveryVentilator - //SupplyNodeNum = GetFanOutletNode(state, "Fan:OnOff", EquipName, errorfound); + // SupplyNodeNum = GetFanOutletNode(state, "Fan:OnOff", EquipName, errorfound); } break; case DataZoneEquipment::ZoneEquipType::FourPipeFanCoil: { // ZoneHVAC : FourPipeFanCoil SupplyNodeNum = FanCoilUnits::GetFanCoilZoneInletAirNode(state, EquipIndex); From 32d7e2641bd1f2d226fcfc4a76247fa149ed245f Mon Sep 17 00:00:00 2001 From: Lixing Gu Date: Mon, 6 May 2024 10:14:44 -0400 Subject: [PATCH 08/68] Correct a mistake --- src/EnergyPlus/RoomAirModelManager.cc | 3 ++- tst/EnergyPlus/unit/RoomAirflowNetwork.unit.cc | 9 +++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/EnergyPlus/RoomAirModelManager.cc b/src/EnergyPlus/RoomAirModelManager.cc index 3d75e46788e..109683cf620 100644 --- a/src/EnergyPlus/RoomAirModelManager.cc +++ b/src/EnergyPlus/RoomAirModelManager.cc @@ -75,6 +75,7 @@ #include #include #include +#include #include #include #include @@ -2729,7 +2730,7 @@ namespace RoomAir { SupplyNodeNum = HVACVariableRefrigerantFlow::GetVRFTUZoneInletAirNode(state, EquipIndex); } break; case DataZoneEquipment::ZoneEquipType::EnergyRecoveryVentilator: { // ZoneHVAC : EnergyRecoveryVentilator - // SupplyNodeNum = GetFanOutletNode(state, "Fan:OnOff", EquipName, errorfound); + SupplyNodeNum = HVACStandAloneERV::GetStandAloneERVOutAirNode(state, EquipIndex); } break; case DataZoneEquipment::ZoneEquipType::FourPipeFanCoil: { // ZoneHVAC : FourPipeFanCoil SupplyNodeNum = FanCoilUnits::GetFanCoilZoneInletAirNode(state, EquipIndex); diff --git a/tst/EnergyPlus/unit/RoomAirflowNetwork.unit.cc b/tst/EnergyPlus/unit/RoomAirflowNetwork.unit.cc index ae365f29cc5..cfb694c8af9 100644 --- a/tst/EnergyPlus/unit/RoomAirflowNetwork.unit.cc +++ b/tst/EnergyPlus/unit/RoomAirflowNetwork.unit.cc @@ -72,6 +72,7 @@ #include #include #include +#include #include #include #include @@ -633,10 +634,10 @@ TEST_F(EnergyPlusFixture, RoomAirflowNetwork_CheckEquipName_Test) state->dataLoopNodes->NodeID(1) = "SupplyNode1"; state->dataLoopNodes->NodeID(2) = "ReturnNode1"; zoneEquipType = DataZoneEquipment::ZoneEquipType::EnergyRecoveryVentilator; - state->dataFans->GetFanInputFlag = false; - state->dataFans->Fan.allocate(1); - state->dataFans->Fan(1).FanName = EquipName; - state->dataFans->Fan(1).OutletNodeNum = 1; + state->dataHVACStandAloneERV->GetERVInputFlag = false; + state->dataHVACStandAloneERV->StandAloneERV.allocate(1); + state->dataHVACStandAloneERV->NumStandAloneERVs = 1; + state->dataHVACStandAloneERV->StandAloneERV(1).SupplyAirInletNode = 1; check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, EquipIndex, zoneEquipType); if (check) { EXPECT_EQ("SupplyNode1", SupplyNodeName); From 1698d9ba650520fe058549abe22562c29664973b Mon Sep 17 00:00:00 2001 From: Lixing Gu Date: Wed, 29 May 2024 10:51:35 -0400 Subject: [PATCH 09/68] Add a test file with FanCoil and change code accordingly --- src/EnergyPlus/FanCoilUnits.cc | 18 ++++++++++++++++-- src/EnergyPlus/FanCoilUnits.hh | 4 ++-- src/EnergyPlus/RoomAirModelManager.cc | 20 ++++++++++---------- 3 files changed, 28 insertions(+), 14 deletions(-) diff --git a/src/EnergyPlus/FanCoilUnits.cc b/src/EnergyPlus/FanCoilUnits.cc index f2b342b35d8..fdc3dd3793b 100644 --- a/src/EnergyPlus/FanCoilUnits.cc +++ b/src/EnergyPlus/FanCoilUnits.cc @@ -4093,7 +4093,7 @@ namespace FanCoilUnits { } } - int GetFanCoilZoneInletAirNode(EnergyPlusData &state, int const FanCoilNum) + int GetFanCoilZoneInletAirNode(EnergyPlusData &state, int &FanCoilNum, std::string_view CompName) { // FUNCTION INFORMATION: @@ -4112,10 +4112,17 @@ namespace FanCoilUnits { return state.dataFanCoilUnits->FanCoil(FanCoilNum).AirOutNode; } + if (FanCoilNum == 0 && CompName != "") { + FanCoilNum = Util::FindItemInList(CompName, state.dataFanCoilUnits->FanCoil); + if (FanCoilNum == 0) { + ShowFatalError(state, format("SimFanCoil: Unit not found={}", CompName)); + } + return state.dataFanCoilUnits->FanCoil(FanCoilNum).AirOutNode; + } return 0; } - int GetFanCoilAirInNode(EnergyPlusData &state, int const FanCoilNum) + int GetFanCoilAirInNode(EnergyPlusData &state, int &FanCoilNum, std::string_view CompName) { // FUNCTION INFORMATION: @@ -4134,6 +4141,13 @@ namespace FanCoilUnits { return state.dataFanCoilUnits->FanCoil(FanCoilNum).AirInNode; } + if (FanCoilNum == 0 && CompName != "") { + FanCoilNum = Util::FindItemInList(CompName, state.dataFanCoilUnits->FanCoil); + if (FanCoilNum == 0) { + ShowFatalError(state, format("SimFanCoil: Unit not found={}", CompName)); + } + return state.dataFanCoilUnits->FanCoil(FanCoilNum).AirInNode; + } return 0; } diff --git a/src/EnergyPlus/FanCoilUnits.hh b/src/EnergyPlus/FanCoilUnits.hh index 1936bee3e2f..03091b00f32 100644 --- a/src/EnergyPlus/FanCoilUnits.hh +++ b/src/EnergyPlus/FanCoilUnits.hh @@ -318,9 +318,9 @@ namespace FanCoilUnits { void ReportFanCoilUnit(EnergyPlusData &state, int FanCoilNum); // number of the current fan coil unit being simulated - int GetFanCoilZoneInletAirNode(EnergyPlusData &state, int FanCoilNum); + int GetFanCoilZoneInletAirNode(EnergyPlusData &state, int &FanCoilNum, std::string_view CompName = ""); - int GetFanCoilAirInNode(EnergyPlusData &state, int FanCoilNum); + int GetFanCoilAirInNode(EnergyPlusData &state, int &FanCoilNum, std::string_view CompName = ""); int GetFanCoilOutAirNode(EnergyPlusData &state, int FanCoilNum); diff --git a/src/EnergyPlus/RoomAirModelManager.cc b/src/EnergyPlus/RoomAirModelManager.cc index 109683cf620..fd89474081d 100644 --- a/src/EnergyPlus/RoomAirModelManager.cc +++ b/src/EnergyPlus/RoomAirModelManager.cc @@ -1577,11 +1577,11 @@ namespace RoomAir { } // loop thru TotNumOfRAFNNodeGainsLists // Get data of HVAC equipment - ipsc->cCurrentModuleObject = "RoomAir:Node:AirflowNetwork:HVACEquipment"; - TotNumOfRAFNNodeHVACLists = state.dataInputProcessing->inputProcessor->getNumObjectsFound(state, ipsc->cCurrentModuleObject); + std::string const cCurrentModuleObject = "RoomAir:Node:AirflowNetwork:HVACEquipment"; + TotNumOfRAFNNodeHVACLists = state.dataInputProcessing->inputProcessor->getNumObjectsFound(state, cCurrentModuleObject); for (int Loop = 1; Loop <= TotNumOfRAFNNodeHVACLists; ++Loop) { state.dataInputProcessing->inputProcessor->getObjectItem(state, - ipsc->cCurrentModuleObject, + cCurrentModuleObject, Loop, ipsc->cAlphaArgs, NumAlphas, @@ -1593,10 +1593,10 @@ namespace RoomAir { ipsc->cAlphaFieldNames, ipsc->cNumericFieldNames); - ErrorObjectHeader eoh{routineName, ipsc->cCurrentModuleObject, ipsc->cAlphaArgs(1)}; + ErrorObjectHeader eoh{routineName, cCurrentModuleObject, ipsc->cAlphaArgs(1)}; if (mod((NumAlphas + NumNumbers - 1), 4) != 0) { - ShowSevereError(state, format("GetRoomAirflowNetworkData: For {}: {}", ipsc->cCurrentModuleObject, ipsc->cAlphaArgs(1))); + ShowSevereError(state, format("GetRoomAirflowNetworkData: For {}: {}", cCurrentModuleObject, ipsc->cAlphaArgs(1))); ShowContinueError(state, format("Extensible field set are not evenly divisable by 4. Number of data entries = {}", fmt::to_string(NumAlphas + NumNumbers - 1))); @@ -1619,8 +1619,8 @@ namespace RoomAir { auto &roomAFNNode = roomAFNZoneInfo.Node(RAFNNodeNum); if (allocated(roomAFNNode.HVAC)) { ShowSevereError(state, format("GetRoomAirflowNetworkData: Invalid {} = {}", ipsc->cAlphaFieldNames(1), ipsc->cAlphaArgs(1))); - ShowContinueError(state, format("Entered in {} = {}", ipsc->cCurrentModuleObject, ipsc->cAlphaArgs(1))); - ShowContinueError(state, format("Duplicate {} name.", ipsc->cCurrentModuleObject)); + ShowContinueError(state, format("Entered in {} = {}", cCurrentModuleObject, ipsc->cAlphaArgs(1))); + ShowContinueError(state, format("Duplicate {} name.", cCurrentModuleObject)); ErrorsFound = true; continue; } @@ -1670,7 +1670,7 @@ namespace RoomAir { format("GetRoomAirflowNetworkData: Invalid {} = {}", ipsc->cAlphaFieldNames(3 + (iEquip - 1) * 2), ipsc->cAlphaArgs(2 + (iEquip - 1) * 2))); - ShowContinueError(state, format("Entered in {} = {}", ipsc->cCurrentModuleObject, ipsc->cAlphaArgs(1))); + ShowContinueError(state, format("Entered in {} = {}", cCurrentModuleObject, ipsc->cAlphaArgs(1))); ShowContinueError(state, "Internal gain did not match correctly"); ErrorsFound = true; } @@ -2733,8 +2733,8 @@ namespace RoomAir { SupplyNodeNum = HVACStandAloneERV::GetStandAloneERVOutAirNode(state, EquipIndex); } break; case DataZoneEquipment::ZoneEquipType::FourPipeFanCoil: { // ZoneHVAC : FourPipeFanCoil - SupplyNodeNum = FanCoilUnits::GetFanCoilZoneInletAirNode(state, EquipIndex); - ReturnNodeNum = FanCoilUnits::GetFanCoilAirInNode(state, EquipIndex); + SupplyNodeNum = FanCoilUnits::GetFanCoilZoneInletAirNode(state, EquipIndex, EquipName); + ReturnNodeNum = FanCoilUnits::GetFanCoilAirInNode(state, EquipIndex, EquipName); } break; case DataZoneEquipment::ZoneEquipType::OutdoorAirUnit: { // ZoneHVAC : OutdoorAirUnit SupplyNodeNum = OutdoorAirUnit::GetOutdoorAirUnitZoneInletNode(state, EquipIndex); From 1d30477420f985284237b91f8ec3d1927dfa106b Mon Sep 17 00:00:00 2001 From: Lixing Gu Date: Wed, 29 May 2024 16:07:21 -0400 Subject: [PATCH 10/68] Get correct index for unitary --- src/EnergyPlus/RoomAirModelManager.cc | 15 +++++++++------ src/EnergyPlus/UnitarySystem.cc | 19 +++++++++++++++++++ src/EnergyPlus/UnitarySystem.hh | 2 ++ 3 files changed, 30 insertions(+), 6 deletions(-) diff --git a/src/EnergyPlus/RoomAirModelManager.cc b/src/EnergyPlus/RoomAirModelManager.cc index fd89474081d..da3cae900e5 100644 --- a/src/EnergyPlus/RoomAirModelManager.cc +++ b/src/EnergyPlus/RoomAirModelManager.cc @@ -2741,12 +2741,14 @@ namespace RoomAir { ReturnNodeNum = OutdoorAirUnit::GetOutdoorAirUnitReturnAirNode(state, EquipIndex); } break; case DataZoneEquipment::ZoneEquipType::PackagedTerminalAirConditioner: { // ZoneHVAC : PackagedTerminalAirConditioner - SupplyNodeNum = state.dataUnitarySystems->unitarySys[EquipIndex - 1].getAirOutNode(state, EquipName, 0, errorfound); - ReturnNodeNum = state.dataUnitarySystems->unitarySys[EquipIndex - 1].getAirInNode(state, EquipName, 0, errorfound); + EquipIndex = UnitarySystems::getIndex(state, EquipName, zoneEquipType, errorfound); + SupplyNodeNum = state.dataUnitarySystems->unitarySys[EquipIndex].AirOutNode; + ReturnNodeNum = state.dataUnitarySystems->unitarySys[EquipIndex].AirInNode; } break; case DataZoneEquipment::ZoneEquipType::PackagedTerminalHeatPump: { // ZoneHVAC : PackagedTerminalHeatPump - SupplyNodeNum = state.dataUnitarySystems->unitarySys[EquipIndex - 1].getAirOutNode(state, EquipName, 0, errorfound); - ReturnNodeNum = state.dataUnitarySystems->unitarySys[EquipIndex - 1].getAirInNode(state, EquipName, 0, errorfound); + EquipIndex = UnitarySystems::getIndex(state, EquipName, zoneEquipType, errorfound); + SupplyNodeNum = state.dataUnitarySystems->unitarySys[EquipIndex].AirOutNode; + ReturnNodeNum = state.dataUnitarySystems->unitarySys[EquipIndex].AirInNode; } break; case DataZoneEquipment::ZoneEquipType::UnitHeater: { // ZoneHVAC : UnitHeater ReturnNodeNum = UnitHeater::GetUnitHeaterAirInletNode(state, EquipIndex); @@ -2761,8 +2763,9 @@ namespace RoomAir { SupplyNodeNum = VentilatedSlab::GetVentilatedSlabZoneAirInNode(state, EquipIndex); } break; case DataZoneEquipment::ZoneEquipType::PackagedTerminalHeatPumpWaterToAir: { // ZoneHVAC : WaterToAirHeatPump - SupplyNodeNum = state.dataUnitarySystems->unitarySys[EquipIndex - 1].getAirOutNode(state, EquipName, 0, errorfound); - ReturnNodeNum = state.dataUnitarySystems->unitarySys[EquipIndex - 1].getAirInNode(state, EquipName, 0, errorfound); + EquipIndex = UnitarySystems::getIndex(state, EquipName, zoneEquipType, errorfound); + SupplyNodeNum = state.dataUnitarySystems->unitarySys[EquipIndex].AirOutNode; + ReturnNodeNum = state.dataUnitarySystems->unitarySys[EquipIndex].AirInNode; } break; case DataZoneEquipment::ZoneEquipType::WindowAirConditioner: { // ZoneHVAC : WindowAirConditioner ReturnNodeNum = WindowAC::GetWindowACReturnAirNode(state, EquipIndex); diff --git a/src/EnergyPlus/UnitarySystem.cc b/src/EnergyPlus/UnitarySystem.cc index 4cfd27cdd93..e4ee05808fa 100644 --- a/src/EnergyPlus/UnitarySystem.cc +++ b/src/EnergyPlus/UnitarySystem.cc @@ -16581,6 +16581,25 @@ namespace UnitarySystems { return airNode; } + int + getIndex(EnergyPlusData &state, std::string const &UnitarySysName, DataZoneEquipment::ZoneEquipType zoneEquipType, bool &errFlag) + { + + int EquipIndex = 0; + for (int UnitarySysNum = 0; UnitarySysNum < state.dataUnitarySystems->numUnitarySystems; ++UnitarySysNum) { + if (Util::SameString(UnitarySysName, state.dataUnitarySystems->unitarySys[UnitarySysNum].Name)) { + if (zoneEquipType == DataZoneEquipment::ZoneEquipType::PackagedTerminalAirConditioner || + zoneEquipType == DataZoneEquipment::ZoneEquipType::PackagedTerminalHeatPump || + zoneEquipType == DataZoneEquipment::ZoneEquipType::PackagedTerminalHeatPumpWaterToAir) { + EquipIndex = UnitarySysNum; + break; + } + } + } + if (EquipIndex < 0) errFlag = true; + return EquipIndex; + } + int UnitarySys::getAirOutNode(EnergyPlusData &state, std::string_view UnitarySysName, int const ZoneOAUnitNum, bool &errFlag) { if (state.dataUnitarySystems->getInputOnceFlag) { diff --git a/src/EnergyPlus/UnitarySystem.hh b/src/EnergyPlus/UnitarySystem.hh index c3e906298f6..d602f20dc2e 100644 --- a/src/EnergyPlus/UnitarySystem.hh +++ b/src/EnergyPlus/UnitarySystem.hh @@ -966,6 +966,8 @@ namespace UnitarySystems { void setupAllOutputVars(EnergyPlusData &state, int const numAllSystemTypes); void isWaterCoilHeatRecoveryType(EnergyPlusData const &state, int const waterCoilNodeNum, bool &nodeNotFound); + int getIndex(EnergyPlusData &state, std::string const &UnitarySysName, DataZoneEquipment::ZoneEquipType zoneEquipType, bool &errFlag); + } // namespace UnitarySystems struct UnitarySystemsData : BaseGlobalStruct { From 097c9ed13d9a9705a04651eed813cebb115de7b5 Mon Sep 17 00:00:00 2001 From: Lixing Gu Date: Thu, 30 May 2024 09:20:48 -0400 Subject: [PATCH 11/68] Address further comments --- src/EnergyPlus/UnitarySystem.cc | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/EnergyPlus/UnitarySystem.cc b/src/EnergyPlus/UnitarySystem.cc index e4ee05808fa..09155500b4d 100644 --- a/src/EnergyPlus/UnitarySystem.cc +++ b/src/EnergyPlus/UnitarySystem.cc @@ -16581,11 +16581,15 @@ namespace UnitarySystems { return airNode; } - int - getIndex(EnergyPlusData &state, std::string const &UnitarySysName, DataZoneEquipment::ZoneEquipType zoneEquipType, bool &errFlag) + int getIndex(EnergyPlusData &state, std::string const &UnitarySysName, DataZoneEquipment::ZoneEquipType zoneEquipType, bool &errFlag) { - int EquipIndex = 0; + if (state.dataUnitarySystems->getInputOnceFlag) { + UnitarySystems::UnitarySys::getUnitarySystemInput(state, UnitarySysName, false, 0); + state.dataUnitarySystems->getInputOnceFlag = false; + } + + int EquipIndex = -1; for (int UnitarySysNum = 0; UnitarySysNum < state.dataUnitarySystems->numUnitarySystems; ++UnitarySysNum) { if (Util::SameString(UnitarySysName, state.dataUnitarySystems->unitarySys[UnitarySysNum].Name)) { if (zoneEquipType == DataZoneEquipment::ZoneEquipType::PackagedTerminalAirConditioner || From 214ea1dbb202eb8cc27b3392c7d366abebe6c6db Mon Sep 17 00:00:00 2001 From: Lixing Gu Date: Thu, 30 May 2024 11:39:15 -0400 Subject: [PATCH 12/68] Add one more optional argument --- src/EnergyPlus/RoomAirModelManager.cc | 6 +++--- src/EnergyPlus/UnitarySystem.cc | 8 +++++--- src/EnergyPlus/UnitarySystem.hh | 6 +++++- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/EnergyPlus/RoomAirModelManager.cc b/src/EnergyPlus/RoomAirModelManager.cc index da3cae900e5..8850e2d63d3 100644 --- a/src/EnergyPlus/RoomAirModelManager.cc +++ b/src/EnergyPlus/RoomAirModelManager.cc @@ -2741,12 +2741,12 @@ namespace RoomAir { ReturnNodeNum = OutdoorAirUnit::GetOutdoorAirUnitReturnAirNode(state, EquipIndex); } break; case DataZoneEquipment::ZoneEquipType::PackagedTerminalAirConditioner: { // ZoneHVAC : PackagedTerminalAirConditioner - EquipIndex = UnitarySystems::getIndex(state, EquipName, zoneEquipType, errorfound); + EquipIndex = UnitarySystems::getZoneEqIndex(state, EquipName, zoneEquipType, errorfound); SupplyNodeNum = state.dataUnitarySystems->unitarySys[EquipIndex].AirOutNode; ReturnNodeNum = state.dataUnitarySystems->unitarySys[EquipIndex].AirInNode; } break; case DataZoneEquipment::ZoneEquipType::PackagedTerminalHeatPump: { // ZoneHVAC : PackagedTerminalHeatPump - EquipIndex = UnitarySystems::getIndex(state, EquipName, zoneEquipType, errorfound); + EquipIndex = UnitarySystems::getZoneEqIndex(state, EquipName, zoneEquipType, errorfound); SupplyNodeNum = state.dataUnitarySystems->unitarySys[EquipIndex].AirOutNode; ReturnNodeNum = state.dataUnitarySystems->unitarySys[EquipIndex].AirInNode; } break; @@ -2763,7 +2763,7 @@ namespace RoomAir { SupplyNodeNum = VentilatedSlab::GetVentilatedSlabZoneAirInNode(state, EquipIndex); } break; case DataZoneEquipment::ZoneEquipType::PackagedTerminalHeatPumpWaterToAir: { // ZoneHVAC : WaterToAirHeatPump - EquipIndex = UnitarySystems::getIndex(state, EquipName, zoneEquipType, errorfound); + EquipIndex = UnitarySystems::getZoneEqIndex(state, EquipName, zoneEquipType, errorfound); SupplyNodeNum = state.dataUnitarySystems->unitarySys[EquipIndex].AirOutNode; ReturnNodeNum = state.dataUnitarySystems->unitarySys[EquipIndex].AirInNode; } break; diff --git a/src/EnergyPlus/UnitarySystem.cc b/src/EnergyPlus/UnitarySystem.cc index 09155500b4d..7cbc5a2b83c 100644 --- a/src/EnergyPlus/UnitarySystem.cc +++ b/src/EnergyPlus/UnitarySystem.cc @@ -16581,11 +16581,12 @@ namespace UnitarySystems { return airNode; } - int getIndex(EnergyPlusData &state, std::string const &UnitarySysName, DataZoneEquipment::ZoneEquipType zoneEquipType, bool &errFlag) + int getZoneEqIndex( + EnergyPlusData &state, std::string const &UnitarySysName, DataZoneEquipment::ZoneEquipType zoneEquipType, bool &errFlag, int const OAUnitNum) { if (state.dataUnitarySystems->getInputOnceFlag) { - UnitarySystems::UnitarySys::getUnitarySystemInput(state, UnitarySysName, false, 0); + UnitarySystems::UnitarySys::getUnitarySystemInput(state, UnitarySysName, false, OAUnitNum); state.dataUnitarySystems->getInputOnceFlag = false; } @@ -16594,7 +16595,8 @@ namespace UnitarySystems { if (Util::SameString(UnitarySysName, state.dataUnitarySystems->unitarySys[UnitarySysNum].Name)) { if (zoneEquipType == DataZoneEquipment::ZoneEquipType::PackagedTerminalAirConditioner || zoneEquipType == DataZoneEquipment::ZoneEquipType::PackagedTerminalHeatPump || - zoneEquipType == DataZoneEquipment::ZoneEquipType::PackagedTerminalHeatPumpWaterToAir) { + zoneEquipType == DataZoneEquipment::ZoneEquipType::PackagedTerminalHeatPumpWaterToAir || + zoneEquipType == DataZoneEquipment::ZoneEquipType::UnitarySystem) { EquipIndex = UnitarySysNum; break; } diff --git a/src/EnergyPlus/UnitarySystem.hh b/src/EnergyPlus/UnitarySystem.hh index d602f20dc2e..474ccb6bf5a 100644 --- a/src/EnergyPlus/UnitarySystem.hh +++ b/src/EnergyPlus/UnitarySystem.hh @@ -966,7 +966,11 @@ namespace UnitarySystems { void setupAllOutputVars(EnergyPlusData &state, int const numAllSystemTypes); void isWaterCoilHeatRecoveryType(EnergyPlusData const &state, int const waterCoilNodeNum, bool &nodeNotFound); - int getIndex(EnergyPlusData &state, std::string const &UnitarySysName, DataZoneEquipment::ZoneEquipType zoneEquipType, bool &errFlag); + int getZoneEqIndex(EnergyPlusData &state, + std::string const &UnitarySysName, + DataZoneEquipment::ZoneEquipType zoneEquipType, + bool &errFlag, + int const OAUnitNum = 0); } // namespace UnitarySystems struct UnitarySystemsData : BaseGlobalStruct From 0a71ac929e588f35e72f774241dac49e4c1a4e66 Mon Sep 17 00:00:00 2001 From: Lixing Gu Date: Thu, 30 May 2024 14:41:28 -0400 Subject: [PATCH 13/68] GetEqIndex for fan coil --- src/EnergyPlus/FanCoilUnits.cc | 37 +++++++++++++++------------ src/EnergyPlus/FanCoilUnits.hh | 5 ++-- src/EnergyPlus/RoomAirModelManager.cc | 5 ++-- 3 files changed, 27 insertions(+), 20 deletions(-) diff --git a/src/EnergyPlus/FanCoilUnits.cc b/src/EnergyPlus/FanCoilUnits.cc index ad78b4d7889..62886e1d69c 100644 --- a/src/EnergyPlus/FanCoilUnits.cc +++ b/src/EnergyPlus/FanCoilUnits.cc @@ -4097,7 +4097,7 @@ namespace FanCoilUnits { } } - int GetFanCoilZoneInletAirNode(EnergyPlusData &state, int &FanCoilNum, std::string_view CompName) + int GetFanCoilZoneInletAirNode(EnergyPlusData &state, int const FanCoilNum) { // FUNCTION INFORMATION: @@ -4116,17 +4116,10 @@ namespace FanCoilUnits { return state.dataFanCoilUnits->FanCoil(FanCoilNum).AirOutNode; } - if (FanCoilNum == 0 && CompName != "") { - FanCoilNum = Util::FindItemInList(CompName, state.dataFanCoilUnits->FanCoil); - if (FanCoilNum == 0) { - ShowFatalError(state, format("SimFanCoil: Unit not found={}", CompName)); - } - return state.dataFanCoilUnits->FanCoil(FanCoilNum).AirOutNode; - } return 0; } - int GetFanCoilAirInNode(EnergyPlusData &state, int &FanCoilNum, std::string_view CompName) + int GetFanCoilAirInNode(EnergyPlusData &state, int const FanCoilNum) { // FUNCTION INFORMATION: @@ -4145,13 +4138,6 @@ namespace FanCoilUnits { return state.dataFanCoilUnits->FanCoil(FanCoilNum).AirInNode; } - if (FanCoilNum == 0 && CompName != "") { - FanCoilNum = Util::FindItemInList(CompName, state.dataFanCoilUnits->FanCoil); - if (FanCoilNum == 0) { - ShowFatalError(state, format("SimFanCoil: Unit not found={}", CompName)); - } - return state.dataFanCoilUnits->FanCoil(FanCoilNum).AirInNode; - } return 0; } @@ -4455,6 +4441,25 @@ namespace FanCoilUnits { } } + int getEqIndex(EnergyPlusData &state, std::string_view CompName, bool &errFlag) + { + if (state.dataFanCoilUnits->GetFanCoilInputFlag) { + GetFanCoilUnits(state); + state.dataFanCoilUnits->GetFanCoilInputFlag = false; + } + + errFlag = true; + for (int FanCoilIndex = 1; FanCoilIndex <= state.dataFanCoilUnits->Num4PipeFanCoils; ++FanCoilIndex) { + auto &fanCoil = state.dataFanCoilUnits->FanCoil(FanCoilIndex); + if (Util::SameString(fanCoil.Name, CompName)) { + errFlag = false; + return FanCoilIndex; + } + } + + return 0; + } + } // namespace FanCoilUnits } // namespace EnergyPlus diff --git a/src/EnergyPlus/FanCoilUnits.hh b/src/EnergyPlus/FanCoilUnits.hh index 87da87cf4aa..5dce466105b 100644 --- a/src/EnergyPlus/FanCoilUnits.hh +++ b/src/EnergyPlus/FanCoilUnits.hh @@ -319,9 +319,9 @@ namespace FanCoilUnits { void ReportFanCoilUnit(EnergyPlusData &state, int FanCoilNum); // number of the current fan coil unit being simulated - int GetFanCoilZoneInletAirNode(EnergyPlusData &state, int &FanCoilNum, std::string_view CompName = ""); + int GetFanCoilZoneInletAirNode(EnergyPlusData &state, int const FanCoilNum); - int GetFanCoilAirInNode(EnergyPlusData &state, int &FanCoilNum, std::string_view CompName = ""); + int GetFanCoilAirInNode(EnergyPlusData &state, int const FanCoilNum); int GetFanCoilOutAirNode(EnergyPlusData &state, int FanCoilNum); @@ -382,6 +382,7 @@ namespace FanCoilUnits { int WaterControlNode, Real64 MinWaterFlow); + int getEqIndex(EnergyPlusData &state, std::string_view CompName, bool &errFlag); } // namespace FanCoilUnits struct FanCoilUnitsData : BaseGlobalStruct diff --git a/src/EnergyPlus/RoomAirModelManager.cc b/src/EnergyPlus/RoomAirModelManager.cc index 8850e2d63d3..24e4e921777 100644 --- a/src/EnergyPlus/RoomAirModelManager.cc +++ b/src/EnergyPlus/RoomAirModelManager.cc @@ -2733,8 +2733,9 @@ namespace RoomAir { SupplyNodeNum = HVACStandAloneERV::GetStandAloneERVOutAirNode(state, EquipIndex); } break; case DataZoneEquipment::ZoneEquipType::FourPipeFanCoil: { // ZoneHVAC : FourPipeFanCoil - SupplyNodeNum = FanCoilUnits::GetFanCoilZoneInletAirNode(state, EquipIndex, EquipName); - ReturnNodeNum = FanCoilUnits::GetFanCoilAirInNode(state, EquipIndex, EquipName); + EquipIndex = FanCoilUnits::getEqIndex(state, EquipName, errorfound); + SupplyNodeNum = state.dataFanCoilUnits->FanCoil(EquipIndex).AirOutNode; + ReturnNodeNum = state.dataFanCoilUnits->FanCoil(EquipIndex).AirInNode; } break; case DataZoneEquipment::ZoneEquipType::OutdoorAirUnit: { // ZoneHVAC : OutdoorAirUnit SupplyNodeNum = OutdoorAirUnit::GetOutdoorAirUnitZoneInletNode(state, EquipIndex); From f4a17a5cd64ab9745cb7dd444934a3075aa3fb8f Mon Sep 17 00:00:00 2001 From: Lixing Gu Date: Thu, 30 May 2024 15:14:47 -0400 Subject: [PATCH 14/68] Solve an error --- src/EnergyPlus/FanCoilUnits.cc | 8 ++++---- src/EnergyPlus/UnitarySystem.cc | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/EnergyPlus/FanCoilUnits.cc b/src/EnergyPlus/FanCoilUnits.cc index 62886e1d69c..0483dbf3467 100644 --- a/src/EnergyPlus/FanCoilUnits.cc +++ b/src/EnergyPlus/FanCoilUnits.cc @@ -4448,16 +4448,16 @@ namespace FanCoilUnits { state.dataFanCoilUnits->GetFanCoilInputFlag = false; } - errFlag = true; + int EquipIndex = 0; for (int FanCoilIndex = 1; FanCoilIndex <= state.dataFanCoilUnits->Num4PipeFanCoils; ++FanCoilIndex) { auto &fanCoil = state.dataFanCoilUnits->FanCoil(FanCoilIndex); if (Util::SameString(fanCoil.Name, CompName)) { - errFlag = false; - return FanCoilIndex; + EquipIndex = FanCoilIndex; } } - return 0; + if (EquipIndex == 0) errFlag = true; + return EquipIndex; } } // namespace FanCoilUnits diff --git a/src/EnergyPlus/UnitarySystem.cc b/src/EnergyPlus/UnitarySystem.cc index 7cbc5a2b83c..04d7c31013d 100644 --- a/src/EnergyPlus/UnitarySystem.cc +++ b/src/EnergyPlus/UnitarySystem.cc @@ -16586,7 +16586,7 @@ namespace UnitarySystems { { if (state.dataUnitarySystems->getInputOnceFlag) { - UnitarySystems::UnitarySys::getUnitarySystemInput(state, UnitarySysName, false, OAUnitNum); + UnitarySystems::UnitarySys::getUnitarySystemInput(state, UnitarySysName, true, OAUnitNum); state.dataUnitarySystems->getInputOnceFlag = false; } From 56d97c12c05415f68f733b792bbfab80d647433a Mon Sep 17 00:00:00 2001 From: Lixing Gu Date: Wed, 5 Jun 2024 13:47:04 -0400 Subject: [PATCH 15/68] Create getEqIndex functions --- src/EnergyPlus/FanCoilUnits.cc | 2 +- src/EnergyPlus/HVACStandAloneERV.cc | 19 +++++++ src/EnergyPlus/HVACStandAloneERV.hh | 2 + src/EnergyPlus/HVACVariableRefrigerantFlow.cc | 19 +++++++ src/EnergyPlus/HVACVariableRefrigerantFlow.hh | 2 + .../HybridUnitaryAirConditioners.cc | 18 +++++++ .../HybridUnitaryAirConditioners.hh | 2 + src/EnergyPlus/OutdoorAirUnit.cc | 18 +++++++ src/EnergyPlus/OutdoorAirUnit.hh | 2 + src/EnergyPlus/PurchasedAirManager.cc | 18 +++++++ src/EnergyPlus/PurchasedAirManager.hh | 2 + src/EnergyPlus/RoomAirModelManager.cc | 51 +++++++++++-------- src/EnergyPlus/UnitHeater.cc | 17 +++++++ src/EnergyPlus/UnitHeater.hh | 6 ++- src/EnergyPlus/UnitVentilator.cc | 17 +++++++ src/EnergyPlus/UnitVentilator.hh | 2 + src/EnergyPlus/VentilatedSlab.cc | 17 +++++++ src/EnergyPlus/VentilatedSlab.hh | 1 + src/EnergyPlus/WaterThermalTanks.cc | 18 +++++++ src/EnergyPlus/WaterThermalTanks.hh | 2 + src/EnergyPlus/WindowAC.cc | 18 +++++++ src/EnergyPlus/WindowAC.hh | 2 + src/EnergyPlus/ZoneDehumidifier.cc | 18 +++++++ src/EnergyPlus/ZoneDehumidifier.hh | 2 + .../unit/RoomAirflowNetwork.unit.cc | 12 +++++ 25 files changed, 264 insertions(+), 23 deletions(-) diff --git a/src/EnergyPlus/FanCoilUnits.cc b/src/EnergyPlus/FanCoilUnits.cc index 0483dbf3467..048abf9b95e 100644 --- a/src/EnergyPlus/FanCoilUnits.cc +++ b/src/EnergyPlus/FanCoilUnits.cc @@ -4449,7 +4449,7 @@ namespace FanCoilUnits { } int EquipIndex = 0; - for (int FanCoilIndex = 1; FanCoilIndex <= state.dataFanCoilUnits->Num4PipeFanCoils; ++FanCoilIndex) { + for (int FanCoilIndex = 1; FanCoilIndex <= state.dataFanCoilUnits->NumFanCoils; ++FanCoilIndex) { auto &fanCoil = state.dataFanCoilUnits->FanCoil(FanCoilIndex); if (Util::SameString(fanCoil.Name, CompName)) { EquipIndex = FanCoilIndex; diff --git a/src/EnergyPlus/HVACStandAloneERV.cc b/src/EnergyPlus/HVACStandAloneERV.cc index f4919236616..9ae6958a2f8 100644 --- a/src/EnergyPlus/HVACStandAloneERV.cc +++ b/src/EnergyPlus/HVACStandAloneERV.cc @@ -1686,4 +1686,23 @@ bool GetStandAloneERVNodeNumber(EnergyPlusData &state, int const NodeNumber) return false; } + int getEqIndex(EnergyPlusData &state, std::string_view CompName, bool &errFlag) +{ + if (state.dataHVACStandAloneERV->GetERVInputFlag) { + GetStandAloneERV(state); + state.dataHVACStandAloneERV->GetERVInputFlag = false; + } + + int EqIndex = 0; + errFlag = true; + for (int StandAloneERVNum = 1; StandAloneERVNum <= state.dataHVACStandAloneERV->NumStandAloneERVs; StandAloneERVNum++) { + if (Util::SameString(CompName, state.dataHVACStandAloneERV->StandAloneERV(StandAloneERVNum).Name)) { + EqIndex = StandAloneERVNum; + errFlag = false; + break; + } + } + return EqIndex; +} + } // namespace EnergyPlus::HVACStandAloneERV diff --git a/src/EnergyPlus/HVACStandAloneERV.hh b/src/EnergyPlus/HVACStandAloneERV.hh index 5ee9f82cc5a..4ae1049f1df 100644 --- a/src/EnergyPlus/HVACStandAloneERV.hh +++ b/src/EnergyPlus/HVACStandAloneERV.hh @@ -186,6 +186,8 @@ namespace HVACStandAloneERV { bool GetStandAloneERVNodeNumber(EnergyPlusData &state, int NodeNumber); + int getEqIndex(EnergyPlusData &state, std::string_view CompName, bool &errFlag); + } // namespace HVACStandAloneERV struct HVACStandAloneERVData : BaseGlobalStruct diff --git a/src/EnergyPlus/HVACVariableRefrigerantFlow.cc b/src/EnergyPlus/HVACVariableRefrigerantFlow.cc index dcc34225c5a..aa8926dc591 100644 --- a/src/EnergyPlus/HVACVariableRefrigerantFlow.cc +++ b/src/EnergyPlus/HVACVariableRefrigerantFlow.cc @@ -10768,6 +10768,25 @@ int GetVRFTUReturnAirNode(EnergyPlusData &state, int const VRFTUNum) } } +int getEqIndex(EnergyPlusData &state, std::string_view VRFTUName, bool &errFlag) +{ + if (state.dataHVACVarRefFlow->GetVRFInputFlag) { + GetVRFInput(state); + state.dataHVACVarRefFlow->GetVRFInputFlag = false; + } + + int EqIndex = 0; + errFlag = true; + for (int VRFTUNum = 1; VRFTUNum <= state.dataHVACVarRefFlow->NumVRFTU; VRFTUNum++) { + if (Util::SameString(VRFTUName, state.dataHVACVarRefFlow->VRFTU(VRFTUNum).Name)) { + EqIndex = VRFTUNum; + errFlag = false; + break; + } + } + return EqIndex; +} + void getVRFTUZoneLoad( EnergyPlusData &state, int const VRFTUNum, Real64 &zoneLoad, Real64 &LoadToHeatingSP, Real64 &LoadToCoolingSP, bool const InitFlag) { diff --git a/src/EnergyPlus/HVACVariableRefrigerantFlow.hh b/src/EnergyPlus/HVACVariableRefrigerantFlow.hh index b6c0b09796d..bed14c4ea80 100644 --- a/src/EnergyPlus/HVACVariableRefrigerantFlow.hh +++ b/src/EnergyPlus/HVACVariableRefrigerantFlow.hh @@ -972,6 +972,8 @@ namespace HVACVariableRefrigerantFlow { Real64 const T_suc // Compressor suction temperature Te' [C] ); + int getEqIndex(EnergyPlusData &state, std::string_view VRFTUName, bool &errFlag); + } // namespace HVACVariableRefrigerantFlow struct HVACVarRefFlowData : BaseGlobalStruct diff --git a/src/EnergyPlus/HybridUnitaryAirConditioners.cc b/src/EnergyPlus/HybridUnitaryAirConditioners.cc index 9d9147a0487..50069e27aee 100644 --- a/src/EnergyPlus/HybridUnitaryAirConditioners.cc +++ b/src/EnergyPlus/HybridUnitaryAirConditioners.cc @@ -1366,6 +1366,24 @@ int GetHybridUnitaryACReturnAirNode(EnergyPlusData &state, int const CompNum) return GetHybridUnitaryACReturnAirNode; } +int getHybridUnitaryACIndex(EnergyPlusData &state, std::string_view CompName, bool &errFlag) +{ + if (state.dataHybridUnitaryAC->GetInputZoneHybridEvap) { + GetInputZoneHybridUnitaryAirConditioners(state, errFlag); + state.dataHybridUnitaryAC->GetInputZoneHybridEvap = false; + } + + int EquipIndex = 0; + for (int UnitLoop = 1; UnitLoop <= state.dataHybridUnitaryAC->NumZoneHybridEvap; ++UnitLoop) { + if (Util::SameString(state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitLoop).Name, CompName)) { + EquipIndex = UnitLoop; + } + } + + if (EquipIndex == 0) errFlag = true; + return EquipIndex; +} + //***************************************************************************************** } // namespace EnergyPlus::HybridUnitaryAirConditioners diff --git a/src/EnergyPlus/HybridUnitaryAirConditioners.hh b/src/EnergyPlus/HybridUnitaryAirConditioners.hh index 64f0a152e76..c979bd12218 100644 --- a/src/EnergyPlus/HybridUnitaryAirConditioners.hh +++ b/src/EnergyPlus/HybridUnitaryAirConditioners.hh @@ -98,6 +98,8 @@ namespace HybridUnitaryAirConditioners { int GetHybridUnitaryACReturnAirNode(EnergyPlusData &state, int UnitNum); + int getHybridUnitaryACIndex(EnergyPlusData &state, std::string_view CompName, bool &errFlag); + } // namespace HybridUnitaryAirConditioners struct HybridUnitaryAirConditionersData : BaseGlobalStruct diff --git a/src/EnergyPlus/OutdoorAirUnit.cc b/src/EnergyPlus/OutdoorAirUnit.cc index 2dcc30e4a61..4d993fdde39 100644 --- a/src/EnergyPlus/OutdoorAirUnit.cc +++ b/src/EnergyPlus/OutdoorAirUnit.cc @@ -2471,6 +2471,24 @@ namespace OutdoorAirUnit { return GetOutdoorAirUnitReturnAirNode; } + int getOutdoorAirUnitEqIndex(EnergyPlusData &state, std::string_view EquipName, bool &errFlag) + { + if (state.dataOutdoorAirUnit->GetOutdoorAirUnitInputFlag) { + OutdoorAirUnit::GetOutdoorAirUnitInputs(state); + state.dataOutdoorAirUnit->GetOutdoorAirUnitInputFlag = false; + } + + int EquipIndex = 0; + for (int OAUnitNum = 1; OAUnitNum <= state.dataOutdoorAirUnit->NumOfOAUnits; ++OAUnitNum) { + if (Util::SameString(state.dataOutdoorAirUnit->OutAirUnit(OAUnitNum).Name, EquipName)) { + EquipIndex = OAUnitNum; + } + } + + if (EquipIndex == 0) errFlag = true; + return EquipIndex; + } + } // namespace OutdoorAirUnit } // namespace EnergyPlus diff --git a/src/EnergyPlus/OutdoorAirUnit.hh b/src/EnergyPlus/OutdoorAirUnit.hh index 81eb5084e59..7f166537c91 100644 --- a/src/EnergyPlus/OutdoorAirUnit.hh +++ b/src/EnergyPlus/OutdoorAirUnit.hh @@ -309,6 +309,8 @@ namespace OutdoorAirUnit { int GetOutdoorAirUnitZoneInletNode(EnergyPlusData &state, int OAUnitNum); int GetOutdoorAirUnitReturnAirNode(EnergyPlusData &state, int OAUnitNum); + + int getOutdoorAirUnitEqIndex(EnergyPlusData &state, std::string_view EquipName, bool &errFlag); } // namespace OutdoorAirUnit struct OutdoorAirUnitData : BaseGlobalStruct diff --git a/src/EnergyPlus/PurchasedAirManager.cc b/src/EnergyPlus/PurchasedAirManager.cc index b5e8becc3e3..b1552ec305e 100644 --- a/src/EnergyPlus/PurchasedAirManager.cc +++ b/src/EnergyPlus/PurchasedAirManager.cc @@ -3333,6 +3333,24 @@ int GetPurchasedAirZoneExhaustAirNode(EnergyPlusData &state, int PurchAirNum) return GetPurchasedAirZoneExhaustAirNode; } +int getPurchasedAirIndex(EnergyPlusData &state, std::string_view PurchAirName, bool &errFlag) +{ + if (state.dataPurchasedAirMgr->GetPurchAirInputFlag) { + GetPurchasedAir(state); + state.dataPurchasedAirMgr->GetPurchAirInputFlag = false; + } + + int EquipIndex = 0; + for (int PurchAirNum = 1; PurchAirNum <= state.dataPurchasedAirMgr->NumPurchAir; ++PurchAirNum) { + if (Util::SameString(state.dataPurchasedAirMgr->PurchAir(PurchAirNum).Name, PurchAirName)) { + EquipIndex = PurchAirNum; + } + } + + if (EquipIndex == 0) errFlag = true; + return EquipIndex; +} + Real64 GetPurchasedAirMixedAirTemp(EnergyPlusData &state, int const PurchAirNum) { diff --git a/src/EnergyPlus/PurchasedAirManager.hh b/src/EnergyPlus/PurchasedAirManager.hh index fb06821efc0..db21045584b 100644 --- a/src/EnergyPlus/PurchasedAirManager.hh +++ b/src/EnergyPlus/PurchasedAirManager.hh @@ -381,6 +381,8 @@ namespace PurchasedAirManager { int GetPurchasedAirZoneExhaustAirNode(EnergyPlusData &state, int PurchAirNum); + int getPurchasedAirIndex(EnergyPlusData &state, std::string_view PurchAirName, bool &errFlag); + Real64 GetPurchasedAirMixedAirTemp(EnergyPlusData &state, int PurchAirNum); Real64 GetPurchasedAirMixedAirHumRat(EnergyPlusData &state, int PurchAirNum); diff --git a/src/EnergyPlus/RoomAirModelManager.cc b/src/EnergyPlus/RoomAirModelManager.cc index 24e4e921777..04e7aa5468e 100644 --- a/src/EnergyPlus/RoomAirModelManager.cc +++ b/src/EnergyPlus/RoomAirModelManager.cc @@ -2727,10 +2727,12 @@ namespace RoomAir { switch (zoneEquipType) { case DataZoneEquipment::ZoneEquipType::VariableRefrigerantFlowTerminal: { // ZoneHVAC:TerminalUnit : VariableRefrigerantFlow - SupplyNodeNum = HVACVariableRefrigerantFlow::GetVRFTUZoneInletAirNode(state, EquipIndex); + EquipIndex = HVACVariableRefrigerantFlow::getEqIndex(state, EquipName, errorfound); + SupplyNodeNum = state.dataHVACVarRefFlow->VRFTU(EquipIndex).VRFTUOutletNodeNum; } break; case DataZoneEquipment::ZoneEquipType::EnergyRecoveryVentilator: { // ZoneHVAC : EnergyRecoveryVentilator - SupplyNodeNum = HVACStandAloneERV::GetStandAloneERVOutAirNode(state, EquipIndex); + EquipIndex = HVACStandAloneERV::getEqIndex(state, EquipName, errorfound); + SupplyNodeNum = state.dataHVACStandAloneERV->StandAloneERV(EquipIndex).SupplyAirInletNode; } break; case DataZoneEquipment::ZoneEquipType::FourPipeFanCoil: { // ZoneHVAC : FourPipeFanCoil EquipIndex = FanCoilUnits::getEqIndex(state, EquipName, errorfound); @@ -2738,8 +2740,9 @@ namespace RoomAir { ReturnNodeNum = state.dataFanCoilUnits->FanCoil(EquipIndex).AirInNode; } break; case DataZoneEquipment::ZoneEquipType::OutdoorAirUnit: { // ZoneHVAC : OutdoorAirUnit - SupplyNodeNum = OutdoorAirUnit::GetOutdoorAirUnitZoneInletNode(state, EquipIndex); - ReturnNodeNum = OutdoorAirUnit::GetOutdoorAirUnitReturnAirNode(state, EquipIndex); + EquipIndex = OutdoorAirUnit::getOutdoorAirUnitEqIndex(state, EquipName, errorfound); + SupplyNodeNum = state.dataOutdoorAirUnit->OutAirUnit(EquipIndex).AirOutletNode; + ReturnNodeNum = state.dataOutdoorAirUnit->OutAirUnit(EquipIndex).AirInletNode; } break; case DataZoneEquipment::ZoneEquipType::PackagedTerminalAirConditioner: { // ZoneHVAC : PackagedTerminalAirConditioner EquipIndex = UnitarySystems::getZoneEqIndex(state, EquipName, zoneEquipType, errorfound); @@ -2752,16 +2755,19 @@ namespace RoomAir { ReturnNodeNum = state.dataUnitarySystems->unitarySys[EquipIndex].AirInNode; } break; case DataZoneEquipment::ZoneEquipType::UnitHeater: { // ZoneHVAC : UnitHeater - ReturnNodeNum = UnitHeater::GetUnitHeaterAirInletNode(state, EquipIndex); - SupplyNodeNum = UnitHeater::GetUnitHeaterAirOutletNode(state, EquipIndex); + EquipIndex = UnitHeater::getUnitHeaterIndex(state, EquipName, errorfound); + ReturnNodeNum = state.dataUnitHeaters->UnitHeat(EquipIndex).AirInNode; + SupplyNodeNum = state.dataUnitHeaters->UnitHeat(EquipIndex).AirOutNode; } break; case DataZoneEquipment::ZoneEquipType::UnitVentilator: { // ZoneHVAC : UnitVentilator - ReturnNodeNum = UnitVentilator::GetUnitVentilatorReturnAirNode(state, EquipIndex); - SupplyNodeNum = UnitVentilator::GetUnitVentilatorZoneInletAirNode(state, EquipIndex); + EquipIndex = UnitVentilator::getUnitVentilatorIndex(state, EquipName, errorfound); + ReturnNodeNum = state.dataUnitVentilators->UnitVent(EquipIndex).AirInNode; + SupplyNodeNum = state.dataUnitVentilators->UnitVent(EquipIndex).AirOutNode; } break; case DataZoneEquipment::ZoneEquipType::VentilatedSlab: { // ZoneHVAC : VentilatedSlab - ReturnNodeNum = VentilatedSlab::GetVentilatedSlabReturnAirNode(state, EquipIndex); - SupplyNodeNum = VentilatedSlab::GetVentilatedSlabZoneAirInNode(state, EquipIndex); + EquipIndex = VentilatedSlab::getVentilatedSlabIndex(state, EquipName, errorfound); + ReturnNodeNum = state.dataVentilatedSlab->VentSlab(EquipIndex).ReturnAirNode; + SupplyNodeNum = state.dataVentilatedSlab->VentSlab(EquipIndex).ZoneAirInNode; } break; case DataZoneEquipment::ZoneEquipType::PackagedTerminalHeatPumpWaterToAir: { // ZoneHVAC : WaterToAirHeatPump EquipIndex = UnitarySystems::getZoneEqIndex(state, EquipName, zoneEquipType, errorfound); @@ -2769,8 +2775,9 @@ namespace RoomAir { ReturnNodeNum = state.dataUnitarySystems->unitarySys[EquipIndex].AirInNode; } break; case DataZoneEquipment::ZoneEquipType::WindowAirConditioner: { // ZoneHVAC : WindowAirConditioner - ReturnNodeNum = WindowAC::GetWindowACReturnAirNode(state, EquipIndex); - SupplyNodeNum = WindowAC::GetWindowACZoneInletAirNode(state, EquipIndex); + EquipIndex = WindowAC::getWindowACIndex(state, EquipName, errorfound); + ReturnNodeNum = state.dataWindowAC->WindAC(EquipIndex).AirInNode; + SupplyNodeNum = state.dataWindowAC->WindAC(EquipIndex).AirOutNode; } break; case DataZoneEquipment::ZoneEquipType::BaseboardElectric: { // ZoneHVAC : Baseboard : RadiantConvective : Electric // convective equipment without node connection. Will handle later @@ -2797,12 +2804,14 @@ namespace RoomAir { SupplyNodeName = ""; } break; case DataZoneEquipment::ZoneEquipType::DehumidifierDX: { // ZoneHVAC : Dehumidifier : DX - ReturnNodeNum = ZoneDehumidifier::GetZoneDehumidifierAirInletNodeNum(state, EquipIndex); - SupplyNodeNum = ZoneDehumidifier::GetZoneDehumidifierAirOutletNodeNum(state, EquipIndex); + EquipIndex = ZoneDehumidifier::getZoneDehumidifierIndex(state, EquipName, errorfound); + ReturnNodeNum = state.dataZoneDehumidifier->ZoneDehumid(EquipIndex).AirInletNodeNum; + SupplyNodeNum = state.dataZoneDehumidifier->ZoneDehumid(EquipIndex).AirOutletNodeNum; } break; case DataZoneEquipment::ZoneEquipType::PurchasedAir: { // ZoneHVAC : IdealLoadsAirSystem - ReturnNodeNum = PurchasedAirManager::GetPurchasedAirZoneExhaustAirNode(state, EquipIndex); - SupplyNodeNum = PurchasedAirManager::GetPurchasedAirZoneInletAirNode(state, EquipIndex); + EquipIndex = PurchasedAirManager::getPurchasedAirIndex(state, EquipName, errorfound); + ReturnNodeNum = state.dataPurchasedAirMgr->PurchAir(EquipIndex).ZoneExhaustAirNodeNum; + SupplyNodeNum = state.dataPurchasedAirMgr->PurchAir(EquipIndex).ZoneSupplyAirNodeNum; } break; case DataZoneEquipment::ZoneEquipType::RefrigerationChillerSet: { // ZoneHVAC : RefrigerationChillerSet // May not apply @@ -2810,16 +2819,18 @@ namespace RoomAir { // ReturnNodeName = Alphas(4); } break; case DataZoneEquipment::ZoneEquipType::HybridEvaporativeCooler: { // ZoneHVAC : HybridUnitaryAirConditioners - ReturnNodeNum = HybridUnitaryAirConditioners::GetHybridUnitaryACReturnAirNode(state, EquipIndex); - SupplyNodeNum = HybridUnitaryAirConditioners::GetHybridUnitaryACZoneInletNode(state, EquipIndex); + EquipIndex = HybridUnitaryAirConditioners::getHybridUnitaryACIndex(state, EquipName, errorfound); + ReturnNodeNum = state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(EquipIndex).InletNode; + SupplyNodeNum = state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(EquipIndex).OutletNode; } break; case DataZoneEquipment::ZoneEquipType::ExhaustFan: { // Fan : ZoneExhaust // SupplyNodeName = ""; // ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? May not use } break; case DataZoneEquipment::ZoneEquipType::HeatPumpWaterHeater: { // WaterHeater : HeatPump - ReturnNodeNum = WaterThermalTanks::GetHeatPumpWaterHeaterAirInletNodeNum(state, EquipIndex); - SupplyNodeNum = WaterThermalTanks::GetHeatPumpWaterHeaterAirOutletNodeNum(state, EquipIndex); + EquipIndex = WaterThermalTanks::getHeatPumpWaterHeaterIndex(state, EquipName, errorfound); + ReturnNodeNum = state.dataWaterThermalTanks->HPWaterHeater(EquipIndex).HeatPumpAirInletNode; + SupplyNodeNum = state.dataWaterThermalTanks->HPWaterHeater(EquipIndex).HeatPumpAirOutletNode; // For AirTerminals, find matching return node later } break; case DataZoneEquipment::ZoneEquipType::AirTerminalDualDuctConstantVolume: { // AirTerminal : DualDuct : ConstantVolume diff --git a/src/EnergyPlus/UnitHeater.cc b/src/EnergyPlus/UnitHeater.cc index 0cabd7e02c8..127fe2079bc 100644 --- a/src/EnergyPlus/UnitHeater.cc +++ b/src/EnergyPlus/UnitHeater.cc @@ -1927,6 +1927,23 @@ namespace UnitHeater { return GetUnitHeaterAirInletNode; } + int getUnitHeaterIndex(EnergyPlusData &state, std::string_view CompName, bool &errFlag) + { + if (state.dataUnitHeaters->GetUnitHeaterInputFlag) { + GetUnitHeaterInput(state); + state.dataUnitHeaters->GetUnitHeaterInputFlag = false; + } + int EquipIndex = 0; + for (int UnitHeatNum = 1; UnitHeatNum <= state.dataUnitHeaters->NumOfUnitHeats; ++UnitHeatNum) { + if (Util::SameString(state.dataUnitHeaters->UnitHeat(UnitHeatNum).Name, CompName)) { + EquipIndex = UnitHeatNum; + } + } + + if (EquipIndex == 0) errFlag = true; + return EquipIndex; + } + } // namespace UnitHeater } // namespace EnergyPlus diff --git a/src/EnergyPlus/UnitHeater.hh b/src/EnergyPlus/UnitHeater.hh index 502ec4a4a46..e84f7790d14 100644 --- a/src/EnergyPlus/UnitHeater.hh +++ b/src/EnergyPlus/UnitHeater.hh @@ -202,9 +202,11 @@ namespace UnitHeater { void ReportUnitHeater(EnergyPlusData &state, int const UnitHeatNum); // Unit index in unit heater array - int GetUnitHeaterAirOutletNode(EnergyPlusData &state, int OAUnitNum); + int GetUnitHeaterAirOutletNode(EnergyPlusData &state, int UnitHeatNum); - int GetUnitHeaterAirInletNode(EnergyPlusData &state, int OAUnitNum); + int GetUnitHeaterAirInletNode(EnergyPlusData &state, int UnitHeatNum); + + int getUnitHeaterIndex(EnergyPlusData &state, std::string_view CompName, bool &errFlag); } // namespace UnitHeater struct UnitHeatersData : BaseGlobalStruct diff --git a/src/EnergyPlus/UnitVentilator.cc b/src/EnergyPlus/UnitVentilator.cc index 729cf7a5a24..ea690c1ec45 100644 --- a/src/EnergyPlus/UnitVentilator.cc +++ b/src/EnergyPlus/UnitVentilator.cc @@ -3366,6 +3366,23 @@ namespace UnitVentilator { return GetUnitVentilatorReturnAirNode; } + int getUnitVentilatorIndex(EnergyPlusData &state, std::string_view CompName, bool &errFlag) + { + if (state.dataUnitVentilators->GetUnitVentilatorInputFlag) { + GetUnitVentilatorInput(state); + state.dataUnitVentilators->GetUnitVentilatorInputFlag = false; + } + int EquipIndex = 0; + for (int UnitVentNum = 1; UnitVentNum <= state.dataUnitVentilators->NumOfUnitVents; ++UnitVentNum) { + if (Util::SameString(state.dataUnitVentilators->UnitVent(UnitVentNum).Name, CompName)) { + EquipIndex = UnitVentNum; + } + } + + if (EquipIndex == 0) errFlag = true; + return EquipIndex; + } + Real64 SetOAMassFlowRateForCoolingVariablePercent(EnergyPlusData &state, int const UnitVentNum, // Unit Ventilator index Real64 const MinOAFrac, // Minimum Outside Air Fraction diff --git a/src/EnergyPlus/UnitVentilator.hh b/src/EnergyPlus/UnitVentilator.hh index ea732cae27d..9354a666e6a 100644 --- a/src/EnergyPlus/UnitVentilator.hh +++ b/src/EnergyPlus/UnitVentilator.hh @@ -262,6 +262,8 @@ namespace UnitVentilator { int GetUnitVentilatorReturnAirNode(EnergyPlusData &state, int const UnitVentNum); + int getUnitVentilatorIndex(EnergyPlusData &state, std::string_view CompName, bool &errFlag); + Real64 SetOAMassFlowRateForCoolingVariablePercent(EnergyPlusData &state, int const UnitVentNum, // Unit Ventilator index number Real64 const MinOAFrac, // Minimum Outside Air Fraction diff --git a/src/EnergyPlus/VentilatedSlab.cc b/src/EnergyPlus/VentilatedSlab.cc index 301ec2d1715..f132ee63d8e 100644 --- a/src/EnergyPlus/VentilatedSlab.cc +++ b/src/EnergyPlus/VentilatedSlab.cc @@ -4766,6 +4766,23 @@ namespace VentilatedSlab { return ZoneAirInNode; } + int getVentilatedSlabIndex(EnergyPlusData &state, std::string_view CompName, bool &errFlag) + { + if (state.dataVentilatedSlab->GetInputFlag) { + GetVentilatedSlabInput(state); + state.dataVentilatedSlab->GetInputFlag = false; + } + + int EquipIndex = 0; + for (int VentSlabNum = 1; VentSlabNum <= state.dataVentilatedSlab->NumOfVentSlabs; ++VentSlabNum) { + if (Util::SameString(state.dataVentilatedSlab->VentSlab(VentSlabNum).Name, CompName)) { + EquipIndex = VentSlabNum; + } + } + + if (EquipIndex == 0) errFlag = true; + return EquipIndex; + } //***************************************************************************************** } // namespace VentilatedSlab diff --git a/src/EnergyPlus/VentilatedSlab.hh b/src/EnergyPlus/VentilatedSlab.hh index 52794f957e9..f20180c8602 100644 --- a/src/EnergyPlus/VentilatedSlab.hh +++ b/src/EnergyPlus/VentilatedSlab.hh @@ -387,6 +387,7 @@ namespace VentilatedSlab { int GetVentilatedSlabZoneAirInNode(EnergyPlusData &state, int const VentSlabNum); + int getVentilatedSlabIndex(EnergyPlusData &state, std::string_view CompName, bool &errFlag); //***************************************************************************************** } // namespace VentilatedSlab diff --git a/src/EnergyPlus/WaterThermalTanks.cc b/src/EnergyPlus/WaterThermalTanks.cc index 11b6f052499..bdea7fce4c8 100644 --- a/src/EnergyPlus/WaterThermalTanks.cc +++ b/src/EnergyPlus/WaterThermalTanks.cc @@ -12495,4 +12495,22 @@ int GetHeatPumpWaterHeaterAirOutletNodeNum(EnergyPlusData &state, int HPNum) return HeatPumpWaterHeaterAirOutletNodeNum; } +int getHeatPumpWaterHeaterIndex(EnergyPlusData &state, std::string_view CompName, bool &errFlag) +{ + if (state.dataWaterThermalTanks->getWaterThermalTankInputFlag) { + GetWaterThermalTankInput(state); + state.dataWaterThermalTanks->getWaterThermalTankInputFlag = false; + } + + int EquipIndex = 0; + for (int HPNum = 1; HPNum <= state.dataWaterThermalTanks->numHeatPumpWaterHeater; ++HPNum) { + if (Util::SameString(state.dataWaterThermalTanks->HPWaterHeater(HPNum).Name, CompName)) { + EquipIndex = HPNum; + } + } + + if (EquipIndex == 0) errFlag = true; + return EquipIndex; +} + } // namespace EnergyPlus::WaterThermalTanks diff --git a/src/EnergyPlus/WaterThermalTanks.hh b/src/EnergyPlus/WaterThermalTanks.hh index 741d5edcd1c..7ff93332d85 100644 --- a/src/EnergyPlus/WaterThermalTanks.hh +++ b/src/EnergyPlus/WaterThermalTanks.hh @@ -992,6 +992,8 @@ namespace WaterThermalTanks { int GetHeatPumpWaterHeaterAirOutletNodeNum(EnergyPlusData &state, int HPNum); + int getHeatPumpWaterHeaterIndex(EnergyPlusData &state, std::string_view CompName, bool &errFlag); + } // namespace WaterThermalTanks struct WaterThermalTanksData : BaseGlobalStruct diff --git a/src/EnergyPlus/WindowAC.cc b/src/EnergyPlus/WindowAC.cc index 6dad593cbcc..9d405e13750 100644 --- a/src/EnergyPlus/WindowAC.cc +++ b/src/EnergyPlus/WindowAC.cc @@ -1619,6 +1619,24 @@ namespace WindowAC { return GetWindowACMixedAirNode; } + int getWindowACIndex(EnergyPlusData &state, std::string_view CompName, bool &errFlag) + { + if (state.dataWindowAC->GetWindowACInputFlag) { + GetWindowAC(state); + state.dataWindowAC->GetWindowACInputFlag = false; + } + + int EquipIndex = 0; + for (int WindACIndex = 1; WindACIndex <= state.dataWindowAC->NumWindAC; ++WindACIndex) { + if (Util::SameString(state.dataWindowAC->WindAC(WindACIndex).Name, CompName)) { + EquipIndex = WindACIndex; + } + } + + if (EquipIndex == 0) errFlag = true; + return EquipIndex; + } + } // namespace WindowAC } // namespace EnergyPlus diff --git a/src/EnergyPlus/WindowAC.hh b/src/EnergyPlus/WindowAC.hh index 53a111e820d..0d2e8014e73 100644 --- a/src/EnergyPlus/WindowAC.hh +++ b/src/EnergyPlus/WindowAC.hh @@ -205,6 +205,8 @@ namespace WindowAC { int GetWindowACMixedAirNode(EnergyPlusData &state, int const WindACNum); + int getWindowACIndex(EnergyPlusData &state, std::string_view CompName, bool &errFlag); + } // namespace WindowAC struct WindowACData : BaseGlobalStruct diff --git a/src/EnergyPlus/ZoneDehumidifier.cc b/src/EnergyPlus/ZoneDehumidifier.cc index 74b31945904..e21e5f4c887 100644 --- a/src/EnergyPlus/ZoneDehumidifier.cc +++ b/src/EnergyPlus/ZoneDehumidifier.cc @@ -1209,6 +1209,24 @@ namespace ZoneDehumidifier { return ZoneDehumidifierAirInletNodeNum; } + int getZoneDehumidifierIndex(EnergyPlusData &state, std::string_view CompName, bool &errFlag) + { + if (state.dataZoneDehumidifier->GetInputFlag) { + GetZoneDehumidifierInput(state); + state.dataZoneDehumidifier->GetInputFlag = false; + } + + int EquipIndex = 0; + for (int ZoneDehumidNum = 1; ZoneDehumidNum <= (int)state.dataZoneDehumidifier->ZoneDehumid.size(); ++ZoneDehumidNum) { + if (Util::SameString(state.dataZoneDehumidifier->ZoneDehumid(ZoneDehumidNum).Name, CompName)) { + EquipIndex = ZoneDehumidNum; + } + } + + if (EquipIndex == 0) errFlag = true; + return EquipIndex; + } + } // namespace ZoneDehumidifier } // namespace EnergyPlus diff --git a/src/EnergyPlus/ZoneDehumidifier.hh b/src/EnergyPlus/ZoneDehumidifier.hh index 6da985a515f..57adbfe4d57 100644 --- a/src/EnergyPlus/ZoneDehumidifier.hh +++ b/src/EnergyPlus/ZoneDehumidifier.hh @@ -157,6 +157,8 @@ namespace ZoneDehumidifier { int GetZoneDehumidifierAirInletNodeNum(EnergyPlusData &state, int ZoneDehumidNum); + int getZoneDehumidifierIndex(EnergyPlusData &state, std::string_view CompName, bool &errFlag); + } // namespace ZoneDehumidifier struct ZoneDehumidifierData : BaseGlobalStruct diff --git a/tst/EnergyPlus/unit/RoomAirflowNetwork.unit.cc b/tst/EnergyPlus/unit/RoomAirflowNetwork.unit.cc index cfb694c8af9..5555bfcb259 100644 --- a/tst/EnergyPlus/unit/RoomAirflowNetwork.unit.cc +++ b/tst/EnergyPlus/unit/RoomAirflowNetwork.unit.cc @@ -626,6 +626,7 @@ TEST_F(EnergyPlusFixture, RoomAirflowNetwork_CheckEquipName_Test) zoneEquipType = DataZoneEquipment::ZoneEquipType::VariableRefrigerantFlowTerminal; state->dataHVACVarRefFlow->NumVRFTU = 1; + state->dataHVACVarRefFlow->VRFTU(1).Name = EquipName; check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, EquipIndex, zoneEquipType); if (check) { EXPECT_EQ("SupplyNode", SupplyNodeName); @@ -638,6 +639,7 @@ TEST_F(EnergyPlusFixture, RoomAirflowNetwork_CheckEquipName_Test) state->dataHVACStandAloneERV->StandAloneERV.allocate(1); state->dataHVACStandAloneERV->NumStandAloneERVs = 1; state->dataHVACStandAloneERV->StandAloneERV(1).SupplyAirInletNode = 1; + state->dataHVACStandAloneERV->StandAloneERV(1).Name = EquipName; check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, EquipIndex, zoneEquipType); if (check) { EXPECT_EQ("SupplyNode1", SupplyNodeName); @@ -651,6 +653,7 @@ TEST_F(EnergyPlusFixture, RoomAirflowNetwork_CheckEquipName_Test) state->dataFanCoilUnits->FanCoil(EquipIndex).AirInNode = 2; state->dataFanCoilUnits->NumFanCoils = 1; state->dataFanCoilUnits->GetFanCoilInputFlag = false; + state->dataFanCoilUnits->FanCoil(EquipIndex).Name = EquipName; check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, EquipIndex, zoneEquipType); if (check) { EXPECT_EQ("SupplyNode2", SupplyNodeName); @@ -665,6 +668,7 @@ TEST_F(EnergyPlusFixture, RoomAirflowNetwork_CheckEquipName_Test) state->dataOutdoorAirUnit->OutAirUnit(EquipIndex).AirInletNode = 2; state->dataOutdoorAirUnit->NumOfOAUnits = 1; state->dataOutdoorAirUnit->GetOutdoorAirUnitInputFlag = false; + state->dataOutdoorAirUnit->OutAirUnit(EquipIndex).Name = EquipName; check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, EquipIndex, zoneEquipType); if (check) { EXPECT_EQ("SupplyNode3", SupplyNodeName); @@ -726,6 +730,7 @@ TEST_F(EnergyPlusFixture, RoomAirflowNetwork_CheckEquipName_Test) state->dataUnitHeaters->UnitHeat(EquipIndex).AirInNode = 2; state->dataUnitHeaters->NumOfUnitHeats = 1; state->dataUnitHeaters->GetUnitHeaterInputFlag = false; + state->dataUnitHeaters->UnitHeat(EquipIndex).Name = EquipName; check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, EquipIndex, zoneEquipType); if (check) { EXPECT_EQ("SupplyNode7", SupplyNodeName); @@ -739,6 +744,7 @@ TEST_F(EnergyPlusFixture, RoomAirflowNetwork_CheckEquipName_Test) state->dataUnitVentilators->UnitVent(EquipIndex).AirOutNode = 1; state->dataUnitVentilators->UnitVent(EquipIndex).AirInNode = 2; state->dataUnitVentilators->NumOfUnitVents = 1; + state->dataUnitVentilators->UnitVent(EquipIndex).Name = EquipName; state->dataUnitVentilators->GetUnitVentilatorInputFlag = false; check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, EquipIndex, zoneEquipType); if (check) { @@ -754,6 +760,7 @@ TEST_F(EnergyPlusFixture, RoomAirflowNetwork_CheckEquipName_Test) state->dataVentilatedSlab->VentSlab(EquipIndex).ReturnAirNode = 2; state->dataVentilatedSlab->NumOfVentSlabs = 1; state->dataVentilatedSlab->GetInputFlag = false; + state->dataVentilatedSlab->VentSlab(EquipIndex).Name = EquipName; check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, EquipIndex, zoneEquipType); if (check) { EXPECT_EQ("SupplyNode9", SupplyNodeName); @@ -772,6 +779,7 @@ TEST_F(EnergyPlusFixture, RoomAirflowNetwork_CheckEquipName_Test) state->dataMixedAir->NumOAMixers = 1; state->dataMixedAir->OAMixer.allocate(1); state->dataMixedAir->OAMixer(1).RetNode = 2; + state->dataWindowAC->WindAC(EquipIndex).Name = EquipName; state->dataMixedAir->GetOAMixerInputFlag = false; check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, EquipIndex, zoneEquipType); if (check) { @@ -785,6 +793,7 @@ TEST_F(EnergyPlusFixture, RoomAirflowNetwork_CheckEquipName_Test) state->dataZoneDehumidifier->ZoneDehumid.allocate(1); state->dataZoneDehumidifier->ZoneDehumid(EquipIndex).AirOutletNodeNum = 1; state->dataZoneDehumidifier->ZoneDehumid(EquipIndex).AirInletNodeNum = 2; + state->dataZoneDehumidifier->ZoneDehumid(EquipIndex).Name = EquipName; state->dataZoneDehumidifier->GetInputFlag = false; check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, EquipIndex, zoneEquipType); if (check) { @@ -799,6 +808,7 @@ TEST_F(EnergyPlusFixture, RoomAirflowNetwork_CheckEquipName_Test) state->dataPurchasedAirMgr->PurchAir(EquipIndex).ZoneSupplyAirNodeNum = 1; state->dataPurchasedAirMgr->PurchAir(EquipIndex).ZoneExhaustAirNodeNum = 2; state->dataPurchasedAirMgr->NumPurchAir = 1; + state->dataPurchasedAirMgr->PurchAir(EquipIndex).Name = EquipName; state->dataPurchasedAirMgr->GetPurchAirInputFlag = false; check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, EquipIndex, zoneEquipType); if (check) { @@ -813,6 +823,7 @@ TEST_F(EnergyPlusFixture, RoomAirflowNetwork_CheckEquipName_Test) state->dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(EquipIndex).OutletNode = 1; state->dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(EquipIndex).InletNode = 2; state->dataHybridUnitaryAC->NumZoneHybridEvap = 1; + state->dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(EquipIndex).Name = EquipName; state->dataHybridUnitaryAC->GetInputZoneHybridEvap = false; check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, EquipIndex, zoneEquipType); if (check) { @@ -827,6 +838,7 @@ TEST_F(EnergyPlusFixture, RoomAirflowNetwork_CheckEquipName_Test) state->dataWaterThermalTanks->HPWaterHeater(EquipIndex).HeatPumpAirOutletNode = 1; state->dataWaterThermalTanks->HPWaterHeater(EquipIndex).HeatPumpAirInletNode = 2; state->dataWaterThermalTanks->numHeatPumpWaterHeater = 1; + state->dataWaterThermalTanks->HPWaterHeater(EquipIndex).Name = EquipName; state->dataWaterThermalTanks->getWaterThermalTankInputFlag = false; check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, EquipIndex, zoneEquipType); if (check) { From a66cef820684a1eeae96c31a77892a5ebf1a47fa Mon Sep 17 00:00:00 2001 From: Lixing Gu Date: Wed, 5 Jun 2024 15:25:23 -0400 Subject: [PATCH 16/68] Remove errFlag override --- src/EnergyPlus/HVACStandAloneERV.cc | 4 ++-- src/EnergyPlus/HVACVariableRefrigerantFlow.cc | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/EnergyPlus/HVACStandAloneERV.cc b/src/EnergyPlus/HVACStandAloneERV.cc index 9ae6958a2f8..574e771fa13 100644 --- a/src/EnergyPlus/HVACStandAloneERV.cc +++ b/src/EnergyPlus/HVACStandAloneERV.cc @@ -1694,14 +1694,14 @@ bool GetStandAloneERVNodeNumber(EnergyPlusData &state, int const NodeNumber) } int EqIndex = 0; - errFlag = true; + for (int StandAloneERVNum = 1; StandAloneERVNum <= state.dataHVACStandAloneERV->NumStandAloneERVs; StandAloneERVNum++) { if (Util::SameString(CompName, state.dataHVACStandAloneERV->StandAloneERV(StandAloneERVNum).Name)) { EqIndex = StandAloneERVNum; - errFlag = false; break; } } + if (EqIndex == 0) errFlag = true; return EqIndex; } diff --git a/src/EnergyPlus/HVACVariableRefrigerantFlow.cc b/src/EnergyPlus/HVACVariableRefrigerantFlow.cc index aa8926dc591..7344312ac09 100644 --- a/src/EnergyPlus/HVACVariableRefrigerantFlow.cc +++ b/src/EnergyPlus/HVACVariableRefrigerantFlow.cc @@ -10776,14 +10776,13 @@ int getEqIndex(EnergyPlusData &state, std::string_view VRFTUName, bool &errFlag) } int EqIndex = 0; - errFlag = true; for (int VRFTUNum = 1; VRFTUNum <= state.dataHVACVarRefFlow->NumVRFTU; VRFTUNum++) { if (Util::SameString(VRFTUName, state.dataHVACVarRefFlow->VRFTU(VRFTUNum).Name)) { EqIndex = VRFTUNum; - errFlag = false; break; } } + if (EqIndex == 0) errFlag = true; return EqIndex; } From 4a1dc464357dca1ffebd985403a41269e0bb483e Mon Sep 17 00:00:00 2001 From: Lixing Gu Date: Wed, 5 Jun 2024 16:45:46 -0400 Subject: [PATCH 17/68] Clang format --- src/EnergyPlus/HVACStandAloneERV.cc | 28 +++++++++++++-------------- src/EnergyPlus/PurchasedAirManager.cc | 22 ++++++++++----------- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/src/EnergyPlus/HVACStandAloneERV.cc b/src/EnergyPlus/HVACStandAloneERV.cc index 574e771fa13..a991369c301 100644 --- a/src/EnergyPlus/HVACStandAloneERV.cc +++ b/src/EnergyPlus/HVACStandAloneERV.cc @@ -1686,23 +1686,23 @@ bool GetStandAloneERVNodeNumber(EnergyPlusData &state, int const NodeNumber) return false; } - int getEqIndex(EnergyPlusData &state, std::string_view CompName, bool &errFlag) +int getEqIndex(EnergyPlusData &state, std::string_view CompName, bool &errFlag) { - if (state.dataHVACStandAloneERV->GetERVInputFlag) { - GetStandAloneERV(state); - state.dataHVACStandAloneERV->GetERVInputFlag = false; - } + if (state.dataHVACStandAloneERV->GetERVInputFlag) { + GetStandAloneERV(state); + state.dataHVACStandAloneERV->GetERVInputFlag = false; + } - int EqIndex = 0; - - for (int StandAloneERVNum = 1; StandAloneERVNum <= state.dataHVACStandAloneERV->NumStandAloneERVs; StandAloneERVNum++) { - if (Util::SameString(CompName, state.dataHVACStandAloneERV->StandAloneERV(StandAloneERVNum).Name)) { - EqIndex = StandAloneERVNum; - break; - } + int EqIndex = 0; + + for (int StandAloneERVNum = 1; StandAloneERVNum <= state.dataHVACStandAloneERV->NumStandAloneERVs; StandAloneERVNum++) { + if (Util::SameString(CompName, state.dataHVACStandAloneERV->StandAloneERV(StandAloneERVNum).Name)) { + EqIndex = StandAloneERVNum; + break; } - if (EqIndex == 0) errFlag = true; - return EqIndex; + } + if (EqIndex == 0) errFlag = true; + return EqIndex; } } // namespace EnergyPlus::HVACStandAloneERV diff --git a/src/EnergyPlus/PurchasedAirManager.cc b/src/EnergyPlus/PurchasedAirManager.cc index b1552ec305e..5b1d719f2a2 100644 --- a/src/EnergyPlus/PurchasedAirManager.cc +++ b/src/EnergyPlus/PurchasedAirManager.cc @@ -3335,20 +3335,20 @@ int GetPurchasedAirZoneExhaustAirNode(EnergyPlusData &state, int PurchAirNum) int getPurchasedAirIndex(EnergyPlusData &state, std::string_view PurchAirName, bool &errFlag) { - if (state.dataPurchasedAirMgr->GetPurchAirInputFlag) { - GetPurchasedAir(state); - state.dataPurchasedAirMgr->GetPurchAirInputFlag = false; - } + if (state.dataPurchasedAirMgr->GetPurchAirInputFlag) { + GetPurchasedAir(state); + state.dataPurchasedAirMgr->GetPurchAirInputFlag = false; + } - int EquipIndex = 0; - for (int PurchAirNum = 1; PurchAirNum <= state.dataPurchasedAirMgr->NumPurchAir; ++PurchAirNum) { - if (Util::SameString(state.dataPurchasedAirMgr->PurchAir(PurchAirNum).Name, PurchAirName)) { - EquipIndex = PurchAirNum; - } + int EquipIndex = 0; + for (int PurchAirNum = 1; PurchAirNum <= state.dataPurchasedAirMgr->NumPurchAir; ++PurchAirNum) { + if (Util::SameString(state.dataPurchasedAirMgr->PurchAir(PurchAirNum).Name, PurchAirName)) { + EquipIndex = PurchAirNum; } + } - if (EquipIndex == 0) errFlag = true; - return EquipIndex; + if (EquipIndex == 0) errFlag = true; + return EquipIndex; } Real64 GetPurchasedAirMixedAirTemp(EnergyPlusData &state, int const PurchAirNum) From 40dc60176f5e81850298bcf1890c868a822c82f5 Mon Sep 17 00:00:00 2001 From: Lixing Gu Date: Thu, 6 Jun 2024 11:31:28 -0400 Subject: [PATCH 18/68] Cleanup --- src/EnergyPlus/RoomAirModelManager.cc | 10 ++----- src/EnergyPlus/RoomAirModelManager.hh | 1 - .../unit/RoomAirflowNetwork.unit.cc | 30 +++++++++---------- 3 files changed, 18 insertions(+), 23 deletions(-) diff --git a/src/EnergyPlus/RoomAirModelManager.cc b/src/EnergyPlus/RoomAirModelManager.cc index 04e7aa5468e..7b8c40f8ed6 100644 --- a/src/EnergyPlus/RoomAirModelManager.cc +++ b/src/EnergyPlus/RoomAirModelManager.cc @@ -1658,12 +1658,8 @@ namespace RoomAir { break; } } - IntEquipFound = CheckEquipName(state, - roomAFNNodeHVAC.Name, - roomAFNNodeHVAC.SupplyNodeName, - roomAFNNodeHVAC.ReturnNodeName, - EquipIndex, - roomAFNNodeHVAC.zoneEquipType); + IntEquipFound = CheckEquipName( + state, roomAFNNodeHVAC.Name, roomAFNNodeHVAC.SupplyNodeName, roomAFNNodeHVAC.ReturnNodeName, roomAFNNodeHVAC.zoneEquipType); if (!IntEquipFound) { ShowSevereError(state, @@ -2699,7 +2695,6 @@ namespace RoomAir { std::string const &EquipName, // Equipment Name std::string &SupplyNodeName, // Supply node name std::string &ReturnNodeName, // Return node name - int EquipIndex, // Equipment index DataZoneEquipment::ZoneEquipType zoneEquipType) { @@ -2722,6 +2717,7 @@ namespace RoomAir { int ReturnNodeNum = 0; SupplyNodeName = ""; + int EquipIndex; if (zoneEquipType == DataZoneEquipment::ZoneEquipType::Invalid) return EquipFind; diff --git a/src/EnergyPlus/RoomAirModelManager.hh b/src/EnergyPlus/RoomAirModelManager.hh index bf030e7fdd0..6f2082797fb 100644 --- a/src/EnergyPlus/RoomAirModelManager.hh +++ b/src/EnergyPlus/RoomAirModelManager.hh @@ -89,7 +89,6 @@ namespace RoomAir { std::string const &EquipName, // Equipment Name std::string &SupplyNodeName, // Supply node name std::string &ReturnNodeName, // Return node name - int EquipIndex, // Equipment index DataZoneEquipment::ZoneEquipType zoneEquipType); // equipment type number } // namespace RoomAir diff --git a/tst/EnergyPlus/unit/RoomAirflowNetwork.unit.cc b/tst/EnergyPlus/unit/RoomAirflowNetwork.unit.cc index 5555bfcb259..36709ad80c0 100644 --- a/tst/EnergyPlus/unit/RoomAirflowNetwork.unit.cc +++ b/tst/EnergyPlus/unit/RoomAirflowNetwork.unit.cc @@ -627,7 +627,7 @@ TEST_F(EnergyPlusFixture, RoomAirflowNetwork_CheckEquipName_Test) zoneEquipType = DataZoneEquipment::ZoneEquipType::VariableRefrigerantFlowTerminal; state->dataHVACVarRefFlow->NumVRFTU = 1; state->dataHVACVarRefFlow->VRFTU(1).Name = EquipName; - check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, EquipIndex, zoneEquipType); + check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, zoneEquipType); if (check) { EXPECT_EQ("SupplyNode", SupplyNodeName); } @@ -640,7 +640,7 @@ TEST_F(EnergyPlusFixture, RoomAirflowNetwork_CheckEquipName_Test) state->dataHVACStandAloneERV->NumStandAloneERVs = 1; state->dataHVACStandAloneERV->StandAloneERV(1).SupplyAirInletNode = 1; state->dataHVACStandAloneERV->StandAloneERV(1).Name = EquipName; - check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, EquipIndex, zoneEquipType); + check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, zoneEquipType); if (check) { EXPECT_EQ("SupplyNode1", SupplyNodeName); } @@ -654,7 +654,7 @@ TEST_F(EnergyPlusFixture, RoomAirflowNetwork_CheckEquipName_Test) state->dataFanCoilUnits->NumFanCoils = 1; state->dataFanCoilUnits->GetFanCoilInputFlag = false; state->dataFanCoilUnits->FanCoil(EquipIndex).Name = EquipName; - check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, EquipIndex, zoneEquipType); + check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, zoneEquipType); if (check) { EXPECT_EQ("SupplyNode2", SupplyNodeName); EXPECT_EQ("ReturnNode2", ReturnNodeName); @@ -669,7 +669,7 @@ TEST_F(EnergyPlusFixture, RoomAirflowNetwork_CheckEquipName_Test) state->dataOutdoorAirUnit->NumOfOAUnits = 1; state->dataOutdoorAirUnit->GetOutdoorAirUnitInputFlag = false; state->dataOutdoorAirUnit->OutAirUnit(EquipIndex).Name = EquipName; - check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, EquipIndex, zoneEquipType); + check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, zoneEquipType); if (check) { EXPECT_EQ("SupplyNode3", SupplyNodeName); EXPECT_EQ("ReturnNode3", ReturnNodeName); @@ -685,7 +685,7 @@ TEST_F(EnergyPlusFixture, RoomAirflowNetwork_CheckEquipName_Test) state->dataUnitarySystems->numUnitarySystems = 1; state->dataUnitarySystems->unitarySys[EquipIndex - 1].AirOutNode = 1; state->dataUnitarySystems->unitarySys[EquipIndex - 1].AirInNode = 2; - check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, EquipIndex, zoneEquipType); + check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, zoneEquipType); if (check) { EXPECT_EQ("SupplyNode4", SupplyNodeName); EXPECT_EQ("ReturnNode4", ReturnNodeName); @@ -701,7 +701,7 @@ TEST_F(EnergyPlusFixture, RoomAirflowNetwork_CheckEquipName_Test) state->dataUnitarySystems->numUnitarySystems = 1; state->dataUnitarySystems->unitarySys[EquipIndex - 1].AirOutNode = 1; state->dataUnitarySystems->unitarySys[EquipIndex - 1].AirInNode = 2; - check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, EquipIndex, zoneEquipType); + check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, zoneEquipType); if (check) { EXPECT_EQ("SupplyNode5", SupplyNodeName); EXPECT_EQ("ReturnNode5", ReturnNodeName); @@ -716,7 +716,7 @@ TEST_F(EnergyPlusFixture, RoomAirflowNetwork_CheckEquipName_Test) state->dataUnitarySystems->numUnitarySystems = 1; state->dataUnitarySystems->unitarySys[EquipIndex - 1].AirOutNode = 1; state->dataUnitarySystems->unitarySys[EquipIndex - 1].AirInNode = 2; - check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, EquipIndex, zoneEquipType); + check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, zoneEquipType); if (check) { EXPECT_EQ("SupplyNode6", SupplyNodeName); EXPECT_EQ("ReturnNode6", ReturnNodeName); @@ -731,7 +731,7 @@ TEST_F(EnergyPlusFixture, RoomAirflowNetwork_CheckEquipName_Test) state->dataUnitHeaters->NumOfUnitHeats = 1; state->dataUnitHeaters->GetUnitHeaterInputFlag = false; state->dataUnitHeaters->UnitHeat(EquipIndex).Name = EquipName; - check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, EquipIndex, zoneEquipType); + check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, zoneEquipType); if (check) { EXPECT_EQ("SupplyNode7", SupplyNodeName); EXPECT_EQ("ReturnNode7", ReturnNodeName); @@ -746,7 +746,7 @@ TEST_F(EnergyPlusFixture, RoomAirflowNetwork_CheckEquipName_Test) state->dataUnitVentilators->NumOfUnitVents = 1; state->dataUnitVentilators->UnitVent(EquipIndex).Name = EquipName; state->dataUnitVentilators->GetUnitVentilatorInputFlag = false; - check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, EquipIndex, zoneEquipType); + check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, zoneEquipType); if (check) { EXPECT_EQ("SupplyNode8", SupplyNodeName); EXPECT_EQ("ReturnNode8", ReturnNodeName); @@ -761,7 +761,7 @@ TEST_F(EnergyPlusFixture, RoomAirflowNetwork_CheckEquipName_Test) state->dataVentilatedSlab->NumOfVentSlabs = 1; state->dataVentilatedSlab->GetInputFlag = false; state->dataVentilatedSlab->VentSlab(EquipIndex).Name = EquipName; - check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, EquipIndex, zoneEquipType); + check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, zoneEquipType); if (check) { EXPECT_EQ("SupplyNode9", SupplyNodeName); EXPECT_EQ("ReturnNode9", ReturnNodeName); @@ -781,7 +781,7 @@ TEST_F(EnergyPlusFixture, RoomAirflowNetwork_CheckEquipName_Test) state->dataMixedAir->OAMixer(1).RetNode = 2; state->dataWindowAC->WindAC(EquipIndex).Name = EquipName; state->dataMixedAir->GetOAMixerInputFlag = false; - check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, EquipIndex, zoneEquipType); + check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, zoneEquipType); if (check) { EXPECT_EQ("SupplyNode10", SupplyNodeName); EXPECT_EQ("ReturnNode10", ReturnNodeName); @@ -795,7 +795,7 @@ TEST_F(EnergyPlusFixture, RoomAirflowNetwork_CheckEquipName_Test) state->dataZoneDehumidifier->ZoneDehumid(EquipIndex).AirInletNodeNum = 2; state->dataZoneDehumidifier->ZoneDehumid(EquipIndex).Name = EquipName; state->dataZoneDehumidifier->GetInputFlag = false; - check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, EquipIndex, zoneEquipType); + check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, zoneEquipType); if (check) { EXPECT_EQ("SupplyNode11", SupplyNodeName); EXPECT_EQ("ReturnNode11", ReturnNodeName); @@ -810,7 +810,7 @@ TEST_F(EnergyPlusFixture, RoomAirflowNetwork_CheckEquipName_Test) state->dataPurchasedAirMgr->NumPurchAir = 1; state->dataPurchasedAirMgr->PurchAir(EquipIndex).Name = EquipName; state->dataPurchasedAirMgr->GetPurchAirInputFlag = false; - check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, EquipIndex, zoneEquipType); + check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, zoneEquipType); if (check) { EXPECT_EQ("SupplyNode12", SupplyNodeName); EXPECT_EQ("ReturnNode12", ReturnNodeName); @@ -825,7 +825,7 @@ TEST_F(EnergyPlusFixture, RoomAirflowNetwork_CheckEquipName_Test) state->dataHybridUnitaryAC->NumZoneHybridEvap = 1; state->dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(EquipIndex).Name = EquipName; state->dataHybridUnitaryAC->GetInputZoneHybridEvap = false; - check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, EquipIndex, zoneEquipType); + check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, zoneEquipType); if (check) { EXPECT_EQ("SupplyNode13", SupplyNodeName); EXPECT_EQ("ReturnNode13", ReturnNodeName); @@ -840,7 +840,7 @@ TEST_F(EnergyPlusFixture, RoomAirflowNetwork_CheckEquipName_Test) state->dataWaterThermalTanks->numHeatPumpWaterHeater = 1; state->dataWaterThermalTanks->HPWaterHeater(EquipIndex).Name = EquipName; state->dataWaterThermalTanks->getWaterThermalTankInputFlag = false; - check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, EquipIndex, zoneEquipType); + check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, zoneEquipType); if (check) { EXPECT_EQ("SupplyNode14", SupplyNodeName); EXPECT_EQ("ReturnNode14", ReturnNodeName); From 29905bdb3593fa6bdd94a19ae1aed6f982f28411 Mon Sep 17 00:00:00 2001 From: Lixing Gu Date: Mon, 10 Jun 2024 13:19:29 -0400 Subject: [PATCH 19/68] Update WaterHeater:HeatPump type --- idd/Energy+.idd.in | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/idd/Energy+.idd.in b/idd/Energy+.idd.in index 466fc0a596b..f37bddeb533 100644 --- a/idd/Energy+.idd.in +++ b/idd/Energy+.idd.in @@ -21172,7 +21172,8 @@ RoomAir:Node:AirflowNetwork:HVACEquipment, \key ZoneHVAC:IdealLoadsAirSystem \key ZoneHVAC:RefrigerationChillerSet \key Fan:ZoneExhaust - \key WaterHeater:HeatPump + \key WaterHeater:HeatPump:PumpedCondenser + \key WaterHeater:HeatPump:WrappedCondenser \key AirTerminal:DualDuct:ConstantVolume \key AirTerminal:DualDuct:VAV \key AirTerminal:SingleDuct:ConstantVolume:Reheat @@ -21222,7 +21223,8 @@ RoomAir:Node:AirflowNetwork:HVACEquipment, \key ZoneHVAC:IdealLoadsAirSystem \key ZoneHVAC:RefrigerationChillerSet \key Fan:ZoneExhaust - \key WaterHeater:HeatPump + \key WaterHeater:HeatPump:PumpedCondenser + \key WaterHeater:HeatPump:WrappedCondenser \key AirTerminal:DualDuct:ConstantVolume \key AirTerminal:DualDuct:VAV \key AirTerminal:SingleDuct:ConstantVolume:Reheat From 0b2affaee84d756ad3531241ed28ebfac25c398c Mon Sep 17 00:00:00 2001 From: Julien Marrec Date: Thu, 20 Jun 2024 01:08:22 +0200 Subject: [PATCH 20/68] Add a test for #10574 --- tst/EnergyPlus/unit/WaterThermalTanks.unit.cc | 262 ++++++++++++++++++ 1 file changed, 262 insertions(+) diff --git a/tst/EnergyPlus/unit/WaterThermalTanks.unit.cc b/tst/EnergyPlus/unit/WaterThermalTanks.unit.cc index ff99c1ca594..9b135c20092 100644 --- a/tst/EnergyPlus/unit/WaterThermalTanks.unit.cc +++ b/tst/EnergyPlus/unit/WaterThermalTanks.unit.cc @@ -56,16 +56,22 @@ #include #include #include +#include #include #include #include #include +#include #include #include #include +#include +#include #include #include #include +#include +#include #include #include #include @@ -5427,3 +5433,259 @@ TEST_F(EnergyPlusFixture, setBackupElementCapacityTest) expectedAnswer = -456.0; EXPECT_NEAR(DSup.BackupElementCapacity, expectedAnswer, allowedTolerance); } + +TEST_F(EnergyPlusFixture, MixedTank_PVT_Per_VolumeSizing_PerSolarCollectorArea) +{ + + std::string const idf_objects = delimited_string({ + + "Schedule:Constant, Sch 80C, , 80.0;", + "Schedule:Constant, Sch 55C, , 55.0;", + "Schedule:Constant, Always 1, , 1.0;", + + "Zone,", + " Zone1, !- Name", + " 0 , !- Direction of Relative North {deg}", + " 0, !- X Origin {m}", + " 0, !- Y Origin {m}", + " 0, !- Z Origin {m}", + " 1, !- Type", + " 1, !- Multiplier", + " , !- Ceiling Height {m}", + " 300, !- Volume {m3}", + " 100, !- Floor Area {m2}", + " TARP, !- Zone Inside Convection Algorithm", + " , !- Zone Outside Convection Algorithm", + " Yes; !- Part of Total Floor Area", + + "BuildingSurface:Detailed," + " Zone1, !- Name", + " Floor, !- Surface Type", + " DummyConstruction, !- Construction Name", + " Zone1, !- Zone Name", + " , !- Space Name", + " Outdoors, !- Outside Boundary Condition", + " , !- Outside Boundary Condition Object", + " NoSun, !- Sun Exposure", + " NoWind, !- Wind Exposure", + " 0, !- View Factor to Ground", + " 4, !- Number of Vertices", + " 10.0, 0.0, 0.0, !- X,Y,Z 1 {m}", + " 0.0, 0.0, 0.0, !- X,Y,Z 2 {m}", + " 0.0, 10.0, 0.0, !- X,Y,Z 3 {m}", + " 10.0, 10.0, 0.0; !- X,Y,Z 4 {m}", + + "Construction," + " DummyConstruction, !- Name", + " DummyMaterial; !- Outside Layer", + + "Material," + " DummyMaterial, !- Name", + " MediumRough, !- Roughness", + " 0.4, !- Thickness {m}", + " 0.033, !- Conductivity {W/m-K}", + " 32, !- Density {kg/m3}", + " 1210, !- Specific Heat {J/kg-K}", + " 0.9, !- Thermal Absorptance", + " 0.7, !- Solar Absorptance", + " 0.7; !- Visible Absorptance", + + "WaterHeater:Mixed," + " Solar Loop Water Heater, !- Name", + " Autosize, !- Tank Volume {m3}", + " Sch 80C, !- Setpoint Temperature Schedule Name", + " 5.00, !- Deadband Temperature Difference {deltaC}", + " 100.00, !- Maximum Temperature Limit {C}", + " Cycle, !- Heater Control Type", + " 0.0, !- Heater Maximum Capacity {W}", + " 0.0, !- Heater Minimum Capacity {W}", + " , !- Heater Ignition Minimum Flow Rate {m3/s}", + " , !- Heater Ignition Delay {s}", + " Electricity, !- Heater Fuel Type", + " 0.8, !- Heater Thermal Efficiency", + " , !- Part Load Factor Curve Name", + " , !- Off Cycle Parasitic Fuel Consumption Rate {W}", + " , !- Off Cycle Parasitic Fuel Type", + " , !- Off Cycle Parasitic Heat Fraction to Tank", + " , !- On Cycle Parasitic Fuel Consumption Rate {W}", + " , !- On Cycle Parasitic Fuel Type", + " , !- On Cycle Parasitic Heat Fraction to Tank", + " Zone, !- Ambient Temperature Indicator", + " , !- Ambient Temperature Schedule Name", + " Zone1, !- Ambient Temperature Zone Name", + " , !- Ambient Temperature Outdoor Air Node Name", + " 0.0000, !- Off Cycle Loss Coefficient to Ambient Temperature {W/K}", + " 1.00, !- Off Cycle Loss Fraction to Zone", + " 0.0000, !- On Cycle Loss Coefficient to Ambient Temperature {W/K}", + " 1.00, !- On Cycle Loss Fraction to Zone", + " 0.01, !- Peak Use Flow Rate {m3/s}", + " Always 1, !- Use Flow Rate Fraction Schedule Name", + " , !- Cold Water Supply Temperature Schedule Name", + " , !- Use Side Inlet Node Name", + " , !- Use Side Outlet Node Name", + " 1.00, !- Use Side Effectiveness", + " Solar Loop Water Heater Heating Inlet Node, !- Source Side Inlet Node Name", + " Solar Loop Water Heater Heating Outlet Node, !- Source Side Outlet Node Name", + " 1.00, !- Source Side Effectiveness", + " 1.0, !- Use Side Design Flow Rate {m3/s}", + " 1.0, !- Source Side Design Flow Rate {m3/s}", + " 1.500000, !- Indirect Water Heating Recovery Time {hr}", + " IndirectHeatPrimarySetpoint, !- Source Side Flow Control Mode", + " Sch 55C; !- Indirect Alternate Setpoint Temperature Schedule Name", + + "WaterHeater:Sizing," + " Solar Loop Water Heater, !- WaterHeater Name", + " PerSolarCollectorArea, !- Design Mode", + " 0.600000, !- Time Storage Can Meet Peak Draw {hr}", + " 0.600000, !- Time for Tank Recovery {hr}", + " 1.000000, !- Nominal Tank Volume for Autosizing Plant Connections {m3}", + " 4, !- Number of Bedrooms", + " 2, !- Number of Bathrooms", + " 0.200000, !- Storage Capacity per Person {m3/person}", + " 0.200000, !- Recovery Capacity per Person {m3/hr-person}", + " 0.020000, !- Storage Capacity per Floor Area {m3/m2}", + " 0.020000, !- Recovery Capacity per Floor Area {m3/hr-m2}", + " 4, !- Number of Units", + " 0.200000, !- Storage Capacity per Unit {m3}", + " 0.200000, !- Recovery Capacity PerUnit {m3/hr}", + " 0.200, !- Storage Capacity per Collector Area {m3/m2}", + " 1.000; !- Height Aspect Ratio", + + "SolarCollector:FlatPlate:PhotovoltaicThermal," + " Collector 2 PVT, !- Name", + " Solar collector 3, !- Surface Name", + " 30percentPVThalfarea, !- Photovoltaic-Thermal Model Performance Name", + " Collector 2 PV, !- Photovoltaic Name", + " Water, !- Thermal Working Fluid Type", + " Solar Collector Water Inlet Node, !- Water Inlet Node Name", + " Solar Collector Water Outlet Node, !- Water Outlet Node Name", + " , !- Air Inlet Node Name", + " , !- Air Outlet Node Name", + " autosize; !- Design Flow Rate {m3/s}", + + "SolarCollectorPerformance:PhotovoltaicThermal:Simple," + " 30percentPVThalfarea, !- Name", + " 0.5, !- Fraction of Surface Area with Active Thermal Collector {dimensionless}", + " Fixed, !- Thermal Conversion Efficiency Input Mode Type", + " 0.3, !- Value for Thermal Conversion Efficiency if Fixed", + " , !- Thermal Conversion Efficiency Schedule Name", + " 0.84; !- Front Surface Emittance", + + "Generator:Photovoltaic," + " Collector 2 PV, !- Name", + " Solar collector 3, !- Surface Name", + " PhotovoltaicPerformance:Simple, !- Photovoltaic Performance Object Type", + " 15percentPV Constant Efficiency, !- Module Performance Name", + " PhotovoltaicThermalSolarCollector, !- Heat Transfer Integration Mode", + " 1, !- Number of Series Strings in Parallel {dimensionless}", + " 1; !- Number of Modules in Series {dimensionless}", + + "PhotovoltaicPerformance:Simple," + " 15percentPV Constant Efficiency, !- Name", + " 0.90, !- Fraction of Surface Area with Active Solar Cells {dimensionless}", + " Fixed, !- Conversion Efficiency Input Mode", + " 0.15; !- Value for Cell Efficiency if Fixed", + + "Shading:Building:Detailed,", + " Solar collector 3, !- Name", + " , !- Transmittance Schedule Name", + " 4, !- Number of Vertices", + " 0, 10, 6, !- X,Y,Z Vertex 1 {m}", + " 0, 0, 6, !- X,Y,Z Vertex 2 {m}", + " 1, 0, 6, !- X,Y,Z Vertex 3 {m}", + " 1, 10, 6; !- X,Y,Z Vertex 4 {m} ", + }); + + ASSERT_TRUE(process_idf(idf_objects)); + + bool ErrorsFound = false; + HeatBalanceManager::GetHeatBalanceInput(*state); // Gets materials, constructions, zones, surfaces, etc. + HeatBalanceSurfaceManager::AllocateSurfaceHeatBalArrays(*state); + HeatBalanceManager::AllocateHeatBalArrays(*state); + + SurfaceGeometry::GetSurfaceData(*state, ErrorsFound); + EXPECT_FALSE(ErrorsFound); + SolarShading::AllocateModuleArrays(*state); + + Photovoltaics::GetPVInput(*state); + PhotovoltaicThermalCollectors::GetPVTcollectorsInput(*state); + + EXPECT_EQ(1, state->dataPhotovoltaicThermalCollector->NumPVT); + auto &pvt = state->dataPhotovoltaicThermalCollector->PVT(1); + // 10 m^2 for the surface, 0.5 Fraction of Surface Area with Active Thermal Collector + EXPECT_EQ(10.0 * 0.5, pvt.AreaCol); + InternalHeatGains::GetInternalHeatGainsInput(*state); + has_err_output(true); + EXPECT_FALSE(WaterThermalTanks::GetWaterThermalTankInput(*state)); // This returns true if ErrorsFound + EXPECT_TRUE(compare_err_stream("")); + + EXPECT_EQ(4, state->dataLoopNodes->NumOfNodes); + + EXPECT_EQ(1, state->dataWaterThermalTanks->numWaterHeaterMixed); + EXPECT_EQ(1, state->dataWaterThermalTanks->numWaterHeaterSizing); + EXPECT_EQ(0, state->dataWaterThermalTanks->numWaterHeaterStratified); + EXPECT_EQ(0, state->dataWaterThermalTanks->numWaterHeaterDesuperheater); + auto &Tank = state->dataWaterThermalTanks->WaterThermalTank(1); + EXPECT_TRUE(Tank.VolumeWasAutoSized); + + // set up the plant loops + // first the load side + state->dataPlnt->TotNumLoops = 1; + state->dataPlnt->PlantLoop.allocate(1); + + auto &plantLoop = state->dataPlnt->PlantLoop(1); + auto &supplySide = plantLoop.LoopSide(DataPlant::LoopSideLocation::Supply); + supplySide.TotalBranches = 1; + supplySide.Branch.allocate(1); + supplySide.Branch(1).TotalComponents = 1; + supplySide.Branch(1).Comp.allocate(1); + auto &PlantSupplySideComp = supplySide.Branch(1).Comp(1); + PlantSupplySideComp.Type = DataPlant::PlantEquipmentType::WtrHeaterMixed; + PlantSupplySideComp.Name = Tank.Name; + PlantSupplySideComp.NodeNumIn = Tank.SourceInletNode; + PlantSupplySideComp.NodeNumOut = Tank.SourceOutletNode; + + auto &demandSide = plantLoop.LoopSide(DataPlant::LoopSideLocation::Demand); + demandSide.TotalBranches = 1; + demandSide.Branch.allocate(1); + demandSide.Branch(1).TotalComponents = 1; + demandSide.Branch(1).Comp.allocate(1); + auto &PlantDemandSideComp = demandSide.Branch(1).Comp(1); + PlantDemandSideComp.Type = DataPlant::PlantEquipmentType::PVTSolarCollectorFlatPlate; + PlantDemandSideComp.Name = pvt.Name; + PlantDemandSideComp.NodeNumIn = pvt.PlantInletNodeNum; + PlantDemandSideComp.NodeNumOut = pvt.PlantOutletNodeNum; + + state->dataGlobal->BeginEnvrnFlag = false; + + EXPECT_ENUM_EQ(DataPlant::LoopSideLocation::Invalid, pvt.WPlantLoc.loopSideNum); + EXPECT_EQ(0, pvt.WPlantLoc.loopNum); + // This is actually unused by PVTCollectorStruct::onInitLoopEquip but in case that changes, make it make sense + PlantLocation plantLocDemand = PlantLocation(1, DataPlant::LoopSideLocation::Demand, 1, 1); + pvt.onInitLoopEquip(*state, plantLocDemand); + EXPECT_ENUM_EQ(DataPlant::LoopSideLocation::Demand, pvt.WPlantLoc.loopSideNum); + EXPECT_EQ(1, pvt.WPlantLoc.loopNum); + + EXPECT_ENUM_EQ(DataPlant::LoopSideLocation::Invalid, Tank.SrcSidePlantLoc.loopSideNum); + EXPECT_EQ(0, Tank.SrcSidePlantLoc.loopNum); + PlantLocation plantLocSupply = PlantLocation(1, DataPlant::LoopSideLocation::Supply, 1, 1); + EXPECT_DOUBLE_EQ(0.00, Tank.Sizing.TotalSolarCollectorArea); + EXPECT_DOUBLE_EQ(DataSizing::AutoSize, Tank.Volume); + + has_eio_output(true); + + state->dataPlnt->PlantFirstSizesOkayToFinalize = true; + state->dataPlnt->PlantFinalSizesOkayToReport = true; + Tank.onInitLoopEquip(*state, plantLocSupply); + EXPECT_ENUM_EQ(DataPlant::LoopSideLocation::Supply, Tank.SrcSidePlantLoc.loopSideNum); + EXPECT_EQ(1, Tank.SrcSidePlantLoc.loopNum); + + // compare_eio_stream(delimited_string({ + // "Water Heater Information,WaterHeater:Mixed,SOLAR LOOP WATER HEATER,-99998.9999,0.0,0.000,0.0000", + // "! , Component Type, Component Name, Input Field Description, Value", + // " Component Sizing Information, WaterHeater:Mixed, SOLAR LOOP WATER HEATER, Tank Volume [m3], 1.00000", + // })); + EXPECT_DOUBLE_EQ(5.00, Tank.Sizing.TotalSolarCollectorArea); + EXPECT_DOUBLE_EQ(0.2, Tank.Sizing.TankCapacityPerCollectorArea); + EXPECT_DOUBLE_EQ(1.0, Tank.Volume); +} From ed631fc941d1ae63488d6a3b5489e5b8f5c99cfd Mon Sep 17 00:00:00 2001 From: Julien Marrec Date: Thu, 20 Jun 2024 01:26:26 +0200 Subject: [PATCH 21/68] Specifically test for the NaN ``` [ RUN ] EnergyPlusFixture.WH_Sizing /Users/julien/Software/Others/EnergyPlus2/tst/EnergyPlus/unit/WaterThermalTanks.unit.cc:5690: Failure Expected equality of these values: 5.00 Which is: 5 Tank.Sizing.TotalSolarCollectorArea Which is: 0 /Users/julien/Software/Others/EnergyPlus2/tst/EnergyPlus/unit/WaterThermalTanks.unit.cc:5692: Failure Expected equality of these values: 1.0 Which is: 1 Tank.Volume Which is: 0 /Users/julien/Software/Others/EnergyPlus2/tst/EnergyPlus/unit/WaterThermalTanks.unit.cc:5711: Failure Value of: std::isnan(Tank.AmbientZoneGain) Actual: true Expected: false /Users/julien/Software/Others/EnergyPlus2/tst/EnergyPlus/unit/WaterThermalTanks.unit.cc:5712: Failure Expected equality of these values: 0.0 Which is: 0 Tank.AmbientZoneGain Which is: nan ``` --- tst/EnergyPlus/unit/WaterThermalTanks.unit.cc | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/tst/EnergyPlus/unit/WaterThermalTanks.unit.cc b/tst/EnergyPlus/unit/WaterThermalTanks.unit.cc index 9b135c20092..c22cfba24ce 100644 --- a/tst/EnergyPlus/unit/WaterThermalTanks.unit.cc +++ b/tst/EnergyPlus/unit/WaterThermalTanks.unit.cc @@ -78,6 +78,8 @@ #include #include +#include + using namespace EnergyPlus; using namespace OutputReportPredefined; @@ -5688,4 +5690,24 @@ TEST_F(EnergyPlusFixture, MixedTank_PVT_Per_VolumeSizing_PerSolarCollectorArea) EXPECT_DOUBLE_EQ(5.00, Tank.Sizing.TotalSolarCollectorArea); EXPECT_DOUBLE_EQ(0.2, Tank.Sizing.TankCapacityPerCollectorArea); EXPECT_DOUBLE_EQ(1.0, Tank.Volume); + + state->dataGlobal->HourOfDay = 0; + state->dataGlobal->TimeStep = 1; + state->dataGlobal->TimeStepZone = 1.0 / 60.0; // one-minute system time step + state->dataHVACGlobal->TimeStepSys = state->dataGlobal->TimeStepZone; + state->dataHVACGlobal->TimeStepSysSec = state->dataHVACGlobal->TimeStepSys * Constant::SecInHour; + Tank.SavedTankTemp = 60.0; + Tank.TankTemp = 60.0; + Tank.AmbientTempZone = 20.0; + Tank.AmbientTemp = 20.0; + Tank.UseInletTemp = 20.0; + Tank.SetPointTemp = 55.0; + Tank.SetPointTemp2 = Tank.SetPointTemp; + Tank.TimeElapsed = 0.0; + + Tank.SourceMassFlowRate = 0.0; + + Tank.CalcWaterThermalTankMixed(*state); + EXPECT_FALSE(std::isnan(Tank.AmbientZoneGain)); + EXPECT_DOUBLE_EQ(0.0, Tank.AmbientZoneGain); // Didn't define on/off cycle losses } From df5042fb91e1dd2592e365832fff2a0b38e8496d Mon Sep 17 00:00:00 2001 From: Julien Marrec Date: Thu, 20 Jun 2024 01:35:15 +0200 Subject: [PATCH 22/68] Fix #10574 - Deal with BIPVT for WaterHeater sizing and throw error if Total Collector area found is zero --- src/EnergyPlus/WaterThermalTanks.cc | 95 +++++++++++++++++++++++------ 1 file changed, 78 insertions(+), 17 deletions(-) diff --git a/src/EnergyPlus/WaterThermalTanks.cc b/src/EnergyPlus/WaterThermalTanks.cc index 730b4f5ddad..4f747999d2a 100644 --- a/src/EnergyPlus/WaterThermalTanks.cc +++ b/src/EnergyPlus/WaterThermalTanks.cc @@ -77,6 +77,7 @@ #include #include #include +#include #include #include #include @@ -11201,9 +11202,6 @@ void WaterThermalTankData::SizeTankForSupplySide(EnergyPlusData &state) static constexpr std::string_view RoutineName("SizeTankForSupplySide"); - Real64 Tstart = 14.44; - Real64 Tfinish = 57.22; - Real64 tmpTankVolume = this->Volume; Real64 tmpMaxCapacity = this->MaxCapacity; @@ -11221,8 +11219,11 @@ void WaterThermalTankData::SizeTankForSupplySide(EnergyPlusData &state) } if (this->MaxCapacityWasAutoSized) { if (this->Sizing.RecoveryTime > 0.0) { - Real64 rho; - Real64 Cp; + Real64 rho = 0.0; + Real64 Cp = 0.0; + constexpr Real64 Tstart = 14.44; + constexpr Real64 Tfinish = 57.22; + if (this->SrcSidePlantLoc.loopNum > 0) { rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->SrcSidePlantLoc.loopNum).FluidName, @@ -11242,8 +11243,7 @@ void WaterThermalTankData::SizeTankForSupplySide(EnergyPlusData &state) (this->Sizing.RecoveryTime * Constant::SecInHour); // m3 | kg/m3 | J/Kg/K | K | seconds } else { ShowFatalError( - state, - format("SizeTankForSupplySide: Tank=\"{}\", requested sizing for max capacity but entered Recovery Time is zero.", this->Name)); + state, format("{}: Tank=\"{}\", requested sizing for max capacity but entered Recovery Time is zero.", RoutineName, this->Name)); } } @@ -11259,12 +11259,40 @@ void WaterThermalTankData::SizeTankForSupplySide(EnergyPlusData &state) } else if (this->Sizing.DesignMode == SizingMode::PerSolarColArea) { this->Sizing.TotalSolarCollectorArea = 0.0; + if (state.dataSolarCollectors->GetInputFlag) { + SolarCollectors::GetSolarCollectorInput(state); + state.dataSolarCollectors->GetInputFlag = false; + } + for (int CollectorNum = 1; CollectorNum <= state.dataSolarCollectors->NumOfCollectors; ++CollectorNum) { - this->Sizing.TotalSolarCollectorArea += state.dataSurface->Surface(state.dataSolarCollectors->Collector(CollectorNum).Surface).Area; + auto const &collector = state.dataSolarCollectors->Collector(CollectorNum); + this->Sizing.TotalSolarCollectorArea += state.dataSurface->Surface(collector.Surface).Area; + } + + if (state.dataPhotovoltaicThermalCollector->GetInputFlag) { + PhotovoltaicThermalCollectors::GetPVTcollectorsInput(state); + state.dataPhotovoltaicThermalCollector->GetInputFlag = false; } - if (this->VolumeWasAutoSized) tmpTankVolume = this->Sizing.TotalSolarCollectorArea * this->Sizing.TankCapacityPerCollectorArea; - if (this->MaxCapacityWasAutoSized) tmpMaxCapacity = 0.0; + for (int CollectorNum = 1; CollectorNum <= state.dataPhotovoltaicThermalCollector->NumPVT; ++CollectorNum) { + auto const &collector = state.dataPhotovoltaicThermalCollector->PVT(CollectorNum); + this->Sizing.TotalSolarCollectorArea += collector.AreaCol; + } + + if (this->VolumeWasAutoSized) { + if (this->Sizing.TotalSolarCollectorArea > 0) { + tmpTankVolume = this->Sizing.TotalSolarCollectorArea * this->Sizing.TankCapacityPerCollectorArea; + } else { + ShowFatalError(state, + format("{}: Tank=\"{}\", requested sizing for volume with PerSolarCollectorArea but total found " + "area of Collectors is zero.", + RoutineName, + this->Name)); + } + } + if (this->MaxCapacityWasAutoSized) { + tmpMaxCapacity = 0.0; + } if (this->VolumeWasAutoSized && state.dataPlnt->PlantFirstSizesOkayToFinalize) { this->Volume = tmpTankVolume; if (state.dataPlnt->PlantFinalSizesOkayToReport) { @@ -11285,7 +11313,9 @@ void WaterThermalTankData::SizeTankForSupplySide(EnergyPlusData &state) } } - if (this->MaxCapacityWasAutoSized) this->setBackupElementCapacity(state); + if (this->MaxCapacityWasAutoSized) { + this->setBackupElementCapacity(state); + } if ((this->VolumeWasAutoSized) && (this->WaterThermalTankType == DataPlant::PlantEquipmentType::WtrHeaterStratified) && state.dataPlnt->PlantFirstSizesOkayToFinalize) { // might set height @@ -11577,8 +11607,7 @@ void WaterThermalTankData::SizeStandAloneWaterHeater(EnergyPlusData &state) } else { ShowFatalError( state, - format("SizeStandAloneWaterHeater: Tank=\"{}\", requested sizing for max capacity but entered Recovery Time is zero.", - this->Name)); + format("{}: Tank=\"{}\", requested sizing for max capacity but entered Recovery Time is zero.", RoutineName, this->Name)); } this->MaxCapacity = tmpMaxCapacity; BaseSizer::reportSizerOutput(state, this->Type, this->Name, "Maximum Heater Capacity [W]", this->MaxCapacity); @@ -11800,13 +11829,43 @@ void WaterThermalTankData::SizeStandAloneWaterHeater(EnergyPlusData &state) break; } case SizingMode::PerSolarColArea: { + this->Sizing.TotalSolarCollectorArea = 0.0; + if (state.dataSolarCollectors->GetInputFlag) { + SolarCollectors::GetSolarCollectorInput(state); + state.dataSolarCollectors->GetInputFlag = false; + } + for (int CollectorNum = 1; CollectorNum <= state.dataSolarCollectors->NumOfCollectors; ++CollectorNum) { - this->Sizing.TotalSolarCollectorArea += state.dataSurface->Surface(state.dataSolarCollectors->Collector(CollectorNum).Surface).Area; + auto const &collector = state.dataSolarCollectors->Collector(CollectorNum); + this->Sizing.TotalSolarCollectorArea += state.dataSurface->Surface(collector.Surface).Area; + } + + if (state.dataPhotovoltaicThermalCollector->GetInputFlag) { + PhotovoltaicThermalCollectors::GetPVTcollectorsInput(state); + state.dataPhotovoltaicThermalCollector->GetInputFlag = false; + } + + for (int CollectorNum = 1; CollectorNum <= state.dataPhotovoltaicThermalCollector->NumPVT; ++CollectorNum) { + auto const &collector = state.dataPhotovoltaicThermalCollector->PVT(CollectorNum); + this->Sizing.TotalSolarCollectorArea += collector.AreaCol; + } + + if (this->VolumeWasAutoSized) { + if (this->Sizing.TotalSolarCollectorArea > 0) { + tmpTankVolume = this->Sizing.TotalSolarCollectorArea * this->Sizing.TankCapacityPerCollectorArea; + } else { + ShowFatalError(state, + format("{}: Tank=\"{}\", requested sizing for volume with PerSolarCollectorArea but total found " + "area of Collectors is zero.", + RoutineName, + this->Name)); + } + } + if (this->MaxCapacityWasAutoSized) { + tmpMaxCapacity = 0.0; } - if (this->VolumeWasAutoSized) tmpTankVolume = this->Sizing.TotalSolarCollectorArea * this->Sizing.TankCapacityPerCollectorArea; - if (this->MaxCapacityWasAutoSized) tmpMaxCapacity = 0.0; if (this->VolumeWasAutoSized) { this->Volume = tmpTankVolume; BaseSizer::reportSizerOutput(state, this->Type, this->Name, "Tank Volume [m3]", this->Volume); @@ -11818,7 +11877,9 @@ void WaterThermalTankData::SizeStandAloneWaterHeater(EnergyPlusData &state) break; } default: - if (this->MaxCapacityWasAutoSized) this->setBackupElementCapacity(state); + if (this->MaxCapacityWasAutoSized) { + this->setBackupElementCapacity(state); + } break; } } From 4ee8bcb4e80adb7f6d7a84c9e61eb08af59f40d8 Mon Sep 17 00:00:00 2001 From: Julien Marrec Date: Thu, 20 Jun 2024 01:50:17 +0200 Subject: [PATCH 23/68] The CollectorData and PVTCollectorStruct use a factory, so we don't need to check if we need to trigger the getinput for them --- src/EnergyPlus/WaterThermalTanks.cc | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/src/EnergyPlus/WaterThermalTanks.cc b/src/EnergyPlus/WaterThermalTanks.cc index 4f747999d2a..060fc2d59dc 100644 --- a/src/EnergyPlus/WaterThermalTanks.cc +++ b/src/EnergyPlus/WaterThermalTanks.cc @@ -11259,21 +11259,12 @@ void WaterThermalTankData::SizeTankForSupplySide(EnergyPlusData &state) } else if (this->Sizing.DesignMode == SizingMode::PerSolarColArea) { this->Sizing.TotalSolarCollectorArea = 0.0; - if (state.dataSolarCollectors->GetInputFlag) { - SolarCollectors::GetSolarCollectorInput(state); - state.dataSolarCollectors->GetInputFlag = false; - } for (int CollectorNum = 1; CollectorNum <= state.dataSolarCollectors->NumOfCollectors; ++CollectorNum) { auto const &collector = state.dataSolarCollectors->Collector(CollectorNum); this->Sizing.TotalSolarCollectorArea += state.dataSurface->Surface(collector.Surface).Area; } - if (state.dataPhotovoltaicThermalCollector->GetInputFlag) { - PhotovoltaicThermalCollectors::GetPVTcollectorsInput(state); - state.dataPhotovoltaicThermalCollector->GetInputFlag = false; - } - for (int CollectorNum = 1; CollectorNum <= state.dataPhotovoltaicThermalCollector->NumPVT; ++CollectorNum) { auto const &collector = state.dataPhotovoltaicThermalCollector->PVT(CollectorNum); this->Sizing.TotalSolarCollectorArea += collector.AreaCol; @@ -11831,21 +11822,12 @@ void WaterThermalTankData::SizeStandAloneWaterHeater(EnergyPlusData &state) case SizingMode::PerSolarColArea: { this->Sizing.TotalSolarCollectorArea = 0.0; - if (state.dataSolarCollectors->GetInputFlag) { - SolarCollectors::GetSolarCollectorInput(state); - state.dataSolarCollectors->GetInputFlag = false; - } for (int CollectorNum = 1; CollectorNum <= state.dataSolarCollectors->NumOfCollectors; ++CollectorNum) { auto const &collector = state.dataSolarCollectors->Collector(CollectorNum); this->Sizing.TotalSolarCollectorArea += state.dataSurface->Surface(collector.Surface).Area; } - if (state.dataPhotovoltaicThermalCollector->GetInputFlag) { - PhotovoltaicThermalCollectors::GetPVTcollectorsInput(state); - state.dataPhotovoltaicThermalCollector->GetInputFlag = false; - } - for (int CollectorNum = 1; CollectorNum <= state.dataPhotovoltaicThermalCollector->NumPVT; ++CollectorNum) { auto const &collector = state.dataPhotovoltaicThermalCollector->PVT(CollectorNum); this->Sizing.TotalSolarCollectorArea += collector.AreaCol; From ee3e6d96ef9342eb7193e4b02e191ef46c19d9c4 Mon Sep 17 00:00:00 2001 From: Tanaya Mankad Date: Fri, 21 Jun 2024 13:02:41 -0600 Subject: [PATCH 24/68] Change expected values for OA node in test. --- tst/EnergyPlus/unit/PackagedTerminalHeatPump.unit.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tst/EnergyPlus/unit/PackagedTerminalHeatPump.unit.cc b/tst/EnergyPlus/unit/PackagedTerminalHeatPump.unit.cc index 69f07912d4c..a8e0a3499d5 100644 --- a/tst/EnergyPlus/unit/PackagedTerminalHeatPump.unit.cc +++ b/tst/EnergyPlus/unit/PackagedTerminalHeatPump.unit.cc @@ -4009,8 +4009,8 @@ TEST_F(EnergyPlusFixture, PTACDrawAirfromReturnNodeAndPlenum_Test) // EXPECT_NEAR(23.153277047505515, state->dataLoopNodes->Node(11).Temp, 0.001); // ATMixer primary air inlet node, or air loop SAT, T = OAT + fan heat - EXPECT_NEAR(31.1803, state->dataLoopNodes->Node(ATMixer1PriInNode).Temp, 0.001); - EXPECT_NEAR(0.0015, state->dataLoopNodes->Node(ATMixer1PriInNode).HumRat, 0.001); + EXPECT_NEAR(34.2002, state->dataLoopNodes->Node(ATMixer1PriInNode).Temp, 0.001); + EXPECT_NEAR(0.0003, state->dataLoopNodes->Node(ATMixer1PriInNode).HumRat, 0.001); EXPECT_NEAR(35169.5566, state->dataLoopNodes->Node(ATMixer1PriInNode).Enthalpy, 0.001); // *** this next test is different from develop, air loop is on, this pri/ret flow was 0 before @@ -4027,7 +4027,7 @@ TEST_F(EnergyPlusFixture, PTACDrawAirfromReturnNodeAndPlenum_Test) // same temperature test as above commented out test (23.15327704750551), now shows 21.2 C // how do you mix 2 air streams with T1in=31.18 and T2in=23.15 and get Tout=21.23 ?? // must be a node enthalpy issue with this unit test? - EXPECT_NEAR(21.2316, state->dataLoopNodes->Node(ATMixer1AirOutNode).Temp, 0.001); + EXPECT_NEAR(21.5613, state->dataLoopNodes->Node(ATMixer1AirOutNode).Temp, 0.001); EXPECT_NEAR(0.324036, state->dataLoopNodes->Node(ATMixer1AirOutNode).MassFlowRate, 0.001); // mass balance zone 1 ATMixer outlet enthalpy based on pri and sec inlet stream enthalpy From 0c5ec52eb07eb5c02258fd13291fe91f6626b2d0 Mon Sep 17 00:00:00 2001 From: Tanaya Mankad Date: Fri, 21 Jun 2024 13:41:41 -0600 Subject: [PATCH 25/68] Fix formatting. --- tst/EnergyPlus/unit/MixedAir.unit.cc | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/tst/EnergyPlus/unit/MixedAir.unit.cc b/tst/EnergyPlus/unit/MixedAir.unit.cc index 69a088c6788..77338b99c55 100644 --- a/tst/EnergyPlus/unit/MixedAir.unit.cc +++ b/tst/EnergyPlus/unit/MixedAir.unit.cc @@ -7742,11 +7742,9 @@ TEST_F(EnergyPlusFixture, MixedAir_TemperatureError) state->dataLoopNodes->Node(return_node).Press = 99063; state->dataLoopNodes->Node(return_node).MassFlowRate = 0.2923; - MixedAir::SimOAMixer( - *state, state->dataAirLoop->OutsideAirSys(1).ComponentName(1), state->dataAirLoop->OutsideAirSys(1).ComponentIndex(1)); + MixedAir::SimOAMixer(*state, state->dataAirLoop->OutsideAirSys(1).ComponentName(1), state->dataAirLoop->OutsideAirSys(1).ComponentIndex(1)); - auto T_sat = Psychrometrics::PsyTsatFnHPb( - *state, state->dataMixedAir->OAMixer(1).MixEnthalpy, state->dataMixedAir->OAMixer(1).MixPressure); + auto T_sat = Psychrometrics::PsyTsatFnHPb(*state, state->dataMixedAir->OAMixer(1).MixEnthalpy, state->dataMixedAir->OAMixer(1).MixPressure); // T_db must be >= T_sat at the mixed-air node to remain physical EXPECT_TRUE(state->dataMixedAir->OAMixer(1).MixTemp >= T_sat); From 08348b5cd0248b0403dee70a5ada944fc7be7f5a Mon Sep 17 00:00:00 2001 From: Tanaya Mankad Date: Mon, 24 Jun 2024 16:20:04 -0600 Subject: [PATCH 26/68] Move dataEnvrn settings above any functions that call SetOANodeValues. --- src/EnergyPlus/MixedAir.cc | 2 +- .../unit/PackagedTerminalHeatPump.unit.cc | 21 ++++++++++--------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/EnergyPlus/MixedAir.cc b/src/EnergyPlus/MixedAir.cc index 57884130822..bc658eb3530 100644 --- a/src/EnergyPlus/MixedAir.cc +++ b/src/EnergyPlus/MixedAir.cc @@ -4683,7 +4683,7 @@ void CalcOAMixer(EnergyPlusData &state, int const OAMixerNum) Psychrometrics::PsyTdbFnHW(state.dataMixedAir->OAMixer(OAMixerNum).MixEnthalpy, state.dataMixedAir->OAMixer(OAMixerNum).MixHumRat); // Check for saturation temperature > dry-bulb temperature and modify temperature at constant enthalpy - auto T_sat = + Real64 T_sat = Psychrometrics::PsyTsatFnHPb(state, state.dataMixedAir->OAMixer(OAMixerNum).MixEnthalpy, state.dataMixedAir->OAMixer(OAMixerNum).MixPressure); if (state.dataMixedAir->OAMixer(OAMixerNum).MixTemp < T_sat) { state.dataMixedAir->OAMixer(OAMixerNum).MixTemp = T_sat; diff --git a/tst/EnergyPlus/unit/PackagedTerminalHeatPump.unit.cc b/tst/EnergyPlus/unit/PackagedTerminalHeatPump.unit.cc index a8e0a3499d5..023c2b73188 100644 --- a/tst/EnergyPlus/unit/PackagedTerminalHeatPump.unit.cc +++ b/tst/EnergyPlus/unit/PackagedTerminalHeatPump.unit.cc @@ -3881,6 +3881,14 @@ TEST_F(EnergyPlusFixture, PTACDrawAirfromReturnNodeAndPlenum_Test) state->dataZoneEnergyDemand->DeadBandOrSetback.allocate(state->dataGlobal->NumOfZones); state->dataZoneEnergyDemand->DeadBandOrSetback = 0.0; + state->dataEnvrn->OutDryBulbTemp = 30.0; + state->dataEnvrn->OutHumRat = 0.0015; + state->dataEnvrn->OutBaroPress = 101325.0; + state->dataEnvrn->OutEnthalpy = Psychrometrics::PsyHFnTdbW(30.0, 0.0015); + state->dataEnvrn->WindSpeed = 4.9; + state->dataEnvrn->WindDir = 270.0; + state->dataEnvrn->StdRhoAir = 1.2; + ZoneAirLoopEquipmentManager::GetZoneAirLoopEquipment(*state); SimAirServingZones::GetAirPathData(*state); state->dataSimAirServingZones->GetAirLoopInputFlag = false; @@ -3902,13 +3910,6 @@ TEST_F(EnergyPlusFixture, PTACDrawAirfromReturnNodeAndPlenum_Test) state->dataZoneEnergyDemand->ZoneSysEnergyDemand(i).RemainingOutputReqToCoolSP = -5000.0; state->dataZoneEnergyDemand->ZoneSysEnergyDemand(i).RemainingOutputReqToHeatSP = -200.0; } - state->dataEnvrn->OutDryBulbTemp = 30.0; - state->dataEnvrn->OutHumRat = 0.0015; - state->dataEnvrn->OutBaroPress = 101325.0; - state->dataEnvrn->OutEnthalpy = Psychrometrics::PsyHFnTdbW(30.0, 0.0015); - state->dataEnvrn->WindSpeed = 4.9; - state->dataEnvrn->WindDir = 270.0; - state->dataEnvrn->StdRhoAir = 1.2; GetZoneAirSetPoints(*state); state->dataHeatBalFanSys->TempControlType.allocate(6); state->dataHeatBalFanSys->TempControlType = HVAC::ThermostatType::DualSetPointWithDeadBand; @@ -4009,8 +4010,8 @@ TEST_F(EnergyPlusFixture, PTACDrawAirfromReturnNodeAndPlenum_Test) // EXPECT_NEAR(23.153277047505515, state->dataLoopNodes->Node(11).Temp, 0.001); // ATMixer primary air inlet node, or air loop SAT, T = OAT + fan heat - EXPECT_NEAR(34.2002, state->dataLoopNodes->Node(ATMixer1PriInNode).Temp, 0.001); - EXPECT_NEAR(0.0003, state->dataLoopNodes->Node(ATMixer1PriInNode).HumRat, 0.001); + EXPECT_NEAR(31.1803, state->dataLoopNodes->Node(ATMixer1PriInNode).Temp, 0.001); + EXPECT_NEAR(0.0015, state->dataLoopNodes->Node(ATMixer1PriInNode).HumRat, 0.001); EXPECT_NEAR(35169.5566, state->dataLoopNodes->Node(ATMixer1PriInNode).Enthalpy, 0.001); // *** this next test is different from develop, air loop is on, this pri/ret flow was 0 before @@ -4027,7 +4028,7 @@ TEST_F(EnergyPlusFixture, PTACDrawAirfromReturnNodeAndPlenum_Test) // same temperature test as above commented out test (23.15327704750551), now shows 21.2 C // how do you mix 2 air streams with T1in=31.18 and T2in=23.15 and get Tout=21.23 ?? // must be a node enthalpy issue with this unit test? - EXPECT_NEAR(21.5613, state->dataLoopNodes->Node(ATMixer1AirOutNode).Temp, 0.001); + EXPECT_NEAR(21.2317, state->dataLoopNodes->Node(ATMixer1AirOutNode).Temp, 0.001); EXPECT_NEAR(0.324036, state->dataLoopNodes->Node(ATMixer1AirOutNode).MassFlowRate, 0.001); // mass balance zone 1 ATMixer outlet enthalpy based on pri and sec inlet stream enthalpy From 5d4b8d2c95d40bfe8d8be8266e76ad12e1e1e9e8 Mon Sep 17 00:00:00 2001 From: amirroth Date: Wed, 26 Jun 2024 08:02:10 -0400 Subject: [PATCH 27/68] namespace Fluid --- src/EnergyPlus/AirLoopHVACDOAS.cc | 6 +- .../CoolingWaterDesAirOutletTempSizing.cc | 4 +- .../Autosizing/CoolingWaterflowSizing.cc | 8 +- .../HeatingWaterDesCoilLoadUsedForUASizing.cc | 12 +- .../Autosizing/HeatingWaterflowSizing.cc | 8 +- .../Autosizing/WaterHeatingCapacitySizing.cc | 8 +- src/EnergyPlus/BaseboardRadiator.cc | 4 +- src/EnergyPlus/BoilerSteam.cc | 40 +- src/EnergyPlus/Boilers.cc | 8 +- src/EnergyPlus/CTElectricGenerator.cc | 4 +- src/EnergyPlus/ChilledCeilingPanelSimple.cc | 14 +- src/EnergyPlus/ChillerAbsorption.cc | 52 +- src/EnergyPlus/ChillerElectricASHRAE205.cc | 26 +- src/EnergyPlus/ChillerElectricEIR.cc | 24 +- src/EnergyPlus/ChillerExhaustAbsorption.cc | 20 +- src/EnergyPlus/ChillerGasAbsorption.cc | 20 +- src/EnergyPlus/ChillerIndirectAbsorption.cc | 54 +- src/EnergyPlus/ChillerReformulatedEIR.cc | 26 +- src/EnergyPlus/CondenserLoopTowers.cc | 88 +- src/EnergyPlus/Data/EnergyPlusData.cc | 6 +- src/EnergyPlus/Data/EnergyPlusData.hh | 4 +- src/EnergyPlus/DaylightingDevices.cc | 2 +- src/EnergyPlus/DesiccantDehumidifiers.cc | 12 +- src/EnergyPlus/EvaporativeFluidCoolers.cc | 42 +- src/EnergyPlus/FanCoilUnits.cc | 12 +- src/EnergyPlus/FluidCoolers.cc | 32 +- src/EnergyPlus/FluidProperties.cc | 1850 ++++++++--------- src/EnergyPlus/FluidProperties.hh | 22 +- src/EnergyPlus/FuelCellElectricGenerator.cc | 4 +- src/EnergyPlus/Furnaces.cc | 26 +- src/EnergyPlus/GroundHeatExchangers.cc | 30 +- src/EnergyPlus/HVACControllers.cc | 2 +- src/EnergyPlus/HVACCooledBeam.cc | 10 +- src/EnergyPlus/HVACFourPipeBeam.cc | 20 +- src/EnergyPlus/HVACInterfaceManager.cc | 6 +- src/EnergyPlus/HVACMultiSpeedHeatPump.cc | 24 +- src/EnergyPlus/HVACSingleDuctInduc.cc | 12 +- src/EnergyPlus/HVACSizingSimulationManager.cc | 4 +- src/EnergyPlus/HVACUnitaryBypassVAV.cc | 10 +- src/EnergyPlus/HVACVariableRefrigerantFlow.cc | 162 +- src/EnergyPlus/HWBaseboardRadiator.cc | 16 +- src/EnergyPlus/HeatPumpWaterToWaterCOOLING.cc | 26 +- src/EnergyPlus/HeatPumpWaterToWaterHEATING.cc | 26 +- src/EnergyPlus/HeatPumpWaterToWaterSimple.cc | 48 +- src/EnergyPlus/Humidifiers.cc | 16 +- src/EnergyPlus/ICEngineElectricGenerator.cc | 4 +- src/EnergyPlus/IceThermalStorage.cc | 6 +- src/EnergyPlus/LowTempRadiantSystem.cc | 20 +- src/EnergyPlus/MicroCHPElectricGenerator.cc | 8 +- .../MicroturbineElectricGenerator.cc | 6 +- src/EnergyPlus/NodeInputManager.cc | 12 +- src/EnergyPlus/OutdoorAirUnit.cc | 7 +- src/EnergyPlus/OutsideEnergySources.cc | 22 +- src/EnergyPlus/PackagedThermalStorageCoil.cc | 34 +- .../PhotovoltaicThermalCollectors.cc | 2 +- src/EnergyPlus/PipeHeatTransfer.cc | 8 +- src/EnergyPlus/Plant/EquipAndOperations.cc | 10 +- src/EnergyPlus/Plant/Loop.cc | 10 +- src/EnergyPlus/Plant/LoopSide.cc | 13 +- src/EnergyPlus/Plant/PlantManager.cc | 31 +- src/EnergyPlus/PlantCentralGSHP.cc | 32 +- src/EnergyPlus/PlantChillers.cc | 78 +- .../PlantComponentTemperatureSources.cc | 6 +- src/EnergyPlus/PlantCondLoopOperation.cc | 4 +- .../PlantHeatExchangerFluidToFluid.cc | 20 +- src/EnergyPlus/PlantLoadProfile.cc | 20 +- src/EnergyPlus/PlantLoopHeatPumpEIR.cc | 40 +- src/EnergyPlus/PlantPipingSystemsManager.cc | 10 +- src/EnergyPlus/PlantPressureSystem.cc | 8 +- src/EnergyPlus/PlantUtilities.cc | 4 +- src/EnergyPlus/PondGroundHeatExchanger.cc | 32 +- src/EnergyPlus/PoweredInductionUnits.cc | 19 +- src/EnergyPlus/Pumps.cc | 22 +- src/EnergyPlus/RefrigeratedCase.cc | 172 +- src/EnergyPlus/ReportCoilSelection.cc | 16 +- src/EnergyPlus/RoomAirModelUserTempPattern.cc | 2 +- src/EnergyPlus/SetPointManager.cc | 2 +- src/EnergyPlus/SimulationManager.cc | 2 +- src/EnergyPlus/SingleDuct.cc | 15 +- src/EnergyPlus/SolarCollectors.cc | 24 +- src/EnergyPlus/StandardRatings.cc | 4 +- src/EnergyPlus/SteamBaseboardRadiator.cc | 18 +- src/EnergyPlus/SteamCoils.cc | 43 +- src/EnergyPlus/SurfaceGroundHeatExchanger.cc | 10 +- src/EnergyPlus/SwimmingPool.cc | 8 +- src/EnergyPlus/UnitHeater.cc | 15 +- src/EnergyPlus/UnitVentilator.cc | 22 +- src/EnergyPlus/UnitarySystem.cc | 36 +- src/EnergyPlus/UserDefinedComponents.cc | 16 +- src/EnergyPlus/VariableSpeedCoils.cc | 26 +- src/EnergyPlus/VentilatedSlab.cc | 17 +- src/EnergyPlus/WaterCoils.cc | 4 +- src/EnergyPlus/WaterThermalTanks.cc | 110 +- src/EnergyPlus/WaterToAirHeatPump.cc | 83 +- src/EnergyPlus/WaterToAirHeatPumpSimple.cc | 10 +- src/EnergyPlus/WaterUse.cc | 2 +- src/EnergyPlus/api/EnergyPlusPgm.cc | 2 +- src/EnergyPlus/api/func.cc | 28 +- tst/EnergyPlus/unit/BoilerHotWater.unit.cc | 4 +- tst/EnergyPlus/unit/ChillerAbsorption.unit.cc | 12 +- .../unit/ChillerExhaustAbsorption.unit.cc | 2 +- .../unit/Fixtures/EnergyPlusFixture.cc | 6 +- tst/EnergyPlus/unit/FluidProperties.unit.cc | 47 +- .../unit/HVACVariableRefrigerantFlow.unit.cc | 13 +- .../unit/HWBaseboardRadiator.unit.cc | 1 - .../unit/LowTempRadiantSystem.unit.cc | 17 +- tst/EnergyPlus/unit/OutdoorAirUnit.unit.cc | 13 +- .../unit/OutsideEnergySources.unit.cc | 12 +- tst/EnergyPlus/unit/PlantCentralGSHP.unit.cc | 8 +- tst/EnergyPlus/unit/PlantLoadProfile.unit.cc | 12 +- tst/EnergyPlus/unit/SetPointManager.unit.cc | 4 +- tst/EnergyPlus/unit/UnitHeater.unit.cc | 7 +- tst/EnergyPlus/unit/UnitarySystem.unit.cc | 2 +- tst/EnergyPlus/unit/WaterCoils.unit.cc | 51 +- tst/EnergyPlus/unit/WaterThermalTanks.unit.cc | 13 +- .../unit/WaterToAirHeatPump.unit.cc | 112 +- 116 files changed, 2161 insertions(+), 2200 deletions(-) diff --git a/src/EnergyPlus/AirLoopHVACDOAS.cc b/src/EnergyPlus/AirLoopHVACDOAS.cc index 2db751c59d2..16a97ba7cbf 100644 --- a/src/EnergyPlus/AirLoopHVACDOAS.cc +++ b/src/EnergyPlus/AirLoopHVACDOAS.cc @@ -889,7 +889,7 @@ namespace AirLoopHVACDOAS { if (Util::SameString(CompType, "COIL:HEATING:WATER")) { WaterCoils::SimulateWaterCoilComponents(state, CompName, FirstHVACIteration, this->m_HeatCoilNum); Real64 CoilMaxVolFlowRate = WaterCoils::GetCoilMaxWaterFlowRate(state, "Coil:Heating:Water", CompName, ErrorsFound); - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->HWPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->HWPlantLoc.loopNum).FluidIndex, @@ -903,7 +903,7 @@ namespace AirLoopHVACDOAS { if (Util::SameString(CompType, "COIL:COOLING:WATER")) { WaterCoils::SimulateWaterCoilComponents(state, CompName, FirstHVACIteration, this->m_CoolCoilNum); Real64 CoilMaxVolFlowRate = WaterCoils::GetCoilMaxWaterFlowRate(state, "Coil:Cooling:Water", CompName, ErrorsFound); - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -918,7 +918,7 @@ namespace AirLoopHVACDOAS { WaterCoils::SimulateWaterCoilComponents(state, CompName, FirstHVACIteration, this->m_CoolCoilNum); Real64 CoilMaxVolFlowRate = WaterCoils::GetCoilMaxWaterFlowRate(state, "Coil:Cooling:Water:DetailedGeometry", CompName, ErrorsFound); - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, diff --git a/src/EnergyPlus/Autosizing/CoolingWaterDesAirOutletTempSizing.cc b/src/EnergyPlus/Autosizing/CoolingWaterDesAirOutletTempSizing.cc index 5afba936626..1eabcdf2ffa 100644 --- a/src/EnergyPlus/Autosizing/CoolingWaterDesAirOutletTempSizing.cc +++ b/src/EnergyPlus/Autosizing/CoolingWaterDesAirOutletTempSizing.cc @@ -66,12 +66,12 @@ Real64 CoolingWaterDesAirOutletTempSizer::size(EnergyPlusData &state, Real64 _or this->autoSizedValue = _originalValue; } else { if (this->termUnitIU) { - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidIndex, this->callingRoutine); - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidIndex, diff --git a/src/EnergyPlus/Autosizing/CoolingWaterflowSizing.cc b/src/EnergyPlus/Autosizing/CoolingWaterflowSizing.cc index 4725b24c5d1..1a6761c9818 100644 --- a/src/EnergyPlus/Autosizing/CoolingWaterflowSizing.cc +++ b/src/EnergyPlus/Autosizing/CoolingWaterflowSizing.cc @@ -88,12 +88,12 @@ Real64 CoolingWaterflowSizer::size(EnergyPlusData &state, Real64 _originalValue, if (DesCoilLoad >= HVAC::SmallLoad) { if (this->dataWaterLoopNum > 0 && this->dataWaterLoopNum <= (int)state.dataPlnt->PlantLoop.size() && this->dataWaterCoilSizCoolDeltaT > 0.0) { - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidIndex, this->callingRoutine); - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidIndex, @@ -120,12 +120,12 @@ Real64 CoolingWaterflowSizer::size(EnergyPlusData &state, Real64 _originalValue, if (this->curOASysNum > 0) CoilDesWaterDeltaT *= 0.5; if (this->dataCapacityUsedForSizing >= HVAC::SmallLoad) { if (this->dataWaterLoopNum > 0 && this->dataWaterLoopNum <= (int)state.dataPlnt->PlantLoop.size() && CoilDesWaterDeltaT > 0.0) { - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidIndex, this->callingRoutine); - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidIndex, diff --git a/src/EnergyPlus/Autosizing/HeatingWaterDesCoilLoadUsedForUASizing.cc b/src/EnergyPlus/Autosizing/HeatingWaterDesCoilLoadUsedForUASizing.cc index 336dc37c5d3..ce84da3ffc6 100644 --- a/src/EnergyPlus/Autosizing/HeatingWaterDesCoilLoadUsedForUASizing.cc +++ b/src/EnergyPlus/Autosizing/HeatingWaterDesCoilLoadUsedForUASizing.cc @@ -69,12 +69,12 @@ Real64 HeatingWaterDesCoilLoadUsedForUASizer::size(EnergyPlusData &state, Real64 this->autoSizedValue = _originalValue; } else { if (this->termUnitSingDuct && (this->curTermUnitSizingNum > 0)) { - Real64 const Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 const Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidIndex, this->callingRoutine); - Real64 const rho = FluidProperties::GetDensityGlycol(state, + Real64 const rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidIndex, @@ -82,12 +82,12 @@ Real64 HeatingWaterDesCoilLoadUsedForUASizer::size(EnergyPlusData &state, Real64 this->autoSizedValue = this->dataWaterFlowUsedForSizing * this->dataWaterCoilSizHeatDeltaT * Cp * rho; state.dataRptCoilSelection->coilSelectionReportObj->setCoilReheatMultiplier(state, this->compName, this->compType, 1.0); } else if ((this->termUnitPIU || this->termUnitIU) && (this->curTermUnitSizingNum > 0)) { - Real64 const Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 const Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidIndex, this->callingRoutine); - Real64 const rho = FluidProperties::GetDensityGlycol(state, + Real64 const rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidIndex, @@ -95,12 +95,12 @@ Real64 HeatingWaterDesCoilLoadUsedForUASizer::size(EnergyPlusData &state, Real64 this->autoSizedValue = this->dataWaterFlowUsedForSizing * this->dataWaterCoilSizHeatDeltaT * Cp * rho * this->termUnitSizing(this->curTermUnitSizingNum).ReheatLoadMult; } else if (this->zoneEqFanCoil || this->zoneEqUnitHeater) { - Real64 const Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 const Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidIndex, this->callingRoutine); - Real64 const rho = FluidProperties::GetDensityGlycol(state, + Real64 const rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidIndex, diff --git a/src/EnergyPlus/Autosizing/HeatingWaterflowSizing.cc b/src/EnergyPlus/Autosizing/HeatingWaterflowSizing.cc index 823f2c00aa3..30e724a0a60 100644 --- a/src/EnergyPlus/Autosizing/HeatingWaterflowSizing.cc +++ b/src/EnergyPlus/Autosizing/HeatingWaterflowSizing.cc @@ -93,12 +93,12 @@ Real64 HeatingWaterflowSizer::size(EnergyPlusData &state, Real64 _originalValue, if (DesCoilLoad >= HVAC::SmallLoad) { if (this->dataWaterLoopNum > 0 && this->dataWaterLoopNum <= (int)state.dataPlnt->PlantLoop.size() && this->dataWaterCoilSizHeatDeltaT > 0.0) { - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidIndex, this->callingRoutine); - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidIndex, @@ -123,12 +123,12 @@ Real64 HeatingWaterflowSizer::size(EnergyPlusData &state, Real64 _originalValue, if (this->dataCapacityUsedForSizing >= HVAC::SmallLoad) { if (this->dataWaterLoopNum > 0 && this->dataWaterLoopNum <= (int)state.dataPlnt->PlantLoop.size() && this->dataWaterCoilSizHeatDeltaT > 0.0) { - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidIndex, this->callingRoutine); - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidIndex, diff --git a/src/EnergyPlus/Autosizing/WaterHeatingCapacitySizing.cc b/src/EnergyPlus/Autosizing/WaterHeatingCapacitySizing.cc index 342293b358a..a0193390ae9 100644 --- a/src/EnergyPlus/Autosizing/WaterHeatingCapacitySizing.cc +++ b/src/EnergyPlus/Autosizing/WaterHeatingCapacitySizing.cc @@ -72,12 +72,12 @@ Real64 WaterHeatingCapacitySizer::size(EnergyPlusData &state, Real64 _originalVa Real64 CoilOutHumRat = 0.0; if ((this->termUnitSingDuct || this->termUnitPIU || this->termUnitIU) && (this->curTermUnitSizingNum > 0)) { DesMassFlow = this->termUnitSizing(this->curTermUnitSizingNum).MaxHWVolFlow; - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidIndex, this->callingRoutine); - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidIndex, @@ -85,12 +85,12 @@ Real64 WaterHeatingCapacitySizer::size(EnergyPlusData &state, Real64 _originalVa NominalCapacityDes = DesMassFlow * this->dataWaterCoilSizHeatDeltaT * Cp * rho; } else if (this->zoneEqFanCoil || this->zoneEqUnitHeater) { DesMassFlow = this->zoneEqSizing(this->curZoneEqNum).MaxHWVolFlow; - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidIndex, this->callingRoutine); - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidIndex, diff --git a/src/EnergyPlus/BaseboardRadiator.cc b/src/EnergyPlus/BaseboardRadiator.cc index 62ee9c5446a..2f448c4674c 100644 --- a/src/EnergyPlus/BaseboardRadiator.cc +++ b/src/EnergyPlus/BaseboardRadiator.cc @@ -95,8 +95,8 @@ namespace BaseboardRadiator { // Use statements for access to subroutines in other modules using namespace ScheduleManager; - using FluidProperties::GetDensityGlycol; - using FluidProperties::GetSpecificHeatGlycol; + using Fluid::GetDensityGlycol; + using Fluid::GetSpecificHeatGlycol; using Psychrometrics::PsyCpAirFnW; using Psychrometrics::PsyRhoAirFnPbTdbW; diff --git a/src/EnergyPlus/BoilerSteam.cc b/src/EnergyPlus/BoilerSteam.cc index ac806e920ae..97f96a35edc 100644 --- a/src/EnergyPlus/BoilerSteam.cc +++ b/src/EnergyPlus/BoilerSteam.cc @@ -267,7 +267,7 @@ namespace BoilerSteam { "Hot Steam Nodes"); if (SteamFluidIndex == 0 && BoilerNum == 1) { - SteamFluidIndex = FluidProperties::FindRefrigerant(state, fluidNameSteam); + SteamFluidIndex = Fluid::FindRefrigerant(state, fluidNameSteam); if (SteamFluidIndex == 0) { ShowSevereError( state, format("{}{}=\"{}\",", RoutineName, state.dataIPShortCut->cCurrentModuleObject, state.dataIPShortCut->cAlphaArgs(1))); @@ -307,13 +307,13 @@ namespace BoilerSteam { int BoilerInletNode = this->BoilerInletNodeNum; Real64 EnthSteamOutDry = - FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, this->TempUpLimitBoilerOut, 1.0, this->FluidIndex, RoutineName); + Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, this->TempUpLimitBoilerOut, 1.0, this->FluidIndex, RoutineName); Real64 EnthSteamOutWet = - FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, this->TempUpLimitBoilerOut, 0.0, this->FluidIndex, RoutineName); + Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, this->TempUpLimitBoilerOut, 0.0, this->FluidIndex, RoutineName); Real64 LatentEnthSteam = EnthSteamOutDry - EnthSteamOutWet; Real64 CpWater = - FluidProperties::GetSatSpecificHeatRefrig(state, fluidNameSteam, this->TempUpLimitBoilerOut, 0.0, this->FluidIndex, RoutineName); + Fluid::GetSatSpecificHeatRefrig(state, fluidNameSteam, this->TempUpLimitBoilerOut, 0.0, this->FluidIndex, RoutineName); this->DesMassFlowRate = this->NomCap / (LatentEnthSteam + CpWater * (this->TempUpLimitBoilerOut - state.dataLoopNodes->Node(BoilerInletNode).Temp)); @@ -500,11 +500,11 @@ namespace BoilerSteam { if (PltSizNum > 0) { if (state.dataSize->PlantSizData(PltSizNum).DesVolFlowRate >= HVAC::SmallWaterVolFlow) { Real64 SizingTemp = this->TempUpLimitBoilerOut; - Real64 SteamDensity = FluidProperties::GetSatDensityRefrig(state, fluidNameSteam, SizingTemp, 1.0, this->FluidIndex, RoutineName); - Real64 EnthSteamOutDry = FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, SizingTemp, 1.0, this->FluidIndex, RoutineName); - Real64 EnthSteamOutWet = FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, SizingTemp, 0.0, this->FluidIndex, RoutineName); + Real64 SteamDensity = Fluid::GetSatDensityRefrig(state, fluidNameSteam, SizingTemp, 1.0, this->FluidIndex, RoutineName); + Real64 EnthSteamOutDry = Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, SizingTemp, 1.0, this->FluidIndex, RoutineName); + Real64 EnthSteamOutWet = Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, SizingTemp, 0.0, this->FluidIndex, RoutineName); Real64 LatentEnthSteam = EnthSteamOutDry - EnthSteamOutWet; - Real64 CpWater = FluidProperties::GetSatSpecificHeatRefrig(state, fluidNameSteam, SizingTemp, 0.0, this->FluidIndex, RoutineName); + Real64 CpWater = Fluid::GetSatSpecificHeatRefrig(state, fluidNameSteam, SizingTemp, 0.0, this->FluidIndex, RoutineName); tmpNomCap = (CpWater * SteamDensity * this->SizFac * state.dataSize->PlantSizData(PltSizNum).DeltaT * state.dataSize->PlantSizData(PltSizNum).DesVolFlowRate + state.dataSize->PlantSizData(PltSizNum).DesVolFlowRate * SteamDensity * LatentEnthSteam); @@ -677,7 +677,7 @@ namespace BoilerSteam { // Set the current load equal to the boiler load this->BoilerLoad = MyLoad; - this->BoilerPressCheck = FluidProperties::GetSatPressureRefrig(state, fluidNameSteam, this->BoilerOutletTemp, this->FluidIndex, RoutineName); + this->BoilerPressCheck = Fluid::GetSatPressureRefrig(state, fluidNameSteam, this->BoilerOutletTemp, this->FluidIndex, RoutineName); if ((this->BoilerPressCheck) > this->BoilerMaxOperPress) { if (this->PressErrIndex == 0) { @@ -697,7 +697,7 @@ namespace BoilerSteam { "[Pa]"); } - CpWater = FluidProperties::GetSatSpecificHeatRefrig( + CpWater = Fluid::GetSatSpecificHeatRefrig( state, fluidNameSteam, state.dataLoopNodes->Node(this->BoilerInletNodeNum).Temp, 0.0, this->FluidIndex, RoutineName); if (state.dataPlnt->PlantLoop(this->plantLoc.loopNum).LoopSide(this->plantLoc.loopSideNum).FlowLock == @@ -717,9 +717,9 @@ namespace BoilerSteam { this->BoilerOutletTemp = BoilerDeltaTemp + state.dataLoopNodes->Node(this->BoilerInletNodeNum).Temp; Real64 const EnthSteamOutDry = - FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, this->BoilerOutletTemp, 1.0, this->FluidIndex, RoutineName); + Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, this->BoilerOutletTemp, 1.0, this->FluidIndex, RoutineName); Real64 const EnthSteamOutWet = - FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, this->BoilerOutletTemp, 0.0, this->FluidIndex, RoutineName); + Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, this->BoilerOutletTemp, 0.0, this->FluidIndex, RoutineName); Real64 const LatentEnthSteam = EnthSteamOutDry - EnthSteamOutWet; this->BoilerMassFlowRate = this->BoilerLoad / (LatentEnthSteam + (CpWater * BoilerDeltaTemp)); @@ -755,9 +755,9 @@ namespace BoilerSteam { break; } Real64 const EnthSteamOutDry = - FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, this->BoilerOutletTemp, 1.0, this->FluidIndex, RoutineName); + Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, this->BoilerOutletTemp, 1.0, this->FluidIndex, RoutineName); Real64 const EnthSteamOutWet = - FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, this->BoilerOutletTemp, 0.0, this->FluidIndex, RoutineName); + Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, this->BoilerOutletTemp, 0.0, this->FluidIndex, RoutineName); Real64 const LatentEnthSteam = EnthSteamOutDry - EnthSteamOutWet; this->BoilerLoad = (this->BoilerMassFlowRate * LatentEnthSteam); @@ -774,9 +774,9 @@ namespace BoilerSteam { } Real64 const EnthSteamOutDry = - FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, this->BoilerOutletTemp, 1.0, this->FluidIndex, RoutineName); + Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, this->BoilerOutletTemp, 1.0, this->FluidIndex, RoutineName); Real64 const EnthSteamOutWet = - FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, this->BoilerOutletTemp, 0.0, this->FluidIndex, RoutineName); + Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, this->BoilerOutletTemp, 0.0, this->FluidIndex, RoutineName); Real64 const LatentEnthSteam = EnthSteamOutDry - EnthSteamOutWet; this->BoilerLoad = std::abs(this->BoilerMassFlowRate * LatentEnthSteam) + std::abs(this->BoilerMassFlowRate * CpWater * BoilerDeltaTemp); @@ -799,9 +799,9 @@ namespace BoilerSteam { } Real64 const EnthSteamOutDry = - FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, this->BoilerOutletTemp, 1.0, this->FluidIndex, RoutineName); + Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, this->BoilerOutletTemp, 1.0, this->FluidIndex, RoutineName); Real64 const EnthSteamOutWet = - FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, this->BoilerOutletTemp, 0.0, this->FluidIndex, RoutineName); + Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, this->BoilerOutletTemp, 0.0, this->FluidIndex, RoutineName); Real64 const LatentEnthSteam = EnthSteamOutDry - EnthSteamOutWet; BoilerDeltaTemp = this->BoilerOutletTemp - state.dataLoopNodes->Node(this->BoilerInletNodeNum).Temp; this->BoilerMassFlowRate = this->BoilerLoad / (LatentEnthSteam + CpWater * BoilerDeltaTemp); @@ -816,9 +816,9 @@ namespace BoilerSteam { this->BoilerLoad = this->NomCap; Real64 const EnthSteamOutDry = - FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, this->BoilerOutletTemp, 1.0, this->FluidIndex, RoutineName); + Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, this->BoilerOutletTemp, 1.0, this->FluidIndex, RoutineName); Real64 const EnthSteamOutWet = - FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, this->BoilerOutletTemp, 0.0, this->FluidIndex, RoutineName); + Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, this->BoilerOutletTemp, 0.0, this->FluidIndex, RoutineName); Real64 const LatentEnthSteam = EnthSteamOutDry - EnthSteamOutWet; BoilerDeltaTemp = this->BoilerOutletTemp - state.dataLoopNodes->Node(this->BoilerInletNodeNum).Temp; this->BoilerMassFlowRate = this->BoilerLoad / (LatentEnthSteam + CpWater * BoilerDeltaTemp); diff --git a/src/EnergyPlus/Boilers.cc b/src/EnergyPlus/Boilers.cc index d76186b5476..fbc339adbe9 100644 --- a/src/EnergyPlus/Boilers.cc +++ b/src/EnergyPlus/Boilers.cc @@ -507,7 +507,7 @@ void BoilerSpecs::oneTimeInit(EnergyPlusData &state) void BoilerSpecs::initEachEnvironment(EnergyPlusData &state) { static constexpr std::string_view RoutineName("BoilerSpecs::initEachEnvironment"); - Real64 const rho = FluidProperties::GetDensityGlycol(state, + Real64 const rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -624,12 +624,12 @@ void BoilerSpecs::SizeBoiler(EnergyPlusData &state) if (PltSizNum > 0) { if (state.dataSize->PlantSizData(PltSizNum).DesVolFlowRate >= HVAC::SmallWaterVolFlow) { - Real64 const rho = FluidProperties::GetDensityGlycol(state, + Real64 const rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); - Real64 const Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 const Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -815,7 +815,7 @@ void BoilerSpecs::CalcBoilerModel(EnergyPlusData &state, Real64 const TempUpLimitBout = this->TempUpLimitBoilerOut; // C - boiler high temperature limit Real64 const BoilerMassFlowRateMax = this->DesMassFlowRate; // Max Design Boiler Mass Flow Rate converted from Volume Flow Rate - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, state.dataLoopNodes->Node(BoilerInletNode).Temp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, diff --git a/src/EnergyPlus/CTElectricGenerator.cc b/src/EnergyPlus/CTElectricGenerator.cc index db8b1b92d94..42d25551956 100644 --- a/src/EnergyPlus/CTElectricGenerator.cc +++ b/src/EnergyPlus/CTElectricGenerator.cc @@ -555,7 +555,7 @@ namespace CTElectricGenerator { int heatRecInNode = this->HeatRecInletNodeNum; heatRecInTemp = state.dataLoopNodes->Node(heatRecInNode).Temp; - heatRecCp = FluidProperties::GetSpecificHeatGlycol(state, + heatRecCp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidName, heatRecInTemp, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidIndex, @@ -810,7 +810,7 @@ namespace CTElectricGenerator { int HeatRecOutletNode = this->HeatRecOutletNodeNum; // size mass flow rate - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidIndex, diff --git a/src/EnergyPlus/ChilledCeilingPanelSimple.cc b/src/EnergyPlus/ChilledCeilingPanelSimple.cc index 811b5aead15..537951000a7 100644 --- a/src/EnergyPlus/ChilledCeilingPanelSimple.cc +++ b/src/EnergyPlus/ChilledCeilingPanelSimple.cc @@ -830,7 +830,7 @@ void InitCoolingPanel(EnergyPlusData &state, int const CoolingPanelNum, int cons // set design mass flow rates if (thisCP.WaterInletNode > 0) { - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(thisCP.plantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(thisCP.plantLoc.loopNum).FluidIndex, @@ -845,7 +845,7 @@ void InitCoolingPanel(EnergyPlusData &state, int const CoolingPanelNum, int cons if (state.dataGlobal->BeginEnvrnFlag && thisCP.MyEnvrnFlag) { // Initialize - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(thisCP.plantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(thisCP.plantLoc.loopNum).FluidIndex, @@ -857,7 +857,7 @@ void InitCoolingPanel(EnergyPlusData &state, int const CoolingPanelNum, int cons ThisInNode.Temp = 7.0; - Cp = FluidProperties::GetSpecificHeatGlycol(state, + Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(thisCP.plantLoc.loopNum).FluidName, ThisInNode.Temp, state.dataPlnt->PlantLoop(thisCP.plantLoc.loopNum).FluidIndex, @@ -1032,12 +1032,12 @@ void SizeCoolingPanel(EnergyPlusData &state, int const CoolingPanelNum) PlantUtilities::MyPlantSizingIndex(state, CompType, thisCP.Name, thisCP.WaterInletNode, thisCP.WaterOutletNode, ErrorsFound); if (PltSizCoolNum > 0) { if (DesCoilLoad >= HVAC::SmallLoad) { - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(thisCP.plantLoc.loopNum).FluidName, 5., state.dataPlnt->PlantLoop(thisCP.plantLoc.loopNum).FluidIndex, RoutineName); - Cp = FluidProperties::GetSpecificHeatGlycol(state, + Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(thisCP.plantLoc.loopNum).FluidName, 5.0, state.dataPlnt->PlantLoop(thisCP.plantLoc.loopNum).FluidIndex, @@ -1290,7 +1290,7 @@ void CoolingPanelParams::CalcCoolingPanel(EnergyPlusData &state, int const Cooli if (QZnReq < -HVAC::SmallLoad && !state.dataZoneEnergyDemand->CurDeadBandOrSetback(ZoneNum) && (CoolingPanelOn)) { - Cp = FluidProperties::GetSpecificHeatGlycol(state, + Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, waterInletTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -1375,7 +1375,7 @@ void CoolingPanelParams::CalcCoolingPanel(EnergyPlusData &state, int const Cooli if (CoolingPanelOn) { // Now simulate the system... - Cp = FluidProperties::GetSpecificHeatGlycol(state, + Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, waterInletTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, diff --git a/src/EnergyPlus/ChillerAbsorption.cc b/src/EnergyPlus/ChillerAbsorption.cc index c0ba8f94fcb..b18c7dd084b 100644 --- a/src/EnergyPlus/ChillerAbsorption.cc +++ b/src/EnergyPlus/ChillerAbsorption.cc @@ -385,7 +385,7 @@ void GetBLASTAbsorberInput(EnergyPlusData &state) state.dataIPShortCut->cAlphaArgs(7), "Hot Water Nodes"); } else { - thisChiller.SteamFluidIndex = FluidProperties::FindRefrigerant(state, fluidNameSteam); + thisChiller.SteamFluidIndex = Fluid::FindRefrigerant(state, fluidNameSteam); thisChiller.GeneratorInletNodeNum = NodeInputManager::GetOnlySingleNode(state, state.dataIPShortCut->cAlphaArgs(6), ErrorsFound, @@ -755,7 +755,7 @@ void BLASTAbsorberSpecs::initEachEnvironment(EnergyPlusData &state) constexpr const char *RoutineName("BLASTAbsorberSpecs::initEachEnvironment"); - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -765,7 +765,7 @@ void BLASTAbsorberSpecs::initEachEnvironment(EnergyPlusData &state) PlantUtilities::InitComponentNodes(state, 0.0, this->EvapMassFlowRateMax, this->EvapInletNodeNum, this->EvapOutletNodeNum); - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -779,7 +779,7 @@ void BLASTAbsorberSpecs::initEachEnvironment(EnergyPlusData &state) if (this->GeneratorInletNodeNum > 0) { if (this->GenHeatSourceType == DataLoopNode::NodeFluidType::Water) { - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->GenPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->GenPlantLoc.loopNum).FluidIndex, @@ -791,7 +791,7 @@ void BLASTAbsorberSpecs::initEachEnvironment(EnergyPlusData &state) this->QGenerator = (this->SteamLoadCoef[0] + this->SteamLoadCoef[1] + this->SteamLoadCoef[2]) * this->NomCap; // dry enthalpy of steam (quality = 1) - Real64 EnthSteamOutDry = FluidProperties::GetSatEnthalpyRefrig(state, + Real64 EnthSteamOutDry = Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, state.dataLoopNodes->Node(this->GeneratorInletNodeNum).Temp, 1.0, @@ -799,7 +799,7 @@ void BLASTAbsorberSpecs::initEachEnvironment(EnergyPlusData &state) calcChillerAbsorption + this->Name); // wet enthalpy of steam (quality = 0) - Real64 EnthSteamOutWet = FluidProperties::GetSatEnthalpyRefrig(state, + Real64 EnthSteamOutWet = Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, state.dataLoopNodes->Node(this->GeneratorInletNodeNum).Temp, 0.0, @@ -810,7 +810,7 @@ void BLASTAbsorberSpecs::initEachEnvironment(EnergyPlusData &state) Real64 HfgSteam = EnthSteamOutDry - EnthSteamOutWet; int curWaterIndex = waterIndex; Real64 CpWater = - FluidProperties::GetDensityGlycol(state, fluidNameWater, SteamOutletTemp, curWaterIndex, calcChillerAbsorption + this->Name); + Fluid::GetDensityGlycol(state, fluidNameWater, SteamOutletTemp, curWaterIndex, calcChillerAbsorption + this->Name); this->GenMassFlowRateMax = this->QGenerator / (HfgSteam + CpWater * SteamDeltaT); } @@ -952,13 +952,13 @@ void BLASTAbsorberSpecs::sizeChiller(EnergyPlusData &state) if (PltSizNum > 0) { if (state.dataSize->PlantSizData(PltSizNum).DesVolFlowRate >= HVAC::SmallWaterVolFlow) { - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -1120,13 +1120,13 @@ void BLASTAbsorberSpecs::sizeChiller(EnergyPlusData &state) if (this->EvapVolFlowRate >= HVAC::SmallWaterVolFlow && tmpNomCap > 0.0) { // QCondenser = QEvaporator + QGenerator + PumpingPower - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, this->TempDesCondIn, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -1198,13 +1198,13 @@ void BLASTAbsorberSpecs::sizeChiller(EnergyPlusData &state) (PltSizHeatingNum > 0 && this->GenHeatSourceType == DataLoopNode::NodeFluidType::Water)) { if (this->EvapVolFlowRate >= HVAC::SmallWaterVolFlow && tmpNomCap > 0.0) { if (this->GenHeatSourceType == DataLoopNode::NodeFluidType::Water) { - Real64 CpWater = FluidProperties::GetSpecificHeatGlycol(state, + Real64 CpWater = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->GenPlantLoc.loopNum).FluidName, state.dataSize->PlantSizData(PltSizHeatingNum).ExitTemp, state.dataPlnt->PlantLoop(this->GenPlantLoc.loopNum).FluidIndex, RoutineName); Real64 SteamDeltaT = max(0.5, state.dataSize->PlantSizData(PltSizHeatingNum).DeltaT); - Real64 RhoWater = FluidProperties::GetDensityGlycol(state, + Real64 RhoWater = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->GenPlantLoc.loopNum).FluidName, (state.dataSize->PlantSizData(PltSizHeatingNum).ExitTemp - SteamDeltaT), state.dataPlnt->PlantLoop(this->GenPlantLoc.loopNum).FluidIndex, @@ -1259,25 +1259,25 @@ void BLASTAbsorberSpecs::sizeChiller(EnergyPlusData &state) } } else { constexpr const char *RoutineNameLong("SizeAbsorptionChiller"); - Real64 SteamDensity = FluidProperties::GetSatDensityRefrig( + Real64 SteamDensity = Fluid::GetSatDensityRefrig( state, fluidNameSteam, state.dataSize->PlantSizData(PltSizSteamNum).ExitTemp, 1.0, this->SteamFluidIndex, RoutineNameLong); Real64 SteamDeltaT = state.dataSize->PlantSizData(PltSizSteamNum).DeltaT; Real64 GeneratorOutletTemp = state.dataSize->PlantSizData(PltSizSteamNum).ExitTemp - SteamDeltaT; - Real64 EnthSteamOutDry = FluidProperties::GetSatEnthalpyRefrig(state, + Real64 EnthSteamOutDry = Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, state.dataSize->PlantSizData(PltSizSteamNum).ExitTemp, 1.0, this->SteamFluidIndex, moduleObjectType + this->Name); - Real64 EnthSteamOutWet = FluidProperties::GetSatEnthalpyRefrig(state, + Real64 EnthSteamOutWet = Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, state.dataSize->PlantSizData(PltSizSteamNum).ExitTemp, 0.0, this->SteamFluidIndex, moduleObjectType + this->Name); int curWaterIndex = waterIndex; - Real64 CpWater = FluidProperties::GetSpecificHeatGlycol(state, fluidNameWater, GeneratorOutletTemp, curWaterIndex, RoutineName); + Real64 CpWater = Fluid::GetSpecificHeatGlycol(state, fluidNameWater, GeneratorOutletTemp, curWaterIndex, RoutineName); Real64 HfgSteam = EnthSteamOutDry - EnthSteamOutWet; this->SteamMassFlowRate = (this->NomCap * SteamInputRatNom) / ((HfgSteam) + (SteamDeltaT * CpWater)); tmpGeneratorVolFlowRate = this->SteamMassFlowRate / SteamDensity; @@ -1366,12 +1366,12 @@ void BLASTAbsorberSpecs::sizeChiller(EnergyPlusData &state) this->GeneratorDeltaTemp = max(0.5, state.dataSize->PlantSizData(PltSizHeatingNum).DeltaT); } else if (this->GenHeatSourceType == DataLoopNode::NodeFluidType::Water) { if (state.dataPlnt->PlantFirstSizesOkayToFinalize) { - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->GenPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->GenPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->GenPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->GenPlantLoc.loopNum).FluidIndex, @@ -1485,7 +1485,7 @@ void BLASTAbsorberSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad, bool R Real64 TempEvapOut = state.dataLoopNodes->Node(this->EvapOutletNodeNum).Temp; - Real64 CpFluid = FluidProperties::GetSpecificHeatGlycol(state, + Real64 CpFluid = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->EvapInletNodeNum).Temp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -1715,7 +1715,7 @@ void BLASTAbsorberSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad, bool R this->QCondenser = this->QEvaporator + this->QGenerator + this->PumpingPower; - CpFluid = FluidProperties::GetSpecificHeatGlycol(state, + CpFluid = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->CondInletNodeNum).Temp, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -1736,7 +1736,7 @@ void BLASTAbsorberSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad, bool R if (this->GenHeatSourceType == DataLoopNode::NodeFluidType::Water) { Real64 GenMassFlowRate = 0.0; // Hot water plant is used for the generator - CpFluid = FluidProperties::GetSpecificHeatGlycol(state, + CpFluid = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->GenPlantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->GeneratorInletNodeNum).Temp, state.dataPlnt->PlantLoop(GenPlantLoc.loopNum).FluidIndex, @@ -1771,7 +1771,7 @@ void BLASTAbsorberSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad, bool R } else { // using a steam plant for the generator // enthalpy of dry steam at generator inlet - Real64 EnthSteamOutDry = FluidProperties::GetSatEnthalpyRefrig(state, + Real64 EnthSteamOutDry = Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, state.dataLoopNodes->Node(this->GeneratorInletNodeNum).Temp, 1.0, @@ -1779,7 +1779,7 @@ void BLASTAbsorberSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad, bool R calcChillerAbsorption + this->Name); // enthalpy of wet steam at generator inlet - Real64 EnthSteamOutWet = FluidProperties::GetSatEnthalpyRefrig(state, + Real64 EnthSteamOutWet = Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, state.dataLoopNodes->Node(this->GeneratorInletNodeNum).Temp, 0.0, @@ -1790,7 +1790,7 @@ void BLASTAbsorberSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad, bool R Real64 HfgSteam = EnthSteamOutDry - EnthSteamOutWet; int curWaterIndex = waterIndex; CpFluid = - FluidProperties::GetSpecificHeatGlycol(state, fluidNameWater, SteamOutletTemp, curWaterIndex, calcChillerAbsorption + this->Name); + Fluid::GetSpecificHeatGlycol(state, fluidNameWater, SteamOutletTemp, curWaterIndex, calcChillerAbsorption + this->Name); this->SteamMassFlowRate = this->QGenerator / (HfgSteam + CpFluid * SteamDeltaT); PlantUtilities::SetComponentFlowRate( state, this->SteamMassFlowRate, this->GeneratorInletNodeNum, this->GeneratorOutletNodeNum, this->GenPlantLoc); @@ -1800,7 +1800,7 @@ void BLASTAbsorberSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad, bool R this->SteamOutletEnthalpy = state.dataLoopNodes->Node(this->GeneratorInletNodeNum).Enthalpy; } else { this->GenOutletTemp = state.dataLoopNodes->Node(this->GeneratorInletNodeNum).Temp - SteamDeltaT; - this->SteamOutletEnthalpy = FluidProperties::GetSatEnthalpyRefrig( + this->SteamOutletEnthalpy = Fluid::GetSatEnthalpyRefrig( state, fluidNameSteam, this->GenOutletTemp, 0.0, this->SteamFluidIndex, moduleObjectType + this->Name); this->SteamOutletEnthalpy -= CpFluid * SteamDeltaT; } diff --git a/src/EnergyPlus/ChillerElectricASHRAE205.cc b/src/EnergyPlus/ChillerElectricASHRAE205.cc index b3413b28b48..cdbe6631f0c 100644 --- a/src/EnergyPlus/ChillerElectricASHRAE205.cc +++ b/src/EnergyPlus/ChillerElectricASHRAE205.cc @@ -596,7 +596,7 @@ void ASHRAE205ChillerSpecs::initialize(EnergyPlusData &state, bool const RunFlag this->EquipFlowCtrl = DataPlant::CompData::getPlantComponent(state, this->CWPlantLoc).FlowCtrl; if (this->MyEnvrnFlag && state.dataGlobal->BeginEnvrnFlag && (state.dataPlnt->PlantFirstSizesOkayToFinalize)) { - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -606,7 +606,7 @@ void ASHRAE205ChillerSpecs::initialize(EnergyPlusData &state, bool const RunFlag PlantUtilities::InitComponentNodes(state, 0.0, this->EvapMassFlowRateMax, this->EvapInletNodeNum, this->EvapOutletNodeNum); if (this->CondenserType == DataPlant::CondenserType::WaterCooled) { - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, this->TempRefCondIn, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -617,7 +617,7 @@ void ASHRAE205ChillerSpecs::initialize(EnergyPlusData &state, bool const RunFlag } // Set mass flow rates at Oil Cooler and Aux Equipment nodes if (this->OilCoolerInletNode) { - Real64 rho_oil_cooler = FluidProperties::GetDensityGlycol(state, + Real64 rho_oil_cooler = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->OCPlantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->OCPlantLoc.loopNum).FluidIndex, @@ -626,7 +626,7 @@ void ASHRAE205ChillerSpecs::initialize(EnergyPlusData &state, bool const RunFlag PlantUtilities::InitComponentNodes(state, 0.0, this->OilCoolerMassFlowRate, this->OilCoolerInletNode, this->OilCoolerOutletNode); } if (this->AuxiliaryHeatInletNode) { - Real64 rho_aux = FluidProperties::GetDensityGlycol(state, + Real64 rho_aux = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->AHPlantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->AHPlantLoc.loopNum).FluidIndex, @@ -771,12 +771,12 @@ void ASHRAE205ChillerSpecs::size([[maybe_unused]] EnergyPlusData &state) if (PltSizCondNum > 0 && PltSizNum > 0) { if (state.dataSize->PlantSizData(PltSizNum).DesVolFlowRate >= HVAC::SmallWaterVolFlow && tmpNomCap > 0.0) { - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, this->TempRefCondIn, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -878,13 +878,13 @@ void ASHRAE205ChillerSpecs::size([[maybe_unused]] EnergyPlusData &state) if (PltSizNum > 0) { if (state.dataSize->PlantSizData(PltSizNum).DesVolFlowRate >= HVAC::SmallWaterVolFlow) { - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -1256,7 +1256,7 @@ void ASHRAE205ChillerSpecs::findEvaporatorMassFlowRate(EnergyPlusData &state, Re } } // This is the end of the FlowLock Block - const Real64 rho = FluidProperties::GetDensityGlycol(state, + const Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -1391,7 +1391,7 @@ void ASHRAE205ChillerSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad, boo return; } - Real64 CpEvap = FluidProperties::GetSpecificHeatGlycol(state, + Real64 CpEvap = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->EvapInletNodeNum).Temp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -1508,7 +1508,7 @@ void ASHRAE205ChillerSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad, boo // Energy balance on the chiller system gives the amount of heat lost to the ambient zone this->AmbientZoneGain = this->QEvaporator + this->Power - (this->QCondenser + QExternallyCooled); - Real64 CpCond = FluidProperties::GetSpecificHeatGlycol(state, + Real64 CpCond = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, condInletTemp, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -1521,7 +1521,7 @@ void ASHRAE205ChillerSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad, boo PlantUtilities::SetComponentFlowRate( state, this->OilCoolerMassFlowRate, this->OilCoolerInletNode, this->OilCoolerOutletNode, this->OCPlantLoc); - Real64 CpOilCooler = FluidProperties::GetSpecificHeatGlycol(state, + Real64 CpOilCooler = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->OCPlantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->OilCoolerInletNode).Temp, state.dataPlnt->PlantLoop(this->OCPlantLoc.loopNum).FluidIndex, @@ -1539,7 +1539,7 @@ void ASHRAE205ChillerSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad, boo PlantUtilities::SetComponentFlowRate( state, this->AuxiliaryMassFlowRate, this->AuxiliaryHeatInletNode, this->AuxiliaryHeatOutletNode, this->AHPlantLoc); - Real64 CpAux = FluidProperties::GetSpecificHeatGlycol(state, + Real64 CpAux = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->AHPlantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->AuxiliaryHeatInletNode).Temp, state.dataPlnt->PlantLoop(this->AHPlantLoc.loopNum).FluidIndex, diff --git a/src/EnergyPlus/ChillerElectricEIR.cc b/src/EnergyPlus/ChillerElectricEIR.cc index 0c771b352b6..3d43f2dfb25 100644 --- a/src/EnergyPlus/ChillerElectricEIR.cc +++ b/src/EnergyPlus/ChillerElectricEIR.cc @@ -1152,7 +1152,7 @@ void ElectricEIRChillerSpecs::initEachEnvironment(EnergyPlusData &state) static constexpr std::string_view RoutineName("ElectricEIRChillerSpecs::initEachEnvironment"); - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -1164,7 +1164,7 @@ void ElectricEIRChillerSpecs::initEachEnvironment(EnergyPlusData &state) if (this->CondenserType == DataPlant::CondenserType::WaterCooled) { - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, this->TempRefCondIn, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -1190,7 +1190,7 @@ void ElectricEIRChillerSpecs::initEachEnvironment(EnergyPlusData &state) } if (this->HeatRecActive) { - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidIndex, @@ -1405,13 +1405,13 @@ void ElectricEIRChillerSpecs::size(EnergyPlusData &state) if (PltSizNum > 0) { if (state.dataSize->PlantSizData(PltSizNum).DesVolFlowRate >= HVAC::SmallWaterVolFlow) { - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -1468,12 +1468,12 @@ void ElectricEIRChillerSpecs::size(EnergyPlusData &state) if (PltSizCondNum > 0 && PltSizNum > 0) { if (state.dataSize->PlantSizData(PltSizNum).DesVolFlowRate >= HVAC::SmallWaterVolFlow && tmpNomCap > 0.0) { - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, this->TempRefCondIn, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -1995,7 +1995,7 @@ void ElectricEIRChillerSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad, b if (DataPlant::CompData::getPlantComponent(state, this->CWPlantLoc).CurOpSchemeType == DataPlant::OpScheme::CompSetPtBased) { // Calculate water side load - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->EvapInletNodeNum).Temp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -2028,7 +2028,7 @@ void ElectricEIRChillerSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad, b PartLoadRat = max(0.0, min(std::abs(MyLoad) / AvailChillerCap, this->MaxPartLoadRat)); } - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->EvapInletNodeNum).Temp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -2300,7 +2300,7 @@ void ElectricEIRChillerSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad, b if (this->CondMassFlowRate > DataBranchAirLoopPlant::MassFlowTolerance) { // If Heat Recovery specified for this vapor compression chiller, then Qcondenser will be adjusted by this subroutine if (this->HeatRecActive) this->calcHeatRecovery(state, this->QCondenser, this->CondMassFlowRate, condInletTemp, this->QHeatRecovered); - Cp = FluidProperties::GetSpecificHeatGlycol(state, + Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, condInletTemp, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -2369,14 +2369,14 @@ void ElectricEIRChillerSpecs::calcHeatRecovery(EnergyPlusData &state, Real64 heatRecInletTemp = state.dataLoopNodes->Node(this->HeatRecInletNodeNum).Temp; Real64 HeatRecMassFlowRate = state.dataLoopNodes->Node(this->HeatRecInletNodeNum).MassFlowRate; - Real64 CpHeatRec = FluidProperties::GetSpecificHeatGlycol(state, + Real64 CpHeatRec = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidName, heatRecInletTemp, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidIndex, RoutineName); Real64 CpCond; if (this->CondenserType == DataPlant::CondenserType::WaterCooled) { - CpCond = FluidProperties::GetSpecificHeatGlycol(state, + CpCond = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, condInletTemp, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, diff --git a/src/EnergyPlus/ChillerExhaustAbsorption.cc b/src/EnergyPlus/ChillerExhaustAbsorption.cc index e29f2a10fbf..15db9f07583 100644 --- a/src/EnergyPlus/ChillerExhaustAbsorption.cc +++ b/src/EnergyPlus/ChillerExhaustAbsorption.cc @@ -949,7 +949,7 @@ void ExhaustAbsorberSpecs::initialize(EnergyPlusData &state) if (this->isWaterCooled) { // init max available condenser water flow rate if (this->CDPlantLoc.loopNum > 0) { - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -963,7 +963,7 @@ void ExhaustAbsorberSpecs::initialize(EnergyPlusData &state) } if (this->HWPlantLoc.loopNum > 0) { - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->HWPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->HWPlantLoc.loopNum).FluidIndex, @@ -976,7 +976,7 @@ void ExhaustAbsorberSpecs::initialize(EnergyPlusData &state) PlantUtilities::InitComponentNodes(state, 0.0, this->DesHeatMassFlowRate, HeatInletNode, HeatOutletNode); if (this->CWPlantLoc.loopNum > 0) { - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -1066,12 +1066,12 @@ void ExhaustAbsorberSpecs::size(EnergyPlusData &state) if (PltSizCoolNum > 0) { if (state.dataSize->PlantSizData(PltSizCoolNum).DesVolFlowRate >= HVAC::SmallWaterVolFlow) { - Cp = FluidProperties::GetSpecificHeatGlycol(state, + Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, RoutineName); - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -1296,12 +1296,12 @@ void ExhaustAbsorberSpecs::size(EnergyPlusData &state) if (PltSizCondNum > 0 && PltSizCoolNum > 0) { if (state.dataSize->PlantSizData(PltSizCoolNum).DesVolFlowRate >= HVAC::SmallWaterVolFlow && tmpNomCap > 0.0) { - Cp = FluidProperties::GetSpecificHeatGlycol(state, + Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, this->TempDesCondReturn, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, RoutineName); - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, this->TempDesCondReturn, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -1542,13 +1542,13 @@ void ExhaustAbsorberSpecs::calcChiller(EnergyPlusData &state, Real64 &MyLoad) Real64 lExhaustInFlow = state.dataLoopNodes->Node(lExhaustAirInletNodeNum).MassFlowRate; Real64 lExhaustAirHumRat = state.dataLoopNodes->Node(lExhaustAirInletNodeNum).HumRat; - Real64 Cp_CW = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp_CW = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, lChillReturnTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, RoutineName); if (this->CDPlantLoc.loopNum > 0) { - Cp_CD = FluidProperties::GetSpecificHeatGlycol(state, + Cp_CD = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, lChillReturnTemp, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -1906,7 +1906,7 @@ void ExhaustAbsorberSpecs::calcHeater(EnergyPlusData &state, Real64 &MyLoad, boo } else { Real64 const Cp_HW = - FluidProperties::GetSpecificHeatGlycol(state, hwPlantLoop.FluidName, heatReturnNode.Temp, hwPlantLoop.FluidIndex, RoutineName); + Fluid::GetSpecificHeatGlycol(state, hwPlantLoop.FluidName, heatReturnNode.Temp, hwPlantLoop.FluidIndex, RoutineName); // Determine available heating capacity using the current cooling load lAvailableHeatingCapacity = this->NomHeatCoolRatio * this->NomCoolingCap * diff --git a/src/EnergyPlus/ChillerGasAbsorption.cc b/src/EnergyPlus/ChillerGasAbsorption.cc index 6cb26c946db..effb063112e 100644 --- a/src/EnergyPlus/ChillerGasAbsorption.cc +++ b/src/EnergyPlus/ChillerGasAbsorption.cc @@ -948,7 +948,7 @@ void GasAbsorberSpecs::initialize(EnergyPlusData &state) if (this->isWaterCooled) { // init max available condenser water flow rate if (this->CDplantLoc.loopNum > 0) { - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CDplantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CDplantLoc.loopNum).FluidIndex, @@ -962,7 +962,7 @@ void GasAbsorberSpecs::initialize(EnergyPlusData &state) } if (this->HWplantLoc.loopNum > 0) { - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->HWplantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->HWplantLoc.loopNum).FluidIndex, @@ -975,7 +975,7 @@ void GasAbsorberSpecs::initialize(EnergyPlusData &state) PlantUtilities::InitComponentNodes(state, 0.0, this->DesHeatMassFlowRate, HeatInletNode, HeatOutletNode); if (this->CWplantLoc.loopNum > 0) { - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWplantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWplantLoc.loopNum).FluidIndex, @@ -1059,12 +1059,12 @@ void GasAbsorberSpecs::size(EnergyPlusData &state) if (PltSizCoolNum > 0) { if (state.dataSize->PlantSizData(PltSizCoolNum).DesVolFlowRate >= HVAC::SmallWaterVolFlow) { - Cp = FluidProperties::GetSpecificHeatGlycol(state, + Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CWplantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWplantLoc.loopNum).FluidIndex, RoutineName); - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWplantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWplantLoc.loopNum).FluidIndex, @@ -1288,12 +1288,12 @@ void GasAbsorberSpecs::size(EnergyPlusData &state) if (PltSizCondNum > 0 && PltSizCoolNum > 0) { if (state.dataSize->PlantSizData(PltSizCoolNum).DesVolFlowRate >= HVAC::SmallWaterVolFlow && tmpNomCap > 0.0) { - Cp = FluidProperties::GetSpecificHeatGlycol(state, + Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CDplantLoc.loopNum).FluidName, this->TempDesCondReturn, state.dataPlnt->PlantLoop(this->CDplantLoc.loopNum).FluidIndex, RoutineName); - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CDplantLoc.loopNum).FluidName, this->TempDesCondReturn, state.dataPlnt->PlantLoop(this->CDplantLoc.loopNum).FluidIndex, @@ -1532,7 +1532,7 @@ void GasAbsorberSpecs::calculateChiller(EnergyPlusData &state, Real64 &MyLoad) Real64 ChillDeltaTemp = std::abs(lChillReturnTemp - ChillSupplySetPointTemp); // local fluid specific heat for chilled water - Real64 Cp_CW = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp_CW = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CWplantLoc.loopNum).FluidName, lChillReturnTemp, state.dataPlnt->PlantLoop(this->CWplantLoc.loopNum).FluidIndex, @@ -1540,7 +1540,7 @@ void GasAbsorberSpecs::calculateChiller(EnergyPlusData &state, Real64 &MyLoad) // local fluid specific heat for condenser water Real64 Cp_CD = 0; // putting this here as a dummy initialization to hush the compiler warning, in real runs this value should never be used if (this->CDplantLoc.loopNum > 0) { - Cp_CD = FluidProperties::GetSpecificHeatGlycol(state, + Cp_CD = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CDplantLoc.loopNum).FluidName, lChillReturnTemp, state.dataPlnt->PlantLoop(this->CDplantLoc.loopNum).FluidIndex, @@ -1854,7 +1854,7 @@ void GasAbsorberSpecs::calculateHeater(EnergyPlusData &state, Real64 &MyLoad, bo LoopNum = this->HWplantLoc.loopNum; LoopSideNum = this->HWplantLoc.loopSideNum; - Cp_HW = FluidProperties::GetSpecificHeatGlycol( + Cp_HW = Fluid::GetSpecificHeatGlycol( state, state.dataPlnt->PlantLoop(LoopNum).FluidName, lHotWaterReturnTemp, state.dataPlnt->PlantLoop(LoopNum).FluidIndex, RoutineName); lCoolElectricPower = this->CoolElectricPower; diff --git a/src/EnergyPlus/ChillerIndirectAbsorption.cc b/src/EnergyPlus/ChillerIndirectAbsorption.cc index 5081ea1f74b..4652293bf4f 100644 --- a/src/EnergyPlus/ChillerIndirectAbsorption.cc +++ b/src/EnergyPlus/ChillerIndirectAbsorption.cc @@ -396,7 +396,7 @@ void GetIndirectAbsorberInput(EnergyPlusData &state) state.dataIPShortCut->cAlphaArgs(10), "Hot Water Nodes"); } else { - thisChiller.SteamFluidIndex = FluidProperties::FindRefrigerant(state, fluidNameSteam); + thisChiller.SteamFluidIndex = Fluid::FindRefrigerant(state, fluidNameSteam); thisChiller.GeneratorInletNodeNum = NodeInputManager::GetOnlySingleNode(state, state.dataIPShortCut->cAlphaArgs(9), ErrorsFound, @@ -891,7 +891,7 @@ void IndirectAbsorberSpecs::initialize(EnergyPlusData &state, bool RunFlag, Real // Initialize Supply Side Variables if (this->MyEnvrnFlag && state.dataGlobal->BeginEnvrnFlag && (state.dataPlnt->PlantFirstSizesOkayToFinalize)) { - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -901,7 +901,7 @@ void IndirectAbsorberSpecs::initialize(EnergyPlusData &state, bool RunFlag, Real PlantUtilities::InitComponentNodes(state, 0.0, this->EvapMassFlowRateMax, this->EvapInletNodeNum, this->EvapOutletNodeNum); - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -917,7 +917,7 @@ void IndirectAbsorberSpecs::initialize(EnergyPlusData &state, bool RunFlag, Real if (this->GenHeatSourceType == DataLoopNode::NodeFluidType::Water) { - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->GenPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->GenPlantLoc.loopNum).FluidIndex, @@ -925,7 +925,7 @@ void IndirectAbsorberSpecs::initialize(EnergyPlusData &state, bool RunFlag, Real this->GenMassFlowRateMax = rho * this->GeneratorVolFlowRate; } else { - Real64 SteamDensity = FluidProperties::GetSatDensityRefrig(state, + Real64 SteamDensity = Fluid::GetSatDensityRefrig(state, fluidNameSteam, state.dataLoopNodes->Node(this->GeneratorInletNodeNum).Temp, 1.0, @@ -1052,13 +1052,13 @@ void IndirectAbsorberSpecs::sizeChiller(EnergyPlusData &state) if (PltSizNum > 0) { if (state.dataSize->PlantSizData(PltSizNum).DesVolFlowRate >= HVAC::SmallWaterVolFlow) { - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -1240,13 +1240,13 @@ void IndirectAbsorberSpecs::sizeChiller(EnergyPlusData &state) if (this->EvapVolFlowRate >= HVAC::SmallWaterVolFlow && tmpNomCap > 0.0) { // QCondenser = QEvaporator + QGenerator + PumpingPower - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -1331,14 +1331,14 @@ void IndirectAbsorberSpecs::sizeChiller(EnergyPlusData &state) (PltSizHeatingNum > 0 && this->GenHeatSourceType == DataLoopNode::NodeFluidType::Water)) { if (this->EvapVolFlowRate >= HVAC::SmallWaterVolFlow && tmpNomCap > 0.0) { if (this->GenHeatSourceType == DataLoopNode::NodeFluidType::Water) { - Real64 CpWater = FluidProperties::GetSpecificHeatGlycol(state, + Real64 CpWater = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->GenPlantLoc.loopNum).FluidName, state.dataSize->PlantSizData(PltSizHeatingNum).ExitTemp, state.dataPlnt->PlantLoop(this->GenPlantLoc.loopNum).FluidIndex, RoutineName); Real64 SteamDeltaT = max(0.5, state.dataSize->PlantSizData(PltSizHeatingNum).DeltaT); - Real64 RhoWater = FluidProperties::GetDensityGlycol(state, + Real64 RhoWater = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->GenPlantLoc.loopNum).FluidName, (state.dataSize->PlantSizData(PltSizHeatingNum).ExitTemp - SteamDeltaT), state.dataPlnt->PlantLoop(this->GenPlantLoc.loopNum).FluidIndex, @@ -1395,7 +1395,7 @@ void IndirectAbsorberSpecs::sizeChiller(EnergyPlusData &state) } } } else { - Real64 SteamDensity = FluidProperties::GetSatDensityRefrig(state, + Real64 SteamDensity = Fluid::GetSatDensityRefrig(state, fluidNameSteam, state.dataSize->PlantSizData(PltSizSteamNum).ExitTemp, 1.0, @@ -1405,7 +1405,7 @@ void IndirectAbsorberSpecs::sizeChiller(EnergyPlusData &state) Real64 GeneratorOutletTemp = state.dataSize->PlantSizData(PltSizSteamNum).ExitTemp - SteamDeltaT; // dry enthalpy of steam (quality = 1) - Real64 EnthSteamOutDry = FluidProperties::GetSatEnthalpyRefrig(state, + Real64 EnthSteamOutDry = Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, state.dataSize->PlantSizData(PltSizSteamNum).ExitTemp, 1.0, @@ -1413,14 +1413,14 @@ void IndirectAbsorberSpecs::sizeChiller(EnergyPlusData &state) std::string{SizeChillerAbsorptionIndirect} + this->Name); // wet enthalpy of steam (quality = 0) - Real64 EnthSteamOutWet = FluidProperties::GetSatEnthalpyRefrig(state, + Real64 EnthSteamOutWet = Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, state.dataSize->PlantSizData(PltSizSteamNum).ExitTemp, 0.0, this->SteamFluidIndex, std::string{SizeChillerAbsorptionIndirect} + this->Name); Real64 CpWater = - FluidProperties::GetSpecificHeatGlycol(state, fluidNameWater, GeneratorOutletTemp, const_cast(waterIndex), RoutineName); + Fluid::GetSpecificHeatGlycol(state, fluidNameWater, GeneratorOutletTemp, const_cast(waterIndex), RoutineName); Real64 HfgSteam = EnthSteamOutDry - EnthSteamOutWet; // calculate the mass flow rate through the generator Real64 SteamMassFlowRate = (tmpNomCap * SteamInputRatNom) / ((HfgSteam) + (SteamDeltaT * CpWater)); @@ -1519,12 +1519,12 @@ void IndirectAbsorberSpecs::sizeChiller(EnergyPlusData &state) if (PltSizHeatingNum > 0 && this->GenHeatSourceType == DataLoopNode::NodeFluidType::Water) { this->GeneratorDeltaTemp = max(0.5, state.dataSize->PlantSizData(PltSizHeatingNum).DeltaT); } else if (this->GenHeatSourceType == DataLoopNode::NodeFluidType::Water) { - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->GenPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->GenPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 CpWater = FluidProperties::GetSpecificHeatGlycol(state, + Real64 CpWater = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->GenPlantLoc.loopNum).FluidName, state.dataSize->PlantSizData(PltSizHeatingNum).ExitTemp, state.dataPlnt->PlantLoop(this->GenPlantLoc.loopNum).FluidIndex, @@ -1717,7 +1717,7 @@ void IndirectAbsorberSpecs::calculate(EnergyPlusData &state, Real64 const MyLoad // C - Evaporator low temp. limit cut off Real64 TempLowLimitEout = this->TempLowLimitEvapOut; - Real64 CpFluid = FluidProperties::GetSpecificHeatGlycol(state, + Real64 CpFluid = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, EvapInletTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -1987,7 +1987,7 @@ void IndirectAbsorberSpecs::calculate(EnergyPlusData &state, Real64 const MyLoad this->QCondenser = this->QEvaporator + this->QGenerator + this->PumpingPower; - CpFluid = FluidProperties::GetSpecificHeatGlycol(state, + CpFluid = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, CondInletTemp, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -2007,7 +2007,7 @@ void IndirectAbsorberSpecs::calculate(EnergyPlusData &state, Real64 const MyLoad // Hot water plant is used for the generator if (this->GenHeatSourceType == DataLoopNode::NodeFluidType::Water) { - CpFluid = FluidProperties::GetSpecificHeatGlycol(state, + CpFluid = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->GenPlantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->GeneratorInletNodeNum).Temp, state.dataPlnt->PlantLoop(this->GenPlantLoc.loopNum).FluidIndex, @@ -2034,7 +2034,7 @@ void IndirectAbsorberSpecs::calculate(EnergyPlusData &state, Real64 const MyLoad } else { // using a steam plant for the generator // enthalpy of dry steam at generator inlet - Real64 EnthSteamOutDry = FluidProperties::GetSatEnthalpyRefrig(state, + Real64 EnthSteamOutDry = Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, state.dataLoopNodes->Node(this->GeneratorInletNodeNum).Temp, 1.0, @@ -2042,7 +2042,7 @@ void IndirectAbsorberSpecs::calculate(EnergyPlusData &state, Real64 const MyLoad std::string{calcChillerAbsorptionIndirect} + this->Name); // enthalpy of wet steam at generator inlet - Real64 EnthSteamOutWet = FluidProperties::GetSatEnthalpyRefrig(state, + Real64 EnthSteamOutWet = Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, state.dataLoopNodes->Node(this->GeneratorInletNodeNum).Temp, 0.0, @@ -2057,7 +2057,7 @@ void IndirectAbsorberSpecs::calculate(EnergyPlusData &state, Real64 const MyLoad // heat of vaporization of steam Real64 HfgSteam = EnthSteamOutDry - EnthSteamOutWet; - CpFluid = FluidProperties::GetSpecificHeatGlycol( + CpFluid = Fluid::GetSpecificHeatGlycol( state, fluidNameWater, SteamOutletTemp, const_cast(waterIndex), std::string{calcChillerAbsorptionIndirect} + this->Name); this->GenMassFlowRate = this->QGenerator / (HfgSteam + CpFluid * SteamDeltaT); PlantUtilities::SetComponentFlowRate( @@ -2068,13 +2068,13 @@ void IndirectAbsorberSpecs::calculate(EnergyPlusData &state, Real64 const MyLoad this->SteamOutletEnthalpy = state.dataLoopNodes->Node(this->GeneratorInletNodeNum).Enthalpy; } else { this->GenOutletTemp = state.dataLoopNodes->Node(this->GeneratorInletNodeNum).Temp - SteamDeltaT; - this->SteamOutletEnthalpy = FluidProperties::GetSatEnthalpyRefrig(state, + this->SteamOutletEnthalpy = Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, state.dataLoopNodes->Node(this->GeneratorInletNodeNum).Temp, 0.0, this->SteamFluidIndex, std::string{LoopLossesChillerAbsorptionIndirect} + this->Name); - CpFluid = FluidProperties::GetSpecificHeatGlycol(state, + CpFluid = Fluid::GetSpecificHeatGlycol(state, fluidNameWater, state.dataLoopNodes->Node(this->GeneratorInletNodeNum).Temp, const_cast(waterIndex), @@ -2085,14 +2085,14 @@ void IndirectAbsorberSpecs::calculate(EnergyPlusData &state, Real64 const MyLoad //************************* Loop Losses ***************************** // temperature of condensed steam leaving generator (after condensate trap) - Real64 TempWaterAtmPress = FluidProperties::GetSatTemperatureRefrig(state, + Real64 TempWaterAtmPress = Fluid::GetSatTemperatureRefrig(state, fluidNameSteam, state.dataEnvrn->OutBaroPress, this->SteamFluidIndex, std::string{LoopLossesChillerAbsorptionIndirect} + this->Name); // enthalpy of condensed steam leaving generator (after condensate trap) - Real64 EnthAtAtmPress = FluidProperties::GetSatEnthalpyRefrig(state, + Real64 EnthAtAtmPress = Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, TempWaterAtmPress, 0.0, diff --git a/src/EnergyPlus/ChillerReformulatedEIR.cc b/src/EnergyPlus/ChillerReformulatedEIR.cc index fced4b2388a..6b5d6d6210e 100644 --- a/src/EnergyPlus/ChillerReformulatedEIR.cc +++ b/src/EnergyPlus/ChillerReformulatedEIR.cc @@ -990,7 +990,7 @@ void ReformulatedEIRChillerSpecs::initialize(EnergyPlusData &state, bool const R if (this->MyEnvrnFlag && state.dataGlobal->BeginEnvrnFlag && (state.dataPlnt->PlantFirstSizesOkayToFinalize)) { - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -1002,7 +1002,7 @@ void ReformulatedEIRChillerSpecs::initialize(EnergyPlusData &state, bool const R if (this->CondenserType == DataPlant::CondenserType::WaterCooled) { - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, this->TempRefCondIn, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -1027,7 +1027,7 @@ void ReformulatedEIRChillerSpecs::initialize(EnergyPlusData &state, bool const R } if (this->HeatRecActive) { - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidIndex, @@ -1197,12 +1197,12 @@ void ReformulatedEIRChillerSpecs::size(EnergyPlusData &state) SizingEvapOutletTemp = state.dataSize->PlantSizData(PltSizNum).ExitTemp; SizingCondOutletTemp = state.dataSize->PlantSizData(PltSizCondNum).ExitTemp + state.dataSize->PlantSizData(PltSizCondNum).DeltaT; } - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -1263,12 +1263,12 @@ void ReformulatedEIRChillerSpecs::size(EnergyPlusData &state) if (PltSizCondNum > 0 && PltSizNum > 0 && this->CondenserType == DataPlant::CondenserType::WaterCooled) { if (state.dataSize->PlantSizData(PltSizNum).DesVolFlowRate >= HVAC::SmallWaterVolFlow && tmpNomCap > 0.0) { - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, this->TempRefCondIn, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -1607,13 +1607,13 @@ void ReformulatedEIRChillerSpecs::size(EnergyPlusData &state) } // Initialize condenser reference inlet temperature (not a user input) - Real64 Density = FluidProperties::GetDensityGlycol(state, + Real64 Density = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, this->TempRefCondOut, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 SpecificHeat = FluidProperties::GetSpecificHeatGlycol(state, + Real64 SpecificHeat = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, this->TempRefCondOut, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -1846,14 +1846,14 @@ void ReformulatedEIRChillerSpecs::calcHeatRecovery(EnergyPlusData &state, Real64 heatRecInletTemp = state.dataLoopNodes->Node(this->HeatRecInletNodeNum).Temp; Real64 HeatRecMassFlowRate = state.dataLoopNodes->Node(this->HeatRecInletNodeNum).MassFlowRate; - Real64 CpHeatRec = FluidProperties::GetSpecificHeatGlycol(state, + Real64 CpHeatRec = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidName, heatRecInletTemp, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidIndex, RoutineName); Real64 CpCond; if (this->CondenserType == DataPlant::CondenserType::WaterCooled) { - CpCond = FluidProperties::GetSpecificHeatGlycol(state, + CpCond = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, condInletTemp, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -2158,7 +2158,7 @@ void ReformulatedEIRChillerSpecs::calculate(EnergyPlusData &state, Real64 &MyLoa // This chiller is currently has only a water-cooled condenser // Calculate water side load - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->EvapInletNodeNum).Temp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -2442,7 +2442,7 @@ void ReformulatedEIRChillerSpecs::calculate(EnergyPlusData &state, Real64 &MyLoa if (this->CondMassFlowRate > DataBranchAirLoopPlant::MassFlowTolerance) { // If Heat Recovery specified for this vapor compression chiller, then Qcondenser will be adjusted by this subroutine if (this->HeatRecActive) this->calcHeatRecovery(state, this->QCondenser, this->CondMassFlowRate, condInletTemp, this->QHeatRecovery); - Cp = FluidProperties::GetSpecificHeatGlycol(state, + Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, condInletTemp, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, diff --git a/src/EnergyPlus/CondenserLoopTowers.cc b/src/EnergyPlus/CondenserLoopTowers.cc index bcc98409f3f..60a617f2384 100644 --- a/src/EnergyPlus/CondenserLoopTowers.cc +++ b/src/EnergyPlus/CondenserLoopTowers.cc @@ -1789,7 +1789,7 @@ namespace CondenserLoopTowers { void CoolingTower::initEachEnvironment(EnergyPlusData &state) { static constexpr std::string_view RoutineName("CoolingTower::initEachEnvironment"); - Real64 const rho = FluidProperties::GetDensityGlycol(state, + Real64 const rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -2481,12 +2481,12 @@ namespace CondenserLoopTowers { if (this->PerformanceInputMethod_Num == PIM::UFactor && (!this->HighSpeedTowerUAWasAutoSized)) { if (PltSizCondNum > 0) { - Real64 const rho = FluidProperties::GetDensityGlycol(state, + Real64 const rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, DesTowerExitWaterTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); - Real64 const Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 const Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, DesTowerExitWaterTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -2498,12 +2498,12 @@ namespace CondenserLoopTowers { Real64 AssumedDeltaT = DesTowerWaterDeltaT; Real64 AssumedExitTemp = DesTowerExitWaterTemp; - Real64 const rho = FluidProperties::GetDensityGlycol(state, + Real64 const rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, AssumedExitTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); - Real64 const Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 const Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, AssumedExitTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -2592,12 +2592,12 @@ namespace CondenserLoopTowers { } else { if (PltSizCondNum > 0) { if (PlantSizData(PltSizCondNum).DesVolFlowRate >= HVAC::SmallWaterVolFlow) { - Real64 const rho = FluidProperties::GetDensityGlycol(state, + Real64 const rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); - Real64 const Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 const Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, DesTowerExitWaterTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -2692,12 +2692,12 @@ namespace CondenserLoopTowers { if (this->HighSpeedTowerUAWasAutoSized) { if (PltSizCondNum > 0) { if (PlantSizData(PltSizCondNum).DesVolFlowRate >= HVAC::SmallWaterVolFlow) { - Real64 const rho = FluidProperties::GetDensityGlycol(state, + Real64 const rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); - Real64 const Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 const Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, DesTowerExitWaterTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -2791,12 +2791,12 @@ namespace CondenserLoopTowers { } else { if (this->DesignWaterFlowRate >= HVAC::SmallWaterVolFlow) { - Real64 const rho = FluidProperties::GetDensityGlycol(state, + Real64 const rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); - Real64 const Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 const Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, DesTowerExitWaterTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -2911,12 +2911,12 @@ namespace CondenserLoopTowers { if (this->DesignWaterFlowRate >= HVAC::SmallWaterVolFlow) { // nominal capacity doesn't include compressor heat; predefined factor was 1.25 W heat rejection per W of delivered cooling but now is // a user input - Real64 const rho = FluidProperties::GetDensityGlycol(state, + Real64 const rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, 29.44, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); // 85F design exiting water temp - Real64 const Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 const Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, 29.44, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -3094,12 +3094,12 @@ namespace CondenserLoopTowers { // nominal capacity doesn't include compressor heat; predefined factor was 1.25 W heat rejection per W of evap cooling but now is a // user input - Real64 const rho = FluidProperties::GetDensityGlycol(state, + Real64 const rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, 29.44, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); // 85F design exiting water temp - Real64 const Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 const Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, 29.44, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -3193,12 +3193,12 @@ namespace CondenserLoopTowers { if (this->DesignWaterFlowRate >= HVAC::SmallWaterVolFlow && this->TowerFreeConvNomCap > 0.0) { // nominal capacity doesn't include compressor heat; predefined factor was 1.25 W heat rejection per W of evap cooling but now user // input - Real64 const rho = FluidProperties::GetDensityGlycol(state, + Real64 const rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, 29.44, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); // 85F design exiting water temp - Real64 const Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 const Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, 29.44, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -3342,12 +3342,12 @@ namespace CondenserLoopTowers { state.dataCondenserLoopTowers->towers(this->VSTower).MaxWaterFlowRatio)); } - Real64 const rho = FluidProperties::GetDensityGlycol(state, + Real64 const rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, (this->DesignInletWB + this->DesignApproach + this->DesignRange), state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); - Real64 const Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 const Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, (this->DesignInletWB + this->DesignApproach + this->DesignRange), state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -3589,12 +3589,12 @@ namespace CondenserLoopTowers { if (PltSizCondNum > 0) { // get nominal capacity from PlantSizData(PltSizCondNum)%DeltaT and PlantSizData(PltSizCondNum)%DesVolFlowRate if (PlantSizData(PltSizCondNum).DesVolFlowRate >= HVAC::SmallWaterVolFlow) { - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, DesTowerExitWaterTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); - Cp = FluidProperties::GetSpecificHeatGlycol(state, + Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, DesTowerExitWaterTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -3607,12 +3607,12 @@ namespace CondenserLoopTowers { } else { // PltSizCondNum = 0 if (!this->TowerInletCondsAutoSize) { // can use design data entered into tower object if (this->DesignWaterFlowRate >= HVAC::SmallWaterVolFlow) { - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, DesTowerExitWaterTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); - Cp = FluidProperties::GetSpecificHeatGlycol(state, + Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, DesTowerExitWaterTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -3870,21 +3870,21 @@ namespace CondenserLoopTowers { // now calcuate UA values from nominal capacities and flow rates if (state.dataPlnt->PlantFirstSizesOkayToFinalize) { if (PltSizCondNum > 0) { // user has a plant sizing object - Cp = FluidProperties::GetSpecificHeatGlycol(state, + Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, DesTowerExitWaterTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); this->WaterTemp = DesTowerInletWaterTemp; } else { // probably no plant sizing object - Cp = FluidProperties::GetSpecificHeatGlycol(state, + Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); this->WaterTemp = DesTowerInletWaterTemp; // 35.0; // design condition } - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -4033,12 +4033,12 @@ namespace CondenserLoopTowers { // get nominal capacity from PlantSizData(PltSizCondNum)%DeltaT and PlantSizData(PltSizCondNum)%DesVolFlowRate if (PltSizCondNum > 0) { if (PlantSizData(PltSizCondNum).DesVolFlowRate >= HVAC::SmallWaterVolFlow) { - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, DesTowerExitWaterTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); - Cp = FluidProperties::GetSpecificHeatGlycol(state, + Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, DesTowerExitWaterTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -4085,12 +4085,12 @@ namespace CondenserLoopTowers { } else { if (!this->TowerInletCondsAutoSize) { if (this->DesignWaterFlowRate >= HVAC::SmallWaterVolFlow) { - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, DesTowerExitWaterTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); - Cp = FluidProperties::GetSpecificHeatGlycol(state, + Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, DesTowerExitWaterTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -4207,12 +4207,12 @@ namespace CondenserLoopTowers { } // now calcuate UA values from nominal capacities and flow rates if (state.dataPlnt->PlantFirstSizesOkayToFinalize) { - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); - Cp = FluidProperties::GetSpecificHeatGlycol(state, + Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, DesTowerExitWaterTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -4322,12 +4322,12 @@ namespace CondenserLoopTowers { // get nominal capacity from PlantSizData(PltSizCondNum)%DeltaT and PlantSizData(PltSizCondNum)%DesVolFlowRate if (PltSizCondNum > 0) { if (PlantSizData(PltSizCondNum).DesVolFlowRate >= HVAC::SmallWaterVolFlow) { - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, DesTowerExitWaterTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); - Cp = FluidProperties::GetSpecificHeatGlycol(state, + Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, DesTowerExitWaterTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -4405,12 +4405,12 @@ namespace CondenserLoopTowers { } else { // UA and Air flow rate given, so find Nominal Cap from running model - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, DesTowerExitWaterTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); - Cp = FluidProperties::GetSpecificHeatGlycol(state, + Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, DesTowerExitWaterTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -4837,7 +4837,7 @@ namespace CondenserLoopTowers { // output the fraction of the time step the fan is ON this->FanCyclingRatio = FanModeFrac; // Should this be water inlet node num????? - Real64 const CpWater = FluidProperties::GetSpecificHeatGlycol(state, + Real64 const CpWater = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->WaterInletNodeNum).Temp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -5080,7 +5080,7 @@ namespace CondenserLoopTowers { this->FanCyclingRatio = FanModeFrac; this->SpeedSelected = SpeedSel; - Real64 const CpWater = FluidProperties::GetSpecificHeatGlycol(state, + Real64 const CpWater = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->WaterInletNodeNum).Temp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -5227,7 +5227,7 @@ namespace CondenserLoopTowers { while (IncrNumCellFlag) { IncrNumCellFlag = false; // Initialize inlet node water properties - Real64 const WaterDensity = FluidProperties::GetDensityGlycol(state, + Real64 const WaterDensity = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->WaterInletNodeNum).Temp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -5361,7 +5361,7 @@ namespace CondenserLoopTowers { } // IF(OutletWaterTempOFF .GT. TempSetPoint)THEN } // IF(OutletWaterTempON .LT. TempSetPoint) ie if tower should not run at full capacity - Real64 const CpWater = FluidProperties::GetSpecificHeatGlycol(state, + Real64 const CpWater = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->WaterInletNodeNum).Temp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -5449,7 +5449,7 @@ namespace CondenserLoopTowers { Real64 constexpr Acc(1.e-3); // Accuracy of solver result static constexpr std::string_view RoutineName("calculateMerkelVariableSpeedTower"); - Real64 const CpWater = FluidProperties::GetSpecificHeatGlycol(state, + Real64 const CpWater = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->WaterInletNodeNum).Temp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -5731,7 +5731,7 @@ namespace CondenserLoopTowers { Real64 AirDensity = Psychrometrics::PsyRhoAirFnPbTdbW(state, this->AirPress, InletAirTemp, this->AirHumRat); // Density of air [kg/m3] Real64 AirMassFlowRate = AirFlowRate * AirDensity; // Mass flow rate of air [kg/s] Real64 CpAir = Psychrometrics::PsyCpAirFnW(this->AirHumRat); // Heat capacity of air [J/kg/K] - Real64 CpWater = FluidProperties::GetSpecificHeatGlycol(state, + Real64 CpWater = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, this->WaterTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -6252,7 +6252,7 @@ namespace CondenserLoopTowers { Real64 const TairAvg = (this->AirTemp + OutletAirTSat) / 2.0; // Amount of water evaporated, get density water at air temp or 4 C if too cold - Real64 const rho = FluidProperties::GetDensityGlycol(state, + Real64 const rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, max(TairAvg, 4.0), state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -6265,7 +6265,7 @@ namespace CondenserLoopTowers { } } else if (this->EvapLossMode == EvapLoss::UserFactor) { - Real64 const rho = FluidProperties::GetDensityGlycol(state, + Real64 const rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, AverageWaterTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, diff --git a/src/EnergyPlus/Data/EnergyPlusData.cc b/src/EnergyPlus/Data/EnergyPlusData.cc index 03b30e7bfbb..2931bffce2d 100644 --- a/src/EnergyPlus/Data/EnergyPlusData.cc +++ b/src/EnergyPlus/Data/EnergyPlusData.cc @@ -117,7 +117,7 @@ EnergyPlusData::EnergyPlusData() this->dataFans = std::make_unique(); this->dataFaultsMgr = std::make_unique(); this->dataFluidCoolers = std::make_unique(); - this->dataFluidProps = std::make_unique(); + this->dataFluid = std::make_unique(); this->dataFourPipeBeam = std::make_unique(); this->dataFuelCellElectGen = std::make_unique(); this->dataFurnaces = std::make_unique(); @@ -372,7 +372,7 @@ void EnergyPlusData::clear_state() this->dataFans->clear_state(); this->dataFaultsMgr->clear_state(); this->dataFluidCoolers->clear_state(); - this->dataFluidProps->clear_state(); + this->dataFluid->clear_state(); this->dataFourPipeBeam->clear_state(); this->dataFuelCellElectGen->clear_state(); this->dataFurnaces->clear_state(); @@ -574,7 +574,7 @@ void EnergyPlusData::init_state(EnergyPlusData &state) // do this in "topological" order meaning the first to go are the // objects that do not reference any other objects, like fluids, // schedules, curves, etc. - this->dataFluidProps->init_state(state); + this->dataFluid->init_state(state); this->dataAirLoop->init_state(state); this->dataAirLoopHVACDOAS->init_state(state); diff --git a/src/EnergyPlus/Data/EnergyPlusData.hh b/src/EnergyPlus/Data/EnergyPlusData.hh index b1b4f3eeb3d..95a4ea8da82 100644 --- a/src/EnergyPlus/Data/EnergyPlusData.hh +++ b/src/EnergyPlus/Data/EnergyPlusData.hh @@ -134,7 +134,7 @@ struct FanCoilUnitsData; struct FansData; struct FaultsManagerData; struct FluidCoolersData; -struct FluidPropertiesData; +struct FluidData; struct FourPipeBeamData; struct FuelCellElectricGeneratorData; struct FurnacesData; @@ -390,7 +390,7 @@ struct EnergyPlusData : BaseGlobalStruct std::unique_ptr dataFans; std::unique_ptr dataFaultsMgr; std::unique_ptr dataFluidCoolers; - std::unique_ptr dataFluidProps; + std::unique_ptr dataFluid; std::unique_ptr dataFourPipeBeam; std::unique_ptr dataFuelCellElectGen; std::unique_ptr dataFurnaces; diff --git a/src/EnergyPlus/DaylightingDevices.cc b/src/EnergyPlus/DaylightingDevices.cc index 37a8942ad32..b8fecc5ce33 100644 --- a/src/EnergyPlus/DaylightingDevices.cc +++ b/src/EnergyPlus/DaylightingDevices.cc @@ -1400,7 +1400,7 @@ namespace Dayltg { // REFERENCES: na // Using/Aliasing - using FluidProperties::FindArrayIndex; // USEd code could be copied here to eliminate dependence on FluidProperties + using Fluid::FindArrayIndex; // USEd code could be copied here to eliminate dependence on FluidProperties // Return value Real64 InterpolatePipeTransBeam; diff --git a/src/EnergyPlus/DesiccantDehumidifiers.cc b/src/EnergyPlus/DesiccantDehumidifiers.cc index a9a3aafc4e0..d567be8fcee 100644 --- a/src/EnergyPlus/DesiccantDehumidifiers.cc +++ b/src/EnergyPlus/DesiccantDehumidifiers.cc @@ -475,7 +475,7 @@ namespace DesiccantDehumidifiers { if (desicDehum.MaxCoilFluidFlow > 0.0) { SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed Real64 SteamDensity = - FluidProperties::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, SteamIndex, dehumidifierDesiccantNoFans); + Fluid::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, SteamIndex, dehumidifierDesiccantNoFans); desicDehum.MaxCoilFluidFlow *= SteamDensity; } @@ -984,7 +984,7 @@ namespace DesiccantDehumidifiers { desicDehum.MaxCoilFluidFlow = SteamCoils::GetCoilMaxSteamFlowRate(state, desicDehum.RegenCoilIndex, errFlag); if (desicDehum.MaxCoilFluidFlow > 0.0) { SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed - Real64 SteamDensity = FluidProperties::GetSatDensityRefrig( + Real64 SteamDensity = Fluid::GetSatDensityRefrig( state, fluidNameSteam, TempSteamIn, 1.0, SteamIndex, dehumidifierDesiccantNoFans); desicDehum.MaxCoilFluidFlow *= SteamDensity; } @@ -1654,7 +1654,7 @@ namespace DesiccantDehumidifiers { desicDehum.MaxCoilFluidFlow = WaterCoils::GetCoilMaxWaterFlowRate(state, "Coil:Heating:Water", desicDehum.RegenCoilName, ErrorFlag); if (desicDehum.MaxCoilFluidFlow > 0.0) { - Real64 FluidDensity = FluidProperties::GetDensityGlycol(state, + Real64 FluidDensity = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(desicDehum.plantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(desicDehum.plantLoc.loopNum).FluidIndex, @@ -1684,7 +1684,7 @@ namespace DesiccantDehumidifiers { if (desicDehum.MaxCoilFluidFlow > 0.0) { int SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed - Real64 FluidDensity = FluidProperties::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, SteamIndex, RoutineName); + Real64 FluidDensity = Fluid::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, SteamIndex, RoutineName); desicDehum.MaxCoilFluidFlow *= FluidDensity; } } @@ -1770,7 +1770,7 @@ namespace DesiccantDehumidifiers { //} if (CoilMaxVolFlowRate != DataSizing::AutoSize) { Real64 FluidDensity = - FluidProperties::GetDensityGlycol(state, + Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(desicDehum.plantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(desicDehum.plantLoc.loopNum).FluidIndex, @@ -1793,7 +1793,7 @@ namespace DesiccantDehumidifiers { if (CoilMaxVolFlowRate != DataSizing::AutoSize) { int SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed Real64 FluidDensity = - FluidProperties::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, SteamIndex, RoutineName); + Fluid::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, SteamIndex, RoutineName); desicDehum.MaxCoilFluidFlow = CoilMaxVolFlowRate * FluidDensity; } } diff --git a/src/EnergyPlus/EvaporativeFluidCoolers.cc b/src/EnergyPlus/EvaporativeFluidCoolers.cc index 3e170a3c51e..d9841a04e1c 100644 --- a/src/EnergyPlus/EvaporativeFluidCoolers.cc +++ b/src/EnergyPlus/EvaporativeFluidCoolers.cc @@ -1277,7 +1277,7 @@ namespace EvaporativeFluidCoolers { // Begin environment initializations if (this->MyEnvrnFlag && state.dataGlobal->BeginEnvrnFlag && (state.dataPlnt->PlantFirstSizesOkayToFinalize)) { - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -1406,12 +1406,12 @@ namespace EvaporativeFluidCoolers { if (this->PerformanceInputMethod_Num == PIM::UFactor && !this->HighSpeedEvapFluidCoolerUAWasAutoSized) { if (PltSizCondNum > 0) { - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, CalledFrom); - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, state.dataSize->PlantSizData(PltSizCondNum).ExitTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -1481,12 +1481,12 @@ namespace EvaporativeFluidCoolers { if (state.dataPlnt->PlantFirstSizesOkayToFinalize) this->HighSpeedFanPower = tmpHighSpeedFanPower; } else if (PltSizCondNum > 0) { if (state.dataSize->PlantSizData(PltSizCondNum).DesVolFlowRate >= HVAC::SmallWaterVolFlow) { - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, CalledFrom); - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, state.dataSize->PlantSizData(PltSizCondNum).ExitTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -1586,12 +1586,12 @@ namespace EvaporativeFluidCoolers { "must be > 25.6 C if autosizing the Evaporative Fluid Cooler."); ShowFatalError(state, "Review and revise design input values as appropriate."); } - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, CalledFrom); - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, state.dataSize->PlantSizData(PltSizCondNum).ExitTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -1714,12 +1714,12 @@ namespace EvaporativeFluidCoolers { if (this->DesignWaterFlowRate >= HVAC::SmallWaterVolFlow) { // Standard Design Capacity doesn't include compressor heat; // predefined factor was 1.25 W heat rejection per W of delivered cooling, now a user input with 1.25 default - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, CalledFrom); - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, 35.0, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -1792,12 +1792,12 @@ namespace EvaporativeFluidCoolers { if (this->PerformanceInputMethod_Num == PIM::UserSpecifiedDesignCapacity) { if (this->DesignWaterFlowRate >= HVAC::SmallWaterVolFlow) { - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, CalledFrom); - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, this->DesignEnteringWaterTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -1952,12 +1952,12 @@ namespace EvaporativeFluidCoolers { if (this->DesignWaterFlowRate >= HVAC::SmallWaterVolFlow && this->LowSpeedStandardDesignCapacity > 0.0) { // Standard design capacity doesn't include compressor heat; // predefined factor was 1.25 W heat rejection per W of delivered cooling, now user input with default 1.25 - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, CalledFrom); - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, this->DesignEnteringWaterTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -2014,12 +2014,12 @@ namespace EvaporativeFluidCoolers { if (this->PerformanceInputMethod_Num == PIM::UserSpecifiedDesignCapacity && this->Type == DataPlant::PlantEquipmentType::EvapFluidCooler_TwoSpd) { if (this->DesignWaterFlowRate >= HVAC::SmallWaterVolFlow && this->LowSpeedUserSpecifiedDesignCapacity > 0.0) { - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, CalledFrom); - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, this->DesignEnteringWaterTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -2279,7 +2279,7 @@ namespace EvaporativeFluidCoolers { } // Should this be water inlet node num????? - CpWater = FluidProperties::GetSpecificHeatGlycol(state, + CpWater = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->WaterInletNode).Temp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -2404,7 +2404,7 @@ namespace EvaporativeFluidCoolers { } // Should this be water inlet node num?? - Real64 CpWater = FluidProperties::GetSpecificHeatGlycol(state, + Real64 CpWater = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->WaterInletNode).Temp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -2457,7 +2457,7 @@ namespace EvaporativeFluidCoolers { Real64 AirDensity = Psychrometrics::PsyRhoAirFnPbTdbW(state, this->inletConds.AirPress, InletAirTemp, this->inletConds.AirHumRat); Real64 AirMassFlowRate = AirFlowRate * AirDensity; Real64 CpAir = Psychrometrics::PsyCpAirFnW(this->inletConds.AirHumRat); - Real64 CpWater = FluidProperties::GetSpecificHeatGlycol(state, + Real64 CpWater = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, this->InletWaterTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -2556,7 +2556,7 @@ namespace EvaporativeFluidCoolers { Real64 TairAvg = (this->inletConds.AirTemp + OutletAirTSat) / 2.0; // Amount of water evaporated - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, TairAvg, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -2568,7 +2568,7 @@ namespace EvaporativeFluidCoolers { } } else if (this->EvapLossMode == EvapLoss::ByUserFactor) { - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, AverageWaterTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -2762,7 +2762,7 @@ namespace EvaporativeFluidCoolers { this->setupOutputVars(state); this->FluidIndex = state.dataPlnt->PlantLoop(state.dataSize->CurLoopNum).FluidIndex; - std::string FluidName = FluidProperties::GetGlycolNameByIndex(state, this->FluidIndex); + std::string FluidName = Fluid::GetGlycolNameByIndex(state, this->FluidIndex); if (Util::SameString(this->PerformanceInputMethod, "STANDARDDESIGNCAPACITY")) { this->PerformanceInputMethod_Num = PIM::StandardDesignCapacity; diff --git a/src/EnergyPlus/FanCoilUnits.cc b/src/EnergyPlus/FanCoilUnits.cc index 2b9680775cc..d1fa183f8f1 100644 --- a/src/EnergyPlus/FanCoilUnits.cc +++ b/src/EnergyPlus/FanCoilUnits.cc @@ -1083,7 +1083,7 @@ namespace FanCoilUnits { fanCoil.OutAirMassFlow = RhoAir * fanCoil.OutAirVolFlow; if (fanCoil.HCoilType_Num == HCoil::Water) { - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(fanCoil.HeatCoilPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(fanCoil.HeatCoilPlantLoc.loopNum).FluidIndex, @@ -1092,7 +1092,7 @@ namespace FanCoilUnits { fanCoil.MinHotWaterFlow = rho * fanCoil.MinHotWaterVolFlow; } - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(fanCoil.CoolCoilPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(fanCoil.CoolCoilPlantLoc.loopNum).FluidIndex, @@ -1630,12 +1630,12 @@ namespace FanCoilUnits { } fanCoil.DesHeatingLoad = DesCoilLoad; if (DesCoilLoad >= HVAC::SmallLoad) { - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(fanCoil.HeatCoilPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(fanCoil.HeatCoilPlantLoc.loopNum).FluidIndex, RoutineNameNoSpace); - Cp = FluidProperties::GetSpecificHeatGlycol(state, + Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(fanCoil.HeatCoilPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(fanCoil.HeatCoilPlantLoc.loopNum).FluidIndex, @@ -1815,12 +1815,12 @@ namespace FanCoilUnits { } fanCoil.DesCoolingLoad = DesCoilLoad; if (DesCoilLoad >= HVAC::SmallLoad) { - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(fanCoil.CoolCoilPlantLoc.loopNum).FluidName, 5., state.dataPlnt->PlantLoop(fanCoil.CoolCoilPlantLoc.loopNum).FluidIndex, RoutineNameNoSpace); - Cp = FluidProperties::GetSpecificHeatGlycol(state, + Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(fanCoil.CoolCoilPlantLoc.loopNum).FluidName, 5., state.dataPlnt->PlantLoop(fanCoil.CoolCoilPlantLoc.loopNum).FluidIndex, diff --git a/src/EnergyPlus/FluidCoolers.cc b/src/EnergyPlus/FluidCoolers.cc index 9f8b613ddef..ca88e72f098 100644 --- a/src/EnergyPlus/FluidCoolers.cc +++ b/src/EnergyPlus/FluidCoolers.cc @@ -851,7 +851,7 @@ void FluidCoolerspecs::oneTimeInit_new(EnergyPlusData &state) void FluidCoolerspecs::initEachEnvironment(EnergyPlusData &state) { static constexpr std::string_view RoutineName("FluidCoolerspecs::initEachEnvironment"); - Real64 const rho = FluidProperties::GetDensityGlycol(state, + Real64 const rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -1008,12 +1008,12 @@ void FluidCoolerspecs::size(EnergyPlusData &state) if (this->PerformanceInputMethod_Num == PerfInputMethod::U_FACTOR && this->HighSpeedFluidCoolerUAWasAutoSized) { if (PltSizCondNum > 0) { - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, CalledFrom); - Cp = FluidProperties::GetSpecificHeatGlycol(state, + Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, state.dataSize->PlantSizData(PltSizCondNum).ExitTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -1054,12 +1054,12 @@ void FluidCoolerspecs::size(EnergyPlusData &state) "Setpoint must be > design inlet air dry-bulb temp if autosizing the Fluid Cooler."); ShowFatalError(state, "Review and revise design input values as appropriate."); } - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, CalledFrom); - Cp = FluidProperties::GetSpecificHeatGlycol(state, + Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, state.dataSize->PlantSizData(PltSizCondNum).ExitTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -1143,12 +1143,12 @@ void FluidCoolerspecs::size(EnergyPlusData &state) "Setpoint must be > design inlet air dry-bulb temp if autosizing the Fluid Cooler."); ShowFatalError(state, "Review and revise design input values as appropriate."); } - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, CalledFrom); - Cp = FluidProperties::GetSpecificHeatGlycol(state, + Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, state.dataSize->PlantSizData(PltSizCondNum).ExitTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -1225,12 +1225,12 @@ void FluidCoolerspecs::size(EnergyPlusData &state) "must be > design inlet air dry-bulb temp if autosizing the Fluid Cooler."); ShowFatalError(state, "Review and revise design input values as appropriate."); } - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, CalledFrom); - Cp = FluidProperties::GetSpecificHeatGlycol(state, + Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, state.dataSize->PlantSizData(PltSizCondNum).ExitTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -1339,12 +1339,12 @@ void FluidCoolerspecs::size(EnergyPlusData &state) if (this->PerformanceInputMethod_Num == PerfInputMethod::NOMINAL_CAPACITY) { if (this->DesignWaterFlowRate >= HVAC::SmallWaterVolFlow) { - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, CalledFrom); - Cp = FluidProperties::GetSpecificHeatGlycol(state, + Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, this->DesignEnteringWaterTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -1523,12 +1523,12 @@ void FluidCoolerspecs::size(EnergyPlusData &state) } if (this->DesignWaterFlowRate >= HVAC::SmallWaterVolFlow && this->FluidCoolerLowSpeedNomCap > 0.0) { - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, CalledFrom); - Cp = FluidProperties::GetSpecificHeatGlycol(state, + Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, this->DesignEnteringWaterTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -1759,7 +1759,7 @@ void FluidCoolerspecs::calcSingleSpeed(EnergyPlusData &state) // Setpoint was not met, fluid cooler ran at full capacity this->FanPower = FanPowerOn; } - Real64 CpWater = FluidProperties::GetSpecificHeatGlycol(state, + Real64 CpWater = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->WaterInletNodeNum).Temp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -1885,7 +1885,7 @@ void FluidCoolerspecs::calcTwoSpeed(EnergyPlusData &state) this->FanPower = FanPowerHigh; } } - Real64 CpWater = FluidProperties::GetSpecificHeatGlycol(state, + Real64 CpWater = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->WaterInletNodeNum).Temp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -1928,7 +1928,7 @@ void CalcFluidCoolerOutlet( state.dataFluidCoolers->SimpleFluidCooler(FluidCoolerNum).AirHumRat); Real64 AirMassFlowRate = AirFlowRate * AirDensity; Real64 CpAir = Psychrometrics::PsyCpAirFnW(state.dataFluidCoolers->SimpleFluidCooler(FluidCoolerNum).AirHumRat); - Real64 CpWater = FluidProperties::GetSpecificHeatGlycol( + Real64 CpWater = Fluid::GetSpecificHeatGlycol( state, state.dataPlnt->PlantLoop(state.dataFluidCoolers->SimpleFluidCooler(FluidCoolerNum).plantLoc.loopNum).FluidName, _InletWaterTemp, diff --git a/src/EnergyPlus/FluidProperties.cc b/src/EnergyPlus/FluidProperties.cc index c4353b32718..3d2b82acb64 100644 --- a/src/EnergyPlus/FluidProperties.cc +++ b/src/EnergyPlus/FluidProperties.cc @@ -64,7 +64,7 @@ namespace EnergyPlus { -namespace FluidProperties { +namespace Fluid { // MODULE INFORMATION: // AUTHOR Mike Turner @@ -686,10 +686,10 @@ namespace FluidProperties { ++FluidNum; FluidNames(FluidNum).Name = Alphas(1); if (Util::SameString(Alphas(2), Refrig)) { - ++state.dataFluidProps->NumOfRefrigerants; + ++state.dataFluid->NumOfRefrigerants; FluidNames(FluidNum).IsGlycol = false; } else if (Util::SameString(Alphas(2), Glycol)) { - ++state.dataFluidProps->NumOfGlycols; + ++state.dataFluid->NumOfGlycols; FluidNames(FluidNum).IsGlycol = true; } else { ShowSevereError(state, format("{}{}=\"{}\", invalid type", RoutineName, CurrentModuleObject, Alphas(1))); @@ -702,75 +702,75 @@ namespace FluidProperties { ShowFatalError(state, format("{} Previous errors in input cause program termination.", RoutineName)); } - if (state.dataFluidProps->NumOfRefrigerants + 1 > 0) { - state.dataFluidProps->RefrigData.allocate(state.dataFluidProps->NumOfRefrigerants + 1); - state.dataFluidProps->RefrigUsed.allocate(state.dataFluidProps->NumOfRefrigerants + 1); - state.dataFluidProps->RefrigUsed = false; - state.dataFluidProps->RefrigErrorTracking.allocate(state.dataFluidProps->NumOfRefrigerants + 1); + if (state.dataFluid->NumOfRefrigerants + 1 > 0) { + state.dataFluid->RefrigData.allocate(state.dataFluid->NumOfRefrigerants + 1); + state.dataFluid->RefrigUsed.allocate(state.dataFluid->NumOfRefrigerants + 1); + state.dataFluid->RefrigUsed = false; + state.dataFluid->RefrigErrorTracking.allocate(state.dataFluid->NumOfRefrigerants + 1); } - if (state.dataFluidProps->NumOfGlycols > 0) { - state.dataFluidProps->GlyRawData.allocate(state.dataFluidProps->NumOfGlycols); + if (state.dataFluid->NumOfGlycols > 0) { + state.dataFluid->GlyRawData.allocate(state.dataFluid->NumOfGlycols); } // Take the fluid names and assign them to the appropriate derived type - state.dataFluidProps->NumOfRefrigerants = 1; - state.dataFluidProps->NumOfGlycols = 0; - state.dataFluidProps->RefrigData(1).Name = "STEAM"; - state.dataFluidProps->RefrigUsed(1) = true; - state.dataFluidProps->RefrigErrorTracking(1).Name = "STEAM"; + state.dataFluid->NumOfRefrigerants = 1; + state.dataFluid->NumOfGlycols = 0; + state.dataFluid->RefrigData(1).Name = "STEAM"; + state.dataFluid->RefrigUsed(1) = true; + state.dataFluid->RefrigErrorTracking(1).Name = "STEAM"; for (int Loop = 1; Loop <= FluidNum; ++Loop) { if (!FluidNames(Loop).IsGlycol) { - ++state.dataFluidProps->NumOfRefrigerants; - state.dataFluidProps->RefrigData(state.dataFluidProps->NumOfRefrigerants).Name = FluidNames(Loop).Name; - state.dataFluidProps->RefrigErrorTracking(state.dataFluidProps->NumOfRefrigerants).Name = FluidNames(Loop).Name; + ++state.dataFluid->NumOfRefrigerants; + state.dataFluid->RefrigData(state.dataFluid->NumOfRefrigerants).Name = FluidNames(Loop).Name; + state.dataFluid->RefrigErrorTracking(state.dataFluid->NumOfRefrigerants).Name = FluidNames(Loop).Name; } else if (FluidNames(Loop).IsGlycol) { - ++state.dataFluidProps->NumOfGlycols; - state.dataFluidProps->GlyRawData(state.dataFluidProps->NumOfGlycols).Name = FluidNames(Loop).Name; + ++state.dataFluid->NumOfGlycols; + state.dataFluid->GlyRawData(state.dataFluid->NumOfGlycols).Name = FluidNames(Loop).Name; } } FluidNames.deallocate(); - state.dataFluidProps->RefrigData(1).NumPsPoints = DefaultNumSteamTemps; - state.dataFluidProps->RefrigData(1).PsTemps.allocate(DefaultNumSteamTemps); - state.dataFluidProps->RefrigData(1).PsValues.allocate(DefaultNumSteamTemps); - state.dataFluidProps->RefrigData(1).NumHPoints = DefaultNumSteamTemps; - state.dataFluidProps->RefrigData(1).HTemps.allocate(DefaultNumSteamTemps); - state.dataFluidProps->RefrigData(1).HfValues.allocate(DefaultNumSteamTemps); - state.dataFluidProps->RefrigData(1).HfgValues.allocate(DefaultNumSteamTemps); - state.dataFluidProps->RefrigData(1).NumCpPoints = DefaultNumSteamTemps; - state.dataFluidProps->RefrigData(1).CpTemps.allocate(DefaultNumSteamTemps); - state.dataFluidProps->RefrigData(1).CpfValues.allocate(DefaultNumSteamTemps); - state.dataFluidProps->RefrigData(1).CpfgValues.allocate(DefaultNumSteamTemps); - state.dataFluidProps->RefrigData(1).NumRhoPoints = DefaultNumSteamTemps; - state.dataFluidProps->RefrigData(1).RhoTemps.allocate(DefaultNumSteamTemps); - state.dataFluidProps->RefrigData(1).RhofValues.allocate(DefaultNumSteamTemps); - state.dataFluidProps->RefrigData(1).RhofgValues.allocate(DefaultNumSteamTemps); - - state.dataFluidProps->RefrigData(1).PsTemps = DefaultSteamTemps; - state.dataFluidProps->RefrigData(1).PsValues = DefaultSteamPressData; - state.dataFluidProps->RefrigData(1).HTemps = DefaultSteamTemps; - state.dataFluidProps->RefrigData(1).HfValues = DefaultSteamEnthalpyFluidData; - state.dataFluidProps->RefrigData(1).HfgValues = DefaultSteamEnthalpyGasFluidData; - state.dataFluidProps->RefrigData(1).CpTemps = DefaultSteamTemps; - state.dataFluidProps->RefrigData(1).CpfValues = DefaultSteamCpFluidData; - state.dataFluidProps->RefrigData(1).CpfgValues = DefaultSteamCpGasFluidData; - state.dataFluidProps->RefrigData(1).RhoTemps = DefaultSteamTemps; - state.dataFluidProps->RefrigData(1).RhofValues = DefaultSteamDensityFluidData; - state.dataFluidProps->RefrigData(1).RhofgValues = DefaultSteamDensityGasFluidData; - - state.dataFluidProps->RefrigData(1).NumSuperTempPts = DefaultNumSteamSuperheatedTemps; - state.dataFluidProps->RefrigData(1).NumSuperPressPts = DefaultNumSteamSuperheatedPressure; - state.dataFluidProps->RefrigData(1).SHTemps.allocate(state.dataFluidProps->RefrigData(1).NumSuperTempPts); - state.dataFluidProps->RefrigData(1).SHPress.allocate(state.dataFluidProps->RefrigData(1).NumSuperPressPts); - state.dataFluidProps->RefrigData(1).HshValues.allocate(state.dataFluidProps->RefrigData(1).NumSuperPressPts, - state.dataFluidProps->RefrigData(1).NumSuperTempPts); - state.dataFluidProps->RefrigData(1).RhoshValues.allocate(state.dataFluidProps->RefrigData(1).NumSuperPressPts, - state.dataFluidProps->RefrigData(1).NumSuperTempPts); - state.dataFluidProps->RefrigData(1).SHTemps = DefaultSteamSuperheatedTemps; - state.dataFluidProps->RefrigData(1).SHPress = DefaultSteamSuperheatedPressData; - state.dataFluidProps->RefrigData(1).HshValues = DefaultSteamSuperheatedEnthalpyData; - state.dataFluidProps->RefrigData(1).RhoshValues = DefaultSteamSuperheatedDensityData; + state.dataFluid->RefrigData(1).NumPsPoints = DefaultNumSteamTemps; + state.dataFluid->RefrigData(1).PsTemps.allocate(DefaultNumSteamTemps); + state.dataFluid->RefrigData(1).PsValues.allocate(DefaultNumSteamTemps); + state.dataFluid->RefrigData(1).NumHPoints = DefaultNumSteamTemps; + state.dataFluid->RefrigData(1).HTemps.allocate(DefaultNumSteamTemps); + state.dataFluid->RefrigData(1).HfValues.allocate(DefaultNumSteamTemps); + state.dataFluid->RefrigData(1).HfgValues.allocate(DefaultNumSteamTemps); + state.dataFluid->RefrigData(1).NumCpPoints = DefaultNumSteamTemps; + state.dataFluid->RefrigData(1).CpTemps.allocate(DefaultNumSteamTemps); + state.dataFluid->RefrigData(1).CpfValues.allocate(DefaultNumSteamTemps); + state.dataFluid->RefrigData(1).CpfgValues.allocate(DefaultNumSteamTemps); + state.dataFluid->RefrigData(1).NumRhoPoints = DefaultNumSteamTemps; + state.dataFluid->RefrigData(1).RhoTemps.allocate(DefaultNumSteamTemps); + state.dataFluid->RefrigData(1).RhofValues.allocate(DefaultNumSteamTemps); + state.dataFluid->RefrigData(1).RhofgValues.allocate(DefaultNumSteamTemps); + + state.dataFluid->RefrigData(1).PsTemps = DefaultSteamTemps; + state.dataFluid->RefrigData(1).PsValues = DefaultSteamPressData; + state.dataFluid->RefrigData(1).HTemps = DefaultSteamTemps; + state.dataFluid->RefrigData(1).HfValues = DefaultSteamEnthalpyFluidData; + state.dataFluid->RefrigData(1).HfgValues = DefaultSteamEnthalpyGasFluidData; + state.dataFluid->RefrigData(1).CpTemps = DefaultSteamTemps; + state.dataFluid->RefrigData(1).CpfValues = DefaultSteamCpFluidData; + state.dataFluid->RefrigData(1).CpfgValues = DefaultSteamCpGasFluidData; + state.dataFluid->RefrigData(1).RhoTemps = DefaultSteamTemps; + state.dataFluid->RefrigData(1).RhofValues = DefaultSteamDensityFluidData; + state.dataFluid->RefrigData(1).RhofgValues = DefaultSteamDensityGasFluidData; + + state.dataFluid->RefrigData(1).NumSuperTempPts = DefaultNumSteamSuperheatedTemps; + state.dataFluid->RefrigData(1).NumSuperPressPts = DefaultNumSteamSuperheatedPressure; + state.dataFluid->RefrigData(1).SHTemps.allocate(state.dataFluid->RefrigData(1).NumSuperTempPts); + state.dataFluid->RefrigData(1).SHPress.allocate(state.dataFluid->RefrigData(1).NumSuperPressPts); + state.dataFluid->RefrigData(1).HshValues.allocate(state.dataFluid->RefrigData(1).NumSuperPressPts, + state.dataFluid->RefrigData(1).NumSuperTempPts); + state.dataFluid->RefrigData(1).RhoshValues.allocate(state.dataFluid->RefrigData(1).NumSuperPressPts, + state.dataFluid->RefrigData(1).NumSuperTempPts); + state.dataFluid->RefrigData(1).SHTemps = DefaultSteamSuperheatedTemps; + state.dataFluid->RefrigData(1).SHPress = DefaultSteamSuperheatedPressData; + state.dataFluid->RefrigData(1).HshValues = DefaultSteamSuperheatedEnthalpyData; + state.dataFluid->RefrigData(1).RhoshValues = DefaultSteamSuperheatedDensityData; // Read in all of the temperature arrays in the input file FluidTemps.allocate(NumOfFluidTempArrays); @@ -819,7 +819,7 @@ namespace FluidProperties { // Go through each refrigerant found in the fluid names statement and read in the data // Note that every valid fluid must have ALL of the necessary data or a fatal error will // be produced. - for (int Loop = 2; Loop <= state.dataFluidProps->NumOfRefrigerants; ++Loop) { + for (int Loop = 2; Loop <= state.dataFluid->NumOfRefrigerants; ++Loop) { // For each property, cycle through all the valid input until the proper match is found. @@ -844,7 +844,7 @@ namespace FluidProperties { cAlphaFieldNames, cNumericFieldNames); - if ((Util::SameString(Alphas(1), state.dataFluidProps->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), Pressure)) && + if ((Util::SameString(Alphas(1), state.dataFluid->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), Pressure)) && (Util::SameString(Alphas(3), GasFluid))) { for (int TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) { @@ -853,14 +853,14 @@ namespace FluidProperties { TempsName = FluidTemps(TempLoop).Name; // At this point, we have found the correct input line and found a match // for the temperature array. It's time to load up the local derived type. - state.dataFluidProps->RefrigData(Loop).NumPsPoints = FluidTemps(TempLoop).NumOfTemps; - state.dataFluidProps->RefrigData(Loop).PsTemps.allocate(state.dataFluidProps->RefrigData(Loop).NumPsPoints); - state.dataFluidProps->RefrigData(Loop).PsValues.allocate(state.dataFluidProps->RefrigData(Loop).NumPsPoints); + state.dataFluid->RefrigData(Loop).NumPsPoints = FluidTemps(TempLoop).NumOfTemps; + state.dataFluid->RefrigData(Loop).PsTemps.allocate(state.dataFluid->RefrigData(Loop).NumPsPoints); + state.dataFluid->RefrigData(Loop).PsValues.allocate(state.dataFluid->RefrigData(Loop).NumPsPoints); // Make sure the number of points in the two arrays (temps and values) are the same - if (NumNumbers != state.dataFluidProps->RefrigData(Loop).NumPsPoints) { + if (NumNumbers != state.dataFluid->RefrigData(Loop).NumPsPoints) { ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); ShowContinueError(state, format("Temperature Name={}, Temperature array and fluid saturation pressure array must have the " "same number of points", @@ -868,15 +868,15 @@ namespace FluidProperties { ShowContinueError(state, format("Temperature # points={} whereas {} # pressure points={}", NumNumbers, - state.dataFluidProps->RefrigData(Loop).Name, - state.dataFluidProps->RefrigData(Loop).NumPsPoints)); + state.dataFluid->RefrigData(Loop).Name, + state.dataFluid->RefrigData(Loop).NumPsPoints)); ErrorsFound = true; break; // the TempLoop DO Loop } // Same number of points so assign the values - state.dataFluidProps->RefrigData(Loop).PsTemps = FluidTemps(TempLoop).Temps; - state.dataFluidProps->RefrigData(Loop).PsValues = Numbers({1, NumNumbers}); + state.dataFluid->RefrigData(Loop).PsTemps = FluidTemps(TempLoop).Temps; + state.dataFluid->RefrigData(Loop).PsValues = Numbers({1, NumNumbers}); break; // the TempLoop DO loop } @@ -884,7 +884,7 @@ namespace FluidProperties { // If it made it all the way to the last temperature array and didn't find a match, then no match was found if (TempLoop == NumOfFluidTempArrays) { ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); ShowContinueError(state, "Found saturated fluid gas/fluid pressure input but no matching temperature array"); ShowContinueError(state, format("Entered Temperature Name={}", TempsName)); ErrorsFound = true; @@ -898,7 +898,7 @@ namespace FluidProperties { // If it made it all the way to the last input occurrence and didn't find a match, // then no sat press data found if (InData == NumOfSatFluidPropArrays) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); ShowContinueError(state, format(R"(No Gas/Fluid Saturation Pressure found. Need properties with {}="Pressure" and {}="FluidGas".)", cAlphaFieldNames(2), @@ -926,7 +926,7 @@ namespace FluidProperties { cAlphaFieldNames, cNumericFieldNames); - if ((Util::SameString(Alphas(1), state.dataFluidProps->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), Enthalpy)) && + if ((Util::SameString(Alphas(1), state.dataFluid->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), Enthalpy)) && (Util::SameString(Alphas(3), Fluid))) { for (int TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) { @@ -935,14 +935,14 @@ namespace FluidProperties { TempsName = FluidTemps(TempLoop).Name; // At this point, we have found the correct input line and found a match // for the temperature array. It's time to load up the local derived type. - state.dataFluidProps->RefrigData(Loop).NumHPoints = FluidTemps(TempLoop).NumOfTemps; - state.dataFluidProps->RefrigData(Loop).HTemps.allocate(state.dataFluidProps->RefrigData(Loop).NumHPoints); - state.dataFluidProps->RefrigData(Loop).HfValues.allocate(state.dataFluidProps->RefrigData(Loop).NumHPoints); + state.dataFluid->RefrigData(Loop).NumHPoints = FluidTemps(TempLoop).NumOfTemps; + state.dataFluid->RefrigData(Loop).HTemps.allocate(state.dataFluid->RefrigData(Loop).NumHPoints); + state.dataFluid->RefrigData(Loop).HfValues.allocate(state.dataFluid->RefrigData(Loop).NumHPoints); // Make sure the number of points in the two arrays (temps and values) are the same - if (NumNumbers != state.dataFluidProps->RefrigData(Loop).NumHPoints) { + if (NumNumbers != state.dataFluid->RefrigData(Loop).NumHPoints) { ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); ShowSevereError(state, format("Temperature Name={}, Temperature array and saturated fluid enthalpy array must have the same " "number of points", @@ -950,15 +950,15 @@ namespace FluidProperties { ShowContinueError(state, format("Temperature # points={} whereas {} # points={}", NumNumbers, - state.dataFluidProps->RefrigData(Loop).Name, - state.dataFluidProps->RefrigData(Loop).NumHPoints)); + state.dataFluid->RefrigData(Loop).Name, + state.dataFluid->RefrigData(Loop).NumHPoints)); ErrorsFound = true; break; // the TempLoop DO Loop } // Same number of points so assign the values - state.dataFluidProps->RefrigData(Loop).HTemps = FluidTemps(TempLoop).Temps; - state.dataFluidProps->RefrigData(Loop).HfValues = Numbers({1, NumNumbers}); + state.dataFluid->RefrigData(Loop).HTemps = FluidTemps(TempLoop).Temps; + state.dataFluid->RefrigData(Loop).HfValues = Numbers({1, NumNumbers}); break; // the TempLoop DO loop } @@ -966,7 +966,7 @@ namespace FluidProperties { // If it made it all the way to the last temperature array and didn't find a match, then no match was found if (TempLoop == NumOfFluidTempArrays) { ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); ShowContinueError(state, "Found saturated fluid enthalpy input but no matching temperature array"); ShowContinueError(state, format("Entered Temperature Name={}", TempsName)); ErrorsFound = true; @@ -979,7 +979,7 @@ namespace FluidProperties { // If it made it all the way to the last input occurrence and didn't find a match, then no sat fluid enthalpy data found if (InData == NumOfSatFluidPropArrays) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); ShowContinueError(state, format(R"(No Saturated Fluid Enthalpy found. Need properties to be entered with {}="Enthalpy" and {}="Fluid".)", cAlphaFieldNames(2), @@ -1006,7 +1006,7 @@ namespace FluidProperties { cAlphaFieldNames, cNumericFieldNames); - if ((Util::SameString(Alphas(1), state.dataFluidProps->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), Enthalpy)) && + if ((Util::SameString(Alphas(1), state.dataFluid->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), Enthalpy)) && (Util::SameString(Alphas(3), GasFluid))) { for (int TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) { @@ -1014,7 +1014,7 @@ namespace FluidProperties { if (Util::SameString(Alphas(4), FluidTemps(TempLoop).Name)) { if (!Util::SameString(FluidTemps(TempLoop).Name, TempsName)) { ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); ShowContinueError(state, "Temperatures for enthalpy fluid and gas/fluid points are not the same"); ShowContinueError(state, format("Name={} => {} /= {}", Alphas(4), FluidTemps(TempLoop).Name, TempsName)); ErrorsFound = true; @@ -1022,12 +1022,12 @@ namespace FluidProperties { } // At this point, we have found the correct input line and found a match // for the temperature array. It's time to load up the local derived type. - state.dataFluidProps->RefrigData(Loop).HfgValues.allocate(state.dataFluidProps->RefrigData(Loop).NumHPoints); + state.dataFluid->RefrigData(Loop).HfgValues.allocate(state.dataFluid->RefrigData(Loop).NumHPoints); // Make sure the number of points in the two arrays (temps and values) are the same - if (NumNumbers != state.dataFluidProps->RefrigData(Loop).NumHPoints) { + if (NumNumbers != state.dataFluid->RefrigData(Loop).NumHPoints) { ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); ShowContinueError(state, format("Temperature Name={}, Temperature array and saturated gas/fluid enthalpy array must have " "the same number of points", @@ -1035,14 +1035,14 @@ namespace FluidProperties { ShowContinueError(state, format("Temperature # points={} whereas {} # points={}", NumNumbers, - state.dataFluidProps->RefrigData(Loop).Name, - state.dataFluidProps->RefrigData(Loop).NumHPoints)); + state.dataFluid->RefrigData(Loop).Name, + state.dataFluid->RefrigData(Loop).NumHPoints)); ErrorsFound = true; break; // the TempLoop DO Loop } // Same number of points so assign the values - state.dataFluidProps->RefrigData(Loop).HfgValues = Numbers({1, NumNumbers}); + state.dataFluid->RefrigData(Loop).HfgValues = Numbers({1, NumNumbers}); break; // the TempLoop DO loop } @@ -1050,7 +1050,7 @@ namespace FluidProperties { // If it made it all the way to the last temperature array and didn't find a match, then no match was found if (TempLoop == NumOfFluidTempArrays) { ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); ShowContinueError(state, "Found saturated gas/fluid enthalpy input but no matching temperature array"); ShowContinueError(state, format("Entered Temperature Name={}", TempsName)); ErrorsFound = true; @@ -1063,7 +1063,7 @@ namespace FluidProperties { // If it made it all the way to the last input occurrence and didn't find a match, then no sat f/g enthalpy data found if (InData == NumOfSatFluidPropArrays) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); ShowContinueError( state, format(R"(No Saturated Gas/Fluid Enthalpy found. Need properties to be entered with {}="Enthalpy" and {}="FluidGas".)", @@ -1092,7 +1092,7 @@ namespace FluidProperties { cAlphaFieldNames, cNumericFieldNames); - if ((Util::SameString(Alphas(1), state.dataFluidProps->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), SpecificHeat)) && + if ((Util::SameString(Alphas(1), state.dataFluid->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), SpecificHeat)) && (Util::SameString(Alphas(3), Fluid))) { for (int TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) { @@ -1101,14 +1101,14 @@ namespace FluidProperties { TempsName = FluidTemps(TempLoop).Name; // At this point, we have found the correct input line and found a match // for the temperature array. It's time to load up the local derived type. - state.dataFluidProps->RefrigData(Loop).NumCpPoints = FluidTemps(TempLoop).NumOfTemps; - state.dataFluidProps->RefrigData(Loop).CpTemps.allocate(state.dataFluidProps->RefrigData(Loop).NumCpPoints); - state.dataFluidProps->RefrigData(Loop).CpfValues.allocate(state.dataFluidProps->RefrigData(Loop).NumCpPoints); + state.dataFluid->RefrigData(Loop).NumCpPoints = FluidTemps(TempLoop).NumOfTemps; + state.dataFluid->RefrigData(Loop).CpTemps.allocate(state.dataFluid->RefrigData(Loop).NumCpPoints); + state.dataFluid->RefrigData(Loop).CpfValues.allocate(state.dataFluid->RefrigData(Loop).NumCpPoints); // Make sure the number of points in the two arrays (temps and values) are the same - if (NumNumbers != state.dataFluidProps->RefrigData(Loop).NumCpPoints) { + if (NumNumbers != state.dataFluid->RefrigData(Loop).NumCpPoints) { ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); ShowSevereError( state, format("Temperature Name={}, Temperature array and saturated fluid Cp array must have the same number of points", @@ -1116,15 +1116,15 @@ namespace FluidProperties { ShowContinueError(state, format("Temperature # points={} whereas {} # Cp points={}", NumNumbers, - state.dataFluidProps->RefrigData(Loop).Name, - state.dataFluidProps->RefrigData(Loop).NumCpPoints)); + state.dataFluid->RefrigData(Loop).Name, + state.dataFluid->RefrigData(Loop).NumCpPoints)); ErrorsFound = true; break; // the TempLoop DO Loop } // Same number of points so assign the values - state.dataFluidProps->RefrigData(Loop).CpTemps = FluidTemps(TempLoop).Temps; - state.dataFluidProps->RefrigData(Loop).CpfValues = Numbers({1, NumNumbers}); + state.dataFluid->RefrigData(Loop).CpTemps = FluidTemps(TempLoop).Temps; + state.dataFluid->RefrigData(Loop).CpfValues = Numbers({1, NumNumbers}); break; // the TempLoop DO loop } @@ -1132,7 +1132,7 @@ namespace FluidProperties { // If it made it all the way to the last temperature array and didn't find a match, then no match was found if (TempLoop == NumOfFluidTempArrays) { ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); ShowContinueError(state, "Found saturated fluid specific heat (Cp) input but no matching temperature array"); ShowContinueError(state, format("Entered Temperature Name={}", TempsName)); ErrorsFound = true; @@ -1145,7 +1145,7 @@ namespace FluidProperties { // If it made it all the way to the last input occurrence and didn't find a match, then no sat fluid Cp data found if (InData == NumOfSatFluidPropArrays) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); ShowContinueError( state, format(R"(No Saturated Fluid Specific Heat found. Need properties to be entered with {}="SpecificHeat" and {}="Fluid".)", @@ -1173,7 +1173,7 @@ namespace FluidProperties { cAlphaFieldNames, cNumericFieldNames); - if ((Util::SameString(Alphas(1), state.dataFluidProps->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), SpecificHeat)) && + if ((Util::SameString(Alphas(1), state.dataFluid->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), SpecificHeat)) && (Util::SameString(Alphas(3), GasFluid))) { for (int TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) { @@ -1181,7 +1181,7 @@ namespace FluidProperties { if (Util::SameString(Alphas(4), FluidTemps(TempLoop).Name)) { if (!Util::SameString(FluidTemps(TempLoop).Name, TempsName)) { ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); ShowContinueError(state, "Temperatures for specific heat fluid and gas/fluid points are not the same"); ShowContinueError(state, format("Name={} => {} /= {}", Alphas(4), FluidTemps(TempLoop).Name, TempsName)); ErrorsFound = true; @@ -1189,12 +1189,12 @@ namespace FluidProperties { } // At this point, we have found the correct input line and found a match // for the temperature array. It's time to load up the local derived type. - state.dataFluidProps->RefrigData(Loop).CpfgValues.allocate(state.dataFluidProps->RefrigData(Loop).NumCpPoints); + state.dataFluid->RefrigData(Loop).CpfgValues.allocate(state.dataFluid->RefrigData(Loop).NumCpPoints); // Make sure the number of points in the two arrays (temps and values) are the same - if (NumNumbers != state.dataFluidProps->RefrigData(Loop).NumCpPoints) { + if (NumNumbers != state.dataFluid->RefrigData(Loop).NumCpPoints) { ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); ShowContinueError( state, format( @@ -1203,14 +1203,14 @@ namespace FluidProperties { ShowContinueError(state, format("Temperature # points={} whereas {} # Cp points={}", NumNumbers, - state.dataFluidProps->RefrigData(Loop).Name, - state.dataFluidProps->RefrigData(Loop).NumCpPoints)); + state.dataFluid->RefrigData(Loop).Name, + state.dataFluid->RefrigData(Loop).NumCpPoints)); ErrorsFound = true; break; // the TempLoop DO Loop } // Same number of points so assign the values - state.dataFluidProps->RefrigData(Loop).CpfgValues = Numbers({1, NumNumbers}); + state.dataFluid->RefrigData(Loop).CpfgValues = Numbers({1, NumNumbers}); break; // the TempLoop DO loop } @@ -1218,7 +1218,7 @@ namespace FluidProperties { // If it made it all the way to the last temperature array and didn't find a match, then no match was found if (TempLoop == NumOfFluidTempArrays) { ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); ShowContinueError(state, "Found saturated gas/fluid specific heat (Cp) input but no matching temperature array"); ShowContinueError(state, format("Entered Temperature Name={}", TempsName)); ErrorsFound = true; @@ -1231,7 +1231,7 @@ namespace FluidProperties { // If it made it all the way to the last input occurrence and didn't find a match, then no sat f/g Cp data found if (InData == NumOfSatFluidPropArrays) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); ShowContinueError( state, format( @@ -1261,7 +1261,7 @@ namespace FluidProperties { cAlphaFieldNames, cNumericFieldNames); - if ((Util::SameString(Alphas(1), state.dataFluidProps->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), Density)) && + if ((Util::SameString(Alphas(1), state.dataFluid->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), Density)) && (Util::SameString(Alphas(3), Fluid))) { for (int TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) { @@ -1270,14 +1270,14 @@ namespace FluidProperties { TempsName = FluidTemps(TempLoop).Name; // At this point, we have found the correct input line and found a match // for the temperature array. It's time to load up the local derived type. - state.dataFluidProps->RefrigData(Loop).NumRhoPoints = FluidTemps(TempLoop).NumOfTemps; - state.dataFluidProps->RefrigData(Loop).RhoTemps.allocate(state.dataFluidProps->RefrigData(Loop).NumRhoPoints); - state.dataFluidProps->RefrigData(Loop).RhofValues.allocate(state.dataFluidProps->RefrigData(Loop).NumRhoPoints); + state.dataFluid->RefrigData(Loop).NumRhoPoints = FluidTemps(TempLoop).NumOfTemps; + state.dataFluid->RefrigData(Loop).RhoTemps.allocate(state.dataFluid->RefrigData(Loop).NumRhoPoints); + state.dataFluid->RefrigData(Loop).RhofValues.allocate(state.dataFluid->RefrigData(Loop).NumRhoPoints); // Make sure the number of points in the two arrays (temps and values) are the same - if (NumNumbers != state.dataFluidProps->RefrigData(Loop).NumRhoPoints) { + if (NumNumbers != state.dataFluid->RefrigData(Loop).NumRhoPoints) { ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); ShowContinueError(state, format("Temperature Name={}, Temperature array and saturated fluid density array must have the " "same number of points", @@ -1285,15 +1285,15 @@ namespace FluidProperties { ShowContinueError(state, format("Temperature # points={} whereas {} # Density points={}", NumNumbers, - state.dataFluidProps->RefrigData(Loop).Name, - state.dataFluidProps->RefrigData(Loop).NumRhoPoints)); + state.dataFluid->RefrigData(Loop).Name, + state.dataFluid->RefrigData(Loop).NumRhoPoints)); ErrorsFound = true; break; // the TempLoop DO Loop } // Same number of points so assign the values - state.dataFluidProps->RefrigData(Loop).RhoTemps = FluidTemps(TempLoop).Temps; - state.dataFluidProps->RefrigData(Loop).RhofValues = Numbers({1, NumNumbers}); + state.dataFluid->RefrigData(Loop).RhoTemps = FluidTemps(TempLoop).Temps; + state.dataFluid->RefrigData(Loop).RhofValues = Numbers({1, NumNumbers}); break; // the TempLoop DO loop } @@ -1301,7 +1301,7 @@ namespace FluidProperties { // If it made it all the way to the last temperature array and didn't find a match, then no match was found if (TempLoop == NumOfFluidTempArrays) { ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); ShowContinueError(state, "Found saturated fluid density input but no matching temperature array"); ShowContinueError(state, format("Entered Temperature Name={}", TempsName)); ErrorsFound = true; @@ -1314,7 +1314,7 @@ namespace FluidProperties { // If it made it all the way to the last input occurrence and didn't find a match, then no sat fluid density data found if (InData == NumOfSatFluidPropArrays) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); ShowContinueError(state, format(R"(No Saturated Fluid Density found. Need properties to be entered with {}="Density" and {}="Fluid".)", cAlphaFieldNames(2), @@ -1341,7 +1341,7 @@ namespace FluidProperties { cAlphaFieldNames, cNumericFieldNames); - if ((Util::SameString(Alphas(1), state.dataFluidProps->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), Density)) && + if ((Util::SameString(Alphas(1), state.dataFluid->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), Density)) && (Util::SameString(Alphas(3), GasFluid))) { for (int TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) { @@ -1349,7 +1349,7 @@ namespace FluidProperties { if (Util::SameString(Alphas(4), FluidTemps(TempLoop).Name)) { if (!Util::SameString(FluidTemps(TempLoop).Name, TempsName)) { ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); ShowContinueError(state, "Temperatures for density fluid and gas/fluid points are not the same"); ShowContinueError(state, format("Name={} => {} /= {}", Alphas(4), FluidTemps(TempLoop).Name, TempsName)); ErrorsFound = true; @@ -1357,12 +1357,12 @@ namespace FluidProperties { } // At this point, we have found the correct input line and found a match // for the temperature array. It's time to load up the local derived type. - state.dataFluidProps->RefrigData(Loop).RhofgValues.allocate(state.dataFluidProps->RefrigData(Loop).NumRhoPoints); + state.dataFluid->RefrigData(Loop).RhofgValues.allocate(state.dataFluid->RefrigData(Loop).NumRhoPoints); // Make sure the number of points in the two arrays (temps and values) are the same - if (NumNumbers != state.dataFluidProps->RefrigData(Loop).NumRhoPoints) { + if (NumNumbers != state.dataFluid->RefrigData(Loop).NumRhoPoints) { ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); ShowContinueError(state, format("Temperature Name={}, Temperature array and saturated gas/fluid density array must have the " "same number of points", @@ -1370,14 +1370,14 @@ namespace FluidProperties { ShowContinueError(state, format("Temperature # points={} whereas {} # density points={}", NumNumbers, - state.dataFluidProps->RefrigData(Loop).Name, - state.dataFluidProps->RefrigData(Loop).NumRhoPoints)); + state.dataFluid->RefrigData(Loop).Name, + state.dataFluid->RefrigData(Loop).NumRhoPoints)); ErrorsFound = true; break; // the TempLoop DO Loop } // Same number of points so assign the values - state.dataFluidProps->RefrigData(Loop).RhofgValues = Numbers({1, NumNumbers}); + state.dataFluid->RefrigData(Loop).RhofgValues = Numbers({1, NumNumbers}); break; // the TempLoop DO loop } @@ -1385,7 +1385,7 @@ namespace FluidProperties { // If it made it all the way to the last temperature array and didn't find a match, then no match was found if (TempLoop == NumOfFluidTempArrays) { ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); ShowContinueError(state, "Found saturated gas/fluid density input but no matching temperature array"); ShowContinueError(state, format("Entered Temperature Name={}", TempsName)); ErrorsFound = true; @@ -1398,7 +1398,7 @@ namespace FluidProperties { // If it made it all the way to the last input occurrence and didn't find a match, then no sat f/g density data found if (InData == NumOfSatFluidPropArrays) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); ShowSevereError( state, format(R"(No Saturated Gas/Fluid Density found. Need properties to be entered with {}="Density" and {}="FluidGas".)", @@ -1454,7 +1454,7 @@ namespace FluidProperties { !Util::SameString(Alphas(2), Density)) { if (iTemp == 0) { ShowWarningError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); ShowContinueError( state, format(R"({}="{}", but {}="{}" is not valid.)", cAlphaFieldNames(3), Fluid, cAlphaFieldNames(2), Alphas(2))); ShowContinueError(state, format(R"(Valid choices are "{}", "{}", "{}".)", Enthalpy, SpecificHeat, Density)); @@ -1469,7 +1469,7 @@ namespace FluidProperties { !Util::SameString(Alphas(2), SpecificHeat) && !Util::SameString(Alphas(2), Density)) { if (iTemp == 0) { ShowWarningError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); ShowContinueError( state, format(R"({}="{}", but {}="{}" is not valid.)", cAlphaFieldNames(3), Fluid, cAlphaFieldNames(2), Alphas(2))); ShowContinueError(state, @@ -1481,7 +1481,7 @@ namespace FluidProperties { } else { if (iTemp == 0) { ShowWarningError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); ShowContinueError(state, format("{}=\"{}\" is not valid.", cAlphaFieldNames(3), Alphas(3))); ShowContinueError(state, format(R"(Valid choices are "{}", "{}".)", Fluid, GasFluid)); ShowContinueError(state, @@ -1518,7 +1518,7 @@ namespace FluidProperties { cAlphaFieldNames, cNumericFieldNames); - if ((Util::SameString(Alphas(1), state.dataFluidProps->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), Enthalpy))) { + if ((Util::SameString(Alphas(1), state.dataFluid->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), Enthalpy))) { ++NumOfPressPts; if (FirstSHMatch) { TempsName = Alphas(3); @@ -1526,7 +1526,7 @@ namespace FluidProperties { } else { if (!Util::SameString(TempsName, Alphas(3))) { ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); ShowContinueError(state, "All superheated data for the same property must use the same temperature list"); ShowContinueError(state, format("Expected name={}, Entered name={}", TempsName, Alphas(3))); ErrorsFound = true; @@ -1535,7 +1535,7 @@ namespace FluidProperties { } } if (NumOfPressPts == 0) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); ShowContinueError(state, "No pressure data found for superheated enthalpy"); ErrorsFound = true; } @@ -1544,13 +1544,13 @@ namespace FluidProperties { // First, allocate the temperature array and transfer the data from the FluidTemp array for (int TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) { if (Util::SameString(TempsName, FluidTemps(TempLoop).Name)) { - state.dataFluidProps->RefrigData(Loop).NumSuperTempPts = FluidTemps(TempLoop).NumOfTemps; - state.dataFluidProps->RefrigData(Loop).SHTemps.allocate(state.dataFluidProps->RefrigData(Loop).NumSuperTempPts); - state.dataFluidProps->RefrigData(Loop).SHTemps = FluidTemps(TempLoop).Temps; + state.dataFluid->RefrigData(Loop).NumSuperTempPts = FluidTemps(TempLoop).NumOfTemps; + state.dataFluid->RefrigData(Loop).SHTemps.allocate(state.dataFluid->RefrigData(Loop).NumSuperTempPts); + state.dataFluid->RefrigData(Loop).SHTemps = FluidTemps(TempLoop).Temps; break; // the TempLoop DO loop } if (TempLoop == NumOfFluidTempArrays) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); ShowContinueError(state, "No match for temperature array name found with superheated enthalpy data"); ShowContinueError(state, format("Entered Temperature Name={}", TempsName)); ErrorsFound = true; @@ -1558,10 +1558,10 @@ namespace FluidProperties { } // Next, allocate the pressure related arrays - state.dataFluidProps->RefrigData(Loop).NumSuperPressPts = NumOfPressPts; - state.dataFluidProps->RefrigData(Loop).SHPress.allocate(state.dataFluidProps->RefrigData(Loop).NumSuperPressPts); - state.dataFluidProps->RefrigData(Loop).HshValues.allocate(state.dataFluidProps->RefrigData(Loop).NumSuperPressPts, - state.dataFluidProps->RefrigData(Loop).NumSuperTempPts); + state.dataFluid->RefrigData(Loop).NumSuperPressPts = NumOfPressPts; + state.dataFluid->RefrigData(Loop).SHPress.allocate(state.dataFluid->RefrigData(Loop).NumSuperPressPts); + state.dataFluid->RefrigData(Loop).HshValues.allocate(state.dataFluid->RefrigData(Loop).NumSuperPressPts, + state.dataFluid->RefrigData(Loop).NumSuperTempPts); // Finally, get the pressure and enthalpy values from the user input CurrentModuleObject = "FluidProperties:Superheated"; @@ -1581,10 +1581,10 @@ namespace FluidProperties { cAlphaFieldNames, cNumericFieldNames); - if ((Util::SameString(Alphas(1), state.dataFluidProps->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), Enthalpy))) { + if ((Util::SameString(Alphas(1), state.dataFluid->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), Enthalpy))) { ++NumOfPressPts; if (Numbers(1) <= 0.0) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); ShowContinueError(state, format("Negative pressures not allowed in fluid property input data, Value =[{:.3R}].", Numbers(1))); ErrorsFound = true; } @@ -1622,27 +1622,27 @@ namespace FluidProperties { lAlphaFieldBlanks, cAlphaFieldNames, cNumericFieldNames); - state.dataFluidProps->RefrigData(Loop).SHPress(InData) = Numbers(1); + state.dataFluid->RefrigData(Loop).SHPress(InData) = Numbers(1); // a little error trapping if (InData > 1) { - if (state.dataFluidProps->RefrigData(Loop).SHPress(InData) <= state.dataFluidProps->RefrigData(Loop).SHPress(InData - 1)) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + if (state.dataFluid->RefrigData(Loop).SHPress(InData) <= state.dataFluid->RefrigData(Loop).SHPress(InData - 1)) { + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); ShowContinueError(state, "Pressures must be entered in ascending order for fluid property data"); ShowContinueError(state, format("First Occurrence at Pressure({}) {{{:.3R}}} >= Pressure({}) {{{:.3R}}}", InData - 1, - state.dataFluidProps->RefrigData(Loop).SHPress(InData - 1), + state.dataFluid->RefrigData(Loop).SHPress(InData - 1), InData, - state.dataFluidProps->RefrigData(Loop).SHPress(InData))); + state.dataFluid->RefrigData(Loop).SHPress(InData))); ErrorsFound = true; break; } } - if ((NumNumbers - 1) == state.dataFluidProps->RefrigData(Loop).NumSuperTempPts) { - state.dataFluidProps->RefrigData(Loop).HshValues(InData, {1, state.dataFluidProps->RefrigData(Loop).NumSuperTempPts}) = + if ((NumNumbers - 1) == state.dataFluid->RefrigData(Loop).NumSuperTempPts) { + state.dataFluid->RefrigData(Loop).HshValues(InData, {1, state.dataFluid->RefrigData(Loop).NumSuperTempPts}) = Numbers({2, NumNumbers}); } else { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); ShowContinueError(state, "Number of superheated enthalpy data points not equal to number of temperature points"); ErrorsFound = true; } @@ -1654,8 +1654,8 @@ namespace FluidProperties { // First find the number of pressure value syntax lines have been entered and // make sure that all of the pressure input is linked to the same temperature list // Then allocate the arrays and read the data into the proper place - state.dataFluidProps->RefrigData(Loop).RhoshValues.allocate(state.dataFluidProps->RefrigData(Loop).NumSuperPressPts, - state.dataFluidProps->RefrigData(Loop).NumSuperTempPts); + state.dataFluid->RefrigData(Loop).RhoshValues.allocate(state.dataFluid->RefrigData(Loop).NumSuperPressPts, + state.dataFluid->RefrigData(Loop).NumSuperTempPts); CurrentModuleObject = "FluidProperties:Superheated"; NumOfPressPts = 0; PressurePtr.allocate(NumOfSHFluidPropArrays); @@ -1672,10 +1672,10 @@ namespace FluidProperties { lAlphaFieldBlanks, cAlphaFieldNames, cNumericFieldNames); - if ((Util::SameString(Alphas(1), state.dataFluidProps->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), Density))) { + if ((Util::SameString(Alphas(1), state.dataFluid->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), Density))) { ++NumOfPressPts; if (Numbers(1) <= 0.0) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); ShowContinueError(state, format("Negative pressures not allowed in fluid property input data, Value =[{:.3R}].", Numbers(1))); ErrorsFound = true; } @@ -1713,21 +1713,21 @@ namespace FluidProperties { lAlphaFieldBlanks, cAlphaFieldNames, cNumericFieldNames); - if (std::abs(Numbers(1) - state.dataFluidProps->RefrigData(Loop).SHPress(InData)) > PressToler) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + if (std::abs(Numbers(1) - state.dataFluid->RefrigData(Loop).SHPress(InData)) > PressToler) { + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); ShowContinueError(state, "All superheated data for the same refrigerant must use the same pressure data"); ErrorsFound = true; } if (!Util::SameString(TempsName, Alphas(3))) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); ShowContinueError(state, "All superheated data for the same property must use the same temperature list"); ErrorsFound = true; } - if ((NumNumbers - 1) == state.dataFluidProps->RefrigData(Loop).NumSuperTempPts) { - state.dataFluidProps->RefrigData(Loop).RhoshValues(InData, {1, state.dataFluidProps->RefrigData(Loop).NumSuperTempPts}) = + if ((NumNumbers - 1) == state.dataFluid->RefrigData(Loop).NumSuperTempPts) { + state.dataFluid->RefrigData(Loop).RhoshValues(InData, {1, state.dataFluid->RefrigData(Loop).NumSuperTempPts}) = Numbers({2, NumNumbers}); } else { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); ShowContinueError(state, "Number of superheated density data points not equal to number of temperature points"); ErrorsFound = true; } @@ -1755,7 +1755,7 @@ namespace FluidProperties { if (!Util::SameString(Alphas(2), Enthalpy) && !Util::SameString(Alphas(2), Density)) { if (iTemp == 0) { ShowWarningError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); ShowContinueError(state, format("{}=\"{}\" is not valid.", cAlphaFieldNames(2), Alphas(2))); ShowContinueError(state, format(R"(Valid choices are "{}", "{}".)", Enthalpy, Density)); ShowContinueError(state, format("Pressure value of this item=[{:.2R}].", Numbers(1))); @@ -1770,12 +1770,12 @@ namespace FluidProperties { } if (NumOfPressPts == 0) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); ShowSevereError(state, "No pressure data found for superheated density"); ErrorsFound = true; } - if (NumOfPressPts != state.dataFluidProps->RefrigData(Loop).NumSuperPressPts) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + if (NumOfPressPts != state.dataFluid->RefrigData(Loop).NumSuperPressPts) { + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); ShowSevereError(state, "Number of pressure points for superheated data different for enthalpy and density"); ErrorsFound = true; } @@ -1787,7 +1787,7 @@ namespace FluidProperties { // Note that every valid fluid must have ALL of the necessary data or a fatal error will // be produced. CurrentModuleObject = "FluidProperties:Concentration"; - for (int Loop = 1; Loop <= state.dataFluidProps->NumOfGlycols; ++Loop) { + for (int Loop = 1; Loop <= state.dataFluid->NumOfGlycols; ++Loop) { // Get: ***** SPECIFIC HEAT of GLYCOLS ***** // First find the number of concentration value syntax lines have been entered and @@ -1795,7 +1795,7 @@ namespace FluidProperties { TempsName = ""; FirstSHMatch = true; int NumOfConcPts = 0; - state.dataFluidProps->GlyRawData(Loop).CpDataPresent = false; + state.dataFluid->GlyRawData(Loop).CpDataPresent = false; for (InData = 1; InData <= NumOfGlyFluidPropArrays; ++InData) { // check temperatures given for specific heat are consistant state.dataInputProcessing->inputProcessor->getObjectItem(state, CurrentModuleObject, @@ -1809,7 +1809,7 @@ namespace FluidProperties { lAlphaFieldBlanks, cAlphaFieldNames, cNumericFieldNames); - if ((Util::SameString(Alphas(1), state.dataFluidProps->GlyRawData(Loop).Name)) && (Util::SameString(Alphas(2), SpecificHeat))) { + if ((Util::SameString(Alphas(1), state.dataFluid->GlyRawData(Loop).Name)) && (Util::SameString(Alphas(2), SpecificHeat))) { ++NumOfConcPts; if (FirstSHMatch) { TempsName = Alphas(3); @@ -1817,7 +1817,7 @@ namespace FluidProperties { } else { if (!Util::SameString(TempsName, Alphas(3))) { ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->GlyRawData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->GlyRawData(Loop).Name)); ShowContinueError(state, "All glycol specific heat data for the same glycol must use the same temperature list"); ShowContinueError(state, format("Expected name={}, Entered name={}", TempsName, Alphas(3))); ErrorsFound = true; @@ -1828,26 +1828,26 @@ namespace FluidProperties { if (NumOfConcPts > 0) { // Now allocate the arrays and read the data into the proper place // First, allocate the temperature array and transfer the data from the FluidTemp array - state.dataFluidProps->GlyRawData(Loop).CpDataPresent = true; + state.dataFluid->GlyRawData(Loop).CpDataPresent = true; for (int TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) { if (Util::SameString(TempsName, FluidTemps(TempLoop).Name)) { - state.dataFluidProps->GlyRawData(Loop).NumCpTempPts = FluidTemps(TempLoop).NumOfTemps; - state.dataFluidProps->GlyRawData(Loop).CpTemps.allocate(state.dataFluidProps->GlyRawData(Loop).NumCpTempPts); - state.dataFluidProps->GlyRawData(Loop).CpTemps = FluidTemps(TempLoop).Temps; + state.dataFluid->GlyRawData(Loop).NumCpTempPts = FluidTemps(TempLoop).NumOfTemps; + state.dataFluid->GlyRawData(Loop).CpTemps.allocate(state.dataFluid->GlyRawData(Loop).NumCpTempPts); + state.dataFluid->GlyRawData(Loop).CpTemps = FluidTemps(TempLoop).Temps; break; // the TempLoop DO loop } if (TempLoop == NumOfFluidTempArrays) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->GlyRawData(Loop).Name)); + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->GlyRawData(Loop).Name)); ShowContinueError(state, "No match for temperature array name found with glycol data"); ErrorsFound = true; } } // Next, allocate the specific heat related arrays - state.dataFluidProps->GlyRawData(Loop).NumCpConcPts = NumOfConcPts; - state.dataFluidProps->GlyRawData(Loop).CpConcs.allocate(state.dataFluidProps->GlyRawData(Loop).NumCpConcPts); - state.dataFluidProps->GlyRawData(Loop).CpValues.allocate(state.dataFluidProps->GlyRawData(Loop).NumCpConcPts, - state.dataFluidProps->GlyRawData(Loop).NumCpTempPts); + state.dataFluid->GlyRawData(Loop).NumCpConcPts = NumOfConcPts; + state.dataFluid->GlyRawData(Loop).CpConcs.allocate(state.dataFluid->GlyRawData(Loop).NumCpConcPts); + state.dataFluid->GlyRawData(Loop).CpValues.allocate(state.dataFluid->GlyRawData(Loop).NumCpConcPts, + state.dataFluid->GlyRawData(Loop).NumCpTempPts); // Finally, get the specific heat and concentration values from the user input CurrentModuleObject = "FluidProperties:Concentration"; @@ -1865,32 +1865,32 @@ namespace FluidProperties { lAlphaFieldBlanks, cAlphaFieldNames, cNumericFieldNames); - if ((Util::SameString(Alphas(1), state.dataFluidProps->GlyRawData(Loop).Name)) && (Util::SameString(Alphas(2), SpecificHeat))) { + if ((Util::SameString(Alphas(1), state.dataFluid->GlyRawData(Loop).Name)) && (Util::SameString(Alphas(2), SpecificHeat))) { ++NumOfConcPts; - state.dataFluidProps->GlyRawData(Loop).CpConcs(NumOfConcPts) = Numbers(1); + state.dataFluid->GlyRawData(Loop).CpConcs(NumOfConcPts) = Numbers(1); // a little error trapping if (NumOfConcPts == 1) { - if (state.dataFluidProps->GlyRawData(Loop).CpConcs(NumOfConcPts) < 0.0) { + if (state.dataFluid->GlyRawData(Loop).CpConcs(NumOfConcPts) < 0.0) { ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->GlyRawData(Loop).Name)); + state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->GlyRawData(Loop).Name)); ShowContinueError(state, "Negative concentrations not allowed in fluid property input data"); ErrorsFound = true; } } else { - if (state.dataFluidProps->GlyRawData(Loop).CpConcs(NumOfConcPts) <= - state.dataFluidProps->GlyRawData(Loop).CpConcs(NumOfConcPts - 1)) { + if (state.dataFluid->GlyRawData(Loop).CpConcs(NumOfConcPts) <= + state.dataFluid->GlyRawData(Loop).CpConcs(NumOfConcPts - 1)) { ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->GlyRawData(Loop).Name)); + state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->GlyRawData(Loop).Name)); ShowContinueError(state, "Concentrations must be entered in ascending order for fluid property data"); ErrorsFound = true; } } - if ((NumNumbers - 1) == state.dataFluidProps->GlyRawData(Loop).NumCpTempPts) { - state.dataFluidProps->GlyRawData(Loop).CpValues(NumOfConcPts, {1, state.dataFluidProps->GlyRawData(Loop).NumCpTempPts}) = + if ((NumNumbers - 1) == state.dataFluid->GlyRawData(Loop).NumCpTempPts) { + state.dataFluid->GlyRawData(Loop).CpValues(NumOfConcPts, {1, state.dataFluid->GlyRawData(Loop).NumCpTempPts}) = Numbers({2, NumNumbers}); } else { ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->GlyRawData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->GlyRawData(Loop).Name)); ShowContinueError(state, "Number of specific heat data points not equal to number of temperature points"); ErrorsFound = true; } @@ -1903,7 +1903,7 @@ namespace FluidProperties { TempsName = ""; FirstSHMatch = true; NumOfConcPts = 0; - state.dataFluidProps->GlyRawData(Loop).RhoDataPresent = false; + state.dataFluid->GlyRawData(Loop).RhoDataPresent = false; CurrentModuleObject = "FluidProperties:Concentration"; for (InData = 1; InData <= NumOfGlyFluidPropArrays; ++InData) { // check temperatures given for density are consistant state.dataInputProcessing->inputProcessor->getObjectItem(state, @@ -1918,7 +1918,7 @@ namespace FluidProperties { lAlphaFieldBlanks, cAlphaFieldNames, cNumericFieldNames); - if ((Util::SameString(Alphas(1), state.dataFluidProps->GlyRawData(Loop).Name)) && (Util::SameString(Alphas(2), Density))) { + if ((Util::SameString(Alphas(1), state.dataFluid->GlyRawData(Loop).Name)) && (Util::SameString(Alphas(2), Density))) { ++NumOfConcPts; if (FirstSHMatch) { TempsName = Alphas(3); @@ -1926,7 +1926,7 @@ namespace FluidProperties { } else { if (!Util::SameString(TempsName, Alphas(3))) { ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->GlyRawData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->GlyRawData(Loop).Name)); ShowContinueError(state, "All glycol density data for the same glycol must use the same temperature list"); ShowContinueError(state, format("Expected name={}, Entered name={}", TempsName, Alphas(3))); ErrorsFound = true; @@ -1937,26 +1937,26 @@ namespace FluidProperties { if (NumOfConcPts > 0) { // Now allocate the arrays and read the data into the proper place // First, allocate the temperature array and transfer the data from the FluidTemp array - state.dataFluidProps->GlyRawData(Loop).RhoDataPresent = true; + state.dataFluid->GlyRawData(Loop).RhoDataPresent = true; for (int TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) { if (Util::SameString(TempsName, FluidTemps(TempLoop).Name)) { - state.dataFluidProps->GlyRawData(Loop).NumRhoTempPts = FluidTemps(TempLoop).NumOfTemps; - state.dataFluidProps->GlyRawData(Loop).RhoTemps.allocate(state.dataFluidProps->GlyRawData(Loop).NumRhoTempPts); - state.dataFluidProps->GlyRawData(Loop).RhoTemps = FluidTemps(TempLoop).Temps; + state.dataFluid->GlyRawData(Loop).NumRhoTempPts = FluidTemps(TempLoop).NumOfTemps; + state.dataFluid->GlyRawData(Loop).RhoTemps.allocate(state.dataFluid->GlyRawData(Loop).NumRhoTempPts); + state.dataFluid->GlyRawData(Loop).RhoTemps = FluidTemps(TempLoop).Temps; break; // the TempLoop DO loop } if (TempLoop == NumOfFluidTempArrays) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->GlyRawData(Loop).Name)); + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->GlyRawData(Loop).Name)); ShowContinueError(state, "No match for temperature array name found with glycol data"); ErrorsFound = true; } } // Next, allocate the density related arrays - state.dataFluidProps->GlyRawData(Loop).NumRhoConcPts = NumOfConcPts; - state.dataFluidProps->GlyRawData(Loop).RhoConcs.allocate(state.dataFluidProps->GlyRawData(Loop).NumRhoConcPts); - state.dataFluidProps->GlyRawData(Loop).RhoValues.allocate(state.dataFluidProps->GlyRawData(Loop).NumRhoConcPts, - state.dataFluidProps->GlyRawData(Loop).NumRhoTempPts); + state.dataFluid->GlyRawData(Loop).NumRhoConcPts = NumOfConcPts; + state.dataFluid->GlyRawData(Loop).RhoConcs.allocate(state.dataFluid->GlyRawData(Loop).NumRhoConcPts); + state.dataFluid->GlyRawData(Loop).RhoValues.allocate(state.dataFluid->GlyRawData(Loop).NumRhoConcPts, + state.dataFluid->GlyRawData(Loop).NumRhoTempPts); // Finally, get the density and concentration values from the user input NumOfConcPts = 0; @@ -1974,32 +1974,32 @@ namespace FluidProperties { lAlphaFieldBlanks, cAlphaFieldNames, cNumericFieldNames); - if ((Util::SameString(Alphas(1), state.dataFluidProps->GlyRawData(Loop).Name)) && (Util::SameString(Alphas(2), Density))) { + if ((Util::SameString(Alphas(1), state.dataFluid->GlyRawData(Loop).Name)) && (Util::SameString(Alphas(2), Density))) { ++NumOfConcPts; - state.dataFluidProps->GlyRawData(Loop).RhoConcs(NumOfConcPts) = Numbers(1); + state.dataFluid->GlyRawData(Loop).RhoConcs(NumOfConcPts) = Numbers(1); // a little error trapping if (NumOfConcPts == 1) { - if (state.dataFluidProps->GlyRawData(Loop).RhoConcs(NumOfConcPts) < 0.0) { + if (state.dataFluid->GlyRawData(Loop).RhoConcs(NumOfConcPts) < 0.0) { ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->GlyRawData(Loop).Name)); + state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->GlyRawData(Loop).Name)); ShowContinueError(state, "Negative concentrations not allowed in fluid property input data"); ErrorsFound = true; } } else { - if (state.dataFluidProps->GlyRawData(Loop).RhoConcs(NumOfConcPts) <= - state.dataFluidProps->GlyRawData(Loop).RhoConcs(NumOfConcPts - 1)) { + if (state.dataFluid->GlyRawData(Loop).RhoConcs(NumOfConcPts) <= + state.dataFluid->GlyRawData(Loop).RhoConcs(NumOfConcPts - 1)) { ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->GlyRawData(Loop).Name)); + state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->GlyRawData(Loop).Name)); ShowContinueError(state, "Concentrations must be entered in ascending order for fluid property data"); ErrorsFound = true; } } - if ((NumNumbers - 1) == state.dataFluidProps->GlyRawData(Loop).NumRhoTempPts) { - state.dataFluidProps->GlyRawData(Loop).RhoValues( - NumOfConcPts, {1, state.dataFluidProps->GlyRawData(Loop).NumRhoTempPts}) = Numbers({2, NumNumbers}); + if ((NumNumbers - 1) == state.dataFluid->GlyRawData(Loop).NumRhoTempPts) { + state.dataFluid->GlyRawData(Loop).RhoValues( + NumOfConcPts, {1, state.dataFluid->GlyRawData(Loop).NumRhoTempPts}) = Numbers({2, NumNumbers}); } else { ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->GlyRawData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->GlyRawData(Loop).Name)); ShowContinueError(state, "Number of density data points not equal to number of temperature points"); ErrorsFound = true; } @@ -2012,7 +2012,7 @@ namespace FluidProperties { TempsName = ""; FirstSHMatch = true; NumOfConcPts = 0; - state.dataFluidProps->GlyRawData(Loop).CondDataPresent = false; + state.dataFluid->GlyRawData(Loop).CondDataPresent = false; CurrentModuleObject = "FluidProperties:Concentration"; for (InData = 1; InData <= NumOfGlyFluidPropArrays; ++InData) { // check temperatures given for conductivity are consistant state.dataInputProcessing->inputProcessor->getObjectItem(state, @@ -2027,7 +2027,7 @@ namespace FluidProperties { lAlphaFieldBlanks, cAlphaFieldNames, cNumericFieldNames); - if ((Util::SameString(Alphas(1), state.dataFluidProps->GlyRawData(Loop).Name)) && (Util::SameString(Alphas(2), Conductivity))) { + if ((Util::SameString(Alphas(1), state.dataFluid->GlyRawData(Loop).Name)) && (Util::SameString(Alphas(2), Conductivity))) { ++NumOfConcPts; if (FirstSHMatch) { TempsName = Alphas(3); @@ -2035,7 +2035,7 @@ namespace FluidProperties { } else { if (!Util::SameString(TempsName, Alphas(3))) { ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->GlyRawData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->GlyRawData(Loop).Name)); ShowContinueError(state, "All glycol conductivity data for the same glycol must use the same temperature list"); ShowContinueError(state, format("Expected name={}, Entered name={}", TempsName, Alphas(3))); ErrorsFound = true; @@ -2046,26 +2046,26 @@ namespace FluidProperties { if (NumOfConcPts > 0) { // Now allocate the arrays and read the data into the proper place // First, allocate the temperature array and transfer the data from the FluidTemp array - state.dataFluidProps->GlyRawData(Loop).CondDataPresent = true; + state.dataFluid->GlyRawData(Loop).CondDataPresent = true; for (int TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) { if (Util::SameString(TempsName, FluidTemps(TempLoop).Name)) { - state.dataFluidProps->GlyRawData(Loop).NumCondTempPts = FluidTemps(TempLoop).NumOfTemps; - state.dataFluidProps->GlyRawData(Loop).CondTemps.allocate(state.dataFluidProps->GlyRawData(Loop).NumCondTempPts); - state.dataFluidProps->GlyRawData(Loop).CondTemps = FluidTemps(TempLoop).Temps; + state.dataFluid->GlyRawData(Loop).NumCondTempPts = FluidTemps(TempLoop).NumOfTemps; + state.dataFluid->GlyRawData(Loop).CondTemps.allocate(state.dataFluid->GlyRawData(Loop).NumCondTempPts); + state.dataFluid->GlyRawData(Loop).CondTemps = FluidTemps(TempLoop).Temps; break; // the TempLoop DO loop } if (TempLoop == NumOfFluidTempArrays) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->GlyRawData(Loop).Name)); + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->GlyRawData(Loop).Name)); ShowContinueError(state, "No match for temperature array name found with glycol data"); ErrorsFound = true; } } // Next, allocate the conductivity related arrays - state.dataFluidProps->GlyRawData(Loop).NumCondConcPts = NumOfConcPts; - state.dataFluidProps->GlyRawData(Loop).CondConcs.allocate(state.dataFluidProps->GlyRawData(Loop).NumCondConcPts); - state.dataFluidProps->GlyRawData(Loop).CondValues.allocate(state.dataFluidProps->GlyRawData(Loop).NumCondConcPts, - state.dataFluidProps->GlyRawData(Loop).NumCondTempPts); + state.dataFluid->GlyRawData(Loop).NumCondConcPts = NumOfConcPts; + state.dataFluid->GlyRawData(Loop).CondConcs.allocate(state.dataFluid->GlyRawData(Loop).NumCondConcPts); + state.dataFluid->GlyRawData(Loop).CondValues.allocate(state.dataFluid->GlyRawData(Loop).NumCondConcPts, + state.dataFluid->GlyRawData(Loop).NumCondTempPts); // Finally, get the conductivity and concentration values from the user input NumOfConcPts = 0; @@ -2083,32 +2083,32 @@ namespace FluidProperties { lAlphaFieldBlanks, cAlphaFieldNames, cNumericFieldNames); - if ((Util::SameString(Alphas(1), state.dataFluidProps->GlyRawData(Loop).Name)) && (Util::SameString(Alphas(2), Conductivity))) { + if ((Util::SameString(Alphas(1), state.dataFluid->GlyRawData(Loop).Name)) && (Util::SameString(Alphas(2), Conductivity))) { ++NumOfConcPts; - state.dataFluidProps->GlyRawData(Loop).CondConcs(NumOfConcPts) = Numbers(1); + state.dataFluid->GlyRawData(Loop).CondConcs(NumOfConcPts) = Numbers(1); // a little error trapping if (NumOfConcPts == 1) { - if (state.dataFluidProps->GlyRawData(Loop).CondConcs(NumOfConcPts) < 0.0) { + if (state.dataFluid->GlyRawData(Loop).CondConcs(NumOfConcPts) < 0.0) { ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->GlyRawData(Loop).Name)); + state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->GlyRawData(Loop).Name)); ShowContinueError(state, "Negative concentrations not allowed in fluid property input data"); ErrorsFound = true; } } else { - if (state.dataFluidProps->GlyRawData(Loop).CondConcs(NumOfConcPts) <= - state.dataFluidProps->GlyRawData(Loop).CondConcs(NumOfConcPts - 1)) { + if (state.dataFluid->GlyRawData(Loop).CondConcs(NumOfConcPts) <= + state.dataFluid->GlyRawData(Loop).CondConcs(NumOfConcPts - 1)) { ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->GlyRawData(Loop).Name)); + state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->GlyRawData(Loop).Name)); ShowContinueError(state, "Concentrations must be entered in ascending order for fluid property data"); ErrorsFound = true; } } - if ((NumNumbers - 1) == state.dataFluidProps->GlyRawData(Loop).NumCondTempPts) { - state.dataFluidProps->GlyRawData(Loop).CondValues( - NumOfConcPts, {1, state.dataFluidProps->GlyRawData(Loop).NumCondTempPts}) = Numbers({2, NumNumbers}); + if ((NumNumbers - 1) == state.dataFluid->GlyRawData(Loop).NumCondTempPts) { + state.dataFluid->GlyRawData(Loop).CondValues( + NumOfConcPts, {1, state.dataFluid->GlyRawData(Loop).NumCondTempPts}) = Numbers({2, NumNumbers}); } else { ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->GlyRawData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->GlyRawData(Loop).Name)); ShowContinueError(state, "Number of conductivity data points not equal to number of temperature points"); ErrorsFound = true; } @@ -2121,7 +2121,7 @@ namespace FluidProperties { TempsName = ""; FirstSHMatch = true; NumOfConcPts = 0; - state.dataFluidProps->GlyRawData(Loop).ViscDataPresent = false; + state.dataFluid->GlyRawData(Loop).ViscDataPresent = false; CurrentModuleObject = "FluidProperties:Concentration"; for (InData = 1; InData <= NumOfGlyFluidPropArrays; ++InData) { // check temperatures given for viscosity are consistant state.dataInputProcessing->inputProcessor->getObjectItem(state, @@ -2136,7 +2136,7 @@ namespace FluidProperties { lAlphaFieldBlanks, cAlphaFieldNames, cNumericFieldNames); - if ((Util::SameString(Alphas(1), state.dataFluidProps->GlyRawData(Loop).Name)) && (Util::SameString(Alphas(2), Viscosity))) { + if ((Util::SameString(Alphas(1), state.dataFluid->GlyRawData(Loop).Name)) && (Util::SameString(Alphas(2), Viscosity))) { ++NumOfConcPts; if (FirstSHMatch) { TempsName = Alphas(3); @@ -2144,7 +2144,7 @@ namespace FluidProperties { } else { if (!Util::SameString(TempsName, Alphas(3))) { ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->GlyRawData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->GlyRawData(Loop).Name)); ShowContinueError(state, "All glycol viscosity data for the same glycol must use the same temperature list"); ShowContinueError(state, format("Expected name={}, Entered name={}", TempsName, Alphas(3))); ErrorsFound = true; @@ -2153,28 +2153,28 @@ namespace FluidProperties { } } if (NumOfConcPts > 0) { - state.dataFluidProps->GlyRawData(Loop).ViscDataPresent = true; + state.dataFluid->GlyRawData(Loop).ViscDataPresent = true; // Now allocate the arrays and read the data into the proper place // First, allocate the temperature array and transfer the data from the FluidTemp array for (int TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) { if (Util::SameString(TempsName, FluidTemps(TempLoop).Name)) { - state.dataFluidProps->GlyRawData(Loop).NumViscTempPts = FluidTemps(TempLoop).NumOfTemps; - state.dataFluidProps->GlyRawData(Loop).ViscTemps.allocate(state.dataFluidProps->GlyRawData(Loop).NumViscTempPts); - state.dataFluidProps->GlyRawData(Loop).ViscTemps = FluidTemps(TempLoop).Temps; + state.dataFluid->GlyRawData(Loop).NumViscTempPts = FluidTemps(TempLoop).NumOfTemps; + state.dataFluid->GlyRawData(Loop).ViscTemps.allocate(state.dataFluid->GlyRawData(Loop).NumViscTempPts); + state.dataFluid->GlyRawData(Loop).ViscTemps = FluidTemps(TempLoop).Temps; break; // the TempLoop DO loop } if (TempLoop == NumOfFluidTempArrays) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->GlyRawData(Loop).Name)); + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->GlyRawData(Loop).Name)); ShowContinueError(state, "No match for temperature array name found with glycol data"); ErrorsFound = true; } } // Next, allocate the viscosity related arrays - state.dataFluidProps->GlyRawData(Loop).NumViscConcPts = NumOfConcPts; - state.dataFluidProps->GlyRawData(Loop).ViscConcs.allocate(state.dataFluidProps->GlyRawData(Loop).NumViscConcPts); - state.dataFluidProps->GlyRawData(Loop).ViscValues.allocate(state.dataFluidProps->GlyRawData(Loop).NumViscConcPts, - state.dataFluidProps->GlyRawData(Loop).NumViscTempPts); + state.dataFluid->GlyRawData(Loop).NumViscConcPts = NumOfConcPts; + state.dataFluid->GlyRawData(Loop).ViscConcs.allocate(state.dataFluid->GlyRawData(Loop).NumViscConcPts); + state.dataFluid->GlyRawData(Loop).ViscValues.allocate(state.dataFluid->GlyRawData(Loop).NumViscConcPts, + state.dataFluid->GlyRawData(Loop).NumViscTempPts); // Finally, get the viscosity and concentration values from the user input NumOfConcPts = 0; @@ -2192,32 +2192,32 @@ namespace FluidProperties { lAlphaFieldBlanks, cAlphaFieldNames, cNumericFieldNames); - if ((Util::SameString(Alphas(1), state.dataFluidProps->GlyRawData(Loop).Name)) && (Util::SameString(Alphas(2), Viscosity))) { + if ((Util::SameString(Alphas(1), state.dataFluid->GlyRawData(Loop).Name)) && (Util::SameString(Alphas(2), Viscosity))) { ++NumOfConcPts; - state.dataFluidProps->GlyRawData(Loop).ViscConcs(NumOfConcPts) = Numbers(1); + state.dataFluid->GlyRawData(Loop).ViscConcs(NumOfConcPts) = Numbers(1); // a little error trapping if (NumOfConcPts == 1) { - if (state.dataFluidProps->GlyRawData(Loop).ViscConcs(NumOfConcPts) < 0.0) { + if (state.dataFluid->GlyRawData(Loop).ViscConcs(NumOfConcPts) < 0.0) { ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->GlyRawData(Loop).Name)); + state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->GlyRawData(Loop).Name)); ShowContinueError(state, "Negative concentrations not allowed in fluid property input data"); ErrorsFound = true; } } else { - if (state.dataFluidProps->GlyRawData(Loop).ViscConcs(NumOfConcPts) <= - state.dataFluidProps->GlyRawData(Loop).ViscConcs(NumOfConcPts - 1)) { + if (state.dataFluid->GlyRawData(Loop).ViscConcs(NumOfConcPts) <= + state.dataFluid->GlyRawData(Loop).ViscConcs(NumOfConcPts - 1)) { ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->GlyRawData(Loop).Name)); + state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->GlyRawData(Loop).Name)); ShowContinueError(state, "Concentrations must be entered in ascending order for fluid property data"); ErrorsFound = true; } } - if ((NumNumbers - 1) == state.dataFluidProps->GlyRawData(Loop).NumViscTempPts) { - state.dataFluidProps->GlyRawData(Loop).ViscValues( - NumOfConcPts, {1, state.dataFluidProps->GlyRawData(Loop).NumViscTempPts}) = Numbers({2, NumNumbers}); + if ((NumNumbers - 1) == state.dataFluid->GlyRawData(Loop).NumViscTempPts) { + state.dataFluid->GlyRawData(Loop).ViscValues( + NumOfConcPts, {1, state.dataFluid->GlyRawData(Loop).NumViscTempPts}) = Numbers({2, NumNumbers}); } else { ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->GlyRawData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->GlyRawData(Loop).Name)); ShowContinueError(state, "Number of viscosity data points not equal to number of temperature points"); ErrorsFound = true; } @@ -2258,40 +2258,40 @@ namespace FluidProperties { NumOfOptionalInput = state.dataInputProcessing->inputProcessor->getNumObjectsFound(state, CurrentModuleObject); int NumOfGlyConcs = NumOfOptionalInput + 1; - state.dataFluidProps->GlycolData.allocate(NumOfGlyConcs); - state.dataFluidProps->GlycolUsed.dimension(NumOfGlyConcs, false); + state.dataFluid->GlycolData.allocate(NumOfGlyConcs); + state.dataFluid->GlycolUsed.dimension(NumOfGlyConcs, false); - state.dataFluidProps->GlycolUsed(1) = true; // mark Water as always used + state.dataFluid->GlycolUsed(1) = true; // mark Water as always used // First "glycol" is always pure water. Load data from default arrays - state.dataFluidProps->GlycolData(1).Name = "WATER"; - state.dataFluidProps->GlycolData(1).GlycolName = "WATER"; - state.dataFluidProps->GlycolData(1).GlycolIndex = 0; - state.dataFluidProps->GlycolData(1).Concentration = 1.0; - state.dataFluidProps->GlycolData(1).CpDataPresent = true; - state.dataFluidProps->GlycolData(1).NumCpTempPts = DefaultNumGlyTemps; - state.dataFluidProps->GlycolData(1).RhoDataPresent = true; - state.dataFluidProps->GlycolData(1).NumRhoTempPts = DefaultNumGlyTemps; - state.dataFluidProps->GlycolData(1).CondDataPresent = true; - state.dataFluidProps->GlycolData(1).NumCondTempPts = DefaultNumGlyTemps; - state.dataFluidProps->GlycolData(1).ViscDataPresent = true; - state.dataFluidProps->GlycolData(1).NumViscTempPts = DefaultNumGlyTemps; - state.dataFluidProps->GlycolData(1).CpTemps.allocate(state.dataFluidProps->GlycolData(1).NumCpTempPts); - state.dataFluidProps->GlycolData(1).CpValues.allocate(state.dataFluidProps->GlycolData(1).NumCpTempPts); - state.dataFluidProps->GlycolData(1).RhoTemps.allocate(state.dataFluidProps->GlycolData(1).NumRhoTempPts); - state.dataFluidProps->GlycolData(1).RhoValues.allocate(state.dataFluidProps->GlycolData(1).NumRhoTempPts); - state.dataFluidProps->GlycolData(1).CondTemps.allocate(state.dataFluidProps->GlycolData(1).NumCondTempPts); - state.dataFluidProps->GlycolData(1).CondValues.allocate(state.dataFluidProps->GlycolData(1).NumCondTempPts); - state.dataFluidProps->GlycolData(1).ViscTemps.allocate(state.dataFluidProps->GlycolData(1).NumViscTempPts); - state.dataFluidProps->GlycolData(1).ViscValues.allocate(state.dataFluidProps->GlycolData(1).NumViscTempPts); - state.dataFluidProps->GlycolData(1).CpTemps = DefaultGlycolTemps; - state.dataFluidProps->GlycolData(1).CpValues = DefaultWaterCpData; - state.dataFluidProps->GlycolData(1).RhoTemps = DefaultGlycolTemps; - state.dataFluidProps->GlycolData(1).RhoValues = DefaultWaterRhoData; - state.dataFluidProps->GlycolData(1).CondTemps = DefaultGlycolTemps; - state.dataFluidProps->GlycolData(1).CondValues = DefaultWaterCondData; - state.dataFluidProps->GlycolData(1).ViscTemps = DefaultGlycolTemps; - state.dataFluidProps->GlycolData(1).ViscValues = DefaultWaterViscData; + state.dataFluid->GlycolData(1).Name = "WATER"; + state.dataFluid->GlycolData(1).GlycolName = "WATER"; + state.dataFluid->GlycolData(1).GlycolIndex = 0; + state.dataFluid->GlycolData(1).Concentration = 1.0; + state.dataFluid->GlycolData(1).CpDataPresent = true; + state.dataFluid->GlycolData(1).NumCpTempPts = DefaultNumGlyTemps; + state.dataFluid->GlycolData(1).RhoDataPresent = true; + state.dataFluid->GlycolData(1).NumRhoTempPts = DefaultNumGlyTemps; + state.dataFluid->GlycolData(1).CondDataPresent = true; + state.dataFluid->GlycolData(1).NumCondTempPts = DefaultNumGlyTemps; + state.dataFluid->GlycolData(1).ViscDataPresent = true; + state.dataFluid->GlycolData(1).NumViscTempPts = DefaultNumGlyTemps; + state.dataFluid->GlycolData(1).CpTemps.allocate(state.dataFluid->GlycolData(1).NumCpTempPts); + state.dataFluid->GlycolData(1).CpValues.allocate(state.dataFluid->GlycolData(1).NumCpTempPts); + state.dataFluid->GlycolData(1).RhoTemps.allocate(state.dataFluid->GlycolData(1).NumRhoTempPts); + state.dataFluid->GlycolData(1).RhoValues.allocate(state.dataFluid->GlycolData(1).NumRhoTempPts); + state.dataFluid->GlycolData(1).CondTemps.allocate(state.dataFluid->GlycolData(1).NumCondTempPts); + state.dataFluid->GlycolData(1).CondValues.allocate(state.dataFluid->GlycolData(1).NumCondTempPts); + state.dataFluid->GlycolData(1).ViscTemps.allocate(state.dataFluid->GlycolData(1).NumViscTempPts); + state.dataFluid->GlycolData(1).ViscValues.allocate(state.dataFluid->GlycolData(1).NumViscTempPts); + state.dataFluid->GlycolData(1).CpTemps = DefaultGlycolTemps; + state.dataFluid->GlycolData(1).CpValues = DefaultWaterCpData; + state.dataFluid->GlycolData(1).RhoTemps = DefaultGlycolTemps; + state.dataFluid->GlycolData(1).RhoValues = DefaultWaterRhoData; + state.dataFluid->GlycolData(1).CondTemps = DefaultGlycolTemps; + state.dataFluid->GlycolData(1).CondValues = DefaultWaterCondData; + state.dataFluid->GlycolData(1).ViscTemps = DefaultGlycolTemps; + state.dataFluid->GlycolData(1).ViscValues = DefaultWaterViscData; NumOfGlyConcs = 1; // Water is always available, everything else must be specified @@ -2312,24 +2312,24 @@ namespace FluidProperties { if (Util::SameString(Alphas(2), EthyleneGlycol)) { GlycolFound = true; ++NumOfGlyConcs; - state.dataFluidProps->GlycolData(NumOfGlyConcs).Name = Alphas(1); - state.dataFluidProps->GlycolData(NumOfGlyConcs).GlycolName = Alphas(2); + state.dataFluid->GlycolData(NumOfGlyConcs).Name = Alphas(1); + state.dataFluid->GlycolData(NumOfGlyConcs).GlycolName = Alphas(2); } else if (Util::SameString(Alphas(2), PropyleneGlycol)) { GlycolFound = true; ++NumOfGlyConcs; - state.dataFluidProps->GlycolData(NumOfGlyConcs).Name = Alphas(1); - state.dataFluidProps->GlycolData(NumOfGlyConcs).GlycolName = Alphas(2); + state.dataFluid->GlycolData(NumOfGlyConcs).Name = Alphas(1); + state.dataFluid->GlycolData(NumOfGlyConcs).GlycolName = Alphas(2); } else if (Util::SameString(Alphas(2), "UserDefinedGlycolType")) { - for (InData = 1; InData <= state.dataFluidProps->NumOfGlycols; ++InData) { - if (Util::SameString(Alphas(3), state.dataFluidProps->GlyRawData(InData).Name)) { + for (InData = 1; InData <= state.dataFluid->NumOfGlycols; ++InData) { + if (Util::SameString(Alphas(3), state.dataFluid->GlyRawData(InData).Name)) { GlycolFound = true; break; // DO LOOP through user defined glycols } } if (GlycolFound) { ++NumOfGlyConcs; - state.dataFluidProps->GlycolData(NumOfGlyConcs).Name = Alphas(1); - state.dataFluidProps->GlycolData(NumOfGlyConcs).GlycolName = Alphas(3); + state.dataFluid->GlycolData(NumOfGlyConcs).Name = Alphas(1); + state.dataFluid->GlycolData(NumOfGlyConcs).GlycolName = Alphas(3); } else { ShowSevereError(state, format("{}{}=\"{}\", invalid reference", RoutineName, CurrentModuleObject, Alphas(1))); ShowContinueError(state, format("... not found in the FluidProperties:Name list: \"{}\".", Alphas(3))); @@ -2342,192 +2342,192 @@ namespace FluidProperties { ErrorsFound = true; } if (!GlycolFound) continue; - state.dataFluidProps->GlycolData(NumOfGlyConcs).Concentration = Numbers(1); + state.dataFluid->GlycolData(NumOfGlyConcs).Concentration = Numbers(1); } // Now initialize the rest of the data for the glycols for (int Loop = 2; Loop <= NumOfGlyConcs; ++Loop) { // Check to see if glycol name is one of the defaults or is listed in the Fluid Name list - if (Util::SameString(state.dataFluidProps->GlycolData(Loop).GlycolName, EthyleneGlycol)) { - state.dataFluidProps->GlycolData(Loop).GlycolIndex = EthyleneGlycolIndex; - } else if (Util::SameString(state.dataFluidProps->GlycolData(Loop).GlycolName, PropyleneGlycol)) { - state.dataFluidProps->GlycolData(Loop).GlycolIndex = PropyleneGlycolIndex; + if (Util::SameString(state.dataFluid->GlycolData(Loop).GlycolName, EthyleneGlycol)) { + state.dataFluid->GlycolData(Loop).GlycolIndex = EthyleneGlycolIndex; + } else if (Util::SameString(state.dataFluid->GlycolData(Loop).GlycolName, PropyleneGlycol)) { + state.dataFluid->GlycolData(Loop).GlycolIndex = PropyleneGlycolIndex; } else { - for (InData = 1; InData <= state.dataFluidProps->NumOfGlycols; ++InData) { - if (Util::SameString(state.dataFluidProps->GlycolData(Loop).GlycolName, state.dataFluidProps->GlyRawData(InData).Name)) { - state.dataFluidProps->GlycolData(Loop).GlycolIndex = InData; + for (InData = 1; InData <= state.dataFluid->NumOfGlycols; ++InData) { + if (Util::SameString(state.dataFluid->GlycolData(Loop).GlycolName, state.dataFluid->GlyRawData(InData).Name)) { + state.dataFluid->GlycolData(Loop).GlycolIndex = InData; break; // DO LOOP through user defined glycols } } } // Set the rest of the parameters... - if ((state.dataFluidProps->GlycolData(Loop).GlycolIndex == EthyleneGlycolIndex) || - (state.dataFluidProps->GlycolData(Loop).GlycolIndex == PropyleneGlycolIndex)) { - - state.dataFluidProps->GlycolData(Loop).CpDataPresent = true; - state.dataFluidProps->GlycolData(Loop).NumCpTempPts = DefaultNumGlyTemps; - state.dataFluidProps->GlycolData(Loop).RhoDataPresent = true; - state.dataFluidProps->GlycolData(Loop).NumRhoTempPts = DefaultNumGlyTemps; - state.dataFluidProps->GlycolData(Loop).CondDataPresent = true; - state.dataFluidProps->GlycolData(Loop).NumCondTempPts = DefaultNumGlyTemps; - state.dataFluidProps->GlycolData(Loop).ViscDataPresent = true; - state.dataFluidProps->GlycolData(Loop).NumViscTempPts = DefaultNumGlyTemps; - state.dataFluidProps->GlycolData(Loop).CpTemps.allocate(state.dataFluidProps->GlycolData(Loop).NumCpTempPts); - state.dataFluidProps->GlycolData(Loop).CpValues.allocate(state.dataFluidProps->GlycolData(Loop).NumCpTempPts); - state.dataFluidProps->GlycolData(Loop).RhoTemps.allocate(state.dataFluidProps->GlycolData(Loop).NumRhoTempPts); - state.dataFluidProps->GlycolData(Loop).RhoValues.allocate(state.dataFluidProps->GlycolData(Loop).NumRhoTempPts); - state.dataFluidProps->GlycolData(Loop).CondTemps.allocate(state.dataFluidProps->GlycolData(Loop).NumCondTempPts); - state.dataFluidProps->GlycolData(Loop).CondValues.allocate(state.dataFluidProps->GlycolData(Loop).NumCondTempPts); - state.dataFluidProps->GlycolData(Loop).ViscTemps.allocate(state.dataFluidProps->GlycolData(Loop).NumViscTempPts); - state.dataFluidProps->GlycolData(Loop).ViscValues.allocate(state.dataFluidProps->GlycolData(Loop).NumViscTempPts); - state.dataFluidProps->GlycolData(Loop).CpTemps = DefaultGlycolTemps; - state.dataFluidProps->GlycolData(Loop).RhoTemps = DefaultGlycolTemps; - state.dataFluidProps->GlycolData(Loop).CondTemps = DefaultGlycolTemps; - state.dataFluidProps->GlycolData(Loop).ViscTemps = DefaultGlycolTemps; - - if (state.dataFluidProps->GlycolData(Loop).GlycolIndex == EthyleneGlycolIndex) { + if ((state.dataFluid->GlycolData(Loop).GlycolIndex == EthyleneGlycolIndex) || + (state.dataFluid->GlycolData(Loop).GlycolIndex == PropyleneGlycolIndex)) { + + state.dataFluid->GlycolData(Loop).CpDataPresent = true; + state.dataFluid->GlycolData(Loop).NumCpTempPts = DefaultNumGlyTemps; + state.dataFluid->GlycolData(Loop).RhoDataPresent = true; + state.dataFluid->GlycolData(Loop).NumRhoTempPts = DefaultNumGlyTemps; + state.dataFluid->GlycolData(Loop).CondDataPresent = true; + state.dataFluid->GlycolData(Loop).NumCondTempPts = DefaultNumGlyTemps; + state.dataFluid->GlycolData(Loop).ViscDataPresent = true; + state.dataFluid->GlycolData(Loop).NumViscTempPts = DefaultNumGlyTemps; + state.dataFluid->GlycolData(Loop).CpTemps.allocate(state.dataFluid->GlycolData(Loop).NumCpTempPts); + state.dataFluid->GlycolData(Loop).CpValues.allocate(state.dataFluid->GlycolData(Loop).NumCpTempPts); + state.dataFluid->GlycolData(Loop).RhoTemps.allocate(state.dataFluid->GlycolData(Loop).NumRhoTempPts); + state.dataFluid->GlycolData(Loop).RhoValues.allocate(state.dataFluid->GlycolData(Loop).NumRhoTempPts); + state.dataFluid->GlycolData(Loop).CondTemps.allocate(state.dataFluid->GlycolData(Loop).NumCondTempPts); + state.dataFluid->GlycolData(Loop).CondValues.allocate(state.dataFluid->GlycolData(Loop).NumCondTempPts); + state.dataFluid->GlycolData(Loop).ViscTemps.allocate(state.dataFluid->GlycolData(Loop).NumViscTempPts); + state.dataFluid->GlycolData(Loop).ViscValues.allocate(state.dataFluid->GlycolData(Loop).NumViscTempPts); + state.dataFluid->GlycolData(Loop).CpTemps = DefaultGlycolTemps; + state.dataFluid->GlycolData(Loop).RhoTemps = DefaultGlycolTemps; + state.dataFluid->GlycolData(Loop).CondTemps = DefaultGlycolTemps; + state.dataFluid->GlycolData(Loop).ViscTemps = DefaultGlycolTemps; + + if (state.dataFluid->GlycolData(Loop).GlycolIndex == EthyleneGlycolIndex) { InterpDefValuesForGlycolConc(state, DefaultGlycolConcs, DefaultEthGlyCpData, - state.dataFluidProps->GlycolData(Loop).Concentration, - state.dataFluidProps->GlycolData(Loop).CpValues); + state.dataFluid->GlycolData(Loop).Concentration, + state.dataFluid->GlycolData(Loop).CpValues); InterpDefValuesForGlycolConc(state, DefaultGlycolConcs, DefaultEthGlyRhoData, - state.dataFluidProps->GlycolData(Loop).Concentration, - state.dataFluidProps->GlycolData(Loop).RhoValues); + state.dataFluid->GlycolData(Loop).Concentration, + state.dataFluid->GlycolData(Loop).RhoValues); InterpDefValuesForGlycolConc(state, DefaultGlycolConcs, DefaultEthGlyCondData, - state.dataFluidProps->GlycolData(Loop).Concentration, - state.dataFluidProps->GlycolData(Loop).CondValues); + state.dataFluid->GlycolData(Loop).Concentration, + state.dataFluid->GlycolData(Loop).CondValues); InterpDefValuesForGlycolConc(state, DefaultGlycolConcs, DefaultEthGlyViscData, - state.dataFluidProps->GlycolData(Loop).Concentration, - state.dataFluidProps->GlycolData(Loop).ViscValues); + state.dataFluid->GlycolData(Loop).Concentration, + state.dataFluid->GlycolData(Loop).ViscValues); } else { // == PropyleneGlycolIndex InterpDefValuesForGlycolConc(state, DefaultGlycolConcs, DefaultPropGlyCpData, - state.dataFluidProps->GlycolData(Loop).Concentration, - state.dataFluidProps->GlycolData(Loop).CpValues); + state.dataFluid->GlycolData(Loop).Concentration, + state.dataFluid->GlycolData(Loop).CpValues); InterpDefValuesForGlycolConc(state, DefaultGlycolConcs, DefaultPropGlyRhoData, - state.dataFluidProps->GlycolData(Loop).Concentration, - state.dataFluidProps->GlycolData(Loop).RhoValues); + state.dataFluid->GlycolData(Loop).Concentration, + state.dataFluid->GlycolData(Loop).RhoValues); InterpDefValuesForGlycolConc(state, DefaultGlycolConcs, DefaultPropGlyCondData, - state.dataFluidProps->GlycolData(Loop).Concentration, - state.dataFluidProps->GlycolData(Loop).CondValues); + state.dataFluid->GlycolData(Loop).Concentration, + state.dataFluid->GlycolData(Loop).CondValues); InterpDefValuesForGlycolConc(state, DefaultGlycolConcs, DefaultPropGlyViscData, - state.dataFluidProps->GlycolData(Loop).Concentration, - state.dataFluidProps->GlycolData(Loop).ViscValues); + state.dataFluid->GlycolData(Loop).Concentration, + state.dataFluid->GlycolData(Loop).ViscValues); } } else { // User-defined fluid - int Index = state.dataFluidProps->GlycolData(Loop).GlycolIndex; + int Index = state.dataFluid->GlycolData(Loop).GlycolIndex; // Specific heat data: - if (state.dataFluidProps->GlyRawData(Index).CpDataPresent) { - state.dataFluidProps->GlycolData(Loop).CpDataPresent = true; - state.dataFluidProps->GlycolData(Loop).NumCpTempPts = state.dataFluidProps->GlyRawData(Index).NumCpTempPts; - state.dataFluidProps->GlycolData(Loop).CpTemps.allocate(state.dataFluidProps->GlycolData(Loop).NumCpTempPts); - state.dataFluidProps->GlycolData(Loop).CpValues.allocate(state.dataFluidProps->GlycolData(Loop).NumCpTempPts); - state.dataFluidProps->GlycolData(Loop).CpTemps = state.dataFluidProps->GlyRawData(Index).CpTemps; + if (state.dataFluid->GlyRawData(Index).CpDataPresent) { + state.dataFluid->GlycolData(Loop).CpDataPresent = true; + state.dataFluid->GlycolData(Loop).NumCpTempPts = state.dataFluid->GlyRawData(Index).NumCpTempPts; + state.dataFluid->GlycolData(Loop).CpTemps.allocate(state.dataFluid->GlycolData(Loop).NumCpTempPts); + state.dataFluid->GlycolData(Loop).CpValues.allocate(state.dataFluid->GlycolData(Loop).NumCpTempPts); + state.dataFluid->GlycolData(Loop).CpTemps = state.dataFluid->GlyRawData(Index).CpTemps; InterpValuesForGlycolConc(state, - state.dataFluidProps->GlyRawData(Index).NumCpConcPts, - state.dataFluidProps->GlyRawData(Index).NumCpTempPts, - state.dataFluidProps->GlyRawData(Index).CpConcs, - state.dataFluidProps->GlyRawData(Index).CpValues, - state.dataFluidProps->GlycolData(Loop).Concentration, - state.dataFluidProps->GlycolData(Loop).CpValues); + state.dataFluid->GlyRawData(Index).NumCpConcPts, + state.dataFluid->GlyRawData(Index).NumCpTempPts, + state.dataFluid->GlyRawData(Index).CpConcs, + state.dataFluid->GlyRawData(Index).CpValues, + state.dataFluid->GlycolData(Loop).Concentration, + state.dataFluid->GlycolData(Loop).CpValues); } else { ShowSevereError(state, format("{}Specific heat data not entered for a {}", RoutineName, CurrentModuleObject)); ShowContinueError(state, "ALL data must be entered for user-defined glycols"); - ShowContinueError(state, format("Glycol mixture name = {}", state.dataFluidProps->GlycolData(Loop).Name)); - ShowContinueError(state, format("Glycol fluid name = {}", state.dataFluidProps->GlycolData(Loop).GlycolName)); + ShowContinueError(state, format("Glycol mixture name = {}", state.dataFluid->GlycolData(Loop).Name)); + ShowContinueError(state, format("Glycol fluid name = {}", state.dataFluid->GlycolData(Loop).GlycolName)); ErrorsFound = true; } // Density data: - if (state.dataFluidProps->GlyRawData(Index).CpDataPresent) { - state.dataFluidProps->GlycolData(Loop).RhoDataPresent = true; - state.dataFluidProps->GlycolData(Loop).NumRhoTempPts = state.dataFluidProps->GlyRawData(Index).NumRhoTempPts; - state.dataFluidProps->GlycolData(Loop).RhoTemps.allocate(state.dataFluidProps->GlycolData(Loop).NumRhoTempPts); - state.dataFluidProps->GlycolData(Loop).RhoValues.allocate(state.dataFluidProps->GlycolData(Loop).NumRhoTempPts); - state.dataFluidProps->GlycolData(Loop).RhoTemps = state.dataFluidProps->GlyRawData(Index).RhoTemps; + if (state.dataFluid->GlyRawData(Index).CpDataPresent) { + state.dataFluid->GlycolData(Loop).RhoDataPresent = true; + state.dataFluid->GlycolData(Loop).NumRhoTempPts = state.dataFluid->GlyRawData(Index).NumRhoTempPts; + state.dataFluid->GlycolData(Loop).RhoTemps.allocate(state.dataFluid->GlycolData(Loop).NumRhoTempPts); + state.dataFluid->GlycolData(Loop).RhoValues.allocate(state.dataFluid->GlycolData(Loop).NumRhoTempPts); + state.dataFluid->GlycolData(Loop).RhoTemps = state.dataFluid->GlyRawData(Index).RhoTemps; InterpValuesForGlycolConc(state, - state.dataFluidProps->GlyRawData(Index).NumRhoConcPts, - state.dataFluidProps->GlyRawData(Index).NumRhoTempPts, - state.dataFluidProps->GlyRawData(Index).RhoConcs, - state.dataFluidProps->GlyRawData(Index).RhoValues, - state.dataFluidProps->GlycolData(Loop).Concentration, - state.dataFluidProps->GlycolData(Loop).RhoValues); + state.dataFluid->GlyRawData(Index).NumRhoConcPts, + state.dataFluid->GlyRawData(Index).NumRhoTempPts, + state.dataFluid->GlyRawData(Index).RhoConcs, + state.dataFluid->GlyRawData(Index).RhoValues, + state.dataFluid->GlycolData(Loop).Concentration, + state.dataFluid->GlycolData(Loop).RhoValues); } else { ShowSevereError(state, format("{}Density data not entered for a {}", RoutineName, CurrentModuleObject)); ShowContinueError(state, "ALL data must be entered for user-defined glycols"); - ShowContinueError(state, format("Glycol mixture name = {}", state.dataFluidProps->GlycolData(Loop).Name)); - ShowContinueError(state, format("Glycol fluid name = {}", state.dataFluidProps->GlycolData(Loop).GlycolName)); + ShowContinueError(state, format("Glycol mixture name = {}", state.dataFluid->GlycolData(Loop).Name)); + ShowContinueError(state, format("Glycol fluid name = {}", state.dataFluid->GlycolData(Loop).GlycolName)); ErrorsFound = true; } // Conductivity data: - if (state.dataFluidProps->GlyRawData(Index).CondDataPresent) { - state.dataFluidProps->GlycolData(Loop).CondDataPresent = true; - state.dataFluidProps->GlycolData(Loop).NumCondTempPts = state.dataFluidProps->GlyRawData(Index).NumCondTempPts; - state.dataFluidProps->GlycolData(Loop).CondTemps.allocate(state.dataFluidProps->GlycolData(Loop).NumCondTempPts); - state.dataFluidProps->GlycolData(Loop).CondValues.allocate(state.dataFluidProps->GlycolData(Loop).NumCondTempPts); - state.dataFluidProps->GlycolData(Loop).CondTemps = state.dataFluidProps->GlyRawData(Index).CondTemps; + if (state.dataFluid->GlyRawData(Index).CondDataPresent) { + state.dataFluid->GlycolData(Loop).CondDataPresent = true; + state.dataFluid->GlycolData(Loop).NumCondTempPts = state.dataFluid->GlyRawData(Index).NumCondTempPts; + state.dataFluid->GlycolData(Loop).CondTemps.allocate(state.dataFluid->GlycolData(Loop).NumCondTempPts); + state.dataFluid->GlycolData(Loop).CondValues.allocate(state.dataFluid->GlycolData(Loop).NumCondTempPts); + state.dataFluid->GlycolData(Loop).CondTemps = state.dataFluid->GlyRawData(Index).CondTemps; InterpValuesForGlycolConc(state, - state.dataFluidProps->GlyRawData(Index).NumCondConcPts, - state.dataFluidProps->GlyRawData(Index).NumCondTempPts, - state.dataFluidProps->GlyRawData(Index).CondConcs, - state.dataFluidProps->GlyRawData(Index).CondValues, - state.dataFluidProps->GlycolData(Loop).Concentration, - state.dataFluidProps->GlycolData(Loop).CondValues); + state.dataFluid->GlyRawData(Index).NumCondConcPts, + state.dataFluid->GlyRawData(Index).NumCondTempPts, + state.dataFluid->GlyRawData(Index).CondConcs, + state.dataFluid->GlyRawData(Index).CondValues, + state.dataFluid->GlycolData(Loop).Concentration, + state.dataFluid->GlycolData(Loop).CondValues); } else { ShowSevereError(state, format("{}Conductivity data not entered for a {}", RoutineName, CurrentModuleObject)); ShowContinueError(state, "ALL data must be entered for user-defined glycols"); - ShowContinueError(state, format("Glycol mixture name = {}", state.dataFluidProps->GlycolData(Loop).Name)); - ShowContinueError(state, format("Glycol fluid name = {}", state.dataFluidProps->GlycolData(Loop).GlycolName)); + ShowContinueError(state, format("Glycol mixture name = {}", state.dataFluid->GlycolData(Loop).Name)); + ShowContinueError(state, format("Glycol fluid name = {}", state.dataFluid->GlycolData(Loop).GlycolName)); ErrorsFound = true; } // Viscosity data: - if (state.dataFluidProps->GlyRawData(Index).ViscDataPresent) { - state.dataFluidProps->GlycolData(Loop).ViscDataPresent = true; - state.dataFluidProps->GlycolData(Loop).NumViscTempPts = state.dataFluidProps->GlyRawData(Index).NumViscTempPts; - state.dataFluidProps->GlycolData(Loop).ViscTemps.allocate(state.dataFluidProps->GlycolData(Loop).NumViscTempPts); - state.dataFluidProps->GlycolData(Loop).ViscValues.allocate(state.dataFluidProps->GlycolData(Loop).NumViscTempPts); - state.dataFluidProps->GlycolData(Loop).ViscTemps = state.dataFluidProps->GlyRawData(Index).ViscTemps; + if (state.dataFluid->GlyRawData(Index).ViscDataPresent) { + state.dataFluid->GlycolData(Loop).ViscDataPresent = true; + state.dataFluid->GlycolData(Loop).NumViscTempPts = state.dataFluid->GlyRawData(Index).NumViscTempPts; + state.dataFluid->GlycolData(Loop).ViscTemps.allocate(state.dataFluid->GlycolData(Loop).NumViscTempPts); + state.dataFluid->GlycolData(Loop).ViscValues.allocate(state.dataFluid->GlycolData(Loop).NumViscTempPts); + state.dataFluid->GlycolData(Loop).ViscTemps = state.dataFluid->GlyRawData(Index).ViscTemps; InterpValuesForGlycolConc(state, - state.dataFluidProps->GlyRawData(Index).NumViscConcPts, - state.dataFluidProps->GlyRawData(Index).NumViscTempPts, - state.dataFluidProps->GlyRawData(Index).ViscConcs, - state.dataFluidProps->GlyRawData(Index).ViscValues, - state.dataFluidProps->GlycolData(Loop).Concentration, - state.dataFluidProps->GlycolData(Loop).ViscValues); + state.dataFluid->GlyRawData(Index).NumViscConcPts, + state.dataFluid->GlyRawData(Index).NumViscTempPts, + state.dataFluid->GlyRawData(Index).ViscConcs, + state.dataFluid->GlyRawData(Index).ViscValues, + state.dataFluid->GlycolData(Loop).Concentration, + state.dataFluid->GlycolData(Loop).ViscValues); } else { ShowSevereError(state, format("{}Viscosity data not entered for a {}", RoutineName, CurrentModuleObject)); ShowContinueError(state, "ALL data must be entered for user-defined glycols"); - ShowContinueError(state, format("Glycol mixture name = {}", state.dataFluidProps->GlycolData(Loop).Name)); - ShowContinueError(state, format("Glycol fluid name = {}", state.dataFluidProps->GlycolData(Loop).GlycolName)); + ShowContinueError(state, format("Glycol mixture name = {}", state.dataFluid->GlycolData(Loop).Name)); + ShowContinueError(state, format("Glycol fluid name = {}", state.dataFluid->GlycolData(Loop).GlycolName)); ErrorsFound = true; } } } - state.dataFluidProps->NumOfGlycols = NumOfGlyConcs; // Reset number of glycols to actual number - state.dataFluidProps->GlycolErrorTracking.allocate(state.dataFluidProps->NumOfGlycols); - for (std::size_t i = 0; i < state.dataFluidProps->GlycolErrorTracking.size(); ++i) - state.dataFluidProps->GlycolErrorTracking[i].Name = state.dataFluidProps->GlycolData[i].Name; + state.dataFluid->NumOfGlycols = NumOfGlyConcs; // Reset number of glycols to actual number + state.dataFluid->GlycolErrorTracking.allocate(state.dataFluid->NumOfGlycols); + for (std::size_t i = 0; i < state.dataFluid->GlycolErrorTracking.size(); ++i) + state.dataFluid->GlycolErrorTracking[i].Name = state.dataFluid->GlycolData[i].Name; if (!ErrorsFound) InitializeGlycolTempLimits(state, ErrorsFound); // Initialize the Temp limits for the glycols @@ -2546,16 +2546,16 @@ namespace FluidProperties { ShowFatalError(state, format("{}Previous errors in input cause program termination.", RoutineName)); } - if (state.dataInputProcessing->inputProcessor->getNumSectionsFound("REPORTGLYCOLS") > 0) state.dataFluidProps->DebugReportGlycols = true; + if (state.dataInputProcessing->inputProcessor->getNumSectionsFound("REPORTGLYCOLS") > 0) state.dataFluid->DebugReportGlycols = true; if (state.dataInputProcessing->inputProcessor->getNumSectionsFound("REPORTREFRIGERANTS") > 0) - state.dataFluidProps->DebugReportRefrigerants = true; + state.dataFluid->DebugReportRefrigerants = true; if (state.dataInputProcessing->inputProcessor->getNumSectionsFound("INCREASEGLYCOLERRORLIMIT") > 0) - state.dataFluidProps->GlycolErrorLimitTest += 10; + state.dataFluid->GlycolErrorLimitTest += 10; if (state.dataInputProcessing->inputProcessor->getNumSectionsFound("INCREASEREFRIGERANTERRORLIMIT") > 0) - state.dataFluidProps->RefrigerantErrorLimitTest += 10; + state.dataFluid->RefrigerantErrorLimitTest += 10; - if (state.dataFluidProps->DebugReportGlycols) ReportAndTestGlycols(state); - if (state.dataFluidProps->DebugReportRefrigerants) ReportAndTestRefrigerants(state); + if (state.dataFluid->DebugReportGlycols) ReportAndTestGlycols(state); + if (state.dataFluid->DebugReportRefrigerants) ReportAndTestRefrigerants(state); } [[maybe_unused]] static constexpr std::array, DefaultNumSteamSuperheatedPressure> @@ -4683,8 +4683,8 @@ namespace FluidProperties { // Most properties requested (e.g., Specific Heat) must be > 0 but the tables may // be set up for symmetry and not be limited to just valid values. - for (int GlycolNum = 1; GlycolNum <= state.dataFluidProps->NumOfGlycols; ++GlycolNum) { - auto &glycol = state.dataFluidProps->GlycolData(GlycolNum); + for (int GlycolNum = 1; GlycolNum <= state.dataFluid->NumOfGlycols; ++GlycolNum) { + auto &glycol = state.dataFluid->GlycolData(GlycolNum); if (glycol.CpDataPresent) { // check for lowest non-zero value by referencing temp data for (int IndexNum = 1; IndexNum <= glycol.NumCpTempPts; ++IndexNum) { @@ -4786,8 +4786,8 @@ namespace FluidProperties { // Most properties requested (e.g., Specific Heat) must be > 0 but the tables may // be set up for symmetry and not be limited to just valid values. - for (int RefrigNum = 1; RefrigNum <= state.dataFluidProps->NumOfRefrigerants; ++RefrigNum) { - auto &refrig = state.dataFluidProps->RefrigData(RefrigNum); + for (int RefrigNum = 1; RefrigNum <= state.dataFluid->NumOfRefrigerants; ++RefrigNum) { + auto &refrig = state.dataFluid->RefrigData(RefrigNum); for (int IndexNum = 1; IndexNum <= refrig.NumPsPoints; ++IndexNum) { if (refrig.PsValues(IndexNum) <= 0.0) continue; refrig.PsLowPresIndex = IndexNum; @@ -4926,10 +4926,10 @@ namespace FluidProperties { Real64 Temperature; // Temperature to drive values Real64 ReturnValue; // Values returned from glycol functions - state.dataFluidProps->GetInput = false; // input has already been gotten + state.dataFluid->GetInput = false; // input has already been gotten - for (int GlycolNum = 1; GlycolNum <= state.dataFluidProps->NumOfGlycols; ++GlycolNum) { - auto &glycol = state.dataFluidProps->GlycolData(GlycolNum); + for (int GlycolNum = 1; GlycolNum <= state.dataFluid->NumOfGlycols; ++GlycolNum) { + auto &glycol = state.dataFluid->GlycolData(GlycolNum); int GlycolIndex = 0; // used in routine calls -- value is returned when first 0 // Lay out the basic values: if (!glycol.GlycolName.empty()) { @@ -5168,223 +5168,223 @@ namespace FluidProperties { Real64 Temperature; // Temperature to drive values Real64 ReturnValue; // Values returned from refrigerant functions - state.dataFluidProps->GetInput = false; // input has already been gotten + state.dataFluid->GetInput = false; // input has already been gotten - for (int RefrigNum = 1; RefrigNum <= state.dataFluidProps->NumOfRefrigerants; ++RefrigNum) { + for (int RefrigNum = 1; RefrigNum <= state.dataFluid->NumOfRefrigerants; ++RefrigNum) { int RefrigIndex = 0; // used in routine calls -- value is returned when first 0 // Lay out the basic values: - if (!state.dataFluidProps->RefrigData(RefrigNum).Name.empty()) { - print(state.files.debug, "Refrigerant={}", state.dataFluidProps->RefrigData(RefrigNum).Name); + if (!state.dataFluid->RefrigData(RefrigNum).Name.empty()) { + print(state.files.debug, "Refrigerant={}", state.dataFluid->RefrigData(RefrigNum).Name); } - if (state.dataFluidProps->RefrigData(RefrigNum).NumPsPoints > 0) { + if (state.dataFluid->RefrigData(RefrigNum).NumPsPoints > 0) { print(state.files.debug, "Saturation Pressures Data points:,Low Temperature=,{:.2R},Index=,{},High Temperature=,{:.2R},Index=,{}\n", - state.dataFluidProps->RefrigData(RefrigNum).PsLowTempValue, - state.dataFluidProps->RefrigData(RefrigNum).PsLowTempIndex, - state.dataFluidProps->RefrigData(RefrigNum).PsHighTempValue, - state.dataFluidProps->RefrigData(RefrigNum).PsHighTempIndex); + state.dataFluid->RefrigData(RefrigNum).PsLowTempValue, + state.dataFluid->RefrigData(RefrigNum).PsLowTempIndex, + state.dataFluid->RefrigData(RefrigNum).PsHighTempValue, + state.dataFluid->RefrigData(RefrigNum).PsHighTempIndex); print(state.files.debug, "Temperatures:"); - for (int Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumPsPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).PsTemps(Loop)); + for (int Loop = 1; Loop <= state.dataFluid->RefrigData(RefrigNum).NumPsPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", state.dataFluid->RefrigData(RefrigNum).PsTemps(Loop)); } print(state.files.debug, ",{:.2R}\n", - state.dataFluidProps->RefrigData(RefrigNum).PsTemps(state.dataFluidProps->RefrigData(RefrigNum).NumPsPoints)); + state.dataFluid->RefrigData(RefrigNum).PsTemps(state.dataFluid->RefrigData(RefrigNum).NumPsPoints)); print(state.files.debug, "Saturation Pressure:"); - for (int Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumPsPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).PsValues(Loop)); + for (int Loop = 1; Loop <= state.dataFluid->RefrigData(RefrigNum).NumPsPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", state.dataFluid->RefrigData(RefrigNum).PsValues(Loop)); } print(state.files.debug, ",{:.2R}\n", - state.dataFluidProps->RefrigData(RefrigNum).PsValues(state.dataFluidProps->RefrigData(RefrigNum).NumPsPoints)); + state.dataFluid->RefrigData(RefrigNum).PsValues(state.dataFluid->RefrigData(RefrigNum).NumPsPoints)); } - if (state.dataFluidProps->RefrigData(RefrigNum).NumHPoints > 0) { + if (state.dataFluid->RefrigData(RefrigNum).NumHPoints > 0) { print(state.files.debug, "Enthalpy Saturated Fluid Data points:,Low Temperature=,{:.2R},Index=,{},High Temperature=,{:.2R},Index=,{}\n", - state.dataFluidProps->RefrigData(RefrigNum).HfLowTempValue, - state.dataFluidProps->RefrigData(RefrigNum).HfLowTempIndex, - state.dataFluidProps->RefrigData(RefrigNum).HfHighTempValue, - state.dataFluidProps->RefrigData(RefrigNum).HfHighTempIndex); + state.dataFluid->RefrigData(RefrigNum).HfLowTempValue, + state.dataFluid->RefrigData(RefrigNum).HfLowTempIndex, + state.dataFluid->RefrigData(RefrigNum).HfHighTempValue, + state.dataFluid->RefrigData(RefrigNum).HfHighTempIndex); print(state.files.debug, "Temperatures:"); - for (int Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumHPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).HTemps(Loop)); + for (int Loop = 1; Loop <= state.dataFluid->RefrigData(RefrigNum).NumHPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", state.dataFluid->RefrigData(RefrigNum).HTemps(Loop)); } print(state.files.debug, ",{:.2R}\n", - state.dataFluidProps->RefrigData(RefrigNum).HTemps(state.dataFluidProps->RefrigData(RefrigNum).NumHPoints)); + state.dataFluid->RefrigData(RefrigNum).HTemps(state.dataFluid->RefrigData(RefrigNum).NumHPoints)); print(state.files.debug, "Enthalpy Saturated Fluid:"); - for (int Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumHPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).HfValues(Loop)); + for (int Loop = 1; Loop <= state.dataFluid->RefrigData(RefrigNum).NumHPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", state.dataFluid->RefrigData(RefrigNum).HfValues(Loop)); } print(state.files.debug, ",{:.2R}\n", - state.dataFluidProps->RefrigData(RefrigNum).HfValues(state.dataFluidProps->RefrigData(RefrigNum).NumHPoints)); + state.dataFluid->RefrigData(RefrigNum).HfValues(state.dataFluid->RefrigData(RefrigNum).NumHPoints)); print(state.files.debug, "Enthalpy Saturated Fluid/Gas Data points:,Low Temperature=,{:.2R},Index=,{},High Temperature=,{:.2R},Index=,{}\n", - state.dataFluidProps->RefrigData(RefrigNum).HfgLowTempValue, - state.dataFluidProps->RefrigData(RefrigNum).HfgLowTempIndex, - state.dataFluidProps->RefrigData(RefrigNum).HfgHighTempValue, - state.dataFluidProps->RefrigData(RefrigNum).HfgHighTempIndex); + state.dataFluid->RefrigData(RefrigNum).HfgLowTempValue, + state.dataFluid->RefrigData(RefrigNum).HfgLowTempIndex, + state.dataFluid->RefrigData(RefrigNum).HfgHighTempValue, + state.dataFluid->RefrigData(RefrigNum).HfgHighTempIndex); print(state.files.debug, "Temperatures:"); - for (int Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumHPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).HTemps(Loop)); + for (int Loop = 1; Loop <= state.dataFluid->RefrigData(RefrigNum).NumHPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", state.dataFluid->RefrigData(RefrigNum).HTemps(Loop)); } print(state.files.debug, ",{:.2R}\n", - state.dataFluidProps->RefrigData(RefrigNum).HTemps(state.dataFluidProps->RefrigData(RefrigNum).NumHPoints)); + state.dataFluid->RefrigData(RefrigNum).HTemps(state.dataFluid->RefrigData(RefrigNum).NumHPoints)); print(state.files.debug, "Enthalpy Saturated Fluid/Gas:"); - for (int Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumHPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).HfgValues(Loop)); + for (int Loop = 1; Loop <= state.dataFluid->RefrigData(RefrigNum).NumHPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", state.dataFluid->RefrigData(RefrigNum).HfgValues(Loop)); } print(state.files.debug, ",{:.2R}\n", - state.dataFluidProps->RefrigData(RefrigNum).HfgValues(state.dataFluidProps->RefrigData(RefrigNum).NumHPoints)); + state.dataFluid->RefrigData(RefrigNum).HfgValues(state.dataFluid->RefrigData(RefrigNum).NumHPoints)); } - if (state.dataFluidProps->RefrigData(RefrigNum).NumCpPoints > 0) { + if (state.dataFluid->RefrigData(RefrigNum).NumCpPoints > 0) { print(state.files.debug, "Specific Heat Saturated Fluid Data points:,Low Temperature=,{:.2R},Index=,{},High Temperature=,{:.2R},Index=,{}\n", - state.dataFluidProps->RefrigData(RefrigNum).CpfLowTempValue, - state.dataFluidProps->RefrigData(RefrigNum).CpfLowTempIndex, - state.dataFluidProps->RefrigData(RefrigNum).CpfHighTempValue, - state.dataFluidProps->RefrigData(RefrigNum).CpfHighTempIndex); + state.dataFluid->RefrigData(RefrigNum).CpfLowTempValue, + state.dataFluid->RefrigData(RefrigNum).CpfLowTempIndex, + state.dataFluid->RefrigData(RefrigNum).CpfHighTempValue, + state.dataFluid->RefrigData(RefrigNum).CpfHighTempIndex); print(state.files.debug, "Temperatures:"); - for (int Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumCpPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).CpTemps(Loop)); + for (int Loop = 1; Loop <= state.dataFluid->RefrigData(RefrigNum).NumCpPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", state.dataFluid->RefrigData(RefrigNum).CpTemps(Loop)); } print(state.files.debug, ",{:.2R}\n", - state.dataFluidProps->RefrigData(RefrigNum).CpTemps(state.dataFluidProps->RefrigData(RefrigNum).NumCpPoints)); + state.dataFluid->RefrigData(RefrigNum).CpTemps(state.dataFluid->RefrigData(RefrigNum).NumCpPoints)); print(state.files.debug, "Specific Heat Saturated Fluid:"); - for (int Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumCpPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}\n", state.dataFluidProps->RefrigData(RefrigNum).CpfValues(Loop)); + for (int Loop = 1; Loop <= state.dataFluid->RefrigData(RefrigNum).NumCpPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}\n", state.dataFluid->RefrigData(RefrigNum).CpfValues(Loop)); } print(state.files.debug, ",{:.2R}", - state.dataFluidProps->RefrigData(RefrigNum).CpfValues(state.dataFluidProps->RefrigData(RefrigNum).NumCpPoints)); + state.dataFluid->RefrigData(RefrigNum).CpfValues(state.dataFluid->RefrigData(RefrigNum).NumCpPoints)); print(state.files.debug, "Specific Heat Saturated Fluid/Gas Data points:,Low Temperature=,{:.2R},Index=,{},High Temperature=,{:.2R},Index=,{}\n", - state.dataFluidProps->RefrigData(RefrigNum).CpfgLowTempValue, - state.dataFluidProps->RefrigData(RefrigNum).CpfgLowTempIndex, - state.dataFluidProps->RefrigData(RefrigNum).CpfgHighTempValue, - state.dataFluidProps->RefrigData(RefrigNum).CpfgHighTempIndex); + state.dataFluid->RefrigData(RefrigNum).CpfgLowTempValue, + state.dataFluid->RefrigData(RefrigNum).CpfgLowTempIndex, + state.dataFluid->RefrigData(RefrigNum).CpfgHighTempValue, + state.dataFluid->RefrigData(RefrigNum).CpfgHighTempIndex); print(state.files.debug, "Temperatures:"); - for (int Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumCpPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).CpTemps(Loop)); + for (int Loop = 1; Loop <= state.dataFluid->RefrigData(RefrigNum).NumCpPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", state.dataFluid->RefrigData(RefrigNum).CpTemps(Loop)); } print(state.files.debug, ",{:.2R}\n", - state.dataFluidProps->RefrigData(RefrigNum).CpTemps(state.dataFluidProps->RefrigData(RefrigNum).NumCpPoints)); + state.dataFluid->RefrigData(RefrigNum).CpTemps(state.dataFluid->RefrigData(RefrigNum).NumCpPoints)); print(state.files.debug, "Specific Heat Saturated Fluid/Gas:"); - for (int Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumCpPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).CpfgValues(Loop)); + for (int Loop = 1; Loop <= state.dataFluid->RefrigData(RefrigNum).NumCpPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", state.dataFluid->RefrigData(RefrigNum).CpfgValues(Loop)); } print(state.files.debug, ",{:.2R}\n", - state.dataFluidProps->RefrigData(RefrigNum).CpfgValues(state.dataFluidProps->RefrigData(RefrigNum).NumCpPoints)); + state.dataFluid->RefrigData(RefrigNum).CpfgValues(state.dataFluid->RefrigData(RefrigNum).NumCpPoints)); } - if (state.dataFluidProps->RefrigData(RefrigNum).NumRhoPoints > 0) { + if (state.dataFluid->RefrigData(RefrigNum).NumRhoPoints > 0) { print(state.files.debug, "Density Saturated Fluid Data points:,Low Temperature=,{:.2R},Index=,{},High Temperature=,{:.2R},Index=,{}\n", - state.dataFluidProps->RefrigData(RefrigNum).RhofLowTempValue, - state.dataFluidProps->RefrigData(RefrigNum).RhofLowTempIndex, - state.dataFluidProps->RefrigData(RefrigNum).RhofHighTempValue, - state.dataFluidProps->RefrigData(RefrigNum).RhofHighTempIndex); + state.dataFluid->RefrigData(RefrigNum).RhofLowTempValue, + state.dataFluid->RefrigData(RefrigNum).RhofLowTempIndex, + state.dataFluid->RefrigData(RefrigNum).RhofHighTempValue, + state.dataFluid->RefrigData(RefrigNum).RhofHighTempIndex); print(state.files.debug, "Temperatures:"); - for (int Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumRhoPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).RhoTemps(Loop)); + for (int Loop = 1; Loop <= state.dataFluid->RefrigData(RefrigNum).NumRhoPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", state.dataFluid->RefrigData(RefrigNum).RhoTemps(Loop)); } print(state.files.debug, ",{:.2R}", - state.dataFluidProps->RefrigData(RefrigNum).RhoTemps(state.dataFluidProps->RefrigData(RefrigNum).NumRhoPoints)); + state.dataFluid->RefrigData(RefrigNum).RhoTemps(state.dataFluid->RefrigData(RefrigNum).NumRhoPoints)); print(state.files.debug, "Density Saturated Fluid:"); - for (int Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumRhoPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).RhofValues(Loop)); + for (int Loop = 1; Loop <= state.dataFluid->RefrigData(RefrigNum).NumRhoPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", state.dataFluid->RefrigData(RefrigNum).RhofValues(Loop)); } print(state.files.debug, ",{:.2R}", - state.dataFluidProps->RefrigData(RefrigNum).RhofValues(state.dataFluidProps->RefrigData(RefrigNum).NumRhoPoints)); + state.dataFluid->RefrigData(RefrigNum).RhofValues(state.dataFluid->RefrigData(RefrigNum).NumRhoPoints)); print(state.files.debug, "Density Saturated Fluid/Gas Data points:,Low Temperature=,{:.2R},Index=,{},High Temperature=,{:.2R},Index=,{}\n", - state.dataFluidProps->RefrigData(RefrigNum).RhofgLowTempValue, - state.dataFluidProps->RefrigData(RefrigNum).RhofgLowTempIndex, - state.dataFluidProps->RefrigData(RefrigNum).RhofgHighTempValue, - state.dataFluidProps->RefrigData(RefrigNum).RhofgHighTempIndex); + state.dataFluid->RefrigData(RefrigNum).RhofgLowTempValue, + state.dataFluid->RefrigData(RefrigNum).RhofgLowTempIndex, + state.dataFluid->RefrigData(RefrigNum).RhofgHighTempValue, + state.dataFluid->RefrigData(RefrigNum).RhofgHighTempIndex); print(state.files.debug, "Temperatures:"); - for (int Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumRhoPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).RhoTemps(Loop)); + for (int Loop = 1; Loop <= state.dataFluid->RefrigData(RefrigNum).NumRhoPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", state.dataFluid->RefrigData(RefrigNum).RhoTemps(Loop)); } print(state.files.debug, ",{:.2R}\n", - state.dataFluidProps->RefrigData(RefrigNum).RhoTemps(state.dataFluidProps->RefrigData(RefrigNum).NumRhoPoints)); + state.dataFluid->RefrigData(RefrigNum).RhoTemps(state.dataFluid->RefrigData(RefrigNum).NumRhoPoints)); print(state.files.debug, "Density Saturated Fluid/Gas:"); - for (int Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumRhoPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).RhofgValues(Loop)); + for (int Loop = 1; Loop <= state.dataFluid->RefrigData(RefrigNum).NumRhoPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", state.dataFluid->RefrigData(RefrigNum).RhofgValues(Loop)); } print(state.files.debug, ",{:.2R}\n", - state.dataFluidProps->RefrigData(RefrigNum).RhofgValues(state.dataFluidProps->RefrigData(RefrigNum).NumRhoPoints)); + state.dataFluid->RefrigData(RefrigNum).RhofgValues(state.dataFluid->RefrigData(RefrigNum).NumRhoPoints)); } - if (state.dataFluidProps->RefrigData(RefrigNum).NumSuperTempPts > 0 && state.dataFluidProps->RefrigData(RefrigNum).NumSuperPressPts > 0) { + if (state.dataFluid->RefrigData(RefrigNum).NumSuperTempPts > 0 && state.dataFluid->RefrigData(RefrigNum).NumSuperPressPts > 0) { print(state.files.debug, "Superheated Gas Fluid Data points:,NumTemperaturePoints=,{},NumPressurePoints=,{}\n", - state.dataFluidProps->RefrigData(RefrigNum).NumSuperTempPts, - state.dataFluidProps->RefrigData(RefrigNum).NumSuperPressPts); + state.dataFluid->RefrigData(RefrigNum).NumSuperTempPts, + state.dataFluid->RefrigData(RefrigNum).NumSuperPressPts); print(state.files.debug, "Superheated Temperatures:"); - for (int Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumSuperTempPts - 1; ++Loop) { - print(state.files.debug, ",{:.3R}", state.dataFluidProps->RefrigData(RefrigNum).SHTemps(Loop)); + for (int Loop = 1; Loop <= state.dataFluid->RefrigData(RefrigNum).NumSuperTempPts - 1; ++Loop) { + print(state.files.debug, ",{:.3R}", state.dataFluid->RefrigData(RefrigNum).SHTemps(Loop)); } print(state.files.debug, ",{:.3R}\n", - state.dataFluidProps->RefrigData(RefrigNum).SHTemps(state.dataFluidProps->RefrigData(RefrigNum).NumSuperTempPts)); + state.dataFluid->RefrigData(RefrigNum).SHTemps(state.dataFluid->RefrigData(RefrigNum).NumSuperTempPts)); print(state.files.debug, "Superheated Pressures:"); - for (int Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumSuperPressPts - 1; ++Loop) { - print(state.files.debug, ",{:.3R}", state.dataFluidProps->RefrigData(RefrigNum).SHPress(Loop)); + for (int Loop = 1; Loop <= state.dataFluid->RefrigData(RefrigNum).NumSuperPressPts - 1; ++Loop) { + print(state.files.debug, ",{:.3R}", state.dataFluid->RefrigData(RefrigNum).SHPress(Loop)); } print(state.files.debug, ",{:.3R}\n", - state.dataFluidProps->RefrigData(RefrigNum).SHPress(state.dataFluidProps->RefrigData(RefrigNum).NumSuperPressPts)); - for (int Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumSuperPressPts; ++Loop) { - print(state.files.debug, "Superheated Pressure:#{}={:.2R}\n", Loop, state.dataFluidProps->RefrigData(RefrigNum).SHPress(Loop)); + state.dataFluid->RefrigData(RefrigNum).SHPress(state.dataFluid->RefrigData(RefrigNum).NumSuperPressPts)); + for (int Loop = 1; Loop <= state.dataFluid->RefrigData(RefrigNum).NumSuperPressPts; ++Loop) { + print(state.files.debug, "Superheated Pressure:#{}={:.2R}\n", Loop, state.dataFluid->RefrigData(RefrigNum).SHPress(Loop)); print(state.files.debug, "Enthalpy Superheated Gas:"); - for (int Loop1 = 1; Loop1 <= state.dataFluidProps->RefrigData(RefrigNum).NumSuperTempPts - 1; ++Loop1) { - print(state.files.debug, ",{:.3R}", state.dataFluidProps->RefrigData(RefrigNum).HshValues(Loop, Loop1)); + for (int Loop1 = 1; Loop1 <= state.dataFluid->RefrigData(RefrigNum).NumSuperTempPts - 1; ++Loop1) { + print(state.files.debug, ",{:.3R}", state.dataFluid->RefrigData(RefrigNum).HshValues(Loop, Loop1)); } print(state.files.debug, ",{:.3R}\n", - state.dataFluidProps->RefrigData(RefrigNum).HshValues(Loop, state.dataFluidProps->RefrigData(RefrigNum).NumSuperTempPts)); + state.dataFluid->RefrigData(RefrigNum).HshValues(Loop, state.dataFluid->RefrigData(RefrigNum).NumSuperTempPts)); } - for (int Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumSuperPressPts; ++Loop) { - print(state.files.debug, "Superheated Pressure:#{}={:.2R}\n", Loop, state.dataFluidProps->RefrigData(RefrigNum).SHPress(Loop)); + for (int Loop = 1; Loop <= state.dataFluid->RefrigData(RefrigNum).NumSuperPressPts; ++Loop) { + print(state.files.debug, "Superheated Pressure:#{}={:.2R}\n", Loop, state.dataFluid->RefrigData(RefrigNum).SHPress(Loop)); print(state.files.debug, "Density Superheated Gas:"); - for (int Loop1 = 1; Loop1 <= state.dataFluidProps->RefrigData(RefrigNum).NumSuperTempPts - 1; ++Loop1) { - print(state.files.debug, ",{:.3R}", state.dataFluidProps->RefrigData(RefrigNum).RhoshValues(Loop, Loop1)); + for (int Loop1 = 1; Loop1 <= state.dataFluid->RefrigData(RefrigNum).NumSuperTempPts - 1; ++Loop1) { + print(state.files.debug, ",{:.3R}", state.dataFluid->RefrigData(RefrigNum).RhoshValues(Loop, Loop1)); } print(state.files.debug, ",{:.3R}\n", - state.dataFluidProps->RefrigData(RefrigNum).RhoshValues(Loop, state.dataFluidProps->RefrigData(RefrigNum).NumSuperTempPts)); + state.dataFluid->RefrigData(RefrigNum).RhoshValues(Loop, state.dataFluid->RefrigData(RefrigNum).NumSuperTempPts)); } - for (int Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumSuperTempPts; ++Loop) { - print(state.files.debug, "Superheated Temperature:#{}={:.2R}\n", Loop, state.dataFluidProps->RefrigData(RefrigNum).SHTemps(Loop)); + for (int Loop = 1; Loop <= state.dataFluid->RefrigData(RefrigNum).NumSuperTempPts; ++Loop) { + print(state.files.debug, "Superheated Temperature:#{}={:.2R}\n", Loop, state.dataFluid->RefrigData(RefrigNum).SHTemps(Loop)); print(state.files.debug, "Enthalpy Superheated Gas:"); - for (int Loop1 = 1; Loop1 <= state.dataFluidProps->RefrigData(RefrigNum).NumSuperPressPts - 1; ++Loop1) { - print(state.files.debug, ",{:.3R}", state.dataFluidProps->RefrigData(RefrigNum).HshValues(Loop1, Loop)); + for (int Loop1 = 1; Loop1 <= state.dataFluid->RefrigData(RefrigNum).NumSuperPressPts - 1; ++Loop1) { + print(state.files.debug, ",{:.3R}", state.dataFluid->RefrigData(RefrigNum).HshValues(Loop1, Loop)); } print(state.files.debug, ",{:.3R}\n", - state.dataFluidProps->RefrigData(RefrigNum).HshValues(state.dataFluidProps->RefrigData(RefrigNum).NumSuperPressPts, Loop)); + state.dataFluid->RefrigData(RefrigNum).HshValues(state.dataFluid->RefrigData(RefrigNum).NumSuperPressPts, Loop)); } - for (int Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumSuperTempPts; ++Loop) { - print(state.files.debug, "Superheated Temperature:#{}={:.2R}\n", Loop, state.dataFluidProps->RefrigData(RefrigNum).SHTemps(Loop)); + for (int Loop = 1; Loop <= state.dataFluid->RefrigData(RefrigNum).NumSuperTempPts; ++Loop) { + print(state.files.debug, "Superheated Temperature:#{}={:.2R}\n", Loop, state.dataFluid->RefrigData(RefrigNum).SHTemps(Loop)); print(state.files.debug, "Density Superheated Gas:"); - for (int Loop1 = 1; Loop1 <= state.dataFluidProps->RefrigData(RefrigNum).NumSuperPressPts - 1; ++Loop1) { - print(state.files.debug, ",{:.3R}", state.dataFluidProps->RefrigData(RefrigNum).RhoshValues(Loop1, Loop)); + for (int Loop1 = 1; Loop1 <= state.dataFluid->RefrigData(RefrigNum).NumSuperPressPts - 1; ++Loop1) { + print(state.files.debug, ",{:.3R}", state.dataFluid->RefrigData(RefrigNum).RhoshValues(Loop1, Loop)); } print( state.files.debug, ",{:.3R}\n", - state.dataFluidProps->RefrigData(RefrigNum).RhoshValues(state.dataFluidProps->RefrigData(RefrigNum).NumSuperPressPts, Loop)); + state.dataFluid->RefrigData(RefrigNum).RhoshValues(state.dataFluid->RefrigData(RefrigNum).NumSuperPressPts, Loop)); } } @@ -5393,184 +5393,184 @@ namespace FluidProperties { // ============================================ // ========= Pressure from Temperatures - print(state.files.debug, "Refrigerant={} **** Results ****\n", state.dataFluidProps->RefrigData(RefrigNum).Name); - if (state.dataFluidProps->RefrigData(RefrigNum).NumPsPoints > 0) { + print(state.files.debug, "Refrigerant={} **** Results ****\n", state.dataFluid->RefrigData(RefrigNum).Name); + if (state.dataFluid->RefrigData(RefrigNum).NumPsPoints > 0) { print(state.files.debug, "Pressure Results at Temperatures:"); - print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).PsTemps(1) - incr); - for (int Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumPsPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).PsTemps(Loop)); + print(state.files.debug, ",{:.2R}", state.dataFluid->RefrigData(RefrigNum).PsTemps(1) - incr); + for (int Loop = 1; Loop <= state.dataFluid->RefrigData(RefrigNum).NumPsPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", state.dataFluid->RefrigData(RefrigNum).PsTemps(Loop)); Temperature = - state.dataFluidProps->RefrigData(RefrigNum).PsTemps(Loop) + - (state.dataFluidProps->RefrigData(RefrigNum).PsTemps(Loop + 1) - state.dataFluidProps->RefrigData(RefrigNum).PsTemps(Loop)) / + state.dataFluid->RefrigData(RefrigNum).PsTemps(Loop) + + (state.dataFluid->RefrigData(RefrigNum).PsTemps(Loop + 1) - state.dataFluid->RefrigData(RefrigNum).PsTemps(Loop)) / 2.0; print(state.files.debug, ",{:.2R}", Temperature); } print(state.files.debug, ",{:.2R}", - state.dataFluidProps->RefrigData(RefrigNum).PsTemps(state.dataFluidProps->RefrigData(RefrigNum).NumPsPoints)); + state.dataFluid->RefrigData(RefrigNum).PsTemps(state.dataFluid->RefrigData(RefrigNum).NumPsPoints)); print(state.files.debug, ",{:.2R}\n", - state.dataFluidProps->RefrigData(RefrigNum).PsTemps(state.dataFluidProps->RefrigData(RefrigNum).NumPsPoints) + incr); + state.dataFluid->RefrigData(RefrigNum).PsTemps(state.dataFluid->RefrigData(RefrigNum).NumPsPoints) + incr); print(state.files.debug, "Saturated Pressures:"); - Temperature = state.dataFluidProps->RefrigData(RefrigNum).PsTemps(1) - incr; - ReturnValue = GetSatPressureRefrig(state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, RefrigIndex, RoutineName); + Temperature = state.dataFluid->RefrigData(RefrigNum).PsTemps(1) - incr; + ReturnValue = GetSatPressureRefrig(state, state.dataFluid->RefrigData(RefrigNum).Name, Temperature, RefrigIndex, RoutineName); print(state.files.debug, ",{:.2R}", ReturnValue); - for (int Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumPsPoints - 1; ++Loop) { - Temperature = state.dataFluidProps->RefrigData(RefrigNum).PsTemps(Loop); + for (int Loop = 1; Loop <= state.dataFluid->RefrigData(RefrigNum).NumPsPoints - 1; ++Loop) { + Temperature = state.dataFluid->RefrigData(RefrigNum).PsTemps(Loop); ReturnValue = - GetSatPressureRefrig(state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, RefrigIndex, RoutineName); + GetSatPressureRefrig(state, state.dataFluid->RefrigData(RefrigNum).Name, Temperature, RefrigIndex, RoutineName); print(state.files.debug, ",{:.2R}", ReturnValue); Temperature = - state.dataFluidProps->RefrigData(RefrigNum).PsTemps(Loop) + - (state.dataFluidProps->RefrigData(RefrigNum).PsTemps(Loop + 1) - state.dataFluidProps->RefrigData(RefrigNum).PsTemps(Loop)) / + state.dataFluid->RefrigData(RefrigNum).PsTemps(Loop) + + (state.dataFluid->RefrigData(RefrigNum).PsTemps(Loop + 1) - state.dataFluid->RefrigData(RefrigNum).PsTemps(Loop)) / 2.0; ReturnValue = - GetSatPressureRefrig(state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, RefrigIndex, RoutineName); + GetSatPressureRefrig(state, state.dataFluid->RefrigData(RefrigNum).Name, Temperature, RefrigIndex, RoutineName); print(state.files.debug, ",{:.2R}", ReturnValue); } - Temperature = state.dataFluidProps->RefrigData(RefrigNum).PsTemps(state.dataFluidProps->RefrigData(RefrigNum).NumPsPoints); - ReturnValue = GetSatPressureRefrig(state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, RefrigIndex, RoutineName); + Temperature = state.dataFluid->RefrigData(RefrigNum).PsTemps(state.dataFluid->RefrigData(RefrigNum).NumPsPoints); + ReturnValue = GetSatPressureRefrig(state, state.dataFluid->RefrigData(RefrigNum).Name, Temperature, RefrigIndex, RoutineName); print(state.files.debug, ",{:.2R}", ReturnValue); - Temperature = state.dataFluidProps->RefrigData(RefrigNum).PsTemps(state.dataFluidProps->RefrigData(RefrigNum).NumPsPoints) + incr; - ReturnValue = GetSatPressureRefrig(state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, RefrigIndex, RoutineName); + Temperature = state.dataFluid->RefrigData(RefrigNum).PsTemps(state.dataFluid->RefrigData(RefrigNum).NumPsPoints) + incr; + ReturnValue = GetSatPressureRefrig(state, state.dataFluid->RefrigData(RefrigNum).Name, Temperature, RefrigIndex, RoutineName); print(state.files.debug, ",{:.2R}\n", ReturnValue); } // ========= Enthalpy from Temperatures - if (state.dataFluidProps->RefrigData(RefrigNum).NumHPoints > 0) { + if (state.dataFluid->RefrigData(RefrigNum).NumHPoints > 0) { print(state.files.debug, "Enthalpy Results at Temperatures:"); - print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).HTemps(1) - incr); - for (int Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumHPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).HTemps(Loop)); + print(state.files.debug, ",{:.2R}", state.dataFluid->RefrigData(RefrigNum).HTemps(1) - incr); + for (int Loop = 1; Loop <= state.dataFluid->RefrigData(RefrigNum).NumHPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", state.dataFluid->RefrigData(RefrigNum).HTemps(Loop)); Temperature = - state.dataFluidProps->RefrigData(RefrigNum).HTemps(Loop) + - (state.dataFluidProps->RefrigData(RefrigNum).HTemps(Loop + 1) - state.dataFluidProps->RefrigData(RefrigNum).HTemps(Loop)) / + state.dataFluid->RefrigData(RefrigNum).HTemps(Loop) + + (state.dataFluid->RefrigData(RefrigNum).HTemps(Loop + 1) - state.dataFluid->RefrigData(RefrigNum).HTemps(Loop)) / 2.0; print(state.files.debug, ",{:.2R}", Temperature); } print(state.files.debug, ",{:.2R}", - state.dataFluidProps->RefrigData(RefrigNum).HTemps(state.dataFluidProps->RefrigData(RefrigNum).NumHPoints)); + state.dataFluid->RefrigData(RefrigNum).HTemps(state.dataFluid->RefrigData(RefrigNum).NumHPoints)); print(state.files.debug, ",{:.2R}\n", - state.dataFluidProps->RefrigData(RefrigNum).HTemps(state.dataFluidProps->RefrigData(RefrigNum).NumHPoints) + incr); + state.dataFluid->RefrigData(RefrigNum).HTemps(state.dataFluid->RefrigData(RefrigNum).NumHPoints) + incr); print(state.files.debug, "Saturated Enthalpy:"); - Temperature = state.dataFluidProps->RefrigData(RefrigNum).HTemps(1) - incr; + Temperature = state.dataFluid->RefrigData(RefrigNum).HTemps(1) - incr; ReturnValue = - GetSatEnthalpyRefrig(state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); + GetSatEnthalpyRefrig(state, state.dataFluid->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); print(state.files.debug, ",{:.2R}", ReturnValue); - for (int Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumHPoints - 1; ++Loop) { - Temperature = state.dataFluidProps->RefrigData(RefrigNum).HTemps(Loop); + for (int Loop = 1; Loop <= state.dataFluid->RefrigData(RefrigNum).NumHPoints - 1; ++Loop) { + Temperature = state.dataFluid->RefrigData(RefrigNum).HTemps(Loop); ReturnValue = - GetSatEnthalpyRefrig(state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); + GetSatEnthalpyRefrig(state, state.dataFluid->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); print(state.files.debug, ",{:.2R}", ReturnValue); Temperature = - state.dataFluidProps->RefrigData(RefrigNum).HTemps(Loop) + - (state.dataFluidProps->RefrigData(RefrigNum).HTemps(Loop + 1) - state.dataFluidProps->RefrigData(RefrigNum).HTemps(Loop)) / + state.dataFluid->RefrigData(RefrigNum).HTemps(Loop) + + (state.dataFluid->RefrigData(RefrigNum).HTemps(Loop + 1) - state.dataFluid->RefrigData(RefrigNum).HTemps(Loop)) / 2.0; ReturnValue = - GetSatEnthalpyRefrig(state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); + GetSatEnthalpyRefrig(state, state.dataFluid->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); print(state.files.debug, ",{:.2R}", ReturnValue); } - Temperature = state.dataFluidProps->RefrigData(RefrigNum).HTemps(state.dataFluidProps->RefrigData(RefrigNum).NumHPoints); + Temperature = state.dataFluid->RefrigData(RefrigNum).HTemps(state.dataFluid->RefrigData(RefrigNum).NumHPoints); ReturnValue = - GetSatEnthalpyRefrig(state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); + GetSatEnthalpyRefrig(state, state.dataFluid->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); print(state.files.debug, ",{:.2R}", ReturnValue); - Temperature = state.dataFluidProps->RefrigData(RefrigNum).HTemps(state.dataFluidProps->RefrigData(RefrigNum).NumHPoints) + incr; + Temperature = state.dataFluid->RefrigData(RefrigNum).HTemps(state.dataFluid->RefrigData(RefrigNum).NumHPoints) + incr; ReturnValue = - GetSatEnthalpyRefrig(state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); + GetSatEnthalpyRefrig(state, state.dataFluid->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); print(state.files.debug, ",{:.2R}\n", ReturnValue); } // ========= Specific Heat from Temperatures - if (state.dataFluidProps->RefrigData(RefrigNum).NumCpPoints > 0) { + if (state.dataFluid->RefrigData(RefrigNum).NumCpPoints > 0) { print(state.files.debug, "Specific Heat Results at Temperatures:"); - print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).CpTemps(1) - incr); - for (int Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumCpPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).CpTemps(Loop)); + print(state.files.debug, ",{:.2R}", state.dataFluid->RefrigData(RefrigNum).CpTemps(1) - incr); + for (int Loop = 1; Loop <= state.dataFluid->RefrigData(RefrigNum).NumCpPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", state.dataFluid->RefrigData(RefrigNum).CpTemps(Loop)); Temperature = - state.dataFluidProps->RefrigData(RefrigNum).CpTemps(Loop) + - (state.dataFluidProps->RefrigData(RefrigNum).CpTemps(Loop + 1) - state.dataFluidProps->RefrigData(RefrigNum).CpTemps(Loop)) / + state.dataFluid->RefrigData(RefrigNum).CpTemps(Loop) + + (state.dataFluid->RefrigData(RefrigNum).CpTemps(Loop + 1) - state.dataFluid->RefrigData(RefrigNum).CpTemps(Loop)) / 2.0; print(state.files.debug, ",{:.2R}", Temperature); } print(state.files.debug, ",{:.2R}", - state.dataFluidProps->RefrigData(RefrigNum).CpTemps(state.dataFluidProps->RefrigData(RefrigNum).NumCpPoints)); + state.dataFluid->RefrigData(RefrigNum).CpTemps(state.dataFluid->RefrigData(RefrigNum).NumCpPoints)); print(state.files.debug, ",{:.2R}\n", - state.dataFluidProps->RefrigData(RefrigNum).CpTemps(state.dataFluidProps->RefrigData(RefrigNum).NumCpPoints) + incr); + state.dataFluid->RefrigData(RefrigNum).CpTemps(state.dataFluid->RefrigData(RefrigNum).NumCpPoints) + incr); print(state.files.debug, "Saturated Specific Heat:"); - Temperature = state.dataFluidProps->RefrigData(RefrigNum).CpTemps(1) - incr; + Temperature = state.dataFluid->RefrigData(RefrigNum).CpTemps(1) - incr; ReturnValue = - GetSatSpecificHeatRefrig(state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); + GetSatSpecificHeatRefrig(state, state.dataFluid->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); print(state.files.debug, ",{:.2R}", ReturnValue); - for (int Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumCpPoints - 1; ++Loop) { - Temperature = state.dataFluidProps->RefrigData(RefrigNum).CpTemps(Loop); + for (int Loop = 1; Loop <= state.dataFluid->RefrigData(RefrigNum).NumCpPoints - 1; ++Loop) { + Temperature = state.dataFluid->RefrigData(RefrigNum).CpTemps(Loop); ReturnValue = GetSatSpecificHeatRefrig( - state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); + state, state.dataFluid->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); print(state.files.debug, ",{:.2R}", ReturnValue); Temperature = - state.dataFluidProps->RefrigData(RefrigNum).CpTemps(Loop) + - (state.dataFluidProps->RefrigData(RefrigNum).CpTemps(Loop + 1) - state.dataFluidProps->RefrigData(RefrigNum).CpTemps(Loop)) / + state.dataFluid->RefrigData(RefrigNum).CpTemps(Loop) + + (state.dataFluid->RefrigData(RefrigNum).CpTemps(Loop + 1) - state.dataFluid->RefrigData(RefrigNum).CpTemps(Loop)) / 2.0; ReturnValue = GetSatSpecificHeatRefrig( - state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); + state, state.dataFluid->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); print(state.files.debug, ",{:.2R}", ReturnValue); } - Temperature = state.dataFluidProps->RefrigData(RefrigNum).CpTemps(state.dataFluidProps->RefrigData(RefrigNum).NumCpPoints); + Temperature = state.dataFluid->RefrigData(RefrigNum).CpTemps(state.dataFluid->RefrigData(RefrigNum).NumCpPoints); ReturnValue = - GetSatSpecificHeatRefrig(state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); + GetSatSpecificHeatRefrig(state, state.dataFluid->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); print(state.files.debug, ",{:.2R}", ReturnValue); - Temperature = state.dataFluidProps->RefrigData(RefrigNum).CpTemps(state.dataFluidProps->RefrigData(RefrigNum).NumCpPoints) + incr; + Temperature = state.dataFluid->RefrigData(RefrigNum).CpTemps(state.dataFluid->RefrigData(RefrigNum).NumCpPoints) + incr; ReturnValue = - GetSatSpecificHeatRefrig(state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); + GetSatSpecificHeatRefrig(state, state.dataFluid->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); print(state.files.debug, ",{:.2R}\n", ReturnValue); } // ========= Density from Temperatures - if (state.dataFluidProps->RefrigData(RefrigNum).NumRhoPoints > 0) { + if (state.dataFluid->RefrigData(RefrigNum).NumRhoPoints > 0) { print(state.files.debug, "Density Results at Temperatures:"); - print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).RhoTemps(1) - incr); - for (int Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumRhoPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).RhoTemps(Loop)); + print(state.files.debug, ",{:.2R}", state.dataFluid->RefrigData(RefrigNum).RhoTemps(1) - incr); + for (int Loop = 1; Loop <= state.dataFluid->RefrigData(RefrigNum).NumRhoPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", state.dataFluid->RefrigData(RefrigNum).RhoTemps(Loop)); Temperature = - state.dataFluidProps->RefrigData(RefrigNum).RhoTemps(Loop) + (state.dataFluidProps->RefrigData(RefrigNum).RhoTemps(Loop + 1) - - state.dataFluidProps->RefrigData(RefrigNum).RhoTemps(Loop)) / + state.dataFluid->RefrigData(RefrigNum).RhoTemps(Loop) + (state.dataFluid->RefrigData(RefrigNum).RhoTemps(Loop + 1) - + state.dataFluid->RefrigData(RefrigNum).RhoTemps(Loop)) / 2.0; print(state.files.debug, ",{:.2R}", Temperature); } print(state.files.debug, ",{:.2R}", - state.dataFluidProps->RefrigData(RefrigNum).RhoTemps(state.dataFluidProps->RefrigData(RefrigNum).NumRhoPoints)); + state.dataFluid->RefrigData(RefrigNum).RhoTemps(state.dataFluid->RefrigData(RefrigNum).NumRhoPoints)); print(state.files.debug, ",{:.2R}\n", - state.dataFluidProps->RefrigData(RefrigNum).RhoTemps(state.dataFluidProps->RefrigData(RefrigNum).NumRhoPoints) + incr); + state.dataFluid->RefrigData(RefrigNum).RhoTemps(state.dataFluid->RefrigData(RefrigNum).NumRhoPoints) + incr); print(state.files.debug, "Saturated Density:"); - Temperature = state.dataFluidProps->RefrigData(RefrigNum).RhoTemps(1) - incr; + Temperature = state.dataFluid->RefrigData(RefrigNum).RhoTemps(1) - incr; ReturnValue = - GetSatDensityRefrig(state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); + GetSatDensityRefrig(state, state.dataFluid->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); print(state.files.debug, ",{:.2R}", ReturnValue); - for (int Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumRhoPoints - 1; ++Loop) { - Temperature = state.dataFluidProps->RefrigData(RefrigNum).RhoTemps(Loop); + for (int Loop = 1; Loop <= state.dataFluid->RefrigData(RefrigNum).NumRhoPoints - 1; ++Loop) { + Temperature = state.dataFluid->RefrigData(RefrigNum).RhoTemps(Loop); ReturnValue = - GetSatDensityRefrig(state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); + GetSatDensityRefrig(state, state.dataFluid->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); print(state.files.debug, ",{:.2R}", ReturnValue); Temperature = - state.dataFluidProps->RefrigData(RefrigNum).RhoTemps(Loop) + (state.dataFluidProps->RefrigData(RefrigNum).RhoTemps(Loop + 1) - - state.dataFluidProps->RefrigData(RefrigNum).RhoTemps(Loop)) / + state.dataFluid->RefrigData(RefrigNum).RhoTemps(Loop) + (state.dataFluid->RefrigData(RefrigNum).RhoTemps(Loop + 1) - + state.dataFluid->RefrigData(RefrigNum).RhoTemps(Loop)) / 2.0; ReturnValue = - GetSatDensityRefrig(state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); + GetSatDensityRefrig(state, state.dataFluid->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); print(state.files.debug, ",{:.2R}", ReturnValue); } - Temperature = state.dataFluidProps->RefrigData(RefrigNum).RhoTemps(state.dataFluidProps->RefrigData(RefrigNum).NumRhoPoints); + Temperature = state.dataFluid->RefrigData(RefrigNum).RhoTemps(state.dataFluid->RefrigData(RefrigNum).NumRhoPoints); ReturnValue = - GetSatDensityRefrig(state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); + GetSatDensityRefrig(state, state.dataFluid->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); print(state.files.debug, ",{:.2R}", ReturnValue); - Temperature = state.dataFluidProps->RefrigData(RefrigNum).RhoTemps(state.dataFluidProps->RefrigData(RefrigNum).NumRhoPoints) + incr; + Temperature = state.dataFluid->RefrigData(RefrigNum).RhoTemps(state.dataFluid->RefrigData(RefrigNum).NumRhoPoints) + incr; ReturnValue = - GetSatDensityRefrig(state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); + GetSatDensityRefrig(state, state.dataFluid->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); print(state.files.debug, ",{:.2R}\n", ReturnValue); } } @@ -5611,15 +5611,15 @@ namespace FluidProperties { // error counters and dummy string bool ErrorFlag; // error flag for current call - if (state.dataFluidProps->GetInput) { + if (state.dataFluid->GetInput) { GetFluidPropertiesData(state); - state.dataFluidProps->GetInput = false; + state.dataFluid->GetInput = false; } RefrigNum = 0; - if (state.dataFluidProps->NumOfRefrigerants == 0) { + if (state.dataFluid->NumOfRefrigerants == 0) { ReportFatalRefrigerantErrors( - state, state.dataFluidProps->NumOfRefrigerants, RefrigNum, true, Refrigerant, "GetSatPressureRefrig", "properties", CalledFrom); + state, state.dataFluid->NumOfRefrigerants, RefrigNum, true, Refrigerant, "GetSatPressureRefrig", "properties", CalledFrom); } ErrorFlag = false; @@ -5631,11 +5631,11 @@ namespace FluidProperties { RefrigNum = FindRefrigerant(state, Refrigerant); if (RefrigNum == 0) { ReportFatalRefrigerantErrors( - state, state.dataFluidProps->NumOfRefrigerants, RefrigNum, true, Refrigerant, "GetSatPressureRefrig", "properties", CalledFrom); + state, state.dataFluid->NumOfRefrigerants, RefrigNum, true, Refrigerant, "GetSatPressureRefrig", "properties", CalledFrom); } RefrigIndex = RefrigNum; } - auto const &refrig(state.dataFluidProps->RefrigData(RefrigNum)); + auto const &refrig(state.dataFluid->RefrigData(RefrigNum)); // determine array indices for LoTempIndex = FindArrayIndex(Temperature, refrig.PsTemps, refrig.PsLowTempIndex, refrig.PsHighTempIndex); @@ -5657,13 +5657,13 @@ namespace FluidProperties { } if (!state.dataGlobal->WarmupFlag && ErrorFlag) { - ++state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatTempErrCount; + ++state.dataFluid->RefrigErrorTracking(RefrigNum).SatTempErrCount; // send warning - if (state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatTempErrCount <= state.dataFluidProps->RefrigerantErrorLimitTest) { + if (state.dataFluid->RefrigErrorTracking(RefrigNum).SatTempErrCount <= state.dataFluid->RefrigerantErrorLimitTest) { ShowSevereMessage(state, format("{}Saturation temperature is out of range for refrigerant [{}] supplied data: **", RoutineName, - state.dataFluidProps->RefrigErrorTracking(RefrigNum).Name)); + state.dataFluid->RefrigErrorTracking(RefrigNum).Name)); ShowContinueError(state, format("...Called From:{}, supplied data range=[{:.2R},{:.2R}]", CalledFrom, @@ -5675,8 +5675,8 @@ namespace FluidProperties { } ShowRecurringSevereErrorAtEnd(state, std::string{RoutineName} + "Saturation temperature is out of range for refrigerant [" + - state.dataFluidProps->RefrigErrorTracking(RefrigNum).Name + "] supplied data: **", - state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatTempErrIndex, + state.dataFluid->RefrigErrorTracking(RefrigNum).Name + "] supplied data: **", + state.dataFluid->RefrigErrorTracking(RefrigNum).SatTempErrIndex, Temperature, Temperature, _, @@ -5722,15 +5722,15 @@ namespace FluidProperties { // error counters and dummy string bool ErrorFlag; // error flag for current call - if (state.dataFluidProps->GetInput) { + if (state.dataFluid->GetInput) { GetFluidPropertiesData(state); - state.dataFluidProps->GetInput = false; + state.dataFluid->GetInput = false; } RefrigNum = 0; - if (state.dataFluidProps->NumOfRefrigerants == 0) { + if (state.dataFluid->NumOfRefrigerants == 0) { ReportFatalRefrigerantErrors( - state, state.dataFluidProps->NumOfRefrigerants, RefrigNum, true, Refrigerant, "GetSatTemperatureRefrig", "properties", CalledFrom); + state, state.dataFluid->NumOfRefrigerants, RefrigNum, true, Refrigerant, "GetSatTemperatureRefrig", "properties", CalledFrom); } ErrorFlag = false; @@ -5742,7 +5742,7 @@ namespace FluidProperties { RefrigNum = FindRefrigerant(state, Refrigerant); if (RefrigNum == 0) { ReportFatalRefrigerantErrors(state, - state.dataFluidProps->NumOfRefrigerants, + state.dataFluid->NumOfRefrigerants, RefrigNum, true, Refrigerant, @@ -5752,7 +5752,7 @@ namespace FluidProperties { } RefrigIndex = RefrigNum; } - auto const &refrig(state.dataFluidProps->RefrigData(RefrigNum)); + auto const &refrig(state.dataFluid->RefrigData(RefrigNum)); // get the array indices LoPresIndex = FindArrayIndex(Pressure, refrig.PsValues, refrig.PsLowPresIndex, refrig.PsHighPresIndex); @@ -5774,13 +5774,13 @@ namespace FluidProperties { } if (!state.dataGlobal->WarmupFlag && ErrorFlag) { - ++state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatPressErrCount; + ++state.dataFluid->RefrigErrorTracking(RefrigNum).SatPressErrCount; // send warning - if (state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatPressErrCount <= state.dataFluidProps->RefrigerantErrorLimitTest) { + if (state.dataFluid->RefrigErrorTracking(RefrigNum).SatPressErrCount <= state.dataFluid->RefrigerantErrorLimitTest) { ShowSevereMessage(state, format("{}Saturation pressure is out of range for refrigerant [{}] supplied data: **", RoutineName, - state.dataFluidProps->RefrigErrorTracking(RefrigNum).Name)); + state.dataFluid->RefrigErrorTracking(RefrigNum).Name)); ShowContinueError(state, format("...Called From:{}, supplied data range=[{:.0R},{:.0R}]", CalledFrom, @@ -5792,8 +5792,8 @@ namespace FluidProperties { } ShowRecurringSevereErrorAtEnd(state, std::string{RoutineName} + "Saturation pressure is out of range for refrigerant [" + - state.dataFluidProps->RefrigErrorTracking(RefrigNum).Name + "] supplied data: **", - state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatPressErrIndex, + state.dataFluid->RefrigErrorTracking(RefrigNum).Name + "] supplied data: **", + state.dataFluid->RefrigErrorTracking(RefrigNum).SatPressErrIndex, Pressure, Pressure, _, @@ -5834,15 +5834,15 @@ namespace FluidProperties { // FUNCTION LOCAL VARIABLE DECLARATIONS: int RefrigNum; // index for refrigerant under consideration - if (state.dataFluidProps->GetInput) { + if (state.dataFluid->GetInput) { GetFluidPropertiesData(state); - state.dataFluidProps->GetInput = false; + state.dataFluid->GetInput = false; } RefrigNum = 0; - if (state.dataFluidProps->NumOfRefrigerants == 0) { + if (state.dataFluid->NumOfRefrigerants == 0) { ReportFatalRefrigerantErrors( - state, state.dataFluidProps->NumOfRefrigerants, RefrigNum, true, Refrigerant, RoutineName, "properties", CalledFrom); + state, state.dataFluid->NumOfRefrigerants, RefrigNum, true, Refrigerant, RoutineName, "properties", CalledFrom); } if ((Quality < 0.0) || (Quality > 1.0)) { @@ -5858,11 +5858,11 @@ namespace FluidProperties { RefrigNum = FindRefrigerant(state, Refrigerant); if (RefrigNum == 0) { ReportFatalRefrigerantErrors( - state, state.dataFluidProps->NumOfRefrigerants, RefrigNum, true, Refrigerant, RoutineName, "properties", CalledFrom); + state, state.dataFluid->NumOfRefrigerants, RefrigNum, true, Refrigerant, RoutineName, "properties", CalledFrom); } RefrigIndex = RefrigNum; } - auto const &refrig(state.dataFluidProps->RefrigData(RefrigNum)); + auto const &refrig(state.dataFluid->RefrigData(RefrigNum)); // Apply linear interpolation function return GetInterpolatedSatProp( @@ -5907,15 +5907,15 @@ namespace FluidProperties { // error counters and dummy string - if (state.dataFluidProps->GetInput) { + if (state.dataFluid->GetInput) { GetFluidPropertiesData(state); - state.dataFluidProps->GetInput = false; + state.dataFluid->GetInput = false; } int RefrigNum = 0; - if (state.dataFluidProps->NumOfRefrigerants == 0) { + if (state.dataFluid->NumOfRefrigerants == 0) { ReportFatalRefrigerantErrors( - state, state.dataFluidProps->NumOfRefrigerants, RefrigNum, true, Refrigerant, "GetSatDensityRefrig", "properties", CalledFrom); + state, state.dataFluid->NumOfRefrigerants, RefrigNum, true, Refrigerant, "GetSatDensityRefrig", "properties", CalledFrom); } if ((Quality < 0.0) || (Quality > 1.0)) { @@ -5933,11 +5933,11 @@ namespace FluidProperties { RefrigNum = FindRefrigerant(state, Refrigerant); if (RefrigNum == 0) { ReportFatalRefrigerantErrors( - state, state.dataFluidProps->NumOfRefrigerants, RefrigNum, true, Refrigerant, "GetSatDensityRefrig", "properties", CalledFrom); + state, state.dataFluid->NumOfRefrigerants, RefrigNum, true, Refrigerant, "GetSatDensityRefrig", "properties", CalledFrom); } RefrigIndex = RefrigNum; } - auto const &refrig(state.dataFluidProps->RefrigData(RefrigNum)); + auto const &refrig(state.dataFluid->RefrigData(RefrigNum)); bool ErrorFlag = false; int LoTempIndex = FindArrayIndex(Temperature, refrig.RhoTemps, refrig.RhofLowTempIndex, refrig.RhofHighTempIndex); @@ -5980,13 +5980,13 @@ namespace FluidProperties { } if (!state.dataGlobal->WarmupFlag && ErrorFlag) { - ++state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatTempDensityErrCount; + ++state.dataFluid->RefrigErrorTracking(RefrigNum).SatTempDensityErrCount; // send warning - if (state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatTempDensityErrCount <= state.dataFluidProps->RefrigerantErrorLimitTest) { + if (state.dataFluid->RefrigErrorTracking(RefrigNum).SatTempDensityErrCount <= state.dataFluid->RefrigerantErrorLimitTest) { ShowSevereMessage(state, format("{}Saturation temperature is out of range for refrigerant [{}] supplied data: **", RoutineName, - state.dataFluidProps->RefrigErrorTracking(RefrigNum).Name)); + state.dataFluid->RefrigErrorTracking(RefrigNum).Name)); ShowContinueError(state, format("...Called From:{}, supplied data range=[{:.2R},{:.2R}]", CalledFrom, @@ -5998,8 +5998,8 @@ namespace FluidProperties { } ShowRecurringSevereErrorAtEnd(state, std::string{RoutineName} + "Saturation temperature is out of range for refrigerant [" + - state.dataFluidProps->RefrigErrorTracking(RefrigNum).Name + "] supplied data: **", - state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatTempDensityErrIndex, + state.dataFluid->RefrigErrorTracking(RefrigNum).Name + "] supplied data: **", + state.dataFluid->RefrigErrorTracking(RefrigNum).SatTempDensityErrIndex, Temperature, Temperature, _, @@ -6040,15 +6040,15 @@ namespace FluidProperties { // FUNCTION PARAMETER DEFINITIONS: static constexpr std::string_view RoutineName("GetSatSpecificHeatRefrig: "); - if (state.dataFluidProps->GetInput) { + if (state.dataFluid->GetInput) { GetFluidPropertiesData(state); - state.dataFluidProps->GetInput = false; + state.dataFluid->GetInput = false; } int RefrigNum = 0; - if (state.dataFluidProps->NumOfRefrigerants == 0) { + if (state.dataFluid->NumOfRefrigerants == 0) { ReportFatalRefrigerantErrors( - state, state.dataFluidProps->NumOfRefrigerants, RefrigNum, true, Refrigerant, "GetSatSpecificHeatRefrig", "properties", CalledFrom); + state, state.dataFluid->NumOfRefrigerants, RefrigNum, true, Refrigerant, "GetSatSpecificHeatRefrig", "properties", CalledFrom); } if ((Quality < 0.0) || (Quality > 1.0)) { @@ -6066,7 +6066,7 @@ namespace FluidProperties { RefrigNum = FindRefrigerant(state, Refrigerant); if (RefrigNum == 0) { ReportFatalRefrigerantErrors(state, - state.dataFluidProps->NumOfRefrigerants, + state.dataFluid->NumOfRefrigerants, RefrigNum, true, Refrigerant, @@ -6076,7 +6076,7 @@ namespace FluidProperties { } RefrigIndex = RefrigNum; } - auto const &refrig(state.dataFluidProps->RefrigData(RefrigNum)); + auto const &refrig(state.dataFluid->RefrigData(RefrigNum)); // Apply linear interpolation function ReturnValue = GetInterpolatedSatProp(state, @@ -6147,15 +6147,15 @@ namespace FluidProperties { int HiPressIndex; // high pressure index value // see if data is there - if (state.dataFluidProps->GetInput) { + if (state.dataFluid->GetInput) { GetFluidPropertiesData(state); - state.dataFluidProps->GetInput = false; + state.dataFluid->GetInput = false; } int RefrigNum = 0; - if (state.dataFluidProps->NumOfRefrigerants == 0) { + if (state.dataFluid->NumOfRefrigerants == 0) { ReportFatalRefrigerantErrors( - state, state.dataFluidProps->NumOfRefrigerants, RefrigNum, true, Refrigerant, RoutineNameNoColon, "properties", CalledFrom); + state, state.dataFluid->NumOfRefrigerants, RefrigNum, true, Refrigerant, RoutineNameNoColon, "properties", CalledFrom); } // error counters and dummy string @@ -6173,11 +6173,11 @@ namespace FluidProperties { RefrigNum = FindRefrigerant(state, Refrigerant); if (RefrigNum == 0) { ReportFatalRefrigerantErrors( - state, state.dataFluidProps->NumOfRefrigerants, RefrigNum, true, Refrigerant, RoutineNameNoColon, "properties", CalledFrom); + state, state.dataFluid->NumOfRefrigerants, RefrigNum, true, Refrigerant, RoutineNameNoColon, "properties", CalledFrom); } RefrigIndex = RefrigNum; } - auto const &refrig(state.dataFluidProps->RefrigData(RefrigNum)); + auto const &refrig(state.dataFluid->RefrigData(RefrigNum)); // low index value of Temperature from table int TempIndex = FindArrayIndex(Temperature, refrig.SHTemps, 1, refrig.NumSuperTempPts); @@ -6253,20 +6253,20 @@ namespace FluidProperties { // inside the saturation dome. Best thing we can do is return saturation value if ((refrig.HshValues(LoPressIndex, TempIndex) <= 0.0) && (refrig.HshValues(HiPressIndex, TempIndex) <= 0.0) && (refrig.HshValues(LoPressIndex, HiTempIndex) <= 0.0) && (refrig.HshValues(HiPressIndex, HiTempIndex) <= 0.0)) { - ++state.dataFluidProps->SatErrCountGetSupHeatEnthalpyRefrig; + ++state.dataFluid->SatErrCountGetSupHeatEnthalpyRefrig; // set return value ReturnValue = GetSatEnthalpyRefrig(state, Refrigerant, Temperature, 1.0, RefrigNum, fmt::format("{}{}", RoutineNameNoSpace, CalledFrom)); // send warning if (!state.dataGlobal->WarmupFlag) { - state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatSupEnthalpyErrCount += - state.dataFluidProps->SatErrCountGetSupHeatEnthalpyRefrig; + state.dataFluid->RefrigErrorTracking(RefrigNum).SatSupEnthalpyErrCount += + state.dataFluid->SatErrCountGetSupHeatEnthalpyRefrig; // send warning - if (state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatTempDensityErrCount <= state.dataFluidProps->RefrigerantErrorLimitTest) { + if (state.dataFluid->RefrigErrorTracking(RefrigNum).SatTempDensityErrCount <= state.dataFluid->RefrigerantErrorLimitTest) { ShowWarningMessage( state, format("{}Refrigerant [{}] is saturated at the given conditions, saturated enthalpy at given temperature returned. **", RoutineName, - state.dataFluidProps->RefrigErrorTracking(RefrigNum).Name)); + state.dataFluid->RefrigErrorTracking(RefrigNum).Name)); ShowContinueError(state, fmt::format("...Called From:{}", CalledFrom)); ShowContinueError(state, format("Refrigerant temperature = {:.2R}", Temperature)); ShowContinueError(state, format("Refrigerant pressure = {:.0R}", Pressure)); @@ -6275,9 +6275,9 @@ namespace FluidProperties { } ShowRecurringWarningErrorAtEnd(state, std::string{RoutineName} + "Refrigerant [" + - state.dataFluidProps->RefrigErrorTracking(RefrigNum).Name + + state.dataFluid->RefrigErrorTracking(RefrigNum).Name + "] saturated at the given conditions **", - state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatSupEnthalpyErrIndex, + state.dataFluid->RefrigErrorTracking(RefrigNum).SatSupEnthalpyErrIndex, Temperature, Temperature, _, @@ -6291,22 +6291,22 @@ namespace FluidProperties { // some checks... if (ErrCount > 0) { // send temp range error if flagged - state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatSupEnthalpyTempErrCount += CurTempRangeErrCount; - if (CurTempRangeErrCount > 0 && state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatSupEnthalpyTempErrCount <= - state.dataFluidProps->RefrigerantErrorLimitTest) { + state.dataFluid->RefrigErrorTracking(RefrigNum).SatSupEnthalpyTempErrCount += CurTempRangeErrCount; + if (CurTempRangeErrCount > 0 && state.dataFluid->RefrigErrorTracking(RefrigNum).SatSupEnthalpyTempErrCount <= + state.dataFluid->RefrigerantErrorLimitTest) { ShowWarningMessage(state, format("{}Refrigerant [{}] Temperature is out of range for superheated refrigerant enthalpy: values capped **", RoutineName, - state.dataFluidProps->RefrigErrorTracking(RefrigNum).Name)); + state.dataFluid->RefrigErrorTracking(RefrigNum).Name)); ShowContinueError(state, fmt::format(" Called From:{}", CalledFrom)); ShowContinueErrorTimeStamp(state, ""); } if (CurTempRangeErrCount > 0) { ShowRecurringWarningErrorAtEnd(state, std::string{RoutineName} + "Refrigerant [" + - state.dataFluidProps->RefrigErrorTracking(RefrigNum).Name + + state.dataFluid->RefrigErrorTracking(RefrigNum).Name + "] Temperature is out of range for superheated refrigerant enthalpy: values capped **", - state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatSupEnthalpyTempErrIndex, + state.dataFluid->RefrigErrorTracking(RefrigNum).SatSupEnthalpyTempErrIndex, Temperature, Temperature, _, @@ -6315,22 +6315,22 @@ namespace FluidProperties { } // send pressure range error if flagged - state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatSupEnthalpyPresErrCount += CurPresRangeErrCount; - if (CurPresRangeErrCount > 0 && state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatSupEnthalpyPresErrCount <= - state.dataFluidProps->RefrigerantErrorLimitTest) { + state.dataFluid->RefrigErrorTracking(RefrigNum).SatSupEnthalpyPresErrCount += CurPresRangeErrCount; + if (CurPresRangeErrCount > 0 && state.dataFluid->RefrigErrorTracking(RefrigNum).SatSupEnthalpyPresErrCount <= + state.dataFluid->RefrigerantErrorLimitTest) { ShowWarningMessage(state, format("{}Refrigerant [{}] Pressure is out of range for superheated refrigerant enthalpy: values capped **", RoutineName, - state.dataFluidProps->RefrigErrorTracking(RefrigNum).Name)); + state.dataFluid->RefrigErrorTracking(RefrigNum).Name)); ShowContinueError(state, fmt::format(" Called From:{}", CalledFrom)); ShowContinueErrorTimeStamp(state, ""); } if (CurPresRangeErrCount > 0) { ShowRecurringWarningErrorAtEnd(state, std::string{RoutineName} + "Refrigerant [" + - state.dataFluidProps->RefrigErrorTracking(RefrigNum).Name + + state.dataFluid->RefrigErrorTracking(RefrigNum).Name + "] Pressure is out of range for superheated refrigerant enthalpy: values capped **", - state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatSupEnthalpyPresErrIndex, + state.dataFluid->RefrigErrorTracking(RefrigNum).SatSupEnthalpyPresErrIndex, Pressure, Pressure, _, @@ -6398,15 +6398,15 @@ namespace FluidProperties { int LoEnthalpyIndex; // Index value of lower enthalpy from data int HiEnthalpyIndex; // Index value of higher enthalpy from data - if (state.dataFluidProps->GetInput) { + if (state.dataFluid->GetInput) { GetFluidPropertiesData(state); - state.dataFluidProps->GetInput = false; + state.dataFluid->GetInput = false; } int RefrigNum = 0; - if (state.dataFluidProps->NumOfRefrigerants == 0) { + if (state.dataFluid->NumOfRefrigerants == 0) { ReportFatalRefrigerantErrors( - state, state.dataFluidProps->NumOfRefrigerants, RefrigNum, true, Refrigerant, "GetSupHeatPressureRefrig", "properties", CalledFrom); + state, state.dataFluid->NumOfRefrigerants, RefrigNum, true, Refrigerant, "GetSupHeatPressureRefrig", "properties", CalledFrom); } // error counters and dummy string @@ -6424,7 +6424,7 @@ namespace FluidProperties { RefrigNum = FindRefrigerant(state, Refrigerant); if (RefrigNum == 0) { ReportFatalRefrigerantErrors(state, - state.dataFluidProps->NumOfRefrigerants, + state.dataFluid->NumOfRefrigerants, RefrigNum, true, Refrigerant, @@ -6434,7 +6434,7 @@ namespace FluidProperties { } RefrigIndex = RefrigNum; } - auto const &refrig(state.dataFluidProps->RefrigData(RefrigNum)); + auto const &refrig(state.dataFluid->RefrigData(RefrigNum)); // Index value of lower temperature from data int LoTempIndex = FindArrayIndex(Temperature, refrig.SHTemps, 1, refrig.NumSuperTempPts); @@ -6555,14 +6555,14 @@ namespace FluidProperties { // ** make error checks ** if (ErrCount > 0) { // send near saturation warning if flagged - state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatSupPressureErrCount += CurSatErrCount; + state.dataFluid->RefrigErrorTracking(RefrigNum).SatSupPressureErrCount += CurSatErrCount; // send warning - if (state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatSupPressureErrCount <= state.dataFluidProps->RefrigerantErrorLimitTest) { + if (state.dataFluid->RefrigErrorTracking(RefrigNum).SatSupPressureErrCount <= state.dataFluid->RefrigerantErrorLimitTest) { ShowSevereMessage(state, format("{}Refrigerant [{}] is saturated at the given enthalpy and temperature, saturated enthalpy at given " "temperature returned. **", RoutineName, - state.dataFluidProps->RefrigErrorTracking(RefrigNum).Name)); + state.dataFluid->RefrigErrorTracking(RefrigNum).Name)); ShowContinueError(state, fmt::format("...Called From:{}", CalledFrom)); ShowContinueError(state, format("Refrigerant temperature = {:.2R}", Temperature)); ShowContinueError(state, format("Refrigerant Enthalpy = {:.3R}", Enthalpy)); @@ -6572,9 +6572,9 @@ namespace FluidProperties { if (CurSatErrCount > 0) { ShowRecurringSevereErrorAtEnd(state, std::string{RoutineName} + "Refrigerant [" + - state.dataFluidProps->RefrigErrorTracking(RefrigNum).Name + + state.dataFluid->RefrigErrorTracking(RefrigNum).Name + "] saturated at the given enthalpy and temperature **", - state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatSupPressureErrIndex, + state.dataFluid->RefrigErrorTracking(RefrigNum).SatSupPressureErrIndex, ReturnValue, ReturnValue, _, @@ -6583,22 +6583,22 @@ namespace FluidProperties { } // send temp range error if flagged - state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatSupPressureTempErrCount += CurTempRangeErrCount; - if (CurTempRangeErrCount > 0 && state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatSupPressureTempErrCount <= - state.dataFluidProps->RefrigerantErrorLimitTest) { + state.dataFluid->RefrigErrorTracking(RefrigNum).SatSupPressureTempErrCount += CurTempRangeErrCount; + if (CurTempRangeErrCount > 0 && state.dataFluid->RefrigErrorTracking(RefrigNum).SatSupPressureTempErrCount <= + state.dataFluid->RefrigerantErrorLimitTest) { ShowWarningMessage(state, format("{}Refrigerant [{}] Temperature is out of range for superheated refrigerant pressure: values capped **", RoutineName, - state.dataFluidProps->RefrigErrorTracking(RefrigNum).Name)); + state.dataFluid->RefrigErrorTracking(RefrigNum).Name)); ShowContinueError(state, fmt::format(" Called From:{}", CalledFrom)); ShowContinueErrorTimeStamp(state, ""); } if (CurTempRangeErrCount > 0) { ShowRecurringWarningErrorAtEnd(state, std::string{RoutineName} + "Refrigerant [" + - state.dataFluidProps->RefrigErrorTracking(RefrigNum).Name + + state.dataFluid->RefrigErrorTracking(RefrigNum).Name + "] Temperature is out of range for superheated refrigerant pressure: values capped **", - state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatSupPressureTempErrIndex, + state.dataFluid->RefrigErrorTracking(RefrigNum).SatSupPressureTempErrIndex, Temperature, Temperature, _, @@ -6607,22 +6607,22 @@ namespace FluidProperties { } // send enthalpy range error if flagged - state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatSupPressureEnthErrCount += CurEnthalpyRangeErrCount; - if (CurEnthalpyRangeErrCount > 0 && state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatSupPressureEnthErrCount <= - state.dataFluidProps->RefrigerantErrorLimitTest) { + state.dataFluid->RefrigErrorTracking(RefrigNum).SatSupPressureEnthErrCount += CurEnthalpyRangeErrCount; + if (CurEnthalpyRangeErrCount > 0 && state.dataFluid->RefrigErrorTracking(RefrigNum).SatSupPressureEnthErrCount <= + state.dataFluid->RefrigerantErrorLimitTest) { ShowWarningMessage(state, format("{}Refrigerant [{}] Pressure is out of range for superheated refrigerant enthalpy: values capped **", RoutineName, - state.dataFluidProps->RefrigErrorTracking(RefrigNum).Name)); + state.dataFluid->RefrigErrorTracking(RefrigNum).Name)); ShowContinueError(state, fmt::format(" Called From:{}", CalledFrom)); ShowContinueErrorTimeStamp(state, ""); } if (CurEnthalpyRangeErrCount > 0) { ShowRecurringWarningErrorAtEnd(state, std::string{RoutineName} + "Refrigerant [" + - state.dataFluidProps->RefrigErrorTracking(RefrigNum).Name + + state.dataFluid->RefrigErrorTracking(RefrigNum).Name + "] Pressure is out of range for superheated refrigerant pressure: values capped **", - state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatSupPressureEnthErrIndex, + state.dataFluid->RefrigErrorTracking(RefrigNum).SatSupPressureEnthErrIndex, Enthalpy, Enthalpy, _, @@ -6674,15 +6674,15 @@ namespace FluidProperties { Real64 RefTSat; // Saturated temperature of the refrigerant. Used to check whether the refrigernat is in the superheat area Real64 Temp; // Temperature of the superheated refrigerant at the given enthalpy and pressure - if (state.dataFluidProps->GetInput) { + if (state.dataFluid->GetInput) { GetFluidPropertiesData(state); - state.dataFluidProps->GetInput = false; + state.dataFluid->GetInput = false; } RefrigNum = 0; - if (state.dataFluidProps->NumOfRefrigerants == 0) { + if (state.dataFluid->NumOfRefrigerants == 0) { ReportFatalRefrigerantErrors( - state, state.dataFluidProps->NumOfRefrigerants, RefrigNum, true, Refrigerant, "GetSupHeatPressureRefrig", "properties", CalledFrom); + state, state.dataFluid->NumOfRefrigerants, RefrigNum, true, Refrigerant, "GetSupHeatPressureRefrig", "properties", CalledFrom); } // Find which refrigerant (index) is being requested and then determine @@ -6694,7 +6694,7 @@ namespace FluidProperties { RefrigNum = FindRefrigerant(state, Refrigerant); if (RefrigNum == 0) { ReportFatalRefrigerantErrors(state, - state.dataFluidProps->NumOfRefrigerants, + state.dataFluid->NumOfRefrigerants, RefrigNum, true, Refrigerant, @@ -6704,7 +6704,7 @@ namespace FluidProperties { } RefrigIndex = RefrigNum; } - auto const &refrig(state.dataFluidProps->RefrigData(RefrigNum)); + auto const &refrig(state.dataFluid->RefrigData(RefrigNum)); // check temperature data range and attempt to cap if necessary RefTHigh = refrig.PsHighTempValue; @@ -6714,7 +6714,7 @@ namespace FluidProperties { ShowWarningMessage(state, format("{}Refrigerant [{}] temperature lower bound is out of range for superheated refrigerant: values capped **", RoutineName, - state.dataFluidProps->RefrigErrorTracking(RefrigNum).Name)); + state.dataFluid->RefrigErrorTracking(RefrigNum).Name)); ShowContinueError(state, fmt::format(" Called From:{}", CalledFrom)); ShowContinueErrorTimeStamp(state, ""); TempLow = RefTSat; @@ -6723,7 +6723,7 @@ namespace FluidProperties { ShowWarningMessage(state, format("{}Refrigerant [{}] temperature lower bound is out of range for superheated refrigerant: values capped **", RoutineName, - state.dataFluidProps->RefrigErrorTracking(RefrigNum).Name)); + state.dataFluid->RefrigErrorTracking(RefrigNum).Name)); ShowContinueError(state, fmt::format(" Called From:{}", CalledFrom)); ShowContinueErrorTimeStamp(state, ""); TempUp = RefTHigh; @@ -6732,7 +6732,7 @@ namespace FluidProperties { ShowWarningMessage(state, format("{}Refrigerant [{}] temperature lower bound is out of range for superheated refrigerant: values capped **", RoutineName, - state.dataFluidProps->RefrigErrorTracking(RefrigNum).Name)); + state.dataFluid->RefrigErrorTracking(RefrigNum).Name)); ShowContinueError(state, fmt::format(" Called From:{}", CalledFrom)); ShowContinueErrorTimeStamp(state, ""); TempLow = RefTSat; @@ -6760,7 +6760,7 @@ namespace FluidProperties { auto f = [&state, RefrigNum, Enthalpy, Pressure](Real64 Temp) { static constexpr std::string_view RoutineNameNoSpace("GetSupHeatTempRefrigResidual"); Real64 Enthalpy_Req = Enthalpy; - std::string const &Refrigerant = state.dataFluidProps->RefrigErrorTracking(RefrigNum).Name; + std::string const &Refrigerant = state.dataFluid->RefrigErrorTracking(RefrigNum).Name; if (std::abs(Enthalpy_Req) < 100.0) Enthalpy_Req = sign(100.0, Enthalpy_Req); int nonConstRefrigNum = RefrigNum; Real64 Enthalpy_Act = GetSupHeatEnthalpyRefrig(state, Refrigerant, Temp, Pressure, nonConstRefrigNum, RoutineNameNoSpace); @@ -6823,15 +6823,15 @@ namespace FluidProperties { int HiPressIndex; // high pressure index value // see if data is there - if (state.dataFluidProps->GetInput) { + if (state.dataFluid->GetInput) { GetFluidPropertiesData(state); - state.dataFluidProps->GetInput = false; + state.dataFluid->GetInput = false; } int RefrigNum = 0; - if (state.dataFluidProps->NumOfRefrigerants == 0) { + if (state.dataFluid->NumOfRefrigerants == 0) { ReportFatalRefrigerantErrors( - state, state.dataFluidProps->NumOfRefrigerants, RefrigNum, true, Refrigerant, RoutineName, "properties", CalledFrom); + state, state.dataFluid->NumOfRefrigerants, RefrigNum, true, Refrigerant, RoutineName, "properties", CalledFrom); } // initialize for this call error counters and dummy string @@ -6849,11 +6849,11 @@ namespace FluidProperties { RefrigNum = FindRefrigerant(state, Refrigerant); if (RefrigNum == 0) { ReportFatalRefrigerantErrors( - state, state.dataFluidProps->NumOfRefrigerants, RefrigNum, true, Refrigerant, RoutineName, "properties", CalledFrom); + state, state.dataFluid->NumOfRefrigerants, RefrigNum, true, Refrigerant, RoutineName, "properties", CalledFrom); } RefrigIndex = RefrigNum; } - auto const &refrig(state.dataFluidProps->RefrigData(RefrigNum)); + auto const &refrig(state.dataFluid->RefrigData(RefrigNum)); // check temperature data range and attempt to cap if necessary // low index value of Temperature from table @@ -6935,28 +6935,28 @@ namespace FluidProperties { // interpolate w.r.t. temperature ReturnValue = TempInterpRatio * DensityHigh + (1.0 - TempInterpRatio) * DensityLow; } else { // All data is at zero: we are completely inside the saturation dome. Best thing we can do is return saturation value - ++state.dataFluidProps->SatErrCountGetSupHeatDensityRefrig; + ++state.dataFluid->SatErrCountGetSupHeatDensityRefrig; // send warning - state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatSupDensityErrCount += state.dataFluidProps->SatErrCountGetSupHeatDensityRefrig; + state.dataFluid->RefrigErrorTracking(RefrigNum).SatSupDensityErrCount += state.dataFluid->SatErrCountGetSupHeatDensityRefrig; // send warning - if (state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatSupDensityErrCount <= state.dataFluidProps->RefrigerantErrorLimitTest) { + if (state.dataFluid->RefrigErrorTracking(RefrigNum).SatSupDensityErrCount <= state.dataFluid->RefrigerantErrorLimitTest) { ShowWarningMessage( state, format("{}: Refrigerant [{}] is saturated at the given conditions, saturated density at given temperature returned. **", RoutineName, - state.dataFluidProps->RefrigErrorTracking(RefrigNum).Name)); + state.dataFluid->RefrigErrorTracking(RefrigNum).Name)); ShowContinueError(state, fmt::format("...Called From:{}", CalledFrom)); ShowContinueError(state, format("Refrigerant temperature = {:.2R}", Temperature)); ShowContinueError(state, format("Refrigerant pressure = {:.0R}", Pressure)); ShowContinueError(state, format("Returned Density value = {:.3R}", saturated_density)); ShowContinueErrorTimeStamp(state, ""); } - if (state.dataFluidProps->SatErrCountGetSupHeatDensityRefrig > 0) { + if (state.dataFluid->SatErrCountGetSupHeatDensityRefrig > 0) { ShowRecurringWarningErrorAtEnd(state, std::string{RoutineName} + ": Refrigerant [" + - state.dataFluidProps->RefrigErrorTracking(RefrigNum).Name + + state.dataFluid->RefrigErrorTracking(RefrigNum).Name + "] saturated at the given conditions **", - state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatSupEnthalpyErrIndex, + state.dataFluid->RefrigErrorTracking(RefrigNum).SatSupEnthalpyErrIndex, Temperature, Temperature, _, @@ -6970,23 +6970,23 @@ namespace FluidProperties { // some checks... if (ErrCount > 0) { // send temp range error if flagged - state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatSupDensityTempErrCount += CurTempRangeErrCount; - if (CurTempRangeErrCount > 0 && state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatSupDensityTempErrCount <= - state.dataFluidProps->RefrigerantErrorLimitTest) { + state.dataFluid->RefrigErrorTracking(RefrigNum).SatSupDensityTempErrCount += CurTempRangeErrCount; + if (CurTempRangeErrCount > 0 && state.dataFluid->RefrigErrorTracking(RefrigNum).SatSupDensityTempErrCount <= + state.dataFluid->RefrigerantErrorLimitTest) { ShowWarningMessage( state, format("{}: Refrigerant [{}] Temperature is out of range for superheated refrigerant density: values capped **", RoutineName, - state.dataFluidProps->RefrigErrorTracking(RefrigNum).Name)); + state.dataFluid->RefrigErrorTracking(RefrigNum).Name)); ShowContinueError(state, fmt::format(" Called From:{}", CalledFrom)); ShowContinueErrorTimeStamp(state, ""); } if (CurTempRangeErrCount > 0) { ShowRecurringWarningErrorAtEnd(state, std::string{RoutineName} + ": Refrigerant [" + - state.dataFluidProps->RefrigErrorTracking(RefrigNum).Name + + state.dataFluid->RefrigErrorTracking(RefrigNum).Name + "] Temperature is out of range for superheated refrigerant density: values capped **", - state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatSupDensityTempErrIndex, + state.dataFluid->RefrigErrorTracking(RefrigNum).SatSupDensityTempErrIndex, Temperature, Temperature, _, @@ -6995,22 +6995,22 @@ namespace FluidProperties { } // send pressure range error if flagged - state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatSupDensityPresErrCount += CurPresRangeErrCount; - if (CurPresRangeErrCount > 0 && state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatSupDensityPresErrCount <= - state.dataFluidProps->RefrigerantErrorLimitTest) { + state.dataFluid->RefrigErrorTracking(RefrigNum).SatSupDensityPresErrCount += CurPresRangeErrCount; + if (CurPresRangeErrCount > 0 && state.dataFluid->RefrigErrorTracking(RefrigNum).SatSupDensityPresErrCount <= + state.dataFluid->RefrigerantErrorLimitTest) { ShowWarningMessage(state, format("{}: Refrigerant [{}] Pressure is out of range for superheated refrigerant density: values capped **", RoutineName, - state.dataFluidProps->RefrigErrorTracking(RefrigNum).Name)); + state.dataFluid->RefrigErrorTracking(RefrigNum).Name)); ShowContinueError(state, fmt::format(" Called From:{}", CalledFrom)); ShowContinueErrorTimeStamp(state, ""); } if (CurPresRangeErrCount > 0) { ShowRecurringWarningErrorAtEnd(state, std::string{RoutineName} + ": Refrigerant [" + - state.dataFluidProps->RefrigErrorTracking(RefrigNum).Name + + state.dataFluid->RefrigErrorTracking(RefrigNum).Name + "] Pressure is out of range for superheated refrigerant density: values capped **", - state.dataFluidProps->RefrigErrorTracking(RefrigNum).SatSupDensityPresErrIndex, + state.dataFluid->RefrigErrorTracking(RefrigNum).SatSupDensityPresErrIndex, Pressure, Pressure, _, @@ -7044,7 +7044,7 @@ namespace FluidProperties { DISABLE_WARNING_POP std::uint64_t const hash(T_tag & t_sh_cache_mask); - auto &cTsh(state.dataFluidProps->cached_t_sh[hash]); + auto &cTsh(state.dataFluid->cached_t_sh[hash]); if (cTsh.iT != T_tag) { cTsh.iT = T_tag; @@ -7092,16 +7092,16 @@ namespace FluidProperties { static constexpr std::string_view RoutineName("GetSpecificHeatGlycol: "); // Get the input if we haven't already - if (state.dataFluidProps->GetInput) { + if (state.dataFluid->GetInput) { GetFluidPropertiesData(state); - state.dataFluidProps->GetInput = false; + state.dataFluid->GetInput = false; } // If no glycols, no fluid properties can be evaluated int GlycolNum(0); - if (state.dataFluidProps->NumOfGlycols == 0) + if (state.dataFluid->NumOfGlycols == 0) ReportFatalGlycolErrors( - state, state.dataFluidProps->NumOfGlycols, GlycolNum, true, Glycol, "GetSpecificHeatGlycol", "specific heat", CalledFrom); + state, state.dataFluid->NumOfGlycols, GlycolNum, true, Glycol, "GetSpecificHeatGlycol", "specific heat", CalledFrom); // If glycol index has not yet been found for this fluid, find its value now if (GlycolIndex > 0) { @@ -7110,16 +7110,16 @@ namespace FluidProperties { GlycolNum = FindGlycol(state, Glycol); if (GlycolNum == 0) { ReportFatalGlycolErrors( - state, state.dataFluidProps->NumOfGlycols, GlycolNum, true, Glycol, "GetSpecificHeatGlycol", "specific heat", CalledFrom); + state, state.dataFluid->NumOfGlycols, GlycolNum, true, Glycol, "GetSpecificHeatGlycol", "specific heat", CalledFrom); } GlycolIndex = GlycolNum; } - auto const &glycol_data(state.dataFluidProps->GlycolData(GlycolIndex)); + auto const &glycol_data(state.dataFluid->GlycolData(GlycolIndex)); // If user didn't input data (shouldn't get this far, but just in case...), we can't find a value if (!glycol_data.CpDataPresent) { ReportFatalGlycolErrors(state, - state.dataFluidProps->NumOfGlycols, + state.dataFluid->NumOfGlycols, GlycolNum, glycol_data.CpDataPresent, Glycol, @@ -7131,9 +7131,9 @@ namespace FluidProperties { // Now determine the value of specific heat using interpolation if (Temperature < glycol_data.CpLowTempValue) { // Temperature too low if (!state.dataGlobal->WarmupFlag) { - state.dataFluidProps->LowTempLimitErrGetSpecificHeatGlycol_raw = - ++state.dataFluidProps->GlycolErrorTracking(GlycolIndex).SpecHeatLowErrCount; - if (state.dataFluidProps->LowTempLimitErrGetSpecificHeatGlycol_raw <= state.dataFluidProps->GlycolErrorLimitTest) { + state.dataFluid->LowTempLimitErrGetSpecificHeatGlycol_raw = + ++state.dataFluid->GlycolErrorTracking(GlycolIndex).SpecHeatLowErrCount; + if (state.dataFluid->LowTempLimitErrGetSpecificHeatGlycol_raw <= state.dataFluid->GlycolErrorLimitTest) { ShowWarningMessage(state, format("{}Temperature is out of range (too low) for fluid [{}] specific heat supplied values **", RoutineName, @@ -7149,7 +7149,7 @@ namespace FluidProperties { ShowRecurringWarningErrorAtEnd(state, std::string{RoutineName} + "Temperature out of range (too low) for fluid [" + glycol_data.Name + "] specific heat **", - state.dataFluidProps->GlycolErrorTracking(GlycolIndex).SpecHeatLowErrIndex, + state.dataFluid->GlycolErrorTracking(GlycolIndex).SpecHeatLowErrIndex, Temperature, Temperature, _, @@ -7159,9 +7159,9 @@ namespace FluidProperties { return glycol_data.CpValues(glycol_data.CpLowTempIndex); } else if (Temperature > glycol_data.CpHighTempValue) { // Temperature too high if (!state.dataGlobal->WarmupFlag) { - state.dataFluidProps->HighTempLimitErrGetSpecificHeatGlycol_raw = - ++state.dataFluidProps->GlycolErrorTracking(GlycolIndex).SpecHeatHighErrCount; - if (state.dataFluidProps->HighTempLimitErrGetSpecificHeatGlycol_raw <= state.dataFluidProps->GlycolErrorLimitTest) { + state.dataFluid->HighTempLimitErrGetSpecificHeatGlycol_raw = + ++state.dataFluid->GlycolErrorTracking(GlycolIndex).SpecHeatHighErrCount; + if (state.dataFluid->HighTempLimitErrGetSpecificHeatGlycol_raw <= state.dataFluid->GlycolErrorLimitTest) { ShowWarningMessage( state, format("{}Temperature is out of range (too high) for fluid [{}] specific heat **", RoutineName, glycol_data.Name)); ShowContinueError(state, @@ -7175,7 +7175,7 @@ namespace FluidProperties { ShowRecurringWarningErrorAtEnd(state, std::string{RoutineName} + "Temperature out of range (too high) for fluid [" + glycol_data.Name + "] specific heat **", - state.dataFluidProps->GlycolErrorTracking(GlycolIndex).SpecHeatHighErrIndex, + state.dataFluid->GlycolErrorTracking(GlycolIndex).SpecHeatHighErrIndex, Temperature, Temperature, _, @@ -7244,15 +7244,15 @@ namespace FluidProperties { bool HighErrorThisTime = false; // Get the input if we haven't already - if (state.dataFluidProps->GetInput) { + if (state.dataFluid->GetInput) { GetFluidPropertiesData(state); - state.dataFluidProps->GetInput = false; + state.dataFluid->GetInput = false; } // If no glycols, no fluid properties can be evaluated int GlycolNum = 0; - if (state.dataFluidProps->NumOfGlycols == 0) - ReportFatalGlycolErrors(state, state.dataFluidProps->NumOfGlycols, GlycolNum, true, Glycol, "GetDensityGlycol", "density", CalledFrom); + if (state.dataFluid->NumOfGlycols == 0) + ReportFatalGlycolErrors(state, state.dataFluid->NumOfGlycols, GlycolNum, true, Glycol, "GetDensityGlycol", "density", CalledFrom); // If glycol index has not yet been found for this fluid, find its value now if (GlycolIndex > 0) { @@ -7261,17 +7261,17 @@ namespace FluidProperties { GlycolNum = FindGlycol(state, Glycol); if (GlycolNum == 0) { ReportFatalGlycolErrors( - state, state.dataFluidProps->NumOfGlycols, GlycolNum, true, Glycol, "GetDensityGlycol", "density", CalledFrom); + state, state.dataFluid->NumOfGlycols, GlycolNum, true, Glycol, "GetDensityGlycol", "density", CalledFrom); } GlycolIndex = GlycolNum; } // If user didn't input data (shouldn't get this far, but just in case...), we can't find a value - if (!state.dataFluidProps->GlycolData(GlycolIndex).RhoDataPresent) { + if (!state.dataFluid->GlycolData(GlycolIndex).RhoDataPresent) { ReportFatalGlycolErrors(state, - state.dataFluidProps->NumOfGlycols, + state.dataFluid->NumOfGlycols, GlycolNum, - state.dataFluidProps->GlycolData(GlycolIndex).RhoDataPresent, + state.dataFluid->GlycolData(GlycolIndex).RhoDataPresent, Glycol, "GetDensityGlycol", "density", @@ -7279,25 +7279,25 @@ namespace FluidProperties { } // Now determine the value of specific heat using interpolation - if (Temperature < state.dataFluidProps->GlycolData(GlycolIndex).RhoLowTempValue) { // Temperature too low + if (Temperature < state.dataFluid->GlycolData(GlycolIndex).RhoLowTempValue) { // Temperature too low LowErrorThisTime = true; - ReturnValue = state.dataFluidProps->GlycolData(GlycolIndex).RhoValues(state.dataFluidProps->GlycolData(GlycolIndex).RhoLowTempIndex); - } else if (Temperature > state.dataFluidProps->GlycolData(GlycolIndex).RhoHighTempValue) { // Temperature too high + ReturnValue = state.dataFluid->GlycolData(GlycolIndex).RhoValues(state.dataFluid->GlycolData(GlycolIndex).RhoLowTempIndex); + } else if (Temperature > state.dataFluid->GlycolData(GlycolIndex).RhoHighTempValue) { // Temperature too high HighErrorThisTime = true; - ReturnValue = state.dataFluidProps->GlycolData(GlycolIndex).RhoValues(state.dataFluidProps->GlycolData(GlycolIndex).RhoHighTempIndex); + ReturnValue = state.dataFluid->GlycolData(GlycolIndex).RhoValues(state.dataFluid->GlycolData(GlycolIndex).RhoHighTempIndex); } else { // Temperature somewhere between the lowest and highest value - ReturnValue = state.dataFluidProps->GlycolData(GlycolIndex).RhoValues(state.dataFluidProps->GlycolData(GlycolIndex).RhoLowTempIndex); + ReturnValue = state.dataFluid->GlycolData(GlycolIndex).RhoValues(state.dataFluid->GlycolData(GlycolIndex).RhoLowTempIndex); // bracket is temp > low, <= high (for interpolation - for (int Loop = state.dataFluidProps->GlycolData(GlycolIndex).RhoLowTempIndex + 1; - Loop <= state.dataFluidProps->GlycolData(GlycolIndex).RhoHighTempIndex; + for (int Loop = state.dataFluid->GlycolData(GlycolIndex).RhoLowTempIndex + 1; + Loop <= state.dataFluid->GlycolData(GlycolIndex).RhoHighTempIndex; ++Loop) { - if (Temperature > state.dataFluidProps->GlycolData(GlycolIndex).RhoTemps(Loop)) continue; + if (Temperature > state.dataFluid->GlycolData(GlycolIndex).RhoTemps(Loop)) continue; ReturnValue = GetInterpValue(state, Temperature, - state.dataFluidProps->GlycolData(GlycolIndex).RhoTemps(Loop - 1), - state.dataFluidProps->GlycolData(GlycolIndex).RhoTemps(Loop), - state.dataFluidProps->GlycolData(GlycolIndex).RhoValues(Loop - 1), - state.dataFluidProps->GlycolData(GlycolIndex).RhoValues(Loop)); + state.dataFluid->GlycolData(GlycolIndex).RhoTemps(Loop - 1), + state.dataFluid->GlycolData(GlycolIndex).RhoTemps(Loop), + state.dataFluid->GlycolData(GlycolIndex).RhoValues(Loop - 1), + state.dataFluid->GlycolData(GlycolIndex).RhoValues(Loop)); break; // DO loop } } @@ -7306,32 +7306,32 @@ namespace FluidProperties { if (!state.dataGlobal->WarmupFlag) { if (LowErrorThisTime) { - ++state.dataFluidProps->GlycolErrorTracking(GlycolIndex).DensityLowErrCount; - state.dataFluidProps->LowTempLimitErrGetDensityGlycol = state.dataFluidProps->GlycolErrorTracking(GlycolIndex).DensityLowErrCount; + ++state.dataFluid->GlycolErrorTracking(GlycolIndex).DensityLowErrCount; + state.dataFluid->LowTempLimitErrGetDensityGlycol = state.dataFluid->GlycolErrorTracking(GlycolIndex).DensityLowErrCount; } if (HighErrorThisTime) { - ++state.dataFluidProps->GlycolErrorTracking(GlycolIndex).DensityHighErrCount; - state.dataFluidProps->HighTempLimitErrGetDensityGlycol = state.dataFluidProps->GlycolErrorTracking(GlycolIndex).DensityHighErrCount; + ++state.dataFluid->GlycolErrorTracking(GlycolIndex).DensityHighErrCount; + state.dataFluid->HighTempLimitErrGetDensityGlycol = state.dataFluid->GlycolErrorTracking(GlycolIndex).DensityHighErrCount; } - if ((LowErrorThisTime) && (state.dataFluidProps->LowTempLimitErrGetDensityGlycol <= state.dataFluidProps->GlycolErrorLimitTest)) { + if ((LowErrorThisTime) && (state.dataFluid->LowTempLimitErrGetDensityGlycol <= state.dataFluid->GlycolErrorLimitTest)) { ShowWarningMessage(state, format("{}Temperature is out of range (too low) for fluid [{}] density **", RoutineName, - state.dataFluidProps->GlycolData(GlycolIndex).Name)); + state.dataFluid->GlycolData(GlycolIndex).Name)); ShowContinueError(state, format("..Called From:{},Temperature=[{:.2R}], supplied data range=[{:.2R},{:.2R}]", CalledFrom, Temperature, - state.dataFluidProps->GlycolData(GlycolIndex).RhoLowTempValue, - state.dataFluidProps->GlycolData(GlycolIndex).RhoHighTempValue)); + state.dataFluid->GlycolData(GlycolIndex).RhoLowTempValue, + state.dataFluid->GlycolData(GlycolIndex).RhoHighTempValue)); ShowContinueErrorTimeStamp(state, ""); } if (LowErrorThisTime) { ShowRecurringWarningErrorAtEnd(state, std::string{RoutineName} + "Temperature out of range (too low) for fluid [" + - state.dataFluidProps->GlycolData(GlycolIndex).Name + "] density **", - state.dataFluidProps->GlycolErrorTracking(GlycolIndex).DensityLowErrIndex, + state.dataFluid->GlycolData(GlycolIndex).Name + "] density **", + state.dataFluid->GlycolErrorTracking(GlycolIndex).DensityLowErrIndex, Temperature, Temperature, _, @@ -7339,24 +7339,24 @@ namespace FluidProperties { "{C}"); } - if ((HighErrorThisTime) && (state.dataFluidProps->HighTempLimitErrGetDensityGlycol <= state.dataFluidProps->GlycolErrorLimitTest)) { + if ((HighErrorThisTime) && (state.dataFluid->HighTempLimitErrGetDensityGlycol <= state.dataFluid->GlycolErrorLimitTest)) { ShowWarningMessage(state, format("{}Temperature is out of range (too high) for fluid [{}] density **", RoutineName, - state.dataFluidProps->GlycolData(GlycolIndex).Name)); + state.dataFluid->GlycolData(GlycolIndex).Name)); ShowContinueError(state, format("..Called From:{},Temperature=[{:.2R}], supplied data range=[{:.2R},{:.2R}]", CalledFrom, Temperature, - state.dataFluidProps->GlycolData(GlycolIndex).RhoLowTempValue, - state.dataFluidProps->GlycolData(GlycolIndex).RhoHighTempValue)); + state.dataFluid->GlycolData(GlycolIndex).RhoLowTempValue, + state.dataFluid->GlycolData(GlycolIndex).RhoHighTempValue)); ShowContinueErrorTimeStamp(state, ""); } if (HighErrorThisTime) { ShowRecurringWarningErrorAtEnd(state, std::string{RoutineName} + "Temperature out of range (too high) for fluid [" + - state.dataFluidProps->GlycolData(GlycolIndex).Name + "] density **", - state.dataFluidProps->GlycolErrorTracking(GlycolIndex).DensityHighErrIndex, + state.dataFluid->GlycolData(GlycolIndex).Name + "] density **", + state.dataFluid->GlycolErrorTracking(GlycolIndex).DensityHighErrIndex, Temperature, Temperature, _, @@ -7407,16 +7407,16 @@ namespace FluidProperties { bool HighErrorThisTime = false; // Get the input if we haven't already - if (state.dataFluidProps->GetInput) { + if (state.dataFluid->GetInput) { GetFluidPropertiesData(state); - state.dataFluidProps->GetInput = false; + state.dataFluid->GetInput = false; } // If no glycols, no fluid properties can be evaluated int GlycolNum = 0; - if (state.dataFluidProps->NumOfGlycols == 0) + if (state.dataFluid->NumOfGlycols == 0) ReportFatalGlycolErrors( - state, state.dataFluidProps->NumOfGlycols, GlycolNum, true, Glycol, "GetConductivityGlycol", "conductivity", CalledFrom); + state, state.dataFluid->NumOfGlycols, GlycolNum, true, Glycol, "GetConductivityGlycol", "conductivity", CalledFrom); // If glycol index has not yet been found for this fluid, find its value now if (GlycolIndex > 0) { @@ -7425,17 +7425,17 @@ namespace FluidProperties { GlycolNum = FindGlycol(state, Glycol); if (GlycolNum == 0) { ReportFatalGlycolErrors( - state, state.dataFluidProps->NumOfGlycols, GlycolNum, true, Glycol, "GetConductivityGlycol", "conductivity", CalledFrom); + state, state.dataFluid->NumOfGlycols, GlycolNum, true, Glycol, "GetConductivityGlycol", "conductivity", CalledFrom); } GlycolIndex = GlycolNum; } // If user didn't input data (shouldn't get this far, but just in case...), we can't find a value - if (!state.dataFluidProps->GlycolData(GlycolIndex).CondDataPresent) { + if (!state.dataFluid->GlycolData(GlycolIndex).CondDataPresent) { ReportFatalGlycolErrors(state, - state.dataFluidProps->NumOfGlycols, + state.dataFluid->NumOfGlycols, GlycolNum, - state.dataFluidProps->GlycolData(GlycolIndex).CondDataPresent, + state.dataFluid->GlycolData(GlycolIndex).CondDataPresent, Glycol, "GetConductivityGlycol", "conductivity", @@ -7443,25 +7443,25 @@ namespace FluidProperties { } // Now determine the value of specific heat using interpolation - if (Temperature < state.dataFluidProps->GlycolData(GlycolIndex).CondLowTempValue) { // Temperature too low + if (Temperature < state.dataFluid->GlycolData(GlycolIndex).CondLowTempValue) { // Temperature too low LowErrorThisTime = true; - ReturnValue = state.dataFluidProps->GlycolData(GlycolIndex).CondValues(state.dataFluidProps->GlycolData(GlycolIndex).CondLowTempIndex); - } else if (Temperature > state.dataFluidProps->GlycolData(GlycolIndex).CondHighTempValue) { // Temperature too high + ReturnValue = state.dataFluid->GlycolData(GlycolIndex).CondValues(state.dataFluid->GlycolData(GlycolIndex).CondLowTempIndex); + } else if (Temperature > state.dataFluid->GlycolData(GlycolIndex).CondHighTempValue) { // Temperature too high HighErrorThisTime = true; - ReturnValue = state.dataFluidProps->GlycolData(GlycolIndex).CondValues(state.dataFluidProps->GlycolData(GlycolIndex).CondHighTempIndex); + ReturnValue = state.dataFluid->GlycolData(GlycolIndex).CondValues(state.dataFluid->GlycolData(GlycolIndex).CondHighTempIndex); } else { // Temperature somewhere between the lowest and highest value - ReturnValue = state.dataFluidProps->GlycolData(GlycolIndex).CondValues(state.dataFluidProps->GlycolData(GlycolIndex).CondLowTempIndex); + ReturnValue = state.dataFluid->GlycolData(GlycolIndex).CondValues(state.dataFluid->GlycolData(GlycolIndex).CondLowTempIndex); // bracket is temp > low, <= high (for interpolation - for (int Loop = state.dataFluidProps->GlycolData(GlycolIndex).CondLowTempIndex + 1; - Loop <= state.dataFluidProps->GlycolData(GlycolIndex).CondHighTempIndex; + for (int Loop = state.dataFluid->GlycolData(GlycolIndex).CondLowTempIndex + 1; + Loop <= state.dataFluid->GlycolData(GlycolIndex).CondHighTempIndex; ++Loop) { - if (Temperature > state.dataFluidProps->GlycolData(GlycolIndex).CondTemps(Loop)) continue; + if (Temperature > state.dataFluid->GlycolData(GlycolIndex).CondTemps(Loop)) continue; ReturnValue = GetInterpValue(state, Temperature, - state.dataFluidProps->GlycolData(GlycolIndex).CondTemps(Loop - 1), - state.dataFluidProps->GlycolData(GlycolIndex).CondTemps(Loop), - state.dataFluidProps->GlycolData(GlycolIndex).CondValues(Loop - 1), - state.dataFluidProps->GlycolData(GlycolIndex).CondValues(Loop)); + state.dataFluid->GlycolData(GlycolIndex).CondTemps(Loop - 1), + state.dataFluid->GlycolData(GlycolIndex).CondTemps(Loop), + state.dataFluid->GlycolData(GlycolIndex).CondValues(Loop - 1), + state.dataFluid->GlycolData(GlycolIndex).CondValues(Loop)); break; // DO loop } } @@ -7470,34 +7470,34 @@ namespace FluidProperties { if (!state.dataGlobal->WarmupFlag) { if (LowErrorThisTime) { - ++state.dataFluidProps->GlycolErrorTracking(GlycolIndex).ConductivityLowErrCount; - state.dataFluidProps->LowTempLimitErrGetConductivityGlycol = - state.dataFluidProps->GlycolErrorTracking(GlycolIndex).ConductivityLowErrCount; + ++state.dataFluid->GlycolErrorTracking(GlycolIndex).ConductivityLowErrCount; + state.dataFluid->LowTempLimitErrGetConductivityGlycol = + state.dataFluid->GlycolErrorTracking(GlycolIndex).ConductivityLowErrCount; } if (HighErrorThisTime) { - ++state.dataFluidProps->GlycolErrorTracking(GlycolIndex).ConductivityHighErrCount; - state.dataFluidProps->HighTempLimitErrGetConductivityGlycol = - state.dataFluidProps->GlycolErrorTracking(GlycolIndex).ConductivityHighErrCount; + ++state.dataFluid->GlycolErrorTracking(GlycolIndex).ConductivityHighErrCount; + state.dataFluid->HighTempLimitErrGetConductivityGlycol = + state.dataFluid->GlycolErrorTracking(GlycolIndex).ConductivityHighErrCount; } - if ((LowErrorThisTime) && (state.dataFluidProps->LowTempLimitErrGetConductivityGlycol <= state.dataFluidProps->GlycolErrorLimitTest)) { + if ((LowErrorThisTime) && (state.dataFluid->LowTempLimitErrGetConductivityGlycol <= state.dataFluid->GlycolErrorLimitTest)) { ShowWarningMessage(state, format("{}Temperature is out of range (too low) for fluid [{}] conductivity **", RoutineName, - state.dataFluidProps->GlycolData(GlycolIndex).Name)); + state.dataFluid->GlycolData(GlycolIndex).Name)); ShowContinueError(state, format("..Called From:{},Temperature=[{:.2R}], supplied data range=[{:.2R},{:.2R}]", CalledFrom, Temperature, - state.dataFluidProps->GlycolData(GlycolIndex).CondLowTempValue, - state.dataFluidProps->GlycolData(GlycolIndex).CondHighTempValue)); + state.dataFluid->GlycolData(GlycolIndex).CondLowTempValue, + state.dataFluid->GlycolData(GlycolIndex).CondHighTempValue)); ShowContinueErrorTimeStamp(state, ""); } if (LowErrorThisTime) { ShowRecurringWarningErrorAtEnd(state, std::string{RoutineName} + "Temperature out of range (too low) for fluid [" + - state.dataFluidProps->GlycolData(GlycolIndex).Name + "] conductivity **", - state.dataFluidProps->GlycolErrorTracking(GlycolIndex).ConductivityLowErrIndex, + state.dataFluid->GlycolData(GlycolIndex).Name + "] conductivity **", + state.dataFluid->GlycolErrorTracking(GlycolIndex).ConductivityLowErrIndex, Temperature, Temperature, _, @@ -7505,24 +7505,24 @@ namespace FluidProperties { "{C}"); } - if ((HighErrorThisTime) && (state.dataFluidProps->HighTempLimitErrGetConductivityGlycol <= state.dataFluidProps->GlycolErrorLimitTest)) { + if ((HighErrorThisTime) && (state.dataFluid->HighTempLimitErrGetConductivityGlycol <= state.dataFluid->GlycolErrorLimitTest)) { ShowWarningMessage(state, format("{}Temperature is out of range (too high) for fluid [{}] conductivity **", RoutineName, - state.dataFluidProps->GlycolData(GlycolIndex).Name)); + state.dataFluid->GlycolData(GlycolIndex).Name)); ShowContinueError(state, format("..Called From:{},Temperature=[{:.2R}], supplied data range=[{:.2R},{:.2R}]", CalledFrom, Temperature, - state.dataFluidProps->GlycolData(GlycolIndex).CondLowTempValue, - state.dataFluidProps->GlycolData(GlycolIndex).CondHighTempValue)); + state.dataFluid->GlycolData(GlycolIndex).CondLowTempValue, + state.dataFluid->GlycolData(GlycolIndex).CondHighTempValue)); ShowContinueErrorTimeStamp(state, ""); } if (HighErrorThisTime) { ShowRecurringWarningErrorAtEnd(state, std::string{RoutineName} + "Temperature out of range (too high) for fluid [" + - state.dataFluidProps->GlycolData(GlycolIndex).Name + "] conductivity **", - state.dataFluidProps->GlycolErrorTracking(GlycolIndex).ConductivityHighErrIndex, + state.dataFluid->GlycolData(GlycolIndex).Name + "] conductivity **", + state.dataFluid->GlycolErrorTracking(GlycolIndex).ConductivityHighErrIndex, Temperature, Temperature, _, @@ -7573,16 +7573,16 @@ namespace FluidProperties { bool HighErrorThisTime = false; // Get the input if we haven't already - if (state.dataFluidProps->GetInput) { + if (state.dataFluid->GetInput) { GetFluidPropertiesData(state); - state.dataFluidProps->GetInput = false; + state.dataFluid->GetInput = false; } // If no glycols, no fluid properties can be evaluated int GlycolNum = 0; - if (state.dataFluidProps->NumOfGlycols == 0) + if (state.dataFluid->NumOfGlycols == 0) ReportFatalGlycolErrors( - state, state.dataFluidProps->NumOfGlycols, GlycolNum, true, Glycol, "GetViscosityGlycol", "viscosity", CalledFrom); + state, state.dataFluid->NumOfGlycols, GlycolNum, true, Glycol, "GetViscosityGlycol", "viscosity", CalledFrom); // If glycol index has not yet been found for this fluid, find its value now if (GlycolIndex > 0) { @@ -7591,17 +7591,17 @@ namespace FluidProperties { GlycolNum = FindGlycol(state, Glycol); if (GlycolNum == 0) { ReportFatalGlycolErrors( - state, state.dataFluidProps->NumOfGlycols, GlycolNum, true, Glycol, "GetViscosityGlycol", "viscosity", CalledFrom); + state, state.dataFluid->NumOfGlycols, GlycolNum, true, Glycol, "GetViscosityGlycol", "viscosity", CalledFrom); } GlycolIndex = GlycolNum; } // If user didn't input data (shouldn't get this far, but just in case...), we can't find a value - if (!state.dataFluidProps->GlycolData(GlycolIndex).ViscDataPresent) { + if (!state.dataFluid->GlycolData(GlycolIndex).ViscDataPresent) { ReportFatalGlycolErrors(state, - state.dataFluidProps->NumOfGlycols, + state.dataFluid->NumOfGlycols, GlycolNum, - state.dataFluidProps->GlycolData(GlycolIndex).ViscDataPresent, + state.dataFluid->GlycolData(GlycolIndex).ViscDataPresent, Glycol, "GetViscosityGlycol", "viscosity", @@ -7609,25 +7609,25 @@ namespace FluidProperties { } // Now determine the value of specific heat using interpolation - if (Temperature < state.dataFluidProps->GlycolData(GlycolIndex).ViscLowTempValue) { // Temperature too low + if (Temperature < state.dataFluid->GlycolData(GlycolIndex).ViscLowTempValue) { // Temperature too low LowErrorThisTime = true; - ReturnValue = state.dataFluidProps->GlycolData(GlycolIndex).ViscValues(state.dataFluidProps->GlycolData(GlycolIndex).ViscLowTempIndex); - } else if (Temperature > state.dataFluidProps->GlycolData(GlycolIndex).ViscHighTempValue) { // Temperature too high + ReturnValue = state.dataFluid->GlycolData(GlycolIndex).ViscValues(state.dataFluid->GlycolData(GlycolIndex).ViscLowTempIndex); + } else if (Temperature > state.dataFluid->GlycolData(GlycolIndex).ViscHighTempValue) { // Temperature too high HighErrorThisTime = true; - ReturnValue = state.dataFluidProps->GlycolData(GlycolIndex).ViscValues(state.dataFluidProps->GlycolData(GlycolIndex).ViscHighTempIndex); + ReturnValue = state.dataFluid->GlycolData(GlycolIndex).ViscValues(state.dataFluid->GlycolData(GlycolIndex).ViscHighTempIndex); } else { // Temperature somewhere between the lowest and highest value - ReturnValue = state.dataFluidProps->GlycolData(GlycolIndex).ViscValues(state.dataFluidProps->GlycolData(GlycolIndex).ViscLowTempIndex); + ReturnValue = state.dataFluid->GlycolData(GlycolIndex).ViscValues(state.dataFluid->GlycolData(GlycolIndex).ViscLowTempIndex); // bracket is temp > low, <= high (for interpolation - for (int Loop = state.dataFluidProps->GlycolData(GlycolIndex).ViscLowTempIndex + 1; - Loop <= state.dataFluidProps->GlycolData(GlycolIndex).ViscHighTempIndex; + for (int Loop = state.dataFluid->GlycolData(GlycolIndex).ViscLowTempIndex + 1; + Loop <= state.dataFluid->GlycolData(GlycolIndex).ViscHighTempIndex; ++Loop) { - if (Temperature > state.dataFluidProps->GlycolData(GlycolIndex).ViscTemps(Loop)) continue; + if (Temperature > state.dataFluid->GlycolData(GlycolIndex).ViscTemps(Loop)) continue; ReturnValue = GetInterpValue(state, Temperature, - state.dataFluidProps->GlycolData(GlycolIndex).ViscTemps(Loop - 1), - state.dataFluidProps->GlycolData(GlycolIndex).ViscTemps(Loop), - state.dataFluidProps->GlycolData(GlycolIndex).ViscValues(Loop - 1), - state.dataFluidProps->GlycolData(GlycolIndex).ViscValues(Loop)); + state.dataFluid->GlycolData(GlycolIndex).ViscTemps(Loop - 1), + state.dataFluid->GlycolData(GlycolIndex).ViscTemps(Loop), + state.dataFluid->GlycolData(GlycolIndex).ViscValues(Loop - 1), + state.dataFluid->GlycolData(GlycolIndex).ViscValues(Loop)); break; // DO loop } } @@ -7636,33 +7636,33 @@ namespace FluidProperties { if (!state.dataGlobal->WarmupFlag) { if (LowErrorThisTime) { - ++state.dataFluidProps->GlycolErrorTracking(GlycolIndex).ViscosityLowErrCount; - state.dataFluidProps->LowTempLimitErrGetViscosityGlycol = state.dataFluidProps->GlycolErrorTracking(GlycolIndex).ViscosityLowErrCount; + ++state.dataFluid->GlycolErrorTracking(GlycolIndex).ViscosityLowErrCount; + state.dataFluid->LowTempLimitErrGetViscosityGlycol = state.dataFluid->GlycolErrorTracking(GlycolIndex).ViscosityLowErrCount; } if (HighErrorThisTime) { - ++state.dataFluidProps->GlycolErrorTracking(GlycolIndex).ViscosityHighErrCount; - state.dataFluidProps->HighTempLimitErrGetViscosityGlycol = - state.dataFluidProps->GlycolErrorTracking(GlycolIndex).ViscosityHighErrCount; + ++state.dataFluid->GlycolErrorTracking(GlycolIndex).ViscosityHighErrCount; + state.dataFluid->HighTempLimitErrGetViscosityGlycol = + state.dataFluid->GlycolErrorTracking(GlycolIndex).ViscosityHighErrCount; } - if ((LowErrorThisTime) && (state.dataFluidProps->LowTempLimitErrGetViscosityGlycol <= state.dataFluidProps->GlycolErrorLimitTest)) { + if ((LowErrorThisTime) && (state.dataFluid->LowTempLimitErrGetViscosityGlycol <= state.dataFluid->GlycolErrorLimitTest)) { ShowWarningMessage(state, format("{}Temperature is out of range (too low) for fluid [{}] viscosity **", RoutineName, - state.dataFluidProps->GlycolData(GlycolIndex).Name)); + state.dataFluid->GlycolData(GlycolIndex).Name)); ShowContinueError(state, format("..Called From:{},Temperature=[{:.2R}], supplied data range=[{:.2R},{:.2R}]", CalledFrom, Temperature, - state.dataFluidProps->GlycolData(GlycolIndex).ViscLowTempValue, - state.dataFluidProps->GlycolData(GlycolIndex).ViscHighTempValue)); + state.dataFluid->GlycolData(GlycolIndex).ViscLowTempValue, + state.dataFluid->GlycolData(GlycolIndex).ViscHighTempValue)); ShowContinueErrorTimeStamp(state, ""); } if (LowErrorThisTime) { ShowRecurringWarningErrorAtEnd(state, std::string{RoutineName} + "Temperature out of range (too low) for fluid [" + - state.dataFluidProps->GlycolData(GlycolIndex).Name + "] viscosity **", - state.dataFluidProps->GlycolErrorTracking(GlycolIndex).ViscosityLowErrIndex, + state.dataFluid->GlycolData(GlycolIndex).Name + "] viscosity **", + state.dataFluid->GlycolErrorTracking(GlycolIndex).ViscosityLowErrIndex, Temperature, Temperature, _, @@ -7670,24 +7670,24 @@ namespace FluidProperties { "{C}"); } - if ((HighErrorThisTime) && (state.dataFluidProps->HighTempLimitErrGetViscosityGlycol <= state.dataFluidProps->GlycolErrorLimitTest)) { + if ((HighErrorThisTime) && (state.dataFluid->HighTempLimitErrGetViscosityGlycol <= state.dataFluid->GlycolErrorLimitTest)) { ShowWarningMessage(state, format("{}Temperature is out of range (too high) for fluid [{}] viscosity **", RoutineName, - state.dataFluidProps->GlycolData(GlycolIndex).Name)); + state.dataFluid->GlycolData(GlycolIndex).Name)); ShowContinueError(state, format("..Called From:{},Temperature=[{:.2R}], supplied data range=[{:.2R},{:.2R}]", CalledFrom, Temperature, - state.dataFluidProps->GlycolData(GlycolIndex).ViscLowTempValue, - state.dataFluidProps->GlycolData(GlycolIndex).ViscHighTempValue)); + state.dataFluid->GlycolData(GlycolIndex).ViscLowTempValue, + state.dataFluid->GlycolData(GlycolIndex).ViscHighTempValue)); ShowContinueErrorTimeStamp(state, ""); } if (HighErrorThisTime) { ShowRecurringWarningErrorAtEnd(state, std::string{RoutineName} + "Temperature out of range (too high) for fluid [" + - state.dataFluidProps->GlycolData(GlycolIndex).Name + "] viscosity **", - state.dataFluidProps->GlycolErrorTracking(GlycolIndex).ViscosityHighErrIndex, + state.dataFluid->GlycolData(GlycolIndex).Name + "] viscosity **", + state.dataFluid->GlycolErrorTracking(GlycolIndex).ViscosityHighErrIndex, Temperature, Temperature, _, @@ -7728,17 +7728,17 @@ namespace FluidProperties { int FindRefrigerant; // Make sure we have already read in the input - if (state.dataFluidProps->GetInput) { + if (state.dataFluid->GetInput) { GetFluidPropertiesData(state); - state.dataFluidProps->GetInput = false; + state.dataFluid->GetInput = false; } // Check to see if this glycol shows up in the glycol data - int Found = Util::FindItemInList(Util::makeUPPER(Refrigerant), state.dataFluidProps->RefrigData); + int Found = Util::FindItemInList(Util::makeUPPER(Refrigerant), state.dataFluid->RefrigData); if (Found > 0) { FindRefrigerant = Found; - state.dataFluidProps->RefrigUsed(Found) = true; + state.dataFluid->RefrigUsed(Found) = true; } else { // not found - errors handled in calling proceedure FindRefrigerant = 0; } @@ -7770,19 +7770,19 @@ namespace FluidProperties { int FindGlycol; // Make sure we have already read in the input - if (state.dataFluidProps->GetInput) { + if (state.dataFluid->GetInput) { GetFluidPropertiesData(state); - state.dataFluidProps->GetInput = false; + state.dataFluid->GetInput = false; } // Check to see if this glycol shows up in the glycol data int Found = Util::FindItemInList(Util::makeUPPER(Glycol), - state.dataFluidProps->GlycolData, - state.dataFluidProps->NumOfGlycols); // GlycolData is allocated to NumOfGlyConcs + state.dataFluid->GlycolData, + state.dataFluid->NumOfGlycols); // GlycolData is allocated to NumOfGlyConcs if (Found > 0) { FindGlycol = Found; - state.dataFluidProps->GlycolUsed(Found) = true; + state.dataFluid->GlycolUsed(Found) = true; } else { // return zero - error checking in calling proceedure FindGlycol = 0; } @@ -7813,8 +7813,8 @@ namespace FluidProperties { // Check to see if this glycol shows up in the glycol data // ArrayLength = SIZE(GlycolData) - if (Idx > 0 && Idx <= state.dataFluidProps->NumOfGlycols) { - return state.dataFluidProps->GlycolData(Idx).Name; + if (Idx > 0 && Idx <= state.dataFluid->NumOfGlycols) { + return state.dataFluid->GlycolData(Idx).Name; } else { // return blank - error checking in calling proceedure return ""; } @@ -7986,9 +7986,9 @@ namespace FluidProperties { } if (ErrorFlag && (CalledFrom != "ReportAndTestRefrigerants")) { - ++state.dataFluidProps->TempRangeErrCountGetInterpolatedSatProp; + ++state.dataFluid->TempRangeErrCountGetInterpolatedSatProp; // send warning - if (state.dataFluidProps->TempRangeErrCountGetInterpolatedSatProp <= state.dataFluidProps->RefrigerantErrorLimitTest) { + if (state.dataFluid->TempRangeErrCountGetInterpolatedSatProp <= state.dataFluid->RefrigerantErrorLimitTest) { ShowWarningError(state, "GetInterpolatedSatProp: Saturation temperature for interpolation is out of range of data supplied: **"); ShowContinueErrorTimeStamp(state, fmt::format(" Called from:{}", CalledFrom)); ShowContinueError(state, format("Refrigerant temperature = {:.2R}", Temperature)); @@ -7996,7 +7996,7 @@ namespace FluidProperties { } else { ShowRecurringWarningErrorAtEnd(state, "GetInterpolatedSatProp: Refrigerant temperature for interpolation out of range error", - state.dataFluidProps->TempRangeErrIndexGetInterpolatedSatProp, + state.dataFluid->TempRangeErrIndexGetInterpolatedSatProp, Temperature, Temperature, _, @@ -8024,20 +8024,20 @@ namespace FluidProperties { // Return value int CheckFluidPropertyName; - if (state.dataFluidProps->GetInput) { + if (state.dataFluid->GetInput) { GetFluidPropertiesData(state); - state.dataFluidProps->GetInput = false; + state.dataFluid->GetInput = false; } // Item must be either in Refrigerant or Glycol list int Found = 0; - if (state.dataFluidProps->NumOfRefrigerants > 0) { - Found = Util::FindItemInList(NameToCheck, state.dataFluidProps->RefrigData); + if (state.dataFluid->NumOfRefrigerants > 0) { + Found = Util::FindItemInList(NameToCheck, state.dataFluid->RefrigData); } if (Found == 0) { - if (state.dataFluidProps->NumOfGlycols > 0) { + if (state.dataFluid->NumOfGlycols > 0) { Found = Util::FindItemInList( - NameToCheck, state.dataFluidProps->GlycolData, state.dataFluidProps->NumOfGlycols); // GlycolData is allocated to NumOfGlyConcs + NameToCheck, state.dataFluid->GlycolData, state.dataFluid->NumOfGlycols); // GlycolData is allocated to NumOfGlyConcs } } @@ -8060,16 +8060,16 @@ namespace FluidProperties { bool NeedOrphanMessage = true; int NumUnusedRefrig = 0; - for (int Item = 1; Item <= state.dataFluidProps->NumOfRefrigerants; ++Item) { - if (state.dataFluidProps->RefrigUsed(Item)) continue; - if (Util::SameString(state.dataFluidProps->RefrigData(Item).Name, Steam)) continue; + for (int Item = 1; Item <= state.dataFluid->NumOfRefrigerants; ++Item) { + if (state.dataFluid->RefrigUsed(Item)) continue; + if (Util::SameString(state.dataFluid->RefrigData(Item).Name, Steam)) continue; if (NeedOrphanMessage && state.dataGlobal->DisplayUnusedObjects) { ShowWarningError(state, "The following fluid names are \"Unused Fluids\". These fluids are in the idf"); ShowContinueError(state, " file but are never obtained by the simulation and therefore are NOT used."); NeedOrphanMessage = false; } if (state.dataGlobal->DisplayUnusedObjects) { - ShowMessage(state, format("Refrigerant={}", state.dataFluidProps->RefrigData(Item).Name)); + ShowMessage(state, format("Refrigerant={}", state.dataFluid->RefrigData(Item).Name)); } else { ++NumUnusedRefrig; } @@ -8077,18 +8077,18 @@ namespace FluidProperties { int NumUnusedGlycol = 0; - for (int Item = 1; Item <= state.dataFluidProps->NumOfGlycols; ++Item) { - if (state.dataFluidProps->GlycolUsed(Item)) continue; - if (Util::SameString(state.dataFluidProps->GlycolData(Item).Name, Water)) continue; - if (Util::SameString(state.dataFluidProps->GlycolData(Item).Name, EthyleneGlycol)) continue; - if (Util::SameString(state.dataFluidProps->GlycolData(Item).Name, PropyleneGlycol)) continue; + for (int Item = 1; Item <= state.dataFluid->NumOfGlycols; ++Item) { + if (state.dataFluid->GlycolUsed(Item)) continue; + if (Util::SameString(state.dataFluid->GlycolData(Item).Name, Water)) continue; + if (Util::SameString(state.dataFluid->GlycolData(Item).Name, EthyleneGlycol)) continue; + if (Util::SameString(state.dataFluid->GlycolData(Item).Name, PropyleneGlycol)) continue; if (NeedOrphanMessage && state.dataGlobal->DisplayUnusedObjects) { ShowWarningError(state, "The following fluid names are \"Unused Fluids\". These fluids are in the idf"); ShowContinueError(state, " file but are never obtained by the simulation and therefore are NOT used."); NeedOrphanMessage = false; } if (state.dataGlobal->DisplayUnusedObjects) { - ShowMessage(state, format("Glycol={}", state.dataFluidProps->GlycolData(Item).Name)); + ShowMessage(state, format("Glycol={}", state.dataFluid->GlycolData(Item).Name)); } else { ++NumUnusedGlycol; } @@ -8193,28 +8193,28 @@ namespace FluidProperties { { // Get the input if we haven't already - if (state.dataFluidProps->GetInput) { + if (state.dataFluid->GetInput) { GetFluidPropertiesData(state); - state.dataFluidProps->GetInput = false; + state.dataFluid->GetInput = false; } if (FluidIndex > 0) { - MinTempLimit = state.dataFluidProps->GlycolData(FluidIndex).RhoLowTempValue; - MaxTempLimit = state.dataFluidProps->GlycolData(FluidIndex).RhoHighTempValue; + MinTempLimit = state.dataFluid->GlycolData(FluidIndex).RhoLowTempValue; + MaxTempLimit = state.dataFluid->GlycolData(FluidIndex).RhoHighTempValue; } } void GetFluidSpecificHeatTemperatureLimits(EnergyPlusData &state, int const FluidIndex, Real64 &MinTempLimit, Real64 &MaxTempLimit) { // Get the input if we haven't already - if (state.dataFluidProps->GetInput) { + if (state.dataFluid->GetInput) { GetFluidPropertiesData(state); - state.dataFluidProps->GetInput = false; + state.dataFluid->GetInput = false; } if (FluidIndex > 0) { - MinTempLimit = state.dataFluidProps->GlycolData(FluidIndex).CpLowTempValue; - MaxTempLimit = state.dataFluidProps->GlycolData(FluidIndex).CpHighTempValue; + MinTempLimit = state.dataFluid->GlycolData(FluidIndex).CpLowTempValue; + MaxTempLimit = state.dataFluid->GlycolData(FluidIndex).CpHighTempValue; } } @@ -8229,19 +8229,19 @@ namespace FluidProperties { } Real64 GlycolAPI::specificHeat(EnergyPlusData &state, Real64 temperature) { - return FluidProperties::GetSpecificHeatGlycol(state, this->glycolName, temperature, this->glycolIndex, this->cf); + return Fluid::GetSpecificHeatGlycol(state, this->glycolName, temperature, this->glycolIndex, this->cf); } Real64 GlycolAPI::density(EnergyPlusData &state, Real64 temperature) { - return FluidProperties::GetDensityGlycol(state, this->glycolName, temperature, this->glycolIndex, this->cf); + return Fluid::GetDensityGlycol(state, this->glycolName, temperature, this->glycolIndex, this->cf); } Real64 GlycolAPI::conductivity(EnergyPlusData &state, Real64 temperature) { - return FluidProperties::GetConductivityGlycol(state, this->glycolName, temperature, this->glycolIndex, this->cf); + return Fluid::GetConductivityGlycol(state, this->glycolName, temperature, this->glycolIndex, this->cf); } Real64 GlycolAPI::viscosity(EnergyPlusData &state, Real64 temperature) { - return FluidProperties::GetViscosityGlycol(state, this->glycolName, temperature, this->glycolIndex, this->cf); + return Fluid::GetViscosityGlycol(state, this->glycolName, temperature, this->glycolIndex, this->cf); } RefrigerantAPI::RefrigerantAPI(EnergyPlusData &state, std::string const &refrigName) @@ -8255,37 +8255,37 @@ namespace FluidProperties { } Real64 RefrigerantAPI::saturationPressure(EnergyPlusData &state, Real64 temperature) { - return FluidProperties::GetSatPressureRefrig(state, this->rName, temperature, this->rIndex, this->cf); + return Fluid::GetSatPressureRefrig(state, this->rName, temperature, this->rIndex, this->cf); } Real64 RefrigerantAPI::saturationTemperature(EnergyPlusData &state, Real64 pressure) { - return FluidProperties::GetSatTemperatureRefrig(state, this->rName, pressure, this->rIndex, this->cf); + return Fluid::GetSatTemperatureRefrig(state, this->rName, pressure, this->rIndex, this->cf); } Real64 RefrigerantAPI::saturatedEnthalpy(EnergyPlusData &state, Real64 temperature, Real64 quality) { - return FluidProperties::GetSatEnthalpyRefrig(state, this->rName, temperature, quality, this->rIndex, this->cf); + return Fluid::GetSatEnthalpyRefrig(state, this->rName, temperature, quality, this->rIndex, this->cf); } Real64 RefrigerantAPI::saturatedDensity(EnergyPlusData &state, Real64 temperature, Real64 quality) { - return FluidProperties::GetSatDensityRefrig(state, this->rName, temperature, quality, this->rIndex, this->cf); + return Fluid::GetSatDensityRefrig(state, this->rName, temperature, quality, this->rIndex, this->cf); } Real64 RefrigerantAPI::saturatedSpecificHeat(EnergyPlusData &state, Real64 temperature, Real64 quality) { - return FluidProperties::GetSatSpecificHeatRefrig(state, this->rName, temperature, quality, this->rIndex, this->cf); + return Fluid::GetSatSpecificHeatRefrig(state, this->rName, temperature, quality, this->rIndex, this->cf); } Real64 RefrigerantAPI::superHeatedEnthalpy(EnergyPlusData &state, Real64 temperature, Real64 pressure) { - return FluidProperties::GetSupHeatEnthalpyRefrig(state, this->rName, temperature, pressure, this->rIndex, this->cf); + return Fluid::GetSupHeatEnthalpyRefrig(state, this->rName, temperature, pressure, this->rIndex, this->cf); } Real64 RefrigerantAPI::superHeatedPressure(EnergyPlusData &state, Real64 temperature, Real64 enthalpy) { - return FluidProperties::GetSupHeatPressureRefrig(state, this->rName, temperature, enthalpy, this->rIndex, this->cf); + return Fluid::GetSupHeatPressureRefrig(state, this->rName, temperature, enthalpy, this->rIndex, this->cf); } Real64 RefrigerantAPI::superHeatedDensity(EnergyPlusData &state, Real64 temperature, Real64 pressure) { - return FluidProperties::GetSupHeatDensityRefrig(state, this->rName, temperature, pressure, this->rIndex, this->cf); + return Fluid::GetSupHeatDensityRefrig(state, this->rName, temperature, pressure, this->rIndex, this->cf); } -} // namespace FluidProperties +} // namespace Fluid } // namespace EnergyPlus diff --git a/src/EnergyPlus/FluidProperties.hh b/src/EnergyPlus/FluidProperties.hh index c0e77cc9006..fbb86d00dbe 100644 --- a/src/EnergyPlus/FluidProperties.hh +++ b/src/EnergyPlus/FluidProperties.hh @@ -67,7 +67,7 @@ namespace EnergyPlus { // Forward declarations struct EnergyPlusData; -namespace FluidProperties { +namespace Fluid { int constexpr EthyleneGlycolIndex = -2; int constexpr PropyleneGlycolIndex = -1; @@ -622,9 +622,9 @@ namespace FluidProperties { Real64 superHeatedDensity(EnergyPlusData &state, Real64 temperature, Real64 pressure); }; -} // namespace FluidProperties +} // namespace Fluid -struct FluidPropertiesData : BaseGlobalStruct +struct FluidData : BaseGlobalStruct { bool GetInput = true; // Used to get the input once only @@ -637,11 +637,11 @@ struct FluidPropertiesData : BaseGlobalStruct Array1D_bool RefrigUsed; Array1D_bool GlycolUsed; - Array1D RefrigData; - Array1D RefrigErrorTracking; - Array1D GlyRawData; - Array1D GlycolData; - Array1D GlycolErrorTracking; + Array1D RefrigData; + Array1D RefrigErrorTracking; + Array1D GlyRawData; + Array1D GlycolData; + Array1D GlycolErrorTracking; int SatErrCountGetSupHeatEnthalpyRefrig = 0; int SatErrCountGetSupHeatDensityRefrig = 0; @@ -659,18 +659,18 @@ struct FluidPropertiesData : BaseGlobalStruct int TempRangeErrIndexGetInterpolatedSatProp = 0; #ifdef EP_cache_GlycolSpecificHeat - std::array cached_t_sh; + std::array cached_t_sh; #endif void init_state(EnergyPlusData &state) override { - FluidProperties::GetFluidPropertiesData(state); + Fluid::GetFluidPropertiesData(state); this->GetInput = false; } void clear_state() override { - new (this) FluidPropertiesData(); + new (this) FluidData(); } }; diff --git a/src/EnergyPlus/FuelCellElectricGenerator.cc b/src/EnergyPlus/FuelCellElectricGenerator.cc index 47a55dcc2b1..6a9a94be210 100644 --- a/src/EnergyPlus/FuelCellElectricGenerator.cc +++ b/src/EnergyPlus/FuelCellElectricGenerator.cc @@ -3032,7 +3032,7 @@ namespace FuelCellElectricGenerator { this->ExhaustHX.THXexh = TprodGasIn - this->ExhaustHX.qHX / (NdotGas * CpProdGasMol * 1000.0); - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, TwaterIn, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -3368,7 +3368,7 @@ namespace FuelCellElectricGenerator { this->Inverter.PCUlosses = 0.0; this->Inverter.QairIntake = 0.0; - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, DataGenerators::InitHRTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, diff --git a/src/EnergyPlus/Furnaces.cc b/src/EnergyPlus/Furnaces.cc index 941c5288275..86bc6ce5de9 100644 --- a/src/EnergyPlus/Furnaces.cc +++ b/src/EnergyPlus/Furnaces.cc @@ -1130,7 +1130,7 @@ namespace Furnaces { thisFurnace.MaxHeatCoilFluidFlow = SteamCoils::GetCoilMaxSteamFlowRate(state, thisFurnace.HeatingCoilIndex, errFlag); if (thisFurnace.MaxHeatCoilFluidFlow > 0.0) { SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed - SteamDensity = FluidProperties::GetSatDensityRefrig( + SteamDensity = Fluid::GetSatDensityRefrig( state, fluidNameSteam, state.dataFurnaces->TempSteamIn, 1.0, SteamIndex, getUnitaryHeatOnly); thisFurnace.MaxHeatCoilFluidFlow *= SteamDensity; } @@ -1672,7 +1672,7 @@ namespace Furnaces { thisFurnace.MaxHeatCoilFluidFlow = SteamCoils::GetCoilMaxSteamFlowRate(state, thisFurnace.HeatingCoilIndex, errFlag); if (thisFurnace.MaxHeatCoilFluidFlow > 0.0) { SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed - SteamDensity = FluidProperties::GetSatDensityRefrig( + SteamDensity = Fluid::GetSatDensityRefrig( state, fluidNameSteam, state.dataFurnaces->TempSteamIn, 1.0, SteamIndex, getAirLoopHVACHeatCoolInput); thisFurnace.MaxHeatCoilFluidFlow *= SteamDensity; } @@ -2129,7 +2129,7 @@ namespace Furnaces { thisFurnace.MaxSuppCoilFluidFlow = SteamCoils::GetCoilMaxSteamFlowRate(state, thisFurnace.SuppHeatCoilIndex, errFlag); if (thisFurnace.MaxSuppCoilFluidFlow > 0.0) { SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed - SteamDensity = FluidProperties::GetSatDensityRefrig( + SteamDensity = Fluid::GetSatDensityRefrig( state, fluidNameSteam, state.dataFurnaces->TempSteamIn, 1.0, SteamIndex, getAirLoopHVACHeatCoolInput); thisFurnace.MaxSuppCoilFluidFlow = SteamCoils::GetCoilMaxSteamFlowRate(state, thisFurnace.SuppHeatCoilIndex, errFlag) * SteamDensity; @@ -3138,7 +3138,7 @@ namespace Furnaces { thisFurnace.MaxSuppCoilFluidFlow = SteamCoils::GetCoilMaxSteamFlowRate(state, thisFurnace.SuppHeatCoilIndex, errFlag); if (thisFurnace.MaxSuppCoilFluidFlow > 0.0) { SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed - SteamDensity = FluidProperties::GetSatDensityRefrig( + SteamDensity = Fluid::GetSatDensityRefrig( state, fluidNameSteam, state.dataFurnaces->TempSteamIn, 1.0, SteamIndex, getAirLoopHVACHeatCoolInput); thisFurnace.MaxSuppCoilFluidFlow = SteamCoils::GetCoilMaxSteamFlowRate(state, thisFurnace.SuppHeatCoilIndex, errFlag) * SteamDensity; @@ -3953,7 +3953,7 @@ namespace Furnaces { thisFurnace.MaxSuppCoilFluidFlow = SteamCoils::GetCoilMaxSteamFlowRate(state, thisFurnace.SuppHeatCoilIndex, errFlag); if (thisFurnace.MaxSuppCoilFluidFlow > 0.0) { SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed - SteamDensity = FluidProperties::GetSatDensityRefrig( + SteamDensity = Fluid::GetSatDensityRefrig( state, fluidNameSteam, state.dataFurnaces->TempSteamIn, 1.0, SteamIndex, getAirLoopHVACHeatCoolInput); thisFurnace.MaxSuppCoilFluidFlow = SteamCoils::GetCoilMaxSteamFlowRate(state, thisFurnace.SuppHeatCoilIndex, errFlag) * SteamDensity; @@ -4786,7 +4786,7 @@ namespace Furnaces { thisFurnace.MaxHeatCoilFluidFlow = WaterCoils::GetCoilMaxWaterFlowRate(state, "Coil:Heating:Water", thisFurnace.HeatingCoilName, ErrorsFound); if (thisFurnace.MaxHeatCoilFluidFlow > 0.0) { - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(thisFurnace.plantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(thisFurnace.plantLoc.loopNum).FluidIndex, @@ -4812,7 +4812,7 @@ namespace Furnaces { thisFurnace.MaxHeatCoilFluidFlow = SteamCoils::GetCoilMaxSteamFlowRate(state, thisFurnace.HeatingCoilIndex, ErrorsFound); if (thisFurnace.MaxHeatCoilFluidFlow > 0.0) { int SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed - SteamDensity = FluidProperties::GetSatDensityRefrig( + SteamDensity = Fluid::GetSatDensityRefrig( state, fluidNameSteam, state.dataFurnaces->TempSteamIn, 1.0, SteamIndex, RoutineName); thisFurnace.MaxHeatCoilFluidFlow *= SteamDensity; } @@ -4849,7 +4849,7 @@ namespace Furnaces { thisFurnace.MaxSuppCoilFluidFlow = WaterCoils::GetCoilMaxWaterFlowRate(state, "Coil:Heating:Water", thisFurnace.SuppHeatCoilName, ErrorsFound); if (thisFurnace.MaxSuppCoilFluidFlow > 0.0) { - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(thisFurnace.SuppPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(thisFurnace.SuppPlantLoc.loopNum).FluidIndex, @@ -4874,7 +4874,7 @@ namespace Furnaces { thisFurnace.MaxSuppCoilFluidFlow = SteamCoils::GetCoilMaxSteamFlowRate(state, thisFurnace.SuppHeatCoilIndex, ErrorsFound); if (thisFurnace.MaxSuppCoilFluidFlow > 0.0) { int SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed - SteamDensity = FluidProperties::GetSatDensityRefrig( + SteamDensity = Fluid::GetSatDensityRefrig( state, fluidNameSteam, state.dataFurnaces->TempSteamIn, 1.0, SteamIndex, RoutineName); thisFurnace.MaxSuppCoilFluidFlow *= SteamDensity; } @@ -4917,7 +4917,7 @@ namespace Furnaces { CoilMaxVolFlowRate = WaterCoils::GetCoilMaxWaterFlowRate(state, "Coil:Heating:Water", thisFurnace.HeatingCoilName, ErrorsFound); if (CoilMaxVolFlowRate != DataSizing::AutoSize) { - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(thisFurnace.plantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(thisFurnace.plantLoc.loopNum).FluidIndex, @@ -4936,7 +4936,7 @@ namespace Furnaces { CoilMaxVolFlowRate = SteamCoils::GetCoilMaxSteamFlowRate(state, thisFurnace.HeatingCoilIndex, ErrorsFound); if (CoilMaxVolFlowRate != DataSizing::AutoSize) { int SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed - SteamDensity = FluidProperties::GetSatDensityRefrig( + SteamDensity = Fluid::GetSatDensityRefrig( state, fluidNameSteam, state.dataFurnaces->TempSteamIn, 1.0, SteamIndex, RoutineName); thisFurnace.MaxHeatCoilFluidFlow = CoilMaxVolFlowRate * SteamDensity; } @@ -4955,7 +4955,7 @@ namespace Furnaces { CoilMaxVolFlowRate = WaterCoils::GetCoilMaxWaterFlowRate(state, "Coil:Heating:Water", thisFurnace.SuppHeatCoilName, ErrorsFound); if (CoilMaxVolFlowRate != DataSizing::AutoSize) { - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(thisFurnace.SuppPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(thisFurnace.SuppPlantLoc.loopNum).FluidIndex, @@ -4973,7 +4973,7 @@ namespace Furnaces { CoilMaxVolFlowRate = SteamCoils::GetCoilMaxSteamFlowRate(state, thisFurnace.SuppHeatCoilIndex, ErrorsFound); if (CoilMaxVolFlowRate != DataSizing::AutoSize) { int SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed - SteamDensity = FluidProperties::GetSatDensityRefrig( + SteamDensity = Fluid::GetSatDensityRefrig( state, fluidNameSteam, state.dataFurnaces->TempSteamIn, 1.0, SteamIndex, RoutineName); thisFurnace.MaxSuppCoilFluidFlow = CoilMaxVolFlowRate * SteamDensity; } diff --git a/src/EnergyPlus/GroundHeatExchangers.cc b/src/EnergyPlus/GroundHeatExchangers.cc index 7c86b973419..f9d102c5e20 100644 --- a/src/EnergyPlus/GroundHeatExchangers.cc +++ b/src/EnergyPlus/GroundHeatExchangers.cc @@ -1137,12 +1137,12 @@ void GLHEVert::calcShortTimestepGFunctions(EnergyPlusData &state) Real64 bh_equivalent_resistance_convection = bhResistance - bh_equivalent_resistance_tube_grout; Real64 initial_temperature = this->inletTemp; - Real64 cpFluid_init = FluidProperties::GetSpecificHeatGlycol(state, + Real64 cpFluid_init = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, initial_temperature, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); - Real64 fluidDensity_init = FluidProperties::GetDensityGlycol(state, + Real64 fluidDensity_init = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, initial_temperature, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -2004,7 +2004,7 @@ void GLHEBase::calcGroundHeatExchanger(EnergyPlusData &state) this->inletTemp = state.dataLoopNodes->Node(this->inletNodeNum).Temp; - Real64 cpFluid = FluidProperties::GetSpecificHeatGlycol(state, + Real64 cpFluid = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, this->inletTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -2275,7 +2275,7 @@ void GLHEBase::updateGHX(EnergyPlusData &state) state.dataLoopNodes->Node(this->outletNodeNum).Temp = this->outletTemp; state.dataLoopNodes->Node(this->outletNodeNum).Enthalpy = - this->outletTemp * FluidProperties::GetSpecificHeatGlycol(state, + this->outletTemp * Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, this->outletTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -2284,7 +2284,7 @@ void GLHEBase::updateGHX(EnergyPlusData &state) Real64 GLHEdeltaTemp = std::abs(this->outletTemp - this->inletTemp); if (GLHEdeltaTemp > deltaTempLimit && this->numErrorCalls < state.dataGroundHeatExchanger->numVerticalGLHEs && !state.dataGlobal->WarmupFlag) { - Real64 fluidDensity = FluidProperties::GetDensityGlycol(state, + Real64 fluidDensity = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, this->inletTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -2636,7 +2636,7 @@ Real64 GLHEVert::calcHXResistance(EnergyPlusData &state) } else { std::string_view const RoutineName = "calcBHResistance"; - Real64 const cpFluid = FluidProperties::GetSpecificHeatGlycol(state, + Real64 const cpFluid = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, this->inletTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -2671,17 +2671,17 @@ Real64 GLHEVert::calcPipeConvectionResistance(EnergyPlusData &state) // Get fluid props this->inletTemp = state.dataLoopNodes->Node(this->inletNodeNum).Temp; - Real64 const cpFluid = FluidProperties::GetSpecificHeatGlycol(state, + Real64 const cpFluid = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, this->inletTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); - Real64 const kFluid = FluidProperties::GetConductivityGlycol(state, + Real64 const kFluid = Fluid::GetConductivityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, this->inletTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); - Real64 const fluidViscosity = FluidProperties::GetViscosityGlycol(state, + Real64 const fluidViscosity = Fluid::GetViscosityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, this->inletTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -2775,22 +2775,22 @@ Real64 GLHESlinky::calcHXResistance(EnergyPlusData &state) constexpr Real64 B = 350; constexpr Real64 laminarNusseltNo = 4.364; - Real64 cpFluid = FluidProperties::GetSpecificHeatGlycol(state, + Real64 cpFluid = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, this->inletTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); - Real64 kFluid = FluidProperties::GetConductivityGlycol(state, + Real64 kFluid = Fluid::GetConductivityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, this->inletTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); - Real64 fluidDensity = FluidProperties::GetDensityGlycol(state, + Real64 fluidDensity = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, this->inletTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); - Real64 fluidViscosity = FluidProperties::GetViscosityGlycol(state, + Real64 fluidViscosity = Fluid::GetViscosityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, this->inletTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -2951,7 +2951,7 @@ void GLHEVert::initEnvironment(EnergyPlusData &state, [[maybe_unused]] Real64 co std::string_view const RoutineName = "initEnvironment"; this->myEnvrnFlag = false; - Real64 fluidDensity = FluidProperties::GetDensityGlycol(state, + Real64 fluidDensity = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, 20.0, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -3026,7 +3026,7 @@ void GLHESlinky::initEnvironment(EnergyPlusData &state, Real64 const CurTime) std::string_view const RoutineName = "initEnvironment"; this->myEnvrnFlag = false; - Real64 fluidDensity = FluidProperties::GetDensityGlycol(state, + Real64 fluidDensity = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, 20.0, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, diff --git a/src/EnergyPlus/HVACControllers.cc b/src/EnergyPlus/HVACControllers.cc index a0a1ba563e2..635bb5e5f83 100644 --- a/src/EnergyPlus/HVACControllers.cc +++ b/src/EnergyPlus/HVACControllers.cc @@ -1021,7 +1021,7 @@ void InitController(EnergyPlusData &state, int const ControlNum, bool &IsConverg // Do the Begin Environment initializations if (state.dataGlobal->BeginEnvrnFlag && MyEnvrnFlag(ControlNum)) { - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(thisController.ActuatedNodePlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(thisController.ActuatedNodePlantLoc.loopNum).FluidIndex, diff --git a/src/EnergyPlus/HVACCooledBeam.cc b/src/EnergyPlus/HVACCooledBeam.cc index 635b0f71340..14f38030df9 100644 --- a/src/EnergyPlus/HVACCooledBeam.cc +++ b/src/EnergyPlus/HVACCooledBeam.cc @@ -508,7 +508,7 @@ namespace HVACCooledBeam { // Using/Aliasing using DataZoneEquipment::CheckZoneEquipmentList; - using FluidProperties::GetDensityGlycol; + using Fluid::GetDensityGlycol; using PlantUtilities::InitComponentNodes; using PlantUtilities::ScanPlantLoopsForObject; using PlantUtilities::SetComponentFlowRate; @@ -647,8 +647,8 @@ namespace HVACCooledBeam { // Using/Aliasing using namespace DataSizing; - using FluidProperties::GetDensityGlycol; - using FluidProperties::GetSpecificHeatGlycol; + using Fluid::GetDensityGlycol; + using Fluid::GetSpecificHeatGlycol; using PlantUtilities::MyPlantSizingIndex; using PlantUtilities::RegisterPlantCompDesignFlow; @@ -1021,8 +1021,8 @@ namespace HVACCooledBeam { // na // Using/Aliasing - using FluidProperties::GetDensityGlycol; - using FluidProperties::GetSpecificHeatGlycol; + using Fluid::GetDensityGlycol; + using Fluid::GetSpecificHeatGlycol; using PlantUtilities::SetComponentFlowRate; // Locals diff --git a/src/EnergyPlus/HVACFourPipeBeam.cc b/src/EnergyPlus/HVACFourPipeBeam.cc index 47961c0e382..b6d8b3ba734 100644 --- a/src/EnergyPlus/HVACFourPipeBeam.cc +++ b/src/EnergyPlus/HVACFourPipeBeam.cc @@ -734,8 +734,8 @@ namespace FourPipeBeam { // Using using namespace DataSizing; - using FluidProperties::GetDensityGlycol; - using FluidProperties::GetSpecificHeatGlycol; + using Fluid::GetDensityGlycol; + using Fluid::GetSpecificHeatGlycol; using PlantUtilities::MyPlantSizingIndex; using PlantUtilities::RegisterPlantCompDesignFlow; using Psychrometrics::PsyCpAirFnW; @@ -871,7 +871,7 @@ namespace FourPipeBeam { this->totBeamLength = this->vDotDesignPrimAir / this->vDotNormRatedPrimAir; if (this->vDotDesignCWWasAutosized) { this->vDotDesignCW = this->vDotNormRatedCW * this->totBeamLength; - Real64 const rho = FluidProperties::GetDensityGlycol(state, + Real64 const rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->cWplantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->cWplantLoc.loopNum).FluidIndex, @@ -884,7 +884,7 @@ namespace FourPipeBeam { } if (vDotDesignHWWasAutosized) { this->vDotDesignHW = this->vDotNormRatedHW * this->totBeamLength; - Real64 const rho = FluidProperties::GetDensityGlycol(state, + Real64 const rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->hWplantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->hWplantLoc.loopNum).FluidIndex, @@ -951,7 +951,7 @@ namespace FourPipeBeam { this->totBeamLength = this->vDotDesignPrimAir / this->vDotNormRatedPrimAir; if (this->vDotDesignCWWasAutosized) { this->vDotDesignCW = this->vDotNormRatedCW * this->totBeamLength; - Real64 const rho = FluidProperties::GetDensityGlycol(state, + Real64 const rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->cWplantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->cWplantLoc.loopNum).FluidIndex, @@ -964,7 +964,7 @@ namespace FourPipeBeam { } if (vDotDesignHWWasAutosized) { this->vDotDesignHW = this->vDotNormRatedHW * this->totBeamLength; - Real64 const rho = FluidProperties::GetDensityGlycol(state, + Real64 const rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->hWplantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->hWplantLoc.loopNum).FluidIndex, @@ -1034,7 +1034,7 @@ namespace FourPipeBeam { } if (this->beamCoolingPresent) { - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->cWplantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->cWplantLoc.loopNum).FluidIndex, @@ -1044,7 +1044,7 @@ namespace FourPipeBeam { PlantUtilities::InitComponentNodes(state, 0.0, this->mDotDesignCW, this->cWInNodeNum, this->cWOutNodeNum); } if (this->beamHeatingPresent) { - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->hWplantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->hWplantLoc.loopNum).FluidIndex, @@ -1244,8 +1244,8 @@ namespace FourPipeBeam { { // Using/Aliasing - using FluidProperties::GetDensityGlycol; - using FluidProperties::GetSpecificHeatGlycol; + using Fluid::GetDensityGlycol; + using Fluid::GetSpecificHeatGlycol; using PlantUtilities::SetComponentFlowRate; // Locals diff --git a/src/EnergyPlus/HVACInterfaceManager.cc b/src/EnergyPlus/HVACInterfaceManager.cc index d292194eacc..54a1e257a13 100644 --- a/src/EnergyPlus/HVACInterfaceManager.cc +++ b/src/EnergyPlus/HVACInterfaceManager.cc @@ -506,7 +506,7 @@ void UpdatePlantLoopInterface(EnergyPlusData &state, Real64 OldTankOutletTemp = state.dataLoopNodes->Node(OtherLoopSideInletNode).Temp; // calculate the specific heat - Real64 Cp = FluidProperties::GetSpecificHeatGlycol( + Real64 Cp = Fluid::GetSpecificHeatGlycol( state, state.dataPlnt->PlantLoop(LoopNum).FluidName, OldTankOutletTemp, state.dataPlnt->PlantLoop(LoopNum).FluidIndex, RoutineName); // update the enthalpy @@ -660,7 +660,7 @@ void UpdateHalfLoopInletTemp(EnergyPlusData &state, int const LoopNum, const Dat Real64 LastTankOutletTemp = state.dataPlnt->PlantLoop(LoopNum).LoopSide(TankOutletLoopSide).LastTempInterfaceTankOutlet; // calculate the specific heat for the capacitance calculation - Real64 Cp = FluidProperties::GetSpecificHeatGlycol( + Real64 Cp = Fluid::GetSpecificHeatGlycol( state, state.dataPlnt->PlantLoop(LoopNum).FluidName, LastTankOutletTemp, state.dataPlnt->PlantLoop(LoopNum).FluidIndex, RoutineName); // set the fraction of loop mass assigned to each half loop outlet capacitance ('tank') calculation @@ -791,7 +791,7 @@ void UpdateCommonPipe(EnergyPlusData &state, Real64 LastTankOutletTemp = state.dataPlnt->PlantLoop(LoopNum).LoopSide(TankOutletLoopSide).LastTempInterfaceTankOutlet; // calculate the specific heat for the capacitance calculation - Real64 Cp = FluidProperties::GetSpecificHeatGlycol( + Real64 Cp = Fluid::GetSpecificHeatGlycol( state, state.dataPlnt->PlantLoop(LoopNum).FluidName, LastTankOutletTemp, state.dataPlnt->PlantLoop(LoopNum).FluidIndex, RoutineName); // set the fraction of loop mass assigned to each half loop outlet capacitance ('tank') calculation diff --git a/src/EnergyPlus/HVACMultiSpeedHeatPump.cc b/src/EnergyPlus/HVACMultiSpeedHeatPump.cc index 3f243b24ac4..b203328f07f 100644 --- a/src/EnergyPlus/HVACMultiSpeedHeatPump.cc +++ b/src/EnergyPlus/HVACMultiSpeedHeatPump.cc @@ -904,7 +904,7 @@ namespace HVACMultiSpeedHeatPump { thisMSHP.MaxCoilFluidFlow = SteamCoils::GetCoilMaxSteamFlowRate(state, thisMSHP.HeatCoilNum, errFlag); if (thisMSHP.MaxCoilFluidFlow > 0.0) { SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed - SteamDensity = FluidProperties::GetSatDensityRefrig( + SteamDensity = Fluid::GetSatDensityRefrig( state, fluidNameSteam, state.dataHVACMultiSpdHP->TempSteamIn, 1.0, SteamIndex, routineName); thisMSHP.MaxCoilFluidFlow *= SteamDensity; } @@ -1176,7 +1176,7 @@ namespace HVACMultiSpeedHeatPump { thisMSHP.MaxSuppCoilFluidFlow = SteamCoils::GetCoilMaxSteamFlowRate(state, thisMSHP.SuppHeatCoilNum, errFlag); if (thisMSHP.MaxSuppCoilFluidFlow > 0.0) { SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed - SteamDensity = FluidProperties::GetSatDensityRefrig( + SteamDensity = Fluid::GetSatDensityRefrig( state, fluidNameSteam, state.dataHVACMultiSpdHP->TempSteamIn, 1.0, SteamIndex, routineName); thisMSHP.MaxSuppCoilFluidFlow *= SteamDensity; } @@ -1841,7 +1841,7 @@ namespace HVACMultiSpeedHeatPump { WaterCoils::GetCoilMaxWaterFlowRate(state, "Coil:Heating:Water", MSHeatPump(MSHeatPumpNum).HeatCoilName, ErrorsFound); if (MSHeatPump(MSHeatPumpNum).MaxCoilFluidFlow > 0.0) { - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(MSHeatPump(MSHeatPumpNum).plantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(MSHeatPump(MSHeatPumpNum).plantLoc.loopNum).FluidIndex, @@ -1874,7 +1874,7 @@ namespace HVACMultiSpeedHeatPump { if (MSHeatPump(MSHeatPumpNum).MaxCoilFluidFlow > 0.0) { int SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed // TODO: Why do you want to re-look this up? - SteamDensity = FluidProperties::GetSatDensityRefrig( + SteamDensity = Fluid::GetSatDensityRefrig( state, fluidNameSteam, state.dataHVACMultiSpdHP->TempSteamIn, 1.0, SteamIndex, RoutineName); MSHeatPump(MSHeatPumpNum).MaxCoilFluidFlow *= SteamDensity; } @@ -1903,7 +1903,7 @@ namespace HVACMultiSpeedHeatPump { WaterCoils::GetCoilMaxWaterFlowRate(state, "Coil:Heating:Water", MSHeatPump(MSHeatPumpNum).SuppHeatCoilName, ErrorsFound); if (MSHeatPump(MSHeatPumpNum).MaxSuppCoilFluidFlow > 0.0) { - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(MSHeatPump(MSHeatPumpNum).SuppPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(MSHeatPump(MSHeatPumpNum).SuppPlantLoc.loopNum).FluidIndex, @@ -1936,7 +1936,7 @@ namespace HVACMultiSpeedHeatPump { SteamCoils::GetCoilMaxSteamFlowRate(state, MSHeatPump(MSHeatPumpNum).SuppHeatCoilNum, ErrorsFound); if (MSHeatPump(MSHeatPumpNum).MaxSuppCoilFluidFlow > 0.0) { int SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed - SteamDensity = FluidProperties::GetSatDensityRefrig( + SteamDensity = Fluid::GetSatDensityRefrig( state, fluidNameSteam, state.dataHVACMultiSpdHP->TempSteamIn, 1.0, SteamIndex, RoutineName); MSHeatPump(MSHeatPumpNum).MaxSuppCoilFluidFlow *= SteamDensity; } @@ -2058,7 +2058,7 @@ namespace HVACMultiSpeedHeatPump { if ((MSHeatPump(MSHeatPumpNum).HeatRecActive) && (!MSHeatPump(MSHeatPumpNum).MyPlantScantFlag)) { - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(MSHeatPump(MSHeatPumpNum).HRPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(MSHeatPump(MSHeatPumpNum).HRPlantLoc.loopNum).FluidIndex, @@ -2081,7 +2081,7 @@ namespace HVACMultiSpeedHeatPump { CoilMaxVolFlowRate = WaterCoils::GetCoilMaxWaterFlowRate(state, "Coil:Heating:Water", MSHeatPump(MSHeatPumpNum).HeatCoilName, ErrorsFound); if (CoilMaxVolFlowRate != DataSizing::AutoSize) { - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(MSHeatPump(MSHeatPumpNum).plantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(MSHeatPump(MSHeatPumpNum).plantLoc.loopNum).FluidIndex, @@ -2106,7 +2106,7 @@ namespace HVACMultiSpeedHeatPump { if (CoilMaxVolFlowRate != DataSizing::AutoSize) { int SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed - SteamDensity = FluidProperties::GetSatDensityRefrig( + SteamDensity = Fluid::GetSatDensityRefrig( state, fluidNameSteam, state.dataHVACMultiSpdHP->TempSteamIn, 1.0, SteamIndex, RoutineName); MSHeatPump(MSHeatPumpNum).MaxCoilFluidFlow = CoilMaxVolFlowRate * SteamDensity; } @@ -2127,7 +2127,7 @@ namespace HVACMultiSpeedHeatPump { CoilMaxVolFlowRate = WaterCoils::GetCoilMaxWaterFlowRate(state, "Coil:Heating:Water", MSHeatPump(MSHeatPumpNum).SuppHeatCoilName, ErrorsFound); if (CoilMaxVolFlowRate != DataSizing::AutoSize) { - rho = FluidProperties::GetDensityGlycol( + rho = Fluid::GetDensityGlycol( state, state.dataPlnt->PlantLoop(MSHeatPump(MSHeatPumpNum).SuppPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, @@ -2153,7 +2153,7 @@ namespace HVACMultiSpeedHeatPump { if (CoilMaxVolFlowRate != DataSizing::AutoSize) { int SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed - SteamDensity = FluidProperties::GetSatDensityRefrig( + SteamDensity = Fluid::GetSatDensityRefrig( state, fluidNameSteam, state.dataHVACMultiSpdHP->TempSteamIn, 1.0, SteamIndex, RoutineName); MSHeatPump(MSHeatPumpNum).MaxSuppCoilFluidFlow = CoilMaxVolFlowRate * SteamDensity; } @@ -3945,7 +3945,7 @@ namespace HVACMultiSpeedHeatPump { if (HeatRecMassFlowRate > 0.0) { // Heat reclaim water inlet specific heat [J/kg-K] - Real64 CpHeatRec = FluidProperties::GetSpecificHeatGlycol( + Real64 CpHeatRec = Fluid::GetSpecificHeatGlycol( state, state.dataPlnt->PlantLoop(state.dataHVACMultiSpdHP->MSHeatPump(MSHeatPumpNum).HRPlantLoc.loopNum).FluidName, HeatRecInletTemp, diff --git a/src/EnergyPlus/HVACSingleDuctInduc.cc b/src/EnergyPlus/HVACSingleDuctInduc.cc index a7fd16f81b8..d5171cd2d17 100644 --- a/src/EnergyPlus/HVACSingleDuctInduc.cc +++ b/src/EnergyPlus/HVACSingleDuctInduc.cc @@ -620,7 +620,7 @@ namespace HVACSingleDuctInduc { int HotConNode = state.dataHVACSingleDuctInduc->IndUnit(IUNum).HWControlNode; if (HotConNode > 0 && !state.dataHVACSingleDuctInduc->MyPlantScanFlag(IUNum)) { - rho = FluidProperties::GetDensityGlycol( + rho = Fluid::GetDensityGlycol( state, state.dataPlnt->PlantLoop(state.dataHVACSingleDuctInduc->IndUnit(IUNum).HWPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, @@ -641,7 +641,7 @@ namespace HVACSingleDuctInduc { int ColdConNode = state.dataHVACSingleDuctInduc->IndUnit(IUNum).CWControlNode; if (ColdConNode > 0) { - rho = FluidProperties::GetDensityGlycol( + rho = Fluid::GetDensityGlycol( state, state.dataPlnt->PlantLoop(state.dataHVACSingleDuctInduc->IndUnit(IUNum).CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, @@ -850,14 +850,14 @@ namespace HVACSingleDuctInduc { state.dataSize->TermUnitFinalZoneSizing(state.dataSize->CurTermUnitSizingNum).DesHeatCoilInTempTU); } state.dataHVACSingleDuctInduc->IndUnit(IUNum).DesHeatingLoad = DesCoilLoad; - Cp = FluidProperties::GetSpecificHeatGlycol( + Cp = Fluid::GetSpecificHeatGlycol( state, state.dataPlnt->PlantLoop(state.dataHVACSingleDuctInduc->IndUnit(IUNum).HWPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(state.dataHVACSingleDuctInduc->IndUnit(IUNum).HWPlantLoc.loopNum).FluidIndex, RoutineName); - rho = FluidProperties::GetDensityGlycol( + rho = Fluid::GetDensityGlycol( state, state.dataPlnt->PlantLoop(state.dataHVACSingleDuctInduc->IndUnit(IUNum).HWPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, @@ -985,14 +985,14 @@ namespace HVACSingleDuctInduc { state.dataSize->TermUnitFinalZoneSizing(state.dataSize->CurTermUnitSizingNum).ZoneSizThermSetPtHi); } state.dataHVACSingleDuctInduc->IndUnit(IUNum).DesCoolingLoad = DesCoilLoad; - Cp = FluidProperties::GetSpecificHeatGlycol( + Cp = Fluid::GetSpecificHeatGlycol( state, state.dataPlnt->PlantLoop(state.dataHVACSingleDuctInduc->IndUnit(IUNum).CWPlantLoc.loopNum).FluidName, 5.0, state.dataPlnt->PlantLoop(state.dataHVACSingleDuctInduc->IndUnit(IUNum).CWPlantLoc.loopNum).FluidIndex, RoutineName); - rho = FluidProperties::GetDensityGlycol( + rho = Fluid::GetDensityGlycol( state, state.dataPlnt->PlantLoop(state.dataHVACSingleDuctInduc->IndUnit(IUNum).CWPlantLoc.loopNum).FluidName, 5.0, diff --git a/src/EnergyPlus/HVACSizingSimulationManager.cc b/src/EnergyPlus/HVACSizingSimulationManager.cc index 9dd268ccea2..5eb14ef0172 100644 --- a/src/EnergyPlus/HVACSizingSimulationManager.cc +++ b/src/EnergyPlus/HVACSizingSimulationManager.cc @@ -97,12 +97,12 @@ void HVACSizingSimulationManager::CreateNewCoincidentPlantAnalysisObject(EnergyP for (int i = 1; i <= state.dataPlnt->TotNumLoops; ++i) { if (PlantLoopName == state.dataPlnt->PlantLoop(i).Name) { // found it - density = FluidProperties::GetDensityGlycol(state, + density = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(i).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(i).FluidIndex, "createNewCoincidentPlantAnalysisObject"); - cp = FluidProperties::GetSpecificHeatGlycol(state, + cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(i).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(i).FluidIndex, diff --git a/src/EnergyPlus/HVACUnitaryBypassVAV.cc b/src/EnergyPlus/HVACUnitaryBypassVAV.cc index b12b3213faf..f1ae2872352 100644 --- a/src/EnergyPlus/HVACUnitaryBypassVAV.cc +++ b/src/EnergyPlus/HVACUnitaryBypassVAV.cc @@ -901,7 +901,7 @@ namespace HVACUnitaryBypassVAV { thisCBVAV.CoilControlNode = state.dataSteamCoils->SteamCoil(thisCBVAV.HeatCoilIndex).SteamInletNodeNum; thisCBVAV.MaxHeatCoilFluidFlow = state.dataSteamCoils->SteamCoil(thisCBVAV.HeatCoilIndex).MaxSteamVolFlowRate; int SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed - Real64 SteamDensity = FluidProperties::GetSatDensityRefrig( + Real64 SteamDensity = Fluid::GetSatDensityRefrig( state, fluidNameSteam, state.dataHVACUnitaryBypassVAV->TempSteamIn, 1.0, SteamIndex, getUnitaryHeatCoolVAVChangeoverBypass); if (thisCBVAV.MaxHeatCoilFluidFlow > 0.0) { thisCBVAV.MaxHeatCoilFluidFlow = thisCBVAV.MaxHeatCoilFluidFlow * SteamDensity; @@ -1382,7 +1382,7 @@ namespace HVACUnitaryBypassVAV { cBVAV.MaxHeatCoilFluidFlow = WaterCoils::GetCoilMaxWaterFlowRate(state, "Coil:Heating:Water", cBVAV.HeatCoilName, ErrorsFound); if (cBVAV.MaxHeatCoilFluidFlow > 0.0) { - Real64 FluidDensity = FluidProperties::GetDensityGlycol(state, + Real64 FluidDensity = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(cBVAV.plantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(cBVAV.plantLoc.loopNum).FluidIndex, @@ -1405,7 +1405,7 @@ namespace HVACUnitaryBypassVAV { if (cBVAV.MaxHeatCoilFluidFlow > 0.0) { int SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed - Real64 FluidDensity = FluidProperties::GetSatDensityRefrig( + Real64 FluidDensity = Fluid::GetSatDensityRefrig( state, fluidNameSteam, state.dataHVACUnitaryBypassVAV->TempSteamIn, 1.0, SteamIndex, RoutineName); cBVAV.MaxHeatCoilFluidFlow = SteamCoils::GetCoilMaxSteamFlowRate(state, cBVAV.HeatCoilIndex, ErrorsFound) * FluidDensity; } @@ -1480,7 +1480,7 @@ namespace HVACUnitaryBypassVAV { ShowContinueError(state, format("Occurs in {} = {}", "AirLoopHVAC:UnitaryHeatCool:VAVChangeoverBypass", cBVAV.Name)); } if (CoilMaxVolFlowRate != DataSizing::AutoSize) { - Real64 FluidDensity = FluidProperties::GetDensityGlycol(state, + Real64 FluidDensity = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(cBVAV.plantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(cBVAV.plantLoc.loopNum).FluidIndex, @@ -1502,7 +1502,7 @@ namespace HVACUnitaryBypassVAV { } if (CoilMaxVolFlowRate != DataSizing::AutoSize) { int SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed - Real64 FluidDensity = FluidProperties::GetSatDensityRefrig( + Real64 FluidDensity = Fluid::GetSatDensityRefrig( state, fluidNameSteam, state.dataHVACUnitaryBypassVAV->TempSteamIn, 1.0, SteamIndex, RoutineName); cBVAV.MaxHeatCoilFluidFlow = CoilMaxVolFlowRate * FluidDensity; } diff --git a/src/EnergyPlus/HVACVariableRefrigerantFlow.cc b/src/EnergyPlus/HVACVariableRefrigerantFlow.cc index bce02535fa9..155b4cd2731 100644 --- a/src/EnergyPlus/HVACVariableRefrigerantFlow.cc +++ b/src/EnergyPlus/HVACVariableRefrigerantFlow.cc @@ -358,7 +358,7 @@ void CalcVRFCondenser(EnergyPlusData &state, int const VRFCond) // If terminal units require more capacity than can be delivered by condenser, a limit is set. using Curve::CurveValue; - using FluidProperties::GetSpecificHeatGlycol; + using Fluid::GetSpecificHeatGlycol; using PlantUtilities::SetComponentFlowRate; using Psychrometrics::RhoH2O; @@ -2484,11 +2484,7 @@ void GetVRFInputData(EnergyPlusData &state, bool &ErrorsFound) // Refrigerant type thisVrfFluidCtrl.RefrigerantName = cAlphaArgs(4); - if (state.dataFluidProps->GetInput) { - EnergyPlus::FluidProperties::GetFluidPropertiesData(state); - state.dataFluidProps->GetInput = false; - } - if (Util::FindItemInList(thisVrfFluidCtrl.RefrigerantName, state.dataFluidProps->RefrigData, state.dataFluidProps->NumOfRefrigerants) == 0) { + if (Util::FindItemInList(thisVrfFluidCtrl.RefrigerantName, state.dataFluid->RefrigData, state.dataFluid->NumOfRefrigerants) == 0) { ShowSevereError(state, cCurrentModuleObject + " = " + thisVrfFluidCtrl.Name); ShowContinueError(state, "Illegal " + cAlphaFieldNames(4) + " = " + cAlphaArgs(4)); ErrorsFound = true; @@ -2883,11 +2879,7 @@ void GetVRFInputData(EnergyPlusData &state, bool &ErrorsFound) // Refrigerant type thisVrfFluidCtrlHR.RefrigerantName = cAlphaArgs(4); - if (state.dataFluidProps->GetInput) { - EnergyPlus::FluidProperties::GetFluidPropertiesData(state); - state.dataFluidProps->GetInput = false; - } - if (Util::FindItemInList(thisVrfFluidCtrlHR.RefrigerantName, state.dataFluidProps->RefrigData, state.dataFluidProps->NumOfRefrigerants) == + if (Util::FindItemInList(thisVrfFluidCtrlHR.RefrigerantName, state.dataFluid->RefrigData, state.dataFluid->NumOfRefrigerants) == 0) { ShowSevereError(state, cCurrentModuleObject + " = " + thisVrfFluidCtrlHR.Name); ShowContinueError(state, "Illegal " + cAlphaFieldNames(4) + " = " + cAlphaArgs(4)); @@ -4300,7 +4292,7 @@ void GetVRFInputData(EnergyPlusData &state, bool &ErrorsFound) if (thisVrfTU.SuppHeatCoilFluidMaxFlow > 0.0) { int SteamIndex = 0; // fluid type index of 0 is passed if steam Real64 TempSteamIn = 100.0; - Real64 SteamDensity = FluidProperties::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, SteamIndex, RoutineName); + Real64 SteamDensity = Fluid::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, SteamIndex, RoutineName); thisVrfTU.SuppHeatCoilFluidMaxFlow = SteamCoils::GetCoilMaxSteamFlowRate(state, thisVrfTU.SuppHeatCoilIndex, errFlag) * SteamDensity; } @@ -5527,7 +5519,7 @@ void InitVRF(EnergyPlusData &state, int const VRFTUNum, int const ZoneNum, bool using DataSizing::AutoSize; using DataZoneEquipment::CheckZoneEquipmentList; - using FluidProperties::GetDensityGlycol; + using Fluid::GetDensityGlycol; using PlantUtilities::InitComponentNodes; using ScheduleManager::GetCurrentScheduleValue; @@ -5697,7 +5689,7 @@ void InitVRF(EnergyPlusData &state, int const VRFTUNum, int const ZoneNum, bool if (state.dataHVACVarRefFlow->VRFTU(VRFTUNum).SuppHeatCoilFluidMaxFlow > 0.0) { int SteamIndex = 0; // fluid type index of 0 is passed if steam Real64 TempSteamIn = 100.0; - Real64 SteamDensity = FluidProperties::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, SteamIndex, RoutineName); + Real64 SteamDensity = Fluid::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, SteamIndex, RoutineName); state.dataHVACVarRefFlow->VRFTU(VRFTUNum).SuppHeatCoilFluidMaxFlow = state.dataHVACVarRefFlow->VRFTU(VRFTUNum).SuppHeatCoilFluidMaxFlow * SteamDensity; } @@ -6329,7 +6321,7 @@ void InitVRF(EnergyPlusData &state, int const VRFTUNum, int const ZoneNum, bool if (CoilMaxVolFlowRate != DataSizing::AutoSize) { int SteamIndex = 0; // fluid type index of 0 is passed if steam Real64 TempSteamIn = 100.0; - Real64 SteamDensity = FluidProperties::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, SteamIndex, RoutineName); + Real64 SteamDensity = Fluid::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, SteamIndex, RoutineName); state.dataHVACVarRefFlow->VRFTU(VRFTUNum).SuppHeatCoilFluidMaxFlow = CoilMaxVolFlowRate * SteamDensity; } } @@ -8915,13 +8907,13 @@ void VRFCondenserEquipment::SizeVRFCondenser(EnergyPlusData &state) if (this->WaterCondVolFlowRate == DataSizing::AutoSize) { if (this->SourcePlantLoc.loopNum > 0) PltSizCondNum = state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).PlantSizNum; if (PltSizCondNum > 0) { - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidName, state.dataSize->PlantSizData(PltSizCondNum).ExitTemp, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidIndex, RoutineName); - Cp = FluidProperties::GetSpecificHeatGlycol(state, + Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidName, state.dataSize->PlantSizData(PltSizCondNum).ExitTemp, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidIndex, @@ -8937,7 +8929,7 @@ void VRFCondenserEquipment::SizeVRFCondenser(EnergyPlusData &state) this->WaterCondVolFlowRate); } - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidIndex, @@ -11031,14 +11023,14 @@ void VRFCondenserEquipment::CalcVRFCondenser_FluidTCtrl(EnergyPlusData &state) // A new physics based VRF model applicable for Fluid Temperature Control. using Curve::CurveValue; - using FluidProperties::FindRefrigerant; - using FluidProperties::GetSatEnthalpyRefrig; - using FluidProperties::GetSatPressureRefrig; - using FluidProperties::GetSatTemperatureRefrig; - using FluidProperties::GetSpecificHeatGlycol; - using FluidProperties::GetSupHeatDensityRefrig; - using FluidProperties::GetSupHeatEnthalpyRefrig; - using FluidProperties::GetSupHeatTempRefrig; + using Fluid::FindRefrigerant; + using Fluid::GetSatEnthalpyRefrig; + using Fluid::GetSatPressureRefrig; + using Fluid::GetSatTemperatureRefrig; + using Fluid::GetSpecificHeatGlycol; + using Fluid::GetSupHeatDensityRefrig; + using Fluid::GetSupHeatEnthalpyRefrig; + using Fluid::GetSupHeatTempRefrig; using General::SolveRoot; using PlantUtilities::SetComponentFlowRate; @@ -11223,10 +11215,10 @@ void VRFCondenserEquipment::CalcVRFCondenser_FluidTCtrl(EnergyPlusData &state) RefrigerantIndex = FindRefrigerant(state, this->RefrigerantName); RefMinPe = GetSatPressureRefrig(state, this->RefrigerantName, RefMinTe, RefrigerantIndex, RoutineName); RefMinPe = GetSatPressureRefrig(state, this->RefrigerantName, RefMinTe, RefrigerantIndex, RoutineName); - RefTLow = state.dataFluidProps->RefrigData(RefrigerantIndex).PsLowTempValue; // High Temperature Value for Ps (max in tables) - RefTHigh = state.dataFluidProps->RefrigData(RefrigerantIndex).PsHighTempValue; // High Temperature Value for Ps (max in tables) - RefPLow = state.dataFluidProps->RefrigData(RefrigerantIndex).PsLowPresValue; // Low Pressure Value for Ps (>0.0) - RefPHigh = state.dataFluidProps->RefrigData(RefrigerantIndex).PsHighPresValue; // High Pressure Value for Ps (max in tables) + RefTLow = state.dataFluid->RefrigData(RefrigerantIndex).PsLowTempValue; // High Temperature Value for Ps (max in tables) + RefTHigh = state.dataFluid->RefrigData(RefrigerantIndex).PsHighTempValue; // High Temperature Value for Ps (max in tables) + RefPLow = state.dataFluid->RefrigData(RefrigerantIndex).PsLowPresValue; // Low Pressure Value for Ps (>0.0) + RefPHigh = state.dataFluid->RefrigData(RefrigerantIndex).PsHighPresValue; // High Pressure Value for Ps (max in tables) // sum loads on TU coils for (NumTU = 1; NumTU <= NumTUInList; ++NumTU) { @@ -13485,11 +13477,11 @@ Real64 VRFCondenserEquipment::VRFOU_CapModFactor( // METHODOLOGY EMPLOYED: // This is part of the VRF-FluidTCtrl Model. - using FluidProperties::FindRefrigerant; - using FluidProperties::GetSatEnthalpyRefrig; - using FluidProperties::GetSatTemperatureRefrig; - using FluidProperties::GetSupHeatDensityRefrig; - using FluidProperties::GetSupHeatEnthalpyRefrig; + using Fluid::FindRefrigerant; + using Fluid::GetSatEnthalpyRefrig; + using Fluid::GetSatTemperatureRefrig; + using Fluid::GetSupHeatDensityRefrig; + using Fluid::GetSupHeatEnthalpyRefrig; int RefrigerantIndex; // Index of the refrigerant [-] Real64 C_cap_density; // Compressor capacity modification algorithm_modified flow rate [-] @@ -13562,10 +13554,10 @@ void VRFCondenserEquipment::VRFOU_TeModification( // METHODOLOGY EMPLOYED: // This is part of the VRF-FluidTCtrl Model. - using FluidProperties::FindRefrigerant; - using FluidProperties::GetSatPressureRefrig; - using FluidProperties::GetSatTemperatureRefrig; - using FluidProperties::GetSupHeatEnthalpyRefrig; + using Fluid::FindRefrigerant; + using Fluid::GetSatPressureRefrig; + using Fluid::GetSatTemperatureRefrig; + using Fluid::GetSupHeatEnthalpyRefrig; int CoolCoilIndex; // index to cooling coil in terminal unit int NumTUInList; // number of terminal units is list @@ -13592,8 +13584,8 @@ void VRFCondenserEquipment::VRFOU_TeModification( // variable initializations TUListNum = this->ZoneTUListPtr; RefrigerantIndex = FindRefrigerant(state, this->RefrigerantName); - RefPLow = state.dataFluidProps->RefrigData(RefrigerantIndex).PsLowPresValue; - RefPHigh = state.dataFluidProps->RefrigData(RefrigerantIndex).PsHighPresValue; + RefPLow = state.dataFluid->RefrigData(RefrigerantIndex).PsLowPresValue; + RefPHigh = state.dataFluid->RefrigData(RefrigerantIndex).PsHighPresValue; NumTUInList = state.dataHVACVarRefFlow->TerminalUnitList(TUListNum).NumTUInList; // Initialization of Te iterations (Label11) @@ -13700,9 +13692,9 @@ void VRFCondenserEquipment::VRFOU_CompSpd( // This is part of the VRF-FluidTCtrl Model. using Curve::CurveValue; - using FluidProperties::FindRefrigerant; - using FluidProperties::GetSatPressureRefrig; - using FluidProperties::GetSupHeatTempRefrig; + using Fluid::FindRefrigerant; + using Fluid::GetSatPressureRefrig; + using Fluid::GetSupHeatTempRefrig; // Locals // SUBROUTINE ARGUMENT DEFINITIONS: @@ -13732,8 +13724,8 @@ void VRFCondenserEquipment::VRFOU_CompSpd( TUListNum = this->ZoneTUListPtr; NumTUInList = state.dataHVACVarRefFlow->TerminalUnitList(TUListNum).NumTUInList; RefrigerantIndex = FindRefrigerant(state, this->RefrigerantName); - RefPLow = state.dataFluidProps->RefrigData(RefrigerantIndex).PsLowPresValue; - RefPHigh = state.dataFluidProps->RefrigData(RefrigerantIndex).PsHighPresValue; + RefPLow = state.dataFluid->RefrigData(RefrigerantIndex).PsLowPresValue; + RefPHigh = state.dataFluid->RefrigData(RefrigerantIndex).PsHighPresValue; // variable initializations: compressor NumOfCompSpdInput = this->CompressorSpeed.size(); @@ -13859,9 +13851,9 @@ void VRFCondenserEquipment::VRFOU_CompCap( // This is part of the VRF-FluidTCtrl Model. using Curve::CurveValue; - using FluidProperties::FindRefrigerant; - using FluidProperties::GetSatPressureRefrig; - using FluidProperties::GetSupHeatTempRefrig; + using Fluid::FindRefrigerant; + using Fluid::GetSatPressureRefrig; + using Fluid::GetSupHeatTempRefrig; int CounterCompSpdTemp; // Index for the compressor speed level[-] int CompSpdLB; // index for Compressor speed low bound [-] @@ -13886,8 +13878,8 @@ void VRFCondenserEquipment::VRFOU_CompCap( TUListNum = this->ZoneTUListPtr; NumTUInList = state.dataHVACVarRefFlow->TerminalUnitList(TUListNum).NumTUInList; RefrigerantIndex = FindRefrigerant(state, this->RefrigerantName); - RefPLow = state.dataFluidProps->RefrigData(RefrigerantIndex).PsLowPresValue; - RefPHigh = state.dataFluidProps->RefrigData(RefrigerantIndex).PsHighPresValue; + RefPLow = state.dataFluid->RefrigData(RefrigerantIndex).PsLowPresValue; + RefPHigh = state.dataFluid->RefrigData(RefrigerantIndex).PsHighPresValue; // variable initializations: compressor NumOfCompSpdInput = this->CompressorSpeed.size(); @@ -13981,12 +13973,12 @@ void VRFCondenserEquipment::VRFOU_CalcCompC(EnergyPlusData &state, // This is part of the VRF-FluidTCtrl Model. using Curve::CurveValue; - using FluidProperties::FindRefrigerant; - using FluidProperties::GetSatEnthalpyRefrig; - using FluidProperties::GetSatPressureRefrig; - using FluidProperties::GetSatTemperatureRefrig; - using FluidProperties::GetSupHeatEnthalpyRefrig; - using FluidProperties::GetSupHeatTempRefrig; + using Fluid::FindRefrigerant; + using Fluid::GetSatEnthalpyRefrig; + using Fluid::GetSatPressureRefrig; + using Fluid::GetSatTemperatureRefrig; + using Fluid::GetSupHeatEnthalpyRefrig; + using Fluid::GetSupHeatTempRefrig; using General::SolveRoot; int CounterCompSpdTemp; // Index for the compressor speed level[-] @@ -14044,8 +14036,8 @@ void VRFCondenserEquipment::VRFOU_CalcCompC(EnergyPlusData &state, TUListNum = this->ZoneTUListPtr; RefrigerantIndex = FindRefrigerant(state, this->RefrigerantName); - RefPLow = state.dataFluidProps->RefrigData(RefrigerantIndex).PsLowPresValue; - RefPHigh = state.dataFluidProps->RefrigData(RefrigerantIndex).PsHighPresValue; + RefPLow = state.dataFluid->RefrigData(RefrigerantIndex).PsLowPresValue; + RefPHigh = state.dataFluid->RefrigData(RefrigerantIndex).PsHighPresValue; NumTUInList = state.dataHVACVarRefFlow->TerminalUnitList(TUListNum).NumTUInList; Modifi_SH = Pipe_T_comp_in - T_suction; @@ -14330,12 +14322,12 @@ void VRFCondenserEquipment::VRFOU_CalcCompH( // This is part of the VRF-FluidTCtrl Model. using Curve::CurveValue; - using FluidProperties::FindRefrigerant; - using FluidProperties::GetSatEnthalpyRefrig; - using FluidProperties::GetSatPressureRefrig; - using FluidProperties::GetSatTemperatureRefrig; - using FluidProperties::GetSupHeatEnthalpyRefrig; - using FluidProperties::GetSupHeatTempRefrig; + using Fluid::FindRefrigerant; + using Fluid::GetSatEnthalpyRefrig; + using Fluid::GetSatPressureRefrig; + using Fluid::GetSatTemperatureRefrig; + using Fluid::GetSupHeatEnthalpyRefrig; + using Fluid::GetSupHeatTempRefrig; using General::SolveRoot; int CounterCompSpdTemp; // Index for the compressor speed level[-] @@ -14375,8 +14367,8 @@ void VRFCondenserEquipment::VRFOU_CalcCompH( TUListNum = this->ZoneTUListPtr; RefrigerantIndex = FindRefrigerant(state, this->RefrigerantName); - RefPLow = state.dataFluidProps->RefrigData(RefrigerantIndex).PsLowPresValue; - RefPHigh = state.dataFluidProps->RefrigData(RefrigerantIndex).PsHighPresValue; + RefPLow = state.dataFluid->RefrigData(RefrigerantIndex).PsLowPresValue; + RefPHigh = state.dataFluid->RefrigData(RefrigerantIndex).PsHighPresValue; NumTUInList = state.dataHVACVarRefFlow->TerminalUnitList(TUListNum).NumTUInList; // Calculate capacity modification factor @@ -14538,10 +14530,10 @@ void VRFCondenserEquipment::VRFHR_OU_HR_Mode(EnergyPlusData &state, // METHODOLOGY EMPLOYED: // This is part of the physics based VRF model applicable for Fluid Temperature Control. - using FluidProperties::FindRefrigerant; - using FluidProperties::GetSatEnthalpyRefrig; - using FluidProperties::GetSatPressureRefrig; - using FluidProperties::GetSupHeatEnthalpyRefrig; + using Fluid::FindRefrigerant; + using Fluid::GetSatEnthalpyRefrig; + using Fluid::GetSatPressureRefrig; + using Fluid::GetSupHeatEnthalpyRefrig; using General::SolveRoot; Real64 constexpr ErrorTol(0.1); // tolerance for RegulaFalsi iterations @@ -14579,8 +14571,8 @@ void VRFCondenserEquipment::VRFHR_OU_HR_Mode(EnergyPlusData &state, // Initializations: component index RefrigerantIndex = FindRefrigerant(state, this->RefrigerantName); - RefPLow = state.dataFluidProps->RefrigData(RefrigerantIndex).PsLowPresValue; - RefPHigh = state.dataFluidProps->RefrigData(RefrigerantIndex).PsHighPresValue; + RefPLow = state.dataFluid->RefrigData(RefrigerantIndex).PsLowPresValue; + RefPHigh = state.dataFluid->RefrigData(RefrigerantIndex).PsHighPresValue; // **Q_OU: HR mode determination // HRMode-1. Cooling Only @@ -14977,8 +14969,8 @@ void VRFCondenserEquipment::VRFOU_PipeLossC( // METHODOLOGY EMPLOYED: // Use a physics based piping loss model. - using FluidProperties::FindRefrigerant; - using FluidProperties::GetSupHeatDensityRefrig; + using Fluid::FindRefrigerant; + using Fluid::GetSupHeatDensityRefrig; using General::SolveRoot; int TUListNum; // index to TU List @@ -15016,8 +15008,8 @@ void VRFCondenserEquipment::VRFOU_PipeLossC( // Refrigerant data RefrigerantIndex = FindRefrigerant(state, this->RefrigerantName); - Real64 RefPLow = state.dataFluidProps->RefrigData(RefrigerantIndex).PsLowPresValue; // Low Pressure Value for Ps (>0.0) - Real64 RefPHigh = state.dataFluidProps->RefrigData(RefrigerantIndex).PsHighPresValue; // High Pressure Value for Ps (max in tables) + Real64 RefPLow = state.dataFluid->RefrigData(RefrigerantIndex).PsLowPresValue; // Low Pressure Value for Ps (>0.0) + Real64 RefPHigh = state.dataFluid->RefrigData(RefrigerantIndex).PsHighPresValue; // High Pressure Value for Ps (max in tables) // Calculate Pipe_T_room Pipe_T_room = 0; @@ -15124,11 +15116,11 @@ void VRFCondenserEquipment::VRFOU_PipeLossH( // METHODOLOGY EMPLOYED: // Use a physics based piping loss model. - using FluidProperties::FindRefrigerant; - using FluidProperties::GetSatTemperatureRefrig; - using FluidProperties::GetSupHeatDensityRefrig; - using FluidProperties::GetSupHeatEnthalpyRefrig; - using FluidProperties::GetSupHeatTempRefrig; + using Fluid::FindRefrigerant; + using Fluid::GetSatTemperatureRefrig; + using Fluid::GetSupHeatDensityRefrig; + using Fluid::GetSupHeatEnthalpyRefrig; + using Fluid::GetSupHeatTempRefrig; using General::SolveRoot; int TUListNum; // index to TU List @@ -15167,9 +15159,9 @@ void VRFCondenserEquipment::VRFOU_PipeLossH( // Refrigerant data RefrigerantIndex = FindRefrigerant(state, this->RefrigerantName); - Real64 RefTHigh = state.dataFluidProps->RefrigData(RefrigerantIndex).PsHighTempValue; // High Temperature Value for Ps (max in tables) - Real64 RefPLow = state.dataFluidProps->RefrigData(RefrigerantIndex).PsLowPresValue; // Low Pressure Value for Ps (>0.0) - Real64 RefPHigh = state.dataFluidProps->RefrigData(RefrigerantIndex).PsHighPresValue; // High Pressure Value for Ps (max in tables) + Real64 RefTHigh = state.dataFluid->RefrigData(RefrigerantIndex).PsHighTempValue; // High Temperature Value for Ps (max in tables) + Real64 RefPLow = state.dataFluid->RefrigData(RefrigerantIndex).PsLowPresValue; // Low Pressure Value for Ps (>0.0) + Real64 RefPHigh = state.dataFluid->RefrigData(RefrigerantIndex).PsHighPresValue; // High Pressure Value for Ps (max in tables) Real64 RefTSat = GetSatTemperatureRefrig(state, this->RefrigerantName, max(min(Pcond, RefPHigh), RefPLow), RefrigerantIndex, RoutineName); // Perform iteration to calculate Pipe_T_IU_in, given P and h diff --git a/src/EnergyPlus/HWBaseboardRadiator.cc b/src/EnergyPlus/HWBaseboardRadiator.cc index c6ff41bfedc..d3d6f57df9e 100644 --- a/src/EnergyPlus/HWBaseboardRadiator.cc +++ b/src/EnergyPlus/HWBaseboardRadiator.cc @@ -880,7 +880,7 @@ namespace HWBaseboardRadiator { // Initialize WaterInletNode = HWBaseboard.WaterInletNode; - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(HWBaseboard.plantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(HWBaseboard.plantLoc.loopNum).FluidIndex, @@ -892,7 +892,7 @@ namespace HWBaseboardRadiator { state.dataLoopNodes->Node(WaterInletNode).Temp = 60.0; - Cp = FluidProperties::GetSpecificHeatGlycol(state, + Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(HWBaseboard.plantLoc.loopNum).FluidName, state.dataLoopNodes->Node(WaterInletNode).Temp, state.dataPlnt->PlantLoop(HWBaseboard.plantLoc.loopNum).FluidIndex, @@ -1068,12 +1068,12 @@ namespace HWBaseboardRadiator { CheckZoneSizing(state, cCMO_BBRadiator_Water, hWBaseboard.Name); DesCoilLoad = RatedCapacityDes; if (DesCoilLoad >= HVAC::SmallLoad) { - Cp = FluidProperties::GetSpecificHeatGlycol(state, + Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(hWBaseboard.plantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(hWBaseboard.plantLoc.loopNum).FluidIndex, RoutineName); - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(hWBaseboard.plantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(hWBaseboard.plantLoc.loopNum).FluidIndex, @@ -1120,7 +1120,7 @@ namespace HWBaseboardRadiator { WaterMassFlowRateStd = hWBaseboard.WaterMassFlowRateStd; } else if (hWBaseboard.RatedCapacity == DataSizing::AutoSize || hWBaseboard.RatedCapacity == 0.0) { DesCoilLoad = RatedCapacityDes; - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(hWBaseboard.plantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(hWBaseboard.plantLoc.loopNum).FluidIndex, @@ -1132,7 +1132,7 @@ namespace HWBaseboardRadiator { // Air mass flow rate is obtained from the following linear equation // m_dot = 0.0062 + 2.75e-05*q AirMassFlowRate = Constant + Coeff * DesCoilLoad; - Cp = FluidProperties::GetSpecificHeatGlycol(state, + Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(hWBaseboard.plantLoc.loopNum).FluidName, hWBaseboard.WaterTempAvg, state.dataPlnt->PlantLoop(hWBaseboard.plantLoc.loopNum).FluidIndex, @@ -1188,7 +1188,7 @@ namespace HWBaseboardRadiator { WaterMassFlowRateStd = hWBaseboard.WaterMassFlowRateStd; // m_dot = 0.0062 + 2.75e-05*q AirMassFlowRate = Constant + Coeff * DesCoilLoad; - Cp = FluidProperties::GetSpecificHeatGlycol(state, + Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(hWBaseboard.plantLoc.loopNum).FluidName, hWBaseboard.WaterTempAvg, state.dataPlnt->PlantLoop(hWBaseboard.plantLoc.loopNum).FluidIndex, @@ -1293,7 +1293,7 @@ namespace HWBaseboardRadiator { // Calculate air mass flow rate AirMassFlowRate = hWBaseboard.AirMassFlowRateStd * (WaterMassFlowRate / hWBaseboard.WaterMassFlowRateMax); CapacitanceAir = Psychrometrics::PsyCpAirFnW(hWBaseboard.AirInletHumRat) * AirMassFlowRate; - Cp = FluidProperties::GetSpecificHeatGlycol(state, + Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(hWBaseboard.plantLoc.loopNum).FluidName, WaterInletTemp, state.dataPlnt->PlantLoop(hWBaseboard.plantLoc.loopNum).FluidIndex, diff --git a/src/EnergyPlus/HeatPumpWaterToWaterCOOLING.cc b/src/EnergyPlus/HeatPumpWaterToWaterCOOLING.cc index 273cb0b0aeb..7dfb18e22e5 100644 --- a/src/EnergyPlus/HeatPumpWaterToWaterCOOLING.cc +++ b/src/EnergyPlus/HeatPumpWaterToWaterCOOLING.cc @@ -359,7 +359,7 @@ void GetGshpInput(EnergyPlusData &state) ShowFatalError(state, "Errors Found in getting Gshp input"); } - state.dataHPWaterToWaterClg->GSHPRefrigIndex = FluidProperties::FindRefrigerant(state, GSHPRefrigerant); + state.dataHPWaterToWaterClg->GSHPRefrigIndex = Fluid::FindRefrigerant(state, GSHPRefrigerant); if (state.dataHPWaterToWaterClg->GSHPRefrigIndex == 0) { ShowFatalError(state, format("Refrigerant for {} not found, should have been={}", ModuleCompName, GSHPRefrigerant)); ShowFatalError(state, format("FluidProperties:* objects for {} must be included in the idf file.", GSHPRefrigerant)); @@ -489,7 +489,7 @@ void GshpPeCoolingSpecs::initialize(EnergyPlusData &state) this->MustRun = true; this->beginEnvironFlag = false; - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidIndex, @@ -498,7 +498,7 @@ void GshpPeCoolingSpecs::initialize(EnergyPlusData &state) PlantUtilities::InitComponentNodes(state, 0.0, this->LoadSideDesignMassFlow, this->LoadSideInletNodeNum, this->LoadSideOutletNodeNum); - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidIndex, @@ -660,13 +660,13 @@ void GshpPeCoolingSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad) initialQLoad = 0.0; IterationCount = 0; - CpSourceSide = FluidProperties::GetSpecificHeatGlycol(state, + CpSourceSide = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidName, this->SourceSideWaterInletTemp, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidIndex, RoutineName); - CpLoadSide = FluidProperties::GetSpecificHeatGlycol(state, + CpLoadSide = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidName, this->LoadSideWaterInletTemp, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidIndex, @@ -689,9 +689,9 @@ void GshpPeCoolingSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad) this->SourceSideWaterInletTemp + initialQSource / (SourceSideEffect * CpSourceSide * this->SourceSideWaterMassFlowRate); // Determine the evaporating and condensing pressures - SourceSidePressure = FluidProperties::GetSatPressureRefrig( + SourceSidePressure = Fluid::GetSatPressureRefrig( state, GSHPRefrigerant, SourceSideRefridgTemp, state.dataHPWaterToWaterClg->GSHPRefrigIndex, RoutineName); - LoadSidePressure = FluidProperties::GetSatPressureRefrig( + LoadSidePressure = Fluid::GetSatPressureRefrig( state, GSHPRefrigerant, LoadSideRefridgTemp, state.dataHPWaterToWaterClg->GSHPRefrigIndex, RoutineName); if (SourceSidePressure < this->LowPressCutoff) { @@ -738,11 +738,11 @@ void GshpPeCoolingSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad) // Determine the Source Side Outlet Enthalpy qual = 1.0; - LoadSideOutletEnth = FluidProperties::GetSatEnthalpyRefrig( + LoadSideOutletEnth = Fluid::GetSatEnthalpyRefrig( state, GSHPRefrigerant, LoadSideRefridgTemp, qual, state.dataHPWaterToWaterClg->GSHPRefrigIndex, RoutineNameLoadSideRefridgTemp); qual = 0.0; - SourceSideOutletEnth = FluidProperties::GetSatEnthalpyRefrig( + SourceSideOutletEnth = Fluid::GetSatEnthalpyRefrig( state, GSHPRefrigerant, SourceSideRefridgTemp, qual, state.dataHPWaterToWaterClg->GSHPRefrigIndex, RoutineNameSourceSideRefridgTemp); // Determine Load Side Outlet Enthalpy @@ -750,7 +750,7 @@ void GshpPeCoolingSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad) CompressInletTemp = LoadSideRefridgTemp + this->SuperheatTemp; // Determine the enathalpy of the super heated fluid at Source Side outlet - SuperHeatEnth = FluidProperties::GetSupHeatEnthalpyRefrig( + SuperHeatEnth = Fluid::GetSupHeatEnthalpyRefrig( state, GSHPRefrigerant, CompressInletTemp, LoadSidePressure, state.dataHPWaterToWaterClg->GSHPRefrigIndex, RoutineNameCompressInletTemp); // Determining the suction state of the fluid from inlet state involves interation @@ -759,7 +759,7 @@ void GshpPeCoolingSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad) // check that with the inlet enthalpy ( as suction loss is isenthalpic). Iterate till desired accuracy is reached // this routine was reenginerred from HVACsim + takes pressure in Pascals, tolrance, refrgerant # R22 =6 - CompSuctionSatTemp = FluidProperties::GetSatTemperatureRefrig( + CompSuctionSatTemp = Fluid::GetSatTemperatureRefrig( state, GSHPRefrigerant, SuctionPr, state.dataHPWaterToWaterClg->GSHPRefrigIndex, RoutineNameSuctionPr); T110 = CompSuctionSatTemp; @@ -769,7 +769,7 @@ void GshpPeCoolingSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad) while (true) { CompSuctionTemp = 0.5 * (T110 + T111); - CompSuctionEnth = FluidProperties::GetSupHeatEnthalpyRefrig( + CompSuctionEnth = Fluid::GetSupHeatEnthalpyRefrig( state, GSHPRefrigerant, CompSuctionTemp, SuctionPr, state.dataHPWaterToWaterClg->GSHPRefrigIndex, RoutineNameCompSuctionTemp); if (std::abs(CompSuctionEnth - SuperHeatEnth) / SuperHeatEnth < 0.0001) { @@ -785,7 +785,7 @@ void GshpPeCoolingSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad) LOOP_exit:; // Determine the Mass flow rate of refrigerant - CompSuctionDensity = FluidProperties::GetSupHeatDensityRefrig( + CompSuctionDensity = Fluid::GetSupHeatDensityRefrig( state, GSHPRefrigerant, CompSuctionTemp, SuctionPr, state.dataHPWaterToWaterClg->GSHPRefrigIndex, RoutineNameCompSuctionTemp); MassRef = this->CompPistonDisp * CompSuctionDensity * (1 + this->CompClearanceFactor - this->CompClearanceFactor * std::pow(DischargePr / SuctionPr, 1 / gamma)); diff --git a/src/EnergyPlus/HeatPumpWaterToWaterHEATING.cc b/src/EnergyPlus/HeatPumpWaterToWaterHEATING.cc index c50b41b9f1e..e3428d2a5cb 100644 --- a/src/EnergyPlus/HeatPumpWaterToWaterHEATING.cc +++ b/src/EnergyPlus/HeatPumpWaterToWaterHEATING.cc @@ -349,7 +349,7 @@ void GetGshpInput(EnergyPlusData &state) ShowFatalError(state, format("Errors Found in getting {} Input", ModuleCompNameUC)); } - state.dataHPWaterToWaterHtg->GSHPRefrigIndex = FluidProperties::FindRefrigerant(state, GSHPRefrigerant); + state.dataHPWaterToWaterHtg->GSHPRefrigIndex = Fluid::FindRefrigerant(state, GSHPRefrigerant); if (state.dataHPWaterToWaterHtg->GSHPRefrigIndex == 0) { ShowFatalError(state, format("Refrigerant for {} not found, should have been={}", ModuleCompName, GSHPRefrigerant)); } @@ -479,7 +479,7 @@ void GshpPeHeatingSpecs::initialize(EnergyPlusData &state) this->MustRun = true; this->beginEnvironFlag = false; - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidIndex, @@ -488,7 +488,7 @@ void GshpPeHeatingSpecs::initialize(EnergyPlusData &state) PlantUtilities::InitComponentNodes(state, 0.0, this->LoadSideDesignMassFlow, this->LoadSideInletNodeNum, this->LoadSideOutletNodeNum); - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidIndex, @@ -613,13 +613,13 @@ void GshpPeHeatingSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad) Real64 initialQLoad = 0.0; int IterationCount = 0; - Real64 CpSourceSide = FluidProperties::GetSpecificHeatGlycol(state, + Real64 CpSourceSide = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidName, this->SourceSideWaterInletTemp, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidIndex, RoutineName); - Real64 CpLoadSide = FluidProperties::GetSpecificHeatGlycol(state, + Real64 CpLoadSide = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidName, this->LoadSideWaterInletTemp, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidIndex, @@ -640,9 +640,9 @@ void GshpPeHeatingSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad) Real64 LoadSideTemp = this->LoadSideWaterInletTemp + initialQLoad / (LoadSideEffect * CpLoadSide * this->LoadSideWaterMassFlowRate); // Determine the evaporating and condensing pressures - Real64 SourceSidePressure = FluidProperties::GetSatPressureRefrig( + Real64 SourceSidePressure = Fluid::GetSatPressureRefrig( state, GSHPRefrigerant, SourceSideTemp, state.dataHPWaterToWaterHtg->GSHPRefrigIndex, RoutineNameSourceSideTemp); - Real64 LoadSidePressure = FluidProperties::GetSatPressureRefrig( + Real64 LoadSidePressure = Fluid::GetSatPressureRefrig( state, GSHPRefrigerant, LoadSideTemp, state.dataHPWaterToWaterHtg->GSHPRefrigIndex, RoutineNameLoadSideTemp); // check cutoff pressures @@ -682,18 +682,18 @@ void GshpPeHeatingSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad) // Determine the Source Side Outlet Enthalpy Real64 qualOne = 1.0; - Real64 SourceSideOutletEnth = FluidProperties::GetSatEnthalpyRefrig( + Real64 SourceSideOutletEnth = Fluid::GetSatEnthalpyRefrig( state, GSHPRefrigerant, SourceSideTemp, qualOne, state.dataHPWaterToWaterHtg->GSHPRefrigIndex, RoutineNameSourceSideTemp); // Determine Load Side Outlet Enthalpy Real64 qualZero = 0.0; - Real64 LoadSideOutletEnth = FluidProperties::GetSatEnthalpyRefrig( + Real64 LoadSideOutletEnth = Fluid::GetSatEnthalpyRefrig( state, GSHPRefrigerant, LoadSideTemp, qualZero, state.dataHPWaterToWaterHtg->GSHPRefrigIndex, RoutineNameLoadSideTemp); // Determine superheated temperature of the Source Side outlet/compressor inlet Real64 CompressInletTemp = SourceSideTemp + this->SuperheatTemp; // Determine the enathalpy of the super heated fluid at Source Side outlet - Real64 SuperHeatEnth = FluidProperties::GetSupHeatEnthalpyRefrig(state, + Real64 SuperHeatEnth = Fluid::GetSupHeatEnthalpyRefrig(state, GSHPRefrigerant, CompressInletTemp, SourceSidePressure, @@ -705,7 +705,7 @@ void GshpPeHeatingSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad) // Determine the saturated temp at suction pressure, shoot out into the superheated region find the enthalpy // check that with the inlet enthalpy ( as suction loss is isenthalpic). Iterate till desired accuracy is reached - CompSuctionSatTemp = FluidProperties::GetSatTemperatureRefrig( + CompSuctionSatTemp = Fluid::GetSatTemperatureRefrig( state, GSHPRefrigerant, SuctionPr, state.dataHPWaterToWaterHtg->GSHPRefrigIndex, RoutineNameSuctionPr); Real64 T110 = CompSuctionSatTemp; @@ -716,7 +716,7 @@ void GshpPeHeatingSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad) while (true) { CompSuctionTemp = 0.5 * (T110 + T111); - CompSuctionEnth = FluidProperties::GetSupHeatEnthalpyRefrig( + CompSuctionEnth = Fluid::GetSupHeatEnthalpyRefrig( state, GSHPRefrigerant, CompSuctionTemp, SuctionPr, state.dataHPWaterToWaterHtg->GSHPRefrigIndex, RoutineNameCompSuctionTemp); if (std::abs(CompSuctionEnth - SuperHeatEnth) / SuperHeatEnth < 0.0001) { break; @@ -730,7 +730,7 @@ void GshpPeHeatingSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad) } // Determine the Mass flow rate of refrigerant - CompSuctionDensity = FluidProperties::GetSupHeatDensityRefrig( + CompSuctionDensity = Fluid::GetSupHeatDensityRefrig( state, GSHPRefrigerant, CompSuctionTemp, SuctionPr, state.dataHPWaterToWaterHtg->GSHPRefrigIndex, RoutineNameCompSuctionTemp); Real64 MassRef = this->CompPistonDisp * CompSuctionDensity * (1.0 + this->CompClearanceFactor - this->CompClearanceFactor * std::pow(DischargePr / SuctionPr, 1.0 / gamma)); diff --git a/src/EnergyPlus/HeatPumpWaterToWaterSimple.cc b/src/EnergyPlus/HeatPumpWaterToWaterSimple.cc index ec365e8c315..ba04b7dfaf5 100644 --- a/src/EnergyPlus/HeatPumpWaterToWaterSimple.cc +++ b/src/EnergyPlus/HeatPumpWaterToWaterSimple.cc @@ -729,26 +729,26 @@ void GshpSpecs::InitWatertoWaterHP(EnergyPlusData &state, this->MustRun = true; if (this->WWHPType == DataPlant::PlantEquipmentType::HPWaterEFHeating) { - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidIndex, RoutineName); this->LoadSideDesignMassFlow = this->RatedLoadVolFlowHeat * rho; - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidIndex, RoutineName); this->SourceSideDesignMassFlow = this->RatedSourceVolFlowHeat * rho; } else if (this->WWHPType == DataPlant::PlantEquipmentType::HPWaterEFCooling) { - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidIndex, RoutineName); this->LoadSideDesignMassFlow = this->RatedLoadVolFlowCool * rho; - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidIndex, @@ -881,12 +881,12 @@ void GshpSpecs::sizeCoolingWaterToWaterHP(EnergyPlusData &state) // store flow rate right away regardless of PlantFirstSizesOkayToFinalize so that data are available this->RatedLoadVolFlowCool = tmpLoadSideVolFlowRate; } - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidIndex, @@ -894,12 +894,12 @@ void GshpSpecs::sizeCoolingWaterToWaterHP(EnergyPlusData &state) tmpCoolingCap = Cp * rho * state.dataSize->PlantSizData(pltLoadSizNum).DeltaT * tmpLoadSideVolFlowRate; } else if (this->companionIdentified && this->RatedLoadVolFlowHeat > 0.0) { tmpLoadSideVolFlowRate = this->RatedLoadVolFlowHeat; - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidIndex, @@ -1069,12 +1069,12 @@ void GshpSpecs::sizeCoolingWaterToWaterHP(EnergyPlusData &state) if (!this->ratedLoadVolFlowCoolWasAutoSized) tmpLoadSideVolFlowRate = this->RatedLoadVolFlowCool; int pltSourceSizNum = state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).PlantSizNum; if (pltSourceSizNum > 0) { - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidIndex, RoutineName); - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidIndex, @@ -1237,12 +1237,12 @@ void GshpSpecs::sizeHeatingWaterToWaterHP(EnergyPlusData &state) // PlantFirstSizesOkayToFinalize is true this->RatedLoadVolFlowHeat = tmpLoadSideVolFlowRate; } - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidIndex, @@ -1250,12 +1250,12 @@ void GshpSpecs::sizeHeatingWaterToWaterHP(EnergyPlusData &state) tmpHeatingCap = Cp * rho * state.dataSize->PlantSizData(pltLoadSizNum).DeltaT * tmpLoadSideVolFlowRate; } else if (this->companionIdentified && this->RatedLoadVolFlowCool > 0.0) { tmpLoadSideVolFlowRate = this->RatedLoadVolFlowCool; - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidIndex, @@ -1424,12 +1424,12 @@ void GshpSpecs::sizeHeatingWaterToWaterHP(EnergyPlusData &state) if (!this->ratedLoadVolFlowHeatWasAutoSized) tmpLoadSideVolFlowRate = this->RatedLoadVolFlowHeat; int pltSourceSizNum = state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).PlantSizNum; if (pltSourceSizNum > 0) { - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidIndex, RoutineName); - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidIndex, @@ -1622,13 +1622,13 @@ void GshpSpecs::CalcWatertoWaterHPCooling(EnergyPlusData &state, Real64 const My return; } - rhoLoadSide = FluidProperties::GetDensityGlycol(state, + rhoLoadSide = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidName, LoadSideInletTemp, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidIndex, RoutineName); - rhoSourceSide = FluidProperties::GetDensityGlycol(state, + rhoSourceSide = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidName, SourceSideInletTemp, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidIndex, @@ -1697,13 +1697,13 @@ void GshpSpecs::CalcWatertoWaterHPCooling(EnergyPlusData &state, Real64 const My QSource *= PartLoadRatio; } - CpLoadSide = FluidProperties::GetSpecificHeatGlycol(state, + CpLoadSide = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidName, LoadSideInletTemp, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidIndex, RoutineName); - CpSourceSide = FluidProperties::GetSpecificHeatGlycol(state, + CpSourceSide = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidName, SourceSideInletTemp, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidIndex, @@ -1786,13 +1786,13 @@ void GshpSpecs::CalcWatertoWaterHPHeating(EnergyPlusData &state, Real64 const My if (!this->MustRun) { return; } - rhoLoadSide = FluidProperties::GetDensityGlycol(state, + rhoLoadSide = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidName, LoadSideInletTemp, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidIndex, RoutineName); - rhoSourceSide = FluidProperties::GetDensityGlycol(state, + rhoSourceSide = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidName, SourceSideInletTemp, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidIndex, @@ -1860,13 +1860,13 @@ void GshpSpecs::CalcWatertoWaterHPHeating(EnergyPlusData &state, Real64 const My QSource *= PartLoadRatio; } - CpLoadSide = FluidProperties::GetSpecificHeatGlycol(state, + CpLoadSide = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidName, LoadSideInletTemp, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidIndex, RoutineName); - CpSourceSide = FluidProperties::GetSpecificHeatGlycol(state, + CpSourceSide = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidName, SourceSideInletTemp, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidIndex, diff --git a/src/EnergyPlus/Humidifiers.cc b/src/EnergyPlus/Humidifiers.cc index 640fe85053c..e6839367170 100644 --- a/src/EnergyPlus/Humidifiers.cc +++ b/src/EnergyPlus/Humidifiers.cc @@ -721,10 +721,10 @@ namespace Humidifiers { // Using/Aliasing using DataSizing::AutoSize; - using FluidProperties::FindGlycol; - using FluidProperties::FindRefrigerant; - using FluidProperties::GetSatEnthalpyRefrig; - using FluidProperties::GetSpecificHeatGlycol; + using Fluid::FindGlycol; + using Fluid::FindRefrigerant; + using Fluid::GetSatEnthalpyRefrig; + using Fluid::GetSpecificHeatGlycol; using Psychrometrics::PsyRhoAirFnPbTdbW; using Psychrometrics::RhoH2O; @@ -1164,10 +1164,10 @@ namespace Humidifiers { // Using/Aliasing using Curve::CurveValue; - using FluidProperties::FindGlycol; - using FluidProperties::FindRefrigerant; - using FluidProperties::GetSatEnthalpyRefrig; - using FluidProperties::GetSpecificHeatGlycol; + using Fluid::FindGlycol; + using Fluid::FindRefrigerant; + using Fluid::GetSatEnthalpyRefrig; + using Fluid::GetSpecificHeatGlycol; using Psychrometrics::PsyHFnTdbW; using Psychrometrics::PsyTdbFnHW; using Psychrometrics::PsyWFnTdbRhPb; diff --git a/src/EnergyPlus/ICEngineElectricGenerator.cc b/src/EnergyPlus/ICEngineElectricGenerator.cc index 0a69998a723..ba63156289e 100644 --- a/src/EnergyPlus/ICEngineElectricGenerator.cc +++ b/src/EnergyPlus/ICEngineElectricGenerator.cc @@ -748,7 +748,7 @@ namespace ICEngineElectricGenerator { HRecRatio = 1.0; Real64 HeatRecInTemp = state.dataLoopNodes->Node(this->HeatRecInletNodeNum).Temp; - Real64 HeatRecCp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 HeatRecCp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidName, HeatRecInTemp, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidIndex, @@ -876,7 +876,7 @@ namespace ICEngineElectricGenerator { if (this->MySizeAndNodeInitFlag && (!this->MyPlantScanFlag) && this->HeatRecActive) { // size mass flow rate - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidIndex, diff --git a/src/EnergyPlus/IceThermalStorage.cc b/src/EnergyPlus/IceThermalStorage.cc index 7b1aed106ae..ab0392f0cd2 100644 --- a/src/EnergyPlus/IceThermalStorage.cc +++ b/src/EnergyPlus/IceThermalStorage.cc @@ -224,7 +224,7 @@ namespace IceThermalStorage { } Real64 DemandMdot = this->DesignMassFlowRate; - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, TempIn, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -361,7 +361,7 @@ namespace IceThermalStorage { } // Calculate the current load on the ice storage unit - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, TempIn, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -1688,7 +1688,7 @@ namespace IceThermalStorage { //---------------------------- int loopNum = this->plantLoc.loopNum; - Real64 CpFluid = FluidProperties::GetDensityGlycol(state, + Real64 CpFluid = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(loopNum).FluidName, state.dataLoopNodes->Node(this->PltInletNodeNum).Temp, state.dataPlnt->PlantLoop(loopNum).FluidIndex, diff --git a/src/EnergyPlus/LowTempRadiantSystem.cc b/src/EnergyPlus/LowTempRadiantSystem.cc index 4be3eac4787..3a7834158af 100644 --- a/src/EnergyPlus/LowTempRadiantSystem.cc +++ b/src/EnergyPlus/LowTempRadiantSystem.cc @@ -272,7 +272,7 @@ namespace LowTempRadiantSystem { using DataSizing::FractionOfAutosizedCoolingCapacity; using DataSizing::FractionOfAutosizedHeatingCapacity; using DataSizing::HeatingDesignCapacity; - using FluidProperties::FindGlycol; + using Fluid::FindGlycol; using NodeInputManager::GetOnlySingleNode; using ScheduleManager::GetScheduleIndex; @@ -1904,7 +1904,7 @@ namespace LowTempRadiantSystem { using DataSizing::AutoSize; using DataZoneEquipment::CheckZoneEquipmentList; - using FluidProperties::GetDensityGlycol; + using Fluid::GetDensityGlycol; using PlantUtilities::InitComponentNodes; using PlantUtilities::ScanPlantLoopsForObject; @@ -2633,8 +2633,8 @@ namespace LowTempRadiantSystem { // Using/Aliasing using namespace DataSizing; - using FluidProperties::GetDensityGlycol; - using FluidProperties::GetSpecificHeatGlycol; + using Fluid::GetDensityGlycol; + using Fluid::GetSpecificHeatGlycol; using HVAC::AutoCalculateSizing; using HVAC::CoolingCapacitySizing; using HVAC::HeatingCapacitySizing; @@ -4181,7 +4181,7 @@ namespace LowTempRadiantSystem { // Using/Aliasing using DataHeatBalance::ZoneData; - using FluidProperties::GetSpecificHeatGlycol; + using Fluid::GetSpecificHeatGlycol; using HVAC::SmallLoad; using PlantUtilities::SetComponentFlowRate; using ScheduleManager::GetCurrentScheduleValue; @@ -4691,7 +4691,7 @@ namespace LowTempRadiantSystem { auto &Zone = state.dataHeatBal->Zone; // Using/Aliasing - using FluidProperties::GetSpecificHeatGlycol; + using Fluid::GetSpecificHeatGlycol; using PlantUtilities::SetComponentFlowRate; // SUBROUTINE PARAMETER DEFINITIONS: @@ -5328,7 +5328,7 @@ namespace LowTempRadiantSystem { { // Using/Aliasing - using FluidProperties::GetSpecificHeatGlycol; + using Fluid::GetSpecificHeatGlycol; using PlantUtilities::SafeCopyPlantNode; using PlantUtilities::SetComponentFlowRate; @@ -5414,7 +5414,7 @@ namespace LowTempRadiantSystem { { // Using/Aliasing - using FluidProperties::GetSpecificHeatGlycol; + using Fluid::GetSpecificHeatGlycol; using PlantUtilities::SafeCopyPlantNode; using PlantUtilities::SetComponentFlowRate; @@ -5645,7 +5645,7 @@ namespace LowTempRadiantSystem { // Code based loosely on code from IBLAST program (research version) // Using/Aliasing - using FluidProperties::GetSpecificHeatGlycol; + using Fluid::GetSpecificHeatGlycol; // Return value Real64 calculateHXEffectivenessTerm; @@ -5980,7 +5980,7 @@ namespace LowTempRadiantSystem { // Using/Aliasing Real64 TimeStepSysSec = state.dataHVACGlobal->TimeStepSysSec; - using FluidProperties::GetSpecificHeatGlycol; + using Fluid::GetSpecificHeatGlycol; constexpr std::string_view routineName("ReportConstantFlowSystem"); Real64 cpFluid; // Specific heat of the fluid in the radiant system diff --git a/src/EnergyPlus/MicroCHPElectricGenerator.cc b/src/EnergyPlus/MicroCHPElectricGenerator.cc index 409b3df0f3c..73aeffcbd11 100644 --- a/src/EnergyPlus/MicroCHPElectricGenerator.cc +++ b/src/EnergyPlus/MicroCHPElectricGenerator.cc @@ -696,7 +696,7 @@ void MicroCHPDataStruct::onInitLoopEquip(EnergyPlusData &state, const EnergyPlus { static constexpr std::string_view RoutineName("MicroCHPDataStruct::onInitLoopEquip"); - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->PlantInletNodeID).Temp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -1165,7 +1165,7 @@ void MicroCHPDataStruct::CalcMicroCHPNoNormalizeGeneratorModel(EnergyPlusData &s Teng = FuncDetermineEngineTemp( TcwOut, this->A42Model.MCeng, this->A42Model.UAhx, this->A42Model.UAskin, thisAmbientTemp, Qgenss, this->A42Model.TengLast, dt); - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, TcwIn, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -1382,7 +1382,7 @@ void MicroCHPDataStruct::CalcUpdateHeatRecovery(EnergyPlusData &state) const state.dataLoopNodes->Node(this->PlantOutletNodeID).Temp = this->A42Model.TcwOut; - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, this->A42Model.TcwIn, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -1417,7 +1417,7 @@ void MicroCHPDataStruct::UpdateMicroCHPGeneratorRecords(EnergyPlusData &state) / this->A42Model.ACEnergyGen = this->A42Model.Pnet * state.dataHVACGlobal->TimeStepSysSec; // energy produced (J) this->A42Model.QdotHX = this->A42Model.UAhx * (this->A42Model.Teng - this->A42Model.TcwOut); // heat recovered rate (W) - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, this->A42Model.TcwIn, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, diff --git a/src/EnergyPlus/MicroturbineElectricGenerator.cc b/src/EnergyPlus/MicroturbineElectricGenerator.cc index 7fec013cf98..bcff2b46c84 100644 --- a/src/EnergyPlus/MicroturbineElectricGenerator.cc +++ b/src/EnergyPlus/MicroturbineElectricGenerator.cc @@ -1251,7 +1251,7 @@ void MTGeneratorSpecs::CalcMTGeneratorModel(EnergyPlusData &state, if (this->HeatRecActive) { HeatRecInTemp = state.dataLoopNodes->Node(this->HeatRecInletNodeNum).Temp; - HeatRecCp = FluidProperties::GetSpecificHeatGlycol(state, + HeatRecCp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidName, HeatRecInTemp, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidIndex, @@ -1585,7 +1585,7 @@ void MTGeneratorSpecs::CalcMTGeneratorModel(EnergyPlusData &state, // Calculate heat recovery rate modifier curve output (function of water [volumetric] flow rate) if (this->HeatRecRateFWaterFlowCurveNum > 0) { - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidName, HeatRecInTemp, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidIndex, @@ -1958,7 +1958,7 @@ void MTGeneratorSpecs::oneTimeInit(EnergyPlusData &state) if (this->MySizeAndNodeInitFlag && (!this->MyPlantScanFlag) && this->HeatRecActive) { // size mass flow rate - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidIndex, diff --git a/src/EnergyPlus/NodeInputManager.cc b/src/EnergyPlus/NodeInputManager.cc index 5f67b91ad73..e60b130c2e9 100644 --- a/src/EnergyPlus/NodeInputManager.cc +++ b/src/EnergyPlus/NodeInputManager.cc @@ -967,10 +967,10 @@ void CalcMoreNodeInfo(EnergyPlusData &state) // stored in MoreNodeInfo. // Using/Aliasing - using FluidProperties::GetDensityGlycol; - using FluidProperties::GetSatDensityRefrig; - using FluidProperties::GetSatEnthalpyRefrig; - using FluidProperties::GetSpecificHeatGlycol; + using Fluid::GetDensityGlycol; + using Fluid::GetSatDensityRefrig; + using Fluid::GetSatEnthalpyRefrig; + using Fluid::GetSpecificHeatGlycol; using Psychrometrics::CPCW; using Psychrometrics::PsyCpAirFnW; using Psychrometrics::PsyHFnTdbW; @@ -1031,7 +1031,7 @@ void CalcMoreNodeInfo(EnergyPlusData &state) for (int iNode = 1; iNode <= state.dataLoopNodes->NumOfNodes; ++iNode) { nodeReportingStrings.push_back(std::string(NodeReportingCalc + state.dataLoopNodes->NodeID(iNode))); - nodeFluidNames.push_back(FluidProperties::GetGlycolNameByIndex(state, state.dataLoopNodes->Node(iNode).FluidIndex)); + nodeFluidNames.push_back(Fluid::GetGlycolNameByIndex(state, state.dataLoopNodes->Node(iNode).FluidIndex)); for (auto const *reqVar : state.dataOutputProcessor->reqVars) { if (Util::SameString(reqVar->key, state.dataLoopNodes->NodeID(iNode)) || reqVar->key.empty()) { @@ -1143,7 +1143,7 @@ void CalcMoreNodeInfo(EnergyPlusData &state) } else if (state.dataLoopNodes->Node(iNode).FluidType == DataLoopNode::NodeFluidType::Water) { if (!((state.dataLoopNodes->Node(iNode).FluidIndex > 0) && - (state.dataLoopNodes->Node(iNode).FluidIndex <= state.dataFluidProps->NumOfGlycols))) { + (state.dataLoopNodes->Node(iNode).FluidIndex <= state.dataFluid->NumOfGlycols))) { rho = RhoWaterStdInit; rhoStd = RhoWaterStdInit; Cp = CPCW(state.dataLoopNodes->Node(iNode).Temp); diff --git a/src/EnergyPlus/OutdoorAirUnit.cc b/src/EnergyPlus/OutdoorAirUnit.cc index 2dcc30e4a61..9a59cb708d1 100644 --- a/src/EnergyPlus/OutdoorAirUnit.cc +++ b/src/EnergyPlus/OutdoorAirUnit.cc @@ -116,7 +116,6 @@ namespace OutdoorAirUnit { using HVAC::SmallMassFlow; using namespace ScheduleManager; using namespace Psychrometrics; - using namespace FluidProperties; // component types addressed by this module constexpr static std::string_view ZoneHVACOAUnit = {"ZoneHVAC:OutdoorAirUnit"}; @@ -218,7 +217,7 @@ namespace OutdoorAirUnit { // Using/Aliasing using BranchNodeConnections::SetUpCompSets; using BranchNodeConnections::TestCompSet; - using FluidProperties::FindRefrigerant; + using Fluid::FindRefrigerant; using NodeInputManager::GetOnlySingleNode; using ScheduleManager::GetScheduleIndex; using SteamCoils::GetCoilAirInletNode; @@ -1116,7 +1115,7 @@ namespace OutdoorAirUnit { // Using/Aliasing using DataZoneEquipment::CheckZoneEquipmentList; - using FluidProperties::GetDensityGlycol; + using Fluid::GetDensityGlycol; using HVACHXAssistedCoolingCoil::SimHXAssistedCoolingCoil; using PlantUtilities::InitComponentNodes; using PlantUtilities::ScanPlantLoopsForObject; @@ -1286,7 +1285,7 @@ namespace OutdoorAirUnit { thisOutAirUnit.OAEquip(compLoop).MaxVolWaterFlow = GetCoilMaxSteamFlowRate(state, thisOutAirUnit.OAEquip(compLoop).ComponentIndex, errFlag); Real64 const rho = - GetSatDensityRefrig(state, + Fluid::GetSatDensityRefrig(state, state.dataPlnt->PlantLoop(thisOutAirUnit.OAEquip(compLoop).plantLoc.loopNum).FluidName, Constant::SteamInitConvTemp, 1.0, diff --git a/src/EnergyPlus/OutsideEnergySources.cc b/src/EnergyPlus/OutsideEnergySources.cc index 452a0703452..bc45d174aa0 100644 --- a/src/EnergyPlus/OutsideEnergySources.cc +++ b/src/EnergyPlus/OutsideEnergySources.cc @@ -371,19 +371,19 @@ void OutsideEnergySourceSpecs::size(EnergyPlusData &state) if (this->EnergyType == DataPlant::PlantEquipmentType::PurchChilledWater || this->EnergyType == DataPlant::PlantEquipmentType::PurchHotWater) { Real64 const rho = - FluidProperties::GetDensityGlycol(state, loop.FluidName, Constant::InitConvTemp, loop.FluidIndex, format("Size {}", typeName)); + Fluid::GetDensityGlycol(state, loop.FluidName, Constant::InitConvTemp, loop.FluidIndex, format("Size {}", typeName)); Real64 const Cp = - FluidProperties::GetSpecificHeatGlycol(state, loop.FluidName, Constant::InitConvTemp, loop.FluidIndex, format("Size {}", typeName)); + Fluid::GetSpecificHeatGlycol(state, loop.FluidName, Constant::InitConvTemp, loop.FluidIndex, format("Size {}", typeName)); NomCapDes = Cp * rho * state.dataSize->PlantSizData(PltSizNum).DeltaT * state.dataSize->PlantSizData(PltSizNum).DesVolFlowRate; } else { // this->EnergyType == DataPlant::TypeOf_PurchSteam - Real64 const tempSteam = FluidProperties::GetSatTemperatureRefrig( + Real64 const tempSteam = Fluid::GetSatTemperatureRefrig( state, loop.FluidName, state.dataEnvrn->StdBaroPress, loop.FluidIndex, format("Size {}", typeName)); Real64 const rhoSteam = - FluidProperties::GetSatDensityRefrig(state, loop.FluidName, tempSteam, 1.0, loop.FluidIndex, format("Size {}", typeName)); + Fluid::GetSatDensityRefrig(state, loop.FluidName, tempSteam, 1.0, loop.FluidIndex, format("Size {}", typeName)); Real64 const EnthSteamDry = - FluidProperties::GetSatEnthalpyRefrig(state, loop.FluidName, tempSteam, 1.0, loop.FluidIndex, format("Size {}", typeName)); + Fluid::GetSatEnthalpyRefrig(state, loop.FluidName, tempSteam, 1.0, loop.FluidIndex, format("Size {}", typeName)); Real64 const EnthSteamWet = - FluidProperties::GetSatEnthalpyRefrig(state, loop.FluidName, tempSteam, 0.0, loop.FluidIndex, format("Size {}", typeName)); + Fluid::GetSatEnthalpyRefrig(state, loop.FluidName, tempSteam, 0.0, loop.FluidIndex, format("Size {}", typeName)); Real64 const LatentHeatSteam = EnthSteamDry - EnthSteamWet; NomCapDes = rhoSteam * state.dataSize->PlantSizData(PltSizNum).DesVolFlowRate * LatentHeatSteam; } @@ -474,7 +474,7 @@ void OutsideEnergySourceSpecs::calculate(EnergyPlusData &state, bool runFlag, Re if ((this->MassFlowRate > 0.0) && runFlag) { if (this->EnergyType == DataPlant::PlantEquipmentType::PurchChilledWater || this->EnergyType == DataPlant::PlantEquipmentType::PurchHotWater) { - Real64 const Cp = FluidProperties::GetSpecificHeatGlycol( + Real64 const Cp = Fluid::GetSpecificHeatGlycol( state, state.dataPlnt->PlantLoop(LoopNum).FluidName, this->InletTemp, state.dataPlnt->PlantLoop(LoopNum).FluidIndex, RoutineName); this->OutletTemp = (MyLoad + this->MassFlowRate * Cp * this->InletTemp) / (this->MassFlowRate * Cp); // apply loop limits on temperature result to keep in check @@ -489,11 +489,11 @@ void OutsideEnergySourceSpecs::calculate(EnergyPlusData &state, bool runFlag, Re } else if (this->EnergyType == DataPlant::PlantEquipmentType::PurchSteam) { // determine mass flow rate based on inlet temp, saturate temp at // atmospheric pressure, Cp of inlet condensate, and MyLoad Real64 SatTempAtmPress = - FluidProperties::GetSatTemperatureRefrig(state, loop.FluidName, DataEnvironment::StdPressureSeaLevel, loop.FluidIndex, RoutineName); - Real64 CpCondensate = FluidProperties::GetSpecificHeatGlycol(state, loop.FluidName, this->InletTemp, loop.FluidIndex, RoutineName); + Fluid::GetSatTemperatureRefrig(state, loop.FluidName, DataEnvironment::StdPressureSeaLevel, loop.FluidIndex, RoutineName); + Real64 CpCondensate = Fluid::GetSpecificHeatGlycol(state, loop.FluidName, this->InletTemp, loop.FluidIndex, RoutineName); Real64 deltaTsensible = SatTempAtmPress - this->InletTemp; - Real64 EnthSteamInDry = FluidProperties::GetSatEnthalpyRefrig(state, loop.FluidName, this->InletTemp, 1.0, loop.FluidIndex, RoutineName); - Real64 EnthSteamOutWet = FluidProperties::GetSatEnthalpyRefrig(state, loop.FluidName, this->InletTemp, 0.0, loop.FluidIndex, RoutineName); + Real64 EnthSteamInDry = Fluid::GetSatEnthalpyRefrig(state, loop.FluidName, this->InletTemp, 1.0, loop.FluidIndex, RoutineName); + Real64 EnthSteamOutWet = Fluid::GetSatEnthalpyRefrig(state, loop.FluidName, this->InletTemp, 0.0, loop.FluidIndex, RoutineName); Real64 LatentHeatSteam = EnthSteamInDry - EnthSteamOutWet; this->MassFlowRate = MyLoad / (LatentHeatSteam + (CpCondensate * deltaTsensible)); PlantUtilities::SetComponentFlowRate(state, this->MassFlowRate, this->InletNodeNum, this->OutletNodeNum, this->plantLoc); diff --git a/src/EnergyPlus/PackagedThermalStorageCoil.cc b/src/EnergyPlus/PackagedThermalStorageCoil.cc index c889f61c53c..94567c790e4 100644 --- a/src/EnergyPlus/PackagedThermalStorageCoil.cc +++ b/src/EnergyPlus/PackagedThermalStorageCoil.cc @@ -198,10 +198,10 @@ void GetTESCoilInput(EnergyPlusData &state) // Using/Aliasing using BranchNodeConnections::TestCompSet; using DataZoneEquipment::FindControlledZoneIndexFromSystemNodeNumberForZone; - using FluidProperties::CheckFluidPropertyName; - using FluidProperties::FindGlycol; - using FluidProperties::GetFluidDensityTemperatureLimits; - using FluidProperties::GetFluidSpecificHeatTemperatureLimits; + using Fluid::CheckFluidPropertyName; + using Fluid::FindGlycol; + using Fluid::GetFluidDensityTemperatureLimits; + using Fluid::GetFluidSpecificHeatTemperatureLimits; using GlobalNames::VerifyUniqueCoilName; using NodeInputManager::GetOnlySingleNode; using ScheduleManager::GetScheduleIndex; @@ -2145,8 +2145,8 @@ void SizeTESCoil(EnergyPlusData &state, int &TESCoilNum) // Using/Aliasing using namespace DataSizing; using namespace OutputReportPredefined; - using FluidProperties::GetDensityGlycol; - using FluidProperties::GetSpecificHeatGlycol; + using Fluid::GetDensityGlycol; + using Fluid::GetSpecificHeatGlycol; // SUBROUTINE PARAMETER DEFINITIONS: static constexpr std::string_view RoutineName("SizeTESCoil "); @@ -2771,8 +2771,8 @@ void CalcTESCoilCoolingAndChargeMode(EnergyPlusData &state, // Using/Aliasing Real64 const TimeStepSysSec = state.dataHVACGlobal->TimeStepSysSec; - using FluidProperties::GetDensityGlycol; - using FluidProperties::GetSpecificHeatGlycol; + using Fluid::GetDensityGlycol; + using Fluid::GetSpecificHeatGlycol; // SUBROUTINE PARAMETER DEFINITIONS: int constexpr MaxIter(30); @@ -3181,8 +3181,8 @@ void CalcTESCoilCoolingAndDischargeMode(EnergyPlusData &state, // Using/Aliasing Real64 const TimeStepSysSec = state.dataHVACGlobal->TimeStepSysSec; - using FluidProperties::GetDensityGlycol; - using FluidProperties::GetSpecificHeatGlycol; + using Fluid::GetDensityGlycol; + using Fluid::GetSpecificHeatGlycol; // SUBROUTINE PARAMETER DEFINITIONS: int constexpr MaxIter(30); @@ -3528,8 +3528,8 @@ void CalcTESCoilChargeOnlyMode(EnergyPlusData &state, int const TESCoilNum) // Using/Aliasing Real64 const TimeStepSysSec = state.dataHVACGlobal->TimeStepSysSec; - using FluidProperties::GetDensityGlycol; - using FluidProperties::GetSpecificHeatGlycol; + using Fluid::GetDensityGlycol; + using Fluid::GetSpecificHeatGlycol; // SUBROUTINE PARAMETER DEFINITIONS: static constexpr std::string_view RoutineName("CalcTESCoilChargeOnlyMode"); @@ -3692,8 +3692,8 @@ void CalcTESCoilDischargeOnlyMode(EnergyPlusData &state, int const TESCoilNum, R // Using/Aliasing Real64 const TimeStepSysSec = state.dataHVACGlobal->TimeStepSysSec; - using FluidProperties::GetDensityGlycol; - using FluidProperties::GetSpecificHeatGlycol; + using Fluid::GetDensityGlycol; + using Fluid::GetSpecificHeatGlycol; // SUBROUTINE PARAMETER DEFINITIONS: int constexpr MaxIter(30); @@ -3994,8 +3994,8 @@ void CalcTESWaterStorageTank(EnergyPlusData &state, int const TESCoilNum) // Using/Aliasing Real64 const TimeStepSysSec = state.dataHVACGlobal->TimeStepSysSec; - using FluidProperties::GetDensityGlycol; - using FluidProperties::GetSpecificHeatGlycol; + using Fluid::GetDensityGlycol; + using Fluid::GetSpecificHeatGlycol; using WaterThermalTanks::WaterThermalTankData; auto &thisTESCoil = state.dataPackagedThermalStorageCoil->TESCoil(TESCoilNum); @@ -4104,7 +4104,7 @@ void CalcTESIceStorageTank(EnergyPlusData &state, int const TESCoilNum) // Using/Aliasing Real64 const TimeStepSysSec = state.dataHVACGlobal->TimeStepSysSec; - using FluidProperties::GetSpecificHeatGlycol; + using Fluid::GetSpecificHeatGlycol; // SUBROUTINE PARAMETER DEFINITIONS: constexpr Real64 FreezingTemp(0.0); // zero degrees C diff --git a/src/EnergyPlus/PhotovoltaicThermalCollectors.cc b/src/EnergyPlus/PhotovoltaicThermalCollectors.cc index 1dcca089a10..eda0d2ed155 100644 --- a/src/EnergyPlus/PhotovoltaicThermalCollectors.cc +++ b/src/EnergyPlus/PhotovoltaicThermalCollectors.cc @@ -701,7 +701,7 @@ namespace PhotovoltaicThermalCollectors { switch (this->WorkingFluidType) { case WorkingFluidEnum::LIQUID: { - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->WPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->WPlantLoc.loopNum).FluidIndex, diff --git a/src/EnergyPlus/PipeHeatTransfer.cc b/src/EnergyPlus/PipeHeatTransfer.cc index f8761f3275c..57b34133931 100644 --- a/src/EnergyPlus/PipeHeatTransfer.cc +++ b/src/EnergyPlus/PipeHeatTransfer.cc @@ -942,8 +942,8 @@ void PipeHTData::InitPipesHeatTransfer(EnergyPlusData &state, bool const FirstHV // Using/Aliasing Real64 SysTimeElapsed = state.dataHVACGlobal->SysTimeElapsed; Real64 TimeStepSysSec = state.dataHVACGlobal->TimeStepSysSec; - using FluidProperties::GetDensityGlycol; - using FluidProperties::GetSpecificHeatGlycol; + using Fluid::GetDensityGlycol; + using Fluid::GetSpecificHeatGlycol; using ScheduleManager::GetCurrentScheduleValue; // SUBROUTINE PARAMETER DEFINITIONS: @@ -1713,8 +1713,8 @@ Real64 PipeHTData::CalcPipeHeatTransCoef(EnergyPlusData &state, // Code based loosely on code from IBLAST program (research version) // Using/Aliasing - using FluidProperties::GetConductivityGlycol; - using FluidProperties::GetViscosityGlycol; + using Fluid::GetConductivityGlycol; + using Fluid::GetViscosityGlycol; // Return value Real64 CalcPipeHeatTransCoef; diff --git a/src/EnergyPlus/Plant/EquipAndOperations.cc b/src/EnergyPlus/Plant/EquipAndOperations.cc index 96d2871e845..80df453c7b4 100644 --- a/src/EnergyPlus/Plant/EquipAndOperations.cc +++ b/src/EnergyPlus/Plant/EquipAndOperations.cc @@ -883,7 +883,7 @@ namespace DataPlant { // Calculate load on primary chilled water loop and store in PrimaryPlantCoolingLoad Real64 CW_RetMdot = state.dataLoopNodes->Node(this->PlantOps.PrimaryChWLoopSupInletNode).MassFlowRate; - Real64 const CpCW = FluidProperties::GetSpecificHeatGlycol(state, + Real64 const CpCW = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->PlantOps.PrimaryChWLoopIndex).FluidName, state.dataLoopNodes->Node(this->PlantOps.PrimaryChWLoopSupInletNode).Temp, state.dataPlnt->PlantLoop(this->PlantOps.PrimaryChWLoopIndex).FluidIndex, @@ -899,7 +899,7 @@ namespace DataPlant { // int HWSupInletNode = this->PlantOps.PrimaryHWLoopSupInletNode; // state.dataPlnt->PlantLoop(this->PlantOps.PrimaryHWLoopIndex).LoopSide(DataPlant::LoopSideLocation::Supply).Branch(1).NodeNumIn; Real64 HW_RetMdot = state.dataLoopNodes->Node(this->PlantOps.PrimaryHWLoopSupInletNode).MassFlowRate; - Real64 const CpHW = FluidProperties::GetSpecificHeatGlycol(state, + Real64 const CpHW = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->PlantOps.PrimaryHWLoopIndex).FluidName, state.dataLoopNodes->Node(this->PlantOps.PrimaryHWLoopSupInletNode).Temp, state.dataPlnt->PlantLoop(this->PlantOps.PrimaryHWLoopIndex).FluidIndex, @@ -1372,7 +1372,7 @@ namespace DataPlant { // step 2. calculate the loads to adjust the // returns to hit the associated setpoints at their current mass flow Real64 const CpCW = - FluidProperties::GetSpecificHeatGlycol(state, + Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->DedicatedHR_HeatingPLHP.sourceSidePlantLoc.loopNum).FluidName, state.dataLoopNodes->Node(inletChWReturnNodeNum).Temp, state.dataPlnt->PlantLoop(this->DedicatedHR_HeatingPLHP.sourceSidePlantLoc.loopNum).FluidIndex, @@ -1381,7 +1381,7 @@ namespace DataPlant { CW_RetMdot * CpCW * (this->Setpoint.SecCW - state.dataLoopNodes->Node(inletChWReturnNodeNum).Temp); // power = Mdot Cp Delta T, cooling load is negative Real64 const CpHW = - FluidProperties::GetSpecificHeatGlycol(state, + Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->DedicatedHR_CoolingPLHP.sourceSidePlantLoc.loopNum).FluidName, state.dataLoopNodes->Node(inletHWReturnNodeNum).Temp, state.dataPlnt->PlantLoop(this->DedicatedHR_CoolingPLHP.sourceSidePlantLoc.loopNum).FluidIndex, @@ -1605,7 +1605,7 @@ namespace DataPlant { Real64 Mdot = state.dataLoopNodes->Node(inletBoilerNodeNum).MassFlowRate; Real64 const CpHW = - FluidProperties::GetSpecificHeatGlycol(state, + Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->PlantBoilerComps(BoilerNum).loopNum).FluidName, Tin, state.dataPlnt->PlantLoop(this->PlantBoilerComps(BoilerNum).loopNum).FluidIndex, diff --git a/src/EnergyPlus/Plant/Loop.cc b/src/EnergyPlus/Plant/Loop.cc index e897248a8dd..167eaeeac85 100644 --- a/src/EnergyPlus/Plant/Loop.cc +++ b/src/EnergyPlus/Plant/Loop.cc @@ -104,8 +104,6 @@ void PlantLoopData::CalcUnmetPlantDemand(EnergyPlusData &state) // Using/Aliasing using DataPlant::LoopDemandTol; - using FluidProperties::GetSatEnthalpyRefrig; - using FluidProperties::GetSpecificHeatGlycol; // SUBROUTINE PARAMETER DEFINITIONS: static constexpr std::string_view RoutineName("PlantLoopSolver::EvaluateLoopSetPointLoad"); @@ -135,7 +133,7 @@ void PlantLoopData::CalcUnmetPlantDemand(EnergyPlusData &state) if (this->FluidType == DataLoopNode::NodeFluidType::Water) { - Cp = GetSpecificHeatGlycol(state, this->FluidName, TargetTemp, this->FluidIndex, RoutineName); + Cp = Fluid::GetSpecificHeatGlycol(state, this->FluidName, TargetTemp, this->FluidIndex, RoutineName); switch (this->LoopDemandCalcScheme) { case DataPlant::LoopDemandCalcScheme::SingleSetPoint: { @@ -179,7 +177,7 @@ void PlantLoopData::CalcUnmetPlantDemand(EnergyPlusData &state) } else if (this->FluidType == DataLoopNode::NodeFluidType::Steam) { - Cp = GetSpecificHeatGlycol(state, this->FluidName, TargetTemp, this->FluidIndex, RoutineName); + Cp = Fluid::GetSpecificHeatGlycol(state, this->FluidName, TargetTemp, this->FluidIndex, RoutineName); switch (this->LoopDemandCalcScheme) { case DataPlant::LoopDemandCalcScheme::SingleSetPoint: { @@ -190,8 +188,8 @@ void PlantLoopData::CalcUnmetPlantDemand(EnergyPlusData &state) // Calculate the delta temperature DeltaTemp = LoopSetPointTemperature - TargetTemp; - EnthalpySteamSatVapor = GetSatEnthalpyRefrig(state, this->FluidName, LoopSetPointTemperature, 1.0, this->FluidIndex, RoutineNameAlt); - EnthalpySteamSatLiquid = GetSatEnthalpyRefrig(state, this->FluidName, LoopSetPointTemperature, 0.0, this->FluidIndex, RoutineNameAlt); + EnthalpySteamSatVapor = Fluid::GetSatEnthalpyRefrig(state, this->FluidName, LoopSetPointTemperature, 1.0, this->FluidIndex, RoutineNameAlt); + EnthalpySteamSatLiquid = Fluid::GetSatEnthalpyRefrig(state, this->FluidName, LoopSetPointTemperature, 0.0, this->FluidIndex, RoutineNameAlt); LatentHeatSteam = EnthalpySteamSatVapor - EnthalpySteamSatLiquid; diff --git a/src/EnergyPlus/Plant/LoopSide.cc b/src/EnergyPlus/Plant/LoopSide.cc index c30fc3ceefa..cd3713c3c08 100644 --- a/src/EnergyPlus/Plant/LoopSide.cc +++ b/src/EnergyPlus/Plant/LoopSide.cc @@ -738,7 +738,7 @@ namespace DataPlant { if (thisPlantLoop.FluidType == DataLoopNode::NodeFluidType::Water) { Real64 Cp = - FluidProperties::GetSpecificHeatGlycol(state, thisPlantLoop.FluidName, WeightedInletTemp, thisPlantLoop.FluidIndex, RoutineName); + Fluid::GetSpecificHeatGlycol(state, thisPlantLoop.FluidName, WeightedInletTemp, thisPlantLoop.FluidIndex, RoutineName); { @@ -811,7 +811,7 @@ namespace DataPlant { } else if (thisPlantLoop.FluidType == DataLoopNode::NodeFluidType::Steam) { Real64 Cp = - FluidProperties::GetSpecificHeatGlycol(state, thisPlantLoop.FluidName, WeightedInletTemp, thisPlantLoop.FluidIndex, RoutineName); + Fluid::GetSpecificHeatGlycol(state, thisPlantLoop.FluidName, WeightedInletTemp, thisPlantLoop.FluidIndex, RoutineName); { @@ -824,9 +824,9 @@ namespace DataPlant { Real64 DeltaTemp = LoopSetPointTemperature - WeightedInletTemp; Real64 EnthalpySteamSatVapor = - FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, LoopSetPointTemperature, 1.0, this->refrigIndex, RoutineNameAlt); + Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, LoopSetPointTemperature, 1.0, this->refrigIndex, RoutineNameAlt); Real64 EnthalpySteamSatLiquid = - FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, LoopSetPointTemperature, 0.0, this->refrigIndex, RoutineNameAlt); + Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, LoopSetPointTemperature, 0.0, this->refrigIndex, RoutineNameAlt); Real64 LatentHeatSteam = EnthalpySteamSatVapor - EnthalpySteamSatLiquid; @@ -1945,9 +1945,6 @@ namespace DataPlant { // load range based: these components do not 'alter' the load, they reject the load // Therefore they are not included - // Using/Aliasing - using FluidProperties::GetSpecificHeatGlycol; - // SUBROUTINE PARAMETER DEFINITIONS: static constexpr std::string_view RoutineName("PlantLoopSolver::UpdateAnyLoopDemandAlterations"); @@ -2001,7 +1998,7 @@ namespace DataPlant { Real64 const InletTemp(state.dataLoopNodes->Node(InletNode).Temp); Real64 const OutletTemp(state.dataLoopNodes->Node(OutletNode).Temp); Real64 const AverageTemp((InletTemp + OutletTemp) / 2.0); - Real64 const ComponentCp(GetSpecificHeatGlycol(state, + Real64 const ComponentCp(Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, AverageTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, diff --git a/src/EnergyPlus/Plant/PlantManager.cc b/src/EnergyPlus/Plant/PlantManager.cc index fca77e8877d..2ccb556362b 100644 --- a/src/EnergyPlus/Plant/PlantManager.cc +++ b/src/EnergyPlus/Plant/PlantManager.cc @@ -143,7 +143,6 @@ namespace EnergyPlus::PlantManager { using namespace DataPlant; using namespace DataBranchAirLoopPlant; using namespace DataLoopNode; -using namespace FluidProperties; static constexpr std::string_view fluidNameSteam("STEAM"); @@ -291,8 +290,6 @@ void GetPlantLoopData(EnergyPlusData &state) using NodeInputManager::GetOnlySingleNode; using namespace BranchInputManager; using DataSizing::AutoSize; - using FluidProperties::CheckFluidPropertyName; - using FluidProperties::FindGlycol; // SUBROUTINE PARAMETER DEFINITIONS: static constexpr std::string_view RoutineName("GetPlant/CondenserLoopData: "); @@ -386,17 +383,17 @@ void GetPlantLoopData(EnergyPlusData &state) } else if (Util::SameString(Alpha(2), "WATER")) { this_loop.FluidType = DataLoopNode::NodeFluidType::Water; this_loop.FluidName = Alpha(2); - this_loop.FluidIndex = FindGlycol(state, Alpha(2)); + this_loop.FluidIndex = Fluid::FindGlycol(state, Alpha(2)); } else if (Util::SameString(Alpha(2), "USERDEFINEDFLUIDTYPE")) { this_loop.FluidType = DataLoopNode::NodeFluidType::Water; this_loop.FluidName = Alpha(3); // check for valid fluid name - NumFluids = CheckFluidPropertyName(state, Alpha(3)); + NumFluids = Fluid::CheckFluidPropertyName(state, Alpha(3)); if (NumFluids == 0) { ShowSevereError(state, CurrentModuleObject + "=\"" + Alpha(1) + "\", missing fluid data for Plant loop."); ErrorsFound = true; } else { - this_loop.FluidIndex = FindGlycol(state, Alpha(3)); + this_loop.FluidIndex = Fluid::FindGlycol(state, Alpha(3)); if (this_loop.FluidIndex == 0) { ShowSevereError(state, CurrentModuleObject + "=\"" + Alpha(1) + "\", invalid glycol fluid data for Plant loop."); ErrorsFound = true; @@ -410,7 +407,7 @@ void GetPlantLoopData(EnergyPlusData &state) this_loop.FluidType = DataLoopNode::NodeFluidType::Water; this_loop.FluidName = "WATER"; - this_loop.FluidIndex = FindGlycol(state, "WATER"); + this_loop.FluidIndex = Fluid::FindGlycol(state, "WATER"); } this_loop.OperationScheme = Alpha(4); // Load the Plant Control Scheme Priority List @@ -2512,7 +2509,7 @@ void ReInitPlantLoopsAtFirstHVACIteration(EnergyPlusData &state) state.dataPlnt->PlantLoop(LoopNum).LoopSide(LoopSideNum).OutletNode.MassFlowRateHistory = 0.0; if (state.dataPlnt->PlantLoop(LoopNum).FluidType != DataLoopNode::NodeFluidType::Steam) { - Cp = GetSpecificHeatGlycol(state, + Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(LoopNum).FluidName, LoopSetPointTemp, state.dataPlnt->PlantLoop(LoopNum).FluidIndex, @@ -2521,7 +2518,7 @@ void ReInitPlantLoopsAtFirstHVACIteration(EnergyPlusData &state) } // Use Min/Max flow rates to initialize loop if (state.dataPlnt->PlantLoop(LoopNum).FluidType == DataLoopNode::NodeFluidType::Water) { - rho = GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(LoopNum).FluidName, LoopSetPointTemp, state.dataPlnt->PlantLoop(LoopNum).FluidIndex, @@ -2534,9 +2531,9 @@ void ReInitPlantLoopsAtFirstHVACIteration(EnergyPlusData &state) if (state.dataPlnt->PlantLoop(LoopNum).FluidType == DataLoopNode::NodeFluidType::Steam) { SteamTemp = 100.0; SteamDensity = - GetSatDensityRefrig(state, fluidNameSteam, SteamTemp, 1.0, state.dataPlnt->PlantLoop(LoopNum).FluidIndex, RoutineName); + Fluid::GetSatDensityRefrig(state, fluidNameSteam, SteamTemp, 1.0, state.dataPlnt->PlantLoop(LoopNum).FluidIndex, RoutineName); LoopMaxMassFlowRate = state.dataPlnt->PlantLoop(LoopNum).MaxVolFlowRate * SteamDensity; - StartEnthalpy = GetSatEnthalpyRefrig( + StartEnthalpy = Fluid::GetSatEnthalpyRefrig( state, fluidNameSteam, LoopSetPointTemp, 0.0, state.dataPlnt->PlantLoop(LoopNum).FluidIndex, RoutineName); LoopMinMassFlowRate = state.dataPlnt->PlantLoop(LoopNum).MinVolFlowRate * SteamDensity; } @@ -2967,7 +2964,6 @@ void SizePlantLoop(EnergyPlusData &state, // Using/Aliasing using namespace DataSizing; - using FluidProperties::GetDensityGlycol; // SUBROUTINE PARAMETER DEFINITIONS: static constexpr std::string_view RoutineName("SizePlantLoop"); @@ -3242,10 +3238,10 @@ void SizePlantLoop(EnergyPlusData &state, // should now have plant volume, calculate plant volume's mass for fluid type if (state.dataPlnt->PlantLoop(LoopNum).FluidType == DataLoopNode::NodeFluidType::Water) { - FluidDensity = GetDensityGlycol( + FluidDensity = Fluid::GetDensityGlycol( state, state.dataPlnt->PlantLoop(LoopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(LoopNum).FluidIndex, RoutineName); if (PlantSizNum > 0 && allocated(state.dataSize->PlantSizData)) { // method only works if sizing delta T is avaiable - Real64 cp = GetSpecificHeatGlycol(state, + Real64 cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(LoopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(LoopNum).FluidIndex, @@ -3255,7 +3251,7 @@ void SizePlantLoop(EnergyPlusData &state, state.dataSize->PlantSizData(PlantSizNum).DesCapacity = DesignPlantCapacity; // store it for later use in scaling } } else if (state.dataPlnt->PlantLoop(LoopNum).FluidType == DataLoopNode::NodeFluidType::Steam) { - FluidDensity = GetSatDensityRefrig(state, fluidNameSteam, 100.0, 1.0, state.dataPlnt->PlantLoop(LoopNum).FluidIndex, RoutineName); + FluidDensity = Fluid::GetSatDensityRefrig(state, fluidNameSteam, 100.0, 1.0, state.dataPlnt->PlantLoop(LoopNum).FluidIndex, RoutineName); } else { assert(false); } @@ -3288,7 +3284,6 @@ void ResizePlantLoopLevelSizes(EnergyPlusData &state, int const LoopNum // Suppl // Using/Aliasing using namespace DataSizing; - using FluidProperties::GetDensityGlycol; // SUBROUTINE PARAMETER DEFINITIONS: static constexpr std::string_view RoutineName("ResizePlantLoop"); @@ -3387,10 +3382,10 @@ void ResizePlantLoopLevelSizes(EnergyPlusData &state, int const LoopNum // Suppl // should now have plant volume, calculate plant volume's mass for fluid type if (state.dataPlnt->PlantLoop(LoopNum).FluidType == DataLoopNode::NodeFluidType::Water) { - FluidDensity = GetDensityGlycol( + FluidDensity = Fluid::GetDensityGlycol( state, state.dataPlnt->PlantLoop(LoopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(LoopNum).FluidIndex, RoutineName); } else if (state.dataPlnt->PlantLoop(LoopNum).FluidType == DataLoopNode::NodeFluidType::Steam) { - FluidDensity = GetSatDensityRefrig(state, fluidNameSteam, 100.0, 1.0, state.dataPlnt->PlantLoop(LoopNum).FluidIndex, RoutineName); + FluidDensity = Fluid::GetSatDensityRefrig(state, fluidNameSteam, 100.0, 1.0, state.dataPlnt->PlantLoop(LoopNum).FluidIndex, RoutineName); } else { assert(false); } diff --git a/src/EnergyPlus/PlantCentralGSHP.cc b/src/EnergyPlus/PlantCentralGSHP.cc index 323da9bafe3..a698ab2be93 100644 --- a/src/EnergyPlus/PlantCentralGSHP.cc +++ b/src/EnergyPlus/PlantCentralGSHP.cc @@ -313,13 +313,13 @@ void WrapperSpecs::SizeWrapper(EnergyPlusData &state) // each individual chiller heater module is sized to be capable of supporting the total load on the wrapper if (PltSizNum > 0) { if (state.dataSize->PlantSizData(PltSizNum).DesVolFlowRate >= HVAC::SmallWaterVolFlow && tmpEvapVolFlowRate > 0.0) { - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -414,13 +414,13 @@ void WrapperSpecs::SizeWrapper(EnergyPlusData &state) // each individual chiller heater module is sized to be capable of supporting the total load on the wrapper if (PltSizCondNum > 0) { if (state.dataSize->PlantSizData(PltSizNum).DesVolFlowRate >= HVAC::SmallWaterVolFlow) { - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->GLHEPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->GLHEPlantLoc.loopNum).FluidIndex, RoutineName); // TODO: JM 2018-12-06 I wonder why Cp isn't calculated at the same temp as rho... - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->GLHEPlantLoc.loopNum).FluidName, this->ChillerHeater(NumChillerHeater).TempRefCondInCooling, state.dataPlnt->PlantLoop(this->GLHEPlantLoc.loopNum).FluidIndex, @@ -1685,7 +1685,7 @@ void WrapperSpecs::initialize(EnergyPlusData &state, this->GLHEVolFlowRate += this->ChillerHeater(ChillerHeaterNum).CondVolFlowRate; } - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -1899,17 +1899,17 @@ void WrapperSpecs::CalcChillerModel(EnergyPlusData &state) // Calculate density ratios to adjust mass flow rates from initialized ones // Hot water temperature is known, but evaporator mass flow rates will be adjusted in the following "Do" loop - Real64 InitDensity = FluidProperties::GetDensityGlycol(state, + Real64 InitDensity = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 EvapDensity = FluidProperties::GetDensityGlycol(state, + Real64 EvapDensity = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, EvapInletTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 CondDensity = FluidProperties::GetDensityGlycol(state, + Real64 CondDensity = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, CondInletTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -2028,7 +2028,7 @@ void WrapperSpecs::CalcChillerModel(EnergyPlusData &state) } // Calculate the specific heat of chilled water - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, EvapInletTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -2165,7 +2165,7 @@ void WrapperSpecs::CalcChillerModel(EnergyPlusData &state) } if (CondMassFlowRate > DataBranchAirLoopPlant::MassFlowTolerance) { - Cp = FluidProperties::GetSpecificHeatGlycol(state, + Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->GLHEPlantLoc.loopNum).FluidName, CondInletTemp, state.dataPlnt->PlantLoop(this->GLHEPlantLoc.loopNum).FluidIndex, @@ -2340,17 +2340,17 @@ void WrapperSpecs::CalcChillerHeaterModel(EnergyPlusData &state) // Calculate density ratios to adjust mass flow rates from initialized ones // Hot water temperature is known, but condenser mass flow rates will be adjusted in the following "Do" loop - Real64 InitDensity = FluidProperties::GetDensityGlycol(state, + Real64 InitDensity = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 EvapDensity = FluidProperties::GetDensityGlycol(state, + Real64 EvapDensity = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, EvapInletTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 CondDensity = FluidProperties::GetDensityGlycol(state, + Real64 CondDensity = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, CondInletTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -2442,7 +2442,7 @@ void WrapperSpecs::CalcChillerHeaterModel(EnergyPlusData &state) // Mode 4 uses all data from the chilled water loop due to no heating demand if (this->SimulClgDominant || CurrentMode == 3) { CurrentMode = 3; - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->HWPlantLoc.loopNum).FluidName, CondInletTemp, state.dataPlnt->PlantLoop(this->HWPlantLoc.loopNum).FluidIndex, @@ -2557,7 +2557,7 @@ void WrapperSpecs::CalcChillerHeaterModel(EnergyPlusData &state) PartLoadRat = 0.0; } - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->HWPlantLoc.loopNum).FluidName, this->ChillerHeater(ChillerHeaterNum).EvapInletNode.Temp, state.dataPlnt->PlantLoop(this->HWPlantLoc.loopNum).FluidIndex, @@ -2646,7 +2646,7 @@ void WrapperSpecs::CalcChillerHeaterModel(EnergyPlusData &state) // Set load this chiller heater should meet and temperatures given QCondenser = min(HeatingLoadToMeet, QCondenser); - Cp = FluidProperties::GetSpecificHeatGlycol(state, + Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->HWPlantLoc.loopNum).FluidName, CondInletTemp, state.dataPlnt->PlantLoop(this->HWPlantLoc.loopNum).FluidIndex, diff --git a/src/EnergyPlus/PlantChillers.cc b/src/EnergyPlus/PlantChillers.cc index a51e5cbca6c..82c29986718 100644 --- a/src/EnergyPlus/PlantChillers.cc +++ b/src/EnergyPlus/PlantChillers.cc @@ -855,7 +855,7 @@ namespace PlantChillers { if (this->MyEnvrnFlag && state.dataGlobal->BeginEnvrnFlag && (state.dataPlnt->PlantFirstSizesOkayToFinalize)) { - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -869,7 +869,7 @@ namespace PlantChillers { state.dataLoopNodes->Node(this->CondInletNodeNum).Temp = this->TempDesCondIn; // old behavior, still want? - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -896,7 +896,7 @@ namespace PlantChillers { } if (this->HeatRecActive) { - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidIndex, @@ -1030,12 +1030,12 @@ namespace PlantChillers { Real64 tmpNomCap = this->NomCap; if (PltSizNum > 0) { if (state.dataSize->PlantSizData(PltSizNum).DesVolFlowRate >= HVAC::SmallWaterVolFlow) { - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -1152,12 +1152,12 @@ namespace PlantChillers { Real64 tmpCondVolFlowRate = this->CondVolFlowRate; if (PltSizCondNum > 0 && PltSizNum > 0) { if (state.dataSize->PlantSizData(PltSizNum).DesVolFlowRate >= HVAC::SmallWaterVolFlow && tmpNomCap > 0.0) { - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, this->TempDesCondIn, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, this->TempDesCondIn, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -1575,7 +1575,7 @@ namespace PlantChillers { OperPartLoadRat = 0.0; } - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->EvapInletNodeNum).Temp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -1815,7 +1815,7 @@ namespace PlantChillers { if (this->CondMassFlowRate > DataBranchAirLoopPlant::MassFlowTolerance) { // If Heat Recovery specified for this vapor compression chiller, then Qcondenser will be adjusted by this subroutine if (this->HeatRecActive) this->calcHeatRecovery(state, this->QCondenser, this->CondMassFlowRate, condInletTemp, this->QHeatRecovered); - Real64 CpCond = FluidProperties::GetSpecificHeatGlycol(state, + Real64 CpCond = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, condInletTemp, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -1906,7 +1906,7 @@ namespace PlantChillers { this->HeatRecInletTemp = state.dataLoopNodes->Node(this->HeatRecInletNodeNum).Temp; Real64 HeatRecMassFlowRate = state.dataLoopNodes->Node(this->HeatRecInletNodeNum).MassFlowRate; - Real64 CpHeatRec = FluidProperties::GetSpecificHeatGlycol(state, + Real64 CpHeatRec = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidName, this->HeatRecInletTemp, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidIndex, @@ -1914,7 +1914,7 @@ namespace PlantChillers { Real64 CpCond; if (this->CondenserType == DataPlant::CondenserType::WaterCooled) { - CpCond = FluidProperties::GetSpecificHeatGlycol(state, + CpCond = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, condInletTemp, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -2917,7 +2917,7 @@ namespace PlantChillers { // Initialize critical Demand Side Variables if (this->MyEnvrnFlag && state.dataGlobal->BeginEnvrnFlag && (state.dataPlnt->PlantFirstSizesOkayToFinalize)) { - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -2932,7 +2932,7 @@ namespace PlantChillers { state.dataLoopNodes->Node(this->CondInletNodeNum).Temp = this->TempDesCondIn; - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -2958,7 +2958,7 @@ namespace PlantChillers { } if (this->HeatRecActive) { - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidIndex, @@ -3051,12 +3051,12 @@ namespace PlantChillers { if (PltSizNum > 0) { if (state.dataSize->PlantSizData(PltSizNum).DesVolFlowRate >= HVAC::SmallWaterVolFlow) { - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -3172,13 +3172,13 @@ namespace PlantChillers { if (PltSizCondNum > 0 && PltSizNum > 0) { if (state.dataSize->PlantSizData(PltSizNum).DesVolFlowRate >= HVAC::SmallWaterVolFlow && tmpNomCap > 0.0) { - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, this->TempDesCondIn, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, this->TempDesCondIn, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -3612,7 +3612,7 @@ namespace PlantChillers { OperPartLoadRat = 0.0; } - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->EvapInletNodeNum).Temp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -3853,7 +3853,7 @@ namespace PlantChillers { if (this->CondenserType == DataPlant::CondenserType::WaterCooled) { if (this->CondMassFlowRate > DataBranchAirLoopPlant::MassFlowTolerance) { - Real64 CpCond = FluidProperties::GetSpecificHeatGlycol(state, + Real64 CpCond = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, this->CondInletTemp, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -4008,7 +4008,7 @@ namespace PlantChillers { this->HeatRecMdotActual = state.dataLoopNodes->Node(this->HeatRecInletNodeNum).MassFlowRate; this->HeatRecInletTemp = state.dataLoopNodes->Node(this->HeatRecInletNodeNum).Temp; - Real64 cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidName, this->HeatRecInletTemp, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidIndex, @@ -4902,7 +4902,7 @@ namespace PlantChillers { if (this->MyEnvrnFlag && state.dataGlobal->BeginEnvrnFlag && (state.dataPlnt->PlantFirstSizesOkayToFinalize)) { - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -4916,7 +4916,7 @@ namespace PlantChillers { state.dataLoopNodes->Node(this->CondInletNodeNum).Temp = this->TempDesCondIn; - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -4942,7 +4942,7 @@ namespace PlantChillers { } if (this->HeatRecActive) { - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidIndex, @@ -5035,12 +5035,12 @@ namespace PlantChillers { if (PltSizNum > 0) { if (state.dataSize->PlantSizData(PltSizNum).DesVolFlowRate >= HVAC::SmallWaterVolFlow) { - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -5160,12 +5160,12 @@ namespace PlantChillers { if (PltSizCondNum > 0 && PltSizNum > 0) { if (state.dataSize->PlantSizData(PltSizNum).DesVolFlowRate >= HVAC::SmallWaterVolFlow && tmpNomCap > 0.0) { - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, this->TempDesCondIn, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, this->TempDesCondIn, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -5617,7 +5617,7 @@ namespace PlantChillers { OperPartLoadRat = 0.0; } - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->EvapInletNodeNum).Temp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -5843,7 +5843,7 @@ namespace PlantChillers { if (this->CondenserType == DataPlant::CondenserType::WaterCooled) { if (this->CondMassFlowRate > DataBranchAirLoopPlant::MassFlowTolerance) { - Real64 CpCond = FluidProperties::GetSpecificHeatGlycol(state, + Real64 CpCond = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, condInletTemp, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -5922,7 +5922,7 @@ namespace PlantChillers { // This mdot is input specified mdot "Desired Flowrate", already set at node in init routine heatRecMdot = state.dataLoopNodes->Node(this->HeatRecInletNodeNum).MassFlowRate; this->HeatRecInletTemp = state.dataLoopNodes->Node(this->HeatRecInletNodeNum).Temp; - Real64 HeatRecCp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 HeatRecCp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidName, this->HeatRecInletTemp, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidIndex, @@ -6682,7 +6682,7 @@ namespace PlantChillers { // Initialize critical Demand Side Variables at the beginning of each environment if (this->MyEnvrnFlag && state.dataGlobal->BeginEnvrnFlag && (state.dataPlnt->PlantFirstSizesOkayToFinalize)) { - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -6695,7 +6695,7 @@ namespace PlantChillers { state.dataLoopNodes->Node(this->CondInletNodeNum).Temp = TempDesCondIn; - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -6787,12 +6787,12 @@ namespace PlantChillers { if (PltSizNum > 0) { if (state.dataSize->PlantSizData(PltSizNum).DesVolFlowRate >= HVAC::SmallWaterVolFlow) { - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -6915,12 +6915,12 @@ namespace PlantChillers { if (this->CondenserType == DataPlant::CondenserType::WaterCooled) { if (PltSizCondNum > 0 && PltSizNum > 0) { if (state.dataSize->PlantSizData(PltSizNum).DesVolFlowRate >= HVAC::SmallWaterVolFlow && tmpNomCap > 0.0) { - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, 29.44, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, 29.44, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -7247,7 +7247,7 @@ namespace PlantChillers { // condenser side outlet temperature. // local for fluid specif heat, for evaporator - Real64 const Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 const Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->EvapInletNodeNum).Temp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -7437,7 +7437,7 @@ namespace PlantChillers { if (this->CondenserType == DataPlant::CondenserType::WaterCooled) { // local for fluid specif heat, for condenser - Real64 const CpCond = FluidProperties::GetSpecificHeatGlycol(state, + Real64 const CpCond = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, CondInletTemp, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, diff --git a/src/EnergyPlus/PlantComponentTemperatureSources.cc b/src/EnergyPlus/PlantComponentTemperatureSources.cc index 03089902c9f..f9eaec46b5e 100644 --- a/src/EnergyPlus/PlantComponentTemperatureSources.cc +++ b/src/EnergyPlus/PlantComponentTemperatureSources.cc @@ -132,7 +132,7 @@ namespace PlantComponentTemperatureSources { // Initialize critical Demand Side Variables at the beginning of each environment if (this->MyEnvironFlag && state.dataGlobal->BeginEnvrnFlag && (state.dataPlnt->PlantFirstSizesOkayToFinalize)) { - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -154,7 +154,7 @@ namespace PlantComponentTemperatureSources { } // Calculate specific heat - Real64 cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, this->BoundaryTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -364,7 +364,7 @@ namespace PlantComponentTemperatureSources { if (this->MassFlowRate > 0.0) { this->OutletTemp = this->BoundaryTemp; - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, this->BoundaryTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, diff --git a/src/EnergyPlus/PlantCondLoopOperation.cc b/src/EnergyPlus/PlantCondLoopOperation.cc index 39a5f69ed1b..2353b57dcdc 100644 --- a/src/EnergyPlus/PlantCondLoopOperation.cc +++ b/src/EnergyPlus/PlantCondLoopOperation.cc @@ -102,7 +102,7 @@ namespace EnergyPlus::PlantCondLoopOperation { // Using/Aliasing using namespace DataPlant; -using FluidProperties::GetSpecificHeatGlycol; +using Fluid::GetSpecificHeatGlycol; using HVAC::SmallLoad; void ManagePlantLoadDistribution(EnergyPlusData &state, @@ -3679,7 +3679,7 @@ void FindCompSPLoad(EnergyPlusData &state, // Using/Aliasing using DataLoopNode::SensedNodeFlagValue; - using FluidProperties::GetDensityGlycol; + using Fluid::GetDensityGlycol; // Locals // SUBROUTINE ARGUMENT DEFINITIONS: diff --git a/src/EnergyPlus/PlantHeatExchangerFluidToFluid.cc b/src/EnergyPlus/PlantHeatExchangerFluidToFluid.cc index 31d1dbb94b8..2bf0a4e077c 100644 --- a/src/EnergyPlus/PlantHeatExchangerFluidToFluid.cc +++ b/src/EnergyPlus/PlantHeatExchangerFluidToFluid.cc @@ -648,7 +648,7 @@ void HeatExchangerStruct::initialize(EnergyPlusData &state) if (state.dataGlobal->BeginEnvrnFlag && this->MyEnvrnFlag && (state.dataPlnt->PlantFirstSizesOkayToFinalize)) { - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->DemandSideLoop.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->DemandSideLoop.loopNum).FluidIndex, @@ -660,7 +660,7 @@ void HeatExchangerStruct::initialize(EnergyPlusData &state) this->DemandSideLoop.inletNodeNum, this->DemandSideLoop.outletNodeNum); - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->SupplySideLoop.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->SupplySideLoop.loopNum).FluidIndex, @@ -807,13 +807,13 @@ void HeatExchangerStruct::size(EnergyPlusData &state) Real64 tmpDeltaTSupLoop = state.dataSize->PlantSizData(PltSizNumSupSide).DeltaT; if (tmpSupSideDesignVolFlowRate >= HVAC::SmallWaterVolFlow) { - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->SupplySideLoop.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->SupplySideLoop.loopNum).FluidIndex, RoutineName); - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->SupplySideLoop.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->SupplySideLoop.loopNum).FluidIndex, @@ -901,13 +901,13 @@ void HeatExchangerStruct::size(EnergyPlusData &state) } } - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->SupplySideLoop.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->SupplySideLoop.loopNum).FluidIndex, RoutineName); Real64 SupSideMdot = this->SupplySideLoop.DesignVolumeFlowRate * rho; - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->DemandSideLoop.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->DemandSideLoop.loopNum).FluidIndex, @@ -996,7 +996,7 @@ void HeatExchangerStruct::control(EnergyPlusData &state, Real64 MyLoad, bool Fir state, mdotSupSide, this->SupplySideLoop.inletNodeNum, this->SupplySideLoop.outletNodeNum, this->SupplySideLoop); if (mdotSupSide > DataBranchAirLoopPlant::MassFlowTolerance) { // if supply side loop has massflow, request demand side flow - Real64 cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->SupplySideLoop.loopNum).FluidName, this->SupplySideLoop.InletTemp, state.dataPlnt->PlantLoop(this->SupplySideLoop.loopNum).FluidIndex, @@ -1031,7 +1031,7 @@ void HeatExchangerStruct::control(EnergyPlusData &state, Real64 MyLoad, bool Fir PlantUtilities::SetComponentFlowRate( state, mdotSupSide, this->SupplySideLoop.inletNodeNum, this->SupplySideLoop.outletNodeNum, this->SupplySideLoop); if (mdotSupSide > DataBranchAirLoopPlant::MassFlowTolerance) { - Real64 cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->SupplySideLoop.loopNum).FluidName, this->SupplySideLoop.InletTemp, state.dataPlnt->PlantLoop(this->SupplySideLoop.loopNum).FluidIndex, @@ -1503,14 +1503,14 @@ void HeatExchangerStruct::calculate(EnergyPlusData &state, Real64 const SupSideM Real64 DmdSideLoopInletTemp = state.dataLoopNodes->Node(this->DemandSideLoop.inletNodeNum).Temp; // specific heat of fluid entering from supply side loop at inlet temp - Real64 SupSideLoopInletCp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 SupSideLoopInletCp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->SupplySideLoop.loopNum).FluidName, SupSideLoopInletTemp, state.dataPlnt->PlantLoop(this->SupplySideLoop.loopNum).FluidIndex, RoutineName); // specific heat of fluid entering from demand side loop at inlet temp - Real64 DmdSideLoopInletCp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 DmdSideLoopInletCp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->DemandSideLoop.loopNum).FluidName, DmdSideLoopInletTemp, state.dataPlnt->PlantLoop(this->DemandSideLoop.loopNum).FluidIndex, diff --git a/src/EnergyPlus/PlantLoadProfile.cc b/src/EnergyPlus/PlantLoadProfile.cc index fa976ca3efe..76b2a888990 100644 --- a/src/EnergyPlus/PlantLoadProfile.cc +++ b/src/EnergyPlus/PlantLoadProfile.cc @@ -142,7 +142,7 @@ void PlantProfileData::simulate(EnergyPlusData &state, if (this->FluidType == PlantLoopFluidType::Water) { if (this->MassFlowRate > 0.0) { - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, this->InletTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -155,25 +155,25 @@ void PlantProfileData::simulate(EnergyPlusData &state, this->OutletTemp = this->InletTemp - DeltaTemp; } else if (this->FluidType == PlantLoopFluidType::Steam) { if (this->MassFlowRate > 0.0 && this->Power > 0.0) { - Real64 EnthSteamInDry = FluidProperties::GetSatEnthalpyRefrig(state, + Real64 EnthSteamInDry = Fluid::GetSatEnthalpyRefrig(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, this->InletTemp, 1.0, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); - Real64 EnthSteamOutWet = FluidProperties::GetSatEnthalpyRefrig(state, + Real64 EnthSteamOutWet = Fluid::GetSatEnthalpyRefrig(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, this->InletTemp, 0.0, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); Real64 LatentHeatSteam = EnthSteamInDry - EnthSteamOutWet; - Real64 SatTemp = FluidProperties::GetSatTemperatureRefrig(state, + Real64 SatTemp = Fluid::GetSatTemperatureRefrig(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, DataEnvironment::StdPressureSeaLevel, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); - Real64 CpWater = FluidProperties::GetSpecificHeatGlycol(state, + Real64 CpWater = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, SatTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -232,18 +232,18 @@ void PlantProfileData::InitPlantProfile(EnergyPlusData &state) state.dataLoopNodes->Node(OutletNode).Temp = 0.0; if (this->FluidType == PlantLoopFluidType::Water) { - FluidDensityInit = FluidProperties::GetDensityGlycol(state, + FluidDensityInit = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); } else { //(this->FluidType == PlantLoopFluidType::Steam) - Real64 SatTempAtmPress = FluidProperties::GetSatTemperatureRefrig(state, + Real64 SatTempAtmPress = Fluid::GetSatTemperatureRefrig(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, DataEnvironment::StdPressureSeaLevel, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); - FluidDensityInit = FluidProperties::GetSatDensityRefrig(state, + FluidDensityInit = Fluid::GetSatDensityRefrig(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, SatTempAtmPress, 1.0, @@ -271,13 +271,13 @@ void PlantProfileData::InitPlantProfile(EnergyPlusData &state) if (this->EMSOverridePower) this->Power = this->EMSPowerValue; if (this->FluidType == PlantLoopFluidType::Water) { - FluidDensityInit = FluidProperties::GetDensityGlycol(state, + FluidDensityInit = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, this->InletTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); } else { //(this->FluidType == PlantLoopFluidType::Steam) - FluidDensityInit = FluidProperties::GetSatDensityRefrig(state, + FluidDensityInit = Fluid::GetSatDensityRefrig(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, this->InletTemp, 1.0, diff --git a/src/EnergyPlus/PlantLoopHeatPumpEIR.cc b/src/EnergyPlus/PlantLoopHeatPumpEIR.cc index 9eff1c9a64f..125b06fc88b 100644 --- a/src/EnergyPlus/PlantLoopHeatPumpEIR.cc +++ b/src/EnergyPlus/PlantLoopHeatPumpEIR.cc @@ -142,7 +142,7 @@ void EIRPlantLoopHeatPump::simulate( if (this->running) { if (this->sysControlType == ControlType::Setpoint) { Real64 leavingSetpoint = state.dataLoopNodes->Node(this->loadSideNodes.outlet).TempSetPoint; - Real64 CurSpecHeat = FluidProperties::GetSpecificHeatGlycol(state, + Real64 CurSpecHeat = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->loadSidePlantLoc.loopNum).FluidName, loadSideInletTemp, state.dataPlnt->PlantLoop(this->loadSidePlantLoc.loopNum).FluidIndex, @@ -488,7 +488,7 @@ void EIRPlantLoopHeatPump::calcAvailableCapacity(EnergyPlusData &state, Real64 c if (this->heatRecoveryHeatPump) { // check to see if souce side outlet temp exceeds limit and reduce PLR if necessary auto &thisSourcePlantLoop = state.dataPlnt->PlantLoop(this->sourceSidePlantLoc.loopNum); - Real64 const CpSrc = FluidProperties::GetSpecificHeatGlycol( + Real64 const CpSrc = Fluid::GetSpecificHeatGlycol( state, thisSourcePlantLoop.FluidName, this->sourceSideInletTemp, thisSourcePlantLoop.FluidIndex, "EIRPlantLoopHeatPump::doPhysics()"); Real64 const sourceMCp = this->sourceSideMassFlowRate * CpSrc; Real64 const tempSourceOutletTemp = @@ -556,7 +556,7 @@ void EIRPlantLoopHeatPump::calcLoadSideHeatTransfer(EnergyPlusData &state, Real6 { // evaluate the actual current operating load side heat transfer rate auto &thisLoadPlantLoop = state.dataPlnt->PlantLoop(this->loadSidePlantLoc.loopNum); - Real64 CpLoad = FluidProperties::GetSpecificHeatGlycol(state, + Real64 CpLoad = Fluid::GetSpecificHeatGlycol(state, thisLoadPlantLoop.FluidName, state.dataLoopNodes->Node(this->loadSideNodes.inlet).Temp, thisLoadPlantLoop.FluidIndex, @@ -610,7 +610,7 @@ void EIRPlantLoopHeatPump::calcSourceSideHeatTransferWSHP(EnergyPlusData &state) // calculate source side outlet conditions auto &thisSourcePlantLoop = state.dataPlnt->PlantLoop(this->sourceSidePlantLoc.loopNum); - Real64 const CpSrc = FluidProperties::GetSpecificHeatGlycol(state, + Real64 const CpSrc = Fluid::GetSpecificHeatGlycol(state, thisSourcePlantLoop.FluidName, this->sourceSideInletTemp, thisSourcePlantLoop.FluidIndex, @@ -658,7 +658,7 @@ void EIRPlantLoopHeatPump::calcHeatRecoveryHeatTransferASHP(EnergyPlusData &stat // calculate heat recovery side outlet conditions auto &thisHeatRecoveryPlantLoop = state.dataPlnt->PlantLoop(this->heatRecoveryPlantLoc.loopNum); - Real64 const CpHR = FluidProperties::GetSpecificHeatGlycol(state, + Real64 const CpHR = Fluid::GetSpecificHeatGlycol(state, thisHeatRecoveryPlantLoop.FluidName, this->heatRecoveryInletTemp, thisHeatRecoveryPlantLoop.FluidIndex, @@ -958,7 +958,7 @@ void EIRPlantLoopHeatPump::onInitLoopEquip(EnergyPlusData &state, [[maybe_unused if (state.dataGlobal->BeginEnvrnFlag && this->envrnInit && state.dataPlnt->PlantFirstSizesOkayToFinalize) { - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->loadSidePlantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->loadSidePlantLoc.loopNum).FluidIndex, @@ -967,7 +967,7 @@ void EIRPlantLoopHeatPump::onInitLoopEquip(EnergyPlusData &state, [[maybe_unused PlantUtilities::InitComponentNodes(state, 0.0, this->loadSideDesignMassFlowRate, this->loadSideNodes.inlet, this->loadSideNodes.outlet); if (this->waterSource) { - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->sourceSidePlantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->sourceSidePlantLoc.loopNum).FluidIndex, @@ -980,7 +980,7 @@ void EIRPlantLoopHeatPump::onInitLoopEquip(EnergyPlusData &state, [[maybe_unused this->sourceSideDesignMassFlowRate = rho * this->sourceSideDesignVolFlowRate; // heat recovery if (this->heatRecoveryAvailable) { - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->heatRecoveryPlantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->heatRecoveryPlantLoc.loopNum).FluidIndex, @@ -1044,12 +1044,12 @@ void EIRPlantLoopHeatPump::sizeLoadSide(EnergyPlusData &state) (this->EIRHPType == DataPlant::PlantEquipmentType::HeatPumpEIRHeating) ? Constant::HWInitConvTemp : Constant::CWInitConvTemp; // I guess I can assume the plant fluids are the same for HW and CW. So only the sizing type is an issue on which to use. - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->loadSidePlantLoc.loopNum).FluidName, loadSideInitTemp, state.dataPlnt->PlantLoop(this->loadSidePlantLoc.loopNum).FluidIndex, "EIRPlantLoopHeatPump::sizeLoadSide()"); - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->loadSidePlantLoc.loopNum).FluidName, loadSideInitTemp, state.dataPlnt->PlantLoop(this->loadSidePlantLoc.loopNum).FluidIndex, @@ -1076,13 +1076,13 @@ void EIRPlantLoopHeatPump::sizeLoadSide(EnergyPlusData &state) Real64 compCp = Cp; Real64 compDeltaT = deltaT; if (compLoopNum > 0) { - compRho = FluidProperties::GetDensityGlycol( + compRho = Fluid::GetDensityGlycol( state, state.dataPlnt->PlantLoop(compLoopNum).FluidName, this->EIRHPType == DataPlant::PlantEquipmentType::HeatPumpEIRCooling ? Constant::HWInitConvTemp : Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(compLoopNum).FluidIndex, "EIRPlantLoopHeatPump::sizeLoadSide()"); - compCp = FluidProperties::GetSpecificHeatGlycol( + compCp = Fluid::GetSpecificHeatGlycol( state, state.dataPlnt->PlantLoop(compLoopNum).FluidName, this->EIRHPType == DataPlant::PlantEquipmentType::HeatPumpEIRCooling ? Constant::HWInitConvTemp : Constant::CWInitConvTemp, @@ -1132,12 +1132,12 @@ void EIRPlantLoopHeatPump::sizeLoadSide(EnergyPlusData &state) (this->EIRHPType == DataPlant::PlantEquipmentType::HeatPumpEIRCooling) ? Constant::HWInitConvTemp : Constant::CWInitConvTemp; int compLoopNum = this->companionHeatPumpCoil->loadSidePlantLoc.loopNum; if (compLoopNum > 0) { - Real64 const compRho = FluidProperties::GetDensityGlycol(state, + Real64 const compRho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(compLoopNum).FluidName, compLoadSideInitTemp, state.dataPlnt->PlantLoop(compLoopNum).FluidIndex, "EIRPlantLoopHeatPump::sizeLoadSide()"); - Real64 const compCp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 const compCp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(compLoopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(compLoopNum).FluidIndex, @@ -1311,12 +1311,12 @@ void EIRPlantLoopHeatPump::sizeSrcSideWSHP(EnergyPlusData &state) Real64 sourceSideInitTemp = (this->EIRHPType == DataPlant::PlantEquipmentType::HeatPumpEIRCooling) ? Constant::CWInitConvTemp : Constant::HWInitConvTemp; - Real64 const rhoSrc = FluidProperties::GetDensityGlycol(state, + Real64 const rhoSrc = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->loadSidePlantLoc.loopNum).FluidName, sourceSideInitTemp, state.dataPlnt->PlantLoop(this->loadSidePlantLoc.loopNum).FluidIndex, "EIRPlantLoopHeatPump::sizeSrcSideWSHP()"); - Real64 const CpSrc = FluidProperties::GetSpecificHeatGlycol(state, + Real64 const CpSrc = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->loadSidePlantLoc.loopNum).FluidName, sourceSideInitTemp, state.dataPlnt->PlantLoop(this->loadSidePlantLoc.loopNum).FluidIndex, @@ -1536,12 +1536,12 @@ void EIRPlantLoopHeatPump::sizeHeatRecoveryASHP(EnergyPlusData &state) std::string_view const typeName = DataPlant::PlantEquipTypeNames[static_cast(this->EIRHPType)]; Real64 heatRecoveryInitTemp = (this->EIRHPType == DataPlant::PlantEquipmentType::HeatPumpEIRCooling) ? Constant::HWInitConvTemp : Constant::CWInitConvTemp; - Real64 const rhoHR = FluidProperties::GetDensityGlycol(state, + Real64 const rhoHR = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->heatRecoveryPlantLoc.loopNum).FluidName, heatRecoveryInitTemp, state.dataPlnt->PlantLoop(this->heatRecoveryPlantLoc.loopNum).FluidIndex, "EIRPlantLoopHeatPump::sizeHeatRecoveryASHP()"); - Real64 const CpHR = FluidProperties::GetSpecificHeatGlycol(state, + Real64 const CpHR = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->heatRecoveryPlantLoc.loopNum).FluidName, heatRecoveryInitTemp, state.dataPlnt->PlantLoop(this->heatRecoveryPlantLoc.loopNum).FluidIndex, @@ -2504,7 +2504,7 @@ void EIRFuelFiredHeatPump::doPhysics(EnergyPlusData &state, Real64 currentLoad) } DataPlant::PlantLoopData &thisLoadPlantLoop = state.dataPlnt->PlantLoop(this->loadSidePlantLoc.loopNum); - Real64 CpLoad = FluidProperties::GetSpecificHeatGlycol( + Real64 CpLoad = Fluid::GetSpecificHeatGlycol( state, thisLoadPlantLoop.FluidName, thisInletNode.Temp, thisLoadPlantLoop.FluidIndex, "PLFFHPEIR::simulate()"); // Set the current load equal to the FFHP load @@ -2890,7 +2890,7 @@ void EIRFuelFiredHeatPump::doPhysics(EnergyPlusData &state, Real64 currentLoad) Real64 CpSrc = 0.0; if (this->waterSource) { auto &thisSourcePlantLoop = state.dataPlnt->PlantLoop(this->sourceSidePlantLoc.loopNum); - CpSrc = FluidProperties::GetSpecificHeatGlycol( + CpSrc = Fluid::GetSpecificHeatGlycol( state, thisSourcePlantLoop.FluidName, this->sourceSideInletTemp, thisSourcePlantLoop.FluidIndex, "PLFFHPEIR::simulate()"); } else if (this->airSource) { CpSrc = Psychrometrics::PsyCpAirFnW(state.dataEnvrn->OutHumRat); diff --git a/src/EnergyPlus/PlantPipingSystemsManager.cc b/src/EnergyPlus/PlantPipingSystemsManager.cc index dc8deb1da92..a4537988cf5 100644 --- a/src/EnergyPlus/PlantPipingSystemsManager.cc +++ b/src/EnergyPlus/PlantPipingSystemsManager.cc @@ -2109,7 +2109,7 @@ namespace PlantPipingSystemsManager { } // Once we find ourselves on the plant loop, we can do other things - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(thisCircuit->plantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(thisCircuit->plantLoc.loopNum).FluidIndex, @@ -5689,22 +5689,22 @@ namespace PlantPipingSystemsManager { // retrieve fluid properties based on the circuit inlet temperature -- which varies during the simulation // but need to verify the value of inlet temperature during warm up, etc. - FluidCp = FluidProperties::GetSpecificHeatGlycol(state, + FluidCp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(thisCircuit->plantLoc.loopNum).FluidName, thisCircuit->InletTemperature, state.dataPlnt->PlantLoop(thisCircuit->plantLoc.loopNum).FluidIndex, RoutineName); - FluidDensity = FluidProperties::GetDensityGlycol(state, + FluidDensity = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(thisCircuit->plantLoc.loopNum).FluidName, thisCircuit->InletTemperature, state.dataPlnt->PlantLoop(thisCircuit->plantLoc.loopNum).FluidIndex, RoutineName); - FluidConductivity = FluidProperties::GetConductivityGlycol(state, + FluidConductivity = Fluid::GetConductivityGlycol(state, state.dataPlnt->PlantLoop(thisCircuit->plantLoc.loopNum).FluidName, thisCircuit->InletTemperature, state.dataPlnt->PlantLoop(thisCircuit->plantLoc.loopNum).FluidIndex, RoutineName); - FluidViscosity = FluidProperties::GetViscosityGlycol(state, + FluidViscosity = Fluid::GetViscosityGlycol(state, state.dataPlnt->PlantLoop(thisCircuit->plantLoc.loopNum).FluidName, thisCircuit->InletTemperature, state.dataPlnt->PlantLoop(thisCircuit->plantLoc.loopNum).FluidIndex, diff --git a/src/EnergyPlus/PlantPressureSystem.cc b/src/EnergyPlus/PlantPressureSystem.cc index dc15cff6b4c..8f04efbdc57 100644 --- a/src/EnergyPlus/PlantPressureSystem.cc +++ b/src/EnergyPlus/PlantPressureSystem.cc @@ -375,8 +375,8 @@ void BranchPressureDrop(EnergyPlusData &state, // Using/Aliasing using Curve::CurveValue; using Curve::PressureCurveValue; - using FluidProperties::GetDensityGlycol; - using FluidProperties::GetViscosityGlycol; + using Fluid::GetDensityGlycol; + using Fluid::GetViscosityGlycol; // SUBROUTINE PARAMETER DEFINITIONS: static constexpr std::string_view RoutineName("CalcPlantPressureSystem"); @@ -839,8 +839,8 @@ Real64 ResolveLoopFlowVsPressure(EnergyPlusData &state, // Using/Aliasing using Curve::CurveValue; - using FluidProperties::GetDensityGlycol; - using FluidProperties::GetViscosityGlycol; + using Fluid::GetDensityGlycol; + using Fluid::GetViscosityGlycol; // Return value Real64 ResolvedLoopMassFlowRate; diff --git a/src/EnergyPlus/PlantUtilities.cc b/src/EnergyPlus/PlantUtilities.cc index 3d442924399..493e3f2fed3 100644 --- a/src/EnergyPlus/PlantUtilities.cc +++ b/src/EnergyPlus/PlantUtilities.cc @@ -985,7 +985,7 @@ void UpdateChillerComponentCondenserSide(EnergyPlusData &state, // update outlet conditions if needed or possible // Using/Aliasing - using FluidProperties::GetSpecificHeatGlycol; + using Fluid::GetSpecificHeatGlycol; // SUBROUTINE PARAMETER DEFINITIONS: static constexpr std::string_view RoutineName("UpdateChillerComponentCondenserSide"); @@ -1079,7 +1079,7 @@ void UpdateComponentHeatRecoverySide(EnergyPlusData &state, // update outlet conditions if needed or possible // Using/Aliasing - using FluidProperties::GetSpecificHeatGlycol; + using Fluid::GetSpecificHeatGlycol; // SUBROUTINE PARAMETER DEFINITIONS: static constexpr std::string_view RoutineName("UpdateComponentHeatRecoverySide"); diff --git a/src/EnergyPlus/PondGroundHeatExchanger.cc b/src/EnergyPlus/PondGroundHeatExchanger.cc index 1a5542223d5..f7837cfa626 100644 --- a/src/EnergyPlus/PondGroundHeatExchanger.cc +++ b/src/EnergyPlus/PondGroundHeatExchanger.cc @@ -207,7 +207,7 @@ void GetPondGroundHeatExchanger(EnergyPlusData &state) state.dataIPShortCut->cAlphaFieldNames, state.dataIPShortCut->cNumericFieldNames); - state.dataPondGHE->PondGHE(Item).WaterIndex = FluidProperties::FindGlycol(state, fluidNameWater); + state.dataPondGHE->PondGHE(Item).WaterIndex = Fluid::FindGlycol(state, fluidNameWater); // General user input data state.dataPondGHE->PondGHE(Item).Name = state.dataIPShortCut->cAlphaArgs(1); @@ -470,10 +470,10 @@ void PondGroundHeatExchangerData::CalcPondGroundHeatExchanger(EnergyPlusData &st static constexpr std::string_view RoutineName("CalcPondGroundHeatExchanger"); Real64 PondMass = this->Depth * this->Area * - FluidProperties::GetDensityGlycol( + Fluid::GetDensityGlycol( state, fluidNameWater, max(this->PondTemp, DataPrecisionGlobals::constant_zero), this->WaterIndex, RoutineName); - Real64 SpecificHeat = FluidProperties::GetSpecificHeatGlycol( + Real64 SpecificHeat = Fluid::GetSpecificHeatGlycol( state, fluidNameWater, max(this->PondTemp, DataPrecisionGlobals::constant_zero), this->WaterIndex, RoutineName); Real64 Flux = this->CalcTotalFLux(state, this->PondTemp); @@ -571,7 +571,7 @@ Real64 PondGroundHeatExchangerData::CalcTotalFLux(EnergyPlusData &state, Real64 Real64 FluxSolAbsorbed = CalcSolarFlux(state); // specific heat from fluid prop routines - Real64 SpecHeat = FluidProperties::GetSpecificHeatGlycol(state, + Real64 SpecHeat = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, max(this->InletTemp, 0.0), state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -713,17 +713,17 @@ Real64 PondGroundHeatExchangerData::CalcEffectiveness(EnergyPlusData &state, // evaluate properties at pipe fluid temperature for given pipe fluid - Real64 SpecificHeat = FluidProperties::GetSpecificHeatGlycol(state, + Real64 SpecificHeat = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, InsideTemperature, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, CalledFrom); - Real64 Conductivity = FluidProperties::GetConductivityGlycol(state, + Real64 Conductivity = Fluid::GetConductivityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, InsideTemperature, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, CalledFrom); - Real64 Viscosity = FluidProperties::GetViscosityGlycol(state, + Real64 Viscosity = Fluid::GetViscosityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, InsideTemperature, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -747,10 +747,10 @@ Real64 PondGroundHeatExchangerData::CalcEffectiveness(EnergyPlusData &state, Real64 ConvCoefIn = Conductivity * NusseltNum / this->TubeInDiameter; // now find properties of pond water - always assume pond fluid is water - Real64 WaterSpecHeat = FluidProperties::GetSpecificHeatGlycol(state, fluidNameWater, max(PondTemperature, 0.0), this->WaterIndex, CalledFrom); - Real64 WaterConductivity = FluidProperties::GetConductivityGlycol(state, fluidNameWater, max(PondTemperature, 0.0), this->WaterIndex, CalledFrom); - Real64 WaterViscosity = FluidProperties::GetViscosityGlycol(state, fluidNameWater, max(PondTemperature, 0.0), this->WaterIndex, CalledFrom); - Real64 WaterDensity = FluidProperties::GetDensityGlycol(state, fluidNameWater, max(PondTemperature, 0.0), this->WaterIndex, CalledFrom); + Real64 WaterSpecHeat = Fluid::GetSpecificHeatGlycol(state, fluidNameWater, max(PondTemperature, 0.0), this->WaterIndex, CalledFrom); + Real64 WaterConductivity = Fluid::GetConductivityGlycol(state, fluidNameWater, max(PondTemperature, 0.0), this->WaterIndex, CalledFrom); + Real64 WaterViscosity = Fluid::GetViscosityGlycol(state, fluidNameWater, max(PondTemperature, 0.0), this->WaterIndex, CalledFrom); + Real64 WaterDensity = Fluid::GetDensityGlycol(state, fluidNameWater, max(PondTemperature, 0.0), this->WaterIndex, CalledFrom); // derived properties for natural convection coefficient // expansion coef (Beta) = -1/Rho. dRho/dT @@ -758,8 +758,8 @@ Real64 PondGroundHeatExchangerData::CalcEffectiveness(EnergyPlusData &state, // It guarantees that the delta T is 10C and also avoids the problems associated with // water hitting a maximum density at around 4C. (RKS) Real64 ExpansionCoef = - -(FluidProperties::GetDensityGlycol(state, fluidNameWater, max(PondTemperature, 10.0) + 5.0, this->WaterIndex, CalledFrom) - - FluidProperties::GetDensityGlycol(state, fluidNameWater, max(PondTemperature, 10.0) - 5.0, this->WaterIndex, CalledFrom)) / + -(Fluid::GetDensityGlycol(state, fluidNameWater, max(PondTemperature, 10.0) + 5.0, this->WaterIndex, CalledFrom) - + Fluid::GetDensityGlycol(state, fluidNameWater, max(PondTemperature, 10.0) - 5.0, this->WaterIndex, CalledFrom)) / (10.0 * WaterDensity); Real64 ThermDiff = WaterConductivity / (WaterDensity * WaterSpecHeat); @@ -842,7 +842,7 @@ void PondGroundHeatExchangerData::UpdatePondGroundHeatExchanger(EnergyPlusData & // Calculate the water side outlet conditions and set the // appropriate conditions on the correct HVAC node. - Real64 CpFluid = FluidProperties::GetSpecificHeatGlycol(state, + Real64 CpFluid = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, this->InletTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -898,12 +898,12 @@ void PondGroundHeatExchangerData::oneTimeInit(EnergyPlusData &state) if (errFlag) { ShowFatalError(state, "InitPondGroundHeatExchanger: Program terminated due to previous condition(s)."); } - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, DataPrecisionGlobals::constant_zero, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, DataPrecisionGlobals::constant_zero, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, diff --git a/src/EnergyPlus/PoweredInductionUnits.cc b/src/EnergyPlus/PoweredInductionUnits.cc index 61b5a745745..76b8a1a0075 100644 --- a/src/EnergyPlus/PoweredInductionUnits.cc +++ b/src/EnergyPlus/PoweredInductionUnits.cc @@ -115,7 +115,6 @@ using namespace ScheduleManager; using Psychrometrics::PsyCpAirFnW; using Psychrometrics::PsyHFnTdbW; using SteamCoils::SimulateSteamCoilComponents; -using namespace FluidProperties; constexpr const char *fluidNameSteam("STEAM"); constexpr const char *fluidNameWater("WATER"); @@ -232,7 +231,7 @@ void GetPIUs(EnergyPlusData &state) using BranchNodeConnections::SetUpCompSets; using BranchNodeConnections::TestCompSet; - using FluidProperties::FindRefrigerant; + using Fluid::FindRefrigerant; using NodeInputManager::GetOnlySingleNode; using SteamCoils::GetCoilSteamInletNode; using WaterCoils::GetCoilWaterInletNode; @@ -724,7 +723,7 @@ void InitPIU(EnergyPlusData &state, if (thisPIU.HotControlNode > 0) { // plant upgrade note? why no separate handling of steam coil? add it ? // local plant fluid density - Real64 const rho = GetDensityGlycol(state, + Real64 const rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(thisPIU.HWplantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(thisPIU.HWplantLoc.loopNum).FluidIndex, @@ -854,8 +853,8 @@ void SizePIU(EnergyPlusData &state, int const PIUNum) // Using/Aliasing using namespace DataSizing; - using FluidProperties::GetDensityGlycol; - using FluidProperties::GetSpecificHeatGlycol; + using Fluid::GetDensityGlycol; + using Fluid::GetSpecificHeatGlycol; using SteamCoils::GetCoilSteamInletNode; using SteamCoils::GetCoilSteamOutletNode; using WaterCoils::GetCoilWaterInletNode; @@ -1309,12 +1308,12 @@ void SizePIU(EnergyPlusData &state, int const PIUNum) DesCoilLoad = PsyCpAirFnW(CoilOutHumRat) * DesMassFlow * (CoilOutTemp - CoilInTemp); Real64 constexpr TempSteamIn = 100.00; Real64 const EnthSteamInDry = - GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 1.0, thisPIU.HCoil_FluidIndex, RoutineName); + Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 1.0, thisPIU.HCoil_FluidIndex, RoutineName); Real64 const EnthSteamOutWet = - GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 0.0, thisPIU.HCoil_FluidIndex, RoutineName); + Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 0.0, thisPIU.HCoil_FluidIndex, RoutineName); Real64 const LatentHeatSteam = EnthSteamInDry - EnthSteamOutWet; Real64 const SteamDensity = - GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, thisPIU.HCoil_FluidIndex, RoutineName); + Fluid::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, thisPIU.HCoil_FluidIndex, RoutineName); int DummyWaterIndex = 1; Real64 const Cp = GetSpecificHeatGlycol( state, fluidNameWater, state.dataSize->PlantSizData(PltSizHeatNum).ExitTemp, DummyWaterIndex, RoutineName); @@ -1421,8 +1420,8 @@ void CalcSeriesPIU(EnergyPlusData &state, // Using/Aliasing using namespace DataZoneEnergyDemands; - using FluidProperties::GetDensityGlycol; - using FluidProperties::GetSpecificHeatGlycol; + using Fluid::GetDensityGlycol; + using Fluid::GetSpecificHeatGlycol; using HeatingCoils::SimulateHeatingCoilComponents; using MixerComponent::SimAirMixer; using PlantUtilities::SetComponentFlowRate; diff --git a/src/EnergyPlus/Pumps.cc b/src/EnergyPlus/Pumps.cc index b22f78716f8..9799fa8d4ef 100644 --- a/src/EnergyPlus/Pumps.cc +++ b/src/EnergyPlus/Pumps.cc @@ -217,8 +217,8 @@ void GetPumpInput(EnergyPlusData &state) using Curve::GetCurveIndex; using Curve::GetCurveMinMaxValues; using DataSizing::AutoSize; - using FluidProperties::GetDensityGlycol; - using FluidProperties::GetSatDensityRefrig; + using Fluid::GetDensityGlycol; + using Fluid::GetSatDensityRefrig; using NodeInputManager::GetOnlySingleNode; using ScheduleManager::CheckScheduleValueMinMax; using ScheduleManager::GetScheduleIndex; @@ -1353,8 +1353,8 @@ void InitializePumps(EnergyPlusData &state, int const PumpNum) // This subroutine does one-time and begin-envrn inits for the pump // Using/Aliasing - using FluidProperties::GetDensityGlycol; - using FluidProperties::GetSatDensityRefrig; + using Fluid::GetDensityGlycol; + using Fluid::GetSatDensityRefrig; using PlantUtilities::InitComponentNodes; using PlantUtilities::ScanPlantLoopsForObject; @@ -1579,7 +1579,7 @@ void SetupPumpMinMaxFlows(EnergyPlusData &state, int const LoopNum, int const Pu // These values are also bounded by EMS overridable limit of max flow rate. // Using/Aliasing - using FluidProperties::GetDensityGlycol; + using Fluid::GetDensityGlycol; using PlantPressureSystem::ResolveLoopFlowVsPressure; using PlantUtilities::BoundValueToWithinTwoValues; using ScheduleManager::GetCurrentScheduleValue; @@ -1756,8 +1756,8 @@ void CalcPumps(EnergyPlusData &state, int const PumpNum, Real64 const FlowReques // Energy Calculations, ASHRAE, 1993, pp2-10 to 2-15 // Using/Aliasing - using FluidProperties::GetDensityGlycol; - using FluidProperties::GetSpecificHeatGlycol; + using Fluid::GetDensityGlycol; + using Fluid::GetSpecificHeatGlycol; using PlantUtilities::SetComponentFlowRate; using ScheduleManager::GetCurrentScheduleValue; @@ -2018,8 +2018,8 @@ void SizePump(EnergyPlusData &state, int const PumpNum) // Obtains flow rates from the plant sizing array. // Using/Aliasing - using FluidProperties::GetDensityGlycol; - using FluidProperties::GetSatDensityRefrig; + using Fluid::GetDensityGlycol; + using Fluid::GetSatDensityRefrig; // SUBROUTINE PARAMETER DEFINITIONS: Real64 constexpr StartTemp(100.0); // Standard Temperature across code to calculated Steam density @@ -2325,8 +2325,8 @@ void GetRequiredMassFlowRate(EnergyPlusData &state, Real64 &PumpMaxMassFlowRateVFDRange) { // Using/Aliasing - using FluidProperties::GetDensityGlycol; - using FluidProperties::GetSpecificHeatGlycol; + using Fluid::GetDensityGlycol; + using Fluid::GetSpecificHeatGlycol; using PlantPressureSystem::ResolveLoopFlowVsPressure; using PlantUtilities::SetComponentFlowRate; diff --git a/src/EnergyPlus/RefrigeratedCase.cc b/src/EnergyPlus/RefrigeratedCase.cc index ec4e4873db0..d2e406cb097 100644 --- a/src/EnergyPlus/RefrigeratedCase.cc +++ b/src/EnergyPlus/RefrigeratedCase.cc @@ -4658,10 +4658,10 @@ void GetRefrigerationInput(EnergyPlusData &state) TBrineInRated = TBrineOutRated + Secondary(SecondaryNum).TRangeDifRated; Real64 TBrineAverage = (TBrineOutRated + TBrineInRated) / 2.0; Secondary(SecondaryNum).TBrineAverage = TBrineAverage; - DensityBrineRated = FluidProperties::GetDensityGlycol( + DensityBrineRated = Fluid::GetDensityGlycol( state, Secondary(SecondaryNum).FluidName, TBrineAverage, Secondary(SecondaryNum).FluidID, TrackMessage); Secondary(SecondaryNum).DensityBrineRated = DensityBrineRated; - CpBrineRated = FluidProperties::GetSpecificHeatGlycol( + CpBrineRated = Fluid::GetSpecificHeatGlycol( state, Secondary(SecondaryNum).FluidName, TBrineAverage, Secondary(SecondaryNum).FluidID, TrackMessage); Secondary(SecondaryNum).CpBrineRated = CpBrineRated; @@ -4742,19 +4742,19 @@ void GetRefrigerationInput(EnergyPlusData &state) Secondary(SecondaryNum).CircRate = DefaultCircRate; if (!lNumericBlanks(10)) Secondary(SecondaryNum).CircRate = Numbers(10); - DensityPhaseChange = FluidProperties::GetSatDensityRefrig(state, + DensityPhaseChange = Fluid::GetSatDensityRefrig(state, Secondary(SecondaryNum).FluidName, Secondary(SecondaryNum).TCondense, 0.0, Secondary(SecondaryNum).FluidID, TrackMessageAlt); - DeltaHPhaseChange = FluidProperties::GetSatEnthalpyRefrig(state, + DeltaHPhaseChange = Fluid::GetSatEnthalpyRefrig(state, Secondary(SecondaryNum).FluidName, Secondary(SecondaryNum).TCondense, 1.0, Secondary(SecondaryNum).FluidID, TrackMessageAlt) - - FluidProperties::GetSatEnthalpyRefrig(state, + Fluid::GetSatEnthalpyRefrig(state, Secondary(SecondaryNum).FluidName, Secondary(SecondaryNum).TCondense, 0.0, @@ -6230,15 +6230,15 @@ void GetRefrigerationInput(EnergyPlusData &state) // Determine intercooler pressure and temperature at design conditions if (System(RefrigSysNum).NumStages == 2) { - Real64 PCond = FluidProperties::GetSatPressureRefrig(state, + Real64 PCond = Fluid::GetSatPressureRefrig(state, System(RefrigSysNum).RefrigerantName, Condenser(System(RefrigSysNum).CondenserNum(1)).RatedTCondense, System(RefrigSysNum).RefIndex, RoutineName); - Real64 PEvap = FluidProperties::GetSatPressureRefrig( + Real64 PEvap = Fluid::GetSatPressureRefrig( state, System(RefrigSysNum).RefrigerantName, System(RefrigSysNum).TEvapDesign, System(RefrigSysNum).RefIndex, RoutineName); System(RefrigSysNum).PIntercooler = std::sqrt(PCond * PEvap); - System(RefrigSysNum).TIntercooler = FluidProperties::GetSatTemperatureRefrig( + System(RefrigSysNum).TIntercooler = Fluid::GetSatTemperatureRefrig( state, System(RefrigSysNum).RefrigerantName, System(RefrigSysNum).PIntercooler, System(RefrigSysNum).RefIndex, RoutineName); } // NumStages @@ -6846,7 +6846,7 @@ void GetRefrigerationInput(EnergyPlusData &state) if (Compressor(CompNum).TransFlag) { // Calculate nominal capacity of transcritical Compressor Real64 GCOutletH = - FluidProperties::GetSupHeatEnthalpyRefrig(state, + Fluid::GetSupHeatEnthalpyRefrig(state, TransSystem(TransRefrigSysNum).RefrigerantName, GasCooler(TransSystem(TransRefrigSysNum).GasCoolerNum(1)).RatedOutletT, GasCooler(TransSystem(TransRefrigSysNum).GasCoolerNum(1)).RatedOutletP, @@ -6948,7 +6948,7 @@ void GetRefrigerationInput(EnergyPlusData &state) } // Check receiver temperature against minimum condensing temperature (from gas cooler input) and design evaporator temperatures - TransSystem(TransRefrigSysNum).TReceiver = FluidProperties::GetSatTemperatureRefrig( + TransSystem(TransRefrigSysNum).TReceiver = Fluid::GetSatTemperatureRefrig( state, TransSystem(TransRefrigSysNum).RefrigerantName, TransSystem(TransRefrigSysNum).PReceiver, RefrigIndex, RoutineNameNoColon); if (TransSystem(TransRefrigSysNum).TReceiver > GasCooler(TransSystem(TransRefrigSysNum).GasCoolerNum(NumGasCoolers)).MinCondTemp) { ShowWarningError(state, @@ -10651,7 +10651,7 @@ void InitRefrigerationPlantConnections(EnergyPlusData &state) ShowFatalError(state, "InitRefrigerationPlantConnections: Program terminated due to previous condition(s)."); } - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(Condenser(RefCondLoop).plantLoc.loopNum).FluidName, 20.0, state.dataPlnt->PlantLoop(Condenser(RefCondLoop).plantLoc.loopNum).FluidIndex, @@ -10682,7 +10682,7 @@ void InitRefrigerationPlantConnections(EnergyPlusData &state) ShowFatalError(state, "InitRefrigerationPlantConnections: Program terminated due to previous condition(s)."); } - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(RefrigRack(RefCompRackLoop).plantLoc.loopNum).FluidName, 20.0, state.dataPlnt->PlantLoop(RefrigRack(RefCompRackLoop).plantLoc.loopNum).FluidIndex, @@ -10707,7 +10707,7 @@ void InitRefrigerationPlantConnections(EnergyPlusData &state) for (int RefCondLoop = 1; RefCondLoop <= state.dataRefrigCase->NumRefrigCondensers; ++RefCondLoop) { if (Condenser(RefCondLoop).CondenserType != DataHeatBalance::RefrigCondenserType::Water) continue; - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(Condenser(RefCondLoop).plantLoc.loopNum).FluidName, 20.0, state.dataPlnt->PlantLoop(Condenser(RefCondLoop).plantLoc.loopNum).FluidIndex, @@ -10725,7 +10725,7 @@ void InitRefrigerationPlantConnections(EnergyPlusData &state) for (int RefCompRackLoop = 1; RefCompRackLoop <= state.dataRefrigCase->NumRefrigeratedRacks; ++RefCompRackLoop) { if (RefrigRack(RefCompRackLoop).CondenserType != DataHeatBalance::RefrigCondenserType::Water) continue; - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(RefrigRack(RefCompRackLoop).plantLoc.loopNum).FluidName, 20.0, state.dataPlnt->PlantLoop(RefrigRack(RefCompRackLoop).plantLoc.loopNum).FluidIndex, @@ -11612,12 +11612,12 @@ void RefrigCondenserData::simulate(EnergyPlusData &state, // Make demand request on first HVAC iteration // get cooling fluid properties - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(PlantLoc.loopNum).FluidName, this->InletTemp, state.dataPlnt->PlantLoop(PlantLoc.loopNum).FluidIndex, RoutineName); - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(PlantLoc.loopNum).FluidName, this->InletTemp, state.dataPlnt->PlantLoop(PlantLoc.loopNum).FluidIndex, @@ -11772,12 +11772,12 @@ void RefrigRackData::simulate(EnergyPlusData &state, // Make demand request on first HVAC iteration // get cooling fluid properties - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(PlantLoc.loopNum).FluidName, this->InletTemp, state.dataPlnt->PlantLoop(PlantLoc.loopNum).FluidIndex, RoutineName); - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(PlantLoc.loopNum).FluidName, this->InletTemp, state.dataPlnt->PlantLoop(PlantLoc.loopNum).FluidIndex, @@ -12159,9 +12159,9 @@ void SimulateDetailedRefrigerationSystems(EnergyPlusData &state) // only calc detailed system if have load (could be zero first time through if only load is cascade condenser) thisSys.TotalSystemLoad = thisSys.TotalCoolingLoad + thisSys.SumSecondaryLoopLoad + thisSys.SumMechSCLoad + thisSys.SumCascadeLoad; if (thisSys.TotalSystemLoad > 0.0) { - thisSys.CpSatVapEvap = FluidProperties::GetSatSpecificHeatRefrig( + thisSys.CpSatVapEvap = Fluid::GetSatSpecificHeatRefrig( state, thisSys.RefrigerantName, thisSys.TEvapNeeded, 1.0, thisSys.RefIndex, RoutineName); - thisSys.HCaseOut = FluidProperties::GetSatEnthalpyRefrig( + thisSys.HCaseOut = Fluid::GetSatEnthalpyRefrig( state, thisSys.RefrigerantName, thisSys.TEvapNeeded, 1.0, thisSys.RefIndex, RoutineName) + thisSys.CpSatVapEvap * CaseSuperheat; // Establish estimates to start solution loop @@ -12187,8 +12187,8 @@ void SimulateDetailedRefrigerationSystems(EnergyPlusData &state) // Produce first time step estimates, assume no subcoolers thisSys.HSatLiqCond = - FluidProperties::GetSatEnthalpyRefrig(state, thisSys.RefrigerantName, thisSys.TCondense, 0.0, thisSys.RefIndex, RoutineName); - thisSys.CpSatLiqCond = FluidProperties::GetSatSpecificHeatRefrig( + Fluid::GetSatEnthalpyRefrig(state, thisSys.RefrigerantName, thisSys.TCondense, 0.0, thisSys.RefIndex, RoutineName); + thisSys.CpSatLiqCond = Fluid::GetSatSpecificHeatRefrig( state, thisSys.RefrigerantName, thisSys.TCondense, 0.0, thisSys.RefIndex, RoutineName); thisSys.HCaseIn = thisSys.HSatLiqCond - thisSys.CpSatLiqCond * Condenser(thisSys.CondenserNum(1)).RatedSubcool; thisSys.RefMassFlowtoLoads = thisSys.TotalSystemLoad / (thisSys.HCaseOut - thisSys.HCaseIn); @@ -12475,24 +12475,24 @@ void SimulateDetailedTransRefrigSystems(EnergyPlusData &state) if (sys.TotalSystemLoad > 0.0) { if (sys.TransSysType == 2) { sys.CpSatVapEvapLT = - FluidProperties::GetSatSpecificHeatRefrig(state, sys.RefrigerantName, sys.TEvapNeededLT, 1.0, sys.RefIndex, RoutineName); + Fluid::GetSatSpecificHeatRefrig(state, sys.RefrigerantName, sys.TEvapNeededLT, 1.0, sys.RefIndex, RoutineName); sys.HCaseOutLT = - FluidProperties::GetSatEnthalpyRefrig(state, sys.RefrigerantName, sys.TEvapNeededLT, 1.0, sys.RefIndex, RoutineName) + + Fluid::GetSatEnthalpyRefrig(state, sys.RefrigerantName, sys.TEvapNeededLT, 1.0, sys.RefIndex, RoutineName) + sys.CpSatVapEvapLT * TransCaseSuperheat; } sys.CpSatVapEvapMT = - FluidProperties::GetSatSpecificHeatRefrig(state, sys.RefrigerantName, sys.TEvapNeededMT, 1.0, sys.RefIndex, RoutineName); + Fluid::GetSatSpecificHeatRefrig(state, sys.RefrigerantName, sys.TEvapNeededMT, 1.0, sys.RefIndex, RoutineName); sys.HCaseOutMT = - FluidProperties::GetSatEnthalpyRefrig(state, sys.RefrigerantName, sys.TEvapNeededMT, 1.0, sys.RefIndex, RoutineName) + + Fluid::GetSatEnthalpyRefrig(state, sys.RefrigerantName, sys.TEvapNeededMT, 1.0, sys.RefIndex, RoutineName) + sys.CpSatVapEvapMT * TransCaseSuperheat; // Produce first time step estimates. // Assume no subcoolers and neglect flow through bypass. - sys.TReceiver = FluidProperties::GetSatTemperatureRefrig(state, sys.RefrigerantName, sys.PReceiver, sys.RefIndex, RoutineName); + sys.TReceiver = Fluid::GetSatTemperatureRefrig(state, sys.RefrigerantName, sys.PReceiver, sys.RefIndex, RoutineName); sys.HSatLiqReceiver = - FluidProperties::GetSatEnthalpyRefrig(state, sys.RefrigerantName, sys.TReceiver, 0.0, sys.RefIndex, RoutineName); + Fluid::GetSatEnthalpyRefrig(state, sys.RefrigerantName, sys.TReceiver, 0.0, sys.RefIndex, RoutineName); sys.CpSatLiqReceiver = - FluidProperties::GetSatSpecificHeatRefrig(state, sys.RefrigerantName, sys.TReceiver, 0.0, sys.RefIndex, RoutineName); + Fluid::GetSatSpecificHeatRefrig(state, sys.RefrigerantName, sys.TReceiver, 0.0, sys.RefIndex, RoutineName); sys.HCaseInMT = sys.HSatLiqReceiver; sys.HCaseInLT = sys.HSatLiqReceiver; sys.RefMassFlowtoLTLoads = 0.0; @@ -13211,7 +13211,7 @@ void TransRefrigSystemData::CalcGasCooler(EnergyPlusData &state, int const SysNu if (cooler.PGasCoolerOut < 7.5e6) { // Ensure gas cooler pressure is at least 7.5 MPa for transcritical operation cooler.PGasCoolerOut = 7.5e6; } - cooler.HGasCoolerOut = FluidProperties::GetSupHeatEnthalpyRefrig( + cooler.HGasCoolerOut = Fluid::GetSupHeatEnthalpyRefrig( state, this->RefrigerantName, cooler.TGasCoolerOut, cooler.PGasCoolerOut, this->RefIndex, RoutineName); cooler.TransOpFlag = true; } else { // Gas cooler in subcritical operation @@ -13219,23 +13219,23 @@ void TransRefrigSystemData::CalcGasCooler(EnergyPlusData &state, int const SysNu if (cooler.TGasCoolerOut > 30.978) { // Gas temperature should be less than critical temperature cooler.PGasCoolerOut = 7.2e6; // Fix the pressure to be subcritical cooler.TGasCoolerOut = - FluidProperties::GetSatTemperatureRefrig(state, this->RefrigerantName, cooler.PGasCoolerOut, this->RefIndex, RoutineName); + Fluid::GetSatTemperatureRefrig(state, this->RefrigerantName, cooler.PGasCoolerOut, this->RefIndex, RoutineName); } else if (cooler.TGasCoolerOut > cooler.MinCondTemp) { // Allow condensing temperature to float above the minimum cooler.PGasCoolerOut = - FluidProperties::GetSatPressureRefrig(state, this->RefrigerantName, cooler.TGasCoolerOut, this->RefIndex, RoutineName); + Fluid::GetSatPressureRefrig(state, this->RefrigerantName, cooler.TGasCoolerOut, this->RefIndex, RoutineName); } else { // Don't allow condensing temperature to drop below minimum cooler.TGasCoolerOut = cooler.MinCondTemp; cooler.PGasCoolerOut = - FluidProperties::GetSatPressureRefrig(state, this->RefrigerantName, cooler.TGasCoolerOut, this->RefIndex, RoutineName); + Fluid::GetSatPressureRefrig(state, this->RefrigerantName, cooler.TGasCoolerOut, this->RefIndex, RoutineName); } cooler.HGasCoolerOut = - FluidProperties::GetSatEnthalpyRefrig(state, this->RefrigerantName, cooler.TGasCoolerOut, 0.0, this->RefIndex, RoutineName); + Fluid::GetSatEnthalpyRefrig(state, this->RefrigerantName, cooler.TGasCoolerOut, 0.0, this->RefIndex, RoutineName); cooler.TransOpFlag = false; } // (OutDbTemp > TransitionTemperature) if (cooler.TGasCoolerOut < 30.978) { cooler.CpGasCoolerOut = - FluidProperties::GetSatSpecificHeatRefrig(state, this->RefrigerantName, cooler.TGasCoolerOut, 0.0, this->RefIndex, RoutineName); + Fluid::GetSatSpecificHeatRefrig(state, this->RefrigerantName, cooler.TGasCoolerOut, 0.0, this->RefIndex, RoutineName); } else { cooler.CpGasCoolerOut = 0.0; } @@ -13385,11 +13385,11 @@ void RefrigSystemData::CalculateCompressors(EnergyPlusData &state) TsatforPdisch = this->TCondense + DelTDischPipes; // need (Psat of (Tcond + delT corresponding to delP disch Pipes)) TsatforPsuct = this->TEvapNeeded - DelTSuctPipes; // need (Psat of (Tevap - delT corresponding to del P suct Pipes)) HsatVaporforTevapneeded = - FluidProperties::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TEvapNeeded, 1.0, this->RefIndex, RoutineName); + Fluid::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TEvapNeeded, 1.0, this->RefIndex, RoutineName); this->HSatLiqCond = - FluidProperties::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TCondense, 0.0, this->RefIndex, RoutineName); + Fluid::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TCondense, 0.0, this->RefIndex, RoutineName); this->CpSatLiqCond = - FluidProperties::GetSatSpecificHeatRefrig(state, this->RefrigerantName, this->TCondense, 0.0, this->RefIndex, RoutineName); + Fluid::GetSatSpecificHeatRefrig(state, this->RefrigerantName, this->TCondense, 0.0, this->RefIndex, RoutineName); // HCaseIn is a function of the condenser rated subcooling, not the compressor rated subcooling // TCompIn needs to include case superheat as well as Temp change from lshx subcoolers // Calculate both here unless set previously by subcooler subroutine @@ -13403,23 +13403,23 @@ void RefrigSystemData::CalculateCompressors(EnergyPlusData &state) } else { // subcooler subroutine has been called to calc TCompIn and HCaseIn this->HCompIn = this->HCaseOut + this->CpSatVapEvap * (this->TCompIn - (this->TEvapNeeded + CaseSuperheat)); } // whether or not subcooler routine used - PSuction = FluidProperties::GetSatPressureRefrig(state, this->RefrigerantName, TsatforPsuct, this->RefIndex, RoutineName); + PSuction = Fluid::GetSatPressureRefrig(state, this->RefrigerantName, TsatforPsuct, this->RefIndex, RoutineName); NumComps = this->NumCompressors; } else { // Low-stage side of two-stage system - PCond = FluidProperties::GetSatPressureRefrig(state, this->RefrigerantName, this->TCondense, this->RefIndex, RoutineName); - PEvap = FluidProperties::GetSatPressureRefrig(state, this->RefrigerantName, this->TEvapNeeded, this->RefIndex, RoutineName); + PCond = Fluid::GetSatPressureRefrig(state, this->RefrigerantName, this->TCondense, this->RefIndex, RoutineName); + PEvap = Fluid::GetSatPressureRefrig(state, this->RefrigerantName, this->TEvapNeeded, this->RefIndex, RoutineName); this->PIntercooler = std::sqrt(PCond * PEvap); this->TIntercooler = - FluidProperties::GetSatTemperatureRefrig(state, this->RefrigerantName, this->PIntercooler, this->RefIndex, RoutineName); + Fluid::GetSatTemperatureRefrig(state, this->RefrigerantName, this->PIntercooler, this->RefIndex, RoutineName); NeededCapacity = NeededCapacity_base; // because compressor capacity rated from txv to comp inlet TsatforPdisch = this->TIntercooler + DelTDischPipes; // need (Psat of (Tinter + delT corresponding to delP disch Pipes)) TsatforPsuct = this->TEvapNeeded - DelTSuctPipes; // need (Psat of (Tevap - delT corresponding to del P suct Pipes)) HsatVaporforTevapneeded = - FluidProperties::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TEvapNeeded, 1.0, this->RefIndex, RoutineName); + Fluid::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TEvapNeeded, 1.0, this->RefIndex, RoutineName); this->HSatLiqCond = - FluidProperties::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TCondense, 0.0, this->RefIndex, RoutineName); + Fluid::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TCondense, 0.0, this->RefIndex, RoutineName); this->CpSatLiqCond = - FluidProperties::GetSatSpecificHeatRefrig(state, this->RefrigerantName, this->TCondense, 0.0, this->RefIndex, RoutineName); + Fluid::GetSatSpecificHeatRefrig(state, this->RefrigerantName, this->TCondense, 0.0, this->RefIndex, RoutineName); // HCaseIn is a function of the condenser rated subcooling, not the compressor rated subcooling // TCompIn needs to include case superheat as well as Temp change from lshx subcoolers // Calculate both here unless set previously by subcooler subroutine @@ -13427,7 +13427,7 @@ void RefrigSystemData::CalculateCompressors(EnergyPlusData &state) if (this->NumSubcoolers == 0) { // No subcooler on this system if (this->IntercoolerType == 1) { // Flash Intercooler this->HCaseIn = - FluidProperties::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TIntercooler, 0.0, this->RefIndex, RoutineName); + Fluid::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TIntercooler, 0.0, this->RefIndex, RoutineName); this->TLiqInActual = this->TIntercooler; } else if (this->IntercoolerType == 2) { // Shell-and-Coil Intercooler this->TLiqInActual = this->TCondense - Condenser1.RatedSubcool - @@ -13439,7 +13439,7 @@ void RefrigSystemData::CalculateCompressors(EnergyPlusData &state) } else { // subcooler subroutine has been called to calc TCompIn and HCaseIn this->HCompIn = this->HCaseOut + this->CpSatVapEvap * (this->TCompIn - (this->TEvapNeeded + CaseSuperheat)); } // whether or not subcooler routine used - PSuction = FluidProperties::GetSatPressureRefrig(state, this->RefrigerantName, TsatforPsuct, this->RefIndex, RoutineName); + PSuction = Fluid::GetSatPressureRefrig(state, this->RefrigerantName, TsatforPsuct, this->RefIndex, RoutineName); NumComps = this->NumCompressors; } // NumStages } else { // Two-stage system, high-stage side @@ -13447,24 +13447,24 @@ void RefrigSystemData::CalculateCompressors(EnergyPlusData &state) TsatforPdisch = this->TCondense + DelTDischPipes; TsatforPsuct = this->TIntercooler; HsatVaporforTevapneeded = - FluidProperties::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TIntercooler, 1.0, this->RefIndex, RoutineName); - // HSatLiqCond = FluidProperties::GetSatEnthalpyRefrig(state, RefrigerantName, TCondense, 0.0, RefIndex, + Fluid::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TIntercooler, 1.0, this->RefIndex, RoutineName); + // HSatLiqCond = Fluid::GetSatEnthalpyRefrig(state, RefrigerantName, TCondense, 0.0, RefIndex, // RoutineName //); ////Autodesk:Tuned These don't change for 2nd stage - // CpSatLiqCond = FluidProperties::GetSatSpecificHeatRefrig(RefrigerantName, TCondense, 0.0, RefIndex, + // CpSatLiqCond = Fluid::GetSatSpecificHeatRefrig(RefrigerantName, TCondense, 0.0, RefIndex, // RoutineName ); ////Autodesk:Tuned These don't change for 2nd stage this->HCaseIn = this->HSatLiqCond - this->CpSatLiqCond * Condenser1.RatedSubcool; this->TCompIn = this->TIntercooler; // System(SysNum)%TLiqInActual = System(SysNum)%TCondense-Condenser(System(SysNum)%CondenserNum(1))%RatedSubcool this->HCompIn = HsatVaporforTevapneeded; - PSuction = FluidProperties::GetSatPressureRefrig(state, this->RefrigerantName, TsatforPsuct, this->RefIndex, RoutineName); + PSuction = Fluid::GetSatPressureRefrig(state, this->RefrigerantName, TsatforPsuct, this->RefIndex, RoutineName); NumComps = this->NumHiStageCompressors; } // StageIndex // dispatch compressors to meet load, note they were listed in compressor list in dispatch order - DensityActual = FluidProperties::GetSupHeatDensityRefrig(state, + DensityActual = Fluid::GetSupHeatDensityRefrig(state, this->RefrigerantName, this->TCompIn, PSuction, @@ -13474,10 +13474,10 @@ void RefrigSystemData::CalculateCompressors(EnergyPlusData &state) if (this->NumStages == 2) { // Autodesk:Tuned Hoisted out of CompIndex loop if (StageIndex == 1) { HCaseInRated_base = - FluidProperties::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TIntercooler, 0.0, this->RefIndex, RoutineName); + Fluid::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TIntercooler, 0.0, this->RefIndex, RoutineName); } else if (StageIndex == 2) { HCompInRated_base = - FluidProperties::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TIntercooler, 1.0, this->RefIndex, RoutineName); + Fluid::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TIntercooler, 1.0, this->RefIndex, RoutineName); } } for (int CompIndex = 1; CompIndex <= NumComps; ++CompIndex) { @@ -13542,7 +13542,7 @@ void RefrigSystemData::CalculateCompressors(EnergyPlusData &state) } // Compressor SuperheatRatingType CaseEnthalpyChangeRated = HCompInRated - HCaseInRated; - DensityRated = FluidProperties::GetSupHeatDensityRefrig(state, this->RefrigerantName, TempInRated, PSuction, this->RefIndex, RoutineName); + DensityRated = Fluid::GetSupHeatDensityRefrig(state, this->RefrigerantName, TempInRated, PSuction, this->RefIndex, RoutineName); // Adjust capacity and mass flow to reflect the specific volume change due to superheating and // the increase in capacity due to extra subcooling MassCorrection = DensityActual / DensityRated; @@ -13602,13 +13602,13 @@ void RefrigSystemData::CalculateCompressors(EnergyPlusData &state) this->HCompOut = this->HCompIn + this->TotCompPower / this->RefMassFlowComps; // error found 9/19/2011, was System(SysNum)%TotCompPower*LocalTimeStep*DataGlobals::SecInHour/System(SysNum)%RefMassFlowComps } else { // High-stage compressors (only for two-stage systems) - HHiStageCompIn = FluidProperties::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TIntercooler, 1.0, this->RefIndex, RoutineName); + HHiStageCompIn = Fluid::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TIntercooler, 1.0, this->RefIndex, RoutineName); this->HCompOut = HHiStageCompIn + this->TotHiStageCompPower / this->RefMassFlowHiStageComps; } // Calculate superheat energy available for desuperheaters - HSatVapCondense = FluidProperties::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TCondense, 1.0, this->RefIndex, RoutineName); - CpSatVapCondense = FluidProperties::GetSatSpecificHeatRefrig(state, this->RefrigerantName, this->TCondense, 1.0, this->RefIndex, RoutineName); + HSatVapCondense = Fluid::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TCondense, 1.0, this->RefIndex, RoutineName); + CpSatVapCondense = Fluid::GetSatSpecificHeatRefrig(state, this->RefrigerantName, this->TCondense, 1.0, this->RefIndex, RoutineName); if (this->NumStages == 1) { // Single-stage systems state.dataHeatBal->HeatReclaimRefrigCondenser(CondID).AvailCapacity = this->RefMassFlowComps * (this->HCompOut - HSatVapCondense); } else { // Two-stage systems @@ -13736,10 +13736,10 @@ void TransRefrigSystemData::CalculateTransCompressors(EnergyPlusData &state) // Determine refrigerant properties at receiver this->CpSatLiqReceiver = - FluidProperties::GetSatSpecificHeatRefrig(state, this->RefrigerantName, this->TReceiver, 0.0, this->RefIndex, RoutineName); + Fluid::GetSatSpecificHeatRefrig(state, this->RefrigerantName, this->TReceiver, 0.0, this->RefIndex, RoutineName); // Enthalpy at the receiver bypass, J/kg - Real64 HReceiverBypass = FluidProperties::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TReceiver, 1.0, this->RefIndex, RoutineName); + Real64 HReceiverBypass = Fluid::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TReceiver, 1.0, this->RefIndex, RoutineName); // Determine refrigerant properties at low temperature (LT) loads (if present) // Dispatch low pressure (LP) compressors as necessary @@ -13751,12 +13751,12 @@ void TransRefrigSystemData::CalculateTransCompressors(EnergyPlusData &state) TsatforPsucLT = this->TEvapNeededLT; TsatforPdisLT = this->TEvapNeededMT; HsatVaporforTevapneededLT = - FluidProperties::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TEvapNeededLT, 1.0, this->RefIndex, RoutineName); + Fluid::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TEvapNeededLT, 1.0, this->RefIndex, RoutineName); HsatLiqforTevapNeededMT = - FluidProperties::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TEvapNeededMT, 0.0, this->RefIndex, RoutineName); - PSuctionLT = FluidProperties::GetSatPressureRefrig(state, this->RefrigerantName, TsatforPsucLT, this->RefIndex, RoutineName); + Fluid::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TEvapNeededMT, 0.0, this->RefIndex, RoutineName); + PSuctionLT = Fluid::GetSatPressureRefrig(state, this->RefrigerantName, TsatforPsucLT, this->RefIndex, RoutineName); DensityActualLT = - FluidProperties::GetSupHeatDensityRefrig(state, this->RefrigerantName, this->TCompInLP, PSuctionLT, this->RefIndex, RoutineName); + Fluid::GetSupHeatDensityRefrig(state, this->RefrigerantName, this->TCompInLP, PSuctionLT, this->RefIndex, RoutineName); TotalEnthalpyChangeActualLT = this->HCompInLP - this->HCaseInLT; // Dispatch low pressure (LP) compressors @@ -13785,7 +13785,7 @@ void TransRefrigSystemData::CalculateTransCompressors(EnergyPlusData &state) } break; case CompRatingType::LiquidTemperature: { // have rated liquid temperature stored in "RatedSubcool" HCaseInRatedLT = - FluidProperties::GetSatEnthalpyRefrig(state, this->RefrigerantName, compressor.RatedSubcool, 0.0, this->RefIndex, RoutineName); + Fluid::GetSatEnthalpyRefrig(state, this->RefrigerantName, compressor.RatedSubcool, 0.0, this->RefIndex, RoutineName); } break; default: break; @@ -13798,7 +13798,7 @@ void TransRefrigSystemData::CalculateTransCompressors(EnergyPlusData &state) case CompRatingType::ReturnGasTemperature: { // have rated compressor inlet temperature stored in // "CompRatingType::Superheat" TempInRatedLP = compressor.RatedSuperheat; - HCompInRatedLP = FluidProperties::GetSupHeatEnthalpyRefrig( + HCompInRatedLP = Fluid::GetSupHeatEnthalpyRefrig( state, this->RefrigerantName, compressor.RatedSuperheat, PSuctionLT, this->RefIndex, RoutineName); } break; default: @@ -13807,7 +13807,7 @@ void TransRefrigSystemData::CalculateTransCompressors(EnergyPlusData &state) CaseEnthalpyChangeRatedLT = HCompInRatedLP - HCaseInRatedLT; DensityRatedLP = - FluidProperties::GetSupHeatDensityRefrig(state, this->RefrigerantName, TempInRatedLP, PSuctionLT, this->RefIndex, RoutineName); + Fluid::GetSupHeatDensityRefrig(state, this->RefrigerantName, TempInRatedLP, PSuctionLT, this->RefIndex, RoutineName); // Adjust capacity and mass flow to reflect the specific volume change due to superheating and // the increase in capacity due to extra subcooling @@ -13849,10 +13849,10 @@ void TransRefrigSystemData::CalculateTransCompressors(EnergyPlusData &state) } else { // Transcritical system is operating in subcritical region TsatforPdisMT = GasCooler(this->GasCoolerNum(1)).TGasCoolerOut; } - PSuctionMT = FluidProperties::GetSatPressureRefrig(state, this->RefrigerantName, TsatforPsucMT, this->RefIndex, RoutineName); + PSuctionMT = Fluid::GetSatPressureRefrig(state, this->RefrigerantName, TsatforPsucMT, this->RefIndex, RoutineName); PGCOutlet = GasCooler(this->GasCoolerNum(1)).PGasCoolerOut; HsatVaporforTevapneededMT = - FluidProperties::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TEvapNeededMT, 1.0, this->RefIndex, RoutineName); + Fluid::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TEvapNeededMT, 1.0, this->RefIndex, RoutineName); this->HCaseInMT = this->HSatLiqReceiver; // Enthalpy of refrigerant after leaving medium temperature loads and low pressure compressors @@ -13869,7 +13869,7 @@ void TransRefrigSystemData::CalculateTransCompressors(EnergyPlusData &state) for (Iter = 1; Iter <= 15; ++Iter) { // Maximum of 15 iterations to find receiver quality QualityReceiver = (Xu + Xl) / 2.0; Real64 Hnew = - FluidProperties::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TReceiver, QualityReceiver, this->RefIndex, RoutineName); + Fluid::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TReceiver, QualityReceiver, this->RefIndex, RoutineName); // estimated QualityReceiver is too high if (Hnew > (GasCooler(this->GasCoolerNum(1)).HGasCoolerOut + this->DelHSubcoolerDis)) { @@ -13890,11 +13890,11 @@ void TransRefrigSystemData::CalculateTransCompressors(EnergyPlusData &state) (this->RefMassFlowtoLTLoads + this->RefMassFlowtoMTLoads + this->RefMassFlowReceiverBypass); // Iterate to find the suction temperature entering subcooler - Xl = FluidProperties::GetSatTemperatureRefrig(state, this->RefrigerantName, PSuctionMT, this->RefIndex, RoutineName); + Xl = Fluid::GetSatTemperatureRefrig(state, this->RefrigerantName, PSuctionMT, this->RefIndex, RoutineName); Xu = Xl + 50.0; for (Iter = 1; Iter <= 15; ++Iter) { // Maximum of 15 iterations Xnew = (Xu + Xl) / 2.0; - Real64 Hnew = FluidProperties::GetSupHeatEnthalpyRefrig(state, this->RefrigerantName, Xnew, PSuctionMT, this->RefIndex, RoutineName); + Real64 Hnew = Fluid::GetSupHeatEnthalpyRefrig(state, this->RefrigerantName, Xnew, PSuctionMT, this->RefIndex, RoutineName); if (Hnew > this->HCompInHP) { // xnew is too high Xu = Xnew; } else { // xnew is too low @@ -13905,7 +13905,7 @@ void TransRefrigSystemData::CalculateTransCompressors(EnergyPlusData &state) TSubcoolerColdIn = Xnew; // Modify receiver inlet enthalpy and HP compressor inlet enthalpy to account for subcooler - HIdeal = FluidProperties::GetSupHeatEnthalpyRefrig( + HIdeal = Fluid::GetSupHeatEnthalpyRefrig( state, this->RefrigerantName, GasCooler(this->GasCoolerNum(1)).TGasCoolerOut, PSuctionMT, this->RefIndex, RoutineName); // Only use subcooler if suction gas inlet temperature less than gas cooler outlet temperature if (TSubcoolerColdIn < GasCooler(this->GasCoolerNum(1)).TGasCoolerOut) { @@ -13918,11 +13918,11 @@ void TransRefrigSystemData::CalculateTransCompressors(EnergyPlusData &state) this->DelHSubcoolerDis = -this->DelHSubcoolerSuc; // Iterate to find the temperature at the inlet of the high pressure (HP) compressors - Xl = FluidProperties::GetSatTemperatureRefrig(state, this->RefrigerantName, PSuctionMT, this->RefIndex, RoutineName); + Xl = Fluid::GetSatTemperatureRefrig(state, this->RefrigerantName, PSuctionMT, this->RefIndex, RoutineName); Xu = Xl + 50.0; for (Iter = 1; Iter <= 15; ++Iter) { // Maximum of 15 iterations Xnew = (Xu + Xl) / 2.0; - Real64 Hnew = FluidProperties::GetSupHeatEnthalpyRefrig(state, this->RefrigerantName, Xnew, PSuctionMT, this->RefIndex, RoutineName); + Real64 Hnew = Fluid::GetSupHeatEnthalpyRefrig(state, this->RefrigerantName, Xnew, PSuctionMT, this->RefIndex, RoutineName); if (Hnew > this->HCompInHP) { // xnew is too high Xu = Xnew; } else { // xnew is too low @@ -13936,7 +13936,7 @@ void TransRefrigSystemData::CalculateTransCompressors(EnergyPlusData &state) // to constitute the "load". The actual and rated conditions at the exit of the gas cooler and the inlet of the // HP compressors are used for capacity correction calculations. DensityActualMT = - FluidProperties::GetSupHeatDensityRefrig(state, this->RefrigerantName, this->TCompInHP, PSuctionMT, this->RefIndex, RoutineName); + Fluid::GetSupHeatDensityRefrig(state, this->RefrigerantName, this->TCompInHP, PSuctionMT, this->RefIndex, RoutineName); TotalEnthalpyChangeActualMT = this->HCompInHP - GasCooler(this->GasCoolerNum(1)).HGasCoolerOut; // Dispatch HP compressors @@ -13975,7 +13975,7 @@ void TransRefrigSystemData::CalculateTransCompressors(EnergyPlusData &state) case CompRatingType::LiquidTemperature: { // have rated liquid temperature stored in "RatedSubcool" if (!GasCooler(this->GasCoolerNum(1)).TransOpFlag) { // Subcritical operation HCaseInRatedMT = - FluidProperties::GetSatEnthalpyRefrig(state, this->RefrigerantName, compressor.RatedSubcool, 0.0, this->RefIndex, RoutineName); + Fluid::GetSatEnthalpyRefrig(state, this->RefrigerantName, compressor.RatedSubcool, 0.0, this->RefIndex, RoutineName); } else { // Transcritical operation HCaseInRatedMT = GasCooler(this->GasCoolerNum(1)).HGasCoolerOut; } // (.NOT.GasCooler(SysNum)%TransOpFlag) @@ -13990,7 +13990,7 @@ void TransRefrigSystemData::CalculateTransCompressors(EnergyPlusData &state) } break; case CompRatingType::ReturnGasTemperature: { // have rated compressor inlet temperature stored in "RatedSuperheat" TempInRatedHP = compressor.RatedSuperheat; - HCompInRatedHP = FluidProperties::GetSupHeatEnthalpyRefrig( + HCompInRatedHP = Fluid::GetSupHeatEnthalpyRefrig( state, this->RefrigerantName, compressor.RatedSuperheat, PSuctionMT, this->RefIndex, RoutineName); } break; default: @@ -13999,7 +13999,7 @@ void TransRefrigSystemData::CalculateTransCompressors(EnergyPlusData &state) CaseEnthalpyChangeRatedMT = HCompInRatedHP - HCaseInRatedMT; DensityRatedHP = - FluidProperties::GetSupHeatDensityRefrig(state, this->RefrigerantName, TempInRatedHP, PSuctionMT, this->RefIndex, RoutineName); + Fluid::GetSupHeatDensityRefrig(state, this->RefrigerantName, TempInRatedHP, PSuctionMT, this->RefIndex, RoutineName); // Adjust capacity and mass flow to reflect the specific volume change due to superheating and // the increase in capacity due to extra subcooling MassCorrectionMT = DensityActualMT / DensityRatedHP; @@ -14080,25 +14080,25 @@ void RefrigSystemData::CalculateSubcoolers(EnergyPlusData &state) // HCaseIn has to be recalculated as the starting point for the subcoolers here because // of the multiple number of iterations through this subroutine and because Tcondense is evolving. if (this->NumStages == 1) { // Single-stage compression system - this->HSatLiqCond = FluidProperties::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TCondense, 0.0, this->RefIndex, RoutineName); + this->HSatLiqCond = Fluid::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TCondense, 0.0, this->RefIndex, RoutineName); this->CpSatLiqCond = - FluidProperties::GetSatSpecificHeatRefrig(state, this->RefrigerantName, this->TCondense, 0.0, this->RefIndex, RoutineName); + Fluid::GetSatSpecificHeatRefrig(state, this->RefrigerantName, this->TCondense, 0.0, this->RefIndex, RoutineName); this->HCaseIn = this->HSatLiqCond - this->CpSatLiqCond * Condenser(this->CondenserNum(1)).RatedSubcool; // Two-stage compression with flash intercooler } else if (this->NumStages == 2 && this->IntercoolerType == 1) { - this->HSatLiqCond = FluidProperties::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TCondense, 0.0, this->RefIndex, RoutineName); + this->HSatLiqCond = Fluid::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TCondense, 0.0, this->RefIndex, RoutineName); this->CpSatLiqCond = - FluidProperties::GetSatSpecificHeatRefrig(state, this->RefrigerantName, this->TCondense, 0.0, this->RefIndex, RoutineName); - this->HCaseIn = FluidProperties::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TIntercooler, 0.0, this->RefIndex, RoutineName); + Fluid::GetSatSpecificHeatRefrig(state, this->RefrigerantName, this->TCondense, 0.0, this->RefIndex, RoutineName); + this->HCaseIn = Fluid::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TIntercooler, 0.0, this->RefIndex, RoutineName); // Two-stage compression with shell-and-coil intercooler } else if (this->NumStages == 2 && this->IntercoolerType == 2) { TLiqInActualLocal = this->TCondense - Condenser(this->CondenserNum(1)).RatedSubcool - this->IntercoolerEffectiveness * (this->TCondense - Condenser(this->CondenserNum(1)).RatedSubcool - this->TIntercooler); - this->HSatLiqCond = FluidProperties::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TCondense, 0.0, this->RefIndex, RoutineName); + this->HSatLiqCond = Fluid::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TCondense, 0.0, this->RefIndex, RoutineName); this->CpSatLiqCond = - FluidProperties::GetSatSpecificHeatRefrig(state, this->RefrigerantName, this->TCondense, 0.0, this->RefIndex, RoutineName); + Fluid::GetSatSpecificHeatRefrig(state, this->RefrigerantName, this->TCondense, 0.0, this->RefIndex, RoutineName); this->HCaseIn = this->HSatLiqCond - this->CpSatLiqCond * (this->TCondense - TLiqInActualLocal); } // NumStages and IntercoolerType diff --git a/src/EnergyPlus/ReportCoilSelection.cc b/src/EnergyPlus/ReportCoilSelection.cc index e46290b92e2..e1a237c4225 100644 --- a/src/EnergyPlus/ReportCoilSelection.cc +++ b/src/EnergyPlus/ReportCoilSelection.cc @@ -807,25 +807,25 @@ void ReportCoilSelection::doFinalProcessingOfCoilData(EnergyPlusData &state) c->plantLoopName = state.dataPlnt->PlantLoop(c->waterLoopNum).Name; if (state.dataSize->PlantSizData(c->pltSizNum).LoopType != DataSizing::TypeOfPlantLoop::Steam) { - c->rhoFluid = FluidProperties::GetDensityGlycol(state, + c->rhoFluid = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(c->waterLoopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(c->waterLoopNum).FluidIndex, "ReportCoilSelection::doFinalProcessingOfCoilData"); - c->cpFluid = FluidProperties::GetSpecificHeatGlycol(state, + c->cpFluid = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(c->waterLoopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(c->waterLoopNum).FluidIndex, "ReportCoilSelection::doFinalProcessingOfCoilData"); } else { // steam loop - c->rhoFluid = FluidProperties::GetSatDensityRefrig(state, + c->rhoFluid = Fluid::GetSatDensityRefrig(state, state.dataPlnt->PlantLoop(c->waterLoopNum).FluidName, 100.0, 1.0, state.dataPlnt->PlantLoop(c->waterLoopNum).FluidIndex, "ReportCoilSelection::doFinalProcessingOfCoilData"); - c->cpFluid = FluidProperties::GetSatSpecificHeatRefrig(state, + c->cpFluid = Fluid::GetSatSpecificHeatRefrig(state, state.dataPlnt->PlantLoop(c->waterLoopNum).FluidName, 100.0, 0.0, @@ -1080,25 +1080,25 @@ void ReportCoilSelection::setCoilWaterFlowPltSizNum(EnergyPlusData &state, if (c->waterLoopNum > 0 && c->pltSizNum > 0) { if (state.dataSize->PlantSizData(c->pltSizNum).LoopType != DataSizing::TypeOfPlantLoop::Steam) { - c->rhoFluid = FluidProperties::GetDensityGlycol(state, + c->rhoFluid = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(c->waterLoopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(c->waterLoopNum).FluidIndex, "ReportCoilSelection::setCoilWaterFlow"); - c->cpFluid = FluidProperties::GetSpecificHeatGlycol(state, + c->cpFluid = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(c->waterLoopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(c->waterLoopNum).FluidIndex, "ReportCoilSelection::setCoilWaterFlow"); } else { // steam loop - c->rhoFluid = FluidProperties::GetSatDensityRefrig(state, + c->rhoFluid = Fluid::GetSatDensityRefrig(state, state.dataPlnt->PlantLoop(c->waterLoopNum).FluidName, 100.0, 1.0, state.dataPlnt->PlantLoop(c->waterLoopNum).FluidIndex, "ReportCoilSelection::setCoilWaterFlow"); - c->cpFluid = FluidProperties::GetSatSpecificHeatRefrig(state, + c->cpFluid = Fluid::GetSatSpecificHeatRefrig(state, state.dataPlnt->PlantLoop(c->waterLoopNum).FluidName, 100.0, 0.0, diff --git a/src/EnergyPlus/RoomAirModelUserTempPattern.cc b/src/EnergyPlus/RoomAirModelUserTempPattern.cc index 6a0738ea74e..e97ff494632 100644 --- a/src/EnergyPlus/RoomAirModelUserTempPattern.cc +++ b/src/EnergyPlus/RoomAirModelUserTempPattern.cc @@ -300,7 +300,7 @@ void FigureHeightPattern(EnergyPlusData &state, int const PattrnID, int const Zo // treat profile as lookup table and interpolate // Using/Aliasing - using FluidProperties::FindArrayIndex; + using Fluid::FindArrayIndex; // SUBROUTINE LOCAL VARIABLE DECLARATIONS: diff --git a/src/EnergyPlus/SetPointManager.cc b/src/EnergyPlus/SetPointManager.cc index 80d0dfaaf40..43c383e07b0 100644 --- a/src/EnergyPlus/SetPointManager.cc +++ b/src/EnergyPlus/SetPointManager.cc @@ -3880,7 +3880,7 @@ void SPMReturnWaterTemp::calculate(EnergyPlusData &state) // fluidIndex = state.dataPlnt->PlantLoop(this->plantLoopNum).FluidIndex; // // we don't need fluid names since we have a real index, so just pass in the temperature and get properties // Real64 const avgTemp = (returnNode.Temp + supplyNode.Temp) / 2; - // Real64 const cp = FluidProperties::GetSpecificHeatGlycol(state, "", avgTemp, fluidIndex, "ReturnWaterChWSetPointManager::calculate"); + // Real64 const cp = Fluid::GetSpecificHeatGlycol(state, "", avgTemp, fluidIndex, "ReturnWaterChWSetPointManager::calculate"); // Real64 const Qdemand = mdot * cp * deltaT; // check for strange conditions diff --git a/src/EnergyPlus/SimulationManager.cc b/src/EnergyPlus/SimulationManager.cc index d3a03f22aab..2723fbc4c3d 100644 --- a/src/EnergyPlus/SimulationManager.cc +++ b/src/EnergyPlus/SimulationManager.cc @@ -2616,7 +2616,7 @@ namespace SimulationManager { // Using/Aliasing // using SQLiteProcedures::CreateSQLiteDatabase; - using FluidProperties::FindGlycol; + using Fluid::FindGlycol; state.dataGlobal->DoingInputProcessing = false; diff --git a/src/EnergyPlus/SingleDuct.cc b/src/EnergyPlus/SingleDuct.cc index d8086e08fa5..5855485f416 100644 --- a/src/EnergyPlus/SingleDuct.cc +++ b/src/EnergyPlus/SingleDuct.cc @@ -114,7 +114,6 @@ using HVAC::SmallMassFlow; using namespace DataSizing; using Psychrometrics::PsyCpAirFnW; using Psychrometrics::PsyRhoAirFnPbTdbW; -using namespace FluidProperties; using namespace ScheduleManager; using namespace SteamCoils; @@ -2565,7 +2564,7 @@ void SingleDuctAirTerminal::InitSys(EnergyPlusData &state, bool const FirstHVACI this->MassFlowDiff = 1.0e-10 * this->AirMassFlowRateMax; if (this->HWplantLoc.loopNum > 0 && this->ReheatComp_Num != HeatingCoilType::SteamAirHeating) { // protect early calls before plant is setup - rho = GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->HWplantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->HWplantLoc.loopNum).FluidIndex, @@ -2583,7 +2582,7 @@ void SingleDuctAirTerminal::InitSys(EnergyPlusData &state, bool const FirstHVACI if (this->ReheatComp_Num == HeatingCoilType::SteamAirHeating) { SteamTemp = 100.0; - SteamDensity = GetSatDensityRefrig(state, fluidNameSteam, SteamTemp, 1.0, this->FluidIndex, RoutineNameFull); + SteamDensity = Fluid::GetSatDensityRefrig(state, fluidNameSteam, SteamTemp, 1.0, this->FluidIndex, RoutineNameFull); this->MaxReheatSteamFlow = SteamDensity * this->MaxReheatSteamVolFlow; this->MinReheatSteamFlow = SteamDensity * this->MinReheatSteamVolFlow; } @@ -2785,8 +2784,8 @@ void SingleDuctAirTerminal::SizeSys(EnergyPlusData &state) // Obtains flow rates from the zone or system sizing arrays. // Using/Aliasing - using FluidProperties::GetDensityGlycol; - using FluidProperties::GetSpecificHeatGlycol; + using Fluid::GetDensityGlycol; + using Fluid::GetSpecificHeatGlycol; using General::SafeDivide; using PlantUtilities::MyPlantSizingIndex; using SteamCoils::GetCoilSteamInletNode; @@ -3638,10 +3637,10 @@ void SingleDuctAirTerminal::SizeSys(EnergyPlusData &state) (state.dataSingleDuct->ZoneDesTempSS - state.dataSingleDuct->CoilInTempSS); if (state.dataSingleDuct->DesCoilLoadSS >= SmallLoad) { TempSteamIn = 100.00; - EnthSteamInDry = GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 1.0, this->FluidIndex, RoutineNameFull); - EnthSteamOutWet = GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 0.0, this->FluidIndex, RoutineNameFull); + EnthSteamInDry = Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 1.0, this->FluidIndex, RoutineNameFull); + EnthSteamOutWet = Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 0.0, this->FluidIndex, RoutineNameFull); LatentHeatSteam = EnthSteamInDry - EnthSteamOutWet; - SteamDensity = GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, this->FluidIndex, RoutineNameFull); + SteamDensity = Fluid::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, this->FluidIndex, RoutineNameFull); Cp = GetSpecificHeatGlycol(state, fluidNameWater, diff --git a/src/EnergyPlus/SolarCollectors.cc b/src/EnergyPlus/SolarCollectors.cc index ee6437b0bb5..15efc78d5b7 100644 --- a/src/EnergyPlus/SolarCollectors.cc +++ b/src/EnergyPlus/SolarCollectors.cc @@ -937,7 +937,7 @@ namespace SolarCollectors { if (state.dataGlobal->BeginEnvrnFlag && this->Init) { // Clear node initial conditions if (this->VolFlowRateMax > 0) { - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -1115,7 +1115,7 @@ namespace SolarCollectors { Real64 massFlowRate = this->MassFlowRate; // Specific heat of collector fluid (J/kg-K) - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, inletTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -1405,14 +1405,14 @@ namespace SolarCollectors { Real64 massFlowRate = this->MassFlowRate; // Specific heat of collector fluid (J/kg-K) - Real64 Cpw = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cpw = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, inletTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); // density of collector fluid (kg/m3) - Real64 Rhow = FluidProperties::GetDensityGlycol(state, + Real64 Rhow = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, inletTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -2049,17 +2049,17 @@ namespace SolarCollectors { Real64 DeltaT = std::abs(TAbsorber - TWater); Real64 TReference = TAbsorber - 0.25 * (TAbsorber - TWater); // record fluid prop index for water - int WaterIndex = FluidProperties::FindGlycol(state, fluidNameWater); + int WaterIndex = Fluid::FindGlycol(state, fluidNameWater); // find properties of water - always assume water - Real64 WaterSpecHeat = FluidProperties::GetSpecificHeatGlycol(state, fluidNameWater, max(TReference, 0.0), WaterIndex, CalledFrom); - Real64 CondOfWater = FluidProperties::GetConductivityGlycol(state, fluidNameWater, max(TReference, 0.0), WaterIndex, CalledFrom); - Real64 VisOfWater = FluidProperties::GetViscosityGlycol(state, fluidNameWater, max(TReference, 0.0), WaterIndex, CalledFrom); - Real64 DensOfWater = FluidProperties::GetDensityGlycol(state, fluidNameWater, max(TReference, 0.0), WaterIndex, CalledFrom); + Real64 WaterSpecHeat = Fluid::GetSpecificHeatGlycol(state, fluidNameWater, max(TReference, 0.0), WaterIndex, CalledFrom); + Real64 CondOfWater = Fluid::GetConductivityGlycol(state, fluidNameWater, max(TReference, 0.0), WaterIndex, CalledFrom); + Real64 VisOfWater = Fluid::GetViscosityGlycol(state, fluidNameWater, max(TReference, 0.0), WaterIndex, CalledFrom); + Real64 DensOfWater = Fluid::GetDensityGlycol(state, fluidNameWater, max(TReference, 0.0), WaterIndex, CalledFrom); Real64 PrOfWater = VisOfWater * WaterSpecHeat / CondOfWater; // Requires a different reference temperature for volumetric expansion coefficient TReference = TWater - 0.25 * (TWater - TAbsorber); - Real64 VolExpWater = -(FluidProperties::GetDensityGlycol(state, fluidNameWater, max(TReference, 10.0) + 5.0, WaterIndex, CalledFrom) - - FluidProperties::GetDensityGlycol(state, fluidNameWater, max(TReference, 10.0) - 5.0, WaterIndex, CalledFrom)) / + Real64 VolExpWater = -(Fluid::GetDensityGlycol(state, fluidNameWater, max(TReference, 10.0) + 5.0, WaterIndex, CalledFrom) - + Fluid::GetDensityGlycol(state, fluidNameWater, max(TReference, 10.0) - 5.0, WaterIndex, CalledFrom)) / (10.0 * DensOfWater); // Grashof number @@ -2116,7 +2116,7 @@ namespace SolarCollectors { PlantUtilities::SafeCopyPlantNode(state, this->InletNode, this->OutletNode); // Set outlet node variables that are possibly changed state.dataLoopNodes->Node(this->OutletNode).Temp = this->OutletTemp; - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, this->OutletTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, diff --git a/src/EnergyPlus/StandardRatings.cc b/src/EnergyPlus/StandardRatings.cc index 846600bf9ad..eddcb2afa26 100644 --- a/src/EnergyPlus/StandardRatings.cc +++ b/src/EnergyPlus/StandardRatings.cc @@ -409,8 +409,8 @@ namespace StandardRatings { using namespace OutputReportPredefined; using Curve::CurveValue; using Curve::GetCurveName; - using FluidProperties::GetDensityGlycol; - using FluidProperties::GetSpecificHeatGlycol; + using Fluid::GetDensityGlycol; + using Fluid::GetSpecificHeatGlycol; using General::SolveRoot; Real64 constexpr Acc(0.0001); // Accuracy of result diff --git a/src/EnergyPlus/SteamBaseboardRadiator.cc b/src/EnergyPlus/SteamBaseboardRadiator.cc index 5622433861b..fbe8a7a9c94 100644 --- a/src/EnergyPlus/SteamBaseboardRadiator.cc +++ b/src/EnergyPlus/SteamBaseboardRadiator.cc @@ -267,7 +267,7 @@ namespace SteamBaseboardRadiator { // Using/Aliasing using BranchNodeConnections::TestCompSet; - using FluidProperties::FindRefrigerant; + using Fluid::FindRefrigerant; using GlobalNames::VerifyUniqueBaseboardName; using NodeInputManager::GetOnlySingleNode; @@ -909,8 +909,8 @@ namespace SteamBaseboardRadiator { // REFERENCES: // Using/Aliasing - using FluidProperties::GetSatDensityRefrig; - using FluidProperties::GetSatEnthalpyRefrig; + using Fluid::GetSatDensityRefrig; + using Fluid::GetSatEnthalpyRefrig; using PlantUtilities::InitComponentNodes; using PlantUtilities::ScanPlantLoopsForObject; @@ -1069,9 +1069,9 @@ namespace SteamBaseboardRadiator { // Using/Aliasing using namespace DataSizing; - using FluidProperties::GetSatDensityRefrig; - using FluidProperties::GetSatEnthalpyRefrig; - using FluidProperties::GetSatSpecificHeatRefrig; + using Fluid::GetSatDensityRefrig; + using Fluid::GetSatEnthalpyRefrig; + using Fluid::GetSatSpecificHeatRefrig; using HVAC::HeatingCapacitySizing; using PlantUtilities::RegisterPlantCompDesignFlow; @@ -1295,9 +1295,9 @@ namespace SteamBaseboardRadiator { // REFERENCES: // Using/Aliasing - using FluidProperties::GetSatDensityRefrig; - using FluidProperties::GetSatEnthalpyRefrig; - using FluidProperties::GetSatSpecificHeatRefrig; + using Fluid::GetSatDensityRefrig; + using Fluid::GetSatEnthalpyRefrig; + using Fluid::GetSatSpecificHeatRefrig; using HVAC::SmallLoad; using ScheduleManager::GetCurrentScheduleValue; diff --git a/src/EnergyPlus/SteamCoils.cc b/src/EnergyPlus/SteamCoils.cc index 05536925037..f028f8ac300 100644 --- a/src/EnergyPlus/SteamCoils.cc +++ b/src/EnergyPlus/SteamCoils.cc @@ -96,7 +96,6 @@ namespace SteamCoils { using namespace DataLoopNode; using namespace Psychrometrics; - using namespace FluidProperties; using PlantUtilities::MyPlantSizingIndex; using PlantUtilities::ScanPlantLoopsForObject; @@ -215,7 +214,7 @@ namespace SteamCoils { // Using/Aliasing using BranchNodeConnections::TestCompSet; - using FluidProperties::FindRefrigerant; + using Fluid::FindRefrigerant; using GlobalNames::VerifyUniqueCoilName; using NodeInputManager::GetOnlySingleNode; @@ -468,8 +467,8 @@ namespace SteamCoils { // na // Using/Aliasing - using FluidProperties::GetSatDensityRefrig; - using FluidProperties::GetSatEnthalpyRefrig; + using Fluid::GetSatDensityRefrig; + using Fluid::GetSatEnthalpyRefrig; using PlantUtilities::InitComponentNodes; // Locals @@ -664,8 +663,8 @@ namespace SteamCoils { // Using/Aliasing using namespace DataSizing; - using FluidProperties::GetSatDensityRefrig; - using FluidProperties::GetSatEnthalpyRefrig; + using Fluid::GetSatDensityRefrig; + using Fluid::GetSatEnthalpyRefrig; using PlantUtilities::RegisterPlantCompDesignFlow; // SUBROUTINE PARAMETER DEFINITIONS: @@ -828,7 +827,7 @@ namespace SteamCoils { // TempSteamIn, & // PlantLoop(SteamCoil(CoilNum)%LoopNum)%FluidIndex, & // 'SizeSteamCoil') - CpWater = GetSatSpecificHeatRefrig( + CpWater = Fluid::GetSatSpecificHeatRefrig( state, fluidNameSteam, TempSteamIn, 0.0, state.dataSteamCoils->SteamCoil(CoilNum).FluidIndex, RoutineName); state.dataSteamCoils->SteamCoil(CoilNum).MaxSteamVolFlowRate = @@ -897,7 +896,7 @@ namespace SteamCoils { // TempSteamIn, & // PlantLoop(SteamCoil(CoilNum)%LoopNum)%FluidIndex, & // 'SizeSteamCoil') - CpWater = GetSatSpecificHeatRefrig( + CpWater = Fluid::GetSatSpecificHeatRefrig( state, fluidNameSteam, TempSteamIn, 0.0, state.dataSteamCoils->SteamCoil(CoilNum).FluidIndex, RoutineName); state.dataSteamCoils->SteamCoil(CoilNum).MaxSteamVolFlowRate = @@ -1118,9 +1117,9 @@ namespace SteamCoils { // converted to water and only then the steam trap allows it to leave the heat // exchanger, subsequently heat exchange is latent heat + subcooling. EnthSteamInDry = - GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 1.0, state.dataSteamCoils->SteamCoil(CoilNum).FluidIndex, RoutineName); + Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 1.0, state.dataSteamCoils->SteamCoil(CoilNum).FluidIndex, RoutineName); EnthSteamOutWet = - GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 0.0, state.dataSteamCoils->SteamCoil(CoilNum).FluidIndex, RoutineName); + Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 0.0, state.dataSteamCoils->SteamCoil(CoilNum).FluidIndex, RoutineName); LatentHeatSteam = EnthSteamInDry - EnthSteamOutWet; @@ -1129,7 +1128,7 @@ namespace SteamCoils { // PlantLoop(SteamCoil(CoilNum)%LoopNum)%FluidIndex, & // 'CalcSteamAirCoil') - CpWater = GetSatSpecificHeatRefrig( + CpWater = Fluid::GetSatSpecificHeatRefrig( state, fluidNameSteam, TempSteamIn, 0.0, state.dataSteamCoils->SteamCoil(CoilNum).FluidIndex, RoutineNameSizeSteamCoil); // Max Heat Transfer @@ -1181,7 +1180,7 @@ namespace SteamCoils { // considering saturated state. // StdBaroPress=101325 - TempWaterAtmPress = GetSatTemperatureRefrig( + TempWaterAtmPress = Fluid::GetSatTemperatureRefrig( state, fluidNameSteam, state.dataEnvrn->StdBaroPress, state.dataSteamCoils->SteamCoil(CoilNum).FluidIndex, RoutineName); // Point 4 at atm - loop delta subcool during return journery back to pump @@ -1189,15 +1188,15 @@ namespace SteamCoils { // Actual Steam Coil Outlet Enthalpy EnthCoilOutlet = - GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 0.0, state.dataSteamCoils->SteamCoil(CoilNum).FluidIndex, RoutineName) - + Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 0.0, state.dataSteamCoils->SteamCoil(CoilNum).FluidIndex, RoutineName) - CpWater * SubcoolDeltaTemp; // Enthalpy at Point 4 - EnthAtAtmPress = GetSatEnthalpyRefrig( + EnthAtAtmPress = Fluid::GetSatEnthalpyRefrig( state, fluidNameSteam, TempWaterAtmPress, 0.0, state.dataSteamCoils->SteamCoil(CoilNum).FluidIndex, RoutineName); // Reported value of coil outlet enthalpy at the node to match the node outlet temperature - CpWater = GetSatSpecificHeatRefrig( + CpWater = Fluid::GetSatSpecificHeatRefrig( state, fluidNameSteam, TempLoopOutToPump, 0.0, state.dataSteamCoils->SteamCoil(CoilNum).FluidIndex, RoutineNameSizeSteamCoil); EnthPumpInlet = EnthAtAtmPress - CpWater * state.dataSteamCoils->SteamCoil(CoilNum).LoopSubcoolReturn; @@ -1233,16 +1232,16 @@ namespace SteamCoils { // converted to water and only then the steam trap allows it to leave the heat // exchanger, subsequently heat exchange is latent heat + subcooling. EnthSteamInDry = - GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 1.0, state.dataSteamCoils->SteamCoil(CoilNum).FluidIndex, RoutineName); + Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 1.0, state.dataSteamCoils->SteamCoil(CoilNum).FluidIndex, RoutineName); EnthSteamOutWet = - GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 0.0, state.dataSteamCoils->SteamCoil(CoilNum).FluidIndex, RoutineName); + Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 0.0, state.dataSteamCoils->SteamCoil(CoilNum).FluidIndex, RoutineName); LatentHeatSteam = EnthSteamInDry - EnthSteamOutWet; // CpWater = GetSpecificHeatGlycol('WATER', & // TempSteamIn, & // PlantLoop(SteamCoil(CoilNum)%LoopNum)%FluidIndex, & // 'CalcSteamAirCoil') - CpWater = GetSatSpecificHeatRefrig( + CpWater = Fluid::GetSatSpecificHeatRefrig( state, fluidNameSteam, TempSteamIn, 0.0, state.dataSteamCoils->SteamCoil(CoilNum).FluidIndex, RoutineNameSizeSteamCoil); // Max Heat Transfer @@ -1353,22 +1352,22 @@ namespace SteamCoils { // considering saturated state. // StdBaroPress=101325 - TempWaterAtmPress = GetSatTemperatureRefrig( + TempWaterAtmPress = Fluid::GetSatTemperatureRefrig( state, fluidNameSteam, state.dataEnvrn->StdBaroPress, state.dataSteamCoils->SteamCoil(CoilNum).FluidIndex, RoutineName); // Point 4 at atm - loop delta subcool during return journery back to pump TempLoopOutToPump = TempWaterAtmPress - state.dataSteamCoils->SteamCoil(CoilNum).LoopSubcoolReturn; // Actual Steam Coil Outlet Enthalpy - EnthCoilOutlet = GetSatEnthalpyRefrig( + EnthCoilOutlet = Fluid::GetSatEnthalpyRefrig( state, fluidNameSteam, TempSteamIn, 0.0, state.dataSteamCoils->SteamCoil(CoilNum).FluidIndex, RoutineName) - CpWater * SubcoolDeltaTemp; // Enthalpy at Point 4 - EnthAtAtmPress = GetSatEnthalpyRefrig( + EnthAtAtmPress = Fluid::GetSatEnthalpyRefrig( state, fluidNameSteam, TempWaterAtmPress, 0.0, state.dataSteamCoils->SteamCoil(CoilNum).FluidIndex, RoutineName); - CpWater = GetSatSpecificHeatRefrig( + CpWater = Fluid::GetSatSpecificHeatRefrig( state, fluidNameSteam, TempLoopOutToPump, 0.0, state.dataSteamCoils->SteamCoil(CoilNum).FluidIndex, RoutineNameSizeSteamCoil); // Reported value of coil outlet enthalpy at the node to match the node outlet temperature diff --git a/src/EnergyPlus/SurfaceGroundHeatExchanger.cc b/src/EnergyPlus/SurfaceGroundHeatExchanger.cc index 1acd036b83d..9939e1b8d57 100644 --- a/src/EnergyPlus/SurfaceGroundHeatExchanger.cc +++ b/src/EnergyPlus/SurfaceGroundHeatExchanger.cc @@ -183,8 +183,8 @@ namespace SurfaceGroundHeatExchanger { // Using/Aliasing using BranchNodeConnections::TestCompSet; - using FluidProperties::CheckFluidPropertyName; - using FluidProperties::FindGlycol; + using Fluid::CheckFluidPropertyName; + using Fluid::FindGlycol; using NodeInputManager::GetOnlySingleNode; using namespace DataLoopNode; @@ -1078,7 +1078,7 @@ namespace SurfaceGroundHeatExchanger { // Code based loosely on code from IBLAST program (research version) // Using/Aliasing - using FluidProperties::GetSpecificHeatGlycol; + using Fluid::GetSpecificHeatGlycol; // Return value Real64 CalcHXEffectTerm; @@ -1346,7 +1346,7 @@ namespace SurfaceGroundHeatExchanger { // Using/Aliasing Real64 SysTimeElapsed = state.dataHVACGlobal->SysTimeElapsed; Real64 TimeStepSys = state.dataHVACGlobal->TimeStepSys; - using FluidProperties::GetSpecificHeatGlycol; + using Fluid::GetSpecificHeatGlycol; using PlantUtilities::SafeCopyPlantNode; // SUBROUTINE PARAMETER DEFINITIONS: @@ -1434,7 +1434,7 @@ namespace SurfaceGroundHeatExchanger { void SurfaceGroundHeatExchangerData::oneTimeInit_new(EnergyPlusData &state) { - using FluidProperties::GetDensityGlycol; + using Fluid::GetDensityGlycol; using PlantUtilities::InitComponentNodes; using PlantUtilities::RegisterPlantCompDesignFlow; using PlantUtilities::ScanPlantLoopsForObject; diff --git a/src/EnergyPlus/SwimmingPool.cc b/src/EnergyPlus/SwimmingPool.cc index ca74f2ae0a9..bf4eb26a9c3 100644 --- a/src/EnergyPlus/SwimmingPool.cc +++ b/src/EnergyPlus/SwimmingPool.cc @@ -510,7 +510,7 @@ void SwimmingPoolData::initialize(EnergyPlusData &state, bool const FirstHVACIte this->WaterOutletTemp = 0.0; this->WaterMassFlowRate = 0.0; this->PeopleHeatGain = 0.0; - Real64 Density = FluidProperties::GetDensityGlycol(state, "WATER", this->PoolWaterTemp, this->GlycolIndex, RoutineName); + Real64 Density = Fluid::GetDensityGlycol(state, "WATER", this->PoolWaterTemp, this->GlycolIndex, RoutineName); this->WaterMass = state.dataSurface->Surface(this->SurfacePtr).Area * this->AvgDepth * Density; this->WaterMassFlowRateMax = this->WaterVolFlowMax * Density; this->initSwimmingPoolPlantNodeFlow(state); @@ -917,7 +917,7 @@ void SwimmingPoolData::calculate(EnergyPlusData &state) // Get an estimate of the pool water specific heat Real64 Cp = - FluidProperties::GetSpecificHeatGlycol(state, "WATER", this->PoolWaterTemp, this->GlycolIndex, RoutineName); // specific heat of pool water + Fluid::GetSpecificHeatGlycol(state, "WATER", this->PoolWaterTemp, this->GlycolIndex, RoutineName); // specific heat of pool water Real64 TH22 = state.dataHeatBalSurf->SurfInsideTempHist(2)( SurfNum); // inside surface temperature at the previous time step equals the old pool water temperature @@ -1050,12 +1050,12 @@ void SwimmingPoolData::report(EnergyPlusData &state) this->PoolWaterTemp = state.dataHeatBalSurf->SurfInsideTempHist(1)(SurfNum); // Next calculate the amount of heating done by the plant loop - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, "WATER", this->PoolWaterTemp, this->GlycolIndex, + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, "WATER", this->PoolWaterTemp, this->GlycolIndex, RoutineName); // specific heat of water this->HeatPower = this->WaterMassFlowRate * Cp * (this->WaterInletTemp - this->PoolWaterTemp); // Now the power consumption of miscellaneous equipment - Real64 Density = FluidProperties::GetDensityGlycol(state, "WATER", this->PoolWaterTemp, this->GlycolIndex, + Real64 Density = Fluid::GetDensityGlycol(state, "WATER", this->PoolWaterTemp, this->GlycolIndex, RoutineName); // density of water if (Density > MinDensity) { this->MiscEquipPower = this->MiscPowerFactor * this->WaterMassFlowRate / Density; diff --git a/src/EnergyPlus/UnitHeater.cc b/src/EnergyPlus/UnitHeater.cc index c93ef135ae0..05cee954296 100644 --- a/src/EnergyPlus/UnitHeater.cc +++ b/src/EnergyPlus/UnitHeater.cc @@ -120,7 +120,6 @@ namespace UnitHeater { using Psychrometrics::PsyCpAirFnW; using Psychrometrics::PsyHFnTdbW; using Psychrometrics::PsyRhoAirFnPbTdbW; - using namespace FluidProperties; static constexpr std::string_view fluidNameSteam("STEAM"); @@ -659,7 +658,7 @@ namespace UnitHeater { // Using/Aliasing using DataZoneEquipment::CheckZoneEquipmentList; - using FluidProperties::GetDensityGlycol; + using Fluid::GetDensityGlycol; using PlantUtilities::InitComponentNodes; using PlantUtilities::ScanPlantLoopsForObject; using PlantUtilities::SetComponentFlowRate; @@ -784,7 +783,7 @@ namespace UnitHeater { } if (state.dataUnitHeaters->UnitHeat(UnitHeatNum).Type == HCoilType::SteamCoil) { TempSteamIn = 100.00; - SteamDensity = GetSatDensityRefrig( + SteamDensity = Fluid::GetSatDensityRefrig( state, fluidNameSteam, TempSteamIn, 1.0, state.dataUnitHeaters->UnitHeat(UnitHeatNum).HCoil_FluidIndex, RoutineName); state.dataUnitHeaters->UnitHeat(UnitHeatNum).MaxHotSteamFlow = SteamDensity * state.dataUnitHeaters->UnitHeat(UnitHeatNum).MaxVolHotSteamFlow; @@ -1139,13 +1138,13 @@ namespace UnitHeater { } if (DesCoilLoad >= SmallLoad) { - rho = GetDensityGlycol( + rho = Fluid::GetDensityGlycol( state, state.dataPlnt->PlantLoop(state.dataUnitHeaters->UnitHeat(UnitHeatNum).HWplantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(state.dataUnitHeaters->UnitHeat(UnitHeatNum).HWplantLoc.loopNum).FluidIndex, RoutineName); - Cp = GetSpecificHeatGlycol( + Cp = Fluid::GetSpecificHeatGlycol( state, state.dataPlnt->PlantLoop(state.dataUnitHeaters->UnitHeat(UnitHeatNum).HWplantLoc.loopNum).FluidName, Constant::HWInitConvTemp, @@ -1270,12 +1269,12 @@ namespace UnitHeater { if (DesCoilLoad >= SmallLoad) { TempSteamIn = 100.00; EnthSteamInDry = - GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 1.0, state.dataUnitHeaters->RefrigIndex, RoutineName); + Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 1.0, state.dataUnitHeaters->RefrigIndex, RoutineName); EnthSteamOutWet = - GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 0.0, state.dataUnitHeaters->RefrigIndex, RoutineName); + Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 0.0, state.dataUnitHeaters->RefrigIndex, RoutineName); LatentHeatSteam = EnthSteamInDry - EnthSteamOutWet; SteamDensity = - GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, state.dataUnitHeaters->RefrigIndex, RoutineName); + Fluid::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, state.dataUnitHeaters->RefrigIndex, RoutineName); MaxVolHotSteamFlowDes = DesCoilLoad / (SteamDensity * (LatentHeatSteam + state.dataSize->PlantSizData(PltSizHeatNum).DeltaT * CPHW(state.dataSize->PlantSizData(PltSizHeatNum).ExitTemp))); diff --git a/src/EnergyPlus/UnitVentilator.cc b/src/EnergyPlus/UnitVentilator.cc index 6e72faa07bc..04cb120f742 100644 --- a/src/EnergyPlus/UnitVentilator.cc +++ b/src/EnergyPlus/UnitVentilator.cc @@ -1127,7 +1127,7 @@ namespace UnitVentilator { if (unitVent.HCoilType == HeatCoilType::Water) { - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(unitVent.HWplantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(unitVent.HWplantLoc.loopNum).FluidIndex, @@ -1142,7 +1142,7 @@ namespace UnitVentilator { if (unitVent.HCoilType == HeatCoilType::Steam) { Real64 TempSteamIn = 100.00; Real64 SteamDensity = - FluidProperties::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, unitVent.HCoil_FluidIndex, RoutineName); + Fluid::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, unitVent.HCoil_FluidIndex, RoutineName); unitVent.MaxHotSteamFlow = SteamDensity * unitVent.MaxVolHotSteamFlow; unitVent.MinHotSteamFlow = SteamDensity * unitVent.MinVolHotSteamFlow; @@ -1152,7 +1152,7 @@ namespace UnitVentilator { } //(UnitVent(UnitVentNum)%HCoilPresent) if (unitVent.CCoilPresent) { // Only initialize these if a cooling coil is actually present - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(unitVent.CWPlantLoc.loopNum).FluidName, 5.0, state.dataPlnt->PlantLoop(unitVent.CWPlantLoc.loopNum).FluidIndex, @@ -1881,12 +1881,12 @@ namespace UnitVentilator { sizerHeatingCapacity.initializeWithinEP(state, CompType, CompName, PrintFlag, RoutineName); DesHeatingLoad = sizerHeatingCapacity.size(state, TempSize, errorsFound); } - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(unitVent.HWplantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(unitVent.HWplantLoc.loopNum).FluidIndex, RoutineName); - Cp = FluidProperties::GetSpecificHeatGlycol(state, + Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(unitVent.HWplantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(unitVent.HWplantLoc.loopNum).FluidIndex, @@ -2012,14 +2012,14 @@ namespace UnitVentilator { DesHeatingLoad = sizerHeatingCapacity.size(state, TempSize, errorsFound); } TempSteamIn = 100.00; - EnthSteamInDry = FluidProperties::GetSatEnthalpyRefrig( + EnthSteamInDry = Fluid::GetSatEnthalpyRefrig( state, fluidNameSteam, TempSteamIn, 1.0, state.dataUnitVentilators->RefrigIndex, RoutineName); - EnthSteamOutWet = FluidProperties::GetSatEnthalpyRefrig( + EnthSteamOutWet = Fluid::GetSatEnthalpyRefrig( state, fluidNameSteam, TempSteamIn, 0.0, state.dataUnitVentilators->RefrigIndex, RoutineName); LatentHeatSteam = EnthSteamInDry - EnthSteamOutWet; - SteamDensity = FluidProperties::GetSatDensityRefrig( + SteamDensity = Fluid::GetSatDensityRefrig( state, fluidNameSteam, TempSteamIn, 1.0, state.dataUnitVentilators->RefrigIndex, RoutineName); - Cp = FluidProperties::GetSpecificHeatGlycol(state, + Cp = Fluid::GetSpecificHeatGlycol(state, fluidNameWater, state.dataSize->PlantSizData(PltSizHeatNum).ExitTemp, state.dataUnitVentilators->DummyWaterIndex, @@ -2170,12 +2170,12 @@ namespace UnitVentilator { sizerCoolingCapacity.initializeWithinEP(state, CompType, CompName, PrintFlag, RoutineName); DesCoolingLoad = sizerCoolingCapacity.size(state, TempSize, ErrorsFound); } - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(unitVent.CWPlantLoc.loopNum).FluidName, 5., state.dataPlnt->PlantLoop(unitVent.CWPlantLoc.loopNum).FluidIndex, RoutineName); - Cp = FluidProperties::GetSpecificHeatGlycol(state, + Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(unitVent.CWPlantLoc.loopNum).FluidName, 5., state.dataPlnt->PlantLoop(unitVent.CWPlantLoc.loopNum).FluidIndex, diff --git a/src/EnergyPlus/UnitarySystem.cc b/src/EnergyPlus/UnitarySystem.cc index cb772fa38b5..07967395c02 100644 --- a/src/EnergyPlus/UnitarySystem.cc +++ b/src/EnergyPlus/UnitarySystem.cc @@ -589,7 +589,7 @@ namespace UnitarySystems { state, CoolingCoilType, CoolingCoilName, state.dataUnitarySystems->initUnitarySystemsErrorsFound); if (this->MaxCoolCoilFluidFlow > 0.0) { - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CoolCoilPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CoolCoilPlantLoc.loopNum).FluidIndex, @@ -636,7 +636,7 @@ namespace UnitarySystems { state, HeatingCoilType, this->m_HeatingCoilName, state.dataUnitarySystems->initUnitarySystemsErrorsFound); if (this->MaxHeatCoilFluidFlow > 0.0) { - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->HeatCoilPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->HeatCoilPlantLoc.loopNum).FluidIndex, @@ -652,7 +652,7 @@ namespace UnitarySystems { if (this->MaxHeatCoilFluidFlow > 0.0) { int SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed Real64 TempSteamIn = 100.0; - Real64 SteamDensity = FluidProperties::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, SteamIndex, routineName); + Real64 SteamDensity = Fluid::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, SteamIndex, routineName); this->MaxHeatCoilFluidFlow *= SteamDensity; } } @@ -692,7 +692,7 @@ namespace UnitarySystems { state, "Coil:Heating:Water", this->m_SuppHeatCoilName, state.dataUnitarySystems->initUnitarySystemsErrorsFound); if (this->m_MaxSuppCoilFluidFlow > 0.0) { - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->m_SuppCoilPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->m_SuppCoilPlantLoc.loopNum).FluidIndex, @@ -725,7 +725,7 @@ namespace UnitarySystems { if (this->m_MaxSuppCoilFluidFlow > 0.0) { int SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed Real64 TempSteamIn = 100.0; - Real64 SteamDensity = FluidProperties::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, SteamIndex, routineName); + Real64 SteamDensity = Fluid::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, SteamIndex, routineName); this->m_MaxSuppCoilFluidFlow *= SteamDensity; } @@ -764,7 +764,7 @@ namespace UnitarySystems { if ((this->m_HeatRecActive) && (!this->m_MyPlantScanFlag)) { - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->m_HRPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->m_HRPlantLoc.loopNum).FluidIndex, @@ -790,7 +790,7 @@ namespace UnitarySystems { Real64 CoilMaxVolFlowRate = WaterCoils::GetCoilMaxWaterFlowRate( state, CoolingCoilType, this->m_CoolingCoilName, state.dataUnitarySystems->initUnitarySystemsErrorsFound); if (CoilMaxVolFlowRate != DataSizing::AutoSize) { - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CoolCoilPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CoolCoilPlantLoc.loopNum).FluidIndex, @@ -811,7 +811,7 @@ namespace UnitarySystems { Real64 CoilMaxVolFlowRate = WaterCoils::GetCoilMaxWaterFlowRate( state, "Coil:Heating:Water", this->m_HeatingCoilName, state.dataUnitarySystems->initUnitarySystemsErrorsFound); if (CoilMaxVolFlowRate != DataSizing::AutoSize) { - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->HeatCoilPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->HeatCoilPlantLoc.loopNum).FluidIndex, @@ -834,7 +834,7 @@ namespace UnitarySystems { int SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed Real64 TempSteamIn = 100.0; Real64 SteamDensity = - FluidProperties::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, SteamIndex, routineName); + Fluid::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, SteamIndex, routineName); this->MaxHeatCoilFluidFlow = CoilMaxVolFlowRate * SteamDensity; } } @@ -851,7 +851,7 @@ namespace UnitarySystems { Real64 CoilMaxVolFlowRate = WaterCoils::GetCoilMaxWaterFlowRate( state, "Coil:Heating:Water", this->m_SuppHeatCoilName, state.dataUnitarySystems->initUnitarySystemsErrorsFound); if (CoilMaxVolFlowRate != DataSizing::AutoSize) { - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->m_SuppCoilPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->m_SuppCoilPlantLoc.loopNum).FluidIndex, @@ -873,7 +873,7 @@ namespace UnitarySystems { int SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed Real64 TempSteamIn = 100.0; Real64 SteamDensity = - FluidProperties::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, SteamIndex, routineName); + Fluid::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, SteamIndex, routineName); this->m_MaxSuppCoilFluidFlow = CoilMaxVolFlowRate * SteamDensity; } } @@ -4359,7 +4359,7 @@ namespace UnitarySystems { int SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed Real64 TempSteamIn = 100.0; Real64 SteamDensity = - FluidProperties::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, SteamIndex, "getUnitarySystemInputData"); + Fluid::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, SteamIndex, "getUnitarySystemInputData"); this->MaxHeatCoilFluidFlow *= SteamDensity; errFlag = false; } @@ -5379,7 +5379,7 @@ namespace UnitarySystems { if (this->m_MaxSuppCoilFluidFlow > 0.0) { int SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed Real64 TempSteamIn = 100.0; - Real64 SteamDensity = FluidProperties::GetSatDensityRefrig( + Real64 SteamDensity = Fluid::GetSatDensityRefrig( state, fluidNameSteam, TempSteamIn, 1.0, SteamIndex, "getUnitarySystemInputData"); this->m_MaxSuppCoilFluidFlow = this->m_MaxSuppCoilFluidFlow * SteamDensity; } @@ -9998,7 +9998,7 @@ namespace UnitarySystems { Real64 CoilMaxVolFlowRate = WaterCoils::GetCoilMaxWaterFlowRate(state, "Coil:Heating:Water", this->m_HeatingCoilName, errorsFound); if (CoilMaxVolFlowRate != DataSizing::AutoSize) { - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->HeatCoilPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->HeatCoilPlantLoc.loopNum).FluidIndex, @@ -10019,7 +10019,7 @@ namespace UnitarySystems { int SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed Real64 TempSteamIn = 100.0; Real64 SteamDensity = - FluidProperties::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, SteamIndex, routineName); + Fluid::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, SteamIndex, routineName); this->MaxHeatCoilFluidFlow = CoilMaxVolFlowRate * SteamDensity; } } @@ -10036,7 +10036,7 @@ namespace UnitarySystems { Real64 CoilMaxVolFlowRate = WaterCoils::GetCoilMaxWaterFlowRate(state, "Coil:Heating:Water", this->m_SuppHeatCoilName, errorsFound); if (CoilMaxVolFlowRate != DataSizing::AutoSize) { - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->m_SuppCoilPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->m_SuppCoilPlantLoc.loopNum).FluidIndex, @@ -10056,7 +10056,7 @@ namespace UnitarySystems { int SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed Real64 TempSteamIn = 100.0; Real64 SteamDensity = - FluidProperties::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, SteamIndex, routineName); + Fluid::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, SteamIndex, routineName); this->m_MaxSuppCoilFluidFlow = CoilMaxVolFlowRate * SteamDensity; } } @@ -15724,7 +15724,7 @@ namespace UnitarySystems { if (HeatRecMassFlowRate > 0.0) { - Real64 CpHeatRec = FluidProperties::GetSpecificHeatGlycol(state, + Real64 CpHeatRec = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->m_HRPlantLoc.loopNum).FluidName, HeatRecInletTemp, state.dataPlnt->PlantLoop(this->m_HRPlantLoc.loopNum).FluidIndex, diff --git a/src/EnergyPlus/UserDefinedComponents.cc b/src/EnergyPlus/UserDefinedComponents.cc index edce549a41f..2d70b6c875f 100644 --- a/src/EnergyPlus/UserDefinedComponents.cc +++ b/src/EnergyPlus/UserDefinedComponents.cc @@ -2429,13 +2429,13 @@ namespace UserDefinedComponents { // fill internal variable targets this->Loop(LoopNum).MyLoad = MyLoad; - this->Loop(LoopNum).InletRho = FluidProperties::GetDensityGlycol(state, + this->Loop(LoopNum).InletRho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->Loop(LoopNum).plantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->Loop(LoopNum).InletNodeNum).Temp, state.dataPlnt->PlantLoop(this->Loop(LoopNum).plantLoc.loopNum).FluidIndex, RoutineName); this->Loop(LoopNum).InletCp = - FluidProperties::GetSpecificHeatGlycol(state, + Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->Loop(LoopNum).plantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->Loop(LoopNum).InletNodeNum).Temp, state.dataPlnt->PlantLoop(this->Loop(LoopNum).plantLoc.loopNum).FluidIndex, @@ -2498,12 +2498,12 @@ namespace UserDefinedComponents { } if (this->PlantIsConnected) { - this->Loop.InletRho = FluidProperties::GetDensityGlycol(state, + this->Loop.InletRho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->Loop.plantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->Loop.InletNodeNum).Temp, state.dataPlnt->PlantLoop(this->Loop.plantLoc.loopNum).FluidIndex, RoutineName); - this->Loop.InletCp = FluidProperties::GetSpecificHeatGlycol(state, + this->Loop.InletCp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->Loop.plantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->Loop.InletNodeNum).Temp, state.dataPlnt->PlantLoop(this->Loop.plantLoc.loopNum).FluidIndex, @@ -2581,13 +2581,13 @@ namespace UserDefinedComponents { if (this->NumPlantConnections > 0) { for (int loop = 1; loop <= this->NumPlantConnections; ++loop) { - this->Loop(loop).InletRho = FluidProperties::GetDensityGlycol(state, + this->Loop(loop).InletRho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->Loop(loop).plantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->Loop(loop).InletNodeNum).Temp, state.dataPlnt->PlantLoop(this->Loop(loop).plantLoc.loopNum).FluidIndex, RoutineName); this->Loop(loop).InletCp = - FluidProperties::GetSpecificHeatGlycol(state, + Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->Loop(loop).plantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->Loop(loop).InletNodeNum).Temp, state.dataPlnt->PlantLoop(this->Loop(loop).plantLoc.loopNum).FluidIndex, @@ -2663,13 +2663,13 @@ namespace UserDefinedComponents { if (this->NumPlantConnections > 0) { for (int loop = 1; loop <= this->NumPlantConnections; ++loop) { - this->Loop(loop).InletRho = FluidProperties::GetDensityGlycol(state, + this->Loop(loop).InletRho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->Loop(loop).plantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->Loop(loop).InletNodeNum).Temp, state.dataPlnt->PlantLoop(this->Loop(loop).plantLoc.loopNum).FluidIndex, RoutineName); this->Loop(loop).InletCp = - FluidProperties::GetSpecificHeatGlycol(state, + Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->Loop(loop).plantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->Loop(loop).InletNodeNum).Temp, state.dataPlnt->PlantLoop(this->Loop(loop).plantLoc.loopNum).FluidIndex, diff --git a/src/EnergyPlus/VariableSpeedCoils.cc b/src/EnergyPlus/VariableSpeedCoils.cc index 82a15c38b25..b35ff54ba90 100644 --- a/src/EnergyPlus/VariableSpeedCoils.cc +++ b/src/EnergyPlus/VariableSpeedCoils.cc @@ -139,7 +139,7 @@ namespace VariableSpeedCoils { // This subroutine manages variable-speed Water to Air Heat Pump component simulation. // Using/Aliasing - using FluidProperties::FindGlycol; + using Fluid::FindGlycol; using General::SolveRoot; // SUBROUTINE LOCAL VARIABLE DECLARATIONS: @@ -3880,8 +3880,8 @@ namespace VariableSpeedCoils { // Uses the status flags to trigger initializations. // Using/Aliasing - using FluidProperties::GetDensityGlycol; - using FluidProperties::GetSpecificHeatGlycol; + using Fluid::GetDensityGlycol; + using Fluid::GetSpecificHeatGlycol; using PlantUtilities::InitComponentNodes; using PlantUtilities::ScanPlantLoopsForObject; @@ -5283,12 +5283,12 @@ namespace VariableSpeedCoils { false); if (PltSizNum > 0) { - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(varSpeedCoil.plantLoc.loopNum).FluidName, state.dataSize->PlantSizData(PltSizNum).ExitTemp, state.dataPlnt->PlantLoop(varSpeedCoil.plantLoc.loopNum).FluidIndex, RoutineNameAlt); - cp = FluidProperties::GetSpecificHeatGlycol(state, + cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(varSpeedCoil.plantLoc.loopNum).FluidName, state.dataSize->PlantSizData(PltSizNum).ExitTemp, state.dataPlnt->PlantLoop(varSpeedCoil.plantLoc.loopNum).FluidIndex, @@ -5426,7 +5426,7 @@ namespace VariableSpeedCoils { if (PltSizNum > 0) { rhoW = rho; } else { - rhoW = FluidProperties::GetDensityGlycol(state, + rhoW = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(varSpeedCoil.plantLoc.loopNum).FluidName, RatedSourceTempCool, state.dataPlnt->PlantLoop(varSpeedCoil.plantLoc.loopNum).FluidIndex, @@ -5874,7 +5874,7 @@ namespace VariableSpeedCoils { // Using/Aliasing using Curve::CurveValue; Real64 TimeStepSysSec = state.dataHVACGlobal->TimeStepSysSec; - using FluidProperties::GetSpecificHeatGlycol; + using Fluid::GetSpecificHeatGlycol; using Psychrometrics::PsyCpAirFnW; using Psychrometrics::PsyHFnTdbW; using Psychrometrics::PsyRhoAirFnPbTdbW; @@ -7236,7 +7236,7 @@ namespace VariableSpeedCoils { // Using/Aliasing using Curve::CurveValue; Real64 TimeStepSysSec = state.dataHVACGlobal->TimeStepSysSec; - using FluidProperties::GetSpecificHeatGlycol; + using Fluid::GetSpecificHeatGlycol; using Psychrometrics::PsyCpAirFnW; using Psychrometrics::PsyHFnTdbW; using Psychrometrics::PsyRhoAirFnPbTdbW; @@ -7747,7 +7747,7 @@ namespace VariableSpeedCoils { // as negative. // Using/Aliasing - using FluidProperties::FindGlycol; + using Fluid::FindGlycol; // Return value Real64 CoilCapacity; // returned capacity of matched coil @@ -7809,7 +7809,7 @@ namespace VariableSpeedCoils { // as zero. // Using/Aliasing - using FluidProperties::FindGlycol; + using Fluid::FindGlycol; // Return value int IndexNum; // returned index of matched coil @@ -7992,7 +7992,7 @@ namespace VariableSpeedCoils { // as zero. // Using/Aliasing - using FluidProperties::FindGlycol; + using Fluid::FindGlycol; // Return value int NodeNumber; // returned outlet node of matched coil @@ -8040,7 +8040,7 @@ namespace VariableSpeedCoils { // as zero. // Using/Aliasing - using FluidProperties::FindGlycol; + using Fluid::FindGlycol; // Return value int NodeNumber; // returned outlet node of matched coil @@ -8217,7 +8217,7 @@ namespace VariableSpeedCoils { // this WSHP coil object. // Using/Aliasing - using FluidProperties::FindGlycol; + using Fluid::FindGlycol; // Obtains and Allocates WatertoAirHP related parameters from input file if (state.dataVariableSpeedCoils->GetCoilsInputFlag) { // First time subroutine has been entered diff --git a/src/EnergyPlus/VentilatedSlab.cc b/src/EnergyPlus/VentilatedSlab.cc index 6fccd5a9419..893dc0220f7 100644 --- a/src/EnergyPlus/VentilatedSlab.cc +++ b/src/EnergyPlus/VentilatedSlab.cc @@ -124,7 +124,6 @@ namespace VentilatedSlab { using HVAC::SmallAirVolFlow; using namespace ScheduleManager; using namespace Psychrometrics; - using namespace FluidProperties; static std::string const fluidNameSteam("STEAM"); static std::string const fluidNameWater("WATER"); @@ -235,7 +234,7 @@ namespace VentilatedSlab { using namespace DataLoopNode; using namespace DataSurfaceLists; - using FluidProperties::FindRefrigerant; + using Fluid::FindRefrigerant; using OutAirNodeManager::CheckAndAddAirNodeNumber; // SUBROUTINE PARAMETER DEFINITIONS: @@ -1493,7 +1492,7 @@ namespace VentilatedSlab { auto &ventSlab = state.dataVentilatedSlab->VentSlab(Item); using DataZoneEquipment::CheckZoneEquipmentList; - using FluidProperties::GetDensityGlycol; + using Fluid::GetDensityGlycol; using PlantUtilities::InitComponentNodes; using PlantUtilities::ScanPlantLoopsForObject; using ScheduleManager::GetCurrentScheduleValue; @@ -1682,7 +1681,7 @@ namespace VentilatedSlab { if (ventSlab.heatingCoilType == DataPlant::PlantEquipmentType::CoilSteamAirHeating && !state.dataVentilatedSlab->MyPlantScanFlag(Item)) { TempSteamIn = 100.00; - SteamDensity = GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, ventSlab.heatingCoil_FluidIndex, RoutineName); + SteamDensity = Fluid::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, ventSlab.heatingCoil_FluidIndex, RoutineName); ventSlab.MaxHotSteamFlow = SteamDensity * ventSlab.MaxVolHotSteamFlow; ventSlab.MinHotSteamFlow = SteamDensity * ventSlab.MinVolHotSteamFlow; @@ -1790,8 +1789,8 @@ namespace VentilatedSlab { // Using/Aliasing using namespace DataSizing; - using FluidProperties::GetDensityGlycol; - using FluidProperties::GetSpecificHeatGlycol; + using Fluid::GetDensityGlycol; + using Fluid::GetSpecificHeatGlycol; using HVAC::CoolingCapacitySizing; using HVAC::HeatingAirflowSizing; using HVAC::HeatingCapacitySizing; @@ -2320,12 +2319,12 @@ namespace VentilatedSlab { } TempSteamIn = 100.00; EnthSteamInDry = - GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 1.0, ventSlab.heatingCoil_FluidIndex, RoutineName); + Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 1.0, ventSlab.heatingCoil_FluidIndex, RoutineName); EnthSteamOutWet = - GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 0.0, ventSlab.heatingCoil_FluidIndex, RoutineName); + Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 0.0, ventSlab.heatingCoil_FluidIndex, RoutineName); LatentHeatSteam = EnthSteamInDry - EnthSteamOutWet; SteamDensity = - GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, ventSlab.heatingCoil_FluidIndex, RoutineName); + Fluid::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, ventSlab.heatingCoil_FluidIndex, RoutineName); Cp = GetSpecificHeatGlycol(state, fluidNameWater, Constant::HWInitConvTemp, DummyWaterIndex, RoutineName); rho = GetDensityGlycol(state, fluidNameWater, Constant::HWInitConvTemp, DummyWaterIndex, RoutineName); MaxVolHotSteamFlowDes = diff --git a/src/EnergyPlus/WaterCoils.cc b/src/EnergyPlus/WaterCoils.cc index b488f4fb3ca..4aae6b48349 100644 --- a/src/EnergyPlus/WaterCoils.cc +++ b/src/EnergyPlus/WaterCoils.cc @@ -121,8 +121,8 @@ namespace EnergyPlus::WaterCoils { using namespace DataLoopNode; -using FluidProperties::GetDensityGlycol; -using FluidProperties::GetSpecificHeatGlycol; +using Fluid::GetDensityGlycol; +using Fluid::GetSpecificHeatGlycol; using Psychrometrics::PsyCpAirFnW; using Psychrometrics::PsyHFnTdbRhPb; using Psychrometrics::PsyHFnTdbW; diff --git a/src/EnergyPlus/WaterThermalTanks.cc b/src/EnergyPlus/WaterThermalTanks.cc index 730b4f5ddad..18ca280aae4 100644 --- a/src/EnergyPlus/WaterThermalTanks.cc +++ b/src/EnergyPlus/WaterThermalTanks.cc @@ -2589,7 +2589,7 @@ bool getWaterHeaterMixedInputs(EnergyPlusData &state) Tank.OnCycLossCoeff = state.dataIPShortCut->rNumericArgs(15); Tank.OnCycLossFracToZone = state.dataIPShortCut->rNumericArgs(16); - Real64 rho = FluidProperties::GetDensityGlycol(state, fluidNameWater, Constant::InitConvTemp, Tank.FluidIndex, RoutineName); + Real64 rho = Fluid::GetDensityGlycol(state, fluidNameWater, Constant::InitConvTemp, Tank.FluidIndex, RoutineName); Tank.MassFlowRateMax = state.dataIPShortCut->rNumericArgs(17) * rho; if ((state.dataIPShortCut->cAlphaArgs(14).empty()) && (state.dataIPShortCut->cAlphaArgs(15).empty())) { @@ -2828,7 +2828,7 @@ bool getWaterHeaterStratifiedInput(EnergyPlusData &state) if (Tank.Volume == DataSizing::AutoSize) { Tank.VolumeWasAutoSized = true; } - Real64 rho = FluidProperties::GetDensityGlycol(state, fluidNameWater, Constant::InitConvTemp, Tank.FluidIndex, RoutineName); + Real64 rho = Fluid::GetDensityGlycol(state, fluidNameWater, Constant::InitConvTemp, Tank.FluidIndex, RoutineName); Tank.Mass = Tank.Volume * rho; Tank.Height = state.dataIPShortCut->rNumericArgs(2); if (Tank.Height == DataSizing::AutoSize) { @@ -3132,7 +3132,7 @@ bool getWaterHeaterStratifiedInput(EnergyPlusData &state) Tank.OffCycFlueLossFracToZone = state.dataIPShortCut->rNumericArgs(21); // this is temporary until we know fluid type - rho = FluidProperties::GetDensityGlycol(state, fluidNameWater, Constant::InitConvTemp, Tank.FluidIndex, RoutineName); + rho = Fluid::GetDensityGlycol(state, fluidNameWater, Constant::InitConvTemp, Tank.FluidIndex, RoutineName); Tank.MassFlowRateMax = state.dataIPShortCut->rNumericArgs(22) * rho; if ((state.dataIPShortCut->cAlphaArgs(16).empty()) && (state.dataIPShortCut->cAlphaArgs(17).empty())) { @@ -3766,7 +3766,7 @@ bool getWaterTankStratifiedInput(EnergyPlusData &state) if (Tank.Volume == DataSizing::AutoSize) { Tank.VolumeWasAutoSized = true; } - Real64 rho = FluidProperties::GetDensityGlycol(state, fluidNameWater, Constant::InitConvTemp, Tank.FluidIndex, RoutineName); + Real64 rho = Fluid::GetDensityGlycol(state, fluidNameWater, Constant::InitConvTemp, Tank.FluidIndex, RoutineName); Tank.Mass = Tank.Volume * rho; Tank.Height = state.dataIPShortCut->rNumericArgs(2); if (Tank.Height == DataSizing::AutoSize) { @@ -5800,13 +5800,13 @@ void WaterThermalTankData::SetupStratifiedNodes(EnergyPlusData &state) this->Node.allocate(NumNodes); Real64 rho; if ((this->UseSidePlantLoc.loopNum > 0) && allocated(state.dataPlnt->PlantLoop)) { - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidIndex, RoutineName); } else { - rho = FluidProperties::GetDensityGlycol(state, fluidNameWater, Constant::InitConvTemp, this->FluidIndex, RoutineName); + rho = Fluid::GetDensityGlycol(state, fluidNameWater, Constant::InitConvTemp, this->FluidIndex, RoutineName); } Real64 NodeMass = this->Volume * rho / NumNodes; @@ -6058,7 +6058,7 @@ void WaterThermalTankData::initialize(EnergyPlusData &state, bool const FirstHVA if (this->SetLoopIndexFlag && allocated(state.dataPlnt->PlantLoop)) { if ((this->UseInletNode > 0) && (this->HeatPumpNum == 0)) { - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidIndex, @@ -6073,7 +6073,7 @@ void WaterThermalTankData::initialize(EnergyPlusData &state, bool const FirstHVA } } if ((this->UseInletNode > 0) && (this->HeatPumpNum > 0)) { - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidIndex, @@ -6088,7 +6088,7 @@ void WaterThermalTankData::initialize(EnergyPlusData &state, bool const FirstHVA } } if ((this->SourceInletNode > 0) && (this->DesuperheaterNum == 0) && (this->HeatPumpNum == 0)) { - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->SrcSidePlantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->SrcSidePlantLoc.loopNum).FluidIndex, @@ -6153,7 +6153,7 @@ void WaterThermalTankData::initialize(EnergyPlusData &state, bool const FirstHVA // Clear node initial conditions if (this->UseInletNode > 0 && this->UseOutletNode > 0) { state.dataLoopNodes->Node(this->UseInletNode).Temp = 0.0; - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidIndex, @@ -6170,7 +6170,7 @@ void WaterThermalTankData::initialize(EnergyPlusData &state, bool const FirstHVA } if ((this->SourceInletNode > 0) && (this->DesuperheaterNum == 0) && (this->HeatPumpNum == 0)) { - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->SrcSidePlantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->SrcSidePlantLoc.loopNum).FluidIndex, @@ -6190,7 +6190,7 @@ void WaterThermalTankData::initialize(EnergyPlusData &state, bool const FirstHVA this->SourceOutletTemp = 0.0; this->SourceMassFlowRate = 0.0; this->SavedSourceOutletTemp = 0.0; - Real64 rho = FluidProperties::GetDensityGlycol(state, fluidNameWater, Constant::InitConvTemp, this->FluidIndex, SizeTankForDemand); + Real64 rho = Fluid::GetDensityGlycol(state, fluidNameWater, Constant::InitConvTemp, this->FluidIndex, SizeTankForDemand); this->PlantSourceMassFlowRateMax = this->SourceDesignVolFlowRate * rho; } @@ -6835,26 +6835,26 @@ void WaterThermalTankData::CalcWaterThermalTankMixed(EnergyPlusData &state) // W Real64 rho; if (this->UseSidePlantLoc.loopNum > 0) { - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidName, TankTemp_loc, state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidIndex, RoutineName); } else { - rho = FluidProperties::GetDensityGlycol(state, fluidNameWater, TankTemp_loc, this->waterIndex, RoutineName); + rho = Fluid::GetDensityGlycol(state, fluidNameWater, TankTemp_loc, this->waterIndex, RoutineName); } Real64 TankMass = rho * this->Volume; Real64 Cp; if (this->UseSidePlantLoc.loopNum > 0) { - Cp = FluidProperties::GetSpecificHeatGlycol(state, + Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidName, TankTemp_loc, state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidIndex, RoutineName); } else { - Cp = FluidProperties::GetSpecificHeatGlycol(state, fluidNameWater, TankTemp_loc, this->waterIndex, RoutineName); + Cp = Fluid::GetSpecificHeatGlycol(state, fluidNameWater, TankTemp_loc, this->waterIndex, RoutineName); } Real64 SecInTimeStep = state.dataHVACGlobal->TimeStepSysSec; @@ -7736,13 +7736,13 @@ void WaterThermalTankData::CalcWaterThermalTankStratified(EnergyPlusData &state) // Specific Heat of water (J/kg K) const Real64 Cp = [&] { if (this->UseSidePlantLoc.loopNum > 0) { - return FluidProperties::GetSpecificHeatGlycol(state, + return Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidName, this->TankTemp, state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidIndex, RoutineName); } else { - return FluidProperties::GetSpecificHeatGlycol(state, fluidNameWater, this->TankTemp, this->waterIndex, RoutineName); + return Fluid::GetSpecificHeatGlycol(state, fluidNameWater, this->TankTemp, this->waterIndex, RoutineName); } }(); @@ -10720,7 +10720,7 @@ void WaterThermalTankData::SizeSupplySidePlantConnections(EnergyPlusData &state, PlantUtilities::RegisterPlantCompDesignFlow(state, this->UseInletNode, tmpUseDesignVolFlowRate); } - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidIndex, @@ -10738,13 +10738,13 @@ void WaterThermalTankData::SizeSupplySidePlantConnections(EnergyPlusData &state, PlantUtilities::RegisterPlantCompDesignFlow(state, this->UseInletNode, this->UseDesignVolFlowRate); Real64 rho; if (this->UseSidePlantLoc.loopNum > 0) { - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidIndex, RoutineName); } else { - rho = FluidProperties::GetDensityGlycol(state, fluidNameWater, Constant::InitConvTemp, this->waterIndex, RoutineName); + rho = Fluid::GetDensityGlycol(state, fluidNameWater, Constant::InitConvTemp, this->waterIndex, RoutineName); } this->PlantUseMassFlowRateMax = this->UseDesignVolFlowRate * rho; @@ -10783,7 +10783,7 @@ void WaterThermalTankData::SizeSupplySidePlantConnections(EnergyPlusData &state, } else { PlantUtilities::RegisterPlantCompDesignFlow(state, this->SourceInletNode, tmpSourceDesignVolFlowRate); } - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->SrcSidePlantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->SrcSidePlantLoc.loopNum).FluidIndex, @@ -10802,13 +10802,13 @@ void WaterThermalTankData::SizeSupplySidePlantConnections(EnergyPlusData &state, PlantUtilities::RegisterPlantCompDesignFlow(state, this->SourceInletNode, this->SourceDesignVolFlowRate); Real64 rho; if (this->SrcSidePlantLoc.loopNum > 0) { - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->SrcSidePlantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->SrcSidePlantLoc.loopNum).FluidIndex, RoutineName); } else { - rho = FluidProperties::GetDensityGlycol(state, fluidNameWater, Constant::InitConvTemp, this->waterIndex, RoutineName); + rho = Fluid::GetDensityGlycol(state, fluidNameWater, Constant::InitConvTemp, this->waterIndex, RoutineName); } this->PlantSourceMassFlowRateMax = this->SourceDesignVolFlowRate * rho; } @@ -11015,19 +11015,19 @@ void WaterThermalTankData::SizeTankForDemandSide(EnergyPlusData &state) Real64 rho; Real64 Cp; if (this->UseSidePlantLoc.loopNum > 0) { - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidName, ((Tfinish + Tstart) / 2.0), state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidIndex, RoutineName); - Cp = FluidProperties::GetSpecificHeatGlycol(state, + Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidName, ((Tfinish + Tstart) / 2.0), state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidIndex, RoutineName); } else { - rho = FluidProperties::GetDensityGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); - Cp = FluidProperties::GetSpecificHeatGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); + rho = Fluid::GetDensityGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); + Cp = Fluid::GetSpecificHeatGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); } tmpMaxCapacity = SumPeopleAllZones * this->Sizing.RecoveryCapacityPerPerson * (Tfinish - Tstart) * (1.0 / Constant::SecInHour) * rho * @@ -11066,19 +11066,19 @@ void WaterThermalTankData::SizeTankForDemandSide(EnergyPlusData &state) Real64 rho; Real64 Cp; if (this->UseSidePlantLoc.loopNum > 0) { - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidName, ((Tfinish + Tstart) / 2.0), state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidIndex, RoutineName); - Cp = FluidProperties::GetSpecificHeatGlycol(state, + Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidName, ((Tfinish + Tstart) / 2.0), state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidIndex, RoutineName); } else { - rho = FluidProperties::GetDensityGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); - Cp = FluidProperties::GetSpecificHeatGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); + rho = Fluid::GetDensityGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); + Cp = Fluid::GetSpecificHeatGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); } tmpMaxCapacity = SumFloorAreaAllZones * this->Sizing.RecoveryCapacityPerArea * (Tfinish - Tstart) * (1.0 / Constant::SecInHour) * rho * Cp; // m2 | m3/hr/m2 | delta T in K | 1 hr/ 3600 s | kg/m3 | J/Kg/k @@ -11111,19 +11111,19 @@ void WaterThermalTankData::SizeTankForDemandSide(EnergyPlusData &state) Real64 rho; Real64 Cp; if (this->UseSidePlantLoc.loopNum > 0) { - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidName, ((Tfinish + Tstart) / 2.0), state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidIndex, RoutineName); - Cp = FluidProperties::GetSpecificHeatGlycol(state, + Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidName, ((Tfinish + Tstart) / 2.0), state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidIndex, RoutineName); } else { - rho = FluidProperties::GetDensityGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); - Cp = FluidProperties::GetSpecificHeatGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); + rho = Fluid::GetDensityGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); + Cp = Fluid::GetSpecificHeatGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); } tmpMaxCapacity = this->Sizing.NumberOfUnits * this->Sizing.RecoveryCapacityPerUnit * (Tfinish - Tstart) * (1.0 / Constant::SecInHour) * rho * Cp; // m3/hr/ea | delta T in K | 1 hr/ 3600 s | kg/m3 | J/Kg/k @@ -11224,19 +11224,19 @@ void WaterThermalTankData::SizeTankForSupplySide(EnergyPlusData &state) Real64 rho; Real64 Cp; if (this->SrcSidePlantLoc.loopNum > 0) { - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->SrcSidePlantLoc.loopNum).FluidName, ((Tfinish + Tstart) / 2.0), state.dataPlnt->PlantLoop(this->SrcSidePlantLoc.loopNum).FluidIndex, RoutineName); - Cp = FluidProperties::GetSpecificHeatGlycol(state, + Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->SrcSidePlantLoc.loopNum).FluidName, ((Tfinish + Tstart) / 2.0), state.dataPlnt->PlantLoop(this->SrcSidePlantLoc.loopNum).FluidIndex, RoutineName); } else { - rho = FluidProperties::GetDensityGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); - Cp = FluidProperties::GetSpecificHeatGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); + rho = Fluid::GetDensityGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); + Cp = Fluid::GetSpecificHeatGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); } tmpMaxCapacity = (this->Volume * rho * Cp * (Tfinish - Tstart)) / (this->Sizing.RecoveryTime * Constant::SecInHour); // m3 | kg/m3 | J/Kg/K | K | seconds @@ -11402,7 +11402,7 @@ void WaterThermalTankData::SizeDemandSidePlantConnections(EnergyPlusData &state) } else { PlantUtilities::RegisterPlantCompDesignFlow(state, this->UseInletNode, tmpUseDesignVolFlowRate); } - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidIndex, @@ -11422,13 +11422,13 @@ void WaterThermalTankData::SizeDemandSidePlantConnections(EnergyPlusData &state) PlantUtilities::RegisterPlantCompDesignFlow(state, this->UseInletNode, this->UseDesignVolFlowRate); Real64 rho; if (this->UseSidePlantLoc.loopNum > 0) { - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidIndex, RoutineName); } else { - rho = FluidProperties::GetDensityGlycol(state, fluidNameWater, Constant::InitConvTemp, this->waterIndex, RoutineName); + rho = Fluid::GetDensityGlycol(state, fluidNameWater, Constant::InitConvTemp, this->waterIndex, RoutineName); } this->PlantUseMassFlowRateMax = this->UseDesignVolFlowRate * rho; } // autosizing needed. @@ -11490,7 +11490,7 @@ void WaterThermalTankData::SizeDemandSidePlantConnections(EnergyPlusData &state) } else { PlantUtilities::RegisterPlantCompDesignFlow(state, this->SourceInletNode, tmpSourceDesignVolFlowRate); } - Real64 rho = FluidProperties::GetDensityGlycol(state, + Real64 rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->SrcSidePlantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->SrcSidePlantLoc.loopNum).FluidIndex, @@ -11510,13 +11510,13 @@ void WaterThermalTankData::SizeDemandSidePlantConnections(EnergyPlusData &state) PlantUtilities::RegisterPlantCompDesignFlow(state, this->SourceInletNode, this->SourceDesignVolFlowRate); Real64 rho; if (this->SrcSidePlantLoc.loopNum > 0) { - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->SrcSidePlantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->SrcSidePlantLoc.loopNum).FluidIndex, RoutineName); } else { - rho = FluidProperties::GetDensityGlycol(state, fluidNameWater, Constant::InitConvTemp, this->waterIndex, RoutineName); + rho = Fluid::GetDensityGlycol(state, fluidNameWater, Constant::InitConvTemp, this->waterIndex, RoutineName); } this->PlantSourceMassFlowRateMax = this->SourceDesignVolFlowRate * rho; } // autosizing needed. @@ -11558,7 +11558,7 @@ void WaterThermalTankData::SizeStandAloneWaterHeater(EnergyPlusData &state) case SizingMode::PeakDraw: { // get draw rate from maximum in schedule - Real64 rho = FluidProperties::GetDensityGlycol(state, fluidNameWater, Constant::InitConvTemp, this->waterIndex, RoutineName); + Real64 rho = Fluid::GetDensityGlycol(state, fluidNameWater, Constant::InitConvTemp, this->waterIndex, RoutineName); Real64 DrawDesignVolFlowRate = ScheduleManager::GetScheduleMaxValue(state, this->FlowRateSchedule) * this->MassFlowRateMax / rho; if (this->VolumeWasAutoSized) { @@ -11568,9 +11568,9 @@ void WaterThermalTankData::SizeStandAloneWaterHeater(EnergyPlusData &state) } if (this->MaxCapacityWasAutoSized) { if (this->Sizing.RecoveryTime > 0.0) { - rho = FluidProperties::GetDensityGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); + rho = Fluid::GetDensityGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); Real64 Cp = - FluidProperties::GetSpecificHeatGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); + Fluid::GetSpecificHeatGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); tmpMaxCapacity = (this->Volume * rho * Cp * (Tfinish - Tstart)) / (this->Sizing.RecoveryTime * Constant::SecInHour); // m3 | kg/m3 | J/Kg/K | K | seconds @@ -11734,8 +11734,8 @@ void WaterThermalTankData::SizeStandAloneWaterHeater(EnergyPlusData &state) tmpTankVolume = this->Sizing.TankCapacityPerPerson * SumPeopleAllZones; } if (this->MaxCapacityWasAutoSized) { - Real64 rho = FluidProperties::GetDensityGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); + Real64 rho = Fluid::GetDensityGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); tmpMaxCapacity = SumPeopleAllZones * this->Sizing.RecoveryCapacityPerPerson * (Tfinish - Tstart) * (1.0 / Constant::SecInHour) * rho * Cp; // m3/hr/person | delta T in K | 1 hr/ 3600 s | kg/m3 | J/Kg/k } @@ -11763,8 +11763,8 @@ void WaterThermalTankData::SizeStandAloneWaterHeater(EnergyPlusData &state) } if (this->MaxCapacityWasAutoSized) { - Real64 rho = FluidProperties::GetDensityGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); + Real64 rho = Fluid::GetDensityGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); tmpMaxCapacity = SumFloorAreaAllZones * this->Sizing.RecoveryCapacityPerArea * (Tfinish - Tstart) * (1.0 / Constant::SecInHour) * rho * Cp; // m2 | m3/hr/m2 | delta T in K | 1 hr/ 3600 s | kg/m3 | J/Kg/k } @@ -11783,8 +11783,8 @@ void WaterThermalTankData::SizeStandAloneWaterHeater(EnergyPlusData &state) if (this->VolumeWasAutoSized) tmpTankVolume = this->Sizing.TankCapacityPerUnit * this->Sizing.NumberOfUnits; if (this->MaxCapacityWasAutoSized) { - Real64 rho = FluidProperties::GetDensityGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); + Real64 rho = Fluid::GetDensityGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); + Real64 Cp = Fluid::GetSpecificHeatGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); tmpMaxCapacity = this->Sizing.NumberOfUnits * this->Sizing.RecoveryCapacityPerUnit * (Tfinish - Tstart) * (1.0 / Constant::SecInHour) * rho * Cp; // m3/hr/ea | delta T in K | 1 hr/ 3600 s | kg/m3 | J/Kg/k } diff --git a/src/EnergyPlus/WaterToAirHeatPump.cc b/src/EnergyPlus/WaterToAirHeatPump.cc index 30124197e5d..e070b12bdad 100644 --- a/src/EnergyPlus/WaterToAirHeatPump.cc +++ b/src/EnergyPlus/WaterToAirHeatPump.cc @@ -121,7 +121,7 @@ namespace WaterToAirHeatPump { // This subroutine manages Water to Air Heat Pump component simulation. // Using/Aliasing - using FluidProperties::FindGlycol; + using Fluid::FindGlycol; // shut off after compressor cycle off [s] // cycling fan/cycling compressor @@ -203,8 +203,8 @@ namespace WaterToAirHeatPump { // Using/Aliasing using namespace NodeInputManager; using BranchNodeConnections::TestCompSet; - using FluidProperties::CheckFluidPropertyName; - using FluidProperties::FindGlycol; + using Fluid::CheckFluidPropertyName; + using Fluid::FindGlycol; using GlobalNames::VerifyUniqueCoilName; using PlantUtilities::RegisterPlantCompDesignFlow; using namespace OutputReportPredefined; @@ -996,8 +996,8 @@ namespace WaterToAirHeatPump { // Uses the status flags to trigger initializations. // Using/Aliasing - using FluidProperties::GetDensityGlycol; - using FluidProperties::GetSpecificHeatGlycol; + using Fluid::GetDensityGlycol; + using Fluid::GetSpecificHeatGlycol; using PlantUtilities::InitComponentNodes; using PlantUtilities::ScanPlantLoopsForObject; using PlantUtilities::SetComponentFlowRate; @@ -1225,7 +1225,6 @@ namespace WaterToAirHeatPump { // Simulates a parameter estimation based water to air heat pump model // Using/Aliasing - using namespace FluidProperties; using General::SolveRoot; using Psychrometrics::PsyCpAirFnW; using Psychrometrics::PsyHFnTdbW; // ,PsyHFnTdbRhPb,PsyWFnTdpPb @@ -1332,7 +1331,7 @@ namespace WaterToAirHeatPump { SourceSideFluidIndex = state.dataPlnt->PlantLoop(heatPump.plantLoc.loopNum).FluidIndex; SourceSideVolFlowRate = heatPump.InletWaterMassFlowRate / - GetDensityGlycol(state, SourceSideFluidName, heatPump.InletWaterTemp, SourceSideFluidIndex, RoutineNameSourceSideInletTemp); + Fluid::GetDensityGlycol(state, SourceSideFluidName, heatPump.InletWaterTemp, SourceSideFluidIndex, RoutineNameSourceSideInletTemp); StillSimulatingFlag = true; @@ -1438,7 +1437,7 @@ namespace WaterToAirHeatPump { } // Determine Effectiveness of Source Side - CpFluid = GetSpecificHeatGlycol( + CpFluid = Fluid::GetSpecificHeatGlycol( state, SourceSideFluidName, heatPump.InletWaterTemp, SourceSideFluidIndex, RoutineNameSourceSideInletTemp); // IF (SourceSideFluidName=='WATER') THEN @@ -1495,9 +1494,9 @@ namespace WaterToAirHeatPump { LoadSideTemp = EvapTemp; // Determine the Load Side and Source Side Saturated Temp (evaporating and condensing pressures) - SourceSidePressure = GetSatPressureRefrig( + SourceSidePressure = Fluid::GetSatPressureRefrig( state, heatPump.Refrigerant, SourceSideTemp, state.dataWaterToAirHeatPump->RefrigIndex, RoutineNameSourceSideTemp); - LoadSidePressure = GetSatPressureRefrig( + LoadSidePressure = Fluid::GetSatPressureRefrig( state, heatPump.Refrigerant, LoadSideTemp, state.dataWaterToAirHeatPump->RefrigIndex, RoutineNameLoadSideTemp); if (LoadSidePressure < heatPump.LowPressCutoff && !FirstHVACIteration) { @@ -1547,18 +1546,18 @@ namespace WaterToAirHeatPump { // Determine the Load Side Outlet Enthalpy (Saturated Gas) Quality = 1.0; - LoadSideOutletEnth = GetSatEnthalpyRefrig( + LoadSideOutletEnth = Fluid::GetSatEnthalpyRefrig( state, heatPump.Refrigerant, LoadSideTemp, Quality, state.dataWaterToAirHeatPump->RefrigIndex, RoutineNameLoadSideTemp); // Determine Source Side Outlet Enthalpy (Saturated Liquid) Quality = 0.0; - SourceSideOutletEnth = GetSatEnthalpyRefrig( + SourceSideOutletEnth = Fluid::GetSatEnthalpyRefrig( state, heatPump.Refrigerant, SourceSideTemp, Quality, state.dataWaterToAirHeatPump->RefrigIndex, RoutineNameSourceSideTemp); // Determine Superheated Temperature of the Load Side outlet/compressor Inlet CompressInletTemp = LoadSideTemp + heatPump.SuperheatTemp; // Determine the Enthalpy of the Superheated Fluid at Load Side Outlet/Compressor Inlet - SuperHeatEnth = GetSupHeatEnthalpyRefrig(state, + SuperHeatEnth = Fluid::GetSupHeatEnthalpyRefrig(state, heatPump.Refrigerant, CompressInletTemp, LoadSidePressure, @@ -1570,7 +1569,7 @@ namespace WaterToAirHeatPump { // Determine the saturated temp at suction pressure, shoot out into the superheated region find the enthalpy // check that with the inlet enthalpy ( as suction loss is isenthalpic). Iterate till desired accuracy is reached if (!Converged) { - CompSuctionSatTemp = GetSatTemperatureRefrig( + CompSuctionSatTemp = Fluid::GetSatTemperatureRefrig( state, heatPump.Refrigerant, SuctionPr, state.dataWaterToAirHeatPump->RefrigIndex, RoutineNameSuctionPr); CompSuctionTemp1 = CompSuctionSatTemp; @@ -1582,7 +1581,7 @@ namespace WaterToAirHeatPump { static constexpr std::string_view RoutineName("CalcWaterToAirHPHeating:CalcCompSuctionTemp"); std::string Refrigerant; // Name of refrigerant int refrigIndex = state.dataWaterToAirHeatPump->RefrigIndex; - Real64 compSuctionEnth = GetSupHeatEnthalpyRefrig(state, Refrigerant, CompSuctionTemp, SuctionPr, refrigIndex, RoutineName); + Real64 compSuctionEnth = Fluid::GetSupHeatEnthalpyRefrig(state, Refrigerant, CompSuctionTemp, SuctionPr, refrigIndex, RoutineName); return (compSuctionEnth - SuperHeatEnth) / SuperHeatEnth; }; @@ -1592,13 +1591,13 @@ namespace WaterToAirHeatPump { heatPump.SimFlag = false; return; } - CompSuctionEnth = GetSupHeatEnthalpyRefrig(state, + CompSuctionEnth = Fluid::GetSupHeatEnthalpyRefrig(state, heatPump.Refrigerant, state.dataWaterToAirHeatPump->CompSuctionTemp, SuctionPr, state.dataWaterToAirHeatPump->RefrigIndex, RoutineNameCompSuctionTemp); - CompSuctionDensity = GetSupHeatDensityRefrig(state, + CompSuctionDensity = Fluid::GetSupHeatDensityRefrig(state, heatPump.Refrigerant, state.dataWaterToAirHeatPump->CompSuctionTemp, SuctionPr, @@ -1759,7 +1758,6 @@ namespace WaterToAirHeatPump { // Simulates a parameter estimation based water to air heat pump model // Using/Aliasing - using namespace FluidProperties; using General::SolveRoot; using Psychrometrics::PsyCpAirFnW; // ,PsyHFnTdbRhPb,PsyWFnTdpPb using Psychrometrics::PsyTdbFnHW; @@ -1848,7 +1846,7 @@ namespace WaterToAirHeatPump { SourceSideFluidIndex = state.dataPlnt->PlantLoop(heatPump.plantLoc.loopNum).FluidIndex; SourceSideVolFlowRate = heatPump.InletWaterMassFlowRate / - GetDensityGlycol(state, SourceSideFluidName, heatPump.InletWaterTemp, SourceSideFluidIndex, RoutineNameSourceSideInletTemp); + Fluid::GetDensityGlycol(state, SourceSideFluidName, heatPump.InletWaterTemp, SourceSideFluidIndex, RoutineNameSourceSideInletTemp); // If heat pump is not operating, return if (SensDemand == 0.0 || heatPump.InletAirMassFlowRate <= 0.0 || heatPump.InletWaterMassFlowRate <= 0.0) { @@ -1908,7 +1906,7 @@ namespace WaterToAirHeatPump { // Determine Effectiveness of Source Side CpFluid = - GetSpecificHeatGlycol(state, SourceSideFluidName, heatPump.InletWaterTemp, SourceSideFluidIndex, RoutineNameSourceSideInletTemp); + Fluid::GetSpecificHeatGlycol(state, SourceSideFluidName, heatPump.InletWaterTemp, SourceSideFluidIndex, RoutineNameSourceSideInletTemp); // IF (SourceSideFluidName=='WATER') THEN if (SourceSideFluidIndex == state.dataWaterToAirHeatPump->WaterIndex) { @@ -1928,9 +1926,9 @@ namespace WaterToAirHeatPump { LoadSideTemp = heatPump.InletAirDBTemp + state.dataWaterToAirHeatPump->initialQLoad * LoadSideEffect_CpAir_MassFlowRate_inv; // Determine the Load Side and Source Side Saturated Temp (evaporating and condensing pressures) - SourceSidePressure = GetSatPressureRefrig( + SourceSidePressure = Fluid::GetSatPressureRefrig( state, heatPump.Refrigerant, SourceSideTemp, state.dataWaterToAirHeatPump->RefrigIndex, RoutineNameSourceSideTemp); - LoadSidePressure = GetSatPressureRefrig( + LoadSidePressure = Fluid::GetSatPressureRefrig( state, heatPump.Refrigerant, LoadSideTemp, state.dataWaterToAirHeatPump->RefrigIndex, RoutineNameLoadSideTemp); if (SourceSidePressure < heatPump.LowPressCutoff && !FirstHVACIteration) { if (!state.dataGlobal->WarmupFlag) { @@ -1993,20 +1991,20 @@ namespace WaterToAirHeatPump { // Determine the Source Side Outlet Enthalpy // Quality of the refrigerant leaving the evaporator is saturated gas Quality = 1.0; - SourceSideOutletEnth = GetSatEnthalpyRefrig( + SourceSideOutletEnth = Fluid::GetSatEnthalpyRefrig( state, heatPump.Refrigerant, SourceSideTemp, Quality, state.dataWaterToAirHeatPump->RefrigIndex, RoutineNameSourceSideTemp); // Determine Load Side Outlet Enthalpy // Quality of the refrigerant leaving the condenser is saturated liguid Quality = 0.0; - LoadSideOutletEnth = GetSatEnthalpyRefrig( + LoadSideOutletEnth = Fluid::GetSatEnthalpyRefrig( state, heatPump.Refrigerant, LoadSideTemp, Quality, state.dataWaterToAirHeatPump->RefrigIndex, RoutineNameLoadSideTemp); // Determine Superheated Temperature of the Source Side outlet/compressor Inlet CompressInletTemp = SourceSideTemp + heatPump.SuperheatTemp; // Determine the Enathalpy of the Superheated Fluid at Source Side Outlet/Compressor Inlet - SuperHeatEnth = GetSupHeatEnthalpyRefrig(state, + SuperHeatEnth = Fluid::GetSupHeatEnthalpyRefrig(state, heatPump.Refrigerant, CompressInletTemp, SourceSidePressure, @@ -2019,7 +2017,7 @@ namespace WaterToAirHeatPump { // check that with the inlet enthalpy ( as suction loss is isenthalpic). Iterate till desired accuracy is reached if (!Converged) { - CompSuctionSatTemp = GetSatTemperatureRefrig( + CompSuctionSatTemp = Fluid::GetSatTemperatureRefrig( state, heatPump.Refrigerant, SuctionPr, state.dataWaterToAirHeatPump->RefrigIndex, RoutineNameSuctionPr); CompSuctionTemp1 = CompSuctionSatTemp; @@ -2054,7 +2052,7 @@ namespace WaterToAirHeatPump { static constexpr std::string_view RoutineName("CalcWaterToAirHPHeating:CalcCompSuctionTemp"); std::string Refrigerant; // Name of refrigerant int refrigIndex = state.dataWaterToAirHeatPump->RefrigIndex; - Real64 compSuctionEnth = GetSupHeatEnthalpyRefrig(state, Refrigerant, CompSuctionTemp, SuctionPr, refrigIndex, RoutineName); + Real64 compSuctionEnth = Fluid::GetSupHeatEnthalpyRefrig(state, Refrigerant, CompSuctionTemp, SuctionPr, refrigIndex, RoutineName); return (compSuctionEnth - SuperHeatEnth) / SuperHeatEnth; }; @@ -2063,9 +2061,9 @@ namespace WaterToAirHeatPump { heatPump.SimFlag = false; return; } - CompSuctionEnth = GetSupHeatEnthalpyRefrig( + CompSuctionEnth = Fluid::GetSupHeatEnthalpyRefrig( state, heatPump.Refrigerant, CompSuctionTemp, SuctionPr, state.dataWaterToAirHeatPump->RefrigIndex, RoutineNameCompSuctionTemp); - CompSuctionDensity = GetSupHeatDensityRefrig( + CompSuctionDensity = Fluid::GetSupHeatDensityRefrig( state, heatPump.Refrigerant, CompSuctionTemp, SuctionPr, state.dataWaterToAirHeatPump->RefrigIndex, RoutineNameCompSuctionTemp); // Find Refrigerant Flow Rate @@ -2427,9 +2425,6 @@ namespace WaterToAirHeatPump { // Jin, H. 2002. Parameter Estimation Based Models of Water Source Heat Pumps. Phd Thesis. // Oklahoma State University. - // Using/Aliasing - using namespace FluidProperties; - // Return value Real64 DegradF; @@ -2447,14 +2442,14 @@ namespace WaterToAirHeatPump { Real64 CpCoolant; // Specific heat of water [J/kg-K] Real64 CondCoolant; // Conductivity of water [W/m-K] - VisWater = GetViscosityGlycol(state, fluidNameWater, Temp, state.dataWaterToAirHeatPump->WaterIndex, CalledFrom); - DensityWater = GetDensityGlycol(state, fluidNameWater, Temp, state.dataWaterToAirHeatPump->WaterIndex, CalledFrom); - CpWater = GetSpecificHeatGlycol(state, fluidNameWater, Temp, state.dataWaterToAirHeatPump->WaterIndex, CalledFrom); - CondWater = GetConductivityGlycol(state, fluidNameWater, Temp, state.dataWaterToAirHeatPump->WaterIndex, CalledFrom); - VisCoolant = GetViscosityGlycol(state, FluidName, Temp, FluidIndex, CalledFrom); - DensityCoolant = GetDensityGlycol(state, FluidName, Temp, FluidIndex, CalledFrom); - CpCoolant = GetSpecificHeatGlycol(state, FluidName, Temp, FluidIndex, CalledFrom); - CondCoolant = GetConductivityGlycol(state, FluidName, Temp, FluidIndex, CalledFrom); + VisWater = Fluid::GetViscosityGlycol(state, fluidNameWater, Temp, state.dataWaterToAirHeatPump->WaterIndex, CalledFrom); + DensityWater = Fluid::GetDensityGlycol(state, fluidNameWater, Temp, state.dataWaterToAirHeatPump->WaterIndex, CalledFrom); + CpWater = Fluid::GetSpecificHeatGlycol(state, fluidNameWater, Temp, state.dataWaterToAirHeatPump->WaterIndex, CalledFrom); + CondWater = Fluid::GetConductivityGlycol(state, fluidNameWater, Temp, state.dataWaterToAirHeatPump->WaterIndex, CalledFrom); + VisCoolant = Fluid::GetViscosityGlycol(state, FluidName, Temp, FluidIndex, CalledFrom); + DensityCoolant = Fluid::GetDensityGlycol(state, FluidName, Temp, FluidIndex, CalledFrom); + CpCoolant = Fluid::GetSpecificHeatGlycol(state, FluidName, Temp, FluidIndex, CalledFrom); + CondCoolant = Fluid::GetConductivityGlycol(state, FluidName, Temp, FluidIndex, CalledFrom); DegradF = std::pow(VisCoolant / VisWater, -0.47) * std::pow(DensityCoolant / DensityWater, 0.8) * std::pow(CpCoolant / CpWater, 0.33) * std::pow(CondCoolant / CondWater, 0.67); @@ -2481,7 +2476,7 @@ namespace WaterToAirHeatPump { // as zero. // Using/Aliasing - using FluidProperties::FindGlycol; + using Fluid::FindGlycol; // Return value int IndexNum; // returned index of matched coil @@ -2522,7 +2517,7 @@ namespace WaterToAirHeatPump { // as negative. // Using/Aliasing - using FluidProperties::FindGlycol; + using Fluid::FindGlycol; // Return value Real64 CoilCapacity; // returned capacity of matched coil @@ -2579,7 +2574,7 @@ namespace WaterToAirHeatPump { // as zero. // Using/Aliasing - using FluidProperties::FindGlycol; + using Fluid::FindGlycol; // Return value int NodeNumber; // returned outlet node of matched coil @@ -2627,7 +2622,7 @@ namespace WaterToAirHeatPump { // as zero. // Using/Aliasing - using FluidProperties::FindGlycol; + using Fluid::FindGlycol; // Return value int NodeNumber; // returned outlet node of matched coil diff --git a/src/EnergyPlus/WaterToAirHeatPumpSimple.cc b/src/EnergyPlus/WaterToAirHeatPumpSimple.cc index 4da0dc01b80..3d3a091e9ff 100644 --- a/src/EnergyPlus/WaterToAirHeatPumpSimple.cc +++ b/src/EnergyPlus/WaterToAirHeatPumpSimple.cc @@ -1126,7 +1126,7 @@ namespace WaterToAirHeatPumpSimple { simpleWatertoAirHP.PartLoadRatio = 0.0; if (simpleWatertoAirHP.RatedWaterVolFlowRate != DataSizing::AutoSize) { - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(simpleWatertoAirHP.plantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(simpleWatertoAirHP.plantLoc.loopNum).FluidIndex, @@ -2865,12 +2865,12 @@ namespace WaterToAirHeatPumpSimple { false); if (PltSizNum > 0) { - rho = FluidProperties::GetDensityGlycol(state, + rho = Fluid::GetDensityGlycol(state, state.dataPlnt->PlantLoop(simpleWatertoAirHP.plantLoc.loopNum).FluidName, state.dataSize->PlantSizData(PltSizNum).ExitTemp, state.dataPlnt->PlantLoop(simpleWatertoAirHP.plantLoc.loopNum).FluidIndex, RoutineNameAlt); - Cp = FluidProperties::GetSpecificHeatGlycol(state, + Cp = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(simpleWatertoAirHP.plantLoc.loopNum).FluidName, state.dataSize->PlantSizData(PltSizNum).ExitTemp, state.dataPlnt->PlantLoop(simpleWatertoAirHP.plantLoc.loopNum).FluidIndex, @@ -3097,7 +3097,7 @@ namespace WaterToAirHeatPumpSimple { state.dataWaterToAirHeatPumpSimple->SourceSideMassFlowRate = simpleWatertoAirHP.WaterMassFlowRate; state.dataWaterToAirHeatPumpSimple->SourceSideInletTemp = simpleWatertoAirHP.InletWaterTemp; state.dataWaterToAirHeatPumpSimple->SourceSideInletEnth = simpleWatertoAirHP.InletWaterEnthalpy; - CpWater = FluidProperties::GetSpecificHeatGlycol(state, + CpWater = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(simpleWatertoAirHP.plantLoc.loopNum).FluidName, state.dataWaterToAirHeatPumpSimple->SourceSideInletTemp, state.dataPlnt->PlantLoop(simpleWatertoAirHP.plantLoc.loopNum).FluidIndex, @@ -3399,7 +3399,7 @@ namespace WaterToAirHeatPumpSimple { state.dataWaterToAirHeatPumpSimple->SourceSideMassFlowRate = simpleWatertoAirHP.WaterMassFlowRate; state.dataWaterToAirHeatPumpSimple->SourceSideInletTemp = simpleWatertoAirHP.InletWaterTemp; state.dataWaterToAirHeatPumpSimple->SourceSideInletEnth = simpleWatertoAirHP.InletWaterEnthalpy; - CpWater = FluidProperties::GetSpecificHeatGlycol(state, + CpWater = Fluid::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(simpleWatertoAirHP.plantLoc.loopNum).FluidName, state.dataWaterToAirHeatPumpSimple->SourceSideInletTemp, state.dataPlnt->PlantLoop(simpleWatertoAirHP.plantLoc.loopNum).FluidIndex, diff --git a/src/EnergyPlus/WaterUse.cc b/src/EnergyPlus/WaterUse.cc index 9d3a86681f6..46d87616c28 100644 --- a/src/EnergyPlus/WaterUse.cc +++ b/src/EnergyPlus/WaterUse.cc @@ -1702,7 +1702,7 @@ namespace WaterUse { if (state.dataWaterUse->calcRhoH2O) { int DummyValue = 1; - state.dataWaterUse->rhoH2OStd = FluidProperties::GetDensityGlycol(state, "WATER", Constant::InitConvTemp, DummyValue, RoutineName); + state.dataWaterUse->rhoH2OStd = Fluid::GetDensityGlycol(state, "WATER", Constant::InitConvTemp, DummyValue, RoutineName); state.dataWaterUse->calcRhoH2O = false; } return state.dataWaterUse->rhoH2OStd; diff --git a/src/EnergyPlus/api/EnergyPlusPgm.cc b/src/EnergyPlus/api/EnergyPlusPgm.cc index a86e8c1a94e..6fc0c2ef5d2 100644 --- a/src/EnergyPlus/api/EnergyPlusPgm.cc +++ b/src/EnergyPlus/api/EnergyPlusPgm.cc @@ -360,7 +360,7 @@ int wrapUpEnergyPlus(EnergyPlus::EnergyPlusData &state) Psychrometrics::ShowPsychrometricSummary(state, state.files.audit); state.dataInputProcessing->inputProcessor->reportOrphanRecordObjects(state); - FluidProperties::ReportOrphanFluids(state); + Fluid::ReportOrphanFluids(state); ScheduleManager::ReportOrphanSchedules(state); if (state.dataSQLiteProcedures->sqlite) { state.dataSQLiteProcedures->sqlite.reset(); diff --git a/src/EnergyPlus/api/func.cc b/src/EnergyPlus/api/func.cc index c17d244fb16..4136e0675e8 100644 --- a/src/EnergyPlus/api/func.cc +++ b/src/EnergyPlus/api/func.cc @@ -62,7 +62,7 @@ void initializeFunctionalAPI(EnergyPlusState state) thisState->dataInputProcessing->inputProcessor = EnergyPlus::InputProcessor::factory(); } EnergyPlus::Psychrometrics::InitializePsychRoutines(*thisState); - EnergyPlus::FluidProperties::InitializeGlycRoutines(); + EnergyPlus::Fluid::InitializeGlycRoutines(); } const char *apiVersionFromEPlus(EnergyPlusState) @@ -89,68 +89,68 @@ void registerErrorCallback(EnergyPlusState state, void (*f)(int, const char *)) Glycol glycolNew(EnergyPlusState state, const char *glycolName) { auto *thisState = reinterpret_cast(state); - auto *glycol = new EnergyPlus::FluidProperties::GlycolAPI(*thisState, glycolName); + auto *glycol = new EnergyPlus::Fluid::GlycolAPI(*thisState, glycolName); return reinterpret_cast(glycol); } void glycolDelete(EnergyPlusState, Glycol glycol) { - delete reinterpret_cast(glycol); + delete reinterpret_cast(glycol); } Real64 glycolSpecificHeat(EnergyPlusState state, Glycol glycol, Real64 temperature) { auto *thisState = reinterpret_cast(state); - return reinterpret_cast(glycol)->specificHeat(*thisState, temperature); + return reinterpret_cast(glycol)->specificHeat(*thisState, temperature); } Real64 glycolDensity(EnergyPlusState state, Glycol glycol, Real64 temperature) { auto *thisState = reinterpret_cast(state); - return reinterpret_cast(glycol)->density(*thisState, temperature); + return reinterpret_cast(glycol)->density(*thisState, temperature); } Real64 glycolConductivity(EnergyPlusState state, Glycol glycol, Real64 temperature) { auto *thisState = reinterpret_cast(state); - return reinterpret_cast(glycol)->conductivity(*thisState, temperature); + return reinterpret_cast(glycol)->conductivity(*thisState, temperature); } Real64 glycolViscosity(EnergyPlusState state, Glycol glycol, Real64 temperature) { auto *thisState = reinterpret_cast(state); - return reinterpret_cast(glycol)->viscosity(*thisState, temperature); + return reinterpret_cast(glycol)->viscosity(*thisState, temperature); } Refrigerant refrigerantNew(EnergyPlusState state, const char *refrigerantName) { auto *thisState = reinterpret_cast(state); - auto *refrigerant = new EnergyPlus::FluidProperties::RefrigerantAPI(*thisState, refrigerantName); + auto *refrigerant = new EnergyPlus::Fluid::RefrigerantAPI(*thisState, refrigerantName); return reinterpret_cast(refrigerant); } void refrigerantDelete(EnergyPlusState, Refrigerant refrigerant) { - delete reinterpret_cast(refrigerant); + delete reinterpret_cast(refrigerant); } Real64 refrigerantSaturationPressure(EnergyPlusState state, Refrigerant refrigerant, Real64 temperature) { auto *thisState = reinterpret_cast(state); - return reinterpret_cast(refrigerant)->saturationPressure(*thisState, temperature); + return reinterpret_cast(refrigerant)->saturationPressure(*thisState, temperature); } Real64 refrigerantSaturationTemperature(EnergyPlusState state, Refrigerant refrigerant, Real64 pressure) { auto *thisState = reinterpret_cast(state); - return reinterpret_cast(refrigerant)->saturationTemperature(*thisState, pressure); + return reinterpret_cast(refrigerant)->saturationTemperature(*thisState, pressure); } Real64 refrigerantSaturatedEnthalpy(EnergyPlusState state, Refrigerant refrigerant, Real64 temperature, Real64 quality) { auto *thisState = reinterpret_cast(state); - return reinterpret_cast(refrigerant)->saturatedEnthalpy(*thisState, temperature, quality); + return reinterpret_cast(refrigerant)->saturatedEnthalpy(*thisState, temperature, quality); } Real64 refrigerantSaturatedDensity(EnergyPlusState state, Refrigerant refrigerant, Real64 temperature, Real64 quality) { auto *thisState = reinterpret_cast(state); - return reinterpret_cast(refrigerant)->saturatedDensity(*thisState, temperature, quality); + return reinterpret_cast(refrigerant)->saturatedDensity(*thisState, temperature, quality); } Real64 refrigerantSaturatedSpecificHeat(EnergyPlusState state, Refrigerant refrigerant, Real64 temperature, Real64 quality) { auto *thisState = reinterpret_cast(state); - return reinterpret_cast(refrigerant)->saturatedSpecificHeat(*thisState, temperature, quality); + return reinterpret_cast(refrigerant)->saturatedSpecificHeat(*thisState, temperature, quality); } // Real64 refrigerantSuperHeatedEnthalpy(EnergyPlusState, Refrigerant refrigerant, Real64 temperature, Real64 pressure) { // return reinterpret_cast(refrigerant)->superHeatedEnthalpy(temperature, pressure); diff --git a/tst/EnergyPlus/unit/BoilerHotWater.unit.cc b/tst/EnergyPlus/unit/BoilerHotWater.unit.cc index 19baffc169c..f7ae5b15711 100644 --- a/tst/EnergyPlus/unit/BoilerHotWater.unit.cc +++ b/tst/EnergyPlus/unit/BoilerHotWater.unit.cc @@ -137,12 +137,12 @@ TEST_F(EnergyPlusFixture, Boiler_HotWaterAutoSizeTempTest) state->dataPlnt->PlantFirstSizesOkayToFinalize = true; // calculate nominal capacity at 60.0 C hot water temperature - Real64 rho = FluidProperties::GetDensityGlycol(*state, + Real64 rho = Fluid::GetDensityGlycol(*state, state->dataPlnt->PlantLoop(state->dataBoilers->Boiler(1).plantLoc.loopNum).FluidName, 60.0, state->dataPlnt->PlantLoop(state->dataBoilers->Boiler(1).plantLoc.loopNum).FluidIndex, "Boiler_HotWaterAutoSizeTempTest"); - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(*state, + Real64 Cp = Fluid::GetSpecificHeatGlycol(*state, state->dataPlnt->PlantLoop(state->dataBoilers->Boiler(1).plantLoc.loopNum).FluidName, 60.0, state->dataPlnt->PlantLoop(state->dataBoilers->Boiler(1).plantLoc.loopNum).FluidIndex, diff --git a/tst/EnergyPlus/unit/ChillerAbsorption.unit.cc b/tst/EnergyPlus/unit/ChillerAbsorption.unit.cc index 7bd0003246a..e32037d8699 100644 --- a/tst/EnergyPlus/unit/ChillerAbsorption.unit.cc +++ b/tst/EnergyPlus/unit/ChillerAbsorption.unit.cc @@ -2022,13 +2022,13 @@ TEST_F(EnergyPlusFixture, ChillerAbsorption_Autosize) state->dataPlnt->PlantFinalSizesOkayToReport = true; // Calculate expected values - Real64 rho_cw = FluidProperties::GetDensityGlycol(*state, + Real64 rho_cw = Fluid::GetDensityGlycol(*state, state->dataPlnt->PlantLoop(chwLoopNum).FluidName, Constant::CWInitConvTemp, state->dataPlnt->PlantLoop(chwLoopNum).FluidIndex, "ChillerAbsorption_Autosize_TEST"); - Real64 Cp_evap = FluidProperties::GetSpecificHeatGlycol(*state, + Real64 Cp_evap = Fluid::GetSpecificHeatGlycol(*state, state->dataPlnt->PlantLoop(chwLoopNum).FluidName, Constant::CWInitConvTemp, state->dataPlnt->PlantLoop(chwLoopNum).FluidIndex, @@ -2042,13 +2042,13 @@ TEST_F(EnergyPlusFixture, ChillerAbsorption_Autosize) Real64 const SteamInputRatNom = thisChiller.SteamLoadCoef[0] + thisChiller.SteamLoadCoef[1] + thisChiller.SteamLoadCoef[2]; EXPECT_DOUBLE_EQ(1.0, SteamInputRatNom); - Real64 rho_cond = FluidProperties::GetDensityGlycol(*state, + Real64 rho_cond = Fluid::GetDensityGlycol(*state, state->dataPlnt->PlantLoop(cndLoopNum).FluidName, Constant::CWInitConvTemp, state->dataPlnt->PlantLoop(cndLoopNum).FluidIndex, "ChillerAbsorption_Autosize_TEST"); - Real64 Cp_cond = FluidProperties::GetSpecificHeatGlycol(*state, + Real64 Cp_cond = Fluid::GetSpecificHeatGlycol(*state, state->dataPlnt->PlantLoop(cndLoopNum).FluidName, thisChiller.TempDesCondIn, state->dataPlnt->PlantLoop(cndLoopNum).FluidIndex, @@ -2058,13 +2058,13 @@ TEST_F(EnergyPlusFixture, ChillerAbsorption_Autosize) expectedNomCap * (1.0 + SteamInputRatNom + nomCapToPumpRatio) / (rho_cond * Cp_cond * state->dataSize->PlantSizData(cndLoopNum).DeltaT); Real64 const SteamDeltaT = state->dataSize->PlantSizData(genLoopNum).DeltaT; - Real64 const Cp_gen = FluidProperties::GetSpecificHeatGlycol(*state, + Real64 const Cp_gen = Fluid::GetSpecificHeatGlycol(*state, state->dataPlnt->PlantLoop(genLoopNum).FluidName, state->dataSize->PlantSizData(genLoopNum).ExitTemp, state->dataPlnt->PlantLoop(genLoopNum).FluidIndex, "ChillerAbsorption_Autosize_TEST"); - Real64 const rho_gen = FluidProperties::GetDensityGlycol(*state, + Real64 const rho_gen = Fluid::GetDensityGlycol(*state, state->dataPlnt->PlantLoop(genLoopNum).FluidName, (state->dataSize->PlantSizData(genLoopNum).ExitTemp - SteamDeltaT), state->dataPlnt->PlantLoop(genLoopNum).FluidIndex, diff --git a/tst/EnergyPlus/unit/ChillerExhaustAbsorption.unit.cc b/tst/EnergyPlus/unit/ChillerExhaustAbsorption.unit.cc index 1aaeb633ec5..d06b22313a7 100644 --- a/tst/EnergyPlus/unit/ChillerExhaustAbsorption.unit.cc +++ b/tst/EnergyPlus/unit/ChillerExhaustAbsorption.unit.cc @@ -685,7 +685,7 @@ TEST_F(EnergyPlusFixture, ExhAbsorption_calcHeater_Fix_Test) bool const runflaginput = true; thisChillerHeater.calcHeater(*state, loadinput, runflaginput); - const Real64 CpHW = FluidProperties::GetSpecificHeatGlycol(*state, hwPlantLoop.FluidName, hwReturnTemp, hwPlantLoop.FluidIndex, "UnitTest"); + const Real64 CpHW = Fluid::GetSpecificHeatGlycol(*state, hwPlantLoop.FluidName, hwReturnTemp, hwPlantLoop.FluidIndex, "UnitTest"); EXPECT_EQ(4185.0, CpHW); const Real64 expectedHeatingLoad = (hwSupplySetpoint - hwReturnTemp) * hwMassFlow * CpHW; diff --git a/tst/EnergyPlus/unit/Fixtures/EnergyPlusFixture.cc b/tst/EnergyPlus/unit/Fixtures/EnergyPlusFixture.cc index 43e61139917..5e229225aaa 100644 --- a/tst/EnergyPlus/unit/Fixtures/EnergyPlusFixture.cc +++ b/tst/EnergyPlus/unit/Fixtures/EnergyPlusFixture.cc @@ -118,7 +118,7 @@ void EnergyPlusFixture::SetUp() state->dataUtilityRoutines->outputErrorHeader = false; Psychrometrics::InitializePsychRoutines(*state); - FluidProperties::InitializeGlycRoutines(); + Fluid::InitializeGlycRoutines(); createCoilSelectionReportObj(*state); } @@ -349,8 +349,8 @@ bool EnergyPlusFixture::process_idf(std::string_view const idf_snippet, bool use inputProcessor->initializeMaps(); SimulationManager::PostIPProcessing(*state); - FluidProperties::GetFluidPropertiesData(*state); - state->dataFluidProps->GetInput = false; + Fluid::GetFluidPropertiesData(*state); + state->dataFluid->GetInput = false; if (state->dataSQLiteProcedures->sqlite) { bool writeOutputToSQLite = false; diff --git a/tst/EnergyPlus/unit/FluidProperties.unit.cc b/tst/EnergyPlus/unit/FluidProperties.unit.cc index 86ad3a2978f..d6539ee8ed8 100644 --- a/tst/EnergyPlus/unit/FluidProperties.unit.cc +++ b/tst/EnergyPlus/unit/FluidProperties.unit.cc @@ -59,7 +59,6 @@ #include "Fixtures/EnergyPlusFixture.hh" using namespace EnergyPlus; -using namespace EnergyPlus::FluidProperties; TEST_F(EnergyPlusFixture, FluidProperties_GetDensityGlycol) { @@ -76,17 +75,17 @@ TEST_F(EnergyPlusFixture, FluidProperties_GetDensityGlycol) int FluidIndex = 0; - EXPECT_NEAR(1037.89, GetDensityGlycol(*state, "GLHXFLUID", -35.0, FluidIndex, "UnitTest"), 0.01); - EXPECT_NEAR(1037.89, GetDensityGlycol(*state, "GLHXFLUID", -15.0, FluidIndex, "UnitTest"), 0.01); - EXPECT_NEAR(1034.46, GetDensityGlycol(*state, "GLHXFLUID", 5.0, FluidIndex, "UnitTest"), 0.01); - EXPECT_NEAR(1030.51, GetDensityGlycol(*state, "GLHXFLUID", 15.0, FluidIndex, "UnitTest"), 0.01); - EXPECT_NEAR(1026.06, GetDensityGlycol(*state, "GLHXFLUID", 25.0, FluidIndex, "UnitTest"), 0.01); - EXPECT_NEAR(1021.09, GetDensityGlycol(*state, "GLHXFLUID", 35.0, FluidIndex, "UnitTest"), 0.01); - EXPECT_NEAR(1015.62, GetDensityGlycol(*state, "GLHXFLUID", 45.0, FluidIndex, "UnitTest"), 0.01); - EXPECT_NEAR(1003.13, GetDensityGlycol(*state, "GLHXFLUID", 65.0, FluidIndex, "UnitTest"), 0.01); - EXPECT_NEAR(988.60, GetDensityGlycol(*state, "GLHXFLUID", 85.0, FluidIndex, "UnitTest"), 0.01); - EXPECT_NEAR(972.03, GetDensityGlycol(*state, "GLHXFLUID", 105.0, FluidIndex, "UnitTest"), 0.01); - EXPECT_NEAR(953.41, GetDensityGlycol(*state, "GLHXFLUID", 125.0, FluidIndex, "UnitTest"), 0.01); + EXPECT_NEAR(1037.89, Fluid::GetDensityGlycol(*state, "GLHXFLUID", -35.0, FluidIndex, "UnitTest"), 0.01); + EXPECT_NEAR(1037.89, Fluid::GetDensityGlycol(*state, "GLHXFLUID", -15.0, FluidIndex, "UnitTest"), 0.01); + EXPECT_NEAR(1034.46, Fluid::GetDensityGlycol(*state, "GLHXFLUID", 5.0, FluidIndex, "UnitTest"), 0.01); + EXPECT_NEAR(1030.51, Fluid::GetDensityGlycol(*state, "GLHXFLUID", 15.0, FluidIndex, "UnitTest"), 0.01); + EXPECT_NEAR(1026.06, Fluid::GetDensityGlycol(*state, "GLHXFLUID", 25.0, FluidIndex, "UnitTest"), 0.01); + EXPECT_NEAR(1021.09, Fluid::GetDensityGlycol(*state, "GLHXFLUID", 35.0, FluidIndex, "UnitTest"), 0.01); + EXPECT_NEAR(1015.62, Fluid::GetDensityGlycol(*state, "GLHXFLUID", 45.0, FluidIndex, "UnitTest"), 0.01); + EXPECT_NEAR(1003.13, Fluid::GetDensityGlycol(*state, "GLHXFLUID", 65.0, FluidIndex, "UnitTest"), 0.01); + EXPECT_NEAR(988.60, Fluid::GetDensityGlycol(*state, "GLHXFLUID", 85.0, FluidIndex, "UnitTest"), 0.01); + EXPECT_NEAR(972.03, Fluid::GetDensityGlycol(*state, "GLHXFLUID", 105.0, FluidIndex, "UnitTest"), 0.01); + EXPECT_NEAR(953.41, Fluid::GetDensityGlycol(*state, "GLHXFLUID", 125.0, FluidIndex, "UnitTest"), 0.01); } TEST_F(EnergyPlusFixture, FluidProperties_GetSpecificHeatGlycol) @@ -104,17 +103,17 @@ TEST_F(EnergyPlusFixture, FluidProperties_GetSpecificHeatGlycol) int FluidIndex = 0; - EXPECT_NEAR(3779, GetSpecificHeatGlycol(*state, "GLHXFLUID", -35.0, FluidIndex, "UnitTest"), 0.01); - EXPECT_NEAR(3779, GetSpecificHeatGlycol(*state, "GLHXFLUID", -15.0, FluidIndex, "UnitTest"), 0.01); - EXPECT_NEAR(3807, GetSpecificHeatGlycol(*state, "GLHXFLUID", 5.0, FluidIndex, "UnitTest"), 0.01); - EXPECT_NEAR(3834, GetSpecificHeatGlycol(*state, "GLHXFLUID", 15.0, FluidIndex, "UnitTest"), 0.01); - EXPECT_NEAR(3862, GetSpecificHeatGlycol(*state, "GLHXFLUID", 25.0, FluidIndex, "UnitTest"), 0.01); - EXPECT_NEAR(3889, GetSpecificHeatGlycol(*state, "GLHXFLUID", 35.0, FluidIndex, "UnitTest"), 0.01); - EXPECT_NEAR(3917, GetSpecificHeatGlycol(*state, "GLHXFLUID", 45.0, FluidIndex, "UnitTest"), 0.01); - EXPECT_NEAR(3972, GetSpecificHeatGlycol(*state, "GLHXFLUID", 65.0, FluidIndex, "UnitTest"), 0.01); - EXPECT_NEAR(4027, GetSpecificHeatGlycol(*state, "GLHXFLUID", 85.0, FluidIndex, "UnitTest"), 0.01); - EXPECT_NEAR(4082, GetSpecificHeatGlycol(*state, "GLHXFLUID", 105.0, FluidIndex, "UnitTest"), 0.01); - EXPECT_NEAR(4137, GetSpecificHeatGlycol(*state, "GLHXFLUID", 125.0, FluidIndex, "UnitTest"), 0.01); + EXPECT_NEAR(3779, Fluid::GetSpecificHeatGlycol(*state, "GLHXFLUID", -35.0, FluidIndex, "UnitTest"), 0.01); + EXPECT_NEAR(3779, Fluid::GetSpecificHeatGlycol(*state, "GLHXFLUID", -15.0, FluidIndex, "UnitTest"), 0.01); + EXPECT_NEAR(3807, Fluid::GetSpecificHeatGlycol(*state, "GLHXFLUID", 5.0, FluidIndex, "UnitTest"), 0.01); + EXPECT_NEAR(3834, Fluid::GetSpecificHeatGlycol(*state, "GLHXFLUID", 15.0, FluidIndex, "UnitTest"), 0.01); + EXPECT_NEAR(3862, Fluid::GetSpecificHeatGlycol(*state, "GLHXFLUID", 25.0, FluidIndex, "UnitTest"), 0.01); + EXPECT_NEAR(3889, Fluid::GetSpecificHeatGlycol(*state, "GLHXFLUID", 35.0, FluidIndex, "UnitTest"), 0.01); + EXPECT_NEAR(3917, Fluid::GetSpecificHeatGlycol(*state, "GLHXFLUID", 45.0, FluidIndex, "UnitTest"), 0.01); + EXPECT_NEAR(3972, Fluid::GetSpecificHeatGlycol(*state, "GLHXFLUID", 65.0, FluidIndex, "UnitTest"), 0.01); + EXPECT_NEAR(4027, Fluid::GetSpecificHeatGlycol(*state, "GLHXFLUID", 85.0, FluidIndex, "UnitTest"), 0.01); + EXPECT_NEAR(4082, Fluid::GetSpecificHeatGlycol(*state, "GLHXFLUID", 105.0, FluidIndex, "UnitTest"), 0.01); + EXPECT_NEAR(4137, Fluid::GetSpecificHeatGlycol(*state, "GLHXFLUID", 125.0, FluidIndex, "UnitTest"), 0.01); } TEST_F(EnergyPlusFixture, FluidProperties_InterpValuesForGlycolConc) @@ -142,7 +141,7 @@ TEST_F(EnergyPlusFixture, FluidProperties_InterpValuesForGlycolConc) Result.allocate(NumTemp); // Test interpolation for the single-concentration scenario - InterpValuesForGlycolConc(*state, + Fluid::InterpValuesForGlycolConc(*state, NumCon, // number of concentrations (dimension of raw data) NumTemp, // number of temperatures (dimension of raw data) ConData, // concentrations for raw data diff --git a/tst/EnergyPlus/unit/HVACVariableRefrigerantFlow.unit.cc b/tst/EnergyPlus/unit/HVACVariableRefrigerantFlow.unit.cc index e672738732c..8b73ce09b9c 100644 --- a/tst/EnergyPlus/unit/HVACVariableRefrigerantFlow.unit.cc +++ b/tst/EnergyPlus/unit/HVACVariableRefrigerantFlow.unit.cc @@ -103,7 +103,6 @@ using namespace EnergyPlus::DataPlant; using namespace EnergyPlus::DataSizing; using namespace EnergyPlus::DataZoneEquipment; using namespace EnergyPlus::DataZoneEnergyDemands; -using namespace EnergyPlus::FluidProperties; using namespace EnergyPlus::DXCoils; using namespace EnergyPlus::Fans; using namespace EnergyPlus::HeatBalanceManager; @@ -2355,7 +2354,7 @@ TEST_F(EnergyPlusFixture, VRF_FluidTCtrl_VRFOU_Compressor) // Read in IDF ProcessScheduleInput(*state); // read schedules Curve::GetCurveInput(*state); // read curves - FluidProperties::GetFluidPropertiesData(*state); // read refrigerant properties + Fluid::GetFluidPropertiesData(*state); // read refrigerant properties // set up ZoneEquipConfig data state->dataGlobal->NumOfZones = 1; @@ -2396,7 +2395,7 @@ TEST_F(EnergyPlusFixture, VRF_FluidTCtrl_VRFOU_Compressor) state->dataEnvrn->OutDryBulbTemp = 10.35; // Run - Temperature = GetSupHeatTempRefrig(*state, Refrigerant, Pressure, Enthalpy, TempLow, TempUp, RefrigIndex, CalledFrom); + Temperature = Fluid::GetSupHeatTempRefrig(*state, Refrigerant, Pressure, Enthalpy, TempLow, TempUp, RefrigIndex, CalledFrom); // Test EXPECT_NEAR(Temperature, 44.5, 0.5); @@ -5860,12 +5859,12 @@ TEST_F(EnergyPlusFixture, VRFTest_SysCurve_WaterCooled) EXPECT_TRUE(state->dataHVACVarRefFlow->VRF(VRFCond).VRFCondPLR > 0.0); EXPECT_NEAR(SysOutputProvided, state->dataZoneEnergyDemand->ZoneSysEnergyDemand(CurZoneNum).RemainingOutputReqToCoolSP, 1.0); - rho = GetDensityGlycol(*state, + rho = Fluid::GetDensityGlycol(*state, state->dataPlnt->PlantLoop(state->dataHVACVarRefFlow->VRF(VRFCond).SourcePlantLoc.loopNum).FluidName, state->dataSize->PlantSizData(1).ExitTemp, state->dataPlnt->PlantLoop(state->dataHVACVarRefFlow->VRF(VRFCond).SourcePlantLoc.loopNum).FluidIndex, RoutineName); - Cp = GetSpecificHeatGlycol(*state, + Cp = Fluid::GetSpecificHeatGlycol(*state, state->dataPlnt->PlantLoop(state->dataHVACVarRefFlow->VRF(VRFCond).SourcePlantLoc.loopNum).FluidName, state->dataSize->PlantSizData(1).ExitTemp, state->dataPlnt->PlantLoop(state->dataHVACVarRefFlow->VRF(VRFCond).SourcePlantLoc.loopNum).FluidIndex, @@ -5875,7 +5874,7 @@ TEST_F(EnergyPlusFixture, VRFTest_SysCurve_WaterCooled) EXPECT_DOUBLE_EQ(CondVolFlowRate, state->dataHVACVarRefFlow->VRF(VRFCond).WaterCondVolFlowRate); - rho = GetDensityGlycol(*state, + rho = Fluid::GetDensityGlycol(*state, state->dataPlnt->PlantLoop(state->dataHVACVarRefFlow->VRF(VRFCond).SourcePlantLoc.loopNum).FluidName, Constant::InitConvTemp, state->dataPlnt->PlantLoop(state->dataHVACVarRefFlow->VRF(VRFCond).SourcePlantLoc.loopNum).FluidIndex, @@ -22716,7 +22715,7 @@ TEST_F(EnergyPlusFixture, VRF_MixedTypes) // Read in IDF ProcessScheduleInput(*state); // read schedules Curve::GetCurveInput(*state); // read curves - FluidProperties::GetFluidPropertiesData(*state); // read refrigerant properties + Fluid::GetFluidPropertiesData(*state); // read refrigerant properties // set up ZoneEquipConfig data state->dataGlobal->NumOfZones = 1; diff --git a/tst/EnergyPlus/unit/HWBaseboardRadiator.unit.cc b/tst/EnergyPlus/unit/HWBaseboardRadiator.unit.cc index 1d92e5a3a85..741e539eb56 100644 --- a/tst/EnergyPlus/unit/HWBaseboardRadiator.unit.cc +++ b/tst/EnergyPlus/unit/HWBaseboardRadiator.unit.cc @@ -72,7 +72,6 @@ using namespace ScheduleManager; using namespace Psychrometrics; using namespace HWBaseboardRadiator; using namespace DataLoopNode; -using namespace FluidProperties; using namespace DataPlant; TEST_F(EnergyPlusFixture, HWBaseboardRadiator_CalcHWBaseboard) diff --git a/tst/EnergyPlus/unit/LowTempRadiantSystem.unit.cc b/tst/EnergyPlus/unit/LowTempRadiantSystem.unit.cc index fd592fbe9ab..abf6b69f0a3 100644 --- a/tst/EnergyPlus/unit/LowTempRadiantSystem.unit.cc +++ b/tst/EnergyPlus/unit/LowTempRadiantSystem.unit.cc @@ -82,7 +82,6 @@ using namespace EnergyPlus::DataHeatBalance; using namespace EnergyPlus::DataPlant; using namespace EnergyPlus::DataZoneEquipment; using namespace EnergyPlus::DataSizing; -using namespace EnergyPlus::FluidProperties; using namespace EnergyPlus::DataPlant; using namespace EnergyPlus::DataSurfaces; @@ -1201,24 +1200,24 @@ TEST_F(LowTempRadiantSystemTest, AutosizeLowTempRadiantVariableFlowTest) CoolingCapacity = state->dataSize->FinalZoneSizing(state->dataSize->CurZoneEqNum).NonAirSysDesCoolLoad * state->dataLowTempRadSys->HydrRadSys(RadSysNum).ScaledCoolingCapacity; // hot water flow rate sizing calculation - Density = GetDensityGlycol(*state, + Density = Fluid::GetDensityGlycol(*state, state->dataPlnt->PlantLoop(state->dataLowTempRadSys->HydrRadSys(RadSysNum).HWPlantLoc.loopNum).FluidName, 60.0, state->dataPlnt->PlantLoop(state->dataLowTempRadSys->HydrRadSys(RadSysNum).HWPlantLoc.loopNum).FluidIndex, "AutosizeLowTempRadiantVariableFlowTest"); - Cp = GetSpecificHeatGlycol(*state, + Cp = Fluid::GetSpecificHeatGlycol(*state, state->dataPlnt->PlantLoop(state->dataLowTempRadSys->HydrRadSys(RadSysNum).HWPlantLoc.loopNum).FluidName, 60.0, state->dataPlnt->PlantLoop(state->dataLowTempRadSys->HydrRadSys(RadSysNum).HWPlantLoc.loopNum).FluidIndex, "AutosizeLowTempRadiantVariableFlowTest"); HotWaterFlowRate = HeatingCapacity / (state->dataSize->PlantSizData(1).DeltaT * Cp * Density); // chilled water flow rate sizing calculation - Density = GetDensityGlycol(*state, + Density = Fluid::GetDensityGlycol(*state, state->dataPlnt->PlantLoop(state->dataLowTempRadSys->HydrRadSys(RadSysNum).CWPlantLoc.loopNum).FluidName, 5.05, state->dataPlnt->PlantLoop(state->dataLowTempRadSys->HydrRadSys(RadSysNum).CWPlantLoc.loopNum).FluidIndex, "AutosizeLowTempRadiantVariableFlowTest"); - Cp = GetSpecificHeatGlycol(*state, + Cp = Fluid::GetSpecificHeatGlycol(*state, state->dataPlnt->PlantLoop(state->dataLowTempRadSys->HydrRadSys(RadSysNum).CWPlantLoc.loopNum).FluidName, 5.05, state->dataPlnt->PlantLoop(state->dataLowTempRadSys->HydrRadSys(RadSysNum).CWPlantLoc.loopNum).FluidIndex, @@ -2631,12 +2630,12 @@ TEST_F(LowTempRadiantSystemTest, LowTempRadConFlowSystemAutoSizeTempTest) state->dataSize->FinalZoneSizing(state->dataSize->CurZoneEqNum).NonAirSysDesCoolLoad = 1000.0; // hot water volume flow rate sizing calculation - Density = GetDensityGlycol(*state, + Density = Fluid::GetDensityGlycol(*state, state->dataPlnt->PlantLoop(state->dataLowTempRadSys->CFloRadSys(RadSysNum).HWPlantLoc.loopNum).FluidName, 60.0, state->dataPlnt->PlantLoop(state->dataLowTempRadSys->CFloRadSys(RadSysNum).HWPlantLoc.loopNum).FluidIndex, "LowTempRadConFlowSystemAutoSizeTempTest"); - Cp = GetSpecificHeatGlycol(*state, + Cp = Fluid::GetSpecificHeatGlycol(*state, state->dataPlnt->PlantLoop(state->dataLowTempRadSys->CFloRadSys(RadSysNum).HWPlantLoc.loopNum).FluidName, 60.0, state->dataPlnt->PlantLoop(state->dataLowTempRadSys->CFloRadSys(RadSysNum).HWPlantLoc.loopNum).FluidIndex, @@ -2656,12 +2655,12 @@ TEST_F(LowTempRadiantSystemTest, LowTempRadConFlowSystemAutoSizeTempTest) state->dataLowTempRadSys->CFloRadSys(RadSysNum).WaterVolFlowMax = AutoSize; // chilled water volume flow rate sizing calculation - Density = GetDensityGlycol(*state, + Density = Fluid::GetDensityGlycol(*state, state->dataPlnt->PlantLoop(state->dataLowTempRadSys->CFloRadSys(RadSysNum).CWPlantLoc.loopNum).FluidName, 5.05, state->dataPlnt->PlantLoop(state->dataLowTempRadSys->CFloRadSys(RadSysNum).CWPlantLoc.loopNum).FluidIndex, "LowTempRadConFlowSystemAutoSizeTempTest"); - Cp = GetSpecificHeatGlycol(*state, + Cp = Fluid::GetSpecificHeatGlycol(*state, state->dataPlnt->PlantLoop(state->dataLowTempRadSys->CFloRadSys(RadSysNum).CWPlantLoc.loopNum).FluidName, 5.05, state->dataPlnt->PlantLoop(state->dataLowTempRadSys->CFloRadSys(RadSysNum).CWPlantLoc.loopNum).FluidIndex, diff --git a/tst/EnergyPlus/unit/OutdoorAirUnit.unit.cc b/tst/EnergyPlus/unit/OutdoorAirUnit.unit.cc index fe22f162eb7..8ba54110eea 100644 --- a/tst/EnergyPlus/unit/OutdoorAirUnit.unit.cc +++ b/tst/EnergyPlus/unit/OutdoorAirUnit.unit.cc @@ -94,7 +94,6 @@ using namespace EnergyPlus::Psychrometrics; using namespace EnergyPlus::ScheduleManager; using namespace EnergyPlus::SteamCoils; using namespace EnergyPlus::WaterCoils; -using namespace EnergyPlus::FluidProperties; namespace EnergyPlus { @@ -688,10 +687,10 @@ TEST_F(EnergyPlusFixture, OutdoorAirUnit_WaterCoolingCoilAutoSizeTest) Real64 DesWaterCoolingCoilLoad = DesAirMassFlow * (EnthalpyAirIn - EnthalpyAirOut) + FanCoolLoad; Real64 CoilDesWaterDeltaT = state->dataSize->PlantSizData(1).DeltaT; - Real64 Cp = GetSpecificHeatGlycol( + Real64 Cp = Fluid::GetSpecificHeatGlycol( *state, state->dataPlnt->PlantLoop(1).FluidName, Constant::CWInitConvTemp, state->dataPlnt->PlantLoop(1).FluidIndex, " "); Real64 rho = - GetDensityGlycol(*state, state->dataPlnt->PlantLoop(1).FluidName, Constant::CWInitConvTemp, state->dataPlnt->PlantLoop(1).FluidIndex, " "); + Fluid::GetDensityGlycol(*state, state->dataPlnt->PlantLoop(1).FluidName, Constant::CWInitConvTemp, state->dataPlnt->PlantLoop(1).FluidIndex, " "); Real64 DesCoolingCoilWaterVolFlowRate = DesWaterCoolingCoilLoad / (CoilDesWaterDeltaT * Cp * rho); // check water coil water flow rate calc EXPECT_EQ(DesWaterCoolingCoilLoad, state->dataWaterCoils->WaterCoil(1).DesWaterCoolingCoilRate); @@ -994,11 +993,11 @@ TEST_F(EnergyPlusFixture, OutdoorAirUnit_SteamHeatingCoilAutoSizeTest) Real64 DesSteamCoilLoad = DesAirMassFlow * CpAirAvg * (DesCoilOutTemp - DesCoilInTemp); // do steam flow rate sizing calculation - Real64 EnthSteamIn = GetSatEnthalpyRefrig(*state, "STEAM", Constant::SteamInitConvTemp, 1.0, state->dataSteamCoils->SteamCoil(1).FluidIndex, ""); - Real64 EnthSteamOut = GetSatEnthalpyRefrig(*state, "STEAM", Constant::SteamInitConvTemp, 0.0, state->dataSteamCoils->SteamCoil(1).FluidIndex, ""); - Real64 SteamDensity = GetSatDensityRefrig(*state, "STEAM", Constant::SteamInitConvTemp, 1.0, state->dataSteamCoils->SteamCoil(1).FluidIndex, ""); + Real64 EnthSteamIn = Fluid::GetSatEnthalpyRefrig(*state, "STEAM", Constant::SteamInitConvTemp, 1.0, state->dataSteamCoils->SteamCoil(1).FluidIndex, ""); + Real64 EnthSteamOut = Fluid::GetSatEnthalpyRefrig(*state, "STEAM", Constant::SteamInitConvTemp, 0.0, state->dataSteamCoils->SteamCoil(1).FluidIndex, ""); + Real64 SteamDensity = Fluid::GetSatDensityRefrig(*state, "STEAM", Constant::SteamInitConvTemp, 1.0, state->dataSteamCoils->SteamCoil(1).FluidIndex, ""); Real64 CpOfCondensate = - GetSatSpecificHeatRefrig(*state, "STEAM", Constant::SteamInitConvTemp, 0.0, state->dataSteamCoils->SteamCoil(1).FluidIndex, ""); + Fluid::GetSatSpecificHeatRefrig(*state, "STEAM", Constant::SteamInitConvTemp, 0.0, state->dataSteamCoils->SteamCoil(1).FluidIndex, ""); Real64 LatentHeatChange = EnthSteamIn - EnthSteamOut; Real64 DesMaxSteamVolFlowRate = DesSteamCoilLoad / (SteamDensity * (LatentHeatChange + state->dataSteamCoils->SteamCoil(1).DegOfSubcooling * CpOfCondensate)); diff --git a/tst/EnergyPlus/unit/OutsideEnergySources.unit.cc b/tst/EnergyPlus/unit/OutsideEnergySources.unit.cc index 8eda2e0503b..f96cb4c1ffe 100644 --- a/tst/EnergyPlus/unit/OutsideEnergySources.unit.cc +++ b/tst/EnergyPlus/unit/OutsideEnergySources.unit.cc @@ -139,7 +139,7 @@ TEST_F(EnergyPlusFixture, DistrictCoolingandHeating) thisDistrictHeatingWater.BeginEnvrnInitFlag = true; thisDistrictHeatingWater.simulate(*state, locHotWater, firstHVAC, MyLoad, RunFlag); - Real64 Cp = FluidProperties::GetSpecificHeatGlycol( + Real64 Cp = Fluid::GetSpecificHeatGlycol( *state, thisHotWaterLoop.FluidName, thisDistrictHeatingWater.InletTemp, thisHotWaterLoop.FluidIndex, RoutineName); Real64 calOutletTemp = (MyLoad + thisHotWaterLoop.MaxMassFlowRate * Cp * thisDistrictHeatingWater.InletTemp) / (thisHotWaterLoop.MaxMassFlowRate * Cp); @@ -173,7 +173,7 @@ TEST_F(EnergyPlusFixture, DistrictCoolingandHeating) thisDistrictCooling.BeginEnvrnInitFlag = true; thisDistrictCooling.simulate(*state, locChilledWater, firstHVAC, MyLoad, RunFlag); - Cp = FluidProperties::GetSpecificHeatGlycol( + Cp = Fluid::GetSpecificHeatGlycol( *state, thisChilledWaterLoop.FluidName, thisDistrictCooling.InletTemp, thisChilledWaterLoop.FluidIndex, RoutineName); calOutletTemp = (MyLoad + thisChilledWaterLoop.MaxMassFlowRate * Cp * thisDistrictCooling.InletTemp) / (thisChilledWaterLoop.MaxMassFlowRate * Cp); @@ -204,14 +204,14 @@ TEST_F(EnergyPlusFixture, DistrictCoolingandHeating) thisDistrictHeatingSteam.BeginEnvrnInitFlag = true; thisDistrictHeatingSteam.simulate(*state, locSteam, firstHVAC, MyLoad, RunFlag); - Real64 SatTempAtmPress = FluidProperties::GetSatTemperatureRefrig( + Real64 SatTempAtmPress = Fluid::GetSatTemperatureRefrig( *state, thisSteamLoop.FluidName, DataEnvironment::StdPressureSeaLevel, thisSteamLoop.FluidIndex, RoutineName); - Real64 CpCondensate = FluidProperties::GetSpecificHeatGlycol( + Real64 CpCondensate = Fluid::GetSpecificHeatGlycol( *state, thisSteamLoop.FluidName, thisDistrictHeatingSteam.InletTemp, thisSteamLoop.FluidIndex, RoutineName); Real64 deltaTsensible = SatTempAtmPress - thisDistrictHeatingSteam.InletTemp; - Real64 EnthSteamInDry = FluidProperties::GetSatEnthalpyRefrig( + Real64 EnthSteamInDry = Fluid::GetSatEnthalpyRefrig( *state, thisSteamLoop.FluidName, thisDistrictHeatingSteam.InletTemp, 1.0, thisSteamLoop.FluidIndex, RoutineName); - Real64 EnthSteamOutWet = FluidProperties::GetSatEnthalpyRefrig( + Real64 EnthSteamOutWet = Fluid::GetSatEnthalpyRefrig( *state, thisSteamLoop.FluidName, thisDistrictHeatingSteam.InletTemp, 0.0, thisSteamLoop.FluidIndex, RoutineName); Real64 LatentHeatSteam = EnthSteamInDry - EnthSteamOutWet; Real64 calOutletMdot = MyLoad / (LatentHeatSteam + (CpCondensate * deltaTsensible)); diff --git a/tst/EnergyPlus/unit/PlantCentralGSHP.unit.cc b/tst/EnergyPlus/unit/PlantCentralGSHP.unit.cc index 913657fa1d0..454e54ad473 100644 --- a/tst/EnergyPlus/unit/PlantCentralGSHP.unit.cc +++ b/tst/EnergyPlus/unit/PlantCentralGSHP.unit.cc @@ -137,25 +137,25 @@ TEST_F(EnergyPlusFixture, ChillerHeater_Autosize) state->dataPlantCentralGSHP->Wrapper(1).GLHEPlantLoc.loopNum = PltSizCondNum; // Calculate expected values - Real64 rho_evap = FluidProperties::GetDensityGlycol(*state, + Real64 rho_evap = Fluid::GetDensityGlycol(*state, state->dataPlnt->PlantLoop(PltSizNum).FluidName, Constant::CWInitConvTemp, state->dataPlnt->PlantLoop(PltSizNum).FluidIndex, "ChillerHeater_Autosize_TEST"); - Real64 Cp_evap = FluidProperties::GetSpecificHeatGlycol(*state, + Real64 Cp_evap = Fluid::GetSpecificHeatGlycol(*state, state->dataPlnt->PlantLoop(PltSizNum).FluidName, Constant::CWInitConvTemp, state->dataPlnt->PlantLoop(PltSizNum).FluidIndex, "ChillerHeater_Autosize_TEST"); - Real64 rho_cond = FluidProperties::GetDensityGlycol(*state, + Real64 rho_cond = Fluid::GetDensityGlycol(*state, state->dataPlnt->PlantLoop(PltSizCondNum).FluidName, Constant::CWInitConvTemp, state->dataPlnt->PlantLoop(PltSizCondNum).FluidIndex, "ChillerHeater_Autosize_TEST"); - Real64 Cp_cond = FluidProperties::GetSpecificHeatGlycol(*state, + Real64 Cp_cond = Fluid::GetSpecificHeatGlycol(*state, state->dataPlnt->PlantLoop(PltSizCondNum).FluidName, state->dataPlantCentralGSHP->Wrapper(1).ChillerHeater(1).TempRefCondInCooling, state->dataPlnt->PlantLoop(PltSizCondNum).FluidIndex, diff --git a/tst/EnergyPlus/unit/PlantLoadProfile.unit.cc b/tst/EnergyPlus/unit/PlantLoadProfile.unit.cc index 67142450ce6..7996d5a5179 100644 --- a/tst/EnergyPlus/unit/PlantLoadProfile.unit.cc +++ b/tst/EnergyPlus/unit/PlantLoadProfile.unit.cc @@ -178,8 +178,8 @@ TEST_F(EnergyPlusFixture, LoadProfile_initandsimulate_Waterloop) std::string_view RoutineName("PlantLoadProfileTests"); thisLoadProfileWaterLoop.simulate(*state, locWater, firstHVAC, curLoad, runFlag); - Real64 rhoWater = FluidProperties::GetDensityGlycol(*state, thisWaterLoop.FluidName, 60, thisWaterLoop.FluidIndex, RoutineName); - Real64 Cp = FluidProperties::GetSpecificHeatGlycol( + Real64 rhoWater = Fluid::GetDensityGlycol(*state, thisWaterLoop.FluidName, 60, thisWaterLoop.FluidIndex, RoutineName); + Real64 Cp = Fluid::GetSpecificHeatGlycol( *state, thisWaterLoop.FluidName, thisLoadProfileWaterLoop.InletTemp, thisWaterLoop.FluidIndex, RoutineName); Real64 deltaTemp = curLoad / (rhoWater * thisLoadProfileWaterLoop.VolFlowRate * Cp); Real64 calOutletTemp = thisLoadProfileWaterLoop.InletTemp - deltaTemp; @@ -209,7 +209,7 @@ TEST_F(EnergyPlusFixture, LoadProfile_initandsimulate_Steamloop) std::string_view RoutineName("PlantLoadProfileTests"); - Real64 SatTempAtmPress = FluidProperties::GetSatTemperatureRefrig( + Real64 SatTempAtmPress = Fluid::GetSatTemperatureRefrig( *state, state->dataPlnt->PlantLoop(1).FluidName, DataEnvironment::StdPressureSeaLevel, state->dataPlnt->PlantLoop(1).FluidIndex, RoutineName); state->dataLoopNodes->Node(1).Temp = SatTempAtmPress; @@ -252,12 +252,12 @@ TEST_F(EnergyPlusFixture, LoadProfile_initandsimulate_Steamloop) thisLoadProfileSteamLoop.simulate(*state, locSteam, firstHVAC, curLoad, runFlag); Real64 EnthSteamIn = - FluidProperties::GetSatEnthalpyRefrig(*state, thisSteamLoop.FluidName, SatTempAtmPress, 1.0, thisSteamLoop.FluidIndex, RoutineName); + Fluid::GetSatEnthalpyRefrig(*state, thisSteamLoop.FluidName, SatTempAtmPress, 1.0, thisSteamLoop.FluidIndex, RoutineName); Real64 EnthSteamOut = - FluidProperties::GetSatEnthalpyRefrig(*state, thisSteamLoop.FluidName, SatTempAtmPress, 0.0, thisSteamLoop.FluidIndex, RoutineName); + Fluid::GetSatEnthalpyRefrig(*state, thisSteamLoop.FluidName, SatTempAtmPress, 0.0, thisSteamLoop.FluidIndex, RoutineName); Real64 LatentHeatSteam = EnthSteamIn - EnthSteamOut; Real64 CpCondensate = - FluidProperties::GetSpecificHeatGlycol(*state, thisSteamLoop.FluidName, SatTempAtmPress, thisSteamLoop.FluidIndex, RoutineName); + Fluid::GetSpecificHeatGlycol(*state, thisSteamLoop.FluidName, SatTempAtmPress, thisSteamLoop.FluidIndex, RoutineName); Real64 calOutletMdot = curLoad / (LatentHeatSteam + thisLoadProfileSteamLoop.DegOfSubcooling * CpCondensate); EXPECT_EQ(thisLoadProfileSteamLoop.MassFlowRate, calOutletMdot); diff --git a/tst/EnergyPlus/unit/SetPointManager.unit.cc b/tst/EnergyPlus/unit/SetPointManager.unit.cc index 0ba7a3af76f..1a2f04c9997 100644 --- a/tst/EnergyPlus/unit/SetPointManager.unit.cc +++ b/tst/EnergyPlus/unit/SetPointManager.unit.cc @@ -189,8 +189,8 @@ TEST_F(EnergyPlusFixture, SetPointManager_DefineReturnWaterChWSetPointManager_Fl ASSERT_TRUE(process_idf(idf_objects)); - EXPECT_EQ(2, state->dataFluidProps->NumOfGlycols); - const auto &thisGlycol = state->dataFluidProps->GlycolData(2); + EXPECT_EQ(2, state->dataFluid->NumOfGlycols); + const auto &thisGlycol = state->dataFluid->GlycolData(2); EXPECT_EQ("ETHYLENEGLYCOL40PERCENT", thisGlycol.Name); EXPECT_EQ("ETHYLENEGLYCOL", thisGlycol.GlycolName); diff --git a/tst/EnergyPlus/unit/UnitHeater.unit.cc b/tst/EnergyPlus/unit/UnitHeater.unit.cc index ae8f65690d5..3d53f4424c6 100644 --- a/tst/EnergyPlus/unit/UnitHeater.unit.cc +++ b/tst/EnergyPlus/unit/UnitHeater.unit.cc @@ -89,7 +89,6 @@ using namespace EnergyPlus::DataSurfaces; using namespace EnergyPlus::DataZoneEquipment; using namespace EnergyPlus::DataZoneEnergyDemands; using namespace EnergyPlus::Fans; -using namespace EnergyPlus::FluidProperties; using namespace EnergyPlus::HeatBalanceManager; using namespace EnergyPlus::OutputProcessor; using namespace EnergyPlus::OutputReportPredefined; @@ -1152,12 +1151,12 @@ TEST_F(EnergyPlusFixture, UnitHeater_HWHeatingCoilUAAutoSizingTest) EXPECT_FALSE(ErrorsFound); HWMaxVolFlowRate = state->dataWaterCoils->WaterCoil(CoilNum).MaxWaterVolFlowRate; - HWDensity = GetDensityGlycol(*state, + HWDensity = Fluid::GetDensityGlycol(*state, state->dataPlnt->PlantLoop(state->dataUnitHeaters->UnitHeat(UnitHeatNum).HWplantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state->dataPlnt->PlantLoop(state->dataUnitHeaters->UnitHeat(UnitHeatNum).HWplantLoc.loopNum).FluidIndex, "xxx"); - CpHW = GetSpecificHeatGlycol(*state, + CpHW = Fluid::GetSpecificHeatGlycol(*state, state->dataPlnt->PlantLoop(state->dataUnitHeaters->UnitHeat(UnitHeatNum).HWplantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state->dataPlnt->PlantLoop(state->dataUnitHeaters->UnitHeat(UnitHeatNum).HWplantLoc.loopNum).FluidIndex, @@ -1399,7 +1398,7 @@ TEST_F(EnergyPlusFixture, UnitHeater_SimUnitHeaterTest) EXPECT_NEAR(UHHeatingRate, state->dataUnitHeaters->UnitHeat(UnitHeatNum).HeatPower, ConvTol); // verify the heat rate delivered by the hot water heating coil HWMassFlowRate = state->dataWaterCoils->WaterCoil(CoilNum).InletWaterMassFlowRate; - CpHW = GetSpecificHeatGlycol(*state, + CpHW = Fluid::GetSpecificHeatGlycol(*state, state->dataPlnt->PlantLoop(state->dataUnitHeaters->UnitHeat(UnitHeatNum).HWplantLoc.loopNum).FluidName, 60.0, state->dataPlnt->PlantLoop(state->dataUnitHeaters->UnitHeat(UnitHeatNum).HWplantLoc.loopNum).FluidIndex, diff --git a/tst/EnergyPlus/unit/UnitarySystem.unit.cc b/tst/EnergyPlus/unit/UnitarySystem.unit.cc index 427ab85de53..41ce3190923 100644 --- a/tst/EnergyPlus/unit/UnitarySystem.unit.cc +++ b/tst/EnergyPlus/unit/UnitarySystem.unit.cc @@ -382,7 +382,7 @@ TEST_F(AirloopUnitarySysTest, MultipleWaterCoolingCoilSizing) state->dataPlnt->PlantLoop(1).LoopSide(DataPlant::LoopSideLocation::Demand).Branch(1).Comp(1).Name = state->dataWaterCoils->WaterCoil(CoilNum).Name; state->dataSize->DataWaterLoopNum = 1; - state->dataFluidProps->NumOfGlycols = 1; + state->dataFluid->NumOfGlycols = 1; createCoilSelectionReportObj(*state); WaterCoils::SizeWaterCoil(*state, CoilNum); diff --git a/tst/EnergyPlus/unit/WaterCoils.unit.cc b/tst/EnergyPlus/unit/WaterCoils.unit.cc index 7faecd4d5ec..0d0fdbd31be 100644 --- a/tst/EnergyPlus/unit/WaterCoils.unit.cc +++ b/tst/EnergyPlus/unit/WaterCoils.unit.cc @@ -102,7 +102,6 @@ using namespace EnergyPlus::DataZoneEnergyDemands; using namespace EnergyPlus::DataZoneEquipment; using namespace EnergyPlus::FanCoilUnits; using namespace EnergyPlus::Fans; -using namespace EnergyPlus::FluidProperties; using namespace EnergyPlus::General; using namespace EnergyPlus::GlobalNames; using namespace EnergyPlus::HeatBalanceManager; @@ -229,7 +228,7 @@ TEST_F(WaterCoilsTest, WaterCoolingCoilSizing) state->dataSize->PlantSizData(1).DeltaT = 5.0; state->dataSize->FinalSysSizing(1).MassFlowAtCoolPeak = state->dataSize->FinalSysSizing(1).DesMainVolFlow * state->dataEnvrn->StdRhoAir; state->dataSize->DataWaterLoopNum = 1; - state->dataFluidProps->NumOfGlycols = 1; + state->dataFluid->NumOfGlycols = 1; createCoilSelectionReportObj(*state); SizeWaterCoil(*state, CoilNum); @@ -464,7 +463,7 @@ TEST_F(WaterCoilsTest, CoilHeatingWaterUASizing) state->dataSize->CurSysNum = 1; state->dataSize->CurOASysNum = 0; state->dataSize->DataWaterLoopNum = 1; - state->dataFluidProps->NumOfGlycols = 1; + state->dataFluid->NumOfGlycols = 1; state->dataWaterCoils->MyUAAndFlowCalcFlag.allocate(1); state->dataWaterCoils->MyUAAndFlowCalcFlag(1) = true; @@ -492,9 +491,9 @@ TEST_F(WaterCoilsTest, CoilHeatingWaterUASizing) Real64 rho = 0; Real64 DesWaterFlowRate = 0; - Cp = GetSpecificHeatGlycol( + Cp = Fluid::GetSpecificHeatGlycol( *state, state->dataPlnt->PlantLoop(1).FluidName, Constant::HWInitConvTemp, state->dataPlnt->PlantLoop(1).FluidIndex, "Unit Test"); - rho = GetDensityGlycol( + rho = Fluid::GetDensityGlycol( *state, state->dataPlnt->PlantLoop(1).FluidName, Constant::HWInitConvTemp, state->dataPlnt->PlantLoop(1).FluidIndex, "Unit Test"); DesWaterFlowRate = state->dataWaterCoils->WaterCoil(CoilNum).DesWaterHeatingCoilRate / (10.0 * Cp * rho); @@ -620,7 +619,7 @@ TEST_F(WaterCoilsTest, CoilHeatingWaterLowAirFlowUASizing) state->dataSize->CurSysNum = 1; state->dataSize->CurOASysNum = 0; state->dataSize->DataWaterLoopNum = 1; - state->dataFluidProps->NumOfGlycols = 1; + state->dataFluid->NumOfGlycols = 1; state->dataWaterCoils->MyUAAndFlowCalcFlag.allocate(1); state->dataWaterCoils->MyUAAndFlowCalcFlag(1) = true; @@ -648,9 +647,9 @@ TEST_F(WaterCoilsTest, CoilHeatingWaterLowAirFlowUASizing) Real64 rho = 0; Real64 DesWaterFlowRate = 0; - Cp = GetSpecificHeatGlycol( + Cp = Fluid::GetSpecificHeatGlycol( *state, state->dataPlnt->PlantLoop(1).FluidName, Constant::HWInitConvTemp, state->dataPlnt->PlantLoop(1).FluidIndex, "Unit Test"); - rho = GetDensityGlycol( + rho = Fluid::GetDensityGlycol( *state, state->dataPlnt->PlantLoop(1).FluidName, Constant::HWInitConvTemp, state->dataPlnt->PlantLoop(1).FluidIndex, "Unit Test"); DesWaterFlowRate = state->dataWaterCoils->WaterCoil(CoilNum).DesWaterHeatingCoilRate / (10.0 * Cp * rho); @@ -780,7 +779,7 @@ TEST_F(WaterCoilsTest, CoilHeatingWaterUASizingLowHwaterInletTemp) state->dataSize->CurOASysNum = 0; state->dataSize->DataWaterLoopNum = 1; - state->dataFluidProps->NumOfGlycols = 1; + state->dataFluid->NumOfGlycols = 1; state->dataWaterCoils->MyUAAndFlowCalcFlag.allocate(1); state->dataWaterCoils->MyUAAndFlowCalcFlag(1) = true; @@ -808,9 +807,9 @@ TEST_F(WaterCoilsTest, CoilHeatingWaterUASizingLowHwaterInletTemp) Real64 rho = 0; Real64 DesWaterFlowRate = 0; - Cp = GetSpecificHeatGlycol( + Cp = Fluid::GetSpecificHeatGlycol( *state, state->dataPlnt->PlantLoop(1).FluidName, Constant::HWInitConvTemp, state->dataPlnt->PlantLoop(1).FluidIndex, "Unit Test"); - rho = GetDensityGlycol( + rho = Fluid::GetDensityGlycol( *state, state->dataPlnt->PlantLoop(1).FluidName, Constant::HWInitConvTemp, state->dataPlnt->PlantLoop(1).FluidIndex, "Unit Test"); DesWaterFlowRate = state->dataWaterCoils->WaterCoil(CoilNum).DesWaterHeatingCoilRate / (10.0 * Cp * rho); @@ -900,7 +899,7 @@ TEST_F(WaterCoilsTest, CoilCoolingWaterSimpleSizing) state->dataSize->PlantSizData(1).DeltaT = 5.0; state->dataSize->DataWaterLoopNum = 1; - state->dataFluidProps->NumOfGlycols = 1; + state->dataFluid->NumOfGlycols = 1; // run water coil sizing createCoilSelectionReportObj(*state); @@ -922,9 +921,9 @@ TEST_F(WaterCoilsTest, CoilCoolingWaterSimpleSizing) Real64 rho = 0; Real64 DesWaterFlowRate = 0; - Cp = GetSpecificHeatGlycol( + Cp = Fluid::GetSpecificHeatGlycol( *state, state->dataPlnt->PlantLoop(1).FluidName, Constant::CWInitConvTemp, state->dataPlnt->PlantLoop(1).FluidIndex, "Unit Test"); - rho = GetDensityGlycol( + rho = Fluid::GetDensityGlycol( *state, state->dataPlnt->PlantLoop(1).FluidName, Constant::CWInitConvTemp, state->dataPlnt->PlantLoop(1).FluidIndex, "Unit Test"); DesWaterFlowRate = state->dataWaterCoils->WaterCoil(CoilNum).DesWaterCoolingCoilRate / (state->dataWaterCoils->WaterCoil(CoilNum).DesignWaterDeltaTemp * Cp * rho); @@ -1018,7 +1017,7 @@ TEST_F(WaterCoilsTest, CoilCoolingWaterDetailedSizing) state->dataSize->PlantSizData(1).ExitTemp = 5.7; state->dataSize->PlantSizData(1).DeltaT = 5.0; state->dataSize->DataWaterLoopNum = 1; - state->dataFluidProps->NumOfGlycols = 1; + state->dataFluid->NumOfGlycols = 1; // run water coil sizing createCoilSelectionReportObj(*state); @@ -1039,9 +1038,9 @@ TEST_F(WaterCoilsTest, CoilCoolingWaterDetailedSizing) Real64 rho = 0; Real64 DesWaterFlowRate = 0; - Cp = GetSpecificHeatGlycol( + Cp = Fluid::GetSpecificHeatGlycol( *state, state->dataPlnt->PlantLoop(1).FluidName, Constant::CWInitConvTemp, state->dataPlnt->PlantLoop(1).FluidIndex, "Unit Test"); - rho = GetDensityGlycol( + rho = Fluid::GetDensityGlycol( *state, state->dataPlnt->PlantLoop(1).FluidName, Constant::CWInitConvTemp, state->dataPlnt->PlantLoop(1).FluidIndex, "Unit Test"); DesWaterFlowRate = state->dataWaterCoils->WaterCoil(CoilNum).DesWaterCoolingCoilRate / (6.67 * Cp * rho); // check cooling coil design water flow rate @@ -1143,7 +1142,7 @@ TEST_F(WaterCoilsTest, CoilCoolingWaterDetailed_WarningMath) state->dataSize->PlantSizData(1).ExitTemp = 5.7; state->dataSize->PlantSizData(1).DeltaT = 5.0; state->dataSize->DataWaterLoopNum = 1; - state->dataFluidProps->NumOfGlycols = 1; + state->dataFluid->NumOfGlycols = 1; OutputReportPredefined::SetPredefinedTables(*state); @@ -1166,9 +1165,9 @@ TEST_F(WaterCoilsTest, CoilCoolingWaterDetailed_WarningMath) Real64 rho = 0; Real64 DesWaterFlowRate = 0; - Cp = GetSpecificHeatGlycol( + Cp = Fluid::GetSpecificHeatGlycol( *state, state->dataPlnt->PlantLoop(1).FluidName, Constant::CWInitConvTemp, state->dataPlnt->PlantLoop(1).FluidIndex, "Unit Test"); - rho = GetDensityGlycol( + rho = Fluid::GetDensityGlycol( *state, state->dataPlnt->PlantLoop(1).FluidName, Constant::CWInitConvTemp, state->dataPlnt->PlantLoop(1).FluidIndex, "Unit Test"); DesWaterFlowRate = state->dataWaterCoils->WaterCoil(CoilNum).DesWaterCoolingCoilRate / (6.67 * Cp * rho); // check cooling coil design water flow rate @@ -1299,7 +1298,7 @@ TEST_F(WaterCoilsTest, CoilHeatingWaterSimpleSizing) state->dataSize->PlantSizData(1).DeltaT = 10.0; state->dataSize->DataWaterLoopNum = 1; - state->dataFluidProps->NumOfGlycols = 1; + state->dataFluid->NumOfGlycols = 1; // run water coil sizing createCoilSelectionReportObj(*state); @@ -1321,9 +1320,9 @@ TEST_F(WaterCoilsTest, CoilHeatingWaterSimpleSizing) Real64 rho = 0; Real64 DesWaterFlowRate = 0; - Cp = GetSpecificHeatGlycol( + Cp = Fluid::GetSpecificHeatGlycol( *state, state->dataPlnt->PlantLoop(1).FluidName, Constant::HWInitConvTemp, state->dataPlnt->PlantLoop(1).FluidIndex, "Unit Test"); - rho = GetDensityGlycol( + rho = Fluid::GetDensityGlycol( *state, state->dataPlnt->PlantLoop(1).FluidName, Constant::HWInitConvTemp, state->dataPlnt->PlantLoop(1).FluidIndex, "Unit Test"); DesWaterFlowRate = state->dataWaterCoils->WaterCoil(CoilNum).DesWaterHeatingCoilRate / (11.0 * Cp * rho); @@ -1395,7 +1394,7 @@ TEST_F(WaterCoilsTest, HotWaterHeatingCoilAutoSizeTempTest) state->dataSize->CurOASysNum = 0; state->dataSize->DataWaterLoopNum = 1; - state->dataFluidProps->NumOfGlycols = 1; + state->dataFluid->NumOfGlycols = 1; state->dataWaterCoils->MyUAAndFlowCalcFlag.allocate(1); state->dataWaterCoils->MyUAAndFlowCalcFlag(1) = true; @@ -1423,8 +1422,8 @@ TEST_F(WaterCoilsTest, HotWaterHeatingCoilAutoSizeTempTest) Real64 DesWaterFlowRate(0.0); // now size heating coil hot water flow rate at 60.0C - Cp = GetSpecificHeatGlycol(*state, state->dataPlnt->PlantLoop(1).FluidName, 60.0, state->dataPlnt->PlantLoop(1).FluidIndex, "Unit Test"); - rho = GetDensityGlycol(*state, state->dataPlnt->PlantLoop(1).FluidName, 60.0, state->dataPlnt->PlantLoop(1).FluidIndex, "Unit Test"); + Cp = Fluid::GetSpecificHeatGlycol(*state, state->dataPlnt->PlantLoop(1).FluidName, 60.0, state->dataPlnt->PlantLoop(1).FluidIndex, "Unit Test"); + rho = Fluid::GetDensityGlycol(*state, state->dataPlnt->PlantLoop(1).FluidName, 60.0, state->dataPlnt->PlantLoop(1).FluidIndex, "Unit Test"); DesWaterFlowRate = DesCoilHeatingLoad / (state->dataSize->PlantSizData(1).DeltaT * Cp * rho); // check heating coil design water flow rate calculated here and sizing results are identical diff --git a/tst/EnergyPlus/unit/WaterThermalTanks.unit.cc b/tst/EnergyPlus/unit/WaterThermalTanks.unit.cc index ff99c1ca594..ae221acb93a 100644 --- a/tst/EnergyPlus/unit/WaterThermalTanks.unit.cc +++ b/tst/EnergyPlus/unit/WaterThermalTanks.unit.cc @@ -543,9 +543,6 @@ TEST_F(EnergyPlusFixture, HPWHWrappedDummyNodeConfig) TEST_F(EnergyPlusFixture, HPWHEnergyBalance) { - using FluidProperties::GetSpecificHeatGlycol; - using FluidProperties::Water; - std::string idf_objects = delimited_string({ "Schedule:Constant,", " WaterHeaterSP1Schedule, !- Name", @@ -774,7 +771,7 @@ TEST_F(EnergyPlusFixture, HPWHEnergyBalance) state->dataWaterThermalTanks->mdotAir = 0.0993699992873531; int GlycolIndex = 0; - const Real64 Cp = FluidProperties::GetSpecificHeatGlycol(*state, Water, Tank.TankTemp, GlycolIndex, "HPWHEnergyBalance"); + const Real64 Cp = Fluid::GetSpecificHeatGlycol(*state, Fluid::Water, Tank.TankTemp, GlycolIndex, "HPWHEnergyBalance"); Tank.CalcHeatPumpWaterHeater(*state, false); @@ -2019,7 +2016,7 @@ TEST_F(EnergyPlusFixture, StratifiedTankCalc) auto &node = Tank.Node[i]; TankNodeEnergy += node.Mass * (NodeTemps[i] - PrevNodeTemps[i]); } - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(*state, "WATER", 60.0, DummyIndex, "StratifiedTankCalcNoDraw"); + Real64 Cp = Fluid::GetSpecificHeatGlycol(*state, "WATER", 60.0, DummyIndex, "StratifiedTankCalcNoDraw"); TankNodeEnergy *= Cp; EXPECT_NEAR(Tank.NetHeatTransferRate * state->dataHVACGlobal->TimeStepSysSec, TankNodeEnergy, fabs(TankNodeEnergy * 0.0001)); @@ -2158,7 +2155,7 @@ TEST_F(EnergyPlusFixture, StratifiedTankSourceFlowRateCalc) Tank.SourceMassFlowRate = 6.30901964e-5 * 997; // 1 gal/min int DummyIndex = 1; - Real64 Cp = FluidProperties::GetSpecificHeatGlycol(*state, "WATER", 60.0, DummyIndex, "StratifiedTankCalcNoDraw"); + Real64 Cp = Fluid::GetSpecificHeatGlycol(*state, "WATER", 60.0, DummyIndex, "StratifiedTankCalcNoDraw"); Tank.CalcWaterThermalTankStratified(*state); @@ -3135,7 +3132,7 @@ TEST_F(EnergyPlusFixture, Desuperheater_Multispeed_Coil_Test) TEST_F(EnergyPlusFixture, MixedTankAlternateSchedule) { - using FluidProperties::GetDensityGlycol; + using Fluid::GetDensityGlycol; std::string const idf_objects = delimited_string({ "Schedule:Constant, Inlet Water Temperature, , 10.0;", @@ -3223,7 +3220,7 @@ TEST_F(EnergyPlusFixture, MixedTankAlternateSchedule) // Source side is in the demand side of the plant loop Tank.SrcSidePlantLoc.loopSideNum = EnergyPlus::DataPlant::LoopSideLocation::Demand; Tank.SavedSourceOutletTemp = 60.0; - rho = GetDensityGlycol(*state, "Water", Tank.TankTemp, WaterIndex, "MixedTankAlternateSchedule"); + rho = Fluid::GetDensityGlycol(*state, "Water", Tank.TankTemp, WaterIndex, "MixedTankAlternateSchedule"); // Set the available max flow rates for tank and node Tank.PlantSourceMassFlowRateMax = Tank.SourceDesignVolFlowRate * rho; diff --git a/tst/EnergyPlus/unit/WaterToAirHeatPump.unit.cc b/tst/EnergyPlus/unit/WaterToAirHeatPump.unit.cc index a54a3d35aec..7a3b1236092 100644 --- a/tst/EnergyPlus/unit/WaterToAirHeatPump.unit.cc +++ b/tst/EnergyPlus/unit/WaterToAirHeatPump.unit.cc @@ -137,61 +137,61 @@ TEST_F(EnergyPlusFixture, WaterToAirHeatPumpTest_SimWaterToAir) ASSERT_TRUE(process_idf(idf_objects)); - state->dataFluidProps->RefrigData.allocate(1); - state->dataFluidProps->RefrigData(1).Name = "R22"; - state->dataFluidProps->RefrigData(1).PsLowTempIndex = 1; - state->dataFluidProps->RefrigData(1).PsHighTempIndex = 2; - state->dataFluidProps->RefrigData(1).PsTemps.allocate(2); - state->dataFluidProps->RefrigData(1).PsTemps(1) = -157.42; - state->dataFluidProps->RefrigData(1).PsTemps(2) = 96.145; - state->dataFluidProps->RefrigData(1).PsValues.allocate(2); - state->dataFluidProps->RefrigData(1).PsValues(1) = 0.3795; - state->dataFluidProps->RefrigData(1).PsValues(2) = 4990000.0; - - state->dataFluidProps->RefrigData(1).HfLowTempIndex = 1; - state->dataFluidProps->RefrigData(1).HfHighTempIndex = 2; - state->dataFluidProps->RefrigData(1).PsLowPresIndex = 1; - state->dataFluidProps->RefrigData(1).PsHighPresIndex = 2; - state->dataFluidProps->RefrigData(1).HTemps.allocate(2); - state->dataFluidProps->RefrigData(1).HfValues.allocate(2); - state->dataFluidProps->RefrigData(1).HfgValues.allocate(2); - - state->dataFluidProps->RefrigData(1).HTemps(1) = -157.42; - state->dataFluidProps->RefrigData(1).HTemps(2) = 96.145; - state->dataFluidProps->RefrigData(1).HfValues(1) = 29600.0; - state->dataFluidProps->RefrigData(1).HfValues(2) = 366900.0; - state->dataFluidProps->RefrigData(1).HfgValues(1) = 332700.0; - state->dataFluidProps->RefrigData(1).HfgValues(2) = 366900.0; - state->dataFluidProps->RefrigData(1).NumSuperTempPts = 2; - state->dataFluidProps->RefrigData(1).NumSuperPressPts = 2; - state->dataFluidProps->RefrigData(1).SHTemps.allocate(2); - state->dataFluidProps->RefrigData(1).SHPress.allocate(2); - state->dataFluidProps->RefrigData(1).SHTemps(1) = -157.15; - state->dataFluidProps->RefrigData(1).SHTemps(2) = 152.85; - state->dataFluidProps->RefrigData(1).SHPress(1) = 0.4043; - state->dataFluidProps->RefrigData(1).SHPress(2) = 16500000.0; - state->dataFluidProps->RefrigData(1).HshValues.allocate(2, 2); - state->dataFluidProps->RefrigData(1).HshValues(1, 1) = 332800.0; - state->dataFluidProps->RefrigData(1).HshValues(1, 2) = 537000.0; - state->dataFluidProps->RefrigData(1).HshValues(2, 1) = 332800.0; - state->dataFluidProps->RefrigData(1).HshValues(2, 2) = 537000.0; - state->dataFluidProps->RefrigData(1).RhoshValues.allocate(2, 2); - state->dataFluidProps->RefrigData(1).RhoshValues(1, 1) = 0.00003625; - state->dataFluidProps->RefrigData(1).RhoshValues(1, 2) = 0.0; - state->dataFluidProps->RefrigData(1).RhoshValues(2, 1) = 0.00003625; - state->dataFluidProps->RefrigData(1).RhoshValues(2, 2) = 0.0; - - state->dataFluidProps->RefrigData(1).RhofLowTempIndex = 1; - state->dataFluidProps->RefrigData(1).RhofHighTempIndex = 2; - state->dataFluidProps->RefrigData(1).RhoTemps.allocate(2); - state->dataFluidProps->RefrigData(1).RhoTemps(1) = -157.42; - state->dataFluidProps->RefrigData(1).RhoTemps(2) = 96.145; - state->dataFluidProps->RefrigData(1).RhofValues.allocate(2); - state->dataFluidProps->RefrigData(1).RhofValues(1) = 1721.0; - state->dataFluidProps->RefrigData(1).RhofValues(2) = 523.8; - state->dataFluidProps->RefrigData(1).RhofgValues.allocate(2); - state->dataFluidProps->RefrigData(1).RhofgValues(1) = 0.341; - state->dataFluidProps->RefrigData(1).RhofgValues(2) = 523.8; + state->dataFluid->RefrigData.allocate(1); + state->dataFluid->RefrigData(1).Name = "R22"; + state->dataFluid->RefrigData(1).PsLowTempIndex = 1; + state->dataFluid->RefrigData(1).PsHighTempIndex = 2; + state->dataFluid->RefrigData(1).PsTemps.allocate(2); + state->dataFluid->RefrigData(1).PsTemps(1) = -157.42; + state->dataFluid->RefrigData(1).PsTemps(2) = 96.145; + state->dataFluid->RefrigData(1).PsValues.allocate(2); + state->dataFluid->RefrigData(1).PsValues(1) = 0.3795; + state->dataFluid->RefrigData(1).PsValues(2) = 4990000.0; + + state->dataFluid->RefrigData(1).HfLowTempIndex = 1; + state->dataFluid->RefrigData(1).HfHighTempIndex = 2; + state->dataFluid->RefrigData(1).PsLowPresIndex = 1; + state->dataFluid->RefrigData(1).PsHighPresIndex = 2; + state->dataFluid->RefrigData(1).HTemps.allocate(2); + state->dataFluid->RefrigData(1).HfValues.allocate(2); + state->dataFluid->RefrigData(1).HfgValues.allocate(2); + + state->dataFluid->RefrigData(1).HTemps(1) = -157.42; + state->dataFluid->RefrigData(1).HTemps(2) = 96.145; + state->dataFluid->RefrigData(1).HfValues(1) = 29600.0; + state->dataFluid->RefrigData(1).HfValues(2) = 366900.0; + state->dataFluid->RefrigData(1).HfgValues(1) = 332700.0; + state->dataFluid->RefrigData(1).HfgValues(2) = 366900.0; + state->dataFluid->RefrigData(1).NumSuperTempPts = 2; + state->dataFluid->RefrigData(1).NumSuperPressPts = 2; + state->dataFluid->RefrigData(1).SHTemps.allocate(2); + state->dataFluid->RefrigData(1).SHPress.allocate(2); + state->dataFluid->RefrigData(1).SHTemps(1) = -157.15; + state->dataFluid->RefrigData(1).SHTemps(2) = 152.85; + state->dataFluid->RefrigData(1).SHPress(1) = 0.4043; + state->dataFluid->RefrigData(1).SHPress(2) = 16500000.0; + state->dataFluid->RefrigData(1).HshValues.allocate(2, 2); + state->dataFluid->RefrigData(1).HshValues(1, 1) = 332800.0; + state->dataFluid->RefrigData(1).HshValues(1, 2) = 537000.0; + state->dataFluid->RefrigData(1).HshValues(2, 1) = 332800.0; + state->dataFluid->RefrigData(1).HshValues(2, 2) = 537000.0; + state->dataFluid->RefrigData(1).RhoshValues.allocate(2, 2); + state->dataFluid->RefrigData(1).RhoshValues(1, 1) = 0.00003625; + state->dataFluid->RefrigData(1).RhoshValues(1, 2) = 0.0; + state->dataFluid->RefrigData(1).RhoshValues(2, 1) = 0.00003625; + state->dataFluid->RefrigData(1).RhoshValues(2, 2) = 0.0; + + state->dataFluid->RefrigData(1).RhofLowTempIndex = 1; + state->dataFluid->RefrigData(1).RhofHighTempIndex = 2; + state->dataFluid->RefrigData(1).RhoTemps.allocate(2); + state->dataFluid->RefrigData(1).RhoTemps(1) = -157.42; + state->dataFluid->RefrigData(1).RhoTemps(2) = 96.145; + state->dataFluid->RefrigData(1).RhofValues.allocate(2); + state->dataFluid->RefrigData(1).RhofValues(1) = 1721.0; + state->dataFluid->RefrigData(1).RhofValues(2) = 523.8; + state->dataFluid->RefrigData(1).RhofgValues.allocate(2); + state->dataFluid->RefrigData(1).RhofgValues(1) = 0.341; + state->dataFluid->RefrigData(1).RhofgValues(2) = 523.8; GetWatertoAirHPInput(*state); @@ -306,5 +306,5 @@ TEST_F(EnergyPlusFixture, WaterToAirHeatPumpTest_SimWaterToAir) // clean up state->dataWaterToAirHeatPump->WatertoAirHP.deallocate(); - state->dataFluidProps->RefrigData.deallocate(); + state->dataFluid->RefrigData.deallocate(); } From 047735d8d7ec97c7dff19c22f433eed369e21004 Mon Sep 17 00:00:00 2001 From: Rick Strand Date: Wed, 10 Jul 2024 06:30:08 -0500 Subject: [PATCH 28/68] 10299 Split GetShadowingInput This commit splits GetShadowingInput into two separate routines and will test to see if the split has been done correctly. The split is important because the actual getting of the input needs to be moved up in the order of calls to resolve this defect, but some of the processing needs to stay where it is at because it needs zones and surfaces read in. --- src/EnergyPlus/DataSystemVariables.hh | 5 + src/EnergyPlus/SolarShading.cc | 159 ++++++++++++----------- src/EnergyPlus/SolarShading.hh | 2 + tst/EnergyPlus/unit/SolarShading.unit.cc | 2 + 4 files changed, 92 insertions(+), 76 deletions(-) diff --git a/src/EnergyPlus/DataSystemVariables.hh b/src/EnergyPlus/DataSystemVariables.hh index 7de50eec237..156d628ab01 100644 --- a/src/EnergyPlus/DataSystemVariables.hh +++ b/src/EnergyPlus/DataSystemVariables.hh @@ -112,6 +112,11 @@ struct SystemVarsData : BaseGlobalStruct bool ReportExtShadingSunlitFrac = false; // when true, the sunlit fraction for all surfaces are exported as a csv format output bool DisableGroupSelfShading = false; // when true, defined shadowing surfaces group is ignored when calculating sunlit fraction bool DisableAllSelfShading = false; // when true, all external shadowing surfaces is ignored when calculating sunlit fraction + bool DisableSelfShadingWithinGroup = false; + bool DisableSelfShadingBetweenGroup = false; + + int shadingGroupsNum = 0; // number of shading groups + Array1D_string zoneName; // array of zone names in user input bool TrackAirLoopEnvFlag = false; // If TRUE generates a file with runtime statistics for each HVAC // controller on each air loop diff --git a/src/EnergyPlus/SolarShading.cc b/src/EnergyPlus/SolarShading.cc index adbeb77c6ce..be6f9f9ebc4 100644 --- a/src/EnergyPlus/SolarShading.cc +++ b/src/EnergyPlus/SolarShading.cc @@ -197,6 +197,7 @@ void InitSolarCalculations(EnergyPlusData &state) if (state.dataSolarShading->GetInputFlag) { checkShadingSurfaceSchedules(state); GetShadowingInput(state); + processShadowingInput(state); state.dataSolarShading->GetInputFlag = false; state.dataSolarShading->MaxHCV = (((max(15, state.dataSurface->MaxVerticesPerSurface) + 16) / 16) * 16) - 1; // Assure MaxHCV+1 is multiple of 16 for 128 B alignment @@ -629,30 +630,11 @@ void GetShadowingInput(EnergyPlusData &state) state.dataIPShortCut->cAlphaArgs(aNum) = "No"; state.dataSysVars->ReportExtShadingSunlitFrac = false; } - if (state.dataSysVars->shadingMethod == ShadingMethod::Imported) { - int ExtShadingSchedNum; - for (int SurfNum = 1; SurfNum <= state.dataSurface->TotSurfaces; ++SurfNum) { - ExtShadingSchedNum = ScheduleManager::GetScheduleIndex(state, state.dataSurface->Surface(SurfNum).Name + "_shading"); - if (ExtShadingSchedNum != 0) { - state.dataSurface->Surface(SurfNum).SurfSchedExternalShadingFrac = true; - state.dataSurface->Surface(SurfNum).SurfExternalShadingSchInd = ExtShadingSchedNum; - } else { - ShowWarningError(state, - format("{}: sunlit fraction schedule not found for {} when using ImportedShading.", - cCurrentModuleObject, - state.dataSurface->Surface(SurfNum).Name)); - ShowContinueError(state, "These values are set to 1.0."); - } - } - } - - bool DisableSelfShadingWithinGroup = false; - bool DisableSelfShadingBetweenGroup = false; aNum++; if (NumAlphas >= aNum) { if (Util::SameString(state.dataIPShortCut->cAlphaArgs(aNum), "Yes")) { - DisableSelfShadingWithinGroup = true; + state.dataSysVars->DisableSelfShadingWithinGroup = true; state.dataIPShortCut->cAlphaArgs(aNum) = "Yes"; } else if (Util::SameString(state.dataIPShortCut->cAlphaArgs(aNum), "No")) { state.dataIPShortCut->cAlphaArgs(aNum) = "No"; @@ -668,7 +650,7 @@ void GetShadowingInput(EnergyPlusData &state) aNum++; if (NumAlphas >= aNum) { if (Util::SameString(state.dataIPShortCut->cAlphaArgs(aNum), "Yes")) { - DisableSelfShadingBetweenGroup = true; + state.dataSysVars->DisableSelfShadingBetweenGroup = true; state.dataIPShortCut->cAlphaArgs(aNum) = "Yes"; } else if (Util::SameString(state.dataIPShortCut->cAlphaArgs(aNum), "No")) { state.dataIPShortCut->cAlphaArgs(aNum) = "No"; @@ -681,66 +663,17 @@ void GetShadowingInput(EnergyPlusData &state) state.dataIPShortCut->cAlphaArgs(aNum) = "No"; } - if (DisableSelfShadingBetweenGroup && DisableSelfShadingWithinGroup) { + if (state.dataSysVars->DisableSelfShadingBetweenGroup && state.dataSysVars->DisableSelfShadingWithinGroup) { state.dataSysVars->DisableAllSelfShading = true; - } else if (DisableSelfShadingBetweenGroup || DisableSelfShadingWithinGroup) { + } else if (state.dataSysVars->DisableSelfShadingBetweenGroup || state.dataSysVars->DisableSelfShadingWithinGroup) { state.dataSysVars->DisableGroupSelfShading = true; } aNum++; - int SurfZoneGroup, CurZoneGroup; - if (state.dataSysVars->DisableGroupSelfShading) { - Array1D_int DisableSelfShadingGroups; - int NumOfShadingGroups; - if (NumAlphas >= aNum) { - // Read all shading groups - NumOfShadingGroups = NumAlphas - (aNum - 1); - DisableSelfShadingGroups.allocate(NumOfShadingGroups); - for (int i = 1; i <= NumOfShadingGroups; i++) { - Found = Util::FindItemInList( - state.dataIPShortCut->cAlphaArgs(i + (aNum - 1)), state.dataHeatBal->ZoneList, state.dataHeatBal->NumOfZoneLists); - if (Found != 0) DisableSelfShadingGroups(i) = Found; - } - - for (int SurfNum = 1; SurfNum <= state.dataSurface->TotSurfaces; SurfNum++) { - if (state.dataSurface->Surface(SurfNum).ExtBoundCond == 0) { // Loop through all exterior surfaces - SurfZoneGroup = 0; - // Check the shading zone group of each exterior surface - for (int ZoneGroupLoop = 1; ZoneGroupLoop <= NumOfShadingGroups; ZoneGroupLoop++) { // Loop through all defined shading groups - CurZoneGroup = DisableSelfShadingGroups(ZoneGroupLoop); - for (int ZoneNum = 1; ZoneNum <= state.dataHeatBal->ZoneList(CurZoneGroup).NumOfZones; - ZoneNum++) { // Loop through all zones in the zone list - if (state.dataSurface->Surface(SurfNum).Zone == state.dataHeatBal->ZoneList(CurZoneGroup).Zone(ZoneNum)) { - SurfZoneGroup = CurZoneGroup; - break; - } - } - } - // if a surface is not in any zone group, no self shading is disabled for this surface - if (SurfZoneGroup != 0) { - // if DisableSelfShadingWithinGroup, add all zones in the same zone group to the surface's disabled zone list - // if DisableSelfShadingBetweenGroups, add all zones in all other zone groups to the surface's disabled zone list - for (int ZoneGroupLoop = 1; ZoneGroupLoop <= NumOfShadingGroups; ZoneGroupLoop++) { // Loop through all defined shading groups - CurZoneGroup = DisableSelfShadingGroups(ZoneGroupLoop); - if (SurfZoneGroup == CurZoneGroup && DisableSelfShadingWithinGroup) { - for (int ZoneNum = 1; ZoneNum <= state.dataHeatBal->ZoneList(CurZoneGroup).NumOfZones; - ZoneNum++) { // Loop through all zones in the zone list - state.dataSurface->SurfShadowDisabledZoneList(SurfNum).push_back( - state.dataHeatBal->ZoneList(CurZoneGroup).Zone(ZoneNum)); - } - } else if (SurfZoneGroup != CurZoneGroup && DisableSelfShadingBetweenGroup) { - for (int ZoneNum = 1; ZoneNum <= state.dataHeatBal->ZoneList(CurZoneGroup).NumOfZones; ZoneNum++) { - state.dataSurface->SurfShadowDisabledZoneList(SurfNum).push_back( - state.dataHeatBal->ZoneList(CurZoneGroup).Zone(ZoneNum)); - } - } - } - } - } - } - } else { - ShowFatalError(state, "No Shading groups are defined when disabling grouped self shading."); - } + state.dataSysVars->shadingGroupsNum = NumAlphas - (aNum - 1); + state.dataSysVars->zoneName.allocate(state.dataSysVars->shadingGroupsNum); + for (int numZone = 1; numZone <= state.dataSysVars->shadingGroupsNum; ++numZone) { + state.dataSysVars->zoneName(numZone) = state.dataIPShortCut->cAlphaArgs(aNum - 1 + numZone); } if (!state.dataSysVars->DetailedSolarTimestepIntegration && state.dataSurface->ShadingTransmittanceVaries && @@ -797,6 +730,80 @@ void GetShadowingInput(EnergyPlusData &state) state.dataIPShortCut->cAlphaArgs(7)); } +void processShadowingInput(EnergyPlusData &state) +{ + // all shadow input processing that needed zones and surfaces to already be read into data (part of fix for Defect #10299) + + if (state.dataSysVars->shadingMethod == DataSystemVariables::ShadingMethod::Imported) { + int ExtShadingSchedNum; + for (int SurfNum = 1; SurfNum <= state.dataSurface->TotSurfaces; ++SurfNum) { + ExtShadingSchedNum = ScheduleManager::GetScheduleIndex(state, state.dataSurface->Surface(SurfNum).Name + "_shading"); + if (ExtShadingSchedNum != 0) { + state.dataSurface->Surface(SurfNum).SurfSchedExternalShadingFrac = true; + state.dataSurface->Surface(SurfNum).SurfExternalShadingSchInd = ExtShadingSchedNum; + } else { + ShowWarningError(state, + format("processShadowingInput: sunlit fraction schedule not found for {} when using ImportedShading.", + state.dataSurface->Surface(SurfNum).Name)); + ShowContinueError(state, "These values are set to 1.0."); + } + } + } + + int SurfZoneGroup, CurZoneGroup; + int Found = 0; + if (state.dataSysVars->DisableGroupSelfShading) { + Array1D_int DisableSelfShadingGroups; + int NumOfShadingGroups = state.dataSysVars->shadingGroupsNum; + if (NumOfShadingGroups > 0) { + DisableSelfShadingGroups.allocate(NumOfShadingGroups); + for (int i = 1; i <= NumOfShadingGroups; i++) { + Found = Util::FindItemInList(state.dataSysVars->zoneName(i), state.dataHeatBal->ZoneList, state.dataHeatBal->NumOfZoneLists); + if (Found != 0) DisableSelfShadingGroups(i) = Found; + } + + for (int SurfNum = 1; SurfNum <= state.dataSurface->TotSurfaces; SurfNum++) { + if (state.dataSurface->Surface(SurfNum).ExtBoundCond == 0) { // Loop through all exterior surfaces + SurfZoneGroup = 0; + // Check the shading zone group of each exterior surface + for (int ZoneGroupLoop = 1; ZoneGroupLoop <= NumOfShadingGroups; ZoneGroupLoop++) { // Loop through all defined shading groups + CurZoneGroup = DisableSelfShadingGroups(ZoneGroupLoop); + for (int ZoneNum = 1; ZoneNum <= state.dataHeatBal->ZoneList(CurZoneGroup).NumOfZones; + ZoneNum++) { // Loop through all zones in the zone list + if (state.dataSurface->Surface(SurfNum).Zone == state.dataHeatBal->ZoneList(CurZoneGroup).Zone(ZoneNum)) { + SurfZoneGroup = CurZoneGroup; + break; + } + } + } + // if a surface is not in any zone group, no self shading is disabled for this surface + if (SurfZoneGroup != 0) { + // if DisableSelfShadingWithinGroup, add all zones in the same zone group to the surface's disabled zone list + // if DisableSelfShadingBetweenGroups, add all zones in all other zone groups to the surface's disabled zone list + for (int ZoneGroupLoop = 1; ZoneGroupLoop <= NumOfShadingGroups; ZoneGroupLoop++) { // Loop through all defined shading groups + CurZoneGroup = DisableSelfShadingGroups(ZoneGroupLoop); + if (SurfZoneGroup == CurZoneGroup && state.dataSysVars->DisableSelfShadingWithinGroup) { + for (int ZoneNum = 1; ZoneNum <= state.dataHeatBal->ZoneList(CurZoneGroup).NumOfZones; + ZoneNum++) { // Loop through all zones in the zone list + state.dataSurface->SurfShadowDisabledZoneList(SurfNum).push_back( + state.dataHeatBal->ZoneList(CurZoneGroup).Zone(ZoneNum)); + } + } else if (SurfZoneGroup != CurZoneGroup && state.dataSysVars->DisableSelfShadingBetweenGroup) { + for (int ZoneNum = 1; ZoneNum <= state.dataHeatBal->ZoneList(CurZoneGroup).NumOfZones; ZoneNum++) { + state.dataSurface->SurfShadowDisabledZoneList(SurfNum).push_back( + state.dataHeatBal->ZoneList(CurZoneGroup).Zone(ZoneNum)); + } + } + } + } + } + } + } else { + ShowFatalError(state, "No Shading groups are defined when disabling grouped self shading."); + } + } +} + void checkScheduledSurfacePresent(EnergyPlusData &state) { // User has chosen "Scheduled" for sunlit fraction so check to see which surfaces don't have a schedule diff --git a/src/EnergyPlus/SolarShading.hh b/src/EnergyPlus/SolarShading.hh index cb1dba901c0..5e3d62e5f41 100644 --- a/src/EnergyPlus/SolarShading.hh +++ b/src/EnergyPlus/SolarShading.hh @@ -99,6 +99,8 @@ namespace SolarShading { void GetShadowingInput(EnergyPlusData &state); + void processShadowingInput(EnergyPlusData &state); + void checkScheduledSurfacePresent(EnergyPlusData &state); void AllocateModuleArrays(EnergyPlusData &state); diff --git a/tst/EnergyPlus/unit/SolarShading.unit.cc b/tst/EnergyPlus/unit/SolarShading.unit.cc index dc0d2d47e29..c53be169dae 100644 --- a/tst/EnergyPlus/unit/SolarShading.unit.cc +++ b/tst/EnergyPlus/unit/SolarShading.unit.cc @@ -1484,6 +1484,7 @@ TEST_F(EnergyPlusFixture, SolarShadingTest_DisableGroupSelfShading) compare_err_stream(""); // just for debugging SolarShading::GetShadowingInput(*state); + SolarShading::processShadowingInput(*state); for (int SurfNum = 1; SurfNum <= state->dataSurface->TotSurfaces; SurfNum++) { if (state->dataSurface->Surface(SurfNum).ExtBoundCond == 0 && state->dataSurface->Surface(SurfNum).Zone != 0) { @@ -3887,6 +3888,7 @@ TEST_F(EnergyPlusFixture, SolarShadingTest_Warn_Pixel_Count_and_TM_Schedule) EXPECT_EQ(state->dataErrTracking->TotalSevereErrors, 0); SolarShading::GetShadowingInput(*state); + SolarShading::processShadowingInput(*state); #ifdef EP_NO_OPENGL EXPECT_EQ(state->dataErrTracking->TotalWarningErrors, 1); From 01c2a82ab095db4d40d46f191ce68deb02374816 Mon Sep 17 00:00:00 2001 From: Lixing Gu Date: Wed, 10 Jul 2024 15:37:12 -0400 Subject: [PATCH 29/68] Address comments and cleanup --- src/EnergyPlus/FanCoilUnits.cc | 22 ---- src/EnergyPlus/FanCoilUnits.hh | 2 - src/EnergyPlus/PurchasedAirManager.cc | 15 --- src/EnergyPlus/PurchasedAirManager.hh | 2 - src/EnergyPlus/UnitHeater.cc | 33 ------ src/EnergyPlus/UnitHeater.hh | 4 - src/EnergyPlus/VentilatedSlab.cc | 31 ------ src/EnergyPlus/VentilatedSlab.hh | 4 - src/EnergyPlus/WaterThermalTanks.cc | 30 ------ src/EnergyPlus/WaterThermalTanks.hh | 4 - src/EnergyPlus/ZoneDehumidifier.cc | 30 ------ src/EnergyPlus/ZoneDehumidifier.hh | 4 - .../unit/RoomAirflowNetwork.unit.cc | 102 ++++++++---------- 13 files changed, 44 insertions(+), 239 deletions(-) diff --git a/src/EnergyPlus/FanCoilUnits.cc b/src/EnergyPlus/FanCoilUnits.cc index 048abf9b95e..1e05e8f7056 100644 --- a/src/EnergyPlus/FanCoilUnits.cc +++ b/src/EnergyPlus/FanCoilUnits.cc @@ -4119,28 +4119,6 @@ namespace FanCoilUnits { return 0; } - int GetFanCoilAirInNode(EnergyPlusData &state, int const FanCoilNum) - { - - // FUNCTION INFORMATION: - // AUTHOR B Griffith - // DATE WRITTEN Dec 2006 - - // PURPOSE OF THIS FUNCTION: - // lookup function for OA inlet node for ventilation rate reporting - - if (state.dataFanCoilUnits->GetFanCoilInputFlag) { - GetFanCoilUnits(state); - state.dataFanCoilUnits->GetFanCoilInputFlag = false; - } - - if (FanCoilNum > 0 && FanCoilNum <= state.dataFanCoilUnits->NumFanCoils) { - return state.dataFanCoilUnits->FanCoil(FanCoilNum).AirInNode; - } - - return 0; - } - int GetFanCoilOutAirNode(EnergyPlusData &state, int const FanCoilNum) { diff --git a/src/EnergyPlus/FanCoilUnits.hh b/src/EnergyPlus/FanCoilUnits.hh index 5dce466105b..6f09a1523fa 100644 --- a/src/EnergyPlus/FanCoilUnits.hh +++ b/src/EnergyPlus/FanCoilUnits.hh @@ -321,8 +321,6 @@ namespace FanCoilUnits { int GetFanCoilZoneInletAirNode(EnergyPlusData &state, int const FanCoilNum); - int GetFanCoilAirInNode(EnergyPlusData &state, int const FanCoilNum); - int GetFanCoilOutAirNode(EnergyPlusData &state, int FanCoilNum); int GetFanCoilReturnAirNode(EnergyPlusData &state, int FanCoilNum); diff --git a/src/EnergyPlus/PurchasedAirManager.cc b/src/EnergyPlus/PurchasedAirManager.cc index 5b1d719f2a2..e3b58a930da 100644 --- a/src/EnergyPlus/PurchasedAirManager.cc +++ b/src/EnergyPlus/PurchasedAirManager.cc @@ -3318,21 +3318,6 @@ int GetPurchasedAirReturnAirNode(EnergyPlusData &state, int const PurchAirNum) return GetPurchasedAirReturnAirNode; } -int GetPurchasedAirZoneExhaustAirNode(EnergyPlusData &state, int PurchAirNum) -{ - if (state.dataPurchasedAirMgr->GetPurchAirInputFlag) { - GetPurchasedAir(state); - state.dataPurchasedAirMgr->GetPurchAirInputFlag = false; - } - - int GetPurchasedAirZoneExhaustAirNode = 0; - if (PurchAirNum > 0 && PurchAirNum <= state.dataPurchasedAirMgr->NumPurchAir) { - GetPurchasedAirZoneExhaustAirNode = state.dataPurchasedAirMgr->PurchAir(PurchAirNum).ZoneExhaustAirNodeNum; - } - - return GetPurchasedAirZoneExhaustAirNode; -} - int getPurchasedAirIndex(EnergyPlusData &state, std::string_view PurchAirName, bool &errFlag) { if (state.dataPurchasedAirMgr->GetPurchAirInputFlag) { diff --git a/src/EnergyPlus/PurchasedAirManager.hh b/src/EnergyPlus/PurchasedAirManager.hh index db21045584b..1058b9953c1 100644 --- a/src/EnergyPlus/PurchasedAirManager.hh +++ b/src/EnergyPlus/PurchasedAirManager.hh @@ -379,8 +379,6 @@ namespace PurchasedAirManager { int GetPurchasedAirReturnAirNode(EnergyPlusData &state, int PurchAirNum); - int GetPurchasedAirZoneExhaustAirNode(EnergyPlusData &state, int PurchAirNum); - int getPurchasedAirIndex(EnergyPlusData &state, std::string_view PurchAirName, bool &errFlag); Real64 GetPurchasedAirMixedAirTemp(EnergyPlusData &state, int PurchAirNum); diff --git a/src/EnergyPlus/UnitHeater.cc b/src/EnergyPlus/UnitHeater.cc index 127fe2079bc..e1ced26febe 100644 --- a/src/EnergyPlus/UnitHeater.cc +++ b/src/EnergyPlus/UnitHeater.cc @@ -1894,39 +1894,6 @@ namespace UnitHeater { } } - int GetUnitHeaterAirOutletNode(EnergyPlusData &state, int UnitHeaterNum) - { - // Return value - int GetUnitHeaterAirOutletNode = 0; - - if (state.dataUnitHeaters->GetUnitHeaterInputFlag) { - GetUnitHeaterInput(state); - state.dataUnitHeaters->GetUnitHeaterInputFlag = false; - } - - if (UnitHeaterNum > 0 && UnitHeaterNum <= state.dataUnitHeaters->NumOfUnitHeats) { - GetUnitHeaterAirOutletNode = state.dataUnitHeaters->UnitHeat(UnitHeaterNum).AirOutNode; - } - - return GetUnitHeaterAirOutletNode; - } - - int GetUnitHeaterAirInletNode(EnergyPlusData &state, int UnitHeaterNum) - { - int GetUnitHeaterAirInletNode = 0; - - if (state.dataUnitHeaters->GetUnitHeaterInputFlag) { - GetUnitHeaterInput(state); - state.dataUnitHeaters->GetUnitHeaterInputFlag = false; - } - - if (UnitHeaterNum > 0 && UnitHeaterNum <= state.dataUnitHeaters->NumOfUnitHeats) { - GetUnitHeaterAirInletNode = state.dataUnitHeaters->UnitHeat(UnitHeaterNum).AirInNode; - } - - return GetUnitHeaterAirInletNode; - } - int getUnitHeaterIndex(EnergyPlusData &state, std::string_view CompName, bool &errFlag) { if (state.dataUnitHeaters->GetUnitHeaterInputFlag) { diff --git a/src/EnergyPlus/UnitHeater.hh b/src/EnergyPlus/UnitHeater.hh index e84f7790d14..a2158cb8b0e 100644 --- a/src/EnergyPlus/UnitHeater.hh +++ b/src/EnergyPlus/UnitHeater.hh @@ -202,10 +202,6 @@ namespace UnitHeater { void ReportUnitHeater(EnergyPlusData &state, int const UnitHeatNum); // Unit index in unit heater array - int GetUnitHeaterAirOutletNode(EnergyPlusData &state, int UnitHeatNum); - - int GetUnitHeaterAirInletNode(EnergyPlusData &state, int UnitHeatNum); - int getUnitHeaterIndex(EnergyPlusData &state, std::string_view CompName, bool &errFlag); } // namespace UnitHeater diff --git a/src/EnergyPlus/VentilatedSlab.cc b/src/EnergyPlus/VentilatedSlab.cc index f132ee63d8e..650530ee64b 100644 --- a/src/EnergyPlus/VentilatedSlab.cc +++ b/src/EnergyPlus/VentilatedSlab.cc @@ -4735,37 +4735,6 @@ namespace VentilatedSlab { } } - int GetVentilatedSlabReturnAirNode(EnergyPlusData &state, int const VentSlabNum) - { - int ReturnAirNode = 0; - if (state.dataVentilatedSlab->GetInputFlag) { - GetVentilatedSlabInput(state); - state.dataVentilatedSlab->GetInputFlag = false; - } - - if (VentSlabNum > 0 && VentSlabNum <= state.dataVentilatedSlab->NumOfVentSlabs) { - ReturnAirNode = state.dataVentilatedSlab->VentSlab(VentSlabNum).ReturnAirNode; - } - - return ReturnAirNode; - } - - int GetVentilatedSlabZoneAirInNode(EnergyPlusData &state, int const VentSlabNum) - { - int ZoneAirInNode = 0; - - if (state.dataVentilatedSlab->GetInputFlag) { - GetVentilatedSlabInput(state); - state.dataVentilatedSlab->GetInputFlag = false; - } - - if (VentSlabNum > 0 && VentSlabNum <= state.dataVentilatedSlab->NumOfVentSlabs) { - ZoneAirInNode = state.dataVentilatedSlab->VentSlab(VentSlabNum).ZoneAirInNode; - } - - return ZoneAirInNode; - } - int getVentilatedSlabIndex(EnergyPlusData &state, std::string_view CompName, bool &errFlag) { if (state.dataVentilatedSlab->GetInputFlag) { diff --git a/src/EnergyPlus/VentilatedSlab.hh b/src/EnergyPlus/VentilatedSlab.hh index f20180c8602..c121528a7f5 100644 --- a/src/EnergyPlus/VentilatedSlab.hh +++ b/src/EnergyPlus/VentilatedSlab.hh @@ -383,10 +383,6 @@ namespace VentilatedSlab { void ReportVentilatedSlab(EnergyPlusData &state, int const Item); // Index for the ventilated slab under consideration within the derived types - int GetVentilatedSlabReturnAirNode(EnergyPlusData &state, int const VentSlabNum); - - int GetVentilatedSlabZoneAirInNode(EnergyPlusData &state, int const VentSlabNum); - int getVentilatedSlabIndex(EnergyPlusData &state, std::string_view CompName, bool &errFlag); //***************************************************************************************** diff --git a/src/EnergyPlus/WaterThermalTanks.cc b/src/EnergyPlus/WaterThermalTanks.cc index bdea7fce4c8..02ed3f8d309 100644 --- a/src/EnergyPlus/WaterThermalTanks.cc +++ b/src/EnergyPlus/WaterThermalTanks.cc @@ -12465,36 +12465,6 @@ bool GetHeatPumpWaterHeaterNodeNumber(EnergyPlusData &state, int const NodeNumbe return HeatPumpWaterHeaterNodeException; } -int GetHeatPumpWaterHeaterAirInletNodeNum(EnergyPlusData &state, int HPNum) -{ - int HeatPumpWaterHeaterAirInletNodeNum = 0; - if (state.dataWaterThermalTanks->getWaterThermalTankInputFlag) { - GetWaterThermalTankInput(state); - state.dataWaterThermalTanks->getWaterThermalTankInputFlag = false; - } - - if (HPNum > 0 && HPNum <= state.dataWaterThermalTanks->numHeatPumpWaterHeater) { - HeatPumpWaterHeaterAirInletNodeNum = state.dataWaterThermalTanks->HPWaterHeater(HPNum).HeatPumpAirInletNode; - } - - return HeatPumpWaterHeaterAirInletNodeNum; -} - -int GetHeatPumpWaterHeaterAirOutletNodeNum(EnergyPlusData &state, int HPNum) -{ - int HeatPumpWaterHeaterAirOutletNodeNum = 0; - if (state.dataWaterThermalTanks->getWaterThermalTankInputFlag) { - GetWaterThermalTankInput(state); - state.dataWaterThermalTanks->getWaterThermalTankInputFlag = false; - } - - if (HPNum > 0 && HPNum <= state.dataWaterThermalTanks->numHeatPumpWaterHeater) { - HeatPumpWaterHeaterAirOutletNodeNum = state.dataWaterThermalTanks->HPWaterHeater(HPNum).HeatPumpAirOutletNode; - } - - return HeatPumpWaterHeaterAirOutletNodeNum; -} - int getHeatPumpWaterHeaterIndex(EnergyPlusData &state, std::string_view CompName, bool &errFlag) { if (state.dataWaterThermalTanks->getWaterThermalTankInputFlag) { diff --git a/src/EnergyPlus/WaterThermalTanks.hh b/src/EnergyPlus/WaterThermalTanks.hh index 7ff93332d85..014ba54f05f 100644 --- a/src/EnergyPlus/WaterThermalTanks.hh +++ b/src/EnergyPlus/WaterThermalTanks.hh @@ -988,10 +988,6 @@ namespace WaterThermalTanks { bool GetHeatPumpWaterHeaterNodeNumber(EnergyPlusData &state, int NodeNumber); - int GetHeatPumpWaterHeaterAirInletNodeNum(EnergyPlusData &state, int HPNum); - - int GetHeatPumpWaterHeaterAirOutletNodeNum(EnergyPlusData &state, int HPNum); - int getHeatPumpWaterHeaterIndex(EnergyPlusData &state, std::string_view CompName, bool &errFlag); } // namespace WaterThermalTanks diff --git a/src/EnergyPlus/ZoneDehumidifier.cc b/src/EnergyPlus/ZoneDehumidifier.cc index e21e5f4c887..0eafa52b1ab 100644 --- a/src/EnergyPlus/ZoneDehumidifier.cc +++ b/src/EnergyPlus/ZoneDehumidifier.cc @@ -1179,36 +1179,6 @@ namespace ZoneDehumidifier { return FindZoneDehumidifierNodeNumber; } - int GetZoneDehumidifierAirOutletNodeNum(EnergyPlusData &state, int ZoneDehumidNum) - { - int ZoneDehumidifierAirOutletNodeNum = 0; - if (state.dataZoneDehumidifier->GetInputFlag) { - GetZoneDehumidifierInput(state); - state.dataZoneDehumidifier->GetInputFlag = false; - } - - if (ZoneDehumidNum > 0 && ZoneDehumidNum <= (int)state.dataZoneDehumidifier->ZoneDehumid.size()) { - ZoneDehumidifierAirOutletNodeNum = state.dataZoneDehumidifier->ZoneDehumid(ZoneDehumidNum).AirOutletNodeNum; - } - - return ZoneDehumidifierAirOutletNodeNum; - } - - int GetZoneDehumidifierAirInletNodeNum(EnergyPlusData &state, int ZoneDehumidNum) - { - int ZoneDehumidifierAirInletNodeNum = 0; - if (state.dataZoneDehumidifier->GetInputFlag) { - GetZoneDehumidifierInput(state); - state.dataZoneDehumidifier->GetInputFlag = false; - } - - if (ZoneDehumidNum > 0 && ZoneDehumidNum <= (int)state.dataZoneDehumidifier->ZoneDehumid.size()) { - ZoneDehumidifierAirInletNodeNum = state.dataZoneDehumidifier->ZoneDehumid(ZoneDehumidNum).AirInletNodeNum; - } - - return ZoneDehumidifierAirInletNodeNum; - } - int getZoneDehumidifierIndex(EnergyPlusData &state, std::string_view CompName, bool &errFlag) { if (state.dataZoneDehumidifier->GetInputFlag) { diff --git a/src/EnergyPlus/ZoneDehumidifier.hh b/src/EnergyPlus/ZoneDehumidifier.hh index 57adbfe4d57..b4800340a34 100644 --- a/src/EnergyPlus/ZoneDehumidifier.hh +++ b/src/EnergyPlus/ZoneDehumidifier.hh @@ -153,10 +153,6 @@ namespace ZoneDehumidifier { bool GetZoneDehumidifierNodeNumber(EnergyPlusData &state, int NodeNumber); // Node being tested - int GetZoneDehumidifierAirOutletNodeNum(EnergyPlusData &state, int ZoneDehumidNum); - - int GetZoneDehumidifierAirInletNodeNum(EnergyPlusData &state, int ZoneDehumidNum); - int getZoneDehumidifierIndex(EnergyPlusData &state, std::string_view CompName, bool &errFlag); } // namespace ZoneDehumidifier diff --git a/tst/EnergyPlus/unit/RoomAirflowNetwork.unit.cc b/tst/EnergyPlus/unit/RoomAirflowNetwork.unit.cc index 36709ad80c0..7522f82eb6a 100644 --- a/tst/EnergyPlus/unit/RoomAirflowNetwork.unit.cc +++ b/tst/EnergyPlus/unit/RoomAirflowNetwork.unit.cc @@ -628,9 +628,8 @@ TEST_F(EnergyPlusFixture, RoomAirflowNetwork_CheckEquipName_Test) state->dataHVACVarRefFlow->NumVRFTU = 1; state->dataHVACVarRefFlow->VRFTU(1).Name = EquipName; check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, zoneEquipType); - if (check) { - EXPECT_EQ("SupplyNode", SupplyNodeName); - } + EXPECT_TRUE(check); + EXPECT_EQ("SupplyNode", SupplyNodeName); state->dataLoopNodes->NodeID(1) = "SupplyNode1"; state->dataLoopNodes->NodeID(2) = "ReturnNode1"; @@ -641,9 +640,8 @@ TEST_F(EnergyPlusFixture, RoomAirflowNetwork_CheckEquipName_Test) state->dataHVACStandAloneERV->StandAloneERV(1).SupplyAirInletNode = 1; state->dataHVACStandAloneERV->StandAloneERV(1).Name = EquipName; check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, zoneEquipType); - if (check) { - EXPECT_EQ("SupplyNode1", SupplyNodeName); - } + EXPECT_TRUE(check); + EXPECT_EQ("SupplyNode1", SupplyNodeName); state->dataLoopNodes->NodeID(1) = "SupplyNode2"; state->dataLoopNodes->NodeID(2) = "ReturnNode2"; @@ -655,10 +653,9 @@ TEST_F(EnergyPlusFixture, RoomAirflowNetwork_CheckEquipName_Test) state->dataFanCoilUnits->GetFanCoilInputFlag = false; state->dataFanCoilUnits->FanCoil(EquipIndex).Name = EquipName; check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, zoneEquipType); - if (check) { - EXPECT_EQ("SupplyNode2", SupplyNodeName); - EXPECT_EQ("ReturnNode2", ReturnNodeName); - } + EXPECT_TRUE(check); + EXPECT_EQ("SupplyNode2", SupplyNodeName); + EXPECT_EQ("ReturnNode2", ReturnNodeName); state->dataLoopNodes->NodeID(1) = "SupplyNode3"; state->dataLoopNodes->NodeID(2) = "ReturnNode3"; @@ -670,10 +667,9 @@ TEST_F(EnergyPlusFixture, RoomAirflowNetwork_CheckEquipName_Test) state->dataOutdoorAirUnit->GetOutdoorAirUnitInputFlag = false; state->dataOutdoorAirUnit->OutAirUnit(EquipIndex).Name = EquipName; check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, zoneEquipType); - if (check) { - EXPECT_EQ("SupplyNode3", SupplyNodeName); - EXPECT_EQ("ReturnNode3", ReturnNodeName); - } + EXPECT_TRUE(check); + EXPECT_EQ("SupplyNode3", SupplyNodeName); + EXPECT_EQ("ReturnNode3", ReturnNodeName); state->dataLoopNodes->NodeID(1) = "SupplyNode4"; state->dataLoopNodes->NodeID(2) = "ReturnNode4"; @@ -686,10 +682,9 @@ TEST_F(EnergyPlusFixture, RoomAirflowNetwork_CheckEquipName_Test) state->dataUnitarySystems->unitarySys[EquipIndex - 1].AirOutNode = 1; state->dataUnitarySystems->unitarySys[EquipIndex - 1].AirInNode = 2; check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, zoneEquipType); - if (check) { - EXPECT_EQ("SupplyNode4", SupplyNodeName); - EXPECT_EQ("ReturnNode4", ReturnNodeName); - } + EXPECT_TRUE(check); + EXPECT_EQ("SupplyNode4", SupplyNodeName); + EXPECT_EQ("ReturnNode4", ReturnNodeName); state->dataLoopNodes->NodeID(1) = "SupplyNode5"; state->dataLoopNodes->NodeID(2) = "ReturnNode5"; @@ -702,10 +697,10 @@ TEST_F(EnergyPlusFixture, RoomAirflowNetwork_CheckEquipName_Test) state->dataUnitarySystems->unitarySys[EquipIndex - 1].AirOutNode = 1; state->dataUnitarySystems->unitarySys[EquipIndex - 1].AirInNode = 2; check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, zoneEquipType); - if (check) { - EXPECT_EQ("SupplyNode5", SupplyNodeName); - EXPECT_EQ("ReturnNode5", ReturnNodeName); - } + EXPECT_TRUE(check); + EXPECT_EQ("SupplyNode5", SupplyNodeName); + EXPECT_EQ("ReturnNode5", ReturnNodeName); + state->dataLoopNodes->NodeID(1) = "SupplyNode6"; state->dataLoopNodes->NodeID(2) = "ReturnNode6"; zoneEquipType = DataZoneEquipment::ZoneEquipType::PackagedTerminalHeatPumpWaterToAir; @@ -717,10 +712,9 @@ TEST_F(EnergyPlusFixture, RoomAirflowNetwork_CheckEquipName_Test) state->dataUnitarySystems->unitarySys[EquipIndex - 1].AirOutNode = 1; state->dataUnitarySystems->unitarySys[EquipIndex - 1].AirInNode = 2; check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, zoneEquipType); - if (check) { - EXPECT_EQ("SupplyNode6", SupplyNodeName); - EXPECT_EQ("ReturnNode6", ReturnNodeName); - } + EXPECT_TRUE(check); + EXPECT_EQ("SupplyNode6", SupplyNodeName); + EXPECT_EQ("ReturnNode6", ReturnNodeName); state->dataLoopNodes->NodeID(1) = "SupplyNode7"; state->dataLoopNodes->NodeID(2) = "ReturnNode7"; @@ -732,10 +726,9 @@ TEST_F(EnergyPlusFixture, RoomAirflowNetwork_CheckEquipName_Test) state->dataUnitHeaters->GetUnitHeaterInputFlag = false; state->dataUnitHeaters->UnitHeat(EquipIndex).Name = EquipName; check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, zoneEquipType); - if (check) { - EXPECT_EQ("SupplyNode7", SupplyNodeName); - EXPECT_EQ("ReturnNode7", ReturnNodeName); - } + EXPECT_TRUE(check); + EXPECT_EQ("SupplyNode7", SupplyNodeName); + EXPECT_EQ("ReturnNode7", ReturnNodeName); state->dataLoopNodes->NodeID(1) = "SupplyNode8"; state->dataLoopNodes->NodeID(2) = "ReturnNode8"; @@ -747,10 +740,9 @@ TEST_F(EnergyPlusFixture, RoomAirflowNetwork_CheckEquipName_Test) state->dataUnitVentilators->UnitVent(EquipIndex).Name = EquipName; state->dataUnitVentilators->GetUnitVentilatorInputFlag = false; check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, zoneEquipType); - if (check) { - EXPECT_EQ("SupplyNode8", SupplyNodeName); - EXPECT_EQ("ReturnNode8", ReturnNodeName); - } + EXPECT_TRUE(check); + EXPECT_EQ("SupplyNode8", SupplyNodeName); + EXPECT_EQ("ReturnNode8", ReturnNodeName); state->dataLoopNodes->NodeID(1) = "SupplyNode9"; state->dataLoopNodes->NodeID(2) = "ReturnNode9"; @@ -762,10 +754,9 @@ TEST_F(EnergyPlusFixture, RoomAirflowNetwork_CheckEquipName_Test) state->dataVentilatedSlab->GetInputFlag = false; state->dataVentilatedSlab->VentSlab(EquipIndex).Name = EquipName; check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, zoneEquipType); - if (check) { - EXPECT_EQ("SupplyNode9", SupplyNodeName); - EXPECT_EQ("ReturnNode9", ReturnNodeName); - } + EXPECT_TRUE(check); + EXPECT_EQ("SupplyNode9", SupplyNodeName); + EXPECT_EQ("ReturnNode9", ReturnNodeName); state->dataLoopNodes->NodeID(1) = "SupplyNode10"; state->dataLoopNodes->NodeID(2) = "ReturnNode10"; @@ -782,10 +773,9 @@ TEST_F(EnergyPlusFixture, RoomAirflowNetwork_CheckEquipName_Test) state->dataWindowAC->WindAC(EquipIndex).Name = EquipName; state->dataMixedAir->GetOAMixerInputFlag = false; check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, zoneEquipType); - if (check) { - EXPECT_EQ("SupplyNode10", SupplyNodeName); - EXPECT_EQ("ReturnNode10", ReturnNodeName); - } + EXPECT_TRUE(check); + EXPECT_EQ("SupplyNode10", SupplyNodeName); + EXPECT_EQ("ReturnNode10", ReturnNodeName); state->dataLoopNodes->NodeID(1) = "SupplyNode11"; state->dataLoopNodes->NodeID(2) = "ReturnNode11"; @@ -796,10 +786,9 @@ TEST_F(EnergyPlusFixture, RoomAirflowNetwork_CheckEquipName_Test) state->dataZoneDehumidifier->ZoneDehumid(EquipIndex).Name = EquipName; state->dataZoneDehumidifier->GetInputFlag = false; check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, zoneEquipType); - if (check) { - EXPECT_EQ("SupplyNode11", SupplyNodeName); - EXPECT_EQ("ReturnNode11", ReturnNodeName); - } + EXPECT_TRUE(check); + EXPECT_EQ("SupplyNode11", SupplyNodeName); + EXPECT_EQ("ReturnNode11", ReturnNodeName); state->dataLoopNodes->NodeID(1) = "SupplyNode12"; state->dataLoopNodes->NodeID(2) = "ReturnNode12"; @@ -811,10 +800,9 @@ TEST_F(EnergyPlusFixture, RoomAirflowNetwork_CheckEquipName_Test) state->dataPurchasedAirMgr->PurchAir(EquipIndex).Name = EquipName; state->dataPurchasedAirMgr->GetPurchAirInputFlag = false; check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, zoneEquipType); - if (check) { - EXPECT_EQ("SupplyNode12", SupplyNodeName); - EXPECT_EQ("ReturnNode12", ReturnNodeName); - } + EXPECT_TRUE(check); + EXPECT_EQ("SupplyNode12", SupplyNodeName); + EXPECT_EQ("ReturnNode12", ReturnNodeName); state->dataLoopNodes->NodeID(1) = "SupplyNode13"; state->dataLoopNodes->NodeID(2) = "ReturnNode13"; @@ -826,10 +814,9 @@ TEST_F(EnergyPlusFixture, RoomAirflowNetwork_CheckEquipName_Test) state->dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(EquipIndex).Name = EquipName; state->dataHybridUnitaryAC->GetInputZoneHybridEvap = false; check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, zoneEquipType); - if (check) { - EXPECT_EQ("SupplyNode13", SupplyNodeName); - EXPECT_EQ("ReturnNode13", ReturnNodeName); - } + EXPECT_TRUE(check); + EXPECT_EQ("SupplyNode13", SupplyNodeName); + EXPECT_EQ("ReturnNode13", ReturnNodeName); state->dataLoopNodes->NodeID(1) = "SupplyNode14"; state->dataLoopNodes->NodeID(2) = "ReturnNode14"; @@ -841,8 +828,7 @@ TEST_F(EnergyPlusFixture, RoomAirflowNetwork_CheckEquipName_Test) state->dataWaterThermalTanks->HPWaterHeater(EquipIndex).Name = EquipName; state->dataWaterThermalTanks->getWaterThermalTankInputFlag = false; check = CheckEquipName(*state, EquipName, SupplyNodeName, ReturnNodeName, zoneEquipType); - if (check) { - EXPECT_EQ("SupplyNode14", SupplyNodeName); - EXPECT_EQ("ReturnNode14", ReturnNodeName); - } + EXPECT_TRUE(check); + EXPECT_EQ("SupplyNode14", SupplyNodeName); + EXPECT_EQ("ReturnNode14", ReturnNodeName); } From c5f39452edc4734dce7aec7d5e12c89aa1ea536c Mon Sep 17 00:00:00 2001 From: Rick Strand Date: Wed, 10 Jul 2024 16:16:29 -0500 Subject: [PATCH 30/68] 10299 Separation of Get and Process The previous version of GetShadowingInput obtained the ShadowCalculation input but then also did some processing. In order to solve #10299, these needed to be separated so that when surfaces are read in that it knows the ShadowCalculation input and thus can produce error messages appropriately. This commit separates the two parts of the previous routine into two routines which are now called at the appropriate places. The next step will be to implement the solution and create a unit test. --- src/EnergyPlus/HeatBalanceManager.cc | 2 ++ src/EnergyPlus/SolarShading.cc | 6 +++++- src/EnergyPlus/SolarShading.hh | 1 + tst/EnergyPlus/unit/SolarShading.unit.cc | 27 ++++++++++++------------ 4 files changed, 21 insertions(+), 15 deletions(-) diff --git a/src/EnergyPlus/HeatBalanceManager.cc b/src/EnergyPlus/HeatBalanceManager.cc index 1791b5b2895..b569d688d90 100644 --- a/src/EnergyPlus/HeatBalanceManager.cc +++ b/src/EnergyPlus/HeatBalanceManager.cc @@ -1967,6 +1967,8 @@ namespace HeatBalanceManager { // METHODOLOGY EMPLOYED: // The GetObjectItem routines are employed to retrieve the data. + SolarShading::GetShadowingInput(state); + GetZoneData(state, ErrorsFound); // Read Zone data from input file SurfaceGeometry::SetupZoneGeometry(state, ErrorsFound); diff --git a/src/EnergyPlus/SolarShading.cc b/src/EnergyPlus/SolarShading.cc index be6f9f9ebc4..4d2776e0156 100644 --- a/src/EnergyPlus/SolarShading.cc +++ b/src/EnergyPlus/SolarShading.cc @@ -196,7 +196,6 @@ void InitSolarCalculations(EnergyPlusData &state) if (state.dataSolarShading->GetInputFlag) { checkShadingSurfaceSchedules(state); - GetShadowingInput(state); processShadowingInput(state); state.dataSolarShading->GetInputFlag = false; state.dataSolarShading->MaxHCV = @@ -412,6 +411,11 @@ void GetShadowingInput(EnergyPlusData &state) using DataSystemVariables::ShadingMethod; // SUBROUTINE LOCAL VARIABLE DECLARATIONS: + if (state.dataSolarShading->getShadowingCalculationInput) { + state.dataSolarShading->getShadowingCalculationInput = false; + } else { + return; + } int NumItems; int NumNumbers; int NumAlphas; diff --git a/src/EnergyPlus/SolarShading.hh b/src/EnergyPlus/SolarShading.hh index 5e3d62e5f41..bd466b327bf 100644 --- a/src/EnergyPlus/SolarShading.hh +++ b/src/EnergyPlus/SolarShading.hh @@ -437,6 +437,7 @@ struct SolarShadingData : BaseGlobalStruct #endif bool GetInputFlag = true; + bool getShadowingCalculationInput = true; bool anyScheduledShadingSurface = false; bool firstTime = true; bool debugging = false; diff --git a/tst/EnergyPlus/unit/SolarShading.unit.cc b/tst/EnergyPlus/unit/SolarShading.unit.cc index 7b168088659..d25e609a388 100644 --- a/tst/EnergyPlus/unit/SolarShading.unit.cc +++ b/tst/EnergyPlus/unit/SolarShading.unit.cc @@ -1461,6 +1461,8 @@ TEST_F(EnergyPlusFixture, SolarShadingTest_DisableGroupSelfShading) HeatBalanceManager::GetConstructData(*state, FoundError); EXPECT_FALSE(FoundError); + SolarShading::GetShadowingInput(*state); + HeatBalanceManager::GetZoneData(*state, FoundError); // Read Zone data from input file EXPECT_FALSE(FoundError); @@ -1483,7 +1485,6 @@ TEST_F(EnergyPlusFixture, SolarShadingTest_DisableGroupSelfShading) compare_err_stream(""); // just for debugging - SolarShading::GetShadowingInput(*state); SolarShading::processShadowingInput(*state); for (int SurfNum = 1; SurfNum <= state->dataSurface->TotSurfaces; SurfNum++) { @@ -3868,6 +3869,8 @@ TEST_F(EnergyPlusFixture, SolarShadingTest_Warn_Pixel_Count_and_TM_Schedule) HeatBalanceManager::GetConstructData(*state, FoundError); EXPECT_FALSE(FoundError); + SolarShading::GetShadowingInput(*state); + HeatBalanceManager::GetZoneData(*state, FoundError); EXPECT_FALSE(FoundError); @@ -3890,11 +3893,11 @@ TEST_F(EnergyPlusFixture, SolarShadingTest_Warn_Pixel_Count_and_TM_Schedule) EXPECT_EQ(state->dataSolarShading->anyScheduledShadingSurface, true); EXPECT_EQ(state->dataErrTracking->AskForSurfacesReport, true); - EXPECT_EQ(state->dataErrTracking->TotalWarningErrors, 0); + EXPECT_EQ(state->dataErrTracking->TotalWarningErrors, + 1); // with the rearrangement of code, one warning now gets produced in the shadow calculations // Expect no severe errors at this point EXPECT_EQ(state->dataErrTracking->TotalSevereErrors, 0); - SolarShading::GetShadowingInput(*state); SolarShading::processShadowingInput(*state); #ifdef EP_NO_OPENGL @@ -3902,17 +3905,9 @@ TEST_F(EnergyPlusFixture, SolarShadingTest_Warn_Pixel_Count_and_TM_Schedule) EXPECT_EQ(state->dataErrTracking->TotalSevereErrors, 0); EXPECT_EQ(state->dataErrTracking->LastSevereError, ""); #else - if (!Penumbra::Penumbra::is_valid_context()) { - EXPECT_EQ(state->dataErrTracking->TotalWarningErrors, 1); - EXPECT_EQ(state->dataErrTracking->TotalSevereErrors, 0); - EXPECT_EQ(state->dataErrTracking->LastSevereError, ""); - } else { - EXPECT_EQ(state->dataErrTracking->TotalWarningErrors, 0); - // Now expect one severe error from GetShadowInput() - EXPECT_EQ(state->dataErrTracking->TotalSevereErrors, 1); - // There should be a severe warning reported about the PixelCounting and the scheduled shading surface tm values > 0.0 combination. - EXPECT_EQ(state->dataErrTracking->LastSevereError, "The Shading Calculation Method of choice is \"PixelCounting\"; "); - } + EXPECT_EQ(state->dataErrTracking->TotalWarningErrors, 1); + EXPECT_EQ(state->dataErrTracking->TotalSevereErrors, 0); + EXPECT_EQ(state->dataErrTracking->LastSevereError, ""); #endif } @@ -4180,6 +4175,8 @@ TEST_F(EnergyPlusFixture, SolarShadingTest_PolygonOverlap) HeatBalanceManager::GetConstructData(*state, FoundError); EXPECT_FALSE(FoundError); + SolarShading::GetShadowingInput(*state); + HeatBalanceManager::GetZoneData(*state, FoundError); // Read Zone data from input file EXPECT_FALSE(FoundError); @@ -4202,6 +4199,8 @@ TEST_F(EnergyPlusFixture, SolarShadingTest_PolygonOverlap) SurfaceGeometry::GetSurfaceData(*state, FoundError); // setup zone geometry and get zone data EXPECT_FALSE(FoundError); // expect no errors + SolarShading::processShadowingInput(*state); + // compare_err_stream( "" ); // just for debugging SurfaceGeometry::SetupZoneGeometry(*state, FoundError); // this calls GetSurfaceData() From eaf73f99d8cc6c94b160c0679e49f6f480e4f474 Mon Sep 17 00:00:00 2001 From: Rick Strand Date: Fri, 12 Jul 2024 14:21:39 -0500 Subject: [PATCH 31/68] 10299 Fix and Reverse Old Unit Fix to the problem. Testing reveals that the code now does what it is supposed to do. Also, reversed some changes to an existing unit test as the changes were causing some issues in the test suite. Hopefully this makes those issues disappear. --- src/EnergyPlus/SurfaceGeometry.cc | 7 ++++--- tst/EnergyPlus/unit/SolarShading.unit.cc | 14 ++++++++++---- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/EnergyPlus/SurfaceGeometry.cc b/src/EnergyPlus/SurfaceGeometry.cc index c8191fa36c2..09b60d6a98f 100644 --- a/src/EnergyPlus/SurfaceGeometry.cc +++ b/src/EnergyPlus/SurfaceGeometry.cc @@ -68,6 +68,7 @@ #include #include #include +#include #include #include #include @@ -15680,9 +15681,9 @@ namespace SurfaceGeometry { if (SignFlag != PrevSignFlag) { if (state.dataGlobal->DisplayExtraWarnings && surfaceTmp.ExtSolar && - (state.dataHeatBal->SolarDistribution != DataHeatBalance::Shadowing::Minimal) && - // Warn only once - surfaceTmp.IsConvex) { + (state.dataHeatBal->SolarDistribution != DataHeatBalance::Shadowing::Minimal) && surfaceTmp.IsConvex && + !state.dataSysVars->SutherlandHodgman && + (state.dataSysVars->shadingMethod == DataSystemVariables::ShadingMethod::PolygonClipping)) { ShowWarningError(state, format("CheckConvexity: Zone=\"{}\", Surface=\"{}\" is non-convex.", state.dataHeatBal->Zone(surfaceTmp.Zone).Name, diff --git a/tst/EnergyPlus/unit/SolarShading.unit.cc b/tst/EnergyPlus/unit/SolarShading.unit.cc index d25e609a388..20591d52914 100644 --- a/tst/EnergyPlus/unit/SolarShading.unit.cc +++ b/tst/EnergyPlus/unit/SolarShading.unit.cc @@ -3901,13 +3901,19 @@ TEST_F(EnergyPlusFixture, SolarShadingTest_Warn_Pixel_Count_and_TM_Schedule) SolarShading::processShadowingInput(*state); #ifdef EP_NO_OPENGL - EXPECT_EQ(state->dataErrTracking->TotalWarningErrors, 1); + EXPECT_EQ(state->dataErrTracking->TotalWarningErrors, 2); EXPECT_EQ(state->dataErrTracking->TotalSevereErrors, 0); EXPECT_EQ(state->dataErrTracking->LastSevereError, ""); #else - EXPECT_EQ(state->dataErrTracking->TotalWarningErrors, 1); - EXPECT_EQ(state->dataErrTracking->TotalSevereErrors, 0); - EXPECT_EQ(state->dataErrTracking->LastSevereError, ""); + if (!Penumbra::Penumbra::is_valid_context()) { + EXPECT_EQ(state->dataErrTracking->TotalWarningErrors, 2); + EXPECT_EQ(state->dataErrTracking->TotalSevereErrors, 0); + EXPECT_EQ(state->dataErrTracking->LastSevereError, ""); + } else { + EXPECT_EQ(state->dataErrTracking->TotalWarningErrors, 1); + EXPECT_EQ(state->dataErrTracking->TotalSevereErrors, 0); + EXPECT_EQ(state->dataErrTracking->LastSevereError, ""); + } #endif } From 4a504167e2f50bb0474b932bfd575fb1f20da5dc Mon Sep 17 00:00:00 2001 From: Rick Strand Date: Fri, 12 Jul 2024 18:31:17 -0500 Subject: [PATCH 32/68] 10299 Unit Test and Fixes Addition of new unit tests and fixes to the one that doesn't work properly for Windows (experimental solution based on surrounding code). If this works, this is a potential pull request version. --- tst/EnergyPlus/unit/SolarShading.unit.cc | 214 ++++++++++++++++++++++- 1 file changed, 212 insertions(+), 2 deletions(-) diff --git a/tst/EnergyPlus/unit/SolarShading.unit.cc b/tst/EnergyPlus/unit/SolarShading.unit.cc index 20591d52914..68f5b573a56 100644 --- a/tst/EnergyPlus/unit/SolarShading.unit.cc +++ b/tst/EnergyPlus/unit/SolarShading.unit.cc @@ -3893,11 +3893,19 @@ TEST_F(EnergyPlusFixture, SolarShadingTest_Warn_Pixel_Count_and_TM_Schedule) EXPECT_EQ(state->dataSolarShading->anyScheduledShadingSurface, true); EXPECT_EQ(state->dataErrTracking->AskForSurfacesReport, true); - EXPECT_EQ(state->dataErrTracking->TotalWarningErrors, - 1); // with the rearrangement of code, one warning now gets produced in the shadow calculations // Expect no severe errors at this point EXPECT_EQ(state->dataErrTracking->TotalSevereErrors, 0); +#ifdef EP_NO_OPENGL + EXPECT_EQ(state->dataErrTracking->TotalWarningErrors, 2); +#else + if (!Penumbra::Penumbra::is_valid_context()) { + EXPECT_EQ(state->dataErrTracking->TotalWarningErrors, 2); + } else { + EXPECT_EQ(state->dataErrTracking->TotalWarningErrors, 1); + } +#endif + SolarShading::processShadowingInput(*state); #ifdef EP_NO_OPENGL @@ -5954,3 +5962,205 @@ TEST_F(EnergyPlusFixture, SolarShadingTest_CalcInteriorSolarDistribution_EQL) EXPECT_NEAR(0.0, state->dataHeatBalSurf->SurfWinInitialDifSolInTrans(windowSurfNum), 0.01); EXPECT_NEAR(1.4736, state->dataHeatBalSurf->SurfWinInitialDifSolInTrans(windowSurfNum2), 0.01); } + +TEST_F(EnergyPlusFixture, SolarShadingTest_GetShadowingInputTest1) +{ + // Tests for Defect #10299: Test GetShadowingInput for various combinations of input + // with a focus put on the correct setting of variables associated with calculation + // method and polygon clipping algorithm + std::string const idf_objects = delimited_string({ + " ShadowCalculation,", + " PolygonClipping, !- Shading Calculation Method", + " Timestep, !- Shading Calculation Update Frequency Method", + " 1, !- Shading Calculation Update Frequency", + " 200, !- Maximum Figures in Shadow Overlap Calculations", + " ConvexWeilerAtherton, !- Polygon Clipping Algorithm", + " 512.0, !- Pixel Counting Resolution", + " DetailedSkyDiffuseModeling; !- Sky Diffuse Modeling Algorithm", + }); + + ASSERT_TRUE(process_idf(idf_objects)); + + state->dataSolarShading->anyScheduledShadingSurface = false; + + // Test 1 of 6: Polygon Clipping and ConvexWeilerAtherton + SolarShading::GetShadowingInput(*state); + int expectedFrequency = 1; + int expectedOverlaps = 200; + EXPECT_TRUE(state->dataSysVars->DetailedSkyDiffuseAlgorithm); + EXPECT_TRUE(state->dataSysVars->DetailedSolarTimestepIntegration); + EXPECT_EQ(expectedFrequency, state->dataSolarShading->ShadowingCalcFrequency); + EXPECT_EQ(expectedOverlaps, state->dataSolarShading->MaxHCS); + EXPECT_FALSE(state->dataSysVars->SutherlandHodgman); + EXPECT_FALSE(state->dataSysVars->SlaterBarsky); + EXPECT_EQ(state->dataSysVars->shadingMethod, ShadingMethod::PolygonClipping); +} + +TEST_F(EnergyPlusFixture, SolarShadingTest_GetShadowingInputTest2) +{ + // Tests for Defect #10299: Test GetShadowingInput for various combinations of input + // with a focus put on the correct setting of variables associated with calculation + // method and polygon clipping algorithm + std::string const idf_objects = delimited_string({ + " ShadowCalculation,", + " PolygonClipping, !- Shading Calculation Method", + " Periodic, !- Shading Calculation Update Frequency Method", + " 10, !- Shading Calculation Update Frequency", + " 2000, !- Maximum Figures in Shadow Overlap Calculations", + " SutherlandHodgman, !- Polygon Clipping Algorithm", + " 512.0, !- Pixel Counting Resolution", + " SimpleSkyDiffuseModeling; !- Sky Diffuse Modeling Algorithm", + }); + + ASSERT_TRUE(process_idf(idf_objects)); + + state->dataSolarShading->anyScheduledShadingSurface = false; + + // Test 2 of 6: Polygon Clipping and SutherlandHodgman + SolarShading::GetShadowingInput(*state); + int expectedFrequency = 10; + int expectedOverlaps = 2000; + EXPECT_FALSE(state->dataSysVars->DetailedSkyDiffuseAlgorithm); + EXPECT_FALSE(state->dataSysVars->DetailedSolarTimestepIntegration); + EXPECT_EQ(expectedFrequency, state->dataSolarShading->ShadowingCalcFrequency); + EXPECT_EQ(expectedOverlaps, state->dataSolarShading->MaxHCS); + EXPECT_TRUE(state->dataSysVars->SutherlandHodgman); + EXPECT_FALSE(state->dataSysVars->SlaterBarsky); + EXPECT_EQ(state->dataSysVars->shadingMethod, ShadingMethod::PolygonClipping); +} + +TEST_F(EnergyPlusFixture, SolarShadingTest_GetShadowingInputTest3) +{ + // Tests for Defect #10299: Test GetShadowingInput for various combinations of input + // with a focus put on the correct setting of variables associated with calculation + // method and polygon clipping algorithm + std::string const idf_objects = delimited_string({ + " ShadowCalculation,", + " PolygonClipping, !- Shading Calculation Method", + " Timestep, !- Shading Calculation Update Frequency Method", + " 30, !- Shading Calculation Update Frequency", + " 15000, !- Maximum Figures in Shadow Overlap Calculations", + " SlaterBarskyandSutherlandHodgman, !- Polygon Clipping Algorithm", + " 512.0, !- Pixel Counting Resolution", + " DetailedSkyDiffuseModeling; !- Sky Diffuse Modeling Algorithm", + }); + + ASSERT_TRUE(process_idf(idf_objects)); + + state->dataSolarShading->anyScheduledShadingSurface = false; + + // Test 3 of 6: Polygon Clipping and SlaterBarskyandSutherlandHodgman + SolarShading::GetShadowingInput(*state); + int expectedFrequency = 30; + int expectedOverlaps = 15000; + EXPECT_TRUE(state->dataSysVars->DetailedSkyDiffuseAlgorithm); + EXPECT_TRUE(state->dataSysVars->DetailedSolarTimestepIntegration); + EXPECT_EQ(expectedFrequency, state->dataSolarShading->ShadowingCalcFrequency); + EXPECT_EQ(expectedOverlaps, state->dataSolarShading->MaxHCS); + EXPECT_TRUE(state->dataSysVars->SutherlandHodgman); + EXPECT_TRUE(state->dataSysVars->SlaterBarsky); + EXPECT_EQ(state->dataSysVars->shadingMethod, ShadingMethod::PolygonClipping); +} + +TEST_F(EnergyPlusFixture, SolarShadingTest_GetShadowingInputTest4) +{ + // Tests for Defect #10299: Test GetShadowingInput for various combinations of input + // with a focus put on the correct setting of variables associated with calculation + // method and polygon clipping algorithm + std::string const idf_objects = delimited_string({ + " ShadowCalculation,", + " PixelCounting, !- Shading Calculation Method", + " Periodic, !- Shading Calculation Update Frequency Method", + " 1, !- Shading Calculation Update Frequency", + " 200, !- Maximum Figures in Shadow Overlap Calculations", + " ConvexWeilerAtherton, !- Polygon Clipping Algorithm", + " 512.0, !- Pixel Counting Resolution", + " DetailedSkyDiffuseModeling; !- Sky Diffuse Modeling Algorithm", + }); + + ASSERT_TRUE(process_idf(idf_objects)); + + state->dataSolarShading->anyScheduledShadingSurface = false; + + // Test 4 of 6: Pixel Counting and ConvexWeilerAtherton + SolarShading::GetShadowingInput(*state); + int expectedFrequency = 1; + int expectedOverlaps = 200; + EXPECT_TRUE(state->dataSysVars->DetailedSkyDiffuseAlgorithm); + EXPECT_FALSE(state->dataSysVars->DetailedSolarTimestepIntegration); + EXPECT_EQ(expectedFrequency, state->dataSolarShading->ShadowingCalcFrequency); + EXPECT_EQ(expectedOverlaps, state->dataSolarShading->MaxHCS); + EXPECT_FALSE(state->dataSysVars->SutherlandHodgman); + EXPECT_FALSE(state->dataSysVars->SlaterBarsky); + EXPECT_EQ(state->dataSysVars->shadingMethod, ShadingMethod::PixelCounting); +} + +TEST_F(EnergyPlusFixture, SolarShadingTest_GetShadowingInputTest5) +{ + // Tests for Defect #10299: Test GetShadowingInput for various combinations of input + // with a focus put on the correct setting of variables associated with calculation + // method and polygon clipping algorithm + std::string const idf_objects = delimited_string({ + " ShadowCalculation,", + " PixelCounting, !- Shading Calculation Method", + " Periodic, !- Shading Calculation Update Frequency Method", + " 10, !- Shading Calculation Update Frequency", + " 2000, !- Maximum Figures in Shadow Overlap Calculations", + " SutherlandHodgman, !- Polygon Clipping Algorithm", + " 512.0, !- Pixel Counting Resolution", + " DetailedSkyDiffuseModeling; !- Sky Diffuse Modeling Algorithm", + }); + + ASSERT_TRUE(process_idf(idf_objects)); + + state->dataSolarShading->anyScheduledShadingSurface = false; + + // Test 5 of 6: Pixel Counting and SutherlandHodgman + SolarShading::GetShadowingInput(*state); + int expectedFrequency = 10; + int expectedOverlaps = 2000; + EXPECT_TRUE(state->dataSysVars->DetailedSkyDiffuseAlgorithm); + EXPECT_FALSE(state->dataSysVars->DetailedSolarTimestepIntegration); + EXPECT_EQ(expectedFrequency, state->dataSolarShading->ShadowingCalcFrequency); + EXPECT_EQ(expectedOverlaps, state->dataSolarShading->MaxHCS); + EXPECT_TRUE(state->dataSysVars->SutherlandHodgman); + EXPECT_FALSE(state->dataSysVars->SlaterBarsky); + EXPECT_EQ(state->dataSysVars->shadingMethod, ShadingMethod::PixelCounting); +} + +TEST_F(EnergyPlusFixture, SolarShadingTest_GetShadowingInputTest6) +{ + // Tests for Defect #10299: Test GetShadowingInput for various combinations of input + // with a focus put on the correct setting of variables associated with calculation + // method and polygon clipping algorithm + std::string const idf_objects = delimited_string({ + " ShadowCalculation,", + " PixelCounting, !- Shading Calculation Method", + " Periodic, !- Shading Calculation Update Frequency Method", + " 56, !- Shading Calculation Update Frequency", + " 1234, !- Maximum Figures in Shadow Overlap Calculations", + " SlaterBarskyandSutherlandHodgman, !- Polygon Clipping Algorithm", + " 512.0, !- Pixel Counting Resolution", + " SimpleSkyDiffuseModeling; !- Sky Diffuse Modeling Algorithm", + }); + + ASSERT_TRUE(process_idf(idf_objects)); + + state->dataSolarShading->anyScheduledShadingSurface = false; + + // Test 36of 6: Pixel Counting and SlaterBarskyandSutherlandHodgman + SolarShading::GetShadowingInput(*state); + + int expectedFrequency = 56; + int expectedOverlaps = 1234; + EXPECT_FALSE(state->dataSysVars->DetailedSkyDiffuseAlgorithm); + EXPECT_FALSE(state->dataSysVars->DetailedSolarTimestepIntegration); + EXPECT_EQ(expectedFrequency, state->dataSolarShading->ShadowingCalcFrequency); + EXPECT_EQ(expectedOverlaps, state->dataSolarShading->MaxHCS); + EXPECT_TRUE(state->dataSysVars->SutherlandHodgman); + EXPECT_TRUE(state->dataSysVars->SlaterBarsky); + EXPECT_EQ(state->dataSysVars->shadingMethod, ShadingMethod::PixelCounting); + std::string const error_string = delimited_string({" ** Warning ** ShadowCalculation: suspect Shading Calculation Update Frequency", + " ** ~~~ ** Value entered=[56], Shadowing Calculations will be inaccurate."}); + EXPECT_TRUE(compare_err_stream(error_string, true)); +} From 608530e8fd40fb6a79e8dfc0f5ef508db9ea261a Mon Sep 17 00:00:00 2001 From: Rick Strand Date: Fri, 12 Jul 2024 21:55:21 -0500 Subject: [PATCH 33/68] 10299 Unit Test Change Backup Backed out something that was tried but resulted in more issues. --- tst/EnergyPlus/unit/SolarShading.unit.cc | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/tst/EnergyPlus/unit/SolarShading.unit.cc b/tst/EnergyPlus/unit/SolarShading.unit.cc index 68f5b573a56..123369cd2d7 100644 --- a/tst/EnergyPlus/unit/SolarShading.unit.cc +++ b/tst/EnergyPlus/unit/SolarShading.unit.cc @@ -3893,19 +3893,10 @@ TEST_F(EnergyPlusFixture, SolarShadingTest_Warn_Pixel_Count_and_TM_Schedule) EXPECT_EQ(state->dataSolarShading->anyScheduledShadingSurface, true); EXPECT_EQ(state->dataErrTracking->AskForSurfacesReport, true); + EXPECT_EQ(state->dataErrTracking->TotalWarningErrors, 1); // Expect no severe errors at this point EXPECT_EQ(state->dataErrTracking->TotalSevereErrors, 0); -#ifdef EP_NO_OPENGL - EXPECT_EQ(state->dataErrTracking->TotalWarningErrors, 2); -#else - if (!Penumbra::Penumbra::is_valid_context()) { - EXPECT_EQ(state->dataErrTracking->TotalWarningErrors, 2); - } else { - EXPECT_EQ(state->dataErrTracking->TotalWarningErrors, 1); - } -#endif - SolarShading::processShadowingInput(*state); #ifdef EP_NO_OPENGL From 0719aba796923e4253fe7edfa625ff9cbc600308 Mon Sep 17 00:00:00 2001 From: Lixing Gu Date: Mon, 15 Jul 2024 09:48:19 -0400 Subject: [PATCH 34/68] Revise GetIndex functions --- src/EnergyPlus/FanCoilUnits.cc | 8 ++-- src/EnergyPlus/FanCoilUnits.hh | 2 +- src/EnergyPlus/HVACStandAloneERV.cc | 9 ++-- src/EnergyPlus/HVACStandAloneERV.hh | 2 +- src/EnergyPlus/HVACVariableRefrigerantFlow.cc | 9 ++-- src/EnergyPlus/HVACVariableRefrigerantFlow.hh | 2 +- .../HybridUnitaryAirConditioners.cc | 9 ++-- .../HybridUnitaryAirConditioners.hh | 2 +- src/EnergyPlus/OutdoorAirUnit.cc | 8 ++-- src/EnergyPlus/OutdoorAirUnit.hh | 2 +- src/EnergyPlus/PurchasedAirManager.cc | 8 ++-- src/EnergyPlus/PurchasedAirManager.hh | 2 +- src/EnergyPlus/RoomAirModelManager.cc | 45 ++++++++++++------- src/EnergyPlus/UnitHeater.cc | 9 ++-- src/EnergyPlus/UnitHeater.hh | 2 +- src/EnergyPlus/UnitVentilator.cc | 8 ++-- src/EnergyPlus/UnitVentilator.hh | 2 +- src/EnergyPlus/UnitarySystem.cc | 10 ++--- src/EnergyPlus/UnitarySystem.hh | 1 - src/EnergyPlus/VentilatedSlab.cc | 8 ++-- src/EnergyPlus/VentilatedSlab.hh | 2 +- src/EnergyPlus/WaterThermalTanks.cc | 8 ++-- src/EnergyPlus/WaterThermalTanks.hh | 2 +- src/EnergyPlus/WindowAC.cc | 8 ++-- src/EnergyPlus/WindowAC.hh | 2 +- src/EnergyPlus/ZoneDehumidifier.cc | 8 ++-- src/EnergyPlus/ZoneDehumidifier.hh | 2 +- 27 files changed, 83 insertions(+), 97 deletions(-) diff --git a/src/EnergyPlus/FanCoilUnits.cc b/src/EnergyPlus/FanCoilUnits.cc index 1e05e8f7056..7c27178d74f 100644 --- a/src/EnergyPlus/FanCoilUnits.cc +++ b/src/EnergyPlus/FanCoilUnits.cc @@ -4419,23 +4419,21 @@ namespace FanCoilUnits { } } - int getEqIndex(EnergyPlusData &state, std::string_view CompName, bool &errFlag) + int getEqIndex(EnergyPlusData &state, std::string_view CompName) { if (state.dataFanCoilUnits->GetFanCoilInputFlag) { GetFanCoilUnits(state); state.dataFanCoilUnits->GetFanCoilInputFlag = false; } - int EquipIndex = 0; for (int FanCoilIndex = 1; FanCoilIndex <= state.dataFanCoilUnits->NumFanCoils; ++FanCoilIndex) { auto &fanCoil = state.dataFanCoilUnits->FanCoil(FanCoilIndex); if (Util::SameString(fanCoil.Name, CompName)) { - EquipIndex = FanCoilIndex; + return FanCoilIndex; } } - if (EquipIndex == 0) errFlag = true; - return EquipIndex; + return 0; } } // namespace FanCoilUnits diff --git a/src/EnergyPlus/FanCoilUnits.hh b/src/EnergyPlus/FanCoilUnits.hh index 29027338d5e..68983667875 100644 --- a/src/EnergyPlus/FanCoilUnits.hh +++ b/src/EnergyPlus/FanCoilUnits.hh @@ -380,7 +380,7 @@ namespace FanCoilUnits { int WaterControlNode, Real64 MinWaterFlow); - int getEqIndex(EnergyPlusData &state, std::string_view CompName, bool &errFlag); + int getEqIndex(EnergyPlusData &state, std::string_view CompName); } // namespace FanCoilUnits struct FanCoilUnitsData : BaseGlobalStruct diff --git a/src/EnergyPlus/HVACStandAloneERV.cc b/src/EnergyPlus/HVACStandAloneERV.cc index 70a45717c66..15438f65487 100644 --- a/src/EnergyPlus/HVACStandAloneERV.cc +++ b/src/EnergyPlus/HVACStandAloneERV.cc @@ -1685,23 +1685,20 @@ bool GetStandAloneERVNodeNumber(EnergyPlusData &state, int const NodeNumber) return false; } -int getEqIndex(EnergyPlusData &state, std::string_view CompName, bool &errFlag) +int getEqIndex(EnergyPlusData &state, std::string_view CompName) { if (state.dataHVACStandAloneERV->GetERVInputFlag) { GetStandAloneERV(state); state.dataHVACStandAloneERV->GetERVInputFlag = false; } - int EqIndex = 0; - for (int StandAloneERVNum = 1; StandAloneERVNum <= state.dataHVACStandAloneERV->NumStandAloneERVs; StandAloneERVNum++) { if (Util::SameString(CompName, state.dataHVACStandAloneERV->StandAloneERV(StandAloneERVNum).Name)) { - EqIndex = StandAloneERVNum; + return StandAloneERVNum; break; } } - if (EqIndex == 0) errFlag = true; - return EqIndex; + return 0; } } // namespace EnergyPlus::HVACStandAloneERV diff --git a/src/EnergyPlus/HVACStandAloneERV.hh b/src/EnergyPlus/HVACStandAloneERV.hh index 665ae2f00fb..382cbea51bb 100644 --- a/src/EnergyPlus/HVACStandAloneERV.hh +++ b/src/EnergyPlus/HVACStandAloneERV.hh @@ -186,7 +186,7 @@ namespace HVACStandAloneERV { bool GetStandAloneERVNodeNumber(EnergyPlusData &state, int NodeNumber); - int getEqIndex(EnergyPlusData &state, std::string_view CompName, bool &errFlag); + int getEqIndex(EnergyPlusData &state, std::string_view CompName); } // namespace HVACStandAloneERV diff --git a/src/EnergyPlus/HVACVariableRefrigerantFlow.cc b/src/EnergyPlus/HVACVariableRefrigerantFlow.cc index 9e2dbe24869..6199ffb605a 100644 --- a/src/EnergyPlus/HVACVariableRefrigerantFlow.cc +++ b/src/EnergyPlus/HVACVariableRefrigerantFlow.cc @@ -10761,22 +10761,19 @@ int GetVRFTUReturnAirNode(EnergyPlusData &state, int const VRFTUNum) } } -int getEqIndex(EnergyPlusData &state, std::string_view VRFTUName, bool &errFlag) +int getEqIndex(EnergyPlusData &state, std::string_view VRFTUName) { if (state.dataHVACVarRefFlow->GetVRFInputFlag) { GetVRFInput(state); state.dataHVACVarRefFlow->GetVRFInputFlag = false; } - int EqIndex = 0; for (int VRFTUNum = 1; VRFTUNum <= state.dataHVACVarRefFlow->NumVRFTU; VRFTUNum++) { if (Util::SameString(VRFTUName, state.dataHVACVarRefFlow->VRFTU(VRFTUNum).Name)) { - EqIndex = VRFTUNum; - break; + return VRFTUNum; } } - if (EqIndex == 0) errFlag = true; - return EqIndex; + return 0; } void getVRFTUZoneLoad( diff --git a/src/EnergyPlus/HVACVariableRefrigerantFlow.hh b/src/EnergyPlus/HVACVariableRefrigerantFlow.hh index bfef04ef8ed..71e60fa8ea7 100644 --- a/src/EnergyPlus/HVACVariableRefrigerantFlow.hh +++ b/src/EnergyPlus/HVACVariableRefrigerantFlow.hh @@ -974,7 +974,7 @@ namespace HVACVariableRefrigerantFlow { Real64 const T_suc // Compressor suction temperature Te' [C] ); - int getEqIndex(EnergyPlusData &state, std::string_view VRFTUName, bool &errFlag); + int getEqIndex(EnergyPlusData &state, std::string_view VRFTUName); } // namespace HVACVariableRefrigerantFlow diff --git a/src/EnergyPlus/HybridUnitaryAirConditioners.cc b/src/EnergyPlus/HybridUnitaryAirConditioners.cc index 50069e27aee..53b21ca0716 100644 --- a/src/EnergyPlus/HybridUnitaryAirConditioners.cc +++ b/src/EnergyPlus/HybridUnitaryAirConditioners.cc @@ -1366,22 +1366,21 @@ int GetHybridUnitaryACReturnAirNode(EnergyPlusData &state, int const CompNum) return GetHybridUnitaryACReturnAirNode; } -int getHybridUnitaryACIndex(EnergyPlusData &state, std::string_view CompName, bool &errFlag) +int getHybridUnitaryACIndex(EnergyPlusData &state, std::string_view CompName) { + bool errFlag = false; if (state.dataHybridUnitaryAC->GetInputZoneHybridEvap) { GetInputZoneHybridUnitaryAirConditioners(state, errFlag); state.dataHybridUnitaryAC->GetInputZoneHybridEvap = false; } - int EquipIndex = 0; for (int UnitLoop = 1; UnitLoop <= state.dataHybridUnitaryAC->NumZoneHybridEvap; ++UnitLoop) { if (Util::SameString(state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(UnitLoop).Name, CompName)) { - EquipIndex = UnitLoop; + return UnitLoop; } } - if (EquipIndex == 0) errFlag = true; - return EquipIndex; + return 0; } //***************************************************************************************** diff --git a/src/EnergyPlus/HybridUnitaryAirConditioners.hh b/src/EnergyPlus/HybridUnitaryAirConditioners.hh index 1ba96080b7d..c93210bcff9 100644 --- a/src/EnergyPlus/HybridUnitaryAirConditioners.hh +++ b/src/EnergyPlus/HybridUnitaryAirConditioners.hh @@ -98,7 +98,7 @@ namespace HybridUnitaryAirConditioners { int GetHybridUnitaryACReturnAirNode(EnergyPlusData &state, int UnitNum); - int getHybridUnitaryACIndex(EnergyPlusData &state, std::string_view CompName, bool &errFlag); + int getHybridUnitaryACIndex(EnergyPlusData &state, std::string_view CompName); } // namespace HybridUnitaryAirConditioners diff --git a/src/EnergyPlus/OutdoorAirUnit.cc b/src/EnergyPlus/OutdoorAirUnit.cc index 4d993fdde39..153fa01875b 100644 --- a/src/EnergyPlus/OutdoorAirUnit.cc +++ b/src/EnergyPlus/OutdoorAirUnit.cc @@ -2471,22 +2471,20 @@ namespace OutdoorAirUnit { return GetOutdoorAirUnitReturnAirNode; } - int getOutdoorAirUnitEqIndex(EnergyPlusData &state, std::string_view EquipName, bool &errFlag) + int getOutdoorAirUnitEqIndex(EnergyPlusData &state, std::string_view EquipName) { if (state.dataOutdoorAirUnit->GetOutdoorAirUnitInputFlag) { OutdoorAirUnit::GetOutdoorAirUnitInputs(state); state.dataOutdoorAirUnit->GetOutdoorAirUnitInputFlag = false; } - int EquipIndex = 0; for (int OAUnitNum = 1; OAUnitNum <= state.dataOutdoorAirUnit->NumOfOAUnits; ++OAUnitNum) { if (Util::SameString(state.dataOutdoorAirUnit->OutAirUnit(OAUnitNum).Name, EquipName)) { - EquipIndex = OAUnitNum; + return OAUnitNum; } } - if (EquipIndex == 0) errFlag = true; - return EquipIndex; + return 0; } } // namespace OutdoorAirUnit diff --git a/src/EnergyPlus/OutdoorAirUnit.hh b/src/EnergyPlus/OutdoorAirUnit.hh index 2115f4c770b..977c9c4f3fc 100644 --- a/src/EnergyPlus/OutdoorAirUnit.hh +++ b/src/EnergyPlus/OutdoorAirUnit.hh @@ -310,7 +310,7 @@ namespace OutdoorAirUnit { int GetOutdoorAirUnitReturnAirNode(EnergyPlusData &state, int OAUnitNum); - int getOutdoorAirUnitEqIndex(EnergyPlusData &state, std::string_view EquipName, bool &errFlag); + int getOutdoorAirUnitEqIndex(EnergyPlusData &state, std::string_view EquipName); } // namespace OutdoorAirUnit struct OutdoorAirUnitData : BaseGlobalStruct diff --git a/src/EnergyPlus/PurchasedAirManager.cc b/src/EnergyPlus/PurchasedAirManager.cc index e3b58a930da..3fd4bf0c89d 100644 --- a/src/EnergyPlus/PurchasedAirManager.cc +++ b/src/EnergyPlus/PurchasedAirManager.cc @@ -3318,22 +3318,20 @@ int GetPurchasedAirReturnAirNode(EnergyPlusData &state, int const PurchAirNum) return GetPurchasedAirReturnAirNode; } -int getPurchasedAirIndex(EnergyPlusData &state, std::string_view PurchAirName, bool &errFlag) +int getPurchasedAirIndex(EnergyPlusData &state, std::string_view PurchAirName) { if (state.dataPurchasedAirMgr->GetPurchAirInputFlag) { GetPurchasedAir(state); state.dataPurchasedAirMgr->GetPurchAirInputFlag = false; } - int EquipIndex = 0; for (int PurchAirNum = 1; PurchAirNum <= state.dataPurchasedAirMgr->NumPurchAir; ++PurchAirNum) { if (Util::SameString(state.dataPurchasedAirMgr->PurchAir(PurchAirNum).Name, PurchAirName)) { - EquipIndex = PurchAirNum; + return PurchAirNum; } } - if (EquipIndex == 0) errFlag = true; - return EquipIndex; + return 0; } Real64 GetPurchasedAirMixedAirTemp(EnergyPlusData &state, int const PurchAirNum) diff --git a/src/EnergyPlus/PurchasedAirManager.hh b/src/EnergyPlus/PurchasedAirManager.hh index a3abb8f515c..d8c7ee1c36d 100644 --- a/src/EnergyPlus/PurchasedAirManager.hh +++ b/src/EnergyPlus/PurchasedAirManager.hh @@ -379,7 +379,7 @@ namespace PurchasedAirManager { int GetPurchasedAirReturnAirNode(EnergyPlusData &state, int PurchAirNum); - int getPurchasedAirIndex(EnergyPlusData &state, std::string_view PurchAirName, bool &errFlag); + int getPurchasedAirIndex(EnergyPlusData &state, std::string_view PurchAirName); Real64 GetPurchasedAirMixedAirTemp(EnergyPlusData &state, int PurchAirNum); diff --git a/src/EnergyPlus/RoomAirModelManager.cc b/src/EnergyPlus/RoomAirModelManager.cc index 7b8c40f8ed6..8c890593867 100644 --- a/src/EnergyPlus/RoomAirModelManager.cc +++ b/src/EnergyPlus/RoomAirModelManager.cc @@ -2723,55 +2723,66 @@ namespace RoomAir { switch (zoneEquipType) { case DataZoneEquipment::ZoneEquipType::VariableRefrigerantFlowTerminal: { // ZoneHVAC:TerminalUnit : VariableRefrigerantFlow - EquipIndex = HVACVariableRefrigerantFlow::getEqIndex(state, EquipName, errorfound); + EquipIndex = HVACVariableRefrigerantFlow::getEqIndex(state, EquipName); + if (EquipIndex == 0) return EquipFind; SupplyNodeNum = state.dataHVACVarRefFlow->VRFTU(EquipIndex).VRFTUOutletNodeNum; } break; case DataZoneEquipment::ZoneEquipType::EnergyRecoveryVentilator: { // ZoneHVAC : EnergyRecoveryVentilator - EquipIndex = HVACStandAloneERV::getEqIndex(state, EquipName, errorfound); + EquipIndex = HVACStandAloneERV::getEqIndex(state, EquipName); + if (EquipIndex == 0) return EquipFind; SupplyNodeNum = state.dataHVACStandAloneERV->StandAloneERV(EquipIndex).SupplyAirInletNode; } break; case DataZoneEquipment::ZoneEquipType::FourPipeFanCoil: { // ZoneHVAC : FourPipeFanCoil - EquipIndex = FanCoilUnits::getEqIndex(state, EquipName, errorfound); + EquipIndex = FanCoilUnits::getEqIndex(state, EquipName); + if (EquipIndex == 0) return EquipFind; SupplyNodeNum = state.dataFanCoilUnits->FanCoil(EquipIndex).AirOutNode; ReturnNodeNum = state.dataFanCoilUnits->FanCoil(EquipIndex).AirInNode; } break; case DataZoneEquipment::ZoneEquipType::OutdoorAirUnit: { // ZoneHVAC : OutdoorAirUnit - EquipIndex = OutdoorAirUnit::getOutdoorAirUnitEqIndex(state, EquipName, errorfound); + EquipIndex = OutdoorAirUnit::getOutdoorAirUnitEqIndex(state, EquipName); + if (EquipIndex == 0) return EquipFind; SupplyNodeNum = state.dataOutdoorAirUnit->OutAirUnit(EquipIndex).AirOutletNode; ReturnNodeNum = state.dataOutdoorAirUnit->OutAirUnit(EquipIndex).AirInletNode; } break; case DataZoneEquipment::ZoneEquipType::PackagedTerminalAirConditioner: { // ZoneHVAC : PackagedTerminalAirConditioner - EquipIndex = UnitarySystems::getZoneEqIndex(state, EquipName, zoneEquipType, errorfound); + EquipIndex = UnitarySystems::getZoneEqIndex(state, EquipName, zoneEquipType); + if (EquipIndex == -1) return EquipFind; SupplyNodeNum = state.dataUnitarySystems->unitarySys[EquipIndex].AirOutNode; ReturnNodeNum = state.dataUnitarySystems->unitarySys[EquipIndex].AirInNode; } break; case DataZoneEquipment::ZoneEquipType::PackagedTerminalHeatPump: { // ZoneHVAC : PackagedTerminalHeatPump - EquipIndex = UnitarySystems::getZoneEqIndex(state, EquipName, zoneEquipType, errorfound); + EquipIndex = UnitarySystems::getZoneEqIndex(state, EquipName, zoneEquipType); + if (EquipIndex == -1) return EquipFind; SupplyNodeNum = state.dataUnitarySystems->unitarySys[EquipIndex].AirOutNode; ReturnNodeNum = state.dataUnitarySystems->unitarySys[EquipIndex].AirInNode; } break; case DataZoneEquipment::ZoneEquipType::UnitHeater: { // ZoneHVAC : UnitHeater - EquipIndex = UnitHeater::getUnitHeaterIndex(state, EquipName, errorfound); + EquipIndex = UnitHeater::getUnitHeaterIndex(state, EquipName); + if (EquipIndex == 0) return EquipFind; ReturnNodeNum = state.dataUnitHeaters->UnitHeat(EquipIndex).AirInNode; SupplyNodeNum = state.dataUnitHeaters->UnitHeat(EquipIndex).AirOutNode; } break; case DataZoneEquipment::ZoneEquipType::UnitVentilator: { // ZoneHVAC : UnitVentilator - EquipIndex = UnitVentilator::getUnitVentilatorIndex(state, EquipName, errorfound); + EquipIndex = UnitVentilator::getUnitVentilatorIndex(state, EquipName); + if (EquipIndex == 0) return EquipFind; ReturnNodeNum = state.dataUnitVentilators->UnitVent(EquipIndex).AirInNode; SupplyNodeNum = state.dataUnitVentilators->UnitVent(EquipIndex).AirOutNode; } break; case DataZoneEquipment::ZoneEquipType::VentilatedSlab: { // ZoneHVAC : VentilatedSlab - EquipIndex = VentilatedSlab::getVentilatedSlabIndex(state, EquipName, errorfound); + EquipIndex = VentilatedSlab::getVentilatedSlabIndex(state, EquipName); + if (EquipIndex == 0) return EquipFind; ReturnNodeNum = state.dataVentilatedSlab->VentSlab(EquipIndex).ReturnAirNode; SupplyNodeNum = state.dataVentilatedSlab->VentSlab(EquipIndex).ZoneAirInNode; } break; case DataZoneEquipment::ZoneEquipType::PackagedTerminalHeatPumpWaterToAir: { // ZoneHVAC : WaterToAirHeatPump - EquipIndex = UnitarySystems::getZoneEqIndex(state, EquipName, zoneEquipType, errorfound); + EquipIndex = UnitarySystems::getZoneEqIndex(state, EquipName, zoneEquipType); + if (EquipIndex == -1) return EquipFind; SupplyNodeNum = state.dataUnitarySystems->unitarySys[EquipIndex].AirOutNode; ReturnNodeNum = state.dataUnitarySystems->unitarySys[EquipIndex].AirInNode; } break; case DataZoneEquipment::ZoneEquipType::WindowAirConditioner: { // ZoneHVAC : WindowAirConditioner - EquipIndex = WindowAC::getWindowACIndex(state, EquipName, errorfound); + EquipIndex = WindowAC::getWindowACIndex(state, EquipName); + if (EquipIndex == 0) return EquipFind; ReturnNodeNum = state.dataWindowAC->WindAC(EquipIndex).AirInNode; SupplyNodeNum = state.dataWindowAC->WindAC(EquipIndex).AirOutNode; } break; @@ -2800,12 +2811,14 @@ namespace RoomAir { SupplyNodeName = ""; } break; case DataZoneEquipment::ZoneEquipType::DehumidifierDX: { // ZoneHVAC : Dehumidifier : DX - EquipIndex = ZoneDehumidifier::getZoneDehumidifierIndex(state, EquipName, errorfound); + EquipIndex = ZoneDehumidifier::getZoneDehumidifierIndex(state, EquipName); + if (EquipIndex == 0) return EquipFind; ReturnNodeNum = state.dataZoneDehumidifier->ZoneDehumid(EquipIndex).AirInletNodeNum; SupplyNodeNum = state.dataZoneDehumidifier->ZoneDehumid(EquipIndex).AirOutletNodeNum; } break; case DataZoneEquipment::ZoneEquipType::PurchasedAir: { // ZoneHVAC : IdealLoadsAirSystem - EquipIndex = PurchasedAirManager::getPurchasedAirIndex(state, EquipName, errorfound); + EquipIndex = PurchasedAirManager::getPurchasedAirIndex(state, EquipName); + if (EquipIndex == 0) return EquipFind; ReturnNodeNum = state.dataPurchasedAirMgr->PurchAir(EquipIndex).ZoneExhaustAirNodeNum; SupplyNodeNum = state.dataPurchasedAirMgr->PurchAir(EquipIndex).ZoneSupplyAirNodeNum; } break; @@ -2815,7 +2828,8 @@ namespace RoomAir { // ReturnNodeName = Alphas(4); } break; case DataZoneEquipment::ZoneEquipType::HybridEvaporativeCooler: { // ZoneHVAC : HybridUnitaryAirConditioners - EquipIndex = HybridUnitaryAirConditioners::getHybridUnitaryACIndex(state, EquipName, errorfound); + EquipIndex = HybridUnitaryAirConditioners::getHybridUnitaryACIndex(state, EquipName); + if (EquipIndex == 0) return EquipFind; ReturnNodeNum = state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(EquipIndex).InletNode; SupplyNodeNum = state.dataHybridUnitaryAC->ZoneHybridUnitaryAirConditioner(EquipIndex).OutletNode; } break; @@ -2824,7 +2838,8 @@ namespace RoomAir { // SupplyNodeName = ""; // ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? May not use } break; case DataZoneEquipment::ZoneEquipType::HeatPumpWaterHeater: { // WaterHeater : HeatPump - EquipIndex = WaterThermalTanks::getHeatPumpWaterHeaterIndex(state, EquipName, errorfound); + EquipIndex = WaterThermalTanks::getHeatPumpWaterHeaterIndex(state, EquipName); + if (EquipIndex == 0) return EquipFind; ReturnNodeNum = state.dataWaterThermalTanks->HPWaterHeater(EquipIndex).HeatPumpAirInletNode; SupplyNodeNum = state.dataWaterThermalTanks->HPWaterHeater(EquipIndex).HeatPumpAirOutletNode; // For AirTerminals, find matching return node later diff --git a/src/EnergyPlus/UnitHeater.cc b/src/EnergyPlus/UnitHeater.cc index e1ced26febe..ab65383c24d 100644 --- a/src/EnergyPlus/UnitHeater.cc +++ b/src/EnergyPlus/UnitHeater.cc @@ -1894,21 +1894,20 @@ namespace UnitHeater { } } - int getUnitHeaterIndex(EnergyPlusData &state, std::string_view CompName, bool &errFlag) + int getUnitHeaterIndex(EnergyPlusData &state, std::string_view CompName) { if (state.dataUnitHeaters->GetUnitHeaterInputFlag) { GetUnitHeaterInput(state); state.dataUnitHeaters->GetUnitHeaterInputFlag = false; } - int EquipIndex = 0; + for (int UnitHeatNum = 1; UnitHeatNum <= state.dataUnitHeaters->NumOfUnitHeats; ++UnitHeatNum) { if (Util::SameString(state.dataUnitHeaters->UnitHeat(UnitHeatNum).Name, CompName)) { - EquipIndex = UnitHeatNum; + return UnitHeatNum; } } - if (EquipIndex == 0) errFlag = true; - return EquipIndex; + return 0; } } // namespace UnitHeater diff --git a/src/EnergyPlus/UnitHeater.hh b/src/EnergyPlus/UnitHeater.hh index cdba6ccda1e..d0a95f1011e 100644 --- a/src/EnergyPlus/UnitHeater.hh +++ b/src/EnergyPlus/UnitHeater.hh @@ -202,7 +202,7 @@ namespace UnitHeater { void ReportUnitHeater(EnergyPlusData &state, int const UnitHeatNum); // Unit index in unit heater array - int getUnitHeaterIndex(EnergyPlusData &state, std::string_view CompName, bool &errFlag); + int getUnitHeaterIndex(EnergyPlusData &state, std::string_view CompName); } // namespace UnitHeater struct UnitHeatersData : BaseGlobalStruct diff --git a/src/EnergyPlus/UnitVentilator.cc b/src/EnergyPlus/UnitVentilator.cc index e12e922e7a4..3d9352d8a1a 100644 --- a/src/EnergyPlus/UnitVentilator.cc +++ b/src/EnergyPlus/UnitVentilator.cc @@ -3365,21 +3365,19 @@ namespace UnitVentilator { return GetUnitVentilatorReturnAirNode; } - int getUnitVentilatorIndex(EnergyPlusData &state, std::string_view CompName, bool &errFlag) + int getUnitVentilatorIndex(EnergyPlusData &state, std::string_view CompName) { if (state.dataUnitVentilators->GetUnitVentilatorInputFlag) { GetUnitVentilatorInput(state); state.dataUnitVentilators->GetUnitVentilatorInputFlag = false; } - int EquipIndex = 0; for (int UnitVentNum = 1; UnitVentNum <= state.dataUnitVentilators->NumOfUnitVents; ++UnitVentNum) { if (Util::SameString(state.dataUnitVentilators->UnitVent(UnitVentNum).Name, CompName)) { - EquipIndex = UnitVentNum; + return UnitVentNum; } } - if (EquipIndex == 0) errFlag = true; - return EquipIndex; + return 0; } Real64 SetOAMassFlowRateForCoolingVariablePercent(EnergyPlusData &state, diff --git a/src/EnergyPlus/UnitVentilator.hh b/src/EnergyPlus/UnitVentilator.hh index 97822f24d09..2dada2c6b8f 100644 --- a/src/EnergyPlus/UnitVentilator.hh +++ b/src/EnergyPlus/UnitVentilator.hh @@ -262,7 +262,7 @@ namespace UnitVentilator { int GetUnitVentilatorReturnAirNode(EnergyPlusData &state, int const UnitVentNum); - int getUnitVentilatorIndex(EnergyPlusData &state, std::string_view CompName, bool &errFlag); + int getUnitVentilatorIndex(EnergyPlusData &state, std::string_view CompName); Real64 SetOAMassFlowRateForCoolingVariablePercent(EnergyPlusData &state, int const UnitVentNum, // Unit Ventilator index number diff --git a/src/EnergyPlus/UnitarySystem.cc b/src/EnergyPlus/UnitarySystem.cc index 3feee353b20..22f8ca3c664 100644 --- a/src/EnergyPlus/UnitarySystem.cc +++ b/src/EnergyPlus/UnitarySystem.cc @@ -16574,8 +16574,7 @@ namespace UnitarySystems { return airNode; } - int getZoneEqIndex( - EnergyPlusData &state, std::string const &UnitarySysName, DataZoneEquipment::ZoneEquipType zoneEquipType, bool &errFlag, int const OAUnitNum) + int getZoneEqIndex(EnergyPlusData &state, std::string const &UnitarySysName, DataZoneEquipment::ZoneEquipType zoneEquipType, int const OAUnitNum) { if (state.dataUnitarySystems->getInputOnceFlag) { @@ -16583,20 +16582,17 @@ namespace UnitarySystems { state.dataUnitarySystems->getInputOnceFlag = false; } - int EquipIndex = -1; for (int UnitarySysNum = 0; UnitarySysNum < state.dataUnitarySystems->numUnitarySystems; ++UnitarySysNum) { if (Util::SameString(UnitarySysName, state.dataUnitarySystems->unitarySys[UnitarySysNum].Name)) { if (zoneEquipType == DataZoneEquipment::ZoneEquipType::PackagedTerminalAirConditioner || zoneEquipType == DataZoneEquipment::ZoneEquipType::PackagedTerminalHeatPump || zoneEquipType == DataZoneEquipment::ZoneEquipType::PackagedTerminalHeatPumpWaterToAir || zoneEquipType == DataZoneEquipment::ZoneEquipType::UnitarySystem) { - EquipIndex = UnitarySysNum; - break; + return UnitarySysNum; } } } - if (EquipIndex < 0) errFlag = true; - return EquipIndex; + return -1; } int UnitarySys::getAirOutNode(EnergyPlusData &state, std::string_view UnitarySysName, int const ZoneOAUnitNum, bool &errFlag) diff --git a/src/EnergyPlus/UnitarySystem.hh b/src/EnergyPlus/UnitarySystem.hh index 7572c556e4b..d1036eef855 100644 --- a/src/EnergyPlus/UnitarySystem.hh +++ b/src/EnergyPlus/UnitarySystem.hh @@ -969,7 +969,6 @@ namespace UnitarySystems { int getZoneEqIndex(EnergyPlusData &state, std::string const &UnitarySysName, DataZoneEquipment::ZoneEquipType zoneEquipType, - bool &errFlag, int const OAUnitNum = 0); } // namespace UnitarySystems diff --git a/src/EnergyPlus/VentilatedSlab.cc b/src/EnergyPlus/VentilatedSlab.cc index 1de17f5c2e0..396d604b928 100644 --- a/src/EnergyPlus/VentilatedSlab.cc +++ b/src/EnergyPlus/VentilatedSlab.cc @@ -4762,22 +4762,20 @@ namespace VentilatedSlab { } } - int getVentilatedSlabIndex(EnergyPlusData &state, std::string_view CompName, bool &errFlag) + int getVentilatedSlabIndex(EnergyPlusData &state, std::string_view CompName) { if (state.dataVentilatedSlab->GetInputFlag) { GetVentilatedSlabInput(state); state.dataVentilatedSlab->GetInputFlag = false; } - int EquipIndex = 0; for (int VentSlabNum = 1; VentSlabNum <= state.dataVentilatedSlab->NumOfVentSlabs; ++VentSlabNum) { if (Util::SameString(state.dataVentilatedSlab->VentSlab(VentSlabNum).Name, CompName)) { - EquipIndex = VentSlabNum; + return VentSlabNum; } } - if (EquipIndex == 0) errFlag = true; - return EquipIndex; + return 0; } //***************************************************************************************** diff --git a/src/EnergyPlus/VentilatedSlab.hh b/src/EnergyPlus/VentilatedSlab.hh index 43dcf328ba5..7d2437567aa 100644 --- a/src/EnergyPlus/VentilatedSlab.hh +++ b/src/EnergyPlus/VentilatedSlab.hh @@ -383,7 +383,7 @@ namespace VentilatedSlab { void ReportVentilatedSlab(EnergyPlusData &state, int const Item); // Index for the ventilated slab under consideration within the derived types - int getVentilatedSlabIndex(EnergyPlusData &state, std::string_view CompName, bool &errFlag); + int getVentilatedSlabIndex(EnergyPlusData &state, std::string_view CompName); //***************************************************************************************** } // namespace VentilatedSlab diff --git a/src/EnergyPlus/WaterThermalTanks.cc b/src/EnergyPlus/WaterThermalTanks.cc index e0b2b075c45..797bf7b5e14 100644 --- a/src/EnergyPlus/WaterThermalTanks.cc +++ b/src/EnergyPlus/WaterThermalTanks.cc @@ -12464,22 +12464,20 @@ bool GetHeatPumpWaterHeaterNodeNumber(EnergyPlusData &state, int const NodeNumbe return HeatPumpWaterHeaterNodeException; } -int getHeatPumpWaterHeaterIndex(EnergyPlusData &state, std::string_view CompName, bool &errFlag) +int getHeatPumpWaterHeaterIndex(EnergyPlusData &state, std::string_view CompName) { if (state.dataWaterThermalTanks->getWaterThermalTankInputFlag) { GetWaterThermalTankInput(state); state.dataWaterThermalTanks->getWaterThermalTankInputFlag = false; } - int EquipIndex = 0; for (int HPNum = 1; HPNum <= state.dataWaterThermalTanks->numHeatPumpWaterHeater; ++HPNum) { if (Util::SameString(state.dataWaterThermalTanks->HPWaterHeater(HPNum).Name, CompName)) { - EquipIndex = HPNum; + return HPNum; } } - if (EquipIndex == 0) errFlag = true; - return EquipIndex; + return 0; } } // namespace EnergyPlus::WaterThermalTanks diff --git a/src/EnergyPlus/WaterThermalTanks.hh b/src/EnergyPlus/WaterThermalTanks.hh index a64c6c46e16..db9657f0809 100644 --- a/src/EnergyPlus/WaterThermalTanks.hh +++ b/src/EnergyPlus/WaterThermalTanks.hh @@ -991,7 +991,7 @@ namespace WaterThermalTanks { bool GetHeatPumpWaterHeaterNodeNumber(EnergyPlusData &state, int NodeNumber); - int getHeatPumpWaterHeaterIndex(EnergyPlusData &state, std::string_view CompName, bool &errFlag); + int getHeatPumpWaterHeaterIndex(EnergyPlusData &state, std::string_view CompName); } // namespace WaterThermalTanks diff --git a/src/EnergyPlus/WindowAC.cc b/src/EnergyPlus/WindowAC.cc index 9d405e13750..29d26ebe298 100644 --- a/src/EnergyPlus/WindowAC.cc +++ b/src/EnergyPlus/WindowAC.cc @@ -1619,22 +1619,20 @@ namespace WindowAC { return GetWindowACMixedAirNode; } - int getWindowACIndex(EnergyPlusData &state, std::string_view CompName, bool &errFlag) + int getWindowACIndex(EnergyPlusData &state, std::string_view CompName) { if (state.dataWindowAC->GetWindowACInputFlag) { GetWindowAC(state); state.dataWindowAC->GetWindowACInputFlag = false; } - int EquipIndex = 0; for (int WindACIndex = 1; WindACIndex <= state.dataWindowAC->NumWindAC; ++WindACIndex) { if (Util::SameString(state.dataWindowAC->WindAC(WindACIndex).Name, CompName)) { - EquipIndex = WindACIndex; + return WindACIndex; } } - if (EquipIndex == 0) errFlag = true; - return EquipIndex; + return 0; } } // namespace WindowAC diff --git a/src/EnergyPlus/WindowAC.hh b/src/EnergyPlus/WindowAC.hh index 4a61d04e164..81db5207b14 100644 --- a/src/EnergyPlus/WindowAC.hh +++ b/src/EnergyPlus/WindowAC.hh @@ -205,7 +205,7 @@ namespace WindowAC { int GetWindowACMixedAirNode(EnergyPlusData &state, int const WindACNum); - int getWindowACIndex(EnergyPlusData &state, std::string_view CompName, bool &errFlag); + int getWindowACIndex(EnergyPlusData &state, std::string_view CompName); } // namespace WindowAC diff --git a/src/EnergyPlus/ZoneDehumidifier.cc b/src/EnergyPlus/ZoneDehumidifier.cc index 0eafa52b1ab..95ec5aa25d2 100644 --- a/src/EnergyPlus/ZoneDehumidifier.cc +++ b/src/EnergyPlus/ZoneDehumidifier.cc @@ -1179,22 +1179,20 @@ namespace ZoneDehumidifier { return FindZoneDehumidifierNodeNumber; } - int getZoneDehumidifierIndex(EnergyPlusData &state, std::string_view CompName, bool &errFlag) + int getZoneDehumidifierIndex(EnergyPlusData &state, std::string_view CompName) { if (state.dataZoneDehumidifier->GetInputFlag) { GetZoneDehumidifierInput(state); state.dataZoneDehumidifier->GetInputFlag = false; } - int EquipIndex = 0; for (int ZoneDehumidNum = 1; ZoneDehumidNum <= (int)state.dataZoneDehumidifier->ZoneDehumid.size(); ++ZoneDehumidNum) { if (Util::SameString(state.dataZoneDehumidifier->ZoneDehumid(ZoneDehumidNum).Name, CompName)) { - EquipIndex = ZoneDehumidNum; + return ZoneDehumidNum; } } - if (EquipIndex == 0) errFlag = true; - return EquipIndex; + return 0; } } // namespace ZoneDehumidifier diff --git a/src/EnergyPlus/ZoneDehumidifier.hh b/src/EnergyPlus/ZoneDehumidifier.hh index 7232d040b29..1e62add786d 100644 --- a/src/EnergyPlus/ZoneDehumidifier.hh +++ b/src/EnergyPlus/ZoneDehumidifier.hh @@ -153,7 +153,7 @@ namespace ZoneDehumidifier { bool GetZoneDehumidifierNodeNumber(EnergyPlusData &state, int NodeNumber); // Node being tested - int getZoneDehumidifierIndex(EnergyPlusData &state, std::string_view CompName, bool &errFlag); + int getZoneDehumidifierIndex(EnergyPlusData &state, std::string_view CompName); } // namespace ZoneDehumidifier From 5059ae9cabf2ec07eb8f59111b6a2f5b7b1259c5 Mon Sep 17 00:00:00 2001 From: Lixing Gu Date: Mon, 15 Jul 2024 10:30:44 -0400 Subject: [PATCH 35/68] Clang format --- src/EnergyPlus/UnitarySystem.hh | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/EnergyPlus/UnitarySystem.hh b/src/EnergyPlus/UnitarySystem.hh index d1036eef855..287bd57cac3 100644 --- a/src/EnergyPlus/UnitarySystem.hh +++ b/src/EnergyPlus/UnitarySystem.hh @@ -966,10 +966,8 @@ namespace UnitarySystems { void setupAllOutputVars(EnergyPlusData &state, int const numAllSystemTypes); void isWaterCoilHeatRecoveryType(EnergyPlusData const &state, int const waterCoilNodeNum, bool &nodeNotFound); - int getZoneEqIndex(EnergyPlusData &state, - std::string const &UnitarySysName, - DataZoneEquipment::ZoneEquipType zoneEquipType, - int const OAUnitNum = 0); + int + getZoneEqIndex(EnergyPlusData &state, std::string const &UnitarySysName, DataZoneEquipment::ZoneEquipType zoneEquipType, int const OAUnitNum = 0); } // namespace UnitarySystems struct UnitarySystemsData : BaseGlobalStruct From a9572ac3fdacb0778e704e85592d152174e54c63 Mon Sep 17 00:00:00 2001 From: Edwin Lee Date: Mon, 15 Jul 2024 12:01:02 -0500 Subject: [PATCH 36/68] Refactor some mixer code into methods --- src/EnergyPlus/MixedAir.cc | 142 +++++++++++++++++-------------------- src/EnergyPlus/MixedAir.hh | 133 ++++++++++++---------------------- 2 files changed, 113 insertions(+), 162 deletions(-) diff --git a/src/EnergyPlus/MixedAir.cc b/src/EnergyPlus/MixedAir.cc index 5d01eff5164..79d6c26c6df 100644 --- a/src/EnergyPlus/MixedAir.cc +++ b/src/EnergyPlus/MixedAir.cc @@ -758,11 +758,13 @@ void SimOAMixer(EnergyPlusData &state, std::string const &CompName, int &CompInd OAMixerNum = CompIndex; } - InitOAMixer(state, OAMixerNum); + auto &mixer = state.dataMixedAir->OAMixer(OAMixerNum); - CalcOAMixer(state, OAMixerNum); + mixer.InitOAMixer(state); - UpdateOAMixer(state, OAMixerNum); + mixer.CalcOAMixer(state); + + mixer.UpdateOAMixer(state); } void SimOAController(EnergyPlusData &state, std::string const &CtrlName, int &CtrlIndex, bool const FirstHVACIteration, int const AirLoopNum) @@ -3291,7 +3293,7 @@ void InitOAController(EnergyPlusData &state, int const OAControllerNum, bool con } } // namespace MixedAir -void InitOAMixer(EnergyPlusData &state, int const OAMixerNum) +void OAMixerProps::InitOAMixer(EnergyPlusData &state) { // SUBROUTINE INFORMATION: // AUTHOR Fred Buhl @@ -3300,24 +3302,24 @@ void InitOAMixer(EnergyPlusData &state, int const OAMixerNum) // PURPOSE OF THIS SUBROUTINE // Initialize the OAMixer data structure with input node data - int RetNode = state.dataMixedAir->OAMixer(OAMixerNum).RetNode; - int InletNode = state.dataMixedAir->OAMixer(OAMixerNum).InletNode; - int RelNode = state.dataMixedAir->OAMixer(OAMixerNum).RelNode; + int RetNode = this->RetNode; + int InletNode = this->InletNode; + int RelNode = this->RelNode; // Return air stream data - state.dataMixedAir->OAMixer(OAMixerNum).RetTemp = state.dataLoopNodes->Node(RetNode).Temp; - state.dataMixedAir->OAMixer(OAMixerNum).RetHumRat = state.dataLoopNodes->Node(RetNode).HumRat; - state.dataMixedAir->OAMixer(OAMixerNum).RetEnthalpy = state.dataLoopNodes->Node(RetNode).Enthalpy; - state.dataMixedAir->OAMixer(OAMixerNum).RetPressure = state.dataLoopNodes->Node(RetNode).Press; - state.dataMixedAir->OAMixer(OAMixerNum).RetMassFlowRate = state.dataLoopNodes->Node(RetNode).MassFlowRate; + this->RetTemp = state.dataLoopNodes->Node(RetNode).Temp; + this->RetHumRat = state.dataLoopNodes->Node(RetNode).HumRat; + this->RetEnthalpy = state.dataLoopNodes->Node(RetNode).Enthalpy; + this->RetPressure = state.dataLoopNodes->Node(RetNode).Press; + this->RetMassFlowRate = state.dataLoopNodes->Node(RetNode).MassFlowRate; // Outside air stream data - state.dataMixedAir->OAMixer(OAMixerNum).OATemp = state.dataLoopNodes->Node(InletNode).Temp; - state.dataMixedAir->OAMixer(OAMixerNum).OAHumRat = state.dataLoopNodes->Node(InletNode).HumRat; - state.dataMixedAir->OAMixer(OAMixerNum).OAEnthalpy = state.dataLoopNodes->Node(InletNode).Enthalpy; - state.dataMixedAir->OAMixer(OAMixerNum).OAPressure = state.dataLoopNodes->Node(InletNode).Press; - state.dataMixedAir->OAMixer(OAMixerNum).OAMassFlowRate = state.dataLoopNodes->Node(InletNode).MassFlowRate; + this->OATemp = state.dataLoopNodes->Node(InletNode).Temp; + this->OAHumRat = state.dataLoopNodes->Node(InletNode).HumRat; + this->OAEnthalpy = state.dataLoopNodes->Node(InletNode).Enthalpy; + this->OAPressure = state.dataLoopNodes->Node(InletNode).Press; + this->OAMassFlowRate = state.dataLoopNodes->Node(InletNode).MassFlowRate; // Relief air data - state.dataMixedAir->OAMixer(OAMixerNum).RelMassFlowRate = state.dataLoopNodes->Node(RelNode).MassFlowRate; + this->RelMassFlowRate = state.dataLoopNodes->Node(RelNode).MassFlowRate; } void OAControllerProps::CalcOAController(EnergyPlusData &state, int const AirLoopNum, bool const FirstHVACIteration) @@ -4630,7 +4632,8 @@ void OAControllerProps::CalcOAEconomizer(EnergyPlusData &state, this->HighHumCtrlActive = false; } } -void CalcOAMixer(EnergyPlusData &state, int const OAMixerNum) + +void OAMixerProps::CalcOAMixer(EnergyPlusData &state) { // SUBROUTINE INFORMATION: @@ -4641,56 +4644,45 @@ void CalcOAMixer(EnergyPlusData &state, int const OAMixerNum) // Calculate the mixed air flow and conditions // Define a recirculation mass flow rate - Real64 RecircMassFlowRate = state.dataMixedAir->OAMixer(OAMixerNum).RetMassFlowRate - state.dataMixedAir->OAMixer(OAMixerNum).RelMassFlowRate; + Real64 RecircMassFlowRate = this->RetMassFlowRate - this->RelMassFlowRate; // In certain low flow conditions the return air mass flow rate can be below the outside air value established // by the user. This check will ensure that this condition does not result in unphysical air properties. if (RecircMassFlowRate < 0.0) { RecircMassFlowRate = 0.0; - state.dataMixedAir->OAMixer(OAMixerNum).RelMassFlowRate = state.dataMixedAir->OAMixer(OAMixerNum).RetMassFlowRate; + this->RelMassFlowRate = this->RetMassFlowRate; } // Pass through the return air conditions to the relief air stream. The return air is "split" to // the relief air and the recirculation air. - state.dataMixedAir->OAMixer(OAMixerNum).RelTemp = state.dataMixedAir->OAMixer(OAMixerNum).RetTemp; - state.dataMixedAir->OAMixer(OAMixerNum).RelHumRat = state.dataMixedAir->OAMixer(OAMixerNum).RetHumRat; - state.dataMixedAir->OAMixer(OAMixerNum).RelEnthalpy = state.dataMixedAir->OAMixer(OAMixerNum).RetEnthalpy; - state.dataMixedAir->OAMixer(OAMixerNum).RelPressure = state.dataMixedAir->OAMixer(OAMixerNum).RetPressure; - Real64 RecircPressure = state.dataMixedAir->OAMixer(OAMixerNum).RetPressure; - Real64 RecircEnthalpy = state.dataMixedAir->OAMixer(OAMixerNum).RetEnthalpy; - Real64 RecircHumRat = state.dataMixedAir->OAMixer(OAMixerNum).RetHumRat; + this->RelTemp = this->RetTemp; + this->RelHumRat = this->RetHumRat; + this->RelEnthalpy = this->RetEnthalpy; + this->RelPressure = this->RetPressure; + Real64 RecircPressure = this->RetPressure; + Real64 RecircEnthalpy = this->RetEnthalpy; + Real64 RecircHumRat = this->RetHumRat; // The recirculation air and the outside air are mixed to form the mixed air stream - state.dataMixedAir->OAMixer(OAMixerNum).MixMassFlowRate = state.dataMixedAir->OAMixer(OAMixerNum).OAMassFlowRate + RecircMassFlowRate; + this->MixMassFlowRate = this->OAMassFlowRate + RecircMassFlowRate; // Check for zero flow - if (state.dataMixedAir->OAMixer(OAMixerNum).MixMassFlowRate <= HVAC::VerySmallMassFlow) { - state.dataMixedAir->OAMixer(OAMixerNum).MixEnthalpy = state.dataMixedAir->OAMixer(OAMixerNum).RetEnthalpy; - state.dataMixedAir->OAMixer(OAMixerNum).MixHumRat = state.dataMixedAir->OAMixer(OAMixerNum).RetHumRat; - state.dataMixedAir->OAMixer(OAMixerNum).MixPressure = state.dataMixedAir->OAMixer(OAMixerNum).RetPressure; - state.dataMixedAir->OAMixer(OAMixerNum).MixTemp = state.dataMixedAir->OAMixer(OAMixerNum).RetTemp; + if (this->MixMassFlowRate <= HVAC::VerySmallMassFlow) { + this->MixEnthalpy = this->RetEnthalpy; + this->MixHumRat = this->RetHumRat; + this->MixPressure = this->RetPressure; + this->MixTemp = this->RetTemp; return; } - state.dataMixedAir->OAMixer(OAMixerNum).MixEnthalpy = - (RecircMassFlowRate * RecircEnthalpy + - state.dataMixedAir->OAMixer(OAMixerNum).OAMassFlowRate * state.dataMixedAir->OAMixer(OAMixerNum).OAEnthalpy) / - state.dataMixedAir->OAMixer(OAMixerNum).MixMassFlowRate; - state.dataMixedAir->OAMixer(OAMixerNum).MixHumRat = (RecircMassFlowRate * RecircHumRat + state.dataMixedAir->OAMixer(OAMixerNum).OAMassFlowRate * - state.dataMixedAir->OAMixer(OAMixerNum).OAHumRat) / - state.dataMixedAir->OAMixer(OAMixerNum).MixMassFlowRate; - state.dataMixedAir->OAMixer(OAMixerNum).MixPressure = - (RecircMassFlowRate * RecircPressure + - state.dataMixedAir->OAMixer(OAMixerNum).OAMassFlowRate * state.dataMixedAir->OAMixer(OAMixerNum).OAPressure) / - state.dataMixedAir->OAMixer(OAMixerNum).MixMassFlowRate; + this->MixEnthalpy = (RecircMassFlowRate * RecircEnthalpy + this->OAMassFlowRate * this->OAEnthalpy) / this->MixMassFlowRate; + this->MixHumRat = (RecircMassFlowRate * RecircHumRat + this->OAMassFlowRate * this->OAHumRat) / this->MixMassFlowRate; + this->MixPressure = (RecircMassFlowRate * RecircPressure + this->OAMassFlowRate * this->OAPressure) / this->MixMassFlowRate; // Mixed air temperature is calculated from the mixed air enthalpy and humidity ratio. - state.dataMixedAir->OAMixer(OAMixerNum).MixTemp = - Psychrometrics::PsyTdbFnHW(state.dataMixedAir->OAMixer(OAMixerNum).MixEnthalpy, state.dataMixedAir->OAMixer(OAMixerNum).MixHumRat); + this->MixTemp = Psychrometrics::PsyTdbFnHW(this->MixEnthalpy, this->MixHumRat); // Check for saturation temperature > dry-bulb temperature and modify temperature at constant enthalpy - Real64 T_sat = - Psychrometrics::PsyTsatFnHPb(state, state.dataMixedAir->OAMixer(OAMixerNum).MixEnthalpy, state.dataMixedAir->OAMixer(OAMixerNum).MixPressure); - if (state.dataMixedAir->OAMixer(OAMixerNum).MixTemp < T_sat) { - state.dataMixedAir->OAMixer(OAMixerNum).MixTemp = T_sat; - state.dataMixedAir->OAMixer(OAMixerNum).MixHumRat = - Psychrometrics::PsyWFnTdbH(state, T_sat, state.dataMixedAir->OAMixer(OAMixerNum).MixEnthalpy); + Real64 T_sat = Psychrometrics::PsyTsatFnHPb(state, this->MixEnthalpy, this->MixPressure); + if (this->MixTemp < T_sat) { + this->MixTemp = T_sat; + this->MixHumRat = Psychrometrics::PsyWFnTdbH(state, T_sat, this->MixEnthalpy); } } @@ -4880,7 +4872,7 @@ void OAControllerProps::UpdateOAController(EnergyPlusData &state) } } -void UpdateOAMixer(EnergyPlusData &state, int const OAMixerNum) +void OAMixerProps::UpdateOAMixer(EnergyPlusData &state) const { // SUBROUTINE INFORMATION: @@ -4891,47 +4883,47 @@ void UpdateOAMixer(EnergyPlusData &state, int const OAMixerNum) // Move the results of CalcOAMixer to the affected nodes // SUBROUTINE LOCAL VARIABLE DECLARATIONS: - int MixNode = state.dataMixedAir->OAMixer(OAMixerNum).MixNode; - int RelNode = state.dataMixedAir->OAMixer(OAMixerNum).RelNode; - int RetNode = state.dataMixedAir->OAMixer(OAMixerNum).RetNode; + int MixNode = this->MixNode; + int RelNode = this->RelNode; + int RetNode = this->RetNode; // Move mixed air data to the mixed air node - state.dataLoopNodes->Node(MixNode).MassFlowRate = state.dataMixedAir->OAMixer(OAMixerNum).MixMassFlowRate; - state.dataLoopNodes->Node(MixNode).Temp = state.dataMixedAir->OAMixer(OAMixerNum).MixTemp; - state.dataLoopNodes->Node(MixNode).HumRat = state.dataMixedAir->OAMixer(OAMixerNum).MixHumRat; - state.dataLoopNodes->Node(MixNode).Enthalpy = state.dataMixedAir->OAMixer(OAMixerNum).MixEnthalpy; - state.dataLoopNodes->Node(MixNode).Press = state.dataMixedAir->OAMixer(OAMixerNum).MixPressure; - state.dataLoopNodes->Node(MixNode).MassFlowRateMaxAvail = state.dataMixedAir->OAMixer(OAMixerNum).MixMassFlowRate; + state.dataLoopNodes->Node(MixNode).MassFlowRate = this->MixMassFlowRate; + state.dataLoopNodes->Node(MixNode).Temp = this->MixTemp; + state.dataLoopNodes->Node(MixNode).HumRat = this->MixHumRat; + state.dataLoopNodes->Node(MixNode).Enthalpy = this->MixEnthalpy; + state.dataLoopNodes->Node(MixNode).Press = this->MixPressure; + state.dataLoopNodes->Node(MixNode).MassFlowRateMaxAvail = this->MixMassFlowRate; // Move the relief air data to the relief air node - state.dataLoopNodes->Node(RelNode).MassFlowRate = state.dataMixedAir->OAMixer(OAMixerNum).RelMassFlowRate; - state.dataLoopNodes->Node(RelNode).Temp = state.dataMixedAir->OAMixer(OAMixerNum).RelTemp; - state.dataLoopNodes->Node(RelNode).HumRat = state.dataMixedAir->OAMixer(OAMixerNum).RelHumRat; - state.dataLoopNodes->Node(RelNode).Enthalpy = state.dataMixedAir->OAMixer(OAMixerNum).RelEnthalpy; - state.dataLoopNodes->Node(RelNode).Press = state.dataMixedAir->OAMixer(OAMixerNum).RelPressure; - state.dataLoopNodes->Node(RelNode).MassFlowRateMaxAvail = state.dataMixedAir->OAMixer(OAMixerNum).RelMassFlowRate; + state.dataLoopNodes->Node(RelNode).MassFlowRate = this->RelMassFlowRate; + state.dataLoopNodes->Node(RelNode).Temp = this->RelTemp; + state.dataLoopNodes->Node(RelNode).HumRat = this->RelHumRat; + state.dataLoopNodes->Node(RelNode).Enthalpy = this->RelEnthalpy; + state.dataLoopNodes->Node(RelNode).Press = this->RelPressure; + state.dataLoopNodes->Node(RelNode).MassFlowRateMaxAvail = this->RelMassFlowRate; if (state.dataContaminantBalance->Contaminant.CO2Simulation) { state.dataLoopNodes->Node(RelNode).CO2 = state.dataLoopNodes->Node(RetNode).CO2; - if (state.dataMixedAir->OAMixer(OAMixerNum).MixMassFlowRate <= HVAC::VerySmallMassFlow) { + if (this->MixMassFlowRate <= HVAC::VerySmallMassFlow) { state.dataLoopNodes->Node(MixNode).CO2 = state.dataLoopNodes->Node(RetNode).CO2; } else { state.dataLoopNodes->Node(MixNode).CO2 = ((state.dataLoopNodes->Node(RetNode).MassFlowRate - state.dataLoopNodes->Node(RelNode).MassFlowRate) * state.dataLoopNodes->Node(RetNode).CO2 + - state.dataMixedAir->OAMixer(OAMixerNum).OAMassFlowRate * state.dataContaminantBalance->OutdoorCO2) / - state.dataMixedAir->OAMixer(OAMixerNum).MixMassFlowRate; + this->OAMassFlowRate * state.dataContaminantBalance->OutdoorCO2) / + this->MixMassFlowRate; } } if (state.dataContaminantBalance->Contaminant.GenericContamSimulation) { state.dataLoopNodes->Node(RelNode).GenContam = state.dataLoopNodes->Node(RetNode).GenContam; - if (state.dataMixedAir->OAMixer(OAMixerNum).MixMassFlowRate <= HVAC::VerySmallMassFlow) { + if (this->MixMassFlowRate <= HVAC::VerySmallMassFlow) { state.dataLoopNodes->Node(MixNode).GenContam = state.dataLoopNodes->Node(RetNode).GenContam; } else { state.dataLoopNodes->Node(MixNode).GenContam = ((state.dataLoopNodes->Node(RetNode).MassFlowRate - state.dataLoopNodes->Node(RelNode).MassFlowRate) * state.dataLoopNodes->Node(RetNode).GenContam + - state.dataMixedAir->OAMixer(OAMixerNum).OAMassFlowRate * state.dataContaminantBalance->OutdoorGC) / - state.dataMixedAir->OAMixer(OAMixerNum).MixMassFlowRate; + this->OAMassFlowRate * state.dataContaminantBalance->OutdoorGC) / + this->MixMassFlowRate; } } } diff --git a/src/EnergyPlus/MixedAir.hh b/src/EnergyPlus/MixedAir.hh index 4fad3e8ac5c..026ca0c8f5a 100644 --- a/src/EnergyPlus/MixedAir.hh +++ b/src/EnergyPlus/MixedAir.hh @@ -57,7 +57,7 @@ // EnergyPlus Headers #include #include -#include +// #include #include #include #include @@ -246,21 +246,17 @@ namespace MixedAir { OALimitFactor OALimitingFactor = OALimitFactor::Invalid; // OA controller limiting factor int OALimitingFactorReport = 0; // OA controller limiting factor - integer for reporting - void CalcOAController(EnergyPlusData &state, int const AirLoopNum, bool const FirstHVACIteration); + void CalcOAController(EnergyPlusData &state, int AirLoopNum, bool FirstHVACIteration); - void CalcOAEconomizer(EnergyPlusData &state, - int const AirLoopNum, - Real64 const OutAirMinFrac, - Real64 &OASignal, - bool &HighHumidityOperationFlag, - bool const FirstHVACIteration); + void CalcOAEconomizer( + EnergyPlusData &state, int AirLoopNum, Real64 OutAirMinFrac, Real64 &OASignal, bool &HighHumidityOperationFlag, bool FirstHVACIteration); void SizeOAController(EnergyPlusData &state); void UpdateOAController(EnergyPlusData &state); void Checksetpoints(EnergyPlusData &state, - Real64 const OutAirMinFrac, // Local variable used to calculate min OA fraction + Real64 OutAirMinFrac, // Local variable used to calculate min OA fraction Real64 &OutAirSignal, // Used to set OA mass flow rate bool &EconomizerOperationFlag // logical used to show economizer status ); @@ -353,6 +349,12 @@ namespace MixedAir { Real64 RetEnthalpy = 0.0; Real64 RetPressure = 0.0; Real64 RetMassFlowRate = 0.0; + + void InitOAMixer(EnergyPlusData &state); + + void CalcOAMixer(EnergyPlusData &state); + + void UpdateOAMixer(EnergyPlusData &state) const; }; // Functions @@ -367,32 +369,28 @@ namespace MixedAir { int GetOAController(EnergyPlusData &state, std::string const &OAName); - void - ManageOutsideAirSystem(EnergyPlusData &state, std::string const &OASysName, bool const FirstHVACIteration, int const AirLoopNum, int &OASysNum); + void ManageOutsideAirSystem(EnergyPlusData &state, std::string const &OASysName, bool FirstHVACIteration, int AirLoopNum, int &OASysNum); - void SimOutsideAirSys(EnergyPlusData &state, int const OASysNum, bool const FirstHVACIteration, int const AirLoopNum); + void SimOutsideAirSys(EnergyPlusData &state, int OASysNum, bool FirstHVACIteration, int AirLoopNum); - void SimOASysComponents(EnergyPlusData &state, int const OASysNum, bool const FirstHVACIteration, int const AirLoopNum); + void SimOASysComponents(EnergyPlusData &state, int OASysNum, bool FirstHVACIteration, int AirLoopNum); void SimOAComponent(EnergyPlusData &state, - std::string const &CompType, // the component type - std::string const &CompName, // the component Name - SimAirServingZones::CompType const CompTypeNum, // Component Type -- Integerized for this module - bool const FirstHVACIteration, + std::string const &CompType, // the component type + std::string const &CompName, // the component Name + SimAirServingZones::CompType CompTypeNum, // Component Type -- Integerized for this module + bool FirstHVACIteration, int &CompIndex, - int const AirLoopNum, // air loop index for economizer lockout coordination - bool const Sim, // if TRUE, simulate component; if FALSE, just set the coil exisitence flags - int const OASysNum, // index to outside air system - bool &OAHeatingCoil, // TRUE indicates a heating coil has been found - bool &OACoolingCoil, // TRUE indicates a cooling coil has been found - bool &OAHX); // TRUE indicates a heat exchanger has been found + int AirLoopNum, // air loop index for economizer lockout coordination + bool Sim, // if TRUE, simulate component; if FALSE, just set the coil exisitence flags + int OASysNum, // index to outside air system + bool &OAHeatingCoil, // TRUE indicates a heating coil has been found + bool &OACoolingCoil, // TRUE indicates a cooling coil has been found + bool &OAHX); // TRUE indicates a heat exchanger has been found void SimOAMixer(EnergyPlusData &state, std::string const &CompName, int &CompIndex); - void SimOAController(EnergyPlusData &state, std::string const &CtrlName, int &CtrlIndex, bool const FirstHVACIteration, int const AirLoopNum); - - // Get Input Section of the Module - //****************************************************************************** + void SimOAController(EnergyPlusData &state, std::string const &CtrlName, int &CtrlIndex, bool FirstHVACIteration, int AirLoopNum); void GetOutsideAirSysInputs(EnergyPlusData &state); @@ -403,8 +401,8 @@ namespace MixedAir { void GetOAMixerInputs(EnergyPlusData &state); void ProcessOAControllerInputs(EnergyPlusData &state, - std::string_view const CurrentModuleObject, - int const OutAirNum, + std::string_view CurrentModuleObject, + int OutAirNum, Array1D_string const &AlphArray, int &NumAlphas, Array1D const &NumArray, @@ -416,45 +414,9 @@ namespace MixedAir { bool &ErrorsFound // If errors found in input ); - // End of Get Input subroutines for the Module - //****************************************************************************** - - // Beginning Initialization Section of the Module - //****************************************************************************** - - void InitOutsideAirSys(EnergyPlusData &state, int const OASysNum, int const AirLoopNum); - - void InitOAController(EnergyPlusData &state, int const OAControllerNum, bool const FirstHVACIteration, int const AirLoopNum); - - void InitOAMixer(EnergyPlusData &state, int const OAMixerNum); - - // End of Initialization Section of the Module - //****************************************************************************** + void InitOutsideAirSys(EnergyPlusData &state, int OASysNum, int AirLoopNum); - // Beginning Calculation Section of the Module - //****************************************************************************** - - void CalcOAMixer(EnergyPlusData &state, int const OAMixerNum); - - // End of Calculation/Simulation Section of the Module - //****************************************************************************** - - // Beginning Sizing Section of the Module - //****************************************************************************** - - // End of Sizing Section of the Module - //****************************************************************************** - - // Beginning Update/Reporting Section of the Module - //****************************************************************************** - - void UpdateOAMixer(EnergyPlusData &state, int const OAMixerNum); - - // End of Sizing Section of the Module - //****************************************************************************** - - // Beginning Utility Section of the Module - //****************************************************************************** + void InitOAController(EnergyPlusData &state, int OAControllerNum, bool FirstHVACIteration, int AirLoopNum); Array1D_int GetOAMixerNodeNumbers(EnergyPlusData &state, std::string const &OAMixerName, // must match OA mixer names for the OA mixer type @@ -465,29 +427,29 @@ namespace MixedAir { int GetNumOAControllers(EnergyPlusData &state); - int GetOAMixerReliefNodeNumber(EnergyPlusData &state, int const OAMixerNum); // Which Mixer + int GetOAMixerReliefNodeNumber(EnergyPlusData &state, int OAMixerNum); // Which Mixer - int GetOASysControllerListIndex(EnergyPlusData &state, int const OASysNumber); // OA Sys Number + int GetOASysControllerListIndex(EnergyPlusData &state, int OASysNumber); // OA Sys Number - int GetOASysNumSimpControllers(EnergyPlusData &state, int const OASysNumber); // OA Sys Number + int GetOASysNumSimpControllers(EnergyPlusData &state, int OASysNumber); // OA Sys Number - int GetOASysNumHeatingCoils(EnergyPlusData &state, int const OASysNumber); // OA Sys Number + int GetOASysNumHeatingCoils(EnergyPlusData &state, int OASysNumber); // OA Sys Number - int GetOASysNumHXs(EnergyPlusData &state, int const OASysNumber); // OA Sys Number + int GetOASysNumHXs(EnergyPlusData &state, int OASysNumber); // OA Sys Number - int GetOASysNumCoolingCoils(EnergyPlusData &state, int const OASysNumber); // OA Sys Number + int GetOASysNumCoolingCoils(EnergyPlusData &state, int OASysNumber); // OA Sys Number int GetOASystemNumber(EnergyPlusData &state, std::string const &OASysName); // OA Sys Name - int FindOAMixerMatchForOASystem(EnergyPlusData &state, int const OASysNumber); // Which OA System + int FindOAMixerMatchForOASystem(EnergyPlusData &state, int OASysNumber); // Which OA System int GetOAMixerIndex(EnergyPlusData &state, std::string const &OAMixerName); // Which Mixer - int GetOAMixerInletNodeNumber(EnergyPlusData &state, int const OAMixerNumber); // Which Mixer + int GetOAMixerInletNodeNumber(EnergyPlusData &state, int OAMixerNumber); // Which Mixer - int GetOAMixerReturnNodeNumber(EnergyPlusData &state, int const OAMixerNumber); // Which Mixer + int GetOAMixerReturnNodeNumber(EnergyPlusData &state, int OAMixerNumber); // Which Mixer - int GetOAMixerMixedNodeNumber(EnergyPlusData &state, int const OAMixerNumber); // Which Mixer + int GetOAMixerMixedNodeNumber(EnergyPlusData &state, int OAMixerNumber); // Which Mixer bool CheckForControllerWaterCoil(EnergyPlusData &state, DataAirLoop::ControllerKind ControllerType, // should be passed in as UPPERCASE @@ -501,28 +463,25 @@ namespace MixedAir { int GetNumOASystems(EnergyPlusData &state); - int GetOACompListNumber(EnergyPlusData &state, int const OASysNum); // OA Sys Number + int GetOACompListNumber(EnergyPlusData &state, int OASysNum); // OA Sys Number std::string GetOACompName(EnergyPlusData &state, - int const OASysNum, // OA Sys Number - int const InListNum // In-list Number + int OASysNum, // OA Sys Number + int InListNum // In-list Number ); std::string GetOACompType(EnergyPlusData &state, - int const OASysNum, // OA Sys Number - int const InListNum // In-list Number + int OASysNum, // OA Sys Number + int InListNum // In-list Number ); SimAirServingZones::CompType GetOACompTypeNum(EnergyPlusData &state, - int const OASysNum, // OA Sys Number - int const InListNum // In-list Number + int OASysNum, // OA Sys Number + int InListNum // In-list Number ); int GetOAMixerNumber(EnergyPlusData &state, std::string const &OAMixerName); // must match OA mixer names for the OA mixer type - // End of Utility Section of the Module - //****************************************************************************** - } // namespace MixedAir struct MixedAirData : BaseGlobalStruct From 472e3e9124979270bd4bdeaab8527a4d514951ad Mon Sep 17 00:00:00 2001 From: Edwin Lee Date: Mon, 15 Jul 2024 12:04:56 -0500 Subject: [PATCH 37/68] Loosen tolerance on temperature in unit test --- tst/EnergyPlus/unit/MixedAir.unit.cc | 2 +- tst/EnergyPlus/unit/PackagedTerminalHeatPump.unit.cc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tst/EnergyPlus/unit/MixedAir.unit.cc b/tst/EnergyPlus/unit/MixedAir.unit.cc index 05da5624374..16ec825ebd1 100644 --- a/tst/EnergyPlus/unit/MixedAir.unit.cc +++ b/tst/EnergyPlus/unit/MixedAir.unit.cc @@ -7745,7 +7745,7 @@ TEST_F(EnergyPlusFixture, MixedAir_TemperatureError) MixedAir::SimOAMixer(*state, state->dataAirLoop->OutsideAirSys(1).ComponentName(1), state->dataAirLoop->OutsideAirSys(1).ComponentIndex(1)); - auto T_sat = Psychrometrics::PsyTsatFnHPb(*state, state->dataMixedAir->OAMixer(1).MixEnthalpy, state->dataMixedAir->OAMixer(1).MixPressure); + Real64 const T_sat = Psychrometrics::PsyTsatFnHPb(*state, state->dataMixedAir->OAMixer(1).MixEnthalpy, state->dataMixedAir->OAMixer(1).MixPressure); // T_db must be >= T_sat at the mixed-air node to remain physical EXPECT_TRUE(state->dataMixedAir->OAMixer(1).MixTemp >= T_sat); diff --git a/tst/EnergyPlus/unit/PackagedTerminalHeatPump.unit.cc b/tst/EnergyPlus/unit/PackagedTerminalHeatPump.unit.cc index 023c2b73188..feb753e7edc 100644 --- a/tst/EnergyPlus/unit/PackagedTerminalHeatPump.unit.cc +++ b/tst/EnergyPlus/unit/PackagedTerminalHeatPump.unit.cc @@ -4028,7 +4028,7 @@ TEST_F(EnergyPlusFixture, PTACDrawAirfromReturnNodeAndPlenum_Test) // same temperature test as above commented out test (23.15327704750551), now shows 21.2 C // how do you mix 2 air streams with T1in=31.18 and T2in=23.15 and get Tout=21.23 ?? // must be a node enthalpy issue with this unit test? - EXPECT_NEAR(21.2317, state->dataLoopNodes->Node(ATMixer1AirOutNode).Temp, 0.001); + EXPECT_NEAR(21.2316, state->dataLoopNodes->Node(ATMixer1AirOutNode).Temp, 0.005); EXPECT_NEAR(0.324036, state->dataLoopNodes->Node(ATMixer1AirOutNode).MassFlowRate, 0.001); // mass balance zone 1 ATMixer outlet enthalpy based on pri and sec inlet stream enthalpy From f8641777dc11306e10f7a86fb94efc9876a56ba3 Mon Sep 17 00:00:00 2001 From: amirroth Date: Mon, 15 Jul 2024 13:10:21 -0400 Subject: [PATCH 38/68] Fluid properties API with one usage example (VRF) --- src/EnergyPlus/AirLoopHVACDOAS.cc | 6 +- .../CoolingWaterDesAirOutletTempSizing.cc | 4 +- .../Autosizing/CoolingWaterflowSizing.cc | 8 +- .../HeatingWaterDesCoilLoadUsedForUASizing.cc | 12 +- .../Autosizing/HeatingWaterflowSizing.cc | 8 +- .../Autosizing/WaterHeatingCapacitySizing.cc | 8 +- src/EnergyPlus/BaseboardRadiator.cc | 4 +- src/EnergyPlus/BoilerSteam.cc | 44 +- src/EnergyPlus/Boilers.cc | 8 +- src/EnergyPlus/CTElectricGenerator.cc | 4 +- src/EnergyPlus/ChilledCeilingPanelSimple.cc | 14 +- src/EnergyPlus/ChillerAbsorption.cc | 52 +- src/EnergyPlus/ChillerElectricASHRAE205.cc | 26 +- src/EnergyPlus/ChillerElectricEIR.cc | 24 +- src/EnergyPlus/ChillerExhaustAbsorption.cc | 20 +- src/EnergyPlus/ChillerGasAbsorption.cc | 20 +- src/EnergyPlus/ChillerIndirectAbsorption.cc | 54 +- src/EnergyPlus/ChillerReformulatedEIR.cc | 26 +- src/EnergyPlus/CondenserLoopTowers.cc | 88 +- src/EnergyPlus/Data/EnergyPlusData.cc | 6 +- src/EnergyPlus/Data/EnergyPlusData.hh | 2 +- src/EnergyPlus/DaylightingDevices.cc | 2 +- src/EnergyPlus/DesiccantDehumidifiers.cc | 12 +- src/EnergyPlus/EvaporativeFluidCoolers.cc | 42 +- src/EnergyPlus/FanCoilUnits.cc | 12 +- src/EnergyPlus/FluidCoolers.cc | 32 +- src/EnergyPlus/FluidProperties.cc | 3323 +++++++++-------- src/EnergyPlus/FluidProperties.hh | 424 ++- src/EnergyPlus/FuelCellElectricGenerator.cc | 4 +- src/EnergyPlus/Furnaces.cc | 26 +- src/EnergyPlus/GroundHeatExchangers.cc | 30 +- src/EnergyPlus/HVACControllers.cc | 2 +- src/EnergyPlus/HVACCooledBeam.cc | 10 +- src/EnergyPlus/HVACFourPipeBeam.cc | 20 +- src/EnergyPlus/HVACInterfaceManager.cc | 6 +- src/EnergyPlus/HVACMultiSpeedHeatPump.cc | 24 +- src/EnergyPlus/HVACSingleDuctInduc.cc | 12 +- src/EnergyPlus/HVACSizingSimulationManager.cc | 4 +- src/EnergyPlus/HVACUnitaryBypassVAV.cc | 10 +- src/EnergyPlus/HVACVariableRefrigerantFlow.cc | 449 +-- src/EnergyPlus/HVACVariableRefrigerantFlow.hh | 4 +- src/EnergyPlus/HWBaseboardRadiator.cc | 16 +- src/EnergyPlus/HeatPumpWaterToWaterCOOLING.cc | 26 +- src/EnergyPlus/HeatPumpWaterToWaterHEATING.cc | 26 +- src/EnergyPlus/HeatPumpWaterToWaterSimple.cc | 48 +- src/EnergyPlus/Humidifiers.cc | 20 +- src/EnergyPlus/ICEngineElectricGenerator.cc | 4 +- src/EnergyPlus/IceThermalStorage.cc | 6 +- src/EnergyPlus/LowTempRadiantSystem.cc | 23 +- src/EnergyPlus/MicroCHPElectricGenerator.cc | 8 +- .../MicroturbineElectricGenerator.cc | 6 +- src/EnergyPlus/NodeInputManager.cc | 12 +- src/EnergyPlus/OutdoorAirUnit.cc | 7 +- src/EnergyPlus/OutsideEnergySources.cc | 22 +- src/EnergyPlus/PackagedThermalStorageCoil.cc | 37 +- .../PhotovoltaicThermalCollectors.cc | 2 +- src/EnergyPlus/PipeHeatTransfer.cc | 8 +- src/EnergyPlus/Plant/EquipAndOperations.cc | 10 +- src/EnergyPlus/Plant/Loop.cc | 8 +- src/EnergyPlus/Plant/LoopSide.cc | 10 +- src/EnergyPlus/Plant/PlantManager.cc | 26 +- src/EnergyPlus/PlantCentralGSHP.cc | 32 +- src/EnergyPlus/PlantChillers.cc | 78 +- .../PlantComponentTemperatureSources.cc | 6 +- src/EnergyPlus/PlantCondLoopOperation.cc | 4 +- .../PlantHeatExchangerFluidToFluid.cc | 20 +- src/EnergyPlus/PlantLoadProfile.cc | 20 +- src/EnergyPlus/PlantLoopHeatPumpEIR.cc | 40 +- src/EnergyPlus/PlantPipingSystemsManager.cc | 10 +- src/EnergyPlus/PlantPressureSystem.cc | 8 +- src/EnergyPlus/PlantUtilities.cc | 4 +- src/EnergyPlus/PondGroundHeatExchanger.cc | 32 +- src/EnergyPlus/PoweredInductionUnits.cc | 19 +- src/EnergyPlus/Pumps.cc | 22 +- src/EnergyPlus/RefrigeratedCase.cc | 172 +- src/EnergyPlus/ReportCoilSelection.cc | 16 +- src/EnergyPlus/RoomAirModelUserTempPattern.cc | 2 +- src/EnergyPlus/SetPointManager.cc | 2 +- src/EnergyPlus/SimulationManager.cc | 2 - src/EnergyPlus/SingleDuct.cc | 14 +- src/EnergyPlus/SolarCollectors.cc | 24 +- src/EnergyPlus/StandardRatings.cc | 4 +- src/EnergyPlus/SteamBaseboardRadiator.cc | 19 +- src/EnergyPlus/SteamCoils.cc | 43 +- src/EnergyPlus/SurfaceGroundHeatExchanger.cc | 9 +- src/EnergyPlus/SwimmingPool.cc | 8 +- src/EnergyPlus/UnitHeater.cc | 14 +- src/EnergyPlus/UnitVentilator.cc | 22 +- src/EnergyPlus/UnitarySystem.cc | 36 +- src/EnergyPlus/UserDefinedComponents.cc | 16 +- src/EnergyPlus/VariableSpeedCoils.cc | 28 +- src/EnergyPlus/VentilatedSlab.cc | 17 +- src/EnergyPlus/WaterCoils.cc | 4 +- src/EnergyPlus/WaterThermalTanks.cc | 110 +- src/EnergyPlus/WaterToAirHeatPump.cc | 92 +- src/EnergyPlus/WaterToAirHeatPumpSimple.cc | 10 +- src/EnergyPlus/WaterUse.cc | 2 +- src/EnergyPlus/api/EnergyPlusPgm.cc | 2 +- src/EnergyPlus/api/func.cc | 28 +- tst/EnergyPlus/unit/BoilerHotWater.unit.cc | 4 +- tst/EnergyPlus/unit/ChillerAbsorption.unit.cc | 12 +- .../unit/ChillerExhaustAbsorption.unit.cc | 2 +- .../unit/Fixtures/EnergyPlusFixture.cc | 6 +- tst/EnergyPlus/unit/FluidProperties.unit.cc | 46 +- .../unit/HVACVariableRefrigerantFlow.unit.cc | 12 +- .../unit/LowTempRadiantSystem.unit.cc | 16 +- tst/EnergyPlus/unit/OutdoorAirUnit.unit.cc | 12 +- .../unit/OutsideEnergySources.unit.cc | 12 +- tst/EnergyPlus/unit/PlantCentralGSHP.unit.cc | 8 +- tst/EnergyPlus/unit/PlantLoadProfile.unit.cc | 12 +- tst/EnergyPlus/unit/SetPointManager.unit.cc | 4 +- tst/EnergyPlus/unit/UnitHeater.unit.cc | 6 +- tst/EnergyPlus/unit/UnitarySystem.unit.cc | 2 +- tst/EnergyPlus/unit/WaterCoils.unit.cc | 50 +- tst/EnergyPlus/unit/WaterThermalTanks.unit.cc | 10 +- .../unit/WaterToAirHeatPump.unit.cc | 114 +- 116 files changed, 3326 insertions(+), 3204 deletions(-) diff --git a/src/EnergyPlus/AirLoopHVACDOAS.cc b/src/EnergyPlus/AirLoopHVACDOAS.cc index 16a97ba7cbf..2db751c59d2 100644 --- a/src/EnergyPlus/AirLoopHVACDOAS.cc +++ b/src/EnergyPlus/AirLoopHVACDOAS.cc @@ -889,7 +889,7 @@ namespace AirLoopHVACDOAS { if (Util::SameString(CompType, "COIL:HEATING:WATER")) { WaterCoils::SimulateWaterCoilComponents(state, CompName, FirstHVACIteration, this->m_HeatCoilNum); Real64 CoilMaxVolFlowRate = WaterCoils::GetCoilMaxWaterFlowRate(state, "Coil:Heating:Water", CompName, ErrorsFound); - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->HWPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->HWPlantLoc.loopNum).FluidIndex, @@ -903,7 +903,7 @@ namespace AirLoopHVACDOAS { if (Util::SameString(CompType, "COIL:COOLING:WATER")) { WaterCoils::SimulateWaterCoilComponents(state, CompName, FirstHVACIteration, this->m_CoolCoilNum); Real64 CoilMaxVolFlowRate = WaterCoils::GetCoilMaxWaterFlowRate(state, "Coil:Cooling:Water", CompName, ErrorsFound); - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -918,7 +918,7 @@ namespace AirLoopHVACDOAS { WaterCoils::SimulateWaterCoilComponents(state, CompName, FirstHVACIteration, this->m_CoolCoilNum); Real64 CoilMaxVolFlowRate = WaterCoils::GetCoilMaxWaterFlowRate(state, "Coil:Cooling:Water:DetailedGeometry", CompName, ErrorsFound); - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, diff --git a/src/EnergyPlus/Autosizing/CoolingWaterDesAirOutletTempSizing.cc b/src/EnergyPlus/Autosizing/CoolingWaterDesAirOutletTempSizing.cc index 1eabcdf2ffa..5afba936626 100644 --- a/src/EnergyPlus/Autosizing/CoolingWaterDesAirOutletTempSizing.cc +++ b/src/EnergyPlus/Autosizing/CoolingWaterDesAirOutletTempSizing.cc @@ -66,12 +66,12 @@ Real64 CoolingWaterDesAirOutletTempSizer::size(EnergyPlusData &state, Real64 _or this->autoSizedValue = _originalValue; } else { if (this->termUnitIU) { - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidIndex, this->callingRoutine); - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidIndex, diff --git a/src/EnergyPlus/Autosizing/CoolingWaterflowSizing.cc b/src/EnergyPlus/Autosizing/CoolingWaterflowSizing.cc index 1a6761c9818..4725b24c5d1 100644 --- a/src/EnergyPlus/Autosizing/CoolingWaterflowSizing.cc +++ b/src/EnergyPlus/Autosizing/CoolingWaterflowSizing.cc @@ -88,12 +88,12 @@ Real64 CoolingWaterflowSizer::size(EnergyPlusData &state, Real64 _originalValue, if (DesCoilLoad >= HVAC::SmallLoad) { if (this->dataWaterLoopNum > 0 && this->dataWaterLoopNum <= (int)state.dataPlnt->PlantLoop.size() && this->dataWaterCoilSizCoolDeltaT > 0.0) { - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidIndex, this->callingRoutine); - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidIndex, @@ -120,12 +120,12 @@ Real64 CoolingWaterflowSizer::size(EnergyPlusData &state, Real64 _originalValue, if (this->curOASysNum > 0) CoilDesWaterDeltaT *= 0.5; if (this->dataCapacityUsedForSizing >= HVAC::SmallLoad) { if (this->dataWaterLoopNum > 0 && this->dataWaterLoopNum <= (int)state.dataPlnt->PlantLoop.size() && CoilDesWaterDeltaT > 0.0) { - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidIndex, this->callingRoutine); - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidIndex, diff --git a/src/EnergyPlus/Autosizing/HeatingWaterDesCoilLoadUsedForUASizing.cc b/src/EnergyPlus/Autosizing/HeatingWaterDesCoilLoadUsedForUASizing.cc index ce84da3ffc6..336dc37c5d3 100644 --- a/src/EnergyPlus/Autosizing/HeatingWaterDesCoilLoadUsedForUASizing.cc +++ b/src/EnergyPlus/Autosizing/HeatingWaterDesCoilLoadUsedForUASizing.cc @@ -69,12 +69,12 @@ Real64 HeatingWaterDesCoilLoadUsedForUASizer::size(EnergyPlusData &state, Real64 this->autoSizedValue = _originalValue; } else { if (this->termUnitSingDuct && (this->curTermUnitSizingNum > 0)) { - Real64 const Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 const Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidIndex, this->callingRoutine); - Real64 const rho = Fluid::GetDensityGlycol(state, + Real64 const rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidIndex, @@ -82,12 +82,12 @@ Real64 HeatingWaterDesCoilLoadUsedForUASizer::size(EnergyPlusData &state, Real64 this->autoSizedValue = this->dataWaterFlowUsedForSizing * this->dataWaterCoilSizHeatDeltaT * Cp * rho; state.dataRptCoilSelection->coilSelectionReportObj->setCoilReheatMultiplier(state, this->compName, this->compType, 1.0); } else if ((this->termUnitPIU || this->termUnitIU) && (this->curTermUnitSizingNum > 0)) { - Real64 const Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 const Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidIndex, this->callingRoutine); - Real64 const rho = Fluid::GetDensityGlycol(state, + Real64 const rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidIndex, @@ -95,12 +95,12 @@ Real64 HeatingWaterDesCoilLoadUsedForUASizer::size(EnergyPlusData &state, Real64 this->autoSizedValue = this->dataWaterFlowUsedForSizing * this->dataWaterCoilSizHeatDeltaT * Cp * rho * this->termUnitSizing(this->curTermUnitSizingNum).ReheatLoadMult; } else if (this->zoneEqFanCoil || this->zoneEqUnitHeater) { - Real64 const Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 const Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidIndex, this->callingRoutine); - Real64 const rho = Fluid::GetDensityGlycol(state, + Real64 const rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidIndex, diff --git a/src/EnergyPlus/Autosizing/HeatingWaterflowSizing.cc b/src/EnergyPlus/Autosizing/HeatingWaterflowSizing.cc index 30e724a0a60..823f2c00aa3 100644 --- a/src/EnergyPlus/Autosizing/HeatingWaterflowSizing.cc +++ b/src/EnergyPlus/Autosizing/HeatingWaterflowSizing.cc @@ -93,12 +93,12 @@ Real64 HeatingWaterflowSizer::size(EnergyPlusData &state, Real64 _originalValue, if (DesCoilLoad >= HVAC::SmallLoad) { if (this->dataWaterLoopNum > 0 && this->dataWaterLoopNum <= (int)state.dataPlnt->PlantLoop.size() && this->dataWaterCoilSizHeatDeltaT > 0.0) { - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidIndex, this->callingRoutine); - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidIndex, @@ -123,12 +123,12 @@ Real64 HeatingWaterflowSizer::size(EnergyPlusData &state, Real64 _originalValue, if (this->dataCapacityUsedForSizing >= HVAC::SmallLoad) { if (this->dataWaterLoopNum > 0 && this->dataWaterLoopNum <= (int)state.dataPlnt->PlantLoop.size() && this->dataWaterCoilSizHeatDeltaT > 0.0) { - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidIndex, this->callingRoutine); - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidIndex, diff --git a/src/EnergyPlus/Autosizing/WaterHeatingCapacitySizing.cc b/src/EnergyPlus/Autosizing/WaterHeatingCapacitySizing.cc index a0193390ae9..342293b358a 100644 --- a/src/EnergyPlus/Autosizing/WaterHeatingCapacitySizing.cc +++ b/src/EnergyPlus/Autosizing/WaterHeatingCapacitySizing.cc @@ -72,12 +72,12 @@ Real64 WaterHeatingCapacitySizer::size(EnergyPlusData &state, Real64 _originalVa Real64 CoilOutHumRat = 0.0; if ((this->termUnitSingDuct || this->termUnitPIU || this->termUnitIU) && (this->curTermUnitSizingNum > 0)) { DesMassFlow = this->termUnitSizing(this->curTermUnitSizingNum).MaxHWVolFlow; - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidIndex, this->callingRoutine); - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidIndex, @@ -85,12 +85,12 @@ Real64 WaterHeatingCapacitySizer::size(EnergyPlusData &state, Real64 _originalVa NominalCapacityDes = DesMassFlow * this->dataWaterCoilSizHeatDeltaT * Cp * rho; } else if (this->zoneEqFanCoil || this->zoneEqUnitHeater) { DesMassFlow = this->zoneEqSizing(this->curZoneEqNum).MaxHWVolFlow; - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidIndex, this->callingRoutine); - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->dataWaterLoopNum).FluidIndex, diff --git a/src/EnergyPlus/BaseboardRadiator.cc b/src/EnergyPlus/BaseboardRadiator.cc index 2f448c4674c..62ee9c5446a 100644 --- a/src/EnergyPlus/BaseboardRadiator.cc +++ b/src/EnergyPlus/BaseboardRadiator.cc @@ -95,8 +95,8 @@ namespace BaseboardRadiator { // Use statements for access to subroutines in other modules using namespace ScheduleManager; - using Fluid::GetDensityGlycol; - using Fluid::GetSpecificHeatGlycol; + using FluidProperties::GetDensityGlycol; + using FluidProperties::GetSpecificHeatGlycol; using Psychrometrics::PsyCpAirFnW; using Psychrometrics::PsyRhoAirFnPbTdbW; diff --git a/src/EnergyPlus/BoilerSteam.cc b/src/EnergyPlus/BoilerSteam.cc index 97f96a35edc..2d6b3a82184 100644 --- a/src/EnergyPlus/BoilerSteam.cc +++ b/src/EnergyPlus/BoilerSteam.cc @@ -267,10 +267,10 @@ namespace BoilerSteam { "Hot Steam Nodes"); if (SteamFluidIndex == 0 && BoilerNum == 1) { - SteamFluidIndex = Fluid::FindRefrigerant(state, fluidNameSteam); + SteamFluidIndex = FluidProperties::GetRefrigNum(state, fluidNameSteam); // Steam is a refrigerant? if (SteamFluidIndex == 0) { - ShowSevereError( - state, format("{}{}=\"{}\",", RoutineName, state.dataIPShortCut->cCurrentModuleObject, state.dataIPShortCut->cAlphaArgs(1))); + ShowSevereError( + state, format("{}{}=\"{}\",", RoutineName, state.dataIPShortCut->cCurrentModuleObject, state.dataIPShortCut->cAlphaArgs(1))); ShowContinueError(state, "Steam Properties not found; Steam Fluid Properties must be included in the input file."); ErrorsFound = true; } @@ -307,13 +307,13 @@ namespace BoilerSteam { int BoilerInletNode = this->BoilerInletNodeNum; Real64 EnthSteamOutDry = - Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, this->TempUpLimitBoilerOut, 1.0, this->FluidIndex, RoutineName); + FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, this->TempUpLimitBoilerOut, 1.0, this->FluidIndex, RoutineName); Real64 EnthSteamOutWet = - Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, this->TempUpLimitBoilerOut, 0.0, this->FluidIndex, RoutineName); + FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, this->TempUpLimitBoilerOut, 0.0, this->FluidIndex, RoutineName); Real64 LatentEnthSteam = EnthSteamOutDry - EnthSteamOutWet; Real64 CpWater = - Fluid::GetSatSpecificHeatRefrig(state, fluidNameSteam, this->TempUpLimitBoilerOut, 0.0, this->FluidIndex, RoutineName); + FluidProperties::GetSatSpecificHeatRefrig(state, fluidNameSteam, this->TempUpLimitBoilerOut, 0.0, this->FluidIndex, RoutineName); this->DesMassFlowRate = this->NomCap / (LatentEnthSteam + CpWater * (this->TempUpLimitBoilerOut - state.dataLoopNodes->Node(BoilerInletNode).Temp)); @@ -500,11 +500,11 @@ namespace BoilerSteam { if (PltSizNum > 0) { if (state.dataSize->PlantSizData(PltSizNum).DesVolFlowRate >= HVAC::SmallWaterVolFlow) { Real64 SizingTemp = this->TempUpLimitBoilerOut; - Real64 SteamDensity = Fluid::GetSatDensityRefrig(state, fluidNameSteam, SizingTemp, 1.0, this->FluidIndex, RoutineName); - Real64 EnthSteamOutDry = Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, SizingTemp, 1.0, this->FluidIndex, RoutineName); - Real64 EnthSteamOutWet = Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, SizingTemp, 0.0, this->FluidIndex, RoutineName); + Real64 SteamDensity = FluidProperties::GetSatDensityRefrig(state, fluidNameSteam, SizingTemp, 1.0, this->FluidIndex, RoutineName); + Real64 EnthSteamOutDry = FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, SizingTemp, 1.0, this->FluidIndex, RoutineName); + Real64 EnthSteamOutWet = FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, SizingTemp, 0.0, this->FluidIndex, RoutineName); Real64 LatentEnthSteam = EnthSteamOutDry - EnthSteamOutWet; - Real64 CpWater = Fluid::GetSatSpecificHeatRefrig(state, fluidNameSteam, SizingTemp, 0.0, this->FluidIndex, RoutineName); + Real64 CpWater = FluidProperties::GetSatSpecificHeatRefrig(state, fluidNameSteam, SizingTemp, 0.0, this->FluidIndex, RoutineName); tmpNomCap = (CpWater * SteamDensity * this->SizFac * state.dataSize->PlantSizData(PltSizNum).DeltaT * state.dataSize->PlantSizData(PltSizNum).DesVolFlowRate + state.dataSize->PlantSizData(PltSizNum).DesVolFlowRate * SteamDensity * LatentEnthSteam); @@ -677,7 +677,7 @@ namespace BoilerSteam { // Set the current load equal to the boiler load this->BoilerLoad = MyLoad; - this->BoilerPressCheck = Fluid::GetSatPressureRefrig(state, fluidNameSteam, this->BoilerOutletTemp, this->FluidIndex, RoutineName); + this->BoilerPressCheck = FluidProperties::GetSatPressureRefrig(state, fluidNameSteam, this->BoilerOutletTemp, this->FluidIndex, RoutineName); if ((this->BoilerPressCheck) > this->BoilerMaxOperPress) { if (this->PressErrIndex == 0) { @@ -697,7 +697,7 @@ namespace BoilerSteam { "[Pa]"); } - CpWater = Fluid::GetSatSpecificHeatRefrig( + CpWater = FluidProperties::GetSatSpecificHeatRefrig( state, fluidNameSteam, state.dataLoopNodes->Node(this->BoilerInletNodeNum).Temp, 0.0, this->FluidIndex, RoutineName); if (state.dataPlnt->PlantLoop(this->plantLoc.loopNum).LoopSide(this->plantLoc.loopSideNum).FlowLock == @@ -717,9 +717,9 @@ namespace BoilerSteam { this->BoilerOutletTemp = BoilerDeltaTemp + state.dataLoopNodes->Node(this->BoilerInletNodeNum).Temp; Real64 const EnthSteamOutDry = - Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, this->BoilerOutletTemp, 1.0, this->FluidIndex, RoutineName); + FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, this->BoilerOutletTemp, 1.0, this->FluidIndex, RoutineName); Real64 const EnthSteamOutWet = - Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, this->BoilerOutletTemp, 0.0, this->FluidIndex, RoutineName); + FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, this->BoilerOutletTemp, 0.0, this->FluidIndex, RoutineName); Real64 const LatentEnthSteam = EnthSteamOutDry - EnthSteamOutWet; this->BoilerMassFlowRate = this->BoilerLoad / (LatentEnthSteam + (CpWater * BoilerDeltaTemp)); @@ -755,9 +755,9 @@ namespace BoilerSteam { break; } Real64 const EnthSteamOutDry = - Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, this->BoilerOutletTemp, 1.0, this->FluidIndex, RoutineName); + FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, this->BoilerOutletTemp, 1.0, this->FluidIndex, RoutineName); Real64 const EnthSteamOutWet = - Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, this->BoilerOutletTemp, 0.0, this->FluidIndex, RoutineName); + FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, this->BoilerOutletTemp, 0.0, this->FluidIndex, RoutineName); Real64 const LatentEnthSteam = EnthSteamOutDry - EnthSteamOutWet; this->BoilerLoad = (this->BoilerMassFlowRate * LatentEnthSteam); @@ -774,9 +774,9 @@ namespace BoilerSteam { } Real64 const EnthSteamOutDry = - Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, this->BoilerOutletTemp, 1.0, this->FluidIndex, RoutineName); + FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, this->BoilerOutletTemp, 1.0, this->FluidIndex, RoutineName); Real64 const EnthSteamOutWet = - Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, this->BoilerOutletTemp, 0.0, this->FluidIndex, RoutineName); + FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, this->BoilerOutletTemp, 0.0, this->FluidIndex, RoutineName); Real64 const LatentEnthSteam = EnthSteamOutDry - EnthSteamOutWet; this->BoilerLoad = std::abs(this->BoilerMassFlowRate * LatentEnthSteam) + std::abs(this->BoilerMassFlowRate * CpWater * BoilerDeltaTemp); @@ -799,9 +799,9 @@ namespace BoilerSteam { } Real64 const EnthSteamOutDry = - Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, this->BoilerOutletTemp, 1.0, this->FluidIndex, RoutineName); + FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, this->BoilerOutletTemp, 1.0, this->FluidIndex, RoutineName); Real64 const EnthSteamOutWet = - Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, this->BoilerOutletTemp, 0.0, this->FluidIndex, RoutineName); + FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, this->BoilerOutletTemp, 0.0, this->FluidIndex, RoutineName); Real64 const LatentEnthSteam = EnthSteamOutDry - EnthSteamOutWet; BoilerDeltaTemp = this->BoilerOutletTemp - state.dataLoopNodes->Node(this->BoilerInletNodeNum).Temp; this->BoilerMassFlowRate = this->BoilerLoad / (LatentEnthSteam + CpWater * BoilerDeltaTemp); @@ -816,9 +816,9 @@ namespace BoilerSteam { this->BoilerLoad = this->NomCap; Real64 const EnthSteamOutDry = - Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, this->BoilerOutletTemp, 1.0, this->FluidIndex, RoutineName); + FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, this->BoilerOutletTemp, 1.0, this->FluidIndex, RoutineName); Real64 const EnthSteamOutWet = - Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, this->BoilerOutletTemp, 0.0, this->FluidIndex, RoutineName); + FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, this->BoilerOutletTemp, 0.0, this->FluidIndex, RoutineName); Real64 const LatentEnthSteam = EnthSteamOutDry - EnthSteamOutWet; BoilerDeltaTemp = this->BoilerOutletTemp - state.dataLoopNodes->Node(this->BoilerInletNodeNum).Temp; this->BoilerMassFlowRate = this->BoilerLoad / (LatentEnthSteam + CpWater * BoilerDeltaTemp); diff --git a/src/EnergyPlus/Boilers.cc b/src/EnergyPlus/Boilers.cc index fbc339adbe9..d76186b5476 100644 --- a/src/EnergyPlus/Boilers.cc +++ b/src/EnergyPlus/Boilers.cc @@ -507,7 +507,7 @@ void BoilerSpecs::oneTimeInit(EnergyPlusData &state) void BoilerSpecs::initEachEnvironment(EnergyPlusData &state) { static constexpr std::string_view RoutineName("BoilerSpecs::initEachEnvironment"); - Real64 const rho = Fluid::GetDensityGlycol(state, + Real64 const rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -624,12 +624,12 @@ void BoilerSpecs::SizeBoiler(EnergyPlusData &state) if (PltSizNum > 0) { if (state.dataSize->PlantSizData(PltSizNum).DesVolFlowRate >= HVAC::SmallWaterVolFlow) { - Real64 const rho = Fluid::GetDensityGlycol(state, + Real64 const rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); - Real64 const Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 const Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -815,7 +815,7 @@ void BoilerSpecs::CalcBoilerModel(EnergyPlusData &state, Real64 const TempUpLimitBout = this->TempUpLimitBoilerOut; // C - boiler high temperature limit Real64 const BoilerMassFlowRateMax = this->DesMassFlowRate; // Max Design Boiler Mass Flow Rate converted from Volume Flow Rate - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, state.dataLoopNodes->Node(BoilerInletNode).Temp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, diff --git a/src/EnergyPlus/CTElectricGenerator.cc b/src/EnergyPlus/CTElectricGenerator.cc index 42d25551956..db8b1b92d94 100644 --- a/src/EnergyPlus/CTElectricGenerator.cc +++ b/src/EnergyPlus/CTElectricGenerator.cc @@ -555,7 +555,7 @@ namespace CTElectricGenerator { int heatRecInNode = this->HeatRecInletNodeNum; heatRecInTemp = state.dataLoopNodes->Node(heatRecInNode).Temp; - heatRecCp = Fluid::GetSpecificHeatGlycol(state, + heatRecCp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidName, heatRecInTemp, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidIndex, @@ -810,7 +810,7 @@ namespace CTElectricGenerator { int HeatRecOutletNode = this->HeatRecOutletNodeNum; // size mass flow rate - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidIndex, diff --git a/src/EnergyPlus/ChilledCeilingPanelSimple.cc b/src/EnergyPlus/ChilledCeilingPanelSimple.cc index 537951000a7..811b5aead15 100644 --- a/src/EnergyPlus/ChilledCeilingPanelSimple.cc +++ b/src/EnergyPlus/ChilledCeilingPanelSimple.cc @@ -830,7 +830,7 @@ void InitCoolingPanel(EnergyPlusData &state, int const CoolingPanelNum, int cons // set design mass flow rates if (thisCP.WaterInletNode > 0) { - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(thisCP.plantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(thisCP.plantLoc.loopNum).FluidIndex, @@ -845,7 +845,7 @@ void InitCoolingPanel(EnergyPlusData &state, int const CoolingPanelNum, int cons if (state.dataGlobal->BeginEnvrnFlag && thisCP.MyEnvrnFlag) { // Initialize - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(thisCP.plantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(thisCP.plantLoc.loopNum).FluidIndex, @@ -857,7 +857,7 @@ void InitCoolingPanel(EnergyPlusData &state, int const CoolingPanelNum, int cons ThisInNode.Temp = 7.0; - Cp = Fluid::GetSpecificHeatGlycol(state, + Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(thisCP.plantLoc.loopNum).FluidName, ThisInNode.Temp, state.dataPlnt->PlantLoop(thisCP.plantLoc.loopNum).FluidIndex, @@ -1032,12 +1032,12 @@ void SizeCoolingPanel(EnergyPlusData &state, int const CoolingPanelNum) PlantUtilities::MyPlantSizingIndex(state, CompType, thisCP.Name, thisCP.WaterInletNode, thisCP.WaterOutletNode, ErrorsFound); if (PltSizCoolNum > 0) { if (DesCoilLoad >= HVAC::SmallLoad) { - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(thisCP.plantLoc.loopNum).FluidName, 5., state.dataPlnt->PlantLoop(thisCP.plantLoc.loopNum).FluidIndex, RoutineName); - Cp = Fluid::GetSpecificHeatGlycol(state, + Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(thisCP.plantLoc.loopNum).FluidName, 5.0, state.dataPlnt->PlantLoop(thisCP.plantLoc.loopNum).FluidIndex, @@ -1290,7 +1290,7 @@ void CoolingPanelParams::CalcCoolingPanel(EnergyPlusData &state, int const Cooli if (QZnReq < -HVAC::SmallLoad && !state.dataZoneEnergyDemand->CurDeadBandOrSetback(ZoneNum) && (CoolingPanelOn)) { - Cp = Fluid::GetSpecificHeatGlycol(state, + Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, waterInletTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -1375,7 +1375,7 @@ void CoolingPanelParams::CalcCoolingPanel(EnergyPlusData &state, int const Cooli if (CoolingPanelOn) { // Now simulate the system... - Cp = Fluid::GetSpecificHeatGlycol(state, + Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, waterInletTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, diff --git a/src/EnergyPlus/ChillerAbsorption.cc b/src/EnergyPlus/ChillerAbsorption.cc index b18c7dd084b..879e1725eda 100644 --- a/src/EnergyPlus/ChillerAbsorption.cc +++ b/src/EnergyPlus/ChillerAbsorption.cc @@ -385,7 +385,7 @@ void GetBLASTAbsorberInput(EnergyPlusData &state) state.dataIPShortCut->cAlphaArgs(7), "Hot Water Nodes"); } else { - thisChiller.SteamFluidIndex = Fluid::FindRefrigerant(state, fluidNameSteam); + thisChiller.SteamFluidIndex = FluidProperties::GetRefrigNum(state, fluidNameSteam); thisChiller.GeneratorInletNodeNum = NodeInputManager::GetOnlySingleNode(state, state.dataIPShortCut->cAlphaArgs(6), ErrorsFound, @@ -755,7 +755,7 @@ void BLASTAbsorberSpecs::initEachEnvironment(EnergyPlusData &state) constexpr const char *RoutineName("BLASTAbsorberSpecs::initEachEnvironment"); - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -765,7 +765,7 @@ void BLASTAbsorberSpecs::initEachEnvironment(EnergyPlusData &state) PlantUtilities::InitComponentNodes(state, 0.0, this->EvapMassFlowRateMax, this->EvapInletNodeNum, this->EvapOutletNodeNum); - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -779,7 +779,7 @@ void BLASTAbsorberSpecs::initEachEnvironment(EnergyPlusData &state) if (this->GeneratorInletNodeNum > 0) { if (this->GenHeatSourceType == DataLoopNode::NodeFluidType::Water) { - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->GenPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->GenPlantLoc.loopNum).FluidIndex, @@ -791,7 +791,7 @@ void BLASTAbsorberSpecs::initEachEnvironment(EnergyPlusData &state) this->QGenerator = (this->SteamLoadCoef[0] + this->SteamLoadCoef[1] + this->SteamLoadCoef[2]) * this->NomCap; // dry enthalpy of steam (quality = 1) - Real64 EnthSteamOutDry = Fluid::GetSatEnthalpyRefrig(state, + Real64 EnthSteamOutDry = FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, state.dataLoopNodes->Node(this->GeneratorInletNodeNum).Temp, 1.0, @@ -799,7 +799,7 @@ void BLASTAbsorberSpecs::initEachEnvironment(EnergyPlusData &state) calcChillerAbsorption + this->Name); // wet enthalpy of steam (quality = 0) - Real64 EnthSteamOutWet = Fluid::GetSatEnthalpyRefrig(state, + Real64 EnthSteamOutWet = FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, state.dataLoopNodes->Node(this->GeneratorInletNodeNum).Temp, 0.0, @@ -810,7 +810,7 @@ void BLASTAbsorberSpecs::initEachEnvironment(EnergyPlusData &state) Real64 HfgSteam = EnthSteamOutDry - EnthSteamOutWet; int curWaterIndex = waterIndex; Real64 CpWater = - Fluid::GetDensityGlycol(state, fluidNameWater, SteamOutletTemp, curWaterIndex, calcChillerAbsorption + this->Name); + FluidProperties::GetDensityGlycol(state, fluidNameWater, SteamOutletTemp, curWaterIndex, calcChillerAbsorption + this->Name); this->GenMassFlowRateMax = this->QGenerator / (HfgSteam + CpWater * SteamDeltaT); } @@ -952,13 +952,13 @@ void BLASTAbsorberSpecs::sizeChiller(EnergyPlusData &state) if (PltSizNum > 0) { if (state.dataSize->PlantSizData(PltSizNum).DesVolFlowRate >= HVAC::SmallWaterVolFlow) { - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -1120,13 +1120,13 @@ void BLASTAbsorberSpecs::sizeChiller(EnergyPlusData &state) if (this->EvapVolFlowRate >= HVAC::SmallWaterVolFlow && tmpNomCap > 0.0) { // QCondenser = QEvaporator + QGenerator + PumpingPower - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, this->TempDesCondIn, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -1198,13 +1198,13 @@ void BLASTAbsorberSpecs::sizeChiller(EnergyPlusData &state) (PltSizHeatingNum > 0 && this->GenHeatSourceType == DataLoopNode::NodeFluidType::Water)) { if (this->EvapVolFlowRate >= HVAC::SmallWaterVolFlow && tmpNomCap > 0.0) { if (this->GenHeatSourceType == DataLoopNode::NodeFluidType::Water) { - Real64 CpWater = Fluid::GetSpecificHeatGlycol(state, + Real64 CpWater = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->GenPlantLoc.loopNum).FluidName, state.dataSize->PlantSizData(PltSizHeatingNum).ExitTemp, state.dataPlnt->PlantLoop(this->GenPlantLoc.loopNum).FluidIndex, RoutineName); Real64 SteamDeltaT = max(0.5, state.dataSize->PlantSizData(PltSizHeatingNum).DeltaT); - Real64 RhoWater = Fluid::GetDensityGlycol(state, + Real64 RhoWater = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->GenPlantLoc.loopNum).FluidName, (state.dataSize->PlantSizData(PltSizHeatingNum).ExitTemp - SteamDeltaT), state.dataPlnt->PlantLoop(this->GenPlantLoc.loopNum).FluidIndex, @@ -1259,25 +1259,25 @@ void BLASTAbsorberSpecs::sizeChiller(EnergyPlusData &state) } } else { constexpr const char *RoutineNameLong("SizeAbsorptionChiller"); - Real64 SteamDensity = Fluid::GetSatDensityRefrig( + Real64 SteamDensity = FluidProperties::GetSatDensityRefrig( state, fluidNameSteam, state.dataSize->PlantSizData(PltSizSteamNum).ExitTemp, 1.0, this->SteamFluidIndex, RoutineNameLong); Real64 SteamDeltaT = state.dataSize->PlantSizData(PltSizSteamNum).DeltaT; Real64 GeneratorOutletTemp = state.dataSize->PlantSizData(PltSizSteamNum).ExitTemp - SteamDeltaT; - Real64 EnthSteamOutDry = Fluid::GetSatEnthalpyRefrig(state, + Real64 EnthSteamOutDry = FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, state.dataSize->PlantSizData(PltSizSteamNum).ExitTemp, 1.0, this->SteamFluidIndex, moduleObjectType + this->Name); - Real64 EnthSteamOutWet = Fluid::GetSatEnthalpyRefrig(state, + Real64 EnthSteamOutWet = FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, state.dataSize->PlantSizData(PltSizSteamNum).ExitTemp, 0.0, this->SteamFluidIndex, moduleObjectType + this->Name); int curWaterIndex = waterIndex; - Real64 CpWater = Fluid::GetSpecificHeatGlycol(state, fluidNameWater, GeneratorOutletTemp, curWaterIndex, RoutineName); + Real64 CpWater = FluidProperties::GetSpecificHeatGlycol(state, fluidNameWater, GeneratorOutletTemp, curWaterIndex, RoutineName); Real64 HfgSteam = EnthSteamOutDry - EnthSteamOutWet; this->SteamMassFlowRate = (this->NomCap * SteamInputRatNom) / ((HfgSteam) + (SteamDeltaT * CpWater)); tmpGeneratorVolFlowRate = this->SteamMassFlowRate / SteamDensity; @@ -1366,12 +1366,12 @@ void BLASTAbsorberSpecs::sizeChiller(EnergyPlusData &state) this->GeneratorDeltaTemp = max(0.5, state.dataSize->PlantSizData(PltSizHeatingNum).DeltaT); } else if (this->GenHeatSourceType == DataLoopNode::NodeFluidType::Water) { if (state.dataPlnt->PlantFirstSizesOkayToFinalize) { - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->GenPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->GenPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->GenPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->GenPlantLoc.loopNum).FluidIndex, @@ -1485,7 +1485,7 @@ void BLASTAbsorberSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad, bool R Real64 TempEvapOut = state.dataLoopNodes->Node(this->EvapOutletNodeNum).Temp; - Real64 CpFluid = Fluid::GetSpecificHeatGlycol(state, + Real64 CpFluid = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->EvapInletNodeNum).Temp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -1715,7 +1715,7 @@ void BLASTAbsorberSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad, bool R this->QCondenser = this->QEvaporator + this->QGenerator + this->PumpingPower; - CpFluid = Fluid::GetSpecificHeatGlycol(state, + CpFluid = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->CondInletNodeNum).Temp, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -1736,7 +1736,7 @@ void BLASTAbsorberSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad, bool R if (this->GenHeatSourceType == DataLoopNode::NodeFluidType::Water) { Real64 GenMassFlowRate = 0.0; // Hot water plant is used for the generator - CpFluid = Fluid::GetSpecificHeatGlycol(state, + CpFluid = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->GenPlantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->GeneratorInletNodeNum).Temp, state.dataPlnt->PlantLoop(GenPlantLoc.loopNum).FluidIndex, @@ -1771,7 +1771,7 @@ void BLASTAbsorberSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad, bool R } else { // using a steam plant for the generator // enthalpy of dry steam at generator inlet - Real64 EnthSteamOutDry = Fluid::GetSatEnthalpyRefrig(state, + Real64 EnthSteamOutDry = FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, state.dataLoopNodes->Node(this->GeneratorInletNodeNum).Temp, 1.0, @@ -1779,7 +1779,7 @@ void BLASTAbsorberSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad, bool R calcChillerAbsorption + this->Name); // enthalpy of wet steam at generator inlet - Real64 EnthSteamOutWet = Fluid::GetSatEnthalpyRefrig(state, + Real64 EnthSteamOutWet = FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, state.dataLoopNodes->Node(this->GeneratorInletNodeNum).Temp, 0.0, @@ -1790,7 +1790,7 @@ void BLASTAbsorberSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad, bool R Real64 HfgSteam = EnthSteamOutDry - EnthSteamOutWet; int curWaterIndex = waterIndex; CpFluid = - Fluid::GetSpecificHeatGlycol(state, fluidNameWater, SteamOutletTemp, curWaterIndex, calcChillerAbsorption + this->Name); + FluidProperties::GetSpecificHeatGlycol(state, fluidNameWater, SteamOutletTemp, curWaterIndex, calcChillerAbsorption + this->Name); this->SteamMassFlowRate = this->QGenerator / (HfgSteam + CpFluid * SteamDeltaT); PlantUtilities::SetComponentFlowRate( state, this->SteamMassFlowRate, this->GeneratorInletNodeNum, this->GeneratorOutletNodeNum, this->GenPlantLoc); @@ -1800,7 +1800,7 @@ void BLASTAbsorberSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad, bool R this->SteamOutletEnthalpy = state.dataLoopNodes->Node(this->GeneratorInletNodeNum).Enthalpy; } else { this->GenOutletTemp = state.dataLoopNodes->Node(this->GeneratorInletNodeNum).Temp - SteamDeltaT; - this->SteamOutletEnthalpy = Fluid::GetSatEnthalpyRefrig( + this->SteamOutletEnthalpy = FluidProperties::GetSatEnthalpyRefrig( state, fluidNameSteam, this->GenOutletTemp, 0.0, this->SteamFluidIndex, moduleObjectType + this->Name); this->SteamOutletEnthalpy -= CpFluid * SteamDeltaT; } diff --git a/src/EnergyPlus/ChillerElectricASHRAE205.cc b/src/EnergyPlus/ChillerElectricASHRAE205.cc index cdbe6631f0c..b3413b28b48 100644 --- a/src/EnergyPlus/ChillerElectricASHRAE205.cc +++ b/src/EnergyPlus/ChillerElectricASHRAE205.cc @@ -596,7 +596,7 @@ void ASHRAE205ChillerSpecs::initialize(EnergyPlusData &state, bool const RunFlag this->EquipFlowCtrl = DataPlant::CompData::getPlantComponent(state, this->CWPlantLoc).FlowCtrl; if (this->MyEnvrnFlag && state.dataGlobal->BeginEnvrnFlag && (state.dataPlnt->PlantFirstSizesOkayToFinalize)) { - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -606,7 +606,7 @@ void ASHRAE205ChillerSpecs::initialize(EnergyPlusData &state, bool const RunFlag PlantUtilities::InitComponentNodes(state, 0.0, this->EvapMassFlowRateMax, this->EvapInletNodeNum, this->EvapOutletNodeNum); if (this->CondenserType == DataPlant::CondenserType::WaterCooled) { - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, this->TempRefCondIn, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -617,7 +617,7 @@ void ASHRAE205ChillerSpecs::initialize(EnergyPlusData &state, bool const RunFlag } // Set mass flow rates at Oil Cooler and Aux Equipment nodes if (this->OilCoolerInletNode) { - Real64 rho_oil_cooler = Fluid::GetDensityGlycol(state, + Real64 rho_oil_cooler = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->OCPlantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->OCPlantLoc.loopNum).FluidIndex, @@ -626,7 +626,7 @@ void ASHRAE205ChillerSpecs::initialize(EnergyPlusData &state, bool const RunFlag PlantUtilities::InitComponentNodes(state, 0.0, this->OilCoolerMassFlowRate, this->OilCoolerInletNode, this->OilCoolerOutletNode); } if (this->AuxiliaryHeatInletNode) { - Real64 rho_aux = Fluid::GetDensityGlycol(state, + Real64 rho_aux = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->AHPlantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->AHPlantLoc.loopNum).FluidIndex, @@ -771,12 +771,12 @@ void ASHRAE205ChillerSpecs::size([[maybe_unused]] EnergyPlusData &state) if (PltSizCondNum > 0 && PltSizNum > 0) { if (state.dataSize->PlantSizData(PltSizNum).DesVolFlowRate >= HVAC::SmallWaterVolFlow && tmpNomCap > 0.0) { - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, this->TempRefCondIn, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -878,13 +878,13 @@ void ASHRAE205ChillerSpecs::size([[maybe_unused]] EnergyPlusData &state) if (PltSizNum > 0) { if (state.dataSize->PlantSizData(PltSizNum).DesVolFlowRate >= HVAC::SmallWaterVolFlow) { - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -1256,7 +1256,7 @@ void ASHRAE205ChillerSpecs::findEvaporatorMassFlowRate(EnergyPlusData &state, Re } } // This is the end of the FlowLock Block - const Real64 rho = Fluid::GetDensityGlycol(state, + const Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -1391,7 +1391,7 @@ void ASHRAE205ChillerSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad, boo return; } - Real64 CpEvap = Fluid::GetSpecificHeatGlycol(state, + Real64 CpEvap = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->EvapInletNodeNum).Temp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -1508,7 +1508,7 @@ void ASHRAE205ChillerSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad, boo // Energy balance on the chiller system gives the amount of heat lost to the ambient zone this->AmbientZoneGain = this->QEvaporator + this->Power - (this->QCondenser + QExternallyCooled); - Real64 CpCond = Fluid::GetSpecificHeatGlycol(state, + Real64 CpCond = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, condInletTemp, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -1521,7 +1521,7 @@ void ASHRAE205ChillerSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad, boo PlantUtilities::SetComponentFlowRate( state, this->OilCoolerMassFlowRate, this->OilCoolerInletNode, this->OilCoolerOutletNode, this->OCPlantLoc); - Real64 CpOilCooler = Fluid::GetSpecificHeatGlycol(state, + Real64 CpOilCooler = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->OCPlantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->OilCoolerInletNode).Temp, state.dataPlnt->PlantLoop(this->OCPlantLoc.loopNum).FluidIndex, @@ -1539,7 +1539,7 @@ void ASHRAE205ChillerSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad, boo PlantUtilities::SetComponentFlowRate( state, this->AuxiliaryMassFlowRate, this->AuxiliaryHeatInletNode, this->AuxiliaryHeatOutletNode, this->AHPlantLoc); - Real64 CpAux = Fluid::GetSpecificHeatGlycol(state, + Real64 CpAux = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->AHPlantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->AuxiliaryHeatInletNode).Temp, state.dataPlnt->PlantLoop(this->AHPlantLoc.loopNum).FluidIndex, diff --git a/src/EnergyPlus/ChillerElectricEIR.cc b/src/EnergyPlus/ChillerElectricEIR.cc index 3d43f2dfb25..0c771b352b6 100644 --- a/src/EnergyPlus/ChillerElectricEIR.cc +++ b/src/EnergyPlus/ChillerElectricEIR.cc @@ -1152,7 +1152,7 @@ void ElectricEIRChillerSpecs::initEachEnvironment(EnergyPlusData &state) static constexpr std::string_view RoutineName("ElectricEIRChillerSpecs::initEachEnvironment"); - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -1164,7 +1164,7 @@ void ElectricEIRChillerSpecs::initEachEnvironment(EnergyPlusData &state) if (this->CondenserType == DataPlant::CondenserType::WaterCooled) { - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, this->TempRefCondIn, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -1190,7 +1190,7 @@ void ElectricEIRChillerSpecs::initEachEnvironment(EnergyPlusData &state) } if (this->HeatRecActive) { - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidIndex, @@ -1405,13 +1405,13 @@ void ElectricEIRChillerSpecs::size(EnergyPlusData &state) if (PltSizNum > 0) { if (state.dataSize->PlantSizData(PltSizNum).DesVolFlowRate >= HVAC::SmallWaterVolFlow) { - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -1468,12 +1468,12 @@ void ElectricEIRChillerSpecs::size(EnergyPlusData &state) if (PltSizCondNum > 0 && PltSizNum > 0) { if (state.dataSize->PlantSizData(PltSizNum).DesVolFlowRate >= HVAC::SmallWaterVolFlow && tmpNomCap > 0.0) { - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, this->TempRefCondIn, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -1995,7 +1995,7 @@ void ElectricEIRChillerSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad, b if (DataPlant::CompData::getPlantComponent(state, this->CWPlantLoc).CurOpSchemeType == DataPlant::OpScheme::CompSetPtBased) { // Calculate water side load - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->EvapInletNodeNum).Temp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -2028,7 +2028,7 @@ void ElectricEIRChillerSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad, b PartLoadRat = max(0.0, min(std::abs(MyLoad) / AvailChillerCap, this->MaxPartLoadRat)); } - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->EvapInletNodeNum).Temp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -2300,7 +2300,7 @@ void ElectricEIRChillerSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad, b if (this->CondMassFlowRate > DataBranchAirLoopPlant::MassFlowTolerance) { // If Heat Recovery specified for this vapor compression chiller, then Qcondenser will be adjusted by this subroutine if (this->HeatRecActive) this->calcHeatRecovery(state, this->QCondenser, this->CondMassFlowRate, condInletTemp, this->QHeatRecovered); - Cp = Fluid::GetSpecificHeatGlycol(state, + Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, condInletTemp, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -2369,14 +2369,14 @@ void ElectricEIRChillerSpecs::calcHeatRecovery(EnergyPlusData &state, Real64 heatRecInletTemp = state.dataLoopNodes->Node(this->HeatRecInletNodeNum).Temp; Real64 HeatRecMassFlowRate = state.dataLoopNodes->Node(this->HeatRecInletNodeNum).MassFlowRate; - Real64 CpHeatRec = Fluid::GetSpecificHeatGlycol(state, + Real64 CpHeatRec = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidName, heatRecInletTemp, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidIndex, RoutineName); Real64 CpCond; if (this->CondenserType == DataPlant::CondenserType::WaterCooled) { - CpCond = Fluid::GetSpecificHeatGlycol(state, + CpCond = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, condInletTemp, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, diff --git a/src/EnergyPlus/ChillerExhaustAbsorption.cc b/src/EnergyPlus/ChillerExhaustAbsorption.cc index 15db9f07583..e29f2a10fbf 100644 --- a/src/EnergyPlus/ChillerExhaustAbsorption.cc +++ b/src/EnergyPlus/ChillerExhaustAbsorption.cc @@ -949,7 +949,7 @@ void ExhaustAbsorberSpecs::initialize(EnergyPlusData &state) if (this->isWaterCooled) { // init max available condenser water flow rate if (this->CDPlantLoc.loopNum > 0) { - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -963,7 +963,7 @@ void ExhaustAbsorberSpecs::initialize(EnergyPlusData &state) } if (this->HWPlantLoc.loopNum > 0) { - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->HWPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->HWPlantLoc.loopNum).FluidIndex, @@ -976,7 +976,7 @@ void ExhaustAbsorberSpecs::initialize(EnergyPlusData &state) PlantUtilities::InitComponentNodes(state, 0.0, this->DesHeatMassFlowRate, HeatInletNode, HeatOutletNode); if (this->CWPlantLoc.loopNum > 0) { - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -1066,12 +1066,12 @@ void ExhaustAbsorberSpecs::size(EnergyPlusData &state) if (PltSizCoolNum > 0) { if (state.dataSize->PlantSizData(PltSizCoolNum).DesVolFlowRate >= HVAC::SmallWaterVolFlow) { - Cp = Fluid::GetSpecificHeatGlycol(state, + Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, RoutineName); - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -1296,12 +1296,12 @@ void ExhaustAbsorberSpecs::size(EnergyPlusData &state) if (PltSizCondNum > 0 && PltSizCoolNum > 0) { if (state.dataSize->PlantSizData(PltSizCoolNum).DesVolFlowRate >= HVAC::SmallWaterVolFlow && tmpNomCap > 0.0) { - Cp = Fluid::GetSpecificHeatGlycol(state, + Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, this->TempDesCondReturn, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, RoutineName); - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, this->TempDesCondReturn, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -1542,13 +1542,13 @@ void ExhaustAbsorberSpecs::calcChiller(EnergyPlusData &state, Real64 &MyLoad) Real64 lExhaustInFlow = state.dataLoopNodes->Node(lExhaustAirInletNodeNum).MassFlowRate; Real64 lExhaustAirHumRat = state.dataLoopNodes->Node(lExhaustAirInletNodeNum).HumRat; - Real64 Cp_CW = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp_CW = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, lChillReturnTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, RoutineName); if (this->CDPlantLoc.loopNum > 0) { - Cp_CD = Fluid::GetSpecificHeatGlycol(state, + Cp_CD = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, lChillReturnTemp, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -1906,7 +1906,7 @@ void ExhaustAbsorberSpecs::calcHeater(EnergyPlusData &state, Real64 &MyLoad, boo } else { Real64 const Cp_HW = - Fluid::GetSpecificHeatGlycol(state, hwPlantLoop.FluidName, heatReturnNode.Temp, hwPlantLoop.FluidIndex, RoutineName); + FluidProperties::GetSpecificHeatGlycol(state, hwPlantLoop.FluidName, heatReturnNode.Temp, hwPlantLoop.FluidIndex, RoutineName); // Determine available heating capacity using the current cooling load lAvailableHeatingCapacity = this->NomHeatCoolRatio * this->NomCoolingCap * diff --git a/src/EnergyPlus/ChillerGasAbsorption.cc b/src/EnergyPlus/ChillerGasAbsorption.cc index effb063112e..6cb26c946db 100644 --- a/src/EnergyPlus/ChillerGasAbsorption.cc +++ b/src/EnergyPlus/ChillerGasAbsorption.cc @@ -948,7 +948,7 @@ void GasAbsorberSpecs::initialize(EnergyPlusData &state) if (this->isWaterCooled) { // init max available condenser water flow rate if (this->CDplantLoc.loopNum > 0) { - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CDplantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CDplantLoc.loopNum).FluidIndex, @@ -962,7 +962,7 @@ void GasAbsorberSpecs::initialize(EnergyPlusData &state) } if (this->HWplantLoc.loopNum > 0) { - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->HWplantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->HWplantLoc.loopNum).FluidIndex, @@ -975,7 +975,7 @@ void GasAbsorberSpecs::initialize(EnergyPlusData &state) PlantUtilities::InitComponentNodes(state, 0.0, this->DesHeatMassFlowRate, HeatInletNode, HeatOutletNode); if (this->CWplantLoc.loopNum > 0) { - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWplantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWplantLoc.loopNum).FluidIndex, @@ -1059,12 +1059,12 @@ void GasAbsorberSpecs::size(EnergyPlusData &state) if (PltSizCoolNum > 0) { if (state.dataSize->PlantSizData(PltSizCoolNum).DesVolFlowRate >= HVAC::SmallWaterVolFlow) { - Cp = Fluid::GetSpecificHeatGlycol(state, + Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CWplantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWplantLoc.loopNum).FluidIndex, RoutineName); - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWplantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWplantLoc.loopNum).FluidIndex, @@ -1288,12 +1288,12 @@ void GasAbsorberSpecs::size(EnergyPlusData &state) if (PltSizCondNum > 0 && PltSizCoolNum > 0) { if (state.dataSize->PlantSizData(PltSizCoolNum).DesVolFlowRate >= HVAC::SmallWaterVolFlow && tmpNomCap > 0.0) { - Cp = Fluid::GetSpecificHeatGlycol(state, + Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CDplantLoc.loopNum).FluidName, this->TempDesCondReturn, state.dataPlnt->PlantLoop(this->CDplantLoc.loopNum).FluidIndex, RoutineName); - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CDplantLoc.loopNum).FluidName, this->TempDesCondReturn, state.dataPlnt->PlantLoop(this->CDplantLoc.loopNum).FluidIndex, @@ -1532,7 +1532,7 @@ void GasAbsorberSpecs::calculateChiller(EnergyPlusData &state, Real64 &MyLoad) Real64 ChillDeltaTemp = std::abs(lChillReturnTemp - ChillSupplySetPointTemp); // local fluid specific heat for chilled water - Real64 Cp_CW = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp_CW = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CWplantLoc.loopNum).FluidName, lChillReturnTemp, state.dataPlnt->PlantLoop(this->CWplantLoc.loopNum).FluidIndex, @@ -1540,7 +1540,7 @@ void GasAbsorberSpecs::calculateChiller(EnergyPlusData &state, Real64 &MyLoad) // local fluid specific heat for condenser water Real64 Cp_CD = 0; // putting this here as a dummy initialization to hush the compiler warning, in real runs this value should never be used if (this->CDplantLoc.loopNum > 0) { - Cp_CD = Fluid::GetSpecificHeatGlycol(state, + Cp_CD = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CDplantLoc.loopNum).FluidName, lChillReturnTemp, state.dataPlnt->PlantLoop(this->CDplantLoc.loopNum).FluidIndex, @@ -1854,7 +1854,7 @@ void GasAbsorberSpecs::calculateHeater(EnergyPlusData &state, Real64 &MyLoad, bo LoopNum = this->HWplantLoc.loopNum; LoopSideNum = this->HWplantLoc.loopSideNum; - Cp_HW = Fluid::GetSpecificHeatGlycol( + Cp_HW = FluidProperties::GetSpecificHeatGlycol( state, state.dataPlnt->PlantLoop(LoopNum).FluidName, lHotWaterReturnTemp, state.dataPlnt->PlantLoop(LoopNum).FluidIndex, RoutineName); lCoolElectricPower = this->CoolElectricPower; diff --git a/src/EnergyPlus/ChillerIndirectAbsorption.cc b/src/EnergyPlus/ChillerIndirectAbsorption.cc index 4652293bf4f..9a60e43c688 100644 --- a/src/EnergyPlus/ChillerIndirectAbsorption.cc +++ b/src/EnergyPlus/ChillerIndirectAbsorption.cc @@ -396,7 +396,7 @@ void GetIndirectAbsorberInput(EnergyPlusData &state) state.dataIPShortCut->cAlphaArgs(10), "Hot Water Nodes"); } else { - thisChiller.SteamFluidIndex = Fluid::FindRefrigerant(state, fluidNameSteam); + thisChiller.SteamFluidIndex = FluidProperties::GetRefrigNum(state, fluidNameSteam); thisChiller.GeneratorInletNodeNum = NodeInputManager::GetOnlySingleNode(state, state.dataIPShortCut->cAlphaArgs(9), ErrorsFound, @@ -891,7 +891,7 @@ void IndirectAbsorberSpecs::initialize(EnergyPlusData &state, bool RunFlag, Real // Initialize Supply Side Variables if (this->MyEnvrnFlag && state.dataGlobal->BeginEnvrnFlag && (state.dataPlnt->PlantFirstSizesOkayToFinalize)) { - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -901,7 +901,7 @@ void IndirectAbsorberSpecs::initialize(EnergyPlusData &state, bool RunFlag, Real PlantUtilities::InitComponentNodes(state, 0.0, this->EvapMassFlowRateMax, this->EvapInletNodeNum, this->EvapOutletNodeNum); - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -917,7 +917,7 @@ void IndirectAbsorberSpecs::initialize(EnergyPlusData &state, bool RunFlag, Real if (this->GenHeatSourceType == DataLoopNode::NodeFluidType::Water) { - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->GenPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->GenPlantLoc.loopNum).FluidIndex, @@ -925,7 +925,7 @@ void IndirectAbsorberSpecs::initialize(EnergyPlusData &state, bool RunFlag, Real this->GenMassFlowRateMax = rho * this->GeneratorVolFlowRate; } else { - Real64 SteamDensity = Fluid::GetSatDensityRefrig(state, + Real64 SteamDensity = FluidProperties::GetSatDensityRefrig(state, fluidNameSteam, state.dataLoopNodes->Node(this->GeneratorInletNodeNum).Temp, 1.0, @@ -1052,13 +1052,13 @@ void IndirectAbsorberSpecs::sizeChiller(EnergyPlusData &state) if (PltSizNum > 0) { if (state.dataSize->PlantSizData(PltSizNum).DesVolFlowRate >= HVAC::SmallWaterVolFlow) { - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -1240,13 +1240,13 @@ void IndirectAbsorberSpecs::sizeChiller(EnergyPlusData &state) if (this->EvapVolFlowRate >= HVAC::SmallWaterVolFlow && tmpNomCap > 0.0) { // QCondenser = QEvaporator + QGenerator + PumpingPower - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -1331,14 +1331,14 @@ void IndirectAbsorberSpecs::sizeChiller(EnergyPlusData &state) (PltSizHeatingNum > 0 && this->GenHeatSourceType == DataLoopNode::NodeFluidType::Water)) { if (this->EvapVolFlowRate >= HVAC::SmallWaterVolFlow && tmpNomCap > 0.0) { if (this->GenHeatSourceType == DataLoopNode::NodeFluidType::Water) { - Real64 CpWater = Fluid::GetSpecificHeatGlycol(state, + Real64 CpWater = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->GenPlantLoc.loopNum).FluidName, state.dataSize->PlantSizData(PltSizHeatingNum).ExitTemp, state.dataPlnt->PlantLoop(this->GenPlantLoc.loopNum).FluidIndex, RoutineName); Real64 SteamDeltaT = max(0.5, state.dataSize->PlantSizData(PltSizHeatingNum).DeltaT); - Real64 RhoWater = Fluid::GetDensityGlycol(state, + Real64 RhoWater = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->GenPlantLoc.loopNum).FluidName, (state.dataSize->PlantSizData(PltSizHeatingNum).ExitTemp - SteamDeltaT), state.dataPlnt->PlantLoop(this->GenPlantLoc.loopNum).FluidIndex, @@ -1395,7 +1395,7 @@ void IndirectAbsorberSpecs::sizeChiller(EnergyPlusData &state) } } } else { - Real64 SteamDensity = Fluid::GetSatDensityRefrig(state, + Real64 SteamDensity = FluidProperties::GetSatDensityRefrig(state, fluidNameSteam, state.dataSize->PlantSizData(PltSizSteamNum).ExitTemp, 1.0, @@ -1405,7 +1405,7 @@ void IndirectAbsorberSpecs::sizeChiller(EnergyPlusData &state) Real64 GeneratorOutletTemp = state.dataSize->PlantSizData(PltSizSteamNum).ExitTemp - SteamDeltaT; // dry enthalpy of steam (quality = 1) - Real64 EnthSteamOutDry = Fluid::GetSatEnthalpyRefrig(state, + Real64 EnthSteamOutDry = FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, state.dataSize->PlantSizData(PltSizSteamNum).ExitTemp, 1.0, @@ -1413,14 +1413,14 @@ void IndirectAbsorberSpecs::sizeChiller(EnergyPlusData &state) std::string{SizeChillerAbsorptionIndirect} + this->Name); // wet enthalpy of steam (quality = 0) - Real64 EnthSteamOutWet = Fluid::GetSatEnthalpyRefrig(state, + Real64 EnthSteamOutWet = FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, state.dataSize->PlantSizData(PltSizSteamNum).ExitTemp, 0.0, this->SteamFluidIndex, std::string{SizeChillerAbsorptionIndirect} + this->Name); Real64 CpWater = - Fluid::GetSpecificHeatGlycol(state, fluidNameWater, GeneratorOutletTemp, const_cast(waterIndex), RoutineName); + FluidProperties::GetSpecificHeatGlycol(state, fluidNameWater, GeneratorOutletTemp, const_cast(waterIndex), RoutineName); Real64 HfgSteam = EnthSteamOutDry - EnthSteamOutWet; // calculate the mass flow rate through the generator Real64 SteamMassFlowRate = (tmpNomCap * SteamInputRatNom) / ((HfgSteam) + (SteamDeltaT * CpWater)); @@ -1519,12 +1519,12 @@ void IndirectAbsorberSpecs::sizeChiller(EnergyPlusData &state) if (PltSizHeatingNum > 0 && this->GenHeatSourceType == DataLoopNode::NodeFluidType::Water) { this->GeneratorDeltaTemp = max(0.5, state.dataSize->PlantSizData(PltSizHeatingNum).DeltaT); } else if (this->GenHeatSourceType == DataLoopNode::NodeFluidType::Water) { - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->GenPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->GenPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 CpWater = Fluid::GetSpecificHeatGlycol(state, + Real64 CpWater = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->GenPlantLoc.loopNum).FluidName, state.dataSize->PlantSizData(PltSizHeatingNum).ExitTemp, state.dataPlnt->PlantLoop(this->GenPlantLoc.loopNum).FluidIndex, @@ -1717,7 +1717,7 @@ void IndirectAbsorberSpecs::calculate(EnergyPlusData &state, Real64 const MyLoad // C - Evaporator low temp. limit cut off Real64 TempLowLimitEout = this->TempLowLimitEvapOut; - Real64 CpFluid = Fluid::GetSpecificHeatGlycol(state, + Real64 CpFluid = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, EvapInletTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -1987,7 +1987,7 @@ void IndirectAbsorberSpecs::calculate(EnergyPlusData &state, Real64 const MyLoad this->QCondenser = this->QEvaporator + this->QGenerator + this->PumpingPower; - CpFluid = Fluid::GetSpecificHeatGlycol(state, + CpFluid = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, CondInletTemp, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -2007,7 +2007,7 @@ void IndirectAbsorberSpecs::calculate(EnergyPlusData &state, Real64 const MyLoad // Hot water plant is used for the generator if (this->GenHeatSourceType == DataLoopNode::NodeFluidType::Water) { - CpFluid = Fluid::GetSpecificHeatGlycol(state, + CpFluid = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->GenPlantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->GeneratorInletNodeNum).Temp, state.dataPlnt->PlantLoop(this->GenPlantLoc.loopNum).FluidIndex, @@ -2034,7 +2034,7 @@ void IndirectAbsorberSpecs::calculate(EnergyPlusData &state, Real64 const MyLoad } else { // using a steam plant for the generator // enthalpy of dry steam at generator inlet - Real64 EnthSteamOutDry = Fluid::GetSatEnthalpyRefrig(state, + Real64 EnthSteamOutDry = FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, state.dataLoopNodes->Node(this->GeneratorInletNodeNum).Temp, 1.0, @@ -2042,7 +2042,7 @@ void IndirectAbsorberSpecs::calculate(EnergyPlusData &state, Real64 const MyLoad std::string{calcChillerAbsorptionIndirect} + this->Name); // enthalpy of wet steam at generator inlet - Real64 EnthSteamOutWet = Fluid::GetSatEnthalpyRefrig(state, + Real64 EnthSteamOutWet = FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, state.dataLoopNodes->Node(this->GeneratorInletNodeNum).Temp, 0.0, @@ -2057,7 +2057,7 @@ void IndirectAbsorberSpecs::calculate(EnergyPlusData &state, Real64 const MyLoad // heat of vaporization of steam Real64 HfgSteam = EnthSteamOutDry - EnthSteamOutWet; - CpFluid = Fluid::GetSpecificHeatGlycol( + CpFluid = FluidProperties::GetSpecificHeatGlycol( state, fluidNameWater, SteamOutletTemp, const_cast(waterIndex), std::string{calcChillerAbsorptionIndirect} + this->Name); this->GenMassFlowRate = this->QGenerator / (HfgSteam + CpFluid * SteamDeltaT); PlantUtilities::SetComponentFlowRate( @@ -2068,13 +2068,13 @@ void IndirectAbsorberSpecs::calculate(EnergyPlusData &state, Real64 const MyLoad this->SteamOutletEnthalpy = state.dataLoopNodes->Node(this->GeneratorInletNodeNum).Enthalpy; } else { this->GenOutletTemp = state.dataLoopNodes->Node(this->GeneratorInletNodeNum).Temp - SteamDeltaT; - this->SteamOutletEnthalpy = Fluid::GetSatEnthalpyRefrig(state, + this->SteamOutletEnthalpy = FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, state.dataLoopNodes->Node(this->GeneratorInletNodeNum).Temp, 0.0, this->SteamFluidIndex, std::string{LoopLossesChillerAbsorptionIndirect} + this->Name); - CpFluid = Fluid::GetSpecificHeatGlycol(state, + CpFluid = FluidProperties::GetSpecificHeatGlycol(state, fluidNameWater, state.dataLoopNodes->Node(this->GeneratorInletNodeNum).Temp, const_cast(waterIndex), @@ -2085,14 +2085,14 @@ void IndirectAbsorberSpecs::calculate(EnergyPlusData &state, Real64 const MyLoad //************************* Loop Losses ***************************** // temperature of condensed steam leaving generator (after condensate trap) - Real64 TempWaterAtmPress = Fluid::GetSatTemperatureRefrig(state, + Real64 TempWaterAtmPress = FluidProperties::GetSatTemperatureRefrig(state, fluidNameSteam, state.dataEnvrn->OutBaroPress, this->SteamFluidIndex, std::string{LoopLossesChillerAbsorptionIndirect} + this->Name); // enthalpy of condensed steam leaving generator (after condensate trap) - Real64 EnthAtAtmPress = Fluid::GetSatEnthalpyRefrig(state, + Real64 EnthAtAtmPress = FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, TempWaterAtmPress, 0.0, diff --git a/src/EnergyPlus/ChillerReformulatedEIR.cc b/src/EnergyPlus/ChillerReformulatedEIR.cc index 6b5d6d6210e..fced4b2388a 100644 --- a/src/EnergyPlus/ChillerReformulatedEIR.cc +++ b/src/EnergyPlus/ChillerReformulatedEIR.cc @@ -990,7 +990,7 @@ void ReformulatedEIRChillerSpecs::initialize(EnergyPlusData &state, bool const R if (this->MyEnvrnFlag && state.dataGlobal->BeginEnvrnFlag && (state.dataPlnt->PlantFirstSizesOkayToFinalize)) { - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -1002,7 +1002,7 @@ void ReformulatedEIRChillerSpecs::initialize(EnergyPlusData &state, bool const R if (this->CondenserType == DataPlant::CondenserType::WaterCooled) { - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, this->TempRefCondIn, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -1027,7 +1027,7 @@ void ReformulatedEIRChillerSpecs::initialize(EnergyPlusData &state, bool const R } if (this->HeatRecActive) { - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidIndex, @@ -1197,12 +1197,12 @@ void ReformulatedEIRChillerSpecs::size(EnergyPlusData &state) SizingEvapOutletTemp = state.dataSize->PlantSizData(PltSizNum).ExitTemp; SizingCondOutletTemp = state.dataSize->PlantSizData(PltSizCondNum).ExitTemp + state.dataSize->PlantSizData(PltSizCondNum).DeltaT; } - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -1263,12 +1263,12 @@ void ReformulatedEIRChillerSpecs::size(EnergyPlusData &state) if (PltSizCondNum > 0 && PltSizNum > 0 && this->CondenserType == DataPlant::CondenserType::WaterCooled) { if (state.dataSize->PlantSizData(PltSizNum).DesVolFlowRate >= HVAC::SmallWaterVolFlow && tmpNomCap > 0.0) { - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, this->TempRefCondIn, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -1607,13 +1607,13 @@ void ReformulatedEIRChillerSpecs::size(EnergyPlusData &state) } // Initialize condenser reference inlet temperature (not a user input) - Real64 Density = Fluid::GetDensityGlycol(state, + Real64 Density = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, this->TempRefCondOut, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 SpecificHeat = Fluid::GetSpecificHeatGlycol(state, + Real64 SpecificHeat = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, this->TempRefCondOut, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -1846,14 +1846,14 @@ void ReformulatedEIRChillerSpecs::calcHeatRecovery(EnergyPlusData &state, Real64 heatRecInletTemp = state.dataLoopNodes->Node(this->HeatRecInletNodeNum).Temp; Real64 HeatRecMassFlowRate = state.dataLoopNodes->Node(this->HeatRecInletNodeNum).MassFlowRate; - Real64 CpHeatRec = Fluid::GetSpecificHeatGlycol(state, + Real64 CpHeatRec = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidName, heatRecInletTemp, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidIndex, RoutineName); Real64 CpCond; if (this->CondenserType == DataPlant::CondenserType::WaterCooled) { - CpCond = Fluid::GetSpecificHeatGlycol(state, + CpCond = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, condInletTemp, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -2158,7 +2158,7 @@ void ReformulatedEIRChillerSpecs::calculate(EnergyPlusData &state, Real64 &MyLoa // This chiller is currently has only a water-cooled condenser // Calculate water side load - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->EvapInletNodeNum).Temp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -2442,7 +2442,7 @@ void ReformulatedEIRChillerSpecs::calculate(EnergyPlusData &state, Real64 &MyLoa if (this->CondMassFlowRate > DataBranchAirLoopPlant::MassFlowTolerance) { // If Heat Recovery specified for this vapor compression chiller, then Qcondenser will be adjusted by this subroutine if (this->HeatRecActive) this->calcHeatRecovery(state, this->QCondenser, this->CondMassFlowRate, condInletTemp, this->QHeatRecovery); - Cp = Fluid::GetSpecificHeatGlycol(state, + Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, condInletTemp, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, diff --git a/src/EnergyPlus/CondenserLoopTowers.cc b/src/EnergyPlus/CondenserLoopTowers.cc index 60a617f2384..bcc98409f3f 100644 --- a/src/EnergyPlus/CondenserLoopTowers.cc +++ b/src/EnergyPlus/CondenserLoopTowers.cc @@ -1789,7 +1789,7 @@ namespace CondenserLoopTowers { void CoolingTower::initEachEnvironment(EnergyPlusData &state) { static constexpr std::string_view RoutineName("CoolingTower::initEachEnvironment"); - Real64 const rho = Fluid::GetDensityGlycol(state, + Real64 const rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -2481,12 +2481,12 @@ namespace CondenserLoopTowers { if (this->PerformanceInputMethod_Num == PIM::UFactor && (!this->HighSpeedTowerUAWasAutoSized)) { if (PltSizCondNum > 0) { - Real64 const rho = Fluid::GetDensityGlycol(state, + Real64 const rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, DesTowerExitWaterTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); - Real64 const Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 const Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, DesTowerExitWaterTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -2498,12 +2498,12 @@ namespace CondenserLoopTowers { Real64 AssumedDeltaT = DesTowerWaterDeltaT; Real64 AssumedExitTemp = DesTowerExitWaterTemp; - Real64 const rho = Fluid::GetDensityGlycol(state, + Real64 const rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, AssumedExitTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); - Real64 const Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 const Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, AssumedExitTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -2592,12 +2592,12 @@ namespace CondenserLoopTowers { } else { if (PltSizCondNum > 0) { if (PlantSizData(PltSizCondNum).DesVolFlowRate >= HVAC::SmallWaterVolFlow) { - Real64 const rho = Fluid::GetDensityGlycol(state, + Real64 const rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); - Real64 const Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 const Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, DesTowerExitWaterTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -2692,12 +2692,12 @@ namespace CondenserLoopTowers { if (this->HighSpeedTowerUAWasAutoSized) { if (PltSizCondNum > 0) { if (PlantSizData(PltSizCondNum).DesVolFlowRate >= HVAC::SmallWaterVolFlow) { - Real64 const rho = Fluid::GetDensityGlycol(state, + Real64 const rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); - Real64 const Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 const Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, DesTowerExitWaterTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -2791,12 +2791,12 @@ namespace CondenserLoopTowers { } else { if (this->DesignWaterFlowRate >= HVAC::SmallWaterVolFlow) { - Real64 const rho = Fluid::GetDensityGlycol(state, + Real64 const rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); - Real64 const Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 const Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, DesTowerExitWaterTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -2911,12 +2911,12 @@ namespace CondenserLoopTowers { if (this->DesignWaterFlowRate >= HVAC::SmallWaterVolFlow) { // nominal capacity doesn't include compressor heat; predefined factor was 1.25 W heat rejection per W of delivered cooling but now is // a user input - Real64 const rho = Fluid::GetDensityGlycol(state, + Real64 const rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, 29.44, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); // 85F design exiting water temp - Real64 const Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 const Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, 29.44, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -3094,12 +3094,12 @@ namespace CondenserLoopTowers { // nominal capacity doesn't include compressor heat; predefined factor was 1.25 W heat rejection per W of evap cooling but now is a // user input - Real64 const rho = Fluid::GetDensityGlycol(state, + Real64 const rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, 29.44, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); // 85F design exiting water temp - Real64 const Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 const Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, 29.44, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -3193,12 +3193,12 @@ namespace CondenserLoopTowers { if (this->DesignWaterFlowRate >= HVAC::SmallWaterVolFlow && this->TowerFreeConvNomCap > 0.0) { // nominal capacity doesn't include compressor heat; predefined factor was 1.25 W heat rejection per W of evap cooling but now user // input - Real64 const rho = Fluid::GetDensityGlycol(state, + Real64 const rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, 29.44, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); // 85F design exiting water temp - Real64 const Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 const Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, 29.44, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -3342,12 +3342,12 @@ namespace CondenserLoopTowers { state.dataCondenserLoopTowers->towers(this->VSTower).MaxWaterFlowRatio)); } - Real64 const rho = Fluid::GetDensityGlycol(state, + Real64 const rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, (this->DesignInletWB + this->DesignApproach + this->DesignRange), state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); - Real64 const Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 const Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, (this->DesignInletWB + this->DesignApproach + this->DesignRange), state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -3589,12 +3589,12 @@ namespace CondenserLoopTowers { if (PltSizCondNum > 0) { // get nominal capacity from PlantSizData(PltSizCondNum)%DeltaT and PlantSizData(PltSizCondNum)%DesVolFlowRate if (PlantSizData(PltSizCondNum).DesVolFlowRate >= HVAC::SmallWaterVolFlow) { - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, DesTowerExitWaterTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); - Cp = Fluid::GetSpecificHeatGlycol(state, + Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, DesTowerExitWaterTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -3607,12 +3607,12 @@ namespace CondenserLoopTowers { } else { // PltSizCondNum = 0 if (!this->TowerInletCondsAutoSize) { // can use design data entered into tower object if (this->DesignWaterFlowRate >= HVAC::SmallWaterVolFlow) { - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, DesTowerExitWaterTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); - Cp = Fluid::GetSpecificHeatGlycol(state, + Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, DesTowerExitWaterTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -3870,21 +3870,21 @@ namespace CondenserLoopTowers { // now calcuate UA values from nominal capacities and flow rates if (state.dataPlnt->PlantFirstSizesOkayToFinalize) { if (PltSizCondNum > 0) { // user has a plant sizing object - Cp = Fluid::GetSpecificHeatGlycol(state, + Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, DesTowerExitWaterTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); this->WaterTemp = DesTowerInletWaterTemp; } else { // probably no plant sizing object - Cp = Fluid::GetSpecificHeatGlycol(state, + Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); this->WaterTemp = DesTowerInletWaterTemp; // 35.0; // design condition } - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -4033,12 +4033,12 @@ namespace CondenserLoopTowers { // get nominal capacity from PlantSizData(PltSizCondNum)%DeltaT and PlantSizData(PltSizCondNum)%DesVolFlowRate if (PltSizCondNum > 0) { if (PlantSizData(PltSizCondNum).DesVolFlowRate >= HVAC::SmallWaterVolFlow) { - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, DesTowerExitWaterTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); - Cp = Fluid::GetSpecificHeatGlycol(state, + Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, DesTowerExitWaterTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -4085,12 +4085,12 @@ namespace CondenserLoopTowers { } else { if (!this->TowerInletCondsAutoSize) { if (this->DesignWaterFlowRate >= HVAC::SmallWaterVolFlow) { - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, DesTowerExitWaterTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); - Cp = Fluid::GetSpecificHeatGlycol(state, + Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, DesTowerExitWaterTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -4207,12 +4207,12 @@ namespace CondenserLoopTowers { } // now calcuate UA values from nominal capacities and flow rates if (state.dataPlnt->PlantFirstSizesOkayToFinalize) { - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); - Cp = Fluid::GetSpecificHeatGlycol(state, + Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, DesTowerExitWaterTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -4322,12 +4322,12 @@ namespace CondenserLoopTowers { // get nominal capacity from PlantSizData(PltSizCondNum)%DeltaT and PlantSizData(PltSizCondNum)%DesVolFlowRate if (PltSizCondNum > 0) { if (PlantSizData(PltSizCondNum).DesVolFlowRate >= HVAC::SmallWaterVolFlow) { - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, DesTowerExitWaterTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); - Cp = Fluid::GetSpecificHeatGlycol(state, + Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, DesTowerExitWaterTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -4405,12 +4405,12 @@ namespace CondenserLoopTowers { } else { // UA and Air flow rate given, so find Nominal Cap from running model - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, DesTowerExitWaterTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); - Cp = Fluid::GetSpecificHeatGlycol(state, + Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, DesTowerExitWaterTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -4837,7 +4837,7 @@ namespace CondenserLoopTowers { // output the fraction of the time step the fan is ON this->FanCyclingRatio = FanModeFrac; // Should this be water inlet node num????? - Real64 const CpWater = Fluid::GetSpecificHeatGlycol(state, + Real64 const CpWater = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->WaterInletNodeNum).Temp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -5080,7 +5080,7 @@ namespace CondenserLoopTowers { this->FanCyclingRatio = FanModeFrac; this->SpeedSelected = SpeedSel; - Real64 const CpWater = Fluid::GetSpecificHeatGlycol(state, + Real64 const CpWater = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->WaterInletNodeNum).Temp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -5227,7 +5227,7 @@ namespace CondenserLoopTowers { while (IncrNumCellFlag) { IncrNumCellFlag = false; // Initialize inlet node water properties - Real64 const WaterDensity = Fluid::GetDensityGlycol(state, + Real64 const WaterDensity = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->WaterInletNodeNum).Temp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -5361,7 +5361,7 @@ namespace CondenserLoopTowers { } // IF(OutletWaterTempOFF .GT. TempSetPoint)THEN } // IF(OutletWaterTempON .LT. TempSetPoint) ie if tower should not run at full capacity - Real64 const CpWater = Fluid::GetSpecificHeatGlycol(state, + Real64 const CpWater = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->WaterInletNodeNum).Temp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -5449,7 +5449,7 @@ namespace CondenserLoopTowers { Real64 constexpr Acc(1.e-3); // Accuracy of solver result static constexpr std::string_view RoutineName("calculateMerkelVariableSpeedTower"); - Real64 const CpWater = Fluid::GetSpecificHeatGlycol(state, + Real64 const CpWater = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->WaterInletNodeNum).Temp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -5731,7 +5731,7 @@ namespace CondenserLoopTowers { Real64 AirDensity = Psychrometrics::PsyRhoAirFnPbTdbW(state, this->AirPress, InletAirTemp, this->AirHumRat); // Density of air [kg/m3] Real64 AirMassFlowRate = AirFlowRate * AirDensity; // Mass flow rate of air [kg/s] Real64 CpAir = Psychrometrics::PsyCpAirFnW(this->AirHumRat); // Heat capacity of air [J/kg/K] - Real64 CpWater = Fluid::GetSpecificHeatGlycol(state, + Real64 CpWater = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, this->WaterTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -6252,7 +6252,7 @@ namespace CondenserLoopTowers { Real64 const TairAvg = (this->AirTemp + OutletAirTSat) / 2.0; // Amount of water evaporated, get density water at air temp or 4 C if too cold - Real64 const rho = Fluid::GetDensityGlycol(state, + Real64 const rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, max(TairAvg, 4.0), state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -6265,7 +6265,7 @@ namespace CondenserLoopTowers { } } else if (this->EvapLossMode == EvapLoss::UserFactor) { - Real64 const rho = Fluid::GetDensityGlycol(state, + Real64 const rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, AverageWaterTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, diff --git a/src/EnergyPlus/Data/EnergyPlusData.cc b/src/EnergyPlus/Data/EnergyPlusData.cc index 2931bffce2d..5543fd3f191 100644 --- a/src/EnergyPlus/Data/EnergyPlusData.cc +++ b/src/EnergyPlus/Data/EnergyPlusData.cc @@ -117,7 +117,7 @@ EnergyPlusData::EnergyPlusData() this->dataFans = std::make_unique(); this->dataFaultsMgr = std::make_unique(); this->dataFluidCoolers = std::make_unique(); - this->dataFluid = std::make_unique(); + this->dataFluidProperties = std::make_unique(); this->dataFourPipeBeam = std::make_unique(); this->dataFuelCellElectGen = std::make_unique(); this->dataFurnaces = std::make_unique(); @@ -372,7 +372,7 @@ void EnergyPlusData::clear_state() this->dataFans->clear_state(); this->dataFaultsMgr->clear_state(); this->dataFluidCoolers->clear_state(); - this->dataFluid->clear_state(); + this->dataFluidProperties->clear_state(); this->dataFourPipeBeam->clear_state(); this->dataFuelCellElectGen->clear_state(); this->dataFurnaces->clear_state(); @@ -574,7 +574,7 @@ void EnergyPlusData::init_state(EnergyPlusData &state) // do this in "topological" order meaning the first to go are the // objects that do not reference any other objects, like fluids, // schedules, curves, etc. - this->dataFluid->init_state(state); + this->dataFluidProperties->init_state(state); this->dataAirLoop->init_state(state); this->dataAirLoopHVACDOAS->init_state(state); diff --git a/src/EnergyPlus/Data/EnergyPlusData.hh b/src/EnergyPlus/Data/EnergyPlusData.hh index 95a4ea8da82..fd2afcdee23 100644 --- a/src/EnergyPlus/Data/EnergyPlusData.hh +++ b/src/EnergyPlus/Data/EnergyPlusData.hh @@ -390,7 +390,7 @@ struct EnergyPlusData : BaseGlobalStruct std::unique_ptr dataFans; std::unique_ptr dataFaultsMgr; std::unique_ptr dataFluidCoolers; - std::unique_ptr dataFluid; + std::unique_ptr dataFluidProperties; std::unique_ptr dataFourPipeBeam; std::unique_ptr dataFuelCellElectGen; std::unique_ptr dataFurnaces; diff --git a/src/EnergyPlus/DaylightingDevices.cc b/src/EnergyPlus/DaylightingDevices.cc index b8fecc5ce33..37a8942ad32 100644 --- a/src/EnergyPlus/DaylightingDevices.cc +++ b/src/EnergyPlus/DaylightingDevices.cc @@ -1400,7 +1400,7 @@ namespace Dayltg { // REFERENCES: na // Using/Aliasing - using Fluid::FindArrayIndex; // USEd code could be copied here to eliminate dependence on FluidProperties + using FluidProperties::FindArrayIndex; // USEd code could be copied here to eliminate dependence on FluidProperties // Return value Real64 InterpolatePipeTransBeam; diff --git a/src/EnergyPlus/DesiccantDehumidifiers.cc b/src/EnergyPlus/DesiccantDehumidifiers.cc index d567be8fcee..a9a3aafc4e0 100644 --- a/src/EnergyPlus/DesiccantDehumidifiers.cc +++ b/src/EnergyPlus/DesiccantDehumidifiers.cc @@ -475,7 +475,7 @@ namespace DesiccantDehumidifiers { if (desicDehum.MaxCoilFluidFlow > 0.0) { SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed Real64 SteamDensity = - Fluid::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, SteamIndex, dehumidifierDesiccantNoFans); + FluidProperties::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, SteamIndex, dehumidifierDesiccantNoFans); desicDehum.MaxCoilFluidFlow *= SteamDensity; } @@ -984,7 +984,7 @@ namespace DesiccantDehumidifiers { desicDehum.MaxCoilFluidFlow = SteamCoils::GetCoilMaxSteamFlowRate(state, desicDehum.RegenCoilIndex, errFlag); if (desicDehum.MaxCoilFluidFlow > 0.0) { SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed - Real64 SteamDensity = Fluid::GetSatDensityRefrig( + Real64 SteamDensity = FluidProperties::GetSatDensityRefrig( state, fluidNameSteam, TempSteamIn, 1.0, SteamIndex, dehumidifierDesiccantNoFans); desicDehum.MaxCoilFluidFlow *= SteamDensity; } @@ -1654,7 +1654,7 @@ namespace DesiccantDehumidifiers { desicDehum.MaxCoilFluidFlow = WaterCoils::GetCoilMaxWaterFlowRate(state, "Coil:Heating:Water", desicDehum.RegenCoilName, ErrorFlag); if (desicDehum.MaxCoilFluidFlow > 0.0) { - Real64 FluidDensity = Fluid::GetDensityGlycol(state, + Real64 FluidDensity = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(desicDehum.plantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(desicDehum.plantLoc.loopNum).FluidIndex, @@ -1684,7 +1684,7 @@ namespace DesiccantDehumidifiers { if (desicDehum.MaxCoilFluidFlow > 0.0) { int SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed - Real64 FluidDensity = Fluid::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, SteamIndex, RoutineName); + Real64 FluidDensity = FluidProperties::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, SteamIndex, RoutineName); desicDehum.MaxCoilFluidFlow *= FluidDensity; } } @@ -1770,7 +1770,7 @@ namespace DesiccantDehumidifiers { //} if (CoilMaxVolFlowRate != DataSizing::AutoSize) { Real64 FluidDensity = - Fluid::GetDensityGlycol(state, + FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(desicDehum.plantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(desicDehum.plantLoc.loopNum).FluidIndex, @@ -1793,7 +1793,7 @@ namespace DesiccantDehumidifiers { if (CoilMaxVolFlowRate != DataSizing::AutoSize) { int SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed Real64 FluidDensity = - Fluid::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, SteamIndex, RoutineName); + FluidProperties::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, SteamIndex, RoutineName); desicDehum.MaxCoilFluidFlow = CoilMaxVolFlowRate * FluidDensity; } } diff --git a/src/EnergyPlus/EvaporativeFluidCoolers.cc b/src/EnergyPlus/EvaporativeFluidCoolers.cc index d9841a04e1c..3e170a3c51e 100644 --- a/src/EnergyPlus/EvaporativeFluidCoolers.cc +++ b/src/EnergyPlus/EvaporativeFluidCoolers.cc @@ -1277,7 +1277,7 @@ namespace EvaporativeFluidCoolers { // Begin environment initializations if (this->MyEnvrnFlag && state.dataGlobal->BeginEnvrnFlag && (state.dataPlnt->PlantFirstSizesOkayToFinalize)) { - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -1406,12 +1406,12 @@ namespace EvaporativeFluidCoolers { if (this->PerformanceInputMethod_Num == PIM::UFactor && !this->HighSpeedEvapFluidCoolerUAWasAutoSized) { if (PltSizCondNum > 0) { - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, CalledFrom); - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, state.dataSize->PlantSizData(PltSizCondNum).ExitTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -1481,12 +1481,12 @@ namespace EvaporativeFluidCoolers { if (state.dataPlnt->PlantFirstSizesOkayToFinalize) this->HighSpeedFanPower = tmpHighSpeedFanPower; } else if (PltSizCondNum > 0) { if (state.dataSize->PlantSizData(PltSizCondNum).DesVolFlowRate >= HVAC::SmallWaterVolFlow) { - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, CalledFrom); - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, state.dataSize->PlantSizData(PltSizCondNum).ExitTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -1586,12 +1586,12 @@ namespace EvaporativeFluidCoolers { "must be > 25.6 C if autosizing the Evaporative Fluid Cooler."); ShowFatalError(state, "Review and revise design input values as appropriate."); } - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, CalledFrom); - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, state.dataSize->PlantSizData(PltSizCondNum).ExitTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -1714,12 +1714,12 @@ namespace EvaporativeFluidCoolers { if (this->DesignWaterFlowRate >= HVAC::SmallWaterVolFlow) { // Standard Design Capacity doesn't include compressor heat; // predefined factor was 1.25 W heat rejection per W of delivered cooling, now a user input with 1.25 default - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, CalledFrom); - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, 35.0, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -1792,12 +1792,12 @@ namespace EvaporativeFluidCoolers { if (this->PerformanceInputMethod_Num == PIM::UserSpecifiedDesignCapacity) { if (this->DesignWaterFlowRate >= HVAC::SmallWaterVolFlow) { - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, CalledFrom); - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, this->DesignEnteringWaterTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -1952,12 +1952,12 @@ namespace EvaporativeFluidCoolers { if (this->DesignWaterFlowRate >= HVAC::SmallWaterVolFlow && this->LowSpeedStandardDesignCapacity > 0.0) { // Standard design capacity doesn't include compressor heat; // predefined factor was 1.25 W heat rejection per W of delivered cooling, now user input with default 1.25 - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, CalledFrom); - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, this->DesignEnteringWaterTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -2014,12 +2014,12 @@ namespace EvaporativeFluidCoolers { if (this->PerformanceInputMethod_Num == PIM::UserSpecifiedDesignCapacity && this->Type == DataPlant::PlantEquipmentType::EvapFluidCooler_TwoSpd) { if (this->DesignWaterFlowRate >= HVAC::SmallWaterVolFlow && this->LowSpeedUserSpecifiedDesignCapacity > 0.0) { - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, CalledFrom); - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, this->DesignEnteringWaterTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -2279,7 +2279,7 @@ namespace EvaporativeFluidCoolers { } // Should this be water inlet node num????? - CpWater = Fluid::GetSpecificHeatGlycol(state, + CpWater = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->WaterInletNode).Temp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -2404,7 +2404,7 @@ namespace EvaporativeFluidCoolers { } // Should this be water inlet node num?? - Real64 CpWater = Fluid::GetSpecificHeatGlycol(state, + Real64 CpWater = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->WaterInletNode).Temp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -2457,7 +2457,7 @@ namespace EvaporativeFluidCoolers { Real64 AirDensity = Psychrometrics::PsyRhoAirFnPbTdbW(state, this->inletConds.AirPress, InletAirTemp, this->inletConds.AirHumRat); Real64 AirMassFlowRate = AirFlowRate * AirDensity; Real64 CpAir = Psychrometrics::PsyCpAirFnW(this->inletConds.AirHumRat); - Real64 CpWater = Fluid::GetSpecificHeatGlycol(state, + Real64 CpWater = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, this->InletWaterTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -2556,7 +2556,7 @@ namespace EvaporativeFluidCoolers { Real64 TairAvg = (this->inletConds.AirTemp + OutletAirTSat) / 2.0; // Amount of water evaporated - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, TairAvg, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -2568,7 +2568,7 @@ namespace EvaporativeFluidCoolers { } } else if (this->EvapLossMode == EvapLoss::ByUserFactor) { - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, AverageWaterTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -2762,7 +2762,7 @@ namespace EvaporativeFluidCoolers { this->setupOutputVars(state); this->FluidIndex = state.dataPlnt->PlantLoop(state.dataSize->CurLoopNum).FluidIndex; - std::string FluidName = Fluid::GetGlycolNameByIndex(state, this->FluidIndex); + std::string FluidName = FluidProperties::GetGlycolNameByIndex(state, this->FluidIndex); if (Util::SameString(this->PerformanceInputMethod, "STANDARDDESIGNCAPACITY")) { this->PerformanceInputMethod_Num = PIM::StandardDesignCapacity; diff --git a/src/EnergyPlus/FanCoilUnits.cc b/src/EnergyPlus/FanCoilUnits.cc index d1fa183f8f1..2b9680775cc 100644 --- a/src/EnergyPlus/FanCoilUnits.cc +++ b/src/EnergyPlus/FanCoilUnits.cc @@ -1083,7 +1083,7 @@ namespace FanCoilUnits { fanCoil.OutAirMassFlow = RhoAir * fanCoil.OutAirVolFlow; if (fanCoil.HCoilType_Num == HCoil::Water) { - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(fanCoil.HeatCoilPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(fanCoil.HeatCoilPlantLoc.loopNum).FluidIndex, @@ -1092,7 +1092,7 @@ namespace FanCoilUnits { fanCoil.MinHotWaterFlow = rho * fanCoil.MinHotWaterVolFlow; } - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(fanCoil.CoolCoilPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(fanCoil.CoolCoilPlantLoc.loopNum).FluidIndex, @@ -1630,12 +1630,12 @@ namespace FanCoilUnits { } fanCoil.DesHeatingLoad = DesCoilLoad; if (DesCoilLoad >= HVAC::SmallLoad) { - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(fanCoil.HeatCoilPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(fanCoil.HeatCoilPlantLoc.loopNum).FluidIndex, RoutineNameNoSpace); - Cp = Fluid::GetSpecificHeatGlycol(state, + Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(fanCoil.HeatCoilPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(fanCoil.HeatCoilPlantLoc.loopNum).FluidIndex, @@ -1815,12 +1815,12 @@ namespace FanCoilUnits { } fanCoil.DesCoolingLoad = DesCoilLoad; if (DesCoilLoad >= HVAC::SmallLoad) { - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(fanCoil.CoolCoilPlantLoc.loopNum).FluidName, 5., state.dataPlnt->PlantLoop(fanCoil.CoolCoilPlantLoc.loopNum).FluidIndex, RoutineNameNoSpace); - Cp = Fluid::GetSpecificHeatGlycol(state, + Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(fanCoil.CoolCoilPlantLoc.loopNum).FluidName, 5., state.dataPlnt->PlantLoop(fanCoil.CoolCoilPlantLoc.loopNum).FluidIndex, diff --git a/src/EnergyPlus/FluidCoolers.cc b/src/EnergyPlus/FluidCoolers.cc index ca88e72f098..9f8b613ddef 100644 --- a/src/EnergyPlus/FluidCoolers.cc +++ b/src/EnergyPlus/FluidCoolers.cc @@ -851,7 +851,7 @@ void FluidCoolerspecs::oneTimeInit_new(EnergyPlusData &state) void FluidCoolerspecs::initEachEnvironment(EnergyPlusData &state) { static constexpr std::string_view RoutineName("FluidCoolerspecs::initEachEnvironment"); - Real64 const rho = Fluid::GetDensityGlycol(state, + Real64 const rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -1008,12 +1008,12 @@ void FluidCoolerspecs::size(EnergyPlusData &state) if (this->PerformanceInputMethod_Num == PerfInputMethod::U_FACTOR && this->HighSpeedFluidCoolerUAWasAutoSized) { if (PltSizCondNum > 0) { - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, CalledFrom); - Cp = Fluid::GetSpecificHeatGlycol(state, + Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, state.dataSize->PlantSizData(PltSizCondNum).ExitTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -1054,12 +1054,12 @@ void FluidCoolerspecs::size(EnergyPlusData &state) "Setpoint must be > design inlet air dry-bulb temp if autosizing the Fluid Cooler."); ShowFatalError(state, "Review and revise design input values as appropriate."); } - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, CalledFrom); - Cp = Fluid::GetSpecificHeatGlycol(state, + Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, state.dataSize->PlantSizData(PltSizCondNum).ExitTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -1143,12 +1143,12 @@ void FluidCoolerspecs::size(EnergyPlusData &state) "Setpoint must be > design inlet air dry-bulb temp if autosizing the Fluid Cooler."); ShowFatalError(state, "Review and revise design input values as appropriate."); } - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, CalledFrom); - Cp = Fluid::GetSpecificHeatGlycol(state, + Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, state.dataSize->PlantSizData(PltSizCondNum).ExitTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -1225,12 +1225,12 @@ void FluidCoolerspecs::size(EnergyPlusData &state) "must be > design inlet air dry-bulb temp if autosizing the Fluid Cooler."); ShowFatalError(state, "Review and revise design input values as appropriate."); } - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, CalledFrom); - Cp = Fluid::GetSpecificHeatGlycol(state, + Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, state.dataSize->PlantSizData(PltSizCondNum).ExitTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -1339,12 +1339,12 @@ void FluidCoolerspecs::size(EnergyPlusData &state) if (this->PerformanceInputMethod_Num == PerfInputMethod::NOMINAL_CAPACITY) { if (this->DesignWaterFlowRate >= HVAC::SmallWaterVolFlow) { - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, CalledFrom); - Cp = Fluid::GetSpecificHeatGlycol(state, + Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, this->DesignEnteringWaterTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -1523,12 +1523,12 @@ void FluidCoolerspecs::size(EnergyPlusData &state) } if (this->DesignWaterFlowRate >= HVAC::SmallWaterVolFlow && this->FluidCoolerLowSpeedNomCap > 0.0) { - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, CalledFrom); - Cp = Fluid::GetSpecificHeatGlycol(state, + Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, this->DesignEnteringWaterTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -1759,7 +1759,7 @@ void FluidCoolerspecs::calcSingleSpeed(EnergyPlusData &state) // Setpoint was not met, fluid cooler ran at full capacity this->FanPower = FanPowerOn; } - Real64 CpWater = Fluid::GetSpecificHeatGlycol(state, + Real64 CpWater = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->WaterInletNodeNum).Temp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -1885,7 +1885,7 @@ void FluidCoolerspecs::calcTwoSpeed(EnergyPlusData &state) this->FanPower = FanPowerHigh; } } - Real64 CpWater = Fluid::GetSpecificHeatGlycol(state, + Real64 CpWater = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->WaterInletNodeNum).Temp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -1928,7 +1928,7 @@ void CalcFluidCoolerOutlet( state.dataFluidCoolers->SimpleFluidCooler(FluidCoolerNum).AirHumRat); Real64 AirMassFlowRate = AirFlowRate * AirDensity; Real64 CpAir = Psychrometrics::PsyCpAirFnW(state.dataFluidCoolers->SimpleFluidCooler(FluidCoolerNum).AirHumRat); - Real64 CpWater = Fluid::GetSpecificHeatGlycol( + Real64 CpWater = FluidProperties::GetSpecificHeatGlycol( state, state.dataPlnt->PlantLoop(state.dataFluidCoolers->SimpleFluidCooler(FluidCoolerNum).plantLoc.loopNum).FluidName, _InletWaterTemp, diff --git a/src/EnergyPlus/FluidProperties.cc b/src/EnergyPlus/FluidProperties.cc index 3d2b82acb64..fceaee26c02 100644 --- a/src/EnergyPlus/FluidProperties.cc +++ b/src/EnergyPlus/FluidProperties.cc @@ -64,7 +64,7 @@ namespace EnergyPlus { -namespace Fluid { +namespace FluidProperties { // MODULE INFORMATION: // AUTHOR Mike Turner @@ -686,10 +686,10 @@ namespace Fluid { ++FluidNum; FluidNames(FluidNum).Name = Alphas(1); if (Util::SameString(Alphas(2), Refrig)) { - ++state.dataFluid->NumOfRefrigerants; + ++state.dataFluidProperties->NumOfRefrigerants; FluidNames(FluidNum).IsGlycol = false; } else if (Util::SameString(Alphas(2), Glycol)) { - ++state.dataFluid->NumOfGlycols; + ++state.dataFluidProperties->NumOfGlycols; FluidNames(FluidNum).IsGlycol = true; } else { ShowSevereError(state, format("{}{}=\"{}\", invalid type", RoutineName, CurrentModuleObject, Alphas(1))); @@ -702,75 +702,78 @@ namespace Fluid { ShowFatalError(state, format("{} Previous errors in input cause program termination.", RoutineName)); } - if (state.dataFluid->NumOfRefrigerants + 1 > 0) { - state.dataFluid->RefrigData.allocate(state.dataFluid->NumOfRefrigerants + 1); - state.dataFluid->RefrigUsed.allocate(state.dataFluid->NumOfRefrigerants + 1); - state.dataFluid->RefrigUsed = false; - state.dataFluid->RefrigErrorTracking.allocate(state.dataFluid->NumOfRefrigerants + 1); + if (state.dataFluidProperties->NumOfRefrigerants + 1 > 0) { + state.dataFluidProperties->RefrigData.allocate(state.dataFluidProperties->NumOfRefrigerants + 1); + state.dataFluidProperties->RefrigUsed.allocate(state.dataFluidProperties->NumOfRefrigerants + 1); + state.dataFluidProperties->RefrigUsed = false; + state.dataFluidProperties->RefrigErrorTracking.allocate(state.dataFluidProperties->NumOfRefrigerants + 1); } - if (state.dataFluid->NumOfGlycols > 0) { - state.dataFluid->GlyRawData.allocate(state.dataFluid->NumOfGlycols); + if (state.dataFluidProperties->NumOfGlycols > 0) { + state.dataFluidProperties->GlyRawData.allocate(state.dataFluidProperties->NumOfGlycols); } // Take the fluid names and assign them to the appropriate derived type - state.dataFluid->NumOfRefrigerants = 1; - state.dataFluid->NumOfGlycols = 0; - state.dataFluid->RefrigData(1).Name = "STEAM"; - state.dataFluid->RefrigUsed(1) = true; - state.dataFluid->RefrigErrorTracking(1).Name = "STEAM"; + state.dataFluidProperties->NumOfRefrigerants = 1; + state.dataFluidProperties->NumOfGlycols = 0; + state.dataFluidProperties->RefrigData(1).Name = "STEAM"; // Steam is a refrigerant? In which universe? + state.dataFluidProperties->RefrigData(1).Num = 1; + state.dataFluidProperties->RefrigUsed(1) = true; + state.dataFluidProperties->RefrigErrorTracking(1).Name = "STEAM"; for (int Loop = 1; Loop <= FluidNum; ++Loop) { if (!FluidNames(Loop).IsGlycol) { - ++state.dataFluid->NumOfRefrigerants; - state.dataFluid->RefrigData(state.dataFluid->NumOfRefrigerants).Name = FluidNames(Loop).Name; - state.dataFluid->RefrigErrorTracking(state.dataFluid->NumOfRefrigerants).Name = FluidNames(Loop).Name; + ++state.dataFluidProperties->NumOfRefrigerants; + state.dataFluidProperties->RefrigData(state.dataFluidProperties->NumOfRefrigerants).Name = FluidNames(Loop).Name; + state.dataFluidProperties->RefrigData(state.dataFluidProperties->NumOfRefrigerants).Num = state.dataFluidProperties->NumOfRefrigerants; + state.dataFluidProperties->RefrigErrorTracking(state.dataFluidProperties->NumOfRefrigerants).Name = FluidNames(Loop).Name; } else if (FluidNames(Loop).IsGlycol) { - ++state.dataFluid->NumOfGlycols; - state.dataFluid->GlyRawData(state.dataFluid->NumOfGlycols).Name = FluidNames(Loop).Name; + ++state.dataFluidProperties->NumOfGlycols; + state.dataFluidProperties->GlyRawData(state.dataFluidProperties->NumOfGlycols).Name = FluidNames(Loop).Name; + state.dataFluidProperties->GlyRawData(state.dataFluidProperties->NumOfGlycols).Num = state.dataFluidProperties->NumOfGlycols; } } FluidNames.deallocate(); - state.dataFluid->RefrigData(1).NumPsPoints = DefaultNumSteamTemps; - state.dataFluid->RefrigData(1).PsTemps.allocate(DefaultNumSteamTemps); - state.dataFluid->RefrigData(1).PsValues.allocate(DefaultNumSteamTemps); - state.dataFluid->RefrigData(1).NumHPoints = DefaultNumSteamTemps; - state.dataFluid->RefrigData(1).HTemps.allocate(DefaultNumSteamTemps); - state.dataFluid->RefrigData(1).HfValues.allocate(DefaultNumSteamTemps); - state.dataFluid->RefrigData(1).HfgValues.allocate(DefaultNumSteamTemps); - state.dataFluid->RefrigData(1).NumCpPoints = DefaultNumSteamTemps; - state.dataFluid->RefrigData(1).CpTemps.allocate(DefaultNumSteamTemps); - state.dataFluid->RefrigData(1).CpfValues.allocate(DefaultNumSteamTemps); - state.dataFluid->RefrigData(1).CpfgValues.allocate(DefaultNumSteamTemps); - state.dataFluid->RefrigData(1).NumRhoPoints = DefaultNumSteamTemps; - state.dataFluid->RefrigData(1).RhoTemps.allocate(DefaultNumSteamTemps); - state.dataFluid->RefrigData(1).RhofValues.allocate(DefaultNumSteamTemps); - state.dataFluid->RefrigData(1).RhofgValues.allocate(DefaultNumSteamTemps); - - state.dataFluid->RefrigData(1).PsTemps = DefaultSteamTemps; - state.dataFluid->RefrigData(1).PsValues = DefaultSteamPressData; - state.dataFluid->RefrigData(1).HTemps = DefaultSteamTemps; - state.dataFluid->RefrigData(1).HfValues = DefaultSteamEnthalpyFluidData; - state.dataFluid->RefrigData(1).HfgValues = DefaultSteamEnthalpyGasFluidData; - state.dataFluid->RefrigData(1).CpTemps = DefaultSteamTemps; - state.dataFluid->RefrigData(1).CpfValues = DefaultSteamCpFluidData; - state.dataFluid->RefrigData(1).CpfgValues = DefaultSteamCpGasFluidData; - state.dataFluid->RefrigData(1).RhoTemps = DefaultSteamTemps; - state.dataFluid->RefrigData(1).RhofValues = DefaultSteamDensityFluidData; - state.dataFluid->RefrigData(1).RhofgValues = DefaultSteamDensityGasFluidData; - - state.dataFluid->RefrigData(1).NumSuperTempPts = DefaultNumSteamSuperheatedTemps; - state.dataFluid->RefrigData(1).NumSuperPressPts = DefaultNumSteamSuperheatedPressure; - state.dataFluid->RefrigData(1).SHTemps.allocate(state.dataFluid->RefrigData(1).NumSuperTempPts); - state.dataFluid->RefrigData(1).SHPress.allocate(state.dataFluid->RefrigData(1).NumSuperPressPts); - state.dataFluid->RefrigData(1).HshValues.allocate(state.dataFluid->RefrigData(1).NumSuperPressPts, - state.dataFluid->RefrigData(1).NumSuperTempPts); - state.dataFluid->RefrigData(1).RhoshValues.allocate(state.dataFluid->RefrigData(1).NumSuperPressPts, - state.dataFluid->RefrigData(1).NumSuperTempPts); - state.dataFluid->RefrigData(1).SHTemps = DefaultSteamSuperheatedTemps; - state.dataFluid->RefrigData(1).SHPress = DefaultSteamSuperheatedPressData; - state.dataFluid->RefrigData(1).HshValues = DefaultSteamSuperheatedEnthalpyData; - state.dataFluid->RefrigData(1).RhoshValues = DefaultSteamSuperheatedDensityData; + state.dataFluidProperties->RefrigData(1).NumPsPoints = DefaultNumSteamTemps; + state.dataFluidProperties->RefrigData(1).PsTemps.allocate(DefaultNumSteamTemps); + state.dataFluidProperties->RefrigData(1).PsValues.allocate(DefaultNumSteamTemps); + state.dataFluidProperties->RefrigData(1).NumHPoints = DefaultNumSteamTemps; + state.dataFluidProperties->RefrigData(1).HTemps.allocate(DefaultNumSteamTemps); + state.dataFluidProperties->RefrigData(1).HfValues.allocate(DefaultNumSteamTemps); + state.dataFluidProperties->RefrigData(1).HfgValues.allocate(DefaultNumSteamTemps); + state.dataFluidProperties->RefrigData(1).NumCpPoints = DefaultNumSteamTemps; + state.dataFluidProperties->RefrigData(1).CpTemps.allocate(DefaultNumSteamTemps); + state.dataFluidProperties->RefrigData(1).CpfValues.allocate(DefaultNumSteamTemps); + state.dataFluidProperties->RefrigData(1).CpfgValues.allocate(DefaultNumSteamTemps); + state.dataFluidProperties->RefrigData(1).NumRhoPoints = DefaultNumSteamTemps; + state.dataFluidProperties->RefrigData(1).RhoTemps.allocate(DefaultNumSteamTemps); + state.dataFluidProperties->RefrigData(1).RhofValues.allocate(DefaultNumSteamTemps); + state.dataFluidProperties->RefrigData(1).RhofgValues.allocate(DefaultNumSteamTemps); + + state.dataFluidProperties->RefrigData(1).PsTemps = DefaultSteamTemps; + state.dataFluidProperties->RefrigData(1).PsValues = DefaultSteamPressData; + state.dataFluidProperties->RefrigData(1).HTemps = DefaultSteamTemps; + state.dataFluidProperties->RefrigData(1).HfValues = DefaultSteamEnthalpyFluidData; + state.dataFluidProperties->RefrigData(1).HfgValues = DefaultSteamEnthalpyGasFluidData; + state.dataFluidProperties->RefrigData(1).CpTemps = DefaultSteamTemps; + state.dataFluidProperties->RefrigData(1).CpfValues = DefaultSteamCpFluidData; + state.dataFluidProperties->RefrigData(1).CpfgValues = DefaultSteamCpGasFluidData; + state.dataFluidProperties->RefrigData(1).RhoTemps = DefaultSteamTemps; + state.dataFluidProperties->RefrigData(1).RhofValues = DefaultSteamDensityFluidData; + state.dataFluidProperties->RefrigData(1).RhofgValues = DefaultSteamDensityGasFluidData; + + state.dataFluidProperties->RefrigData(1).NumSuperTempPts = DefaultNumSteamSuperheatedTemps; + state.dataFluidProperties->RefrigData(1).NumSuperPressPts = DefaultNumSteamSuperheatedPressure; + state.dataFluidProperties->RefrigData(1).SHTemps.allocate(state.dataFluidProperties->RefrigData(1).NumSuperTempPts); + state.dataFluidProperties->RefrigData(1).SHPress.allocate(state.dataFluidProperties->RefrigData(1).NumSuperPressPts); + state.dataFluidProperties->RefrigData(1).HshValues.allocate(state.dataFluidProperties->RefrigData(1).NumSuperPressPts, + state.dataFluidProperties->RefrigData(1).NumSuperTempPts); + state.dataFluidProperties->RefrigData(1).RhoshValues.allocate(state.dataFluidProperties->RefrigData(1).NumSuperPressPts, + state.dataFluidProperties->RefrigData(1).NumSuperTempPts); + state.dataFluidProperties->RefrigData(1).SHTemps = DefaultSteamSuperheatedTemps; + state.dataFluidProperties->RefrigData(1).SHPress = DefaultSteamSuperheatedPressData; + state.dataFluidProperties->RefrigData(1).HshValues = DefaultSteamSuperheatedEnthalpyData; + state.dataFluidProperties->RefrigData(1).RhoshValues = DefaultSteamSuperheatedDensityData; // Read in all of the temperature arrays in the input file FluidTemps.allocate(NumOfFluidTempArrays); @@ -819,7 +822,7 @@ namespace Fluid { // Go through each refrigerant found in the fluid names statement and read in the data // Note that every valid fluid must have ALL of the necessary data or a fatal error will // be produced. - for (int Loop = 2; Loop <= state.dataFluid->NumOfRefrigerants; ++Loop) { + for (int Loop = 2; Loop <= state.dataFluidProperties->NumOfRefrigerants; ++Loop) { // For each property, cycle through all the valid input until the proper match is found. @@ -844,7 +847,7 @@ namespace Fluid { cAlphaFieldNames, cNumericFieldNames); - if ((Util::SameString(Alphas(1), state.dataFluid->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), Pressure)) && + if ((Util::SameString(Alphas(1), state.dataFluidProperties->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), Pressure)) && (Util::SameString(Alphas(3), GasFluid))) { for (int TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) { @@ -853,14 +856,14 @@ namespace Fluid { TempsName = FluidTemps(TempLoop).Name; // At this point, we have found the correct input line and found a match // for the temperature array. It's time to load up the local derived type. - state.dataFluid->RefrigData(Loop).NumPsPoints = FluidTemps(TempLoop).NumOfTemps; - state.dataFluid->RefrigData(Loop).PsTemps.allocate(state.dataFluid->RefrigData(Loop).NumPsPoints); - state.dataFluid->RefrigData(Loop).PsValues.allocate(state.dataFluid->RefrigData(Loop).NumPsPoints); + state.dataFluidProperties->RefrigData(Loop).NumPsPoints = FluidTemps(TempLoop).NumOfTemps; + state.dataFluidProperties->RefrigData(Loop).PsTemps.allocate(state.dataFluidProperties->RefrigData(Loop).NumPsPoints); + state.dataFluidProperties->RefrigData(Loop).PsValues.allocate(state.dataFluidProperties->RefrigData(Loop).NumPsPoints); // Make sure the number of points in the two arrays (temps and values) are the same - if (NumNumbers != state.dataFluid->RefrigData(Loop).NumPsPoints) { + if (NumNumbers != state.dataFluidProperties->RefrigData(Loop).NumPsPoints) { ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); + state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->RefrigData(Loop).Name)); ShowContinueError(state, format("Temperature Name={}, Temperature array and fluid saturation pressure array must have the " "same number of points", @@ -868,15 +871,15 @@ namespace Fluid { ShowContinueError(state, format("Temperature # points={} whereas {} # pressure points={}", NumNumbers, - state.dataFluid->RefrigData(Loop).Name, - state.dataFluid->RefrigData(Loop).NumPsPoints)); + state.dataFluidProperties->RefrigData(Loop).Name, + state.dataFluidProperties->RefrigData(Loop).NumPsPoints)); ErrorsFound = true; break; // the TempLoop DO Loop } // Same number of points so assign the values - state.dataFluid->RefrigData(Loop).PsTemps = FluidTemps(TempLoop).Temps; - state.dataFluid->RefrigData(Loop).PsValues = Numbers({1, NumNumbers}); + state.dataFluidProperties->RefrigData(Loop).PsTemps = FluidTemps(TempLoop).Temps; + state.dataFluidProperties->RefrigData(Loop).PsValues = Numbers({1, NumNumbers}); break; // the TempLoop DO loop } @@ -884,7 +887,7 @@ namespace Fluid { // If it made it all the way to the last temperature array and didn't find a match, then no match was found if (TempLoop == NumOfFluidTempArrays) { ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->RefrigData(Loop).Name)); ShowContinueError(state, "Found saturated fluid gas/fluid pressure input but no matching temperature array"); ShowContinueError(state, format("Entered Temperature Name={}", TempsName)); ErrorsFound = true; @@ -898,7 +901,7 @@ namespace Fluid { // If it made it all the way to the last input occurrence and didn't find a match, // then no sat press data found if (InData == NumOfSatFluidPropArrays) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->RefrigData(Loop).Name)); ShowContinueError(state, format(R"(No Gas/Fluid Saturation Pressure found. Need properties with {}="Pressure" and {}="FluidGas".)", cAlphaFieldNames(2), @@ -926,7 +929,7 @@ namespace Fluid { cAlphaFieldNames, cNumericFieldNames); - if ((Util::SameString(Alphas(1), state.dataFluid->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), Enthalpy)) && + if ((Util::SameString(Alphas(1), state.dataFluidProperties->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), Enthalpy)) && (Util::SameString(Alphas(3), Fluid))) { for (int TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) { @@ -935,14 +938,14 @@ namespace Fluid { TempsName = FluidTemps(TempLoop).Name; // At this point, we have found the correct input line and found a match // for the temperature array. It's time to load up the local derived type. - state.dataFluid->RefrigData(Loop).NumHPoints = FluidTemps(TempLoop).NumOfTemps; - state.dataFluid->RefrigData(Loop).HTemps.allocate(state.dataFluid->RefrigData(Loop).NumHPoints); - state.dataFluid->RefrigData(Loop).HfValues.allocate(state.dataFluid->RefrigData(Loop).NumHPoints); + state.dataFluidProperties->RefrigData(Loop).NumHPoints = FluidTemps(TempLoop).NumOfTemps; + state.dataFluidProperties->RefrigData(Loop).HTemps.allocate(state.dataFluidProperties->RefrigData(Loop).NumHPoints); + state.dataFluidProperties->RefrigData(Loop).HfValues.allocate(state.dataFluidProperties->RefrigData(Loop).NumHPoints); // Make sure the number of points in the two arrays (temps and values) are the same - if (NumNumbers != state.dataFluid->RefrigData(Loop).NumHPoints) { + if (NumNumbers != state.dataFluidProperties->RefrigData(Loop).NumHPoints) { ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); + state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->RefrigData(Loop).Name)); ShowSevereError(state, format("Temperature Name={}, Temperature array and saturated fluid enthalpy array must have the same " "number of points", @@ -950,15 +953,15 @@ namespace Fluid { ShowContinueError(state, format("Temperature # points={} whereas {} # points={}", NumNumbers, - state.dataFluid->RefrigData(Loop).Name, - state.dataFluid->RefrigData(Loop).NumHPoints)); + state.dataFluidProperties->RefrigData(Loop).Name, + state.dataFluidProperties->RefrigData(Loop).NumHPoints)); ErrorsFound = true; break; // the TempLoop DO Loop } // Same number of points so assign the values - state.dataFluid->RefrigData(Loop).HTemps = FluidTemps(TempLoop).Temps; - state.dataFluid->RefrigData(Loop).HfValues = Numbers({1, NumNumbers}); + state.dataFluidProperties->RefrigData(Loop).HTemps = FluidTemps(TempLoop).Temps; + state.dataFluidProperties->RefrigData(Loop).HfValues = Numbers({1, NumNumbers}); break; // the TempLoop DO loop } @@ -966,7 +969,7 @@ namespace Fluid { // If it made it all the way to the last temperature array and didn't find a match, then no match was found if (TempLoop == NumOfFluidTempArrays) { ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->RefrigData(Loop).Name)); ShowContinueError(state, "Found saturated fluid enthalpy input but no matching temperature array"); ShowContinueError(state, format("Entered Temperature Name={}", TempsName)); ErrorsFound = true; @@ -979,7 +982,7 @@ namespace Fluid { // If it made it all the way to the last input occurrence and didn't find a match, then no sat fluid enthalpy data found if (InData == NumOfSatFluidPropArrays) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->RefrigData(Loop).Name)); ShowContinueError(state, format(R"(No Saturated Fluid Enthalpy found. Need properties to be entered with {}="Enthalpy" and {}="Fluid".)", cAlphaFieldNames(2), @@ -1006,7 +1009,7 @@ namespace Fluid { cAlphaFieldNames, cNumericFieldNames); - if ((Util::SameString(Alphas(1), state.dataFluid->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), Enthalpy)) && + if ((Util::SameString(Alphas(1), state.dataFluidProperties->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), Enthalpy)) && (Util::SameString(Alphas(3), GasFluid))) { for (int TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) { @@ -1014,7 +1017,7 @@ namespace Fluid { if (Util::SameString(Alphas(4), FluidTemps(TempLoop).Name)) { if (!Util::SameString(FluidTemps(TempLoop).Name, TempsName)) { ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); + state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->RefrigData(Loop).Name)); ShowContinueError(state, "Temperatures for enthalpy fluid and gas/fluid points are not the same"); ShowContinueError(state, format("Name={} => {} /= {}", Alphas(4), FluidTemps(TempLoop).Name, TempsName)); ErrorsFound = true; @@ -1022,12 +1025,12 @@ namespace Fluid { } // At this point, we have found the correct input line and found a match // for the temperature array. It's time to load up the local derived type. - state.dataFluid->RefrigData(Loop).HfgValues.allocate(state.dataFluid->RefrigData(Loop).NumHPoints); + state.dataFluidProperties->RefrigData(Loop).HfgValues.allocate(state.dataFluidProperties->RefrigData(Loop).NumHPoints); // Make sure the number of points in the two arrays (temps and values) are the same - if (NumNumbers != state.dataFluid->RefrigData(Loop).NumHPoints) { + if (NumNumbers != state.dataFluidProperties->RefrigData(Loop).NumHPoints) { ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); + state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->RefrigData(Loop).Name)); ShowContinueError(state, format("Temperature Name={}, Temperature array and saturated gas/fluid enthalpy array must have " "the same number of points", @@ -1035,14 +1038,14 @@ namespace Fluid { ShowContinueError(state, format("Temperature # points={} whereas {} # points={}", NumNumbers, - state.dataFluid->RefrigData(Loop).Name, - state.dataFluid->RefrigData(Loop).NumHPoints)); + state.dataFluidProperties->RefrigData(Loop).Name, + state.dataFluidProperties->RefrigData(Loop).NumHPoints)); ErrorsFound = true; break; // the TempLoop DO Loop } // Same number of points so assign the values - state.dataFluid->RefrigData(Loop).HfgValues = Numbers({1, NumNumbers}); + state.dataFluidProperties->RefrigData(Loop).HfgValues = Numbers({1, NumNumbers}); break; // the TempLoop DO loop } @@ -1050,7 +1053,7 @@ namespace Fluid { // If it made it all the way to the last temperature array and didn't find a match, then no match was found if (TempLoop == NumOfFluidTempArrays) { ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->RefrigData(Loop).Name)); ShowContinueError(state, "Found saturated gas/fluid enthalpy input but no matching temperature array"); ShowContinueError(state, format("Entered Temperature Name={}", TempsName)); ErrorsFound = true; @@ -1063,7 +1066,7 @@ namespace Fluid { // If it made it all the way to the last input occurrence and didn't find a match, then no sat f/g enthalpy data found if (InData == NumOfSatFluidPropArrays) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->RefrigData(Loop).Name)); ShowContinueError( state, format(R"(No Saturated Gas/Fluid Enthalpy found. Need properties to be entered with {}="Enthalpy" and {}="FluidGas".)", @@ -1092,7 +1095,7 @@ namespace Fluid { cAlphaFieldNames, cNumericFieldNames); - if ((Util::SameString(Alphas(1), state.dataFluid->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), SpecificHeat)) && + if ((Util::SameString(Alphas(1), state.dataFluidProperties->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), SpecificHeat)) && (Util::SameString(Alphas(3), Fluid))) { for (int TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) { @@ -1101,14 +1104,14 @@ namespace Fluid { TempsName = FluidTemps(TempLoop).Name; // At this point, we have found the correct input line and found a match // for the temperature array. It's time to load up the local derived type. - state.dataFluid->RefrigData(Loop).NumCpPoints = FluidTemps(TempLoop).NumOfTemps; - state.dataFluid->RefrigData(Loop).CpTemps.allocate(state.dataFluid->RefrigData(Loop).NumCpPoints); - state.dataFluid->RefrigData(Loop).CpfValues.allocate(state.dataFluid->RefrigData(Loop).NumCpPoints); + state.dataFluidProperties->RefrigData(Loop).NumCpPoints = FluidTemps(TempLoop).NumOfTemps; + state.dataFluidProperties->RefrigData(Loop).CpTemps.allocate(state.dataFluidProperties->RefrigData(Loop).NumCpPoints); + state.dataFluidProperties->RefrigData(Loop).CpfValues.allocate(state.dataFluidProperties->RefrigData(Loop).NumCpPoints); // Make sure the number of points in the two arrays (temps and values) are the same - if (NumNumbers != state.dataFluid->RefrigData(Loop).NumCpPoints) { + if (NumNumbers != state.dataFluidProperties->RefrigData(Loop).NumCpPoints) { ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); + state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->RefrigData(Loop).Name)); ShowSevereError( state, format("Temperature Name={}, Temperature array and saturated fluid Cp array must have the same number of points", @@ -1116,15 +1119,15 @@ namespace Fluid { ShowContinueError(state, format("Temperature # points={} whereas {} # Cp points={}", NumNumbers, - state.dataFluid->RefrigData(Loop).Name, - state.dataFluid->RefrigData(Loop).NumCpPoints)); + state.dataFluidProperties->RefrigData(Loop).Name, + state.dataFluidProperties->RefrigData(Loop).NumCpPoints)); ErrorsFound = true; break; // the TempLoop DO Loop } // Same number of points so assign the values - state.dataFluid->RefrigData(Loop).CpTemps = FluidTemps(TempLoop).Temps; - state.dataFluid->RefrigData(Loop).CpfValues = Numbers({1, NumNumbers}); + state.dataFluidProperties->RefrigData(Loop).CpTemps = FluidTemps(TempLoop).Temps; + state.dataFluidProperties->RefrigData(Loop).CpfValues = Numbers({1, NumNumbers}); break; // the TempLoop DO loop } @@ -1132,7 +1135,7 @@ namespace Fluid { // If it made it all the way to the last temperature array and didn't find a match, then no match was found if (TempLoop == NumOfFluidTempArrays) { ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->RefrigData(Loop).Name)); ShowContinueError(state, "Found saturated fluid specific heat (Cp) input but no matching temperature array"); ShowContinueError(state, format("Entered Temperature Name={}", TempsName)); ErrorsFound = true; @@ -1145,7 +1148,7 @@ namespace Fluid { // If it made it all the way to the last input occurrence and didn't find a match, then no sat fluid Cp data found if (InData == NumOfSatFluidPropArrays) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->RefrigData(Loop).Name)); ShowContinueError( state, format(R"(No Saturated Fluid Specific Heat found. Need properties to be entered with {}="SpecificHeat" and {}="Fluid".)", @@ -1173,7 +1176,7 @@ namespace Fluid { cAlphaFieldNames, cNumericFieldNames); - if ((Util::SameString(Alphas(1), state.dataFluid->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), SpecificHeat)) && + if ((Util::SameString(Alphas(1), state.dataFluidProperties->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), SpecificHeat)) && (Util::SameString(Alphas(3), GasFluid))) { for (int TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) { @@ -1181,7 +1184,7 @@ namespace Fluid { if (Util::SameString(Alphas(4), FluidTemps(TempLoop).Name)) { if (!Util::SameString(FluidTemps(TempLoop).Name, TempsName)) { ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); + state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->RefrigData(Loop).Name)); ShowContinueError(state, "Temperatures for specific heat fluid and gas/fluid points are not the same"); ShowContinueError(state, format("Name={} => {} /= {}", Alphas(4), FluidTemps(TempLoop).Name, TempsName)); ErrorsFound = true; @@ -1189,12 +1192,12 @@ namespace Fluid { } // At this point, we have found the correct input line and found a match // for the temperature array. It's time to load up the local derived type. - state.dataFluid->RefrigData(Loop).CpfgValues.allocate(state.dataFluid->RefrigData(Loop).NumCpPoints); + state.dataFluidProperties->RefrigData(Loop).CpfgValues.allocate(state.dataFluidProperties->RefrigData(Loop).NumCpPoints); // Make sure the number of points in the two arrays (temps and values) are the same - if (NumNumbers != state.dataFluid->RefrigData(Loop).NumCpPoints) { + if (NumNumbers != state.dataFluidProperties->RefrigData(Loop).NumCpPoints) { ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); + state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->RefrigData(Loop).Name)); ShowContinueError( state, format( @@ -1203,14 +1206,14 @@ namespace Fluid { ShowContinueError(state, format("Temperature # points={} whereas {} # Cp points={}", NumNumbers, - state.dataFluid->RefrigData(Loop).Name, - state.dataFluid->RefrigData(Loop).NumCpPoints)); + state.dataFluidProperties->RefrigData(Loop).Name, + state.dataFluidProperties->RefrigData(Loop).NumCpPoints)); ErrorsFound = true; break; // the TempLoop DO Loop } // Same number of points so assign the values - state.dataFluid->RefrigData(Loop).CpfgValues = Numbers({1, NumNumbers}); + state.dataFluidProperties->RefrigData(Loop).CpfgValues = Numbers({1, NumNumbers}); break; // the TempLoop DO loop } @@ -1218,7 +1221,7 @@ namespace Fluid { // If it made it all the way to the last temperature array and didn't find a match, then no match was found if (TempLoop == NumOfFluidTempArrays) { ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->RefrigData(Loop).Name)); ShowContinueError(state, "Found saturated gas/fluid specific heat (Cp) input but no matching temperature array"); ShowContinueError(state, format("Entered Temperature Name={}", TempsName)); ErrorsFound = true; @@ -1231,7 +1234,7 @@ namespace Fluid { // If it made it all the way to the last input occurrence and didn't find a match, then no sat f/g Cp data found if (InData == NumOfSatFluidPropArrays) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->RefrigData(Loop).Name)); ShowContinueError( state, format( @@ -1261,7 +1264,7 @@ namespace Fluid { cAlphaFieldNames, cNumericFieldNames); - if ((Util::SameString(Alphas(1), state.dataFluid->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), Density)) && + if ((Util::SameString(Alphas(1), state.dataFluidProperties->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), Density)) && (Util::SameString(Alphas(3), Fluid))) { for (int TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) { @@ -1270,14 +1273,14 @@ namespace Fluid { TempsName = FluidTemps(TempLoop).Name; // At this point, we have found the correct input line and found a match // for the temperature array. It's time to load up the local derived type. - state.dataFluid->RefrigData(Loop).NumRhoPoints = FluidTemps(TempLoop).NumOfTemps; - state.dataFluid->RefrigData(Loop).RhoTemps.allocate(state.dataFluid->RefrigData(Loop).NumRhoPoints); - state.dataFluid->RefrigData(Loop).RhofValues.allocate(state.dataFluid->RefrigData(Loop).NumRhoPoints); + state.dataFluidProperties->RefrigData(Loop).NumRhoPoints = FluidTemps(TempLoop).NumOfTemps; + state.dataFluidProperties->RefrigData(Loop).RhoTemps.allocate(state.dataFluidProperties->RefrigData(Loop).NumRhoPoints); + state.dataFluidProperties->RefrigData(Loop).RhofValues.allocate(state.dataFluidProperties->RefrigData(Loop).NumRhoPoints); // Make sure the number of points in the two arrays (temps and values) are the same - if (NumNumbers != state.dataFluid->RefrigData(Loop).NumRhoPoints) { + if (NumNumbers != state.dataFluidProperties->RefrigData(Loop).NumRhoPoints) { ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); + state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->RefrigData(Loop).Name)); ShowContinueError(state, format("Temperature Name={}, Temperature array and saturated fluid density array must have the " "same number of points", @@ -1285,15 +1288,15 @@ namespace Fluid { ShowContinueError(state, format("Temperature # points={} whereas {} # Density points={}", NumNumbers, - state.dataFluid->RefrigData(Loop).Name, - state.dataFluid->RefrigData(Loop).NumRhoPoints)); + state.dataFluidProperties->RefrigData(Loop).Name, + state.dataFluidProperties->RefrigData(Loop).NumRhoPoints)); ErrorsFound = true; break; // the TempLoop DO Loop } // Same number of points so assign the values - state.dataFluid->RefrigData(Loop).RhoTemps = FluidTemps(TempLoop).Temps; - state.dataFluid->RefrigData(Loop).RhofValues = Numbers({1, NumNumbers}); + state.dataFluidProperties->RefrigData(Loop).RhoTemps = FluidTemps(TempLoop).Temps; + state.dataFluidProperties->RefrigData(Loop).RhofValues = Numbers({1, NumNumbers}); break; // the TempLoop DO loop } @@ -1301,7 +1304,7 @@ namespace Fluid { // If it made it all the way to the last temperature array and didn't find a match, then no match was found if (TempLoop == NumOfFluidTempArrays) { ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->RefrigData(Loop).Name)); ShowContinueError(state, "Found saturated fluid density input but no matching temperature array"); ShowContinueError(state, format("Entered Temperature Name={}", TempsName)); ErrorsFound = true; @@ -1314,7 +1317,7 @@ namespace Fluid { // If it made it all the way to the last input occurrence and didn't find a match, then no sat fluid density data found if (InData == NumOfSatFluidPropArrays) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->RefrigData(Loop).Name)); ShowContinueError(state, format(R"(No Saturated Fluid Density found. Need properties to be entered with {}="Density" and {}="Fluid".)", cAlphaFieldNames(2), @@ -1341,7 +1344,7 @@ namespace Fluid { cAlphaFieldNames, cNumericFieldNames); - if ((Util::SameString(Alphas(1), state.dataFluid->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), Density)) && + if ((Util::SameString(Alphas(1), state.dataFluidProperties->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), Density)) && (Util::SameString(Alphas(3), GasFluid))) { for (int TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) { @@ -1349,7 +1352,7 @@ namespace Fluid { if (Util::SameString(Alphas(4), FluidTemps(TempLoop).Name)) { if (!Util::SameString(FluidTemps(TempLoop).Name, TempsName)) { ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); + state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->RefrigData(Loop).Name)); ShowContinueError(state, "Temperatures for density fluid and gas/fluid points are not the same"); ShowContinueError(state, format("Name={} => {} /= {}", Alphas(4), FluidTemps(TempLoop).Name, TempsName)); ErrorsFound = true; @@ -1357,12 +1360,12 @@ namespace Fluid { } // At this point, we have found the correct input line and found a match // for the temperature array. It's time to load up the local derived type. - state.dataFluid->RefrigData(Loop).RhofgValues.allocate(state.dataFluid->RefrigData(Loop).NumRhoPoints); + state.dataFluidProperties->RefrigData(Loop).RhofgValues.allocate(state.dataFluidProperties->RefrigData(Loop).NumRhoPoints); // Make sure the number of points in the two arrays (temps and values) are the same - if (NumNumbers != state.dataFluid->RefrigData(Loop).NumRhoPoints) { + if (NumNumbers != state.dataFluidProperties->RefrigData(Loop).NumRhoPoints) { ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); + state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->RefrigData(Loop).Name)); ShowContinueError(state, format("Temperature Name={}, Temperature array and saturated gas/fluid density array must have the " "same number of points", @@ -1370,14 +1373,14 @@ namespace Fluid { ShowContinueError(state, format("Temperature # points={} whereas {} # density points={}", NumNumbers, - state.dataFluid->RefrigData(Loop).Name, - state.dataFluid->RefrigData(Loop).NumRhoPoints)); + state.dataFluidProperties->RefrigData(Loop).Name, + state.dataFluidProperties->RefrigData(Loop).NumRhoPoints)); ErrorsFound = true; break; // the TempLoop DO Loop } // Same number of points so assign the values - state.dataFluid->RefrigData(Loop).RhofgValues = Numbers({1, NumNumbers}); + state.dataFluidProperties->RefrigData(Loop).RhofgValues = Numbers({1, NumNumbers}); break; // the TempLoop DO loop } @@ -1385,7 +1388,7 @@ namespace Fluid { // If it made it all the way to the last temperature array and didn't find a match, then no match was found if (TempLoop == NumOfFluidTempArrays) { ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->RefrigData(Loop).Name)); ShowContinueError(state, "Found saturated gas/fluid density input but no matching temperature array"); ShowContinueError(state, format("Entered Temperature Name={}", TempsName)); ErrorsFound = true; @@ -1398,7 +1401,7 @@ namespace Fluid { // If it made it all the way to the last input occurrence and didn't find a match, then no sat f/g density data found if (InData == NumOfSatFluidPropArrays) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->RefrigData(Loop).Name)); ShowSevereError( state, format(R"(No Saturated Gas/Fluid Density found. Need properties to be entered with {}="Density" and {}="FluidGas".)", @@ -1454,7 +1457,7 @@ namespace Fluid { !Util::SameString(Alphas(2), Density)) { if (iTemp == 0) { ShowWarningError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->RefrigData(Loop).Name)); ShowContinueError( state, format(R"({}="{}", but {}="{}" is not valid.)", cAlphaFieldNames(3), Fluid, cAlphaFieldNames(2), Alphas(2))); ShowContinueError(state, format(R"(Valid choices are "{}", "{}", "{}".)", Enthalpy, SpecificHeat, Density)); @@ -1469,7 +1472,7 @@ namespace Fluid { !Util::SameString(Alphas(2), SpecificHeat) && !Util::SameString(Alphas(2), Density)) { if (iTemp == 0) { ShowWarningError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->RefrigData(Loop).Name)); ShowContinueError( state, format(R"({}="{}", but {}="{}" is not valid.)", cAlphaFieldNames(3), Fluid, cAlphaFieldNames(2), Alphas(2))); ShowContinueError(state, @@ -1481,7 +1484,7 @@ namespace Fluid { } else { if (iTemp == 0) { ShowWarningError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->RefrigData(Loop).Name)); ShowContinueError(state, format("{}=\"{}\" is not valid.", cAlphaFieldNames(3), Alphas(3))); ShowContinueError(state, format(R"(Valid choices are "{}", "{}".)", Fluid, GasFluid)); ShowContinueError(state, @@ -1518,7 +1521,7 @@ namespace Fluid { cAlphaFieldNames, cNumericFieldNames); - if ((Util::SameString(Alphas(1), state.dataFluid->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), Enthalpy))) { + if ((Util::SameString(Alphas(1), state.dataFluidProperties->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), Enthalpy))) { ++NumOfPressPts; if (FirstSHMatch) { TempsName = Alphas(3); @@ -1526,7 +1529,7 @@ namespace Fluid { } else { if (!Util::SameString(TempsName, Alphas(3))) { ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->RefrigData(Loop).Name)); ShowContinueError(state, "All superheated data for the same property must use the same temperature list"); ShowContinueError(state, format("Expected name={}, Entered name={}", TempsName, Alphas(3))); ErrorsFound = true; @@ -1535,7 +1538,7 @@ namespace Fluid { } } if (NumOfPressPts == 0) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->RefrigData(Loop).Name)); ShowContinueError(state, "No pressure data found for superheated enthalpy"); ErrorsFound = true; } @@ -1544,13 +1547,13 @@ namespace Fluid { // First, allocate the temperature array and transfer the data from the FluidTemp array for (int TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) { if (Util::SameString(TempsName, FluidTemps(TempLoop).Name)) { - state.dataFluid->RefrigData(Loop).NumSuperTempPts = FluidTemps(TempLoop).NumOfTemps; - state.dataFluid->RefrigData(Loop).SHTemps.allocate(state.dataFluid->RefrigData(Loop).NumSuperTempPts); - state.dataFluid->RefrigData(Loop).SHTemps = FluidTemps(TempLoop).Temps; + state.dataFluidProperties->RefrigData(Loop).NumSuperTempPts = FluidTemps(TempLoop).NumOfTemps; + state.dataFluidProperties->RefrigData(Loop).SHTemps.allocate(state.dataFluidProperties->RefrigData(Loop).NumSuperTempPts); + state.dataFluidProperties->RefrigData(Loop).SHTemps = FluidTemps(TempLoop).Temps; break; // the TempLoop DO loop } if (TempLoop == NumOfFluidTempArrays) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->RefrigData(Loop).Name)); ShowContinueError(state, "No match for temperature array name found with superheated enthalpy data"); ShowContinueError(state, format("Entered Temperature Name={}", TempsName)); ErrorsFound = true; @@ -1558,10 +1561,10 @@ namespace Fluid { } // Next, allocate the pressure related arrays - state.dataFluid->RefrigData(Loop).NumSuperPressPts = NumOfPressPts; - state.dataFluid->RefrigData(Loop).SHPress.allocate(state.dataFluid->RefrigData(Loop).NumSuperPressPts); - state.dataFluid->RefrigData(Loop).HshValues.allocate(state.dataFluid->RefrigData(Loop).NumSuperPressPts, - state.dataFluid->RefrigData(Loop).NumSuperTempPts); + state.dataFluidProperties->RefrigData(Loop).NumSuperPressPts = NumOfPressPts; + state.dataFluidProperties->RefrigData(Loop).SHPress.allocate(state.dataFluidProperties->RefrigData(Loop).NumSuperPressPts); + state.dataFluidProperties->RefrigData(Loop).HshValues.allocate(state.dataFluidProperties->RefrigData(Loop).NumSuperPressPts, + state.dataFluidProperties->RefrigData(Loop).NumSuperTempPts); // Finally, get the pressure and enthalpy values from the user input CurrentModuleObject = "FluidProperties:Superheated"; @@ -1581,10 +1584,10 @@ namespace Fluid { cAlphaFieldNames, cNumericFieldNames); - if ((Util::SameString(Alphas(1), state.dataFluid->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), Enthalpy))) { + if ((Util::SameString(Alphas(1), state.dataFluidProperties->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), Enthalpy))) { ++NumOfPressPts; if (Numbers(1) <= 0.0) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->RefrigData(Loop).Name)); ShowContinueError(state, format("Negative pressures not allowed in fluid property input data, Value =[{:.3R}].", Numbers(1))); ErrorsFound = true; } @@ -1622,27 +1625,27 @@ namespace Fluid { lAlphaFieldBlanks, cAlphaFieldNames, cNumericFieldNames); - state.dataFluid->RefrigData(Loop).SHPress(InData) = Numbers(1); + state.dataFluidProperties->RefrigData(Loop).SHPress(InData) = Numbers(1); // a little error trapping if (InData > 1) { - if (state.dataFluid->RefrigData(Loop).SHPress(InData) <= state.dataFluid->RefrigData(Loop).SHPress(InData - 1)) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); + if (state.dataFluidProperties->RefrigData(Loop).SHPress(InData) <= state.dataFluidProperties->RefrigData(Loop).SHPress(InData - 1)) { + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->RefrigData(Loop).Name)); ShowContinueError(state, "Pressures must be entered in ascending order for fluid property data"); ShowContinueError(state, format("First Occurrence at Pressure({}) {{{:.3R}}} >= Pressure({}) {{{:.3R}}}", InData - 1, - state.dataFluid->RefrigData(Loop).SHPress(InData - 1), + state.dataFluidProperties->RefrigData(Loop).SHPress(InData - 1), InData, - state.dataFluid->RefrigData(Loop).SHPress(InData))); + state.dataFluidProperties->RefrigData(Loop).SHPress(InData))); ErrorsFound = true; break; } } - if ((NumNumbers - 1) == state.dataFluid->RefrigData(Loop).NumSuperTempPts) { - state.dataFluid->RefrigData(Loop).HshValues(InData, {1, state.dataFluid->RefrigData(Loop).NumSuperTempPts}) = + if ((NumNumbers - 1) == state.dataFluidProperties->RefrigData(Loop).NumSuperTempPts) { + state.dataFluidProperties->RefrigData(Loop).HshValues(InData, {1, state.dataFluidProperties->RefrigData(Loop).NumSuperTempPts}) = Numbers({2, NumNumbers}); } else { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->RefrigData(Loop).Name)); ShowContinueError(state, "Number of superheated enthalpy data points not equal to number of temperature points"); ErrorsFound = true; } @@ -1654,8 +1657,8 @@ namespace Fluid { // First find the number of pressure value syntax lines have been entered and // make sure that all of the pressure input is linked to the same temperature list // Then allocate the arrays and read the data into the proper place - state.dataFluid->RefrigData(Loop).RhoshValues.allocate(state.dataFluid->RefrigData(Loop).NumSuperPressPts, - state.dataFluid->RefrigData(Loop).NumSuperTempPts); + state.dataFluidProperties->RefrigData(Loop).RhoshValues.allocate(state.dataFluidProperties->RefrigData(Loop).NumSuperPressPts, + state.dataFluidProperties->RefrigData(Loop).NumSuperTempPts); CurrentModuleObject = "FluidProperties:Superheated"; NumOfPressPts = 0; PressurePtr.allocate(NumOfSHFluidPropArrays); @@ -1672,10 +1675,10 @@ namespace Fluid { lAlphaFieldBlanks, cAlphaFieldNames, cNumericFieldNames); - if ((Util::SameString(Alphas(1), state.dataFluid->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), Density))) { + if ((Util::SameString(Alphas(1), state.dataFluidProperties->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), Density))) { ++NumOfPressPts; if (Numbers(1) <= 0.0) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->RefrigData(Loop).Name)); ShowContinueError(state, format("Negative pressures not allowed in fluid property input data, Value =[{:.3R}].", Numbers(1))); ErrorsFound = true; } @@ -1713,21 +1716,21 @@ namespace Fluid { lAlphaFieldBlanks, cAlphaFieldNames, cNumericFieldNames); - if (std::abs(Numbers(1) - state.dataFluid->RefrigData(Loop).SHPress(InData)) > PressToler) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); + if (std::abs(Numbers(1) - state.dataFluidProperties->RefrigData(Loop).SHPress(InData)) > PressToler) { + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->RefrigData(Loop).Name)); ShowContinueError(state, "All superheated data for the same refrigerant must use the same pressure data"); ErrorsFound = true; } if (!Util::SameString(TempsName, Alphas(3))) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->RefrigData(Loop).Name)); ShowContinueError(state, "All superheated data for the same property must use the same temperature list"); ErrorsFound = true; } - if ((NumNumbers - 1) == state.dataFluid->RefrigData(Loop).NumSuperTempPts) { - state.dataFluid->RefrigData(Loop).RhoshValues(InData, {1, state.dataFluid->RefrigData(Loop).NumSuperTempPts}) = + if ((NumNumbers - 1) == state.dataFluidProperties->RefrigData(Loop).NumSuperTempPts) { + state.dataFluidProperties->RefrigData(Loop).RhoshValues(InData, {1, state.dataFluidProperties->RefrigData(Loop).NumSuperTempPts}) = Numbers({2, NumNumbers}); } else { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->RefrigData(Loop).Name)); ShowContinueError(state, "Number of superheated density data points not equal to number of temperature points"); ErrorsFound = true; } @@ -1755,7 +1758,7 @@ namespace Fluid { if (!Util::SameString(Alphas(2), Enthalpy) && !Util::SameString(Alphas(2), Density)) { if (iTemp == 0) { ShowWarningError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->RefrigData(Loop).Name)); ShowContinueError(state, format("{}=\"{}\" is not valid.", cAlphaFieldNames(2), Alphas(2))); ShowContinueError(state, format(R"(Valid choices are "{}", "{}".)", Enthalpy, Density)); ShowContinueError(state, format("Pressure value of this item=[{:.2R}].", Numbers(1))); @@ -1770,12 +1773,12 @@ namespace Fluid { } if (NumOfPressPts == 0) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->RefrigData(Loop).Name)); ShowSevereError(state, "No pressure data found for superheated density"); ErrorsFound = true; } - if (NumOfPressPts != state.dataFluid->RefrigData(Loop).NumSuperPressPts) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->RefrigData(Loop).Name)); + if (NumOfPressPts != state.dataFluidProperties->RefrigData(Loop).NumSuperPressPts) { + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->RefrigData(Loop).Name)); ShowSevereError(state, "Number of pressure points for superheated data different for enthalpy and density"); ErrorsFound = true; } @@ -1787,7 +1790,7 @@ namespace Fluid { // Note that every valid fluid must have ALL of the necessary data or a fatal error will // be produced. CurrentModuleObject = "FluidProperties:Concentration"; - for (int Loop = 1; Loop <= state.dataFluid->NumOfGlycols; ++Loop) { + for (int Loop = 1; Loop <= state.dataFluidProperties->NumOfGlycols; ++Loop) { // Get: ***** SPECIFIC HEAT of GLYCOLS ***** // First find the number of concentration value syntax lines have been entered and @@ -1795,7 +1798,7 @@ namespace Fluid { TempsName = ""; FirstSHMatch = true; int NumOfConcPts = 0; - state.dataFluid->GlyRawData(Loop).CpDataPresent = false; + state.dataFluidProperties->GlyRawData(Loop).CpDataPresent = false; for (InData = 1; InData <= NumOfGlyFluidPropArrays; ++InData) { // check temperatures given for specific heat are consistant state.dataInputProcessing->inputProcessor->getObjectItem(state, CurrentModuleObject, @@ -1809,7 +1812,7 @@ namespace Fluid { lAlphaFieldBlanks, cAlphaFieldNames, cNumericFieldNames); - if ((Util::SameString(Alphas(1), state.dataFluid->GlyRawData(Loop).Name)) && (Util::SameString(Alphas(2), SpecificHeat))) { + if ((Util::SameString(Alphas(1), state.dataFluidProperties->GlyRawData(Loop).Name)) && (Util::SameString(Alphas(2), SpecificHeat))) { ++NumOfConcPts; if (FirstSHMatch) { TempsName = Alphas(3); @@ -1817,7 +1820,7 @@ namespace Fluid { } else { if (!Util::SameString(TempsName, Alphas(3))) { ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->GlyRawData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->GlyRawData(Loop).Name)); ShowContinueError(state, "All glycol specific heat data for the same glycol must use the same temperature list"); ShowContinueError(state, format("Expected name={}, Entered name={}", TempsName, Alphas(3))); ErrorsFound = true; @@ -1828,26 +1831,26 @@ namespace Fluid { if (NumOfConcPts > 0) { // Now allocate the arrays and read the data into the proper place // First, allocate the temperature array and transfer the data from the FluidTemp array - state.dataFluid->GlyRawData(Loop).CpDataPresent = true; + state.dataFluidProperties->GlyRawData(Loop).CpDataPresent = true; for (int TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) { if (Util::SameString(TempsName, FluidTemps(TempLoop).Name)) { - state.dataFluid->GlyRawData(Loop).NumCpTempPts = FluidTemps(TempLoop).NumOfTemps; - state.dataFluid->GlyRawData(Loop).CpTemps.allocate(state.dataFluid->GlyRawData(Loop).NumCpTempPts); - state.dataFluid->GlyRawData(Loop).CpTemps = FluidTemps(TempLoop).Temps; + state.dataFluidProperties->GlyRawData(Loop).NumCpTempPts = FluidTemps(TempLoop).NumOfTemps; + state.dataFluidProperties->GlyRawData(Loop).CpTemps.allocate(state.dataFluidProperties->GlyRawData(Loop).NumCpTempPts); + state.dataFluidProperties->GlyRawData(Loop).CpTemps = FluidTemps(TempLoop).Temps; break; // the TempLoop DO loop } if (TempLoop == NumOfFluidTempArrays) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->GlyRawData(Loop).Name)); + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->GlyRawData(Loop).Name)); ShowContinueError(state, "No match for temperature array name found with glycol data"); ErrorsFound = true; } } // Next, allocate the specific heat related arrays - state.dataFluid->GlyRawData(Loop).NumCpConcPts = NumOfConcPts; - state.dataFluid->GlyRawData(Loop).CpConcs.allocate(state.dataFluid->GlyRawData(Loop).NumCpConcPts); - state.dataFluid->GlyRawData(Loop).CpValues.allocate(state.dataFluid->GlyRawData(Loop).NumCpConcPts, - state.dataFluid->GlyRawData(Loop).NumCpTempPts); + state.dataFluidProperties->GlyRawData(Loop).NumCpConcPts = NumOfConcPts; + state.dataFluidProperties->GlyRawData(Loop).CpConcs.allocate(state.dataFluidProperties->GlyRawData(Loop).NumCpConcPts); + state.dataFluidProperties->GlyRawData(Loop).CpValues.allocate(state.dataFluidProperties->GlyRawData(Loop).NumCpConcPts, + state.dataFluidProperties->GlyRawData(Loop).NumCpTempPts); // Finally, get the specific heat and concentration values from the user input CurrentModuleObject = "FluidProperties:Concentration"; @@ -1865,32 +1868,32 @@ namespace Fluid { lAlphaFieldBlanks, cAlphaFieldNames, cNumericFieldNames); - if ((Util::SameString(Alphas(1), state.dataFluid->GlyRawData(Loop).Name)) && (Util::SameString(Alphas(2), SpecificHeat))) { + if ((Util::SameString(Alphas(1), state.dataFluidProperties->GlyRawData(Loop).Name)) && (Util::SameString(Alphas(2), SpecificHeat))) { ++NumOfConcPts; - state.dataFluid->GlyRawData(Loop).CpConcs(NumOfConcPts) = Numbers(1); + state.dataFluidProperties->GlyRawData(Loop).CpConcs(NumOfConcPts) = Numbers(1); // a little error trapping if (NumOfConcPts == 1) { - if (state.dataFluid->GlyRawData(Loop).CpConcs(NumOfConcPts) < 0.0) { + if (state.dataFluidProperties->GlyRawData(Loop).CpConcs(NumOfConcPts) < 0.0) { ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->GlyRawData(Loop).Name)); + state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->GlyRawData(Loop).Name)); ShowContinueError(state, "Negative concentrations not allowed in fluid property input data"); ErrorsFound = true; } } else { - if (state.dataFluid->GlyRawData(Loop).CpConcs(NumOfConcPts) <= - state.dataFluid->GlyRawData(Loop).CpConcs(NumOfConcPts - 1)) { + if (state.dataFluidProperties->GlyRawData(Loop).CpConcs(NumOfConcPts) <= + state.dataFluidProperties->GlyRawData(Loop).CpConcs(NumOfConcPts - 1)) { ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->GlyRawData(Loop).Name)); + state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->GlyRawData(Loop).Name)); ShowContinueError(state, "Concentrations must be entered in ascending order for fluid property data"); ErrorsFound = true; } } - if ((NumNumbers - 1) == state.dataFluid->GlyRawData(Loop).NumCpTempPts) { - state.dataFluid->GlyRawData(Loop).CpValues(NumOfConcPts, {1, state.dataFluid->GlyRawData(Loop).NumCpTempPts}) = + if ((NumNumbers - 1) == state.dataFluidProperties->GlyRawData(Loop).NumCpTempPts) { + state.dataFluidProperties->GlyRawData(Loop).CpValues(NumOfConcPts, {1, state.dataFluidProperties->GlyRawData(Loop).NumCpTempPts}) = Numbers({2, NumNumbers}); } else { ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->GlyRawData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->GlyRawData(Loop).Name)); ShowContinueError(state, "Number of specific heat data points not equal to number of temperature points"); ErrorsFound = true; } @@ -1903,7 +1906,7 @@ namespace Fluid { TempsName = ""; FirstSHMatch = true; NumOfConcPts = 0; - state.dataFluid->GlyRawData(Loop).RhoDataPresent = false; + state.dataFluidProperties->GlyRawData(Loop).RhoDataPresent = false; CurrentModuleObject = "FluidProperties:Concentration"; for (InData = 1; InData <= NumOfGlyFluidPropArrays; ++InData) { // check temperatures given for density are consistant state.dataInputProcessing->inputProcessor->getObjectItem(state, @@ -1918,7 +1921,7 @@ namespace Fluid { lAlphaFieldBlanks, cAlphaFieldNames, cNumericFieldNames); - if ((Util::SameString(Alphas(1), state.dataFluid->GlyRawData(Loop).Name)) && (Util::SameString(Alphas(2), Density))) { + if ((Util::SameString(Alphas(1), state.dataFluidProperties->GlyRawData(Loop).Name)) && (Util::SameString(Alphas(2), Density))) { ++NumOfConcPts; if (FirstSHMatch) { TempsName = Alphas(3); @@ -1926,7 +1929,7 @@ namespace Fluid { } else { if (!Util::SameString(TempsName, Alphas(3))) { ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->GlyRawData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->GlyRawData(Loop).Name)); ShowContinueError(state, "All glycol density data for the same glycol must use the same temperature list"); ShowContinueError(state, format("Expected name={}, Entered name={}", TempsName, Alphas(3))); ErrorsFound = true; @@ -1937,26 +1940,26 @@ namespace Fluid { if (NumOfConcPts > 0) { // Now allocate the arrays and read the data into the proper place // First, allocate the temperature array and transfer the data from the FluidTemp array - state.dataFluid->GlyRawData(Loop).RhoDataPresent = true; + state.dataFluidProperties->GlyRawData(Loop).RhoDataPresent = true; for (int TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) { if (Util::SameString(TempsName, FluidTemps(TempLoop).Name)) { - state.dataFluid->GlyRawData(Loop).NumRhoTempPts = FluidTemps(TempLoop).NumOfTemps; - state.dataFluid->GlyRawData(Loop).RhoTemps.allocate(state.dataFluid->GlyRawData(Loop).NumRhoTempPts); - state.dataFluid->GlyRawData(Loop).RhoTemps = FluidTemps(TempLoop).Temps; + state.dataFluidProperties->GlyRawData(Loop).NumRhoTempPts = FluidTemps(TempLoop).NumOfTemps; + state.dataFluidProperties->GlyRawData(Loop).RhoTemps.allocate(state.dataFluidProperties->GlyRawData(Loop).NumRhoTempPts); + state.dataFluidProperties->GlyRawData(Loop).RhoTemps = FluidTemps(TempLoop).Temps; break; // the TempLoop DO loop } if (TempLoop == NumOfFluidTempArrays) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->GlyRawData(Loop).Name)); + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->GlyRawData(Loop).Name)); ShowContinueError(state, "No match for temperature array name found with glycol data"); ErrorsFound = true; } } // Next, allocate the density related arrays - state.dataFluid->GlyRawData(Loop).NumRhoConcPts = NumOfConcPts; - state.dataFluid->GlyRawData(Loop).RhoConcs.allocate(state.dataFluid->GlyRawData(Loop).NumRhoConcPts); - state.dataFluid->GlyRawData(Loop).RhoValues.allocate(state.dataFluid->GlyRawData(Loop).NumRhoConcPts, - state.dataFluid->GlyRawData(Loop).NumRhoTempPts); + state.dataFluidProperties->GlyRawData(Loop).NumRhoConcPts = NumOfConcPts; + state.dataFluidProperties->GlyRawData(Loop).RhoConcs.allocate(state.dataFluidProperties->GlyRawData(Loop).NumRhoConcPts); + state.dataFluidProperties->GlyRawData(Loop).RhoValues.allocate(state.dataFluidProperties->GlyRawData(Loop).NumRhoConcPts, + state.dataFluidProperties->GlyRawData(Loop).NumRhoTempPts); // Finally, get the density and concentration values from the user input NumOfConcPts = 0; @@ -1974,32 +1977,32 @@ namespace Fluid { lAlphaFieldBlanks, cAlphaFieldNames, cNumericFieldNames); - if ((Util::SameString(Alphas(1), state.dataFluid->GlyRawData(Loop).Name)) && (Util::SameString(Alphas(2), Density))) { + if ((Util::SameString(Alphas(1), state.dataFluidProperties->GlyRawData(Loop).Name)) && (Util::SameString(Alphas(2), Density))) { ++NumOfConcPts; - state.dataFluid->GlyRawData(Loop).RhoConcs(NumOfConcPts) = Numbers(1); + state.dataFluidProperties->GlyRawData(Loop).RhoConcs(NumOfConcPts) = Numbers(1); // a little error trapping if (NumOfConcPts == 1) { - if (state.dataFluid->GlyRawData(Loop).RhoConcs(NumOfConcPts) < 0.0) { + if (state.dataFluidProperties->GlyRawData(Loop).RhoConcs(NumOfConcPts) < 0.0) { ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->GlyRawData(Loop).Name)); + state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->GlyRawData(Loop).Name)); ShowContinueError(state, "Negative concentrations not allowed in fluid property input data"); ErrorsFound = true; } } else { - if (state.dataFluid->GlyRawData(Loop).RhoConcs(NumOfConcPts) <= - state.dataFluid->GlyRawData(Loop).RhoConcs(NumOfConcPts - 1)) { + if (state.dataFluidProperties->GlyRawData(Loop).RhoConcs(NumOfConcPts) <= + state.dataFluidProperties->GlyRawData(Loop).RhoConcs(NumOfConcPts - 1)) { ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->GlyRawData(Loop).Name)); + state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->GlyRawData(Loop).Name)); ShowContinueError(state, "Concentrations must be entered in ascending order for fluid property data"); ErrorsFound = true; } } - if ((NumNumbers - 1) == state.dataFluid->GlyRawData(Loop).NumRhoTempPts) { - state.dataFluid->GlyRawData(Loop).RhoValues( - NumOfConcPts, {1, state.dataFluid->GlyRawData(Loop).NumRhoTempPts}) = Numbers({2, NumNumbers}); + if ((NumNumbers - 1) == state.dataFluidProperties->GlyRawData(Loop).NumRhoTempPts) { + state.dataFluidProperties->GlyRawData(Loop).RhoValues( + NumOfConcPts, {1, state.dataFluidProperties->GlyRawData(Loop).NumRhoTempPts}) = Numbers({2, NumNumbers}); } else { ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->GlyRawData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->GlyRawData(Loop).Name)); ShowContinueError(state, "Number of density data points not equal to number of temperature points"); ErrorsFound = true; } @@ -2012,7 +2015,7 @@ namespace Fluid { TempsName = ""; FirstSHMatch = true; NumOfConcPts = 0; - state.dataFluid->GlyRawData(Loop).CondDataPresent = false; + state.dataFluidProperties->GlyRawData(Loop).CondDataPresent = false; CurrentModuleObject = "FluidProperties:Concentration"; for (InData = 1; InData <= NumOfGlyFluidPropArrays; ++InData) { // check temperatures given for conductivity are consistant state.dataInputProcessing->inputProcessor->getObjectItem(state, @@ -2027,7 +2030,7 @@ namespace Fluid { lAlphaFieldBlanks, cAlphaFieldNames, cNumericFieldNames); - if ((Util::SameString(Alphas(1), state.dataFluid->GlyRawData(Loop).Name)) && (Util::SameString(Alphas(2), Conductivity))) { + if ((Util::SameString(Alphas(1), state.dataFluidProperties->GlyRawData(Loop).Name)) && (Util::SameString(Alphas(2), Conductivity))) { ++NumOfConcPts; if (FirstSHMatch) { TempsName = Alphas(3); @@ -2035,7 +2038,7 @@ namespace Fluid { } else { if (!Util::SameString(TempsName, Alphas(3))) { ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->GlyRawData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->GlyRawData(Loop).Name)); ShowContinueError(state, "All glycol conductivity data for the same glycol must use the same temperature list"); ShowContinueError(state, format("Expected name={}, Entered name={}", TempsName, Alphas(3))); ErrorsFound = true; @@ -2046,26 +2049,26 @@ namespace Fluid { if (NumOfConcPts > 0) { // Now allocate the arrays and read the data into the proper place // First, allocate the temperature array and transfer the data from the FluidTemp array - state.dataFluid->GlyRawData(Loop).CondDataPresent = true; + state.dataFluidProperties->GlyRawData(Loop).CondDataPresent = true; for (int TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) { if (Util::SameString(TempsName, FluidTemps(TempLoop).Name)) { - state.dataFluid->GlyRawData(Loop).NumCondTempPts = FluidTemps(TempLoop).NumOfTemps; - state.dataFluid->GlyRawData(Loop).CondTemps.allocate(state.dataFluid->GlyRawData(Loop).NumCondTempPts); - state.dataFluid->GlyRawData(Loop).CondTemps = FluidTemps(TempLoop).Temps; + state.dataFluidProperties->GlyRawData(Loop).NumCondTempPts = FluidTemps(TempLoop).NumOfTemps; + state.dataFluidProperties->GlyRawData(Loop).CondTemps.allocate(state.dataFluidProperties->GlyRawData(Loop).NumCondTempPts); + state.dataFluidProperties->GlyRawData(Loop).CondTemps = FluidTemps(TempLoop).Temps; break; // the TempLoop DO loop } if (TempLoop == NumOfFluidTempArrays) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->GlyRawData(Loop).Name)); + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->GlyRawData(Loop).Name)); ShowContinueError(state, "No match for temperature array name found with glycol data"); ErrorsFound = true; } } // Next, allocate the conductivity related arrays - state.dataFluid->GlyRawData(Loop).NumCondConcPts = NumOfConcPts; - state.dataFluid->GlyRawData(Loop).CondConcs.allocate(state.dataFluid->GlyRawData(Loop).NumCondConcPts); - state.dataFluid->GlyRawData(Loop).CondValues.allocate(state.dataFluid->GlyRawData(Loop).NumCondConcPts, - state.dataFluid->GlyRawData(Loop).NumCondTempPts); + state.dataFluidProperties->GlyRawData(Loop).NumCondConcPts = NumOfConcPts; + state.dataFluidProperties->GlyRawData(Loop).CondConcs.allocate(state.dataFluidProperties->GlyRawData(Loop).NumCondConcPts); + state.dataFluidProperties->GlyRawData(Loop).CondValues.allocate(state.dataFluidProperties->GlyRawData(Loop).NumCondConcPts, + state.dataFluidProperties->GlyRawData(Loop).NumCondTempPts); // Finally, get the conductivity and concentration values from the user input NumOfConcPts = 0; @@ -2083,32 +2086,32 @@ namespace Fluid { lAlphaFieldBlanks, cAlphaFieldNames, cNumericFieldNames); - if ((Util::SameString(Alphas(1), state.dataFluid->GlyRawData(Loop).Name)) && (Util::SameString(Alphas(2), Conductivity))) { + if ((Util::SameString(Alphas(1), state.dataFluidProperties->GlyRawData(Loop).Name)) && (Util::SameString(Alphas(2), Conductivity))) { ++NumOfConcPts; - state.dataFluid->GlyRawData(Loop).CondConcs(NumOfConcPts) = Numbers(1); + state.dataFluidProperties->GlyRawData(Loop).CondConcs(NumOfConcPts) = Numbers(1); // a little error trapping if (NumOfConcPts == 1) { - if (state.dataFluid->GlyRawData(Loop).CondConcs(NumOfConcPts) < 0.0) { + if (state.dataFluidProperties->GlyRawData(Loop).CondConcs(NumOfConcPts) < 0.0) { ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->GlyRawData(Loop).Name)); + state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->GlyRawData(Loop).Name)); ShowContinueError(state, "Negative concentrations not allowed in fluid property input data"); ErrorsFound = true; } } else { - if (state.dataFluid->GlyRawData(Loop).CondConcs(NumOfConcPts) <= - state.dataFluid->GlyRawData(Loop).CondConcs(NumOfConcPts - 1)) { + if (state.dataFluidProperties->GlyRawData(Loop).CondConcs(NumOfConcPts) <= + state.dataFluidProperties->GlyRawData(Loop).CondConcs(NumOfConcPts - 1)) { ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->GlyRawData(Loop).Name)); + state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->GlyRawData(Loop).Name)); ShowContinueError(state, "Concentrations must be entered in ascending order for fluid property data"); ErrorsFound = true; } } - if ((NumNumbers - 1) == state.dataFluid->GlyRawData(Loop).NumCondTempPts) { - state.dataFluid->GlyRawData(Loop).CondValues( - NumOfConcPts, {1, state.dataFluid->GlyRawData(Loop).NumCondTempPts}) = Numbers({2, NumNumbers}); + if ((NumNumbers - 1) == state.dataFluidProperties->GlyRawData(Loop).NumCondTempPts) { + state.dataFluidProperties->GlyRawData(Loop).CondValues( + NumOfConcPts, {1, state.dataFluidProperties->GlyRawData(Loop).NumCondTempPts}) = Numbers({2, NumNumbers}); } else { ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->GlyRawData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->GlyRawData(Loop).Name)); ShowContinueError(state, "Number of conductivity data points not equal to number of temperature points"); ErrorsFound = true; } @@ -2121,7 +2124,7 @@ namespace Fluid { TempsName = ""; FirstSHMatch = true; NumOfConcPts = 0; - state.dataFluid->GlyRawData(Loop).ViscDataPresent = false; + state.dataFluidProperties->GlyRawData(Loop).ViscDataPresent = false; CurrentModuleObject = "FluidProperties:Concentration"; for (InData = 1; InData <= NumOfGlyFluidPropArrays; ++InData) { // check temperatures given for viscosity are consistant state.dataInputProcessing->inputProcessor->getObjectItem(state, @@ -2136,7 +2139,7 @@ namespace Fluid { lAlphaFieldBlanks, cAlphaFieldNames, cNumericFieldNames); - if ((Util::SameString(Alphas(1), state.dataFluid->GlyRawData(Loop).Name)) && (Util::SameString(Alphas(2), Viscosity))) { + if ((Util::SameString(Alphas(1), state.dataFluidProperties->GlyRawData(Loop).Name)) && (Util::SameString(Alphas(2), Viscosity))) { ++NumOfConcPts; if (FirstSHMatch) { TempsName = Alphas(3); @@ -2144,7 +2147,7 @@ namespace Fluid { } else { if (!Util::SameString(TempsName, Alphas(3))) { ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->GlyRawData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->GlyRawData(Loop).Name)); ShowContinueError(state, "All glycol viscosity data for the same glycol must use the same temperature list"); ShowContinueError(state, format("Expected name={}, Entered name={}", TempsName, Alphas(3))); ErrorsFound = true; @@ -2153,28 +2156,28 @@ namespace Fluid { } } if (NumOfConcPts > 0) { - state.dataFluid->GlyRawData(Loop).ViscDataPresent = true; + state.dataFluidProperties->GlyRawData(Loop).ViscDataPresent = true; // Now allocate the arrays and read the data into the proper place // First, allocate the temperature array and transfer the data from the FluidTemp array for (int TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) { if (Util::SameString(TempsName, FluidTemps(TempLoop).Name)) { - state.dataFluid->GlyRawData(Loop).NumViscTempPts = FluidTemps(TempLoop).NumOfTemps; - state.dataFluid->GlyRawData(Loop).ViscTemps.allocate(state.dataFluid->GlyRawData(Loop).NumViscTempPts); - state.dataFluid->GlyRawData(Loop).ViscTemps = FluidTemps(TempLoop).Temps; + state.dataFluidProperties->GlyRawData(Loop).NumViscTempPts = FluidTemps(TempLoop).NumOfTemps; + state.dataFluidProperties->GlyRawData(Loop).ViscTemps.allocate(state.dataFluidProperties->GlyRawData(Loop).NumViscTempPts); + state.dataFluidProperties->GlyRawData(Loop).ViscTemps = FluidTemps(TempLoop).Temps; break; // the TempLoop DO loop } if (TempLoop == NumOfFluidTempArrays) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->GlyRawData(Loop).Name)); + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->GlyRawData(Loop).Name)); ShowContinueError(state, "No match for temperature array name found with glycol data"); ErrorsFound = true; } } // Next, allocate the viscosity related arrays - state.dataFluid->GlyRawData(Loop).NumViscConcPts = NumOfConcPts; - state.dataFluid->GlyRawData(Loop).ViscConcs.allocate(state.dataFluid->GlyRawData(Loop).NumViscConcPts); - state.dataFluid->GlyRawData(Loop).ViscValues.allocate(state.dataFluid->GlyRawData(Loop).NumViscConcPts, - state.dataFluid->GlyRawData(Loop).NumViscTempPts); + state.dataFluidProperties->GlyRawData(Loop).NumViscConcPts = NumOfConcPts; + state.dataFluidProperties->GlyRawData(Loop).ViscConcs.allocate(state.dataFluidProperties->GlyRawData(Loop).NumViscConcPts); + state.dataFluidProperties->GlyRawData(Loop).ViscValues.allocate(state.dataFluidProperties->GlyRawData(Loop).NumViscConcPts, + state.dataFluidProperties->GlyRawData(Loop).NumViscTempPts); // Finally, get the viscosity and concentration values from the user input NumOfConcPts = 0; @@ -2192,32 +2195,32 @@ namespace Fluid { lAlphaFieldBlanks, cAlphaFieldNames, cNumericFieldNames); - if ((Util::SameString(Alphas(1), state.dataFluid->GlyRawData(Loop).Name)) && (Util::SameString(Alphas(2), Viscosity))) { + if ((Util::SameString(Alphas(1), state.dataFluidProperties->GlyRawData(Loop).Name)) && (Util::SameString(Alphas(2), Viscosity))) { ++NumOfConcPts; - state.dataFluid->GlyRawData(Loop).ViscConcs(NumOfConcPts) = Numbers(1); + state.dataFluidProperties->GlyRawData(Loop).ViscConcs(NumOfConcPts) = Numbers(1); // a little error trapping if (NumOfConcPts == 1) { - if (state.dataFluid->GlyRawData(Loop).ViscConcs(NumOfConcPts) < 0.0) { + if (state.dataFluidProperties->GlyRawData(Loop).ViscConcs(NumOfConcPts) < 0.0) { ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->GlyRawData(Loop).Name)); + state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->GlyRawData(Loop).Name)); ShowContinueError(state, "Negative concentrations not allowed in fluid property input data"); ErrorsFound = true; } } else { - if (state.dataFluid->GlyRawData(Loop).ViscConcs(NumOfConcPts) <= - state.dataFluid->GlyRawData(Loop).ViscConcs(NumOfConcPts - 1)) { + if (state.dataFluidProperties->GlyRawData(Loop).ViscConcs(NumOfConcPts) <= + state.dataFluidProperties->GlyRawData(Loop).ViscConcs(NumOfConcPts - 1)) { ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->GlyRawData(Loop).Name)); + state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->GlyRawData(Loop).Name)); ShowContinueError(state, "Concentrations must be entered in ascending order for fluid property data"); ErrorsFound = true; } } - if ((NumNumbers - 1) == state.dataFluid->GlyRawData(Loop).NumViscTempPts) { - state.dataFluid->GlyRawData(Loop).ViscValues( - NumOfConcPts, {1, state.dataFluid->GlyRawData(Loop).NumViscTempPts}) = Numbers({2, NumNumbers}); + if ((NumNumbers - 1) == state.dataFluidProperties->GlyRawData(Loop).NumViscTempPts) { + state.dataFluidProperties->GlyRawData(Loop).ViscValues( + NumOfConcPts, {1, state.dataFluidProperties->GlyRawData(Loop).NumViscTempPts}) = Numbers({2, NumNumbers}); } else { ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluid->GlyRawData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProperties->GlyRawData(Loop).Name)); ShowContinueError(state, "Number of viscosity data points not equal to number of temperature points"); ErrorsFound = true; } @@ -2258,40 +2261,40 @@ namespace Fluid { NumOfOptionalInput = state.dataInputProcessing->inputProcessor->getNumObjectsFound(state, CurrentModuleObject); int NumOfGlyConcs = NumOfOptionalInput + 1; - state.dataFluid->GlycolData.allocate(NumOfGlyConcs); - state.dataFluid->GlycolUsed.dimension(NumOfGlyConcs, false); + state.dataFluidProperties->GlycolData.allocate(NumOfGlyConcs); + state.dataFluidProperties->GlycolUsed.dimension(NumOfGlyConcs, false); - state.dataFluid->GlycolUsed(1) = true; // mark Water as always used + state.dataFluidProperties->GlycolUsed(1) = true; // mark Water as always used // First "glycol" is always pure water. Load data from default arrays - state.dataFluid->GlycolData(1).Name = "WATER"; - state.dataFluid->GlycolData(1).GlycolName = "WATER"; - state.dataFluid->GlycolData(1).GlycolIndex = 0; - state.dataFluid->GlycolData(1).Concentration = 1.0; - state.dataFluid->GlycolData(1).CpDataPresent = true; - state.dataFluid->GlycolData(1).NumCpTempPts = DefaultNumGlyTemps; - state.dataFluid->GlycolData(1).RhoDataPresent = true; - state.dataFluid->GlycolData(1).NumRhoTempPts = DefaultNumGlyTemps; - state.dataFluid->GlycolData(1).CondDataPresent = true; - state.dataFluid->GlycolData(1).NumCondTempPts = DefaultNumGlyTemps; - state.dataFluid->GlycolData(1).ViscDataPresent = true; - state.dataFluid->GlycolData(1).NumViscTempPts = DefaultNumGlyTemps; - state.dataFluid->GlycolData(1).CpTemps.allocate(state.dataFluid->GlycolData(1).NumCpTempPts); - state.dataFluid->GlycolData(1).CpValues.allocate(state.dataFluid->GlycolData(1).NumCpTempPts); - state.dataFluid->GlycolData(1).RhoTemps.allocate(state.dataFluid->GlycolData(1).NumRhoTempPts); - state.dataFluid->GlycolData(1).RhoValues.allocate(state.dataFluid->GlycolData(1).NumRhoTempPts); - state.dataFluid->GlycolData(1).CondTemps.allocate(state.dataFluid->GlycolData(1).NumCondTempPts); - state.dataFluid->GlycolData(1).CondValues.allocate(state.dataFluid->GlycolData(1).NumCondTempPts); - state.dataFluid->GlycolData(1).ViscTemps.allocate(state.dataFluid->GlycolData(1).NumViscTempPts); - state.dataFluid->GlycolData(1).ViscValues.allocate(state.dataFluid->GlycolData(1).NumViscTempPts); - state.dataFluid->GlycolData(1).CpTemps = DefaultGlycolTemps; - state.dataFluid->GlycolData(1).CpValues = DefaultWaterCpData; - state.dataFluid->GlycolData(1).RhoTemps = DefaultGlycolTemps; - state.dataFluid->GlycolData(1).RhoValues = DefaultWaterRhoData; - state.dataFluid->GlycolData(1).CondTemps = DefaultGlycolTemps; - state.dataFluid->GlycolData(1).CondValues = DefaultWaterCondData; - state.dataFluid->GlycolData(1).ViscTemps = DefaultGlycolTemps; - state.dataFluid->GlycolData(1).ViscValues = DefaultWaterViscData; + state.dataFluidProperties->GlycolData(1).Name = "WATER"; + state.dataFluidProperties->GlycolData(1).GlycolName = "WATER"; + state.dataFluidProperties->GlycolData(1).Num = 1; + state.dataFluidProperties->GlycolData(1).Concentration = 1.0; + state.dataFluidProperties->GlycolData(1).CpDataPresent = true; + state.dataFluidProperties->GlycolData(1).NumCpTempPts = DefaultNumGlyTemps; + state.dataFluidProperties->GlycolData(1).RhoDataPresent = true; + state.dataFluidProperties->GlycolData(1).NumRhoTempPts = DefaultNumGlyTemps; + state.dataFluidProperties->GlycolData(1).CondDataPresent = true; + state.dataFluidProperties->GlycolData(1).NumCondTempPts = DefaultNumGlyTemps; + state.dataFluidProperties->GlycolData(1).ViscDataPresent = true; + state.dataFluidProperties->GlycolData(1).NumViscTempPts = DefaultNumGlyTemps; + state.dataFluidProperties->GlycolData(1).CpTemps.allocate(state.dataFluidProperties->GlycolData(1).NumCpTempPts); + state.dataFluidProperties->GlycolData(1).CpValues.allocate(state.dataFluidProperties->GlycolData(1).NumCpTempPts); + state.dataFluidProperties->GlycolData(1).RhoTemps.allocate(state.dataFluidProperties->GlycolData(1).NumRhoTempPts); + state.dataFluidProperties->GlycolData(1).RhoValues.allocate(state.dataFluidProperties->GlycolData(1).NumRhoTempPts); + state.dataFluidProperties->GlycolData(1).CondTemps.allocate(state.dataFluidProperties->GlycolData(1).NumCondTempPts); + state.dataFluidProperties->GlycolData(1).CondValues.allocate(state.dataFluidProperties->GlycolData(1).NumCondTempPts); + state.dataFluidProperties->GlycolData(1).ViscTemps.allocate(state.dataFluidProperties->GlycolData(1).NumViscTempPts); + state.dataFluidProperties->GlycolData(1).ViscValues.allocate(state.dataFluidProperties->GlycolData(1).NumViscTempPts); + state.dataFluidProperties->GlycolData(1).CpTemps = DefaultGlycolTemps; + state.dataFluidProperties->GlycolData(1).CpValues = DefaultWaterCpData; + state.dataFluidProperties->GlycolData(1).RhoTemps = DefaultGlycolTemps; + state.dataFluidProperties->GlycolData(1).RhoValues = DefaultWaterRhoData; + state.dataFluidProperties->GlycolData(1).CondTemps = DefaultGlycolTemps; + state.dataFluidProperties->GlycolData(1).CondValues = DefaultWaterCondData; + state.dataFluidProperties->GlycolData(1).ViscTemps = DefaultGlycolTemps; + state.dataFluidProperties->GlycolData(1).ViscValues = DefaultWaterViscData; NumOfGlyConcs = 1; // Water is always available, everything else must be specified @@ -2312,24 +2315,28 @@ namespace Fluid { if (Util::SameString(Alphas(2), EthyleneGlycol)) { GlycolFound = true; ++NumOfGlyConcs; - state.dataFluid->GlycolData(NumOfGlyConcs).Name = Alphas(1); - state.dataFluid->GlycolData(NumOfGlyConcs).GlycolName = Alphas(2); + state.dataFluidProperties->GlycolData(NumOfGlyConcs).Name = Alphas(1); + state.dataFluidProperties->GlycolData(NumOfGlyConcs).Num = NumOfGlyConcs; + + state.dataFluidProperties->GlycolData(NumOfGlyConcs).GlycolName = Alphas(2); } else if (Util::SameString(Alphas(2), PropyleneGlycol)) { GlycolFound = true; ++NumOfGlyConcs; - state.dataFluid->GlycolData(NumOfGlyConcs).Name = Alphas(1); - state.dataFluid->GlycolData(NumOfGlyConcs).GlycolName = Alphas(2); + state.dataFluidProperties->GlycolData(NumOfGlyConcs).Name = Alphas(1); + state.dataFluidProperties->GlycolData(NumOfGlyConcs).Num = NumOfGlyConcs; + state.dataFluidProperties->GlycolData(NumOfGlyConcs).GlycolName = Alphas(2); } else if (Util::SameString(Alphas(2), "UserDefinedGlycolType")) { - for (InData = 1; InData <= state.dataFluid->NumOfGlycols; ++InData) { - if (Util::SameString(Alphas(3), state.dataFluid->GlyRawData(InData).Name)) { + for (InData = 1; InData <= state.dataFluidProperties->NumOfGlycols; ++InData) { + if (Util::SameString(Alphas(3), state.dataFluidProperties->GlyRawData(InData).Name)) { GlycolFound = true; break; // DO LOOP through user defined glycols } } if (GlycolFound) { ++NumOfGlyConcs; - state.dataFluid->GlycolData(NumOfGlyConcs).Name = Alphas(1); - state.dataFluid->GlycolData(NumOfGlyConcs).GlycolName = Alphas(3); + state.dataFluidProperties->GlycolData(NumOfGlyConcs).Name = Alphas(1); + state.dataFluidProperties->GlycolData(NumOfGlyConcs).Num = NumOfGlyConcs; + state.dataFluidProperties->GlycolData(NumOfGlyConcs).GlycolName = Alphas(3); } else { ShowSevereError(state, format("{}{}=\"{}\", invalid reference", RoutineName, CurrentModuleObject, Alphas(1))); ShowContinueError(state, format("... not found in the FluidProperties:Name list: \"{}\".", Alphas(3))); @@ -2342,192 +2349,192 @@ namespace Fluid { ErrorsFound = true; } if (!GlycolFound) continue; - state.dataFluid->GlycolData(NumOfGlyConcs).Concentration = Numbers(1); + state.dataFluidProperties->GlycolData(NumOfGlyConcs).Concentration = Numbers(1); } // Now initialize the rest of the data for the glycols for (int Loop = 2; Loop <= NumOfGlyConcs; ++Loop) { // Check to see if glycol name is one of the defaults or is listed in the Fluid Name list - if (Util::SameString(state.dataFluid->GlycolData(Loop).GlycolName, EthyleneGlycol)) { - state.dataFluid->GlycolData(Loop).GlycolIndex = EthyleneGlycolIndex; - } else if (Util::SameString(state.dataFluid->GlycolData(Loop).GlycolName, PropyleneGlycol)) { - state.dataFluid->GlycolData(Loop).GlycolIndex = PropyleneGlycolIndex; + if (Util::SameString(state.dataFluidProperties->GlycolData(Loop).GlycolName, EthyleneGlycol)) { + state.dataFluidProperties->GlycolData(Loop).BaseGlycolIndex = EthyleneGlycolIndex; + } else if (Util::SameString(state.dataFluidProperties->GlycolData(Loop).GlycolName, PropyleneGlycol)) { + state.dataFluidProperties->GlycolData(Loop).BaseGlycolIndex = PropyleneGlycolIndex; } else { - for (InData = 1; InData <= state.dataFluid->NumOfGlycols; ++InData) { - if (Util::SameString(state.dataFluid->GlycolData(Loop).GlycolName, state.dataFluid->GlyRawData(InData).Name)) { - state.dataFluid->GlycolData(Loop).GlycolIndex = InData; + for (InData = 1; InData <= state.dataFluidProperties->NumOfGlycols; ++InData) { + if (Util::SameString(state.dataFluidProperties->GlycolData(Loop).GlycolName, state.dataFluidProperties->GlyRawData(InData).Name)) { + state.dataFluidProperties->GlycolData(Loop).BaseGlycolIndex = InData; break; // DO LOOP through user defined glycols } } } // Set the rest of the parameters... - if ((state.dataFluid->GlycolData(Loop).GlycolIndex == EthyleneGlycolIndex) || - (state.dataFluid->GlycolData(Loop).GlycolIndex == PropyleneGlycolIndex)) { - - state.dataFluid->GlycolData(Loop).CpDataPresent = true; - state.dataFluid->GlycolData(Loop).NumCpTempPts = DefaultNumGlyTemps; - state.dataFluid->GlycolData(Loop).RhoDataPresent = true; - state.dataFluid->GlycolData(Loop).NumRhoTempPts = DefaultNumGlyTemps; - state.dataFluid->GlycolData(Loop).CondDataPresent = true; - state.dataFluid->GlycolData(Loop).NumCondTempPts = DefaultNumGlyTemps; - state.dataFluid->GlycolData(Loop).ViscDataPresent = true; - state.dataFluid->GlycolData(Loop).NumViscTempPts = DefaultNumGlyTemps; - state.dataFluid->GlycolData(Loop).CpTemps.allocate(state.dataFluid->GlycolData(Loop).NumCpTempPts); - state.dataFluid->GlycolData(Loop).CpValues.allocate(state.dataFluid->GlycolData(Loop).NumCpTempPts); - state.dataFluid->GlycolData(Loop).RhoTemps.allocate(state.dataFluid->GlycolData(Loop).NumRhoTempPts); - state.dataFluid->GlycolData(Loop).RhoValues.allocate(state.dataFluid->GlycolData(Loop).NumRhoTempPts); - state.dataFluid->GlycolData(Loop).CondTemps.allocate(state.dataFluid->GlycolData(Loop).NumCondTempPts); - state.dataFluid->GlycolData(Loop).CondValues.allocate(state.dataFluid->GlycolData(Loop).NumCondTempPts); - state.dataFluid->GlycolData(Loop).ViscTemps.allocate(state.dataFluid->GlycolData(Loop).NumViscTempPts); - state.dataFluid->GlycolData(Loop).ViscValues.allocate(state.dataFluid->GlycolData(Loop).NumViscTempPts); - state.dataFluid->GlycolData(Loop).CpTemps = DefaultGlycolTemps; - state.dataFluid->GlycolData(Loop).RhoTemps = DefaultGlycolTemps; - state.dataFluid->GlycolData(Loop).CondTemps = DefaultGlycolTemps; - state.dataFluid->GlycolData(Loop).ViscTemps = DefaultGlycolTemps; - - if (state.dataFluid->GlycolData(Loop).GlycolIndex == EthyleneGlycolIndex) { + if ((state.dataFluidProperties->GlycolData(Loop).BaseGlycolIndex == EthyleneGlycolIndex) || + (state.dataFluidProperties->GlycolData(Loop).BaseGlycolIndex == PropyleneGlycolIndex)) { + + state.dataFluidProperties->GlycolData(Loop).CpDataPresent = true; + state.dataFluidProperties->GlycolData(Loop).NumCpTempPts = DefaultNumGlyTemps; + state.dataFluidProperties->GlycolData(Loop).RhoDataPresent = true; + state.dataFluidProperties->GlycolData(Loop).NumRhoTempPts = DefaultNumGlyTemps; + state.dataFluidProperties->GlycolData(Loop).CondDataPresent = true; + state.dataFluidProperties->GlycolData(Loop).NumCondTempPts = DefaultNumGlyTemps; + state.dataFluidProperties->GlycolData(Loop).ViscDataPresent = true; + state.dataFluidProperties->GlycolData(Loop).NumViscTempPts = DefaultNumGlyTemps; + state.dataFluidProperties->GlycolData(Loop).CpTemps.allocate(state.dataFluidProperties->GlycolData(Loop).NumCpTempPts); + state.dataFluidProperties->GlycolData(Loop).CpValues.allocate(state.dataFluidProperties->GlycolData(Loop).NumCpTempPts); + state.dataFluidProperties->GlycolData(Loop).RhoTemps.allocate(state.dataFluidProperties->GlycolData(Loop).NumRhoTempPts); + state.dataFluidProperties->GlycolData(Loop).RhoValues.allocate(state.dataFluidProperties->GlycolData(Loop).NumRhoTempPts); + state.dataFluidProperties->GlycolData(Loop).CondTemps.allocate(state.dataFluidProperties->GlycolData(Loop).NumCondTempPts); + state.dataFluidProperties->GlycolData(Loop).CondValues.allocate(state.dataFluidProperties->GlycolData(Loop).NumCondTempPts); + state.dataFluidProperties->GlycolData(Loop).ViscTemps.allocate(state.dataFluidProperties->GlycolData(Loop).NumViscTempPts); + state.dataFluidProperties->GlycolData(Loop).ViscValues.allocate(state.dataFluidProperties->GlycolData(Loop).NumViscTempPts); + state.dataFluidProperties->GlycolData(Loop).CpTemps = DefaultGlycolTemps; + state.dataFluidProperties->GlycolData(Loop).RhoTemps = DefaultGlycolTemps; + state.dataFluidProperties->GlycolData(Loop).CondTemps = DefaultGlycolTemps; + state.dataFluidProperties->GlycolData(Loop).ViscTemps = DefaultGlycolTemps; + + if (state.dataFluidProperties->GlycolData(Loop).BaseGlycolIndex == EthyleneGlycolIndex) { InterpDefValuesForGlycolConc(state, DefaultGlycolConcs, DefaultEthGlyCpData, - state.dataFluid->GlycolData(Loop).Concentration, - state.dataFluid->GlycolData(Loop).CpValues); + state.dataFluidProperties->GlycolData(Loop).Concentration, + state.dataFluidProperties->GlycolData(Loop).CpValues); InterpDefValuesForGlycolConc(state, DefaultGlycolConcs, DefaultEthGlyRhoData, - state.dataFluid->GlycolData(Loop).Concentration, - state.dataFluid->GlycolData(Loop).RhoValues); + state.dataFluidProperties->GlycolData(Loop).Concentration, + state.dataFluidProperties->GlycolData(Loop).RhoValues); InterpDefValuesForGlycolConc(state, DefaultGlycolConcs, DefaultEthGlyCondData, - state.dataFluid->GlycolData(Loop).Concentration, - state.dataFluid->GlycolData(Loop).CondValues); + state.dataFluidProperties->GlycolData(Loop).Concentration, + state.dataFluidProperties->GlycolData(Loop).CondValues); InterpDefValuesForGlycolConc(state, DefaultGlycolConcs, DefaultEthGlyViscData, - state.dataFluid->GlycolData(Loop).Concentration, - state.dataFluid->GlycolData(Loop).ViscValues); + state.dataFluidProperties->GlycolData(Loop).Concentration, + state.dataFluidProperties->GlycolData(Loop).ViscValues); } else { // == PropyleneGlycolIndex InterpDefValuesForGlycolConc(state, DefaultGlycolConcs, DefaultPropGlyCpData, - state.dataFluid->GlycolData(Loop).Concentration, - state.dataFluid->GlycolData(Loop).CpValues); + state.dataFluidProperties->GlycolData(Loop).Concentration, + state.dataFluidProperties->GlycolData(Loop).CpValues); InterpDefValuesForGlycolConc(state, DefaultGlycolConcs, DefaultPropGlyRhoData, - state.dataFluid->GlycolData(Loop).Concentration, - state.dataFluid->GlycolData(Loop).RhoValues); + state.dataFluidProperties->GlycolData(Loop).Concentration, + state.dataFluidProperties->GlycolData(Loop).RhoValues); InterpDefValuesForGlycolConc(state, DefaultGlycolConcs, DefaultPropGlyCondData, - state.dataFluid->GlycolData(Loop).Concentration, - state.dataFluid->GlycolData(Loop).CondValues); + state.dataFluidProperties->GlycolData(Loop).Concentration, + state.dataFluidProperties->GlycolData(Loop).CondValues); InterpDefValuesForGlycolConc(state, DefaultGlycolConcs, DefaultPropGlyViscData, - state.dataFluid->GlycolData(Loop).Concentration, - state.dataFluid->GlycolData(Loop).ViscValues); + state.dataFluidProperties->GlycolData(Loop).Concentration, + state.dataFluidProperties->GlycolData(Loop).ViscValues); } } else { // User-defined fluid - int Index = state.dataFluid->GlycolData(Loop).GlycolIndex; + int Index = state.dataFluidProperties->GlycolData(Loop).BaseGlycolIndex; // Specific heat data: - if (state.dataFluid->GlyRawData(Index).CpDataPresent) { - state.dataFluid->GlycolData(Loop).CpDataPresent = true; - state.dataFluid->GlycolData(Loop).NumCpTempPts = state.dataFluid->GlyRawData(Index).NumCpTempPts; - state.dataFluid->GlycolData(Loop).CpTemps.allocate(state.dataFluid->GlycolData(Loop).NumCpTempPts); - state.dataFluid->GlycolData(Loop).CpValues.allocate(state.dataFluid->GlycolData(Loop).NumCpTempPts); - state.dataFluid->GlycolData(Loop).CpTemps = state.dataFluid->GlyRawData(Index).CpTemps; + if (state.dataFluidProperties->GlyRawData(Index).CpDataPresent) { + state.dataFluidProperties->GlycolData(Loop).CpDataPresent = true; + state.dataFluidProperties->GlycolData(Loop).NumCpTempPts = state.dataFluidProperties->GlyRawData(Index).NumCpTempPts; + state.dataFluidProperties->GlycolData(Loop).CpTemps.allocate(state.dataFluidProperties->GlycolData(Loop).NumCpTempPts); + state.dataFluidProperties->GlycolData(Loop).CpValues.allocate(state.dataFluidProperties->GlycolData(Loop).NumCpTempPts); + state.dataFluidProperties->GlycolData(Loop).CpTemps = state.dataFluidProperties->GlyRawData(Index).CpTemps; InterpValuesForGlycolConc(state, - state.dataFluid->GlyRawData(Index).NumCpConcPts, - state.dataFluid->GlyRawData(Index).NumCpTempPts, - state.dataFluid->GlyRawData(Index).CpConcs, - state.dataFluid->GlyRawData(Index).CpValues, - state.dataFluid->GlycolData(Loop).Concentration, - state.dataFluid->GlycolData(Loop).CpValues); + state.dataFluidProperties->GlyRawData(Index).NumCpConcPts, + state.dataFluidProperties->GlyRawData(Index).NumCpTempPts, + state.dataFluidProperties->GlyRawData(Index).CpConcs, + state.dataFluidProperties->GlyRawData(Index).CpValues, + state.dataFluidProperties->GlycolData(Loop).Concentration, + state.dataFluidProperties->GlycolData(Loop).CpValues); } else { ShowSevereError(state, format("{}Specific heat data not entered for a {}", RoutineName, CurrentModuleObject)); ShowContinueError(state, "ALL data must be entered for user-defined glycols"); - ShowContinueError(state, format("Glycol mixture name = {}", state.dataFluid->GlycolData(Loop).Name)); - ShowContinueError(state, format("Glycol fluid name = {}", state.dataFluid->GlycolData(Loop).GlycolName)); + ShowContinueError(state, format("Glycol mixture name = {}", state.dataFluidProperties->GlycolData(Loop).Name)); + ShowContinueError(state, format("Glycol fluid name = {}", state.dataFluidProperties->GlycolData(Loop).GlycolName)); ErrorsFound = true; } // Density data: - if (state.dataFluid->GlyRawData(Index).CpDataPresent) { - state.dataFluid->GlycolData(Loop).RhoDataPresent = true; - state.dataFluid->GlycolData(Loop).NumRhoTempPts = state.dataFluid->GlyRawData(Index).NumRhoTempPts; - state.dataFluid->GlycolData(Loop).RhoTemps.allocate(state.dataFluid->GlycolData(Loop).NumRhoTempPts); - state.dataFluid->GlycolData(Loop).RhoValues.allocate(state.dataFluid->GlycolData(Loop).NumRhoTempPts); - state.dataFluid->GlycolData(Loop).RhoTemps = state.dataFluid->GlyRawData(Index).RhoTemps; + if (state.dataFluidProperties->GlyRawData(Index).CpDataPresent) { + state.dataFluidProperties->GlycolData(Loop).RhoDataPresent = true; + state.dataFluidProperties->GlycolData(Loop).NumRhoTempPts = state.dataFluidProperties->GlyRawData(Index).NumRhoTempPts; + state.dataFluidProperties->GlycolData(Loop).RhoTemps.allocate(state.dataFluidProperties->GlycolData(Loop).NumRhoTempPts); + state.dataFluidProperties->GlycolData(Loop).RhoValues.allocate(state.dataFluidProperties->GlycolData(Loop).NumRhoTempPts); + state.dataFluidProperties->GlycolData(Loop).RhoTemps = state.dataFluidProperties->GlyRawData(Index).RhoTemps; InterpValuesForGlycolConc(state, - state.dataFluid->GlyRawData(Index).NumRhoConcPts, - state.dataFluid->GlyRawData(Index).NumRhoTempPts, - state.dataFluid->GlyRawData(Index).RhoConcs, - state.dataFluid->GlyRawData(Index).RhoValues, - state.dataFluid->GlycolData(Loop).Concentration, - state.dataFluid->GlycolData(Loop).RhoValues); + state.dataFluidProperties->GlyRawData(Index).NumRhoConcPts, + state.dataFluidProperties->GlyRawData(Index).NumRhoTempPts, + state.dataFluidProperties->GlyRawData(Index).RhoConcs, + state.dataFluidProperties->GlyRawData(Index).RhoValues, + state.dataFluidProperties->GlycolData(Loop).Concentration, + state.dataFluidProperties->GlycolData(Loop).RhoValues); } else { ShowSevereError(state, format("{}Density data not entered for a {}", RoutineName, CurrentModuleObject)); ShowContinueError(state, "ALL data must be entered for user-defined glycols"); - ShowContinueError(state, format("Glycol mixture name = {}", state.dataFluid->GlycolData(Loop).Name)); - ShowContinueError(state, format("Glycol fluid name = {}", state.dataFluid->GlycolData(Loop).GlycolName)); + ShowContinueError(state, format("Glycol mixture name = {}", state.dataFluidProperties->GlycolData(Loop).Name)); + ShowContinueError(state, format("Glycol fluid name = {}", state.dataFluidProperties->GlycolData(Loop).GlycolName)); ErrorsFound = true; } // Conductivity data: - if (state.dataFluid->GlyRawData(Index).CondDataPresent) { - state.dataFluid->GlycolData(Loop).CondDataPresent = true; - state.dataFluid->GlycolData(Loop).NumCondTempPts = state.dataFluid->GlyRawData(Index).NumCondTempPts; - state.dataFluid->GlycolData(Loop).CondTemps.allocate(state.dataFluid->GlycolData(Loop).NumCondTempPts); - state.dataFluid->GlycolData(Loop).CondValues.allocate(state.dataFluid->GlycolData(Loop).NumCondTempPts); - state.dataFluid->GlycolData(Loop).CondTemps = state.dataFluid->GlyRawData(Index).CondTemps; + if (state.dataFluidProperties->GlyRawData(Index).CondDataPresent) { + state.dataFluidProperties->GlycolData(Loop).CondDataPresent = true; + state.dataFluidProperties->GlycolData(Loop).NumCondTempPts = state.dataFluidProperties->GlyRawData(Index).NumCondTempPts; + state.dataFluidProperties->GlycolData(Loop).CondTemps.allocate(state.dataFluidProperties->GlycolData(Loop).NumCondTempPts); + state.dataFluidProperties->GlycolData(Loop).CondValues.allocate(state.dataFluidProperties->GlycolData(Loop).NumCondTempPts); + state.dataFluidProperties->GlycolData(Loop).CondTemps = state.dataFluidProperties->GlyRawData(Index).CondTemps; InterpValuesForGlycolConc(state, - state.dataFluid->GlyRawData(Index).NumCondConcPts, - state.dataFluid->GlyRawData(Index).NumCondTempPts, - state.dataFluid->GlyRawData(Index).CondConcs, - state.dataFluid->GlyRawData(Index).CondValues, - state.dataFluid->GlycolData(Loop).Concentration, - state.dataFluid->GlycolData(Loop).CondValues); + state.dataFluidProperties->GlyRawData(Index).NumCondConcPts, + state.dataFluidProperties->GlyRawData(Index).NumCondTempPts, + state.dataFluidProperties->GlyRawData(Index).CondConcs, + state.dataFluidProperties->GlyRawData(Index).CondValues, + state.dataFluidProperties->GlycolData(Loop).Concentration, + state.dataFluidProperties->GlycolData(Loop).CondValues); } else { ShowSevereError(state, format("{}Conductivity data not entered for a {}", RoutineName, CurrentModuleObject)); ShowContinueError(state, "ALL data must be entered for user-defined glycols"); - ShowContinueError(state, format("Glycol mixture name = {}", state.dataFluid->GlycolData(Loop).Name)); - ShowContinueError(state, format("Glycol fluid name = {}", state.dataFluid->GlycolData(Loop).GlycolName)); + ShowContinueError(state, format("Glycol mixture name = {}", state.dataFluidProperties->GlycolData(Loop).Name)); + ShowContinueError(state, format("Glycol fluid name = {}", state.dataFluidProperties->GlycolData(Loop).GlycolName)); ErrorsFound = true; } // Viscosity data: - if (state.dataFluid->GlyRawData(Index).ViscDataPresent) { - state.dataFluid->GlycolData(Loop).ViscDataPresent = true; - state.dataFluid->GlycolData(Loop).NumViscTempPts = state.dataFluid->GlyRawData(Index).NumViscTempPts; - state.dataFluid->GlycolData(Loop).ViscTemps.allocate(state.dataFluid->GlycolData(Loop).NumViscTempPts); - state.dataFluid->GlycolData(Loop).ViscValues.allocate(state.dataFluid->GlycolData(Loop).NumViscTempPts); - state.dataFluid->GlycolData(Loop).ViscTemps = state.dataFluid->GlyRawData(Index).ViscTemps; + if (state.dataFluidProperties->GlyRawData(Index).ViscDataPresent) { + state.dataFluidProperties->GlycolData(Loop).ViscDataPresent = true; + state.dataFluidProperties->GlycolData(Loop).NumViscTempPts = state.dataFluidProperties->GlyRawData(Index).NumViscTempPts; + state.dataFluidProperties->GlycolData(Loop).ViscTemps.allocate(state.dataFluidProperties->GlycolData(Loop).NumViscTempPts); + state.dataFluidProperties->GlycolData(Loop).ViscValues.allocate(state.dataFluidProperties->GlycolData(Loop).NumViscTempPts); + state.dataFluidProperties->GlycolData(Loop).ViscTemps = state.dataFluidProperties->GlyRawData(Index).ViscTemps; InterpValuesForGlycolConc(state, - state.dataFluid->GlyRawData(Index).NumViscConcPts, - state.dataFluid->GlyRawData(Index).NumViscTempPts, - state.dataFluid->GlyRawData(Index).ViscConcs, - state.dataFluid->GlyRawData(Index).ViscValues, - state.dataFluid->GlycolData(Loop).Concentration, - state.dataFluid->GlycolData(Loop).ViscValues); + state.dataFluidProperties->GlyRawData(Index).NumViscConcPts, + state.dataFluidProperties->GlyRawData(Index).NumViscTempPts, + state.dataFluidProperties->GlyRawData(Index).ViscConcs, + state.dataFluidProperties->GlyRawData(Index).ViscValues, + state.dataFluidProperties->GlycolData(Loop).Concentration, + state.dataFluidProperties->GlycolData(Loop).ViscValues); } else { ShowSevereError(state, format("{}Viscosity data not entered for a {}", RoutineName, CurrentModuleObject)); ShowContinueError(state, "ALL data must be entered for user-defined glycols"); - ShowContinueError(state, format("Glycol mixture name = {}", state.dataFluid->GlycolData(Loop).Name)); - ShowContinueError(state, format("Glycol fluid name = {}", state.dataFluid->GlycolData(Loop).GlycolName)); + ShowContinueError(state, format("Glycol mixture name = {}", state.dataFluidProperties->GlycolData(Loop).Name)); + ShowContinueError(state, format("Glycol fluid name = {}", state.dataFluidProperties->GlycolData(Loop).GlycolName)); ErrorsFound = true; } } } - state.dataFluid->NumOfGlycols = NumOfGlyConcs; // Reset number of glycols to actual number - state.dataFluid->GlycolErrorTracking.allocate(state.dataFluid->NumOfGlycols); - for (std::size_t i = 0; i < state.dataFluid->GlycolErrorTracking.size(); ++i) - state.dataFluid->GlycolErrorTracking[i].Name = state.dataFluid->GlycolData[i].Name; + state.dataFluidProperties->NumOfGlycols = NumOfGlyConcs; // Reset number of glycols to actual number + state.dataFluidProperties->GlycolErrorTracking.allocate(state.dataFluidProperties->NumOfGlycols); + for (std::size_t i = 0; i < state.dataFluidProperties->GlycolErrorTracking.size(); ++i) + state.dataFluidProperties->GlycolErrorTracking[i].Name = state.dataFluidProperties->GlycolData[i].Name; if (!ErrorsFound) InitializeGlycolTempLimits(state, ErrorsFound); // Initialize the Temp limits for the glycols @@ -2546,16 +2553,16 @@ namespace Fluid { ShowFatalError(state, format("{}Previous errors in input cause program termination.", RoutineName)); } - if (state.dataInputProcessing->inputProcessor->getNumSectionsFound("REPORTGLYCOLS") > 0) state.dataFluid->DebugReportGlycols = true; + if (state.dataInputProcessing->inputProcessor->getNumSectionsFound("REPORTGLYCOLS") > 0) state.dataFluidProperties->DebugReportGlycols = true; if (state.dataInputProcessing->inputProcessor->getNumSectionsFound("REPORTREFRIGERANTS") > 0) - state.dataFluid->DebugReportRefrigerants = true; + state.dataFluidProperties->DebugReportRefrigerants = true; if (state.dataInputProcessing->inputProcessor->getNumSectionsFound("INCREASEGLYCOLERRORLIMIT") > 0) - state.dataFluid->GlycolErrorLimitTest += 10; + state.dataFluidProperties->GlycolErrorLimitTest += 10; if (state.dataInputProcessing->inputProcessor->getNumSectionsFound("INCREASEREFRIGERANTERRORLIMIT") > 0) - state.dataFluid->RefrigerantErrorLimitTest += 10; + state.dataFluidProperties->RefrigerantErrorLimitTest += 10; - if (state.dataFluid->DebugReportGlycols) ReportAndTestGlycols(state); - if (state.dataFluid->DebugReportRefrigerants) ReportAndTestRefrigerants(state); + if (state.dataFluidProperties->DebugReportGlycols) ReportAndTestGlycols(state); + if (state.dataFluidProperties->DebugReportRefrigerants) ReportAndTestRefrigerants(state); } [[maybe_unused]] static constexpr std::array, DefaultNumSteamSuperheatedPressure> @@ -4683,8 +4690,8 @@ namespace Fluid { // Most properties requested (e.g., Specific Heat) must be > 0 but the tables may // be set up for symmetry and not be limited to just valid values. - for (int GlycolNum = 1; GlycolNum <= state.dataFluid->NumOfGlycols; ++GlycolNum) { - auto &glycol = state.dataFluid->GlycolData(GlycolNum); + for (int GlycolNum = 1; GlycolNum <= state.dataFluidProperties->NumOfGlycols; ++GlycolNum) { + auto &glycol = state.dataFluidProperties->GlycolData(GlycolNum); if (glycol.CpDataPresent) { // check for lowest non-zero value by referencing temp data for (int IndexNum = 1; IndexNum <= glycol.NumCpTempPts; ++IndexNum) { @@ -4786,8 +4793,8 @@ namespace Fluid { // Most properties requested (e.g., Specific Heat) must be > 0 but the tables may // be set up for symmetry and not be limited to just valid values. - for (int RefrigNum = 1; RefrigNum <= state.dataFluid->NumOfRefrigerants; ++RefrigNum) { - auto &refrig = state.dataFluid->RefrigData(RefrigNum); + for (int RefrigNum = 1; RefrigNum <= state.dataFluidProperties->NumOfRefrigerants; ++RefrigNum) { + auto &refrig = state.dataFluidProperties->RefrigData(RefrigNum); for (int IndexNum = 1; IndexNum <= refrig.NumPsPoints; ++IndexNum) { if (refrig.PsValues(IndexNum) <= 0.0) continue; refrig.PsLowPresIndex = IndexNum; @@ -4926,10 +4933,10 @@ namespace Fluid { Real64 Temperature; // Temperature to drive values Real64 ReturnValue; // Values returned from glycol functions - state.dataFluid->GetInput = false; // input has already been gotten + state.dataFluidProperties->GetInput = false; // input has already been gotten - for (int GlycolNum = 1; GlycolNum <= state.dataFluid->NumOfGlycols; ++GlycolNum) { - auto &glycol = state.dataFluid->GlycolData(GlycolNum); + for (int GlycolNum = 1; GlycolNum <= state.dataFluidProperties->NumOfGlycols; ++GlycolNum) { + auto &glycol = state.dataFluidProperties->GlycolData(GlycolNum); int GlycolIndex = 0; // used in routine calls -- value is returned when first 0 // Lay out the basic values: if (!glycol.GlycolName.empty()) { @@ -5168,223 +5175,223 @@ namespace Fluid { Real64 Temperature; // Temperature to drive values Real64 ReturnValue; // Values returned from refrigerant functions - state.dataFluid->GetInput = false; // input has already been gotten + state.dataFluidProperties->GetInput = false; // input has already been gotten - for (int RefrigNum = 1; RefrigNum <= state.dataFluid->NumOfRefrigerants; ++RefrigNum) { + for (int RefrigNum = 1; RefrigNum <= state.dataFluidProperties->NumOfRefrigerants; ++RefrigNum) { int RefrigIndex = 0; // used in routine calls -- value is returned when first 0 // Lay out the basic values: - if (!state.dataFluid->RefrigData(RefrigNum).Name.empty()) { - print(state.files.debug, "Refrigerant={}", state.dataFluid->RefrigData(RefrigNum).Name); + if (!state.dataFluidProperties->RefrigData(RefrigNum).Name.empty()) { + print(state.files.debug, "Refrigerant={}", state.dataFluidProperties->RefrigData(RefrigNum).Name); } - if (state.dataFluid->RefrigData(RefrigNum).NumPsPoints > 0) { + if (state.dataFluidProperties->RefrigData(RefrigNum).NumPsPoints > 0) { print(state.files.debug, "Saturation Pressures Data points:,Low Temperature=,{:.2R},Index=,{},High Temperature=,{:.2R},Index=,{}\n", - state.dataFluid->RefrigData(RefrigNum).PsLowTempValue, - state.dataFluid->RefrigData(RefrigNum).PsLowTempIndex, - state.dataFluid->RefrigData(RefrigNum).PsHighTempValue, - state.dataFluid->RefrigData(RefrigNum).PsHighTempIndex); + state.dataFluidProperties->RefrigData(RefrigNum).PsLowTempValue, + state.dataFluidProperties->RefrigData(RefrigNum).PsLowTempIndex, + state.dataFluidProperties->RefrigData(RefrigNum).PsHighTempValue, + state.dataFluidProperties->RefrigData(RefrigNum).PsHighTempIndex); print(state.files.debug, "Temperatures:"); - for (int Loop = 1; Loop <= state.dataFluid->RefrigData(RefrigNum).NumPsPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", state.dataFluid->RefrigData(RefrigNum).PsTemps(Loop)); + for (int Loop = 1; Loop <= state.dataFluidProperties->RefrigData(RefrigNum).NumPsPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", state.dataFluidProperties->RefrigData(RefrigNum).PsTemps(Loop)); } print(state.files.debug, ",{:.2R}\n", - state.dataFluid->RefrigData(RefrigNum).PsTemps(state.dataFluid->RefrigData(RefrigNum).NumPsPoints)); + state.dataFluidProperties->RefrigData(RefrigNum).PsTemps(state.dataFluidProperties->RefrigData(RefrigNum).NumPsPoints)); print(state.files.debug, "Saturation Pressure:"); - for (int Loop = 1; Loop <= state.dataFluid->RefrigData(RefrigNum).NumPsPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", state.dataFluid->RefrigData(RefrigNum).PsValues(Loop)); + for (int Loop = 1; Loop <= state.dataFluidProperties->RefrigData(RefrigNum).NumPsPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", state.dataFluidProperties->RefrigData(RefrigNum).PsValues(Loop)); } print(state.files.debug, ",{:.2R}\n", - state.dataFluid->RefrigData(RefrigNum).PsValues(state.dataFluid->RefrigData(RefrigNum).NumPsPoints)); + state.dataFluidProperties->RefrigData(RefrigNum).PsValues(state.dataFluidProperties->RefrigData(RefrigNum).NumPsPoints)); } - if (state.dataFluid->RefrigData(RefrigNum).NumHPoints > 0) { + if (state.dataFluidProperties->RefrigData(RefrigNum).NumHPoints > 0) { print(state.files.debug, "Enthalpy Saturated Fluid Data points:,Low Temperature=,{:.2R},Index=,{},High Temperature=,{:.2R},Index=,{}\n", - state.dataFluid->RefrigData(RefrigNum).HfLowTempValue, - state.dataFluid->RefrigData(RefrigNum).HfLowTempIndex, - state.dataFluid->RefrigData(RefrigNum).HfHighTempValue, - state.dataFluid->RefrigData(RefrigNum).HfHighTempIndex); + state.dataFluidProperties->RefrigData(RefrigNum).HfLowTempValue, + state.dataFluidProperties->RefrigData(RefrigNum).HfLowTempIndex, + state.dataFluidProperties->RefrigData(RefrigNum).HfHighTempValue, + state.dataFluidProperties->RefrigData(RefrigNum).HfHighTempIndex); print(state.files.debug, "Temperatures:"); - for (int Loop = 1; Loop <= state.dataFluid->RefrigData(RefrigNum).NumHPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", state.dataFluid->RefrigData(RefrigNum).HTemps(Loop)); + for (int Loop = 1; Loop <= state.dataFluidProperties->RefrigData(RefrigNum).NumHPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", state.dataFluidProperties->RefrigData(RefrigNum).HTemps(Loop)); } print(state.files.debug, ",{:.2R}\n", - state.dataFluid->RefrigData(RefrigNum).HTemps(state.dataFluid->RefrigData(RefrigNum).NumHPoints)); + state.dataFluidProperties->RefrigData(RefrigNum).HTemps(state.dataFluidProperties->RefrigData(RefrigNum).NumHPoints)); print(state.files.debug, "Enthalpy Saturated Fluid:"); - for (int Loop = 1; Loop <= state.dataFluid->RefrigData(RefrigNum).NumHPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", state.dataFluid->RefrigData(RefrigNum).HfValues(Loop)); + for (int Loop = 1; Loop <= state.dataFluidProperties->RefrigData(RefrigNum).NumHPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", state.dataFluidProperties->RefrigData(RefrigNum).HfValues(Loop)); } print(state.files.debug, ",{:.2R}\n", - state.dataFluid->RefrigData(RefrigNum).HfValues(state.dataFluid->RefrigData(RefrigNum).NumHPoints)); + state.dataFluidProperties->RefrigData(RefrigNum).HfValues(state.dataFluidProperties->RefrigData(RefrigNum).NumHPoints)); print(state.files.debug, "Enthalpy Saturated Fluid/Gas Data points:,Low Temperature=,{:.2R},Index=,{},High Temperature=,{:.2R},Index=,{}\n", - state.dataFluid->RefrigData(RefrigNum).HfgLowTempValue, - state.dataFluid->RefrigData(RefrigNum).HfgLowTempIndex, - state.dataFluid->RefrigData(RefrigNum).HfgHighTempValue, - state.dataFluid->RefrigData(RefrigNum).HfgHighTempIndex); + state.dataFluidProperties->RefrigData(RefrigNum).HfgLowTempValue, + state.dataFluidProperties->RefrigData(RefrigNum).HfgLowTempIndex, + state.dataFluidProperties->RefrigData(RefrigNum).HfgHighTempValue, + state.dataFluidProperties->RefrigData(RefrigNum).HfgHighTempIndex); print(state.files.debug, "Temperatures:"); - for (int Loop = 1; Loop <= state.dataFluid->RefrigData(RefrigNum).NumHPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", state.dataFluid->RefrigData(RefrigNum).HTemps(Loop)); + for (int Loop = 1; Loop <= state.dataFluidProperties->RefrigData(RefrigNum).NumHPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", state.dataFluidProperties->RefrigData(RefrigNum).HTemps(Loop)); } print(state.files.debug, ",{:.2R}\n", - state.dataFluid->RefrigData(RefrigNum).HTemps(state.dataFluid->RefrigData(RefrigNum).NumHPoints)); + state.dataFluidProperties->RefrigData(RefrigNum).HTemps(state.dataFluidProperties->RefrigData(RefrigNum).NumHPoints)); print(state.files.debug, "Enthalpy Saturated Fluid/Gas:"); - for (int Loop = 1; Loop <= state.dataFluid->RefrigData(RefrigNum).NumHPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", state.dataFluid->RefrigData(RefrigNum).HfgValues(Loop)); + for (int Loop = 1; Loop <= state.dataFluidProperties->RefrigData(RefrigNum).NumHPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", state.dataFluidProperties->RefrigData(RefrigNum).HfgValues(Loop)); } print(state.files.debug, ",{:.2R}\n", - state.dataFluid->RefrigData(RefrigNum).HfgValues(state.dataFluid->RefrigData(RefrigNum).NumHPoints)); + state.dataFluidProperties->RefrigData(RefrigNum).HfgValues(state.dataFluidProperties->RefrigData(RefrigNum).NumHPoints)); } - if (state.dataFluid->RefrigData(RefrigNum).NumCpPoints > 0) { + if (state.dataFluidProperties->RefrigData(RefrigNum).NumCpPoints > 0) { print(state.files.debug, "Specific Heat Saturated Fluid Data points:,Low Temperature=,{:.2R},Index=,{},High Temperature=,{:.2R},Index=,{}\n", - state.dataFluid->RefrigData(RefrigNum).CpfLowTempValue, - state.dataFluid->RefrigData(RefrigNum).CpfLowTempIndex, - state.dataFluid->RefrigData(RefrigNum).CpfHighTempValue, - state.dataFluid->RefrigData(RefrigNum).CpfHighTempIndex); + state.dataFluidProperties->RefrigData(RefrigNum).CpfLowTempValue, + state.dataFluidProperties->RefrigData(RefrigNum).CpfLowTempIndex, + state.dataFluidProperties->RefrigData(RefrigNum).CpfHighTempValue, + state.dataFluidProperties->RefrigData(RefrigNum).CpfHighTempIndex); print(state.files.debug, "Temperatures:"); - for (int Loop = 1; Loop <= state.dataFluid->RefrigData(RefrigNum).NumCpPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", state.dataFluid->RefrigData(RefrigNum).CpTemps(Loop)); + for (int Loop = 1; Loop <= state.dataFluidProperties->RefrigData(RefrigNum).NumCpPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", state.dataFluidProperties->RefrigData(RefrigNum).CpTemps(Loop)); } print(state.files.debug, ",{:.2R}\n", - state.dataFluid->RefrigData(RefrigNum).CpTemps(state.dataFluid->RefrigData(RefrigNum).NumCpPoints)); + state.dataFluidProperties->RefrigData(RefrigNum).CpTemps(state.dataFluidProperties->RefrigData(RefrigNum).NumCpPoints)); print(state.files.debug, "Specific Heat Saturated Fluid:"); - for (int Loop = 1; Loop <= state.dataFluid->RefrigData(RefrigNum).NumCpPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}\n", state.dataFluid->RefrigData(RefrigNum).CpfValues(Loop)); + for (int Loop = 1; Loop <= state.dataFluidProperties->RefrigData(RefrigNum).NumCpPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}\n", state.dataFluidProperties->RefrigData(RefrigNum).CpfValues(Loop)); } print(state.files.debug, ",{:.2R}", - state.dataFluid->RefrigData(RefrigNum).CpfValues(state.dataFluid->RefrigData(RefrigNum).NumCpPoints)); + state.dataFluidProperties->RefrigData(RefrigNum).CpfValues(state.dataFluidProperties->RefrigData(RefrigNum).NumCpPoints)); print(state.files.debug, "Specific Heat Saturated Fluid/Gas Data points:,Low Temperature=,{:.2R},Index=,{},High Temperature=,{:.2R},Index=,{}\n", - state.dataFluid->RefrigData(RefrigNum).CpfgLowTempValue, - state.dataFluid->RefrigData(RefrigNum).CpfgLowTempIndex, - state.dataFluid->RefrigData(RefrigNum).CpfgHighTempValue, - state.dataFluid->RefrigData(RefrigNum).CpfgHighTempIndex); + state.dataFluidProperties->RefrigData(RefrigNum).CpfgLowTempValue, + state.dataFluidProperties->RefrigData(RefrigNum).CpfgLowTempIndex, + state.dataFluidProperties->RefrigData(RefrigNum).CpfgHighTempValue, + state.dataFluidProperties->RefrigData(RefrigNum).CpfgHighTempIndex); print(state.files.debug, "Temperatures:"); - for (int Loop = 1; Loop <= state.dataFluid->RefrigData(RefrigNum).NumCpPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", state.dataFluid->RefrigData(RefrigNum).CpTemps(Loop)); + for (int Loop = 1; Loop <= state.dataFluidProperties->RefrigData(RefrigNum).NumCpPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", state.dataFluidProperties->RefrigData(RefrigNum).CpTemps(Loop)); } print(state.files.debug, ",{:.2R}\n", - state.dataFluid->RefrigData(RefrigNum).CpTemps(state.dataFluid->RefrigData(RefrigNum).NumCpPoints)); + state.dataFluidProperties->RefrigData(RefrigNum).CpTemps(state.dataFluidProperties->RefrigData(RefrigNum).NumCpPoints)); print(state.files.debug, "Specific Heat Saturated Fluid/Gas:"); - for (int Loop = 1; Loop <= state.dataFluid->RefrigData(RefrigNum).NumCpPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", state.dataFluid->RefrigData(RefrigNum).CpfgValues(Loop)); + for (int Loop = 1; Loop <= state.dataFluidProperties->RefrigData(RefrigNum).NumCpPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", state.dataFluidProperties->RefrigData(RefrigNum).CpfgValues(Loop)); } print(state.files.debug, ",{:.2R}\n", - state.dataFluid->RefrigData(RefrigNum).CpfgValues(state.dataFluid->RefrigData(RefrigNum).NumCpPoints)); + state.dataFluidProperties->RefrigData(RefrigNum).CpfgValues(state.dataFluidProperties->RefrigData(RefrigNum).NumCpPoints)); } - if (state.dataFluid->RefrigData(RefrigNum).NumRhoPoints > 0) { + if (state.dataFluidProperties->RefrigData(RefrigNum).NumRhoPoints > 0) { print(state.files.debug, "Density Saturated Fluid Data points:,Low Temperature=,{:.2R},Index=,{},High Temperature=,{:.2R},Index=,{}\n", - state.dataFluid->RefrigData(RefrigNum).RhofLowTempValue, - state.dataFluid->RefrigData(RefrigNum).RhofLowTempIndex, - state.dataFluid->RefrigData(RefrigNum).RhofHighTempValue, - state.dataFluid->RefrigData(RefrigNum).RhofHighTempIndex); + state.dataFluidProperties->RefrigData(RefrigNum).RhofLowTempValue, + state.dataFluidProperties->RefrigData(RefrigNum).RhofLowTempIndex, + state.dataFluidProperties->RefrigData(RefrigNum).RhofHighTempValue, + state.dataFluidProperties->RefrigData(RefrigNum).RhofHighTempIndex); print(state.files.debug, "Temperatures:"); - for (int Loop = 1; Loop <= state.dataFluid->RefrigData(RefrigNum).NumRhoPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", state.dataFluid->RefrigData(RefrigNum).RhoTemps(Loop)); + for (int Loop = 1; Loop <= state.dataFluidProperties->RefrigData(RefrigNum).NumRhoPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", state.dataFluidProperties->RefrigData(RefrigNum).RhoTemps(Loop)); } print(state.files.debug, ",{:.2R}", - state.dataFluid->RefrigData(RefrigNum).RhoTemps(state.dataFluid->RefrigData(RefrigNum).NumRhoPoints)); + state.dataFluidProperties->RefrigData(RefrigNum).RhoTemps(state.dataFluidProperties->RefrigData(RefrigNum).NumRhoPoints)); print(state.files.debug, "Density Saturated Fluid:"); - for (int Loop = 1; Loop <= state.dataFluid->RefrigData(RefrigNum).NumRhoPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", state.dataFluid->RefrigData(RefrigNum).RhofValues(Loop)); + for (int Loop = 1; Loop <= state.dataFluidProperties->RefrigData(RefrigNum).NumRhoPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", state.dataFluidProperties->RefrigData(RefrigNum).RhofValues(Loop)); } print(state.files.debug, ",{:.2R}", - state.dataFluid->RefrigData(RefrigNum).RhofValues(state.dataFluid->RefrigData(RefrigNum).NumRhoPoints)); + state.dataFluidProperties->RefrigData(RefrigNum).RhofValues(state.dataFluidProperties->RefrigData(RefrigNum).NumRhoPoints)); print(state.files.debug, "Density Saturated Fluid/Gas Data points:,Low Temperature=,{:.2R},Index=,{},High Temperature=,{:.2R},Index=,{}\n", - state.dataFluid->RefrigData(RefrigNum).RhofgLowTempValue, - state.dataFluid->RefrigData(RefrigNum).RhofgLowTempIndex, - state.dataFluid->RefrigData(RefrigNum).RhofgHighTempValue, - state.dataFluid->RefrigData(RefrigNum).RhofgHighTempIndex); + state.dataFluidProperties->RefrigData(RefrigNum).RhofgLowTempValue, + state.dataFluidProperties->RefrigData(RefrigNum).RhofgLowTempIndex, + state.dataFluidProperties->RefrigData(RefrigNum).RhofgHighTempValue, + state.dataFluidProperties->RefrigData(RefrigNum).RhofgHighTempIndex); print(state.files.debug, "Temperatures:"); - for (int Loop = 1; Loop <= state.dataFluid->RefrigData(RefrigNum).NumRhoPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", state.dataFluid->RefrigData(RefrigNum).RhoTemps(Loop)); + for (int Loop = 1; Loop <= state.dataFluidProperties->RefrigData(RefrigNum).NumRhoPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", state.dataFluidProperties->RefrigData(RefrigNum).RhoTemps(Loop)); } print(state.files.debug, ",{:.2R}\n", - state.dataFluid->RefrigData(RefrigNum).RhoTemps(state.dataFluid->RefrigData(RefrigNum).NumRhoPoints)); + state.dataFluidProperties->RefrigData(RefrigNum).RhoTemps(state.dataFluidProperties->RefrigData(RefrigNum).NumRhoPoints)); print(state.files.debug, "Density Saturated Fluid/Gas:"); - for (int Loop = 1; Loop <= state.dataFluid->RefrigData(RefrigNum).NumRhoPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", state.dataFluid->RefrigData(RefrigNum).RhofgValues(Loop)); + for (int Loop = 1; Loop <= state.dataFluidProperties->RefrigData(RefrigNum).NumRhoPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", state.dataFluidProperties->RefrigData(RefrigNum).RhofgValues(Loop)); } print(state.files.debug, ",{:.2R}\n", - state.dataFluid->RefrigData(RefrigNum).RhofgValues(state.dataFluid->RefrigData(RefrigNum).NumRhoPoints)); + state.dataFluidProperties->RefrigData(RefrigNum).RhofgValues(state.dataFluidProperties->RefrigData(RefrigNum).NumRhoPoints)); } - if (state.dataFluid->RefrigData(RefrigNum).NumSuperTempPts > 0 && state.dataFluid->RefrigData(RefrigNum).NumSuperPressPts > 0) { + if (state.dataFluidProperties->RefrigData(RefrigNum).NumSuperTempPts > 0 && state.dataFluidProperties->RefrigData(RefrigNum).NumSuperPressPts > 0) { print(state.files.debug, "Superheated Gas Fluid Data points:,NumTemperaturePoints=,{},NumPressurePoints=,{}\n", - state.dataFluid->RefrigData(RefrigNum).NumSuperTempPts, - state.dataFluid->RefrigData(RefrigNum).NumSuperPressPts); + state.dataFluidProperties->RefrigData(RefrigNum).NumSuperTempPts, + state.dataFluidProperties->RefrigData(RefrigNum).NumSuperPressPts); print(state.files.debug, "Superheated Temperatures:"); - for (int Loop = 1; Loop <= state.dataFluid->RefrigData(RefrigNum).NumSuperTempPts - 1; ++Loop) { - print(state.files.debug, ",{:.3R}", state.dataFluid->RefrigData(RefrigNum).SHTemps(Loop)); + for (int Loop = 1; Loop <= state.dataFluidProperties->RefrigData(RefrigNum).NumSuperTempPts - 1; ++Loop) { + print(state.files.debug, ",{:.3R}", state.dataFluidProperties->RefrigData(RefrigNum).SHTemps(Loop)); } print(state.files.debug, ",{:.3R}\n", - state.dataFluid->RefrigData(RefrigNum).SHTemps(state.dataFluid->RefrigData(RefrigNum).NumSuperTempPts)); + state.dataFluidProperties->RefrigData(RefrigNum).SHTemps(state.dataFluidProperties->RefrigData(RefrigNum).NumSuperTempPts)); print(state.files.debug, "Superheated Pressures:"); - for (int Loop = 1; Loop <= state.dataFluid->RefrigData(RefrigNum).NumSuperPressPts - 1; ++Loop) { - print(state.files.debug, ",{:.3R}", state.dataFluid->RefrigData(RefrigNum).SHPress(Loop)); + for (int Loop = 1; Loop <= state.dataFluidProperties->RefrigData(RefrigNum).NumSuperPressPts - 1; ++Loop) { + print(state.files.debug, ",{:.3R}", state.dataFluidProperties->RefrigData(RefrigNum).SHPress(Loop)); } print(state.files.debug, ",{:.3R}\n", - state.dataFluid->RefrigData(RefrigNum).SHPress(state.dataFluid->RefrigData(RefrigNum).NumSuperPressPts)); - for (int Loop = 1; Loop <= state.dataFluid->RefrigData(RefrigNum).NumSuperPressPts; ++Loop) { - print(state.files.debug, "Superheated Pressure:#{}={:.2R}\n", Loop, state.dataFluid->RefrigData(RefrigNum).SHPress(Loop)); + state.dataFluidProperties->RefrigData(RefrigNum).SHPress(state.dataFluidProperties->RefrigData(RefrigNum).NumSuperPressPts)); + for (int Loop = 1; Loop <= state.dataFluidProperties->RefrigData(RefrigNum).NumSuperPressPts; ++Loop) { + print(state.files.debug, "Superheated Pressure:#{}={:.2R}\n", Loop, state.dataFluidProperties->RefrigData(RefrigNum).SHPress(Loop)); print(state.files.debug, "Enthalpy Superheated Gas:"); - for (int Loop1 = 1; Loop1 <= state.dataFluid->RefrigData(RefrigNum).NumSuperTempPts - 1; ++Loop1) { - print(state.files.debug, ",{:.3R}", state.dataFluid->RefrigData(RefrigNum).HshValues(Loop, Loop1)); + for (int Loop1 = 1; Loop1 <= state.dataFluidProperties->RefrigData(RefrigNum).NumSuperTempPts - 1; ++Loop1) { + print(state.files.debug, ",{:.3R}", state.dataFluidProperties->RefrigData(RefrigNum).HshValues(Loop, Loop1)); } print(state.files.debug, ",{:.3R}\n", - state.dataFluid->RefrigData(RefrigNum).HshValues(Loop, state.dataFluid->RefrigData(RefrigNum).NumSuperTempPts)); + state.dataFluidProperties->RefrigData(RefrigNum).HshValues(Loop, state.dataFluidProperties->RefrigData(RefrigNum).NumSuperTempPts)); } - for (int Loop = 1; Loop <= state.dataFluid->RefrigData(RefrigNum).NumSuperPressPts; ++Loop) { - print(state.files.debug, "Superheated Pressure:#{}={:.2R}\n", Loop, state.dataFluid->RefrigData(RefrigNum).SHPress(Loop)); + for (int Loop = 1; Loop <= state.dataFluidProperties->RefrigData(RefrigNum).NumSuperPressPts; ++Loop) { + print(state.files.debug, "Superheated Pressure:#{}={:.2R}\n", Loop, state.dataFluidProperties->RefrigData(RefrigNum).SHPress(Loop)); print(state.files.debug, "Density Superheated Gas:"); - for (int Loop1 = 1; Loop1 <= state.dataFluid->RefrigData(RefrigNum).NumSuperTempPts - 1; ++Loop1) { - print(state.files.debug, ",{:.3R}", state.dataFluid->RefrigData(RefrigNum).RhoshValues(Loop, Loop1)); + for (int Loop1 = 1; Loop1 <= state.dataFluidProperties->RefrigData(RefrigNum).NumSuperTempPts - 1; ++Loop1) { + print(state.files.debug, ",{:.3R}", state.dataFluidProperties->RefrigData(RefrigNum).RhoshValues(Loop, Loop1)); } print(state.files.debug, ",{:.3R}\n", - state.dataFluid->RefrigData(RefrigNum).RhoshValues(Loop, state.dataFluid->RefrigData(RefrigNum).NumSuperTempPts)); + state.dataFluidProperties->RefrigData(RefrigNum).RhoshValues(Loop, state.dataFluidProperties->RefrigData(RefrigNum).NumSuperTempPts)); } - for (int Loop = 1; Loop <= state.dataFluid->RefrigData(RefrigNum).NumSuperTempPts; ++Loop) { - print(state.files.debug, "Superheated Temperature:#{}={:.2R}\n", Loop, state.dataFluid->RefrigData(RefrigNum).SHTemps(Loop)); + for (int Loop = 1; Loop <= state.dataFluidProperties->RefrigData(RefrigNum).NumSuperTempPts; ++Loop) { + print(state.files.debug, "Superheated Temperature:#{}={:.2R}\n", Loop, state.dataFluidProperties->RefrigData(RefrigNum).SHTemps(Loop)); print(state.files.debug, "Enthalpy Superheated Gas:"); - for (int Loop1 = 1; Loop1 <= state.dataFluid->RefrigData(RefrigNum).NumSuperPressPts - 1; ++Loop1) { - print(state.files.debug, ",{:.3R}", state.dataFluid->RefrigData(RefrigNum).HshValues(Loop1, Loop)); + for (int Loop1 = 1; Loop1 <= state.dataFluidProperties->RefrigData(RefrigNum).NumSuperPressPts - 1; ++Loop1) { + print(state.files.debug, ",{:.3R}", state.dataFluidProperties->RefrigData(RefrigNum).HshValues(Loop1, Loop)); } print(state.files.debug, ",{:.3R}\n", - state.dataFluid->RefrigData(RefrigNum).HshValues(state.dataFluid->RefrigData(RefrigNum).NumSuperPressPts, Loop)); + state.dataFluidProperties->RefrigData(RefrigNum).HshValues(state.dataFluidProperties->RefrigData(RefrigNum).NumSuperPressPts, Loop)); } - for (int Loop = 1; Loop <= state.dataFluid->RefrigData(RefrigNum).NumSuperTempPts; ++Loop) { - print(state.files.debug, "Superheated Temperature:#{}={:.2R}\n", Loop, state.dataFluid->RefrigData(RefrigNum).SHTemps(Loop)); + for (int Loop = 1; Loop <= state.dataFluidProperties->RefrigData(RefrigNum).NumSuperTempPts; ++Loop) { + print(state.files.debug, "Superheated Temperature:#{}={:.2R}\n", Loop, state.dataFluidProperties->RefrigData(RefrigNum).SHTemps(Loop)); print(state.files.debug, "Density Superheated Gas:"); - for (int Loop1 = 1; Loop1 <= state.dataFluid->RefrigData(RefrigNum).NumSuperPressPts - 1; ++Loop1) { - print(state.files.debug, ",{:.3R}", state.dataFluid->RefrigData(RefrigNum).RhoshValues(Loop1, Loop)); + for (int Loop1 = 1; Loop1 <= state.dataFluidProperties->RefrigData(RefrigNum).NumSuperPressPts - 1; ++Loop1) { + print(state.files.debug, ",{:.3R}", state.dataFluidProperties->RefrigData(RefrigNum).RhoshValues(Loop1, Loop)); } print( state.files.debug, ",{:.3R}\n", - state.dataFluid->RefrigData(RefrigNum).RhoshValues(state.dataFluid->RefrigData(RefrigNum).NumSuperPressPts, Loop)); + state.dataFluidProperties->RefrigData(RefrigNum).RhoshValues(state.dataFluidProperties->RefrigData(RefrigNum).NumSuperPressPts, Loop)); } } @@ -5393,184 +5400,184 @@ namespace Fluid { // ============================================ // ========= Pressure from Temperatures - print(state.files.debug, "Refrigerant={} **** Results ****\n", state.dataFluid->RefrigData(RefrigNum).Name); - if (state.dataFluid->RefrigData(RefrigNum).NumPsPoints > 0) { + print(state.files.debug, "Refrigerant={} **** Results ****\n", state.dataFluidProperties->RefrigData(RefrigNum).Name); + if (state.dataFluidProperties->RefrigData(RefrigNum).NumPsPoints > 0) { print(state.files.debug, "Pressure Results at Temperatures:"); - print(state.files.debug, ",{:.2R}", state.dataFluid->RefrigData(RefrigNum).PsTemps(1) - incr); - for (int Loop = 1; Loop <= state.dataFluid->RefrigData(RefrigNum).NumPsPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", state.dataFluid->RefrigData(RefrigNum).PsTemps(Loop)); + print(state.files.debug, ",{:.2R}", state.dataFluidProperties->RefrigData(RefrigNum).PsTemps(1) - incr); + for (int Loop = 1; Loop <= state.dataFluidProperties->RefrigData(RefrigNum).NumPsPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", state.dataFluidProperties->RefrigData(RefrigNum).PsTemps(Loop)); Temperature = - state.dataFluid->RefrigData(RefrigNum).PsTemps(Loop) + - (state.dataFluid->RefrigData(RefrigNum).PsTemps(Loop + 1) - state.dataFluid->RefrigData(RefrigNum).PsTemps(Loop)) / + state.dataFluidProperties->RefrigData(RefrigNum).PsTemps(Loop) + + (state.dataFluidProperties->RefrigData(RefrigNum).PsTemps(Loop + 1) - state.dataFluidProperties->RefrigData(RefrigNum).PsTemps(Loop)) / 2.0; print(state.files.debug, ",{:.2R}", Temperature); } print(state.files.debug, ",{:.2R}", - state.dataFluid->RefrigData(RefrigNum).PsTemps(state.dataFluid->RefrigData(RefrigNum).NumPsPoints)); + state.dataFluidProperties->RefrigData(RefrigNum).PsTemps(state.dataFluidProperties->RefrigData(RefrigNum).NumPsPoints)); print(state.files.debug, ",{:.2R}\n", - state.dataFluid->RefrigData(RefrigNum).PsTemps(state.dataFluid->RefrigData(RefrigNum).NumPsPoints) + incr); + state.dataFluidProperties->RefrigData(RefrigNum).PsTemps(state.dataFluidProperties->RefrigData(RefrigNum).NumPsPoints) + incr); print(state.files.debug, "Saturated Pressures:"); - Temperature = state.dataFluid->RefrigData(RefrigNum).PsTemps(1) - incr; - ReturnValue = GetSatPressureRefrig(state, state.dataFluid->RefrigData(RefrigNum).Name, Temperature, RefrigIndex, RoutineName); + Temperature = state.dataFluidProperties->RefrigData(RefrigNum).PsTemps(1) - incr; + ReturnValue = GetSatPressureRefrig(state, state.dataFluidProperties->RefrigData(RefrigNum).Name, Temperature, RefrigIndex, RoutineName); print(state.files.debug, ",{:.2R}", ReturnValue); - for (int Loop = 1; Loop <= state.dataFluid->RefrigData(RefrigNum).NumPsPoints - 1; ++Loop) { - Temperature = state.dataFluid->RefrigData(RefrigNum).PsTemps(Loop); + for (int Loop = 1; Loop <= state.dataFluidProperties->RefrigData(RefrigNum).NumPsPoints - 1; ++Loop) { + Temperature = state.dataFluidProperties->RefrigData(RefrigNum).PsTemps(Loop); ReturnValue = - GetSatPressureRefrig(state, state.dataFluid->RefrigData(RefrigNum).Name, Temperature, RefrigIndex, RoutineName); + GetSatPressureRefrig(state, state.dataFluidProperties->RefrigData(RefrigNum).Name, Temperature, RefrigIndex, RoutineName); print(state.files.debug, ",{:.2R}", ReturnValue); Temperature = - state.dataFluid->RefrigData(RefrigNum).PsTemps(Loop) + - (state.dataFluid->RefrigData(RefrigNum).PsTemps(Loop + 1) - state.dataFluid->RefrigData(RefrigNum).PsTemps(Loop)) / + state.dataFluidProperties->RefrigData(RefrigNum).PsTemps(Loop) + + (state.dataFluidProperties->RefrigData(RefrigNum).PsTemps(Loop + 1) - state.dataFluidProperties->RefrigData(RefrigNum).PsTemps(Loop)) / 2.0; ReturnValue = - GetSatPressureRefrig(state, state.dataFluid->RefrigData(RefrigNum).Name, Temperature, RefrigIndex, RoutineName); + GetSatPressureRefrig(state, state.dataFluidProperties->RefrigData(RefrigNum).Name, Temperature, RefrigIndex, RoutineName); print(state.files.debug, ",{:.2R}", ReturnValue); } - Temperature = state.dataFluid->RefrigData(RefrigNum).PsTemps(state.dataFluid->RefrigData(RefrigNum).NumPsPoints); - ReturnValue = GetSatPressureRefrig(state, state.dataFluid->RefrigData(RefrigNum).Name, Temperature, RefrigIndex, RoutineName); + Temperature = state.dataFluidProperties->RefrigData(RefrigNum).PsTemps(state.dataFluidProperties->RefrigData(RefrigNum).NumPsPoints); + ReturnValue = GetSatPressureRefrig(state, state.dataFluidProperties->RefrigData(RefrigNum).Name, Temperature, RefrigIndex, RoutineName); print(state.files.debug, ",{:.2R}", ReturnValue); - Temperature = state.dataFluid->RefrigData(RefrigNum).PsTemps(state.dataFluid->RefrigData(RefrigNum).NumPsPoints) + incr; - ReturnValue = GetSatPressureRefrig(state, state.dataFluid->RefrigData(RefrigNum).Name, Temperature, RefrigIndex, RoutineName); + Temperature = state.dataFluidProperties->RefrigData(RefrigNum).PsTemps(state.dataFluidProperties->RefrigData(RefrigNum).NumPsPoints) + incr; + ReturnValue = GetSatPressureRefrig(state, state.dataFluidProperties->RefrigData(RefrigNum).Name, Temperature, RefrigIndex, RoutineName); print(state.files.debug, ",{:.2R}\n", ReturnValue); } // ========= Enthalpy from Temperatures - if (state.dataFluid->RefrigData(RefrigNum).NumHPoints > 0) { + if (state.dataFluidProperties->RefrigData(RefrigNum).NumHPoints > 0) { print(state.files.debug, "Enthalpy Results at Temperatures:"); - print(state.files.debug, ",{:.2R}", state.dataFluid->RefrigData(RefrigNum).HTemps(1) - incr); - for (int Loop = 1; Loop <= state.dataFluid->RefrigData(RefrigNum).NumHPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", state.dataFluid->RefrigData(RefrigNum).HTemps(Loop)); + print(state.files.debug, ",{:.2R}", state.dataFluidProperties->RefrigData(RefrigNum).HTemps(1) - incr); + for (int Loop = 1; Loop <= state.dataFluidProperties->RefrigData(RefrigNum).NumHPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", state.dataFluidProperties->RefrigData(RefrigNum).HTemps(Loop)); Temperature = - state.dataFluid->RefrigData(RefrigNum).HTemps(Loop) + - (state.dataFluid->RefrigData(RefrigNum).HTemps(Loop + 1) - state.dataFluid->RefrigData(RefrigNum).HTemps(Loop)) / + state.dataFluidProperties->RefrigData(RefrigNum).HTemps(Loop) + + (state.dataFluidProperties->RefrigData(RefrigNum).HTemps(Loop + 1) - state.dataFluidProperties->RefrigData(RefrigNum).HTemps(Loop)) / 2.0; print(state.files.debug, ",{:.2R}", Temperature); } print(state.files.debug, ",{:.2R}", - state.dataFluid->RefrigData(RefrigNum).HTemps(state.dataFluid->RefrigData(RefrigNum).NumHPoints)); + state.dataFluidProperties->RefrigData(RefrigNum).HTemps(state.dataFluidProperties->RefrigData(RefrigNum).NumHPoints)); print(state.files.debug, ",{:.2R}\n", - state.dataFluid->RefrigData(RefrigNum).HTemps(state.dataFluid->RefrigData(RefrigNum).NumHPoints) + incr); + state.dataFluidProperties->RefrigData(RefrigNum).HTemps(state.dataFluidProperties->RefrigData(RefrigNum).NumHPoints) + incr); print(state.files.debug, "Saturated Enthalpy:"); - Temperature = state.dataFluid->RefrigData(RefrigNum).HTemps(1) - incr; + Temperature = state.dataFluidProperties->RefrigData(RefrigNum).HTemps(1) - incr; ReturnValue = - GetSatEnthalpyRefrig(state, state.dataFluid->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); + GetSatEnthalpyRefrig(state, state.dataFluidProperties->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); print(state.files.debug, ",{:.2R}", ReturnValue); - for (int Loop = 1; Loop <= state.dataFluid->RefrigData(RefrigNum).NumHPoints - 1; ++Loop) { - Temperature = state.dataFluid->RefrigData(RefrigNum).HTemps(Loop); + for (int Loop = 1; Loop <= state.dataFluidProperties->RefrigData(RefrigNum).NumHPoints - 1; ++Loop) { + Temperature = state.dataFluidProperties->RefrigData(RefrigNum).HTemps(Loop); ReturnValue = - GetSatEnthalpyRefrig(state, state.dataFluid->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); + GetSatEnthalpyRefrig(state, state.dataFluidProperties->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); print(state.files.debug, ",{:.2R}", ReturnValue); Temperature = - state.dataFluid->RefrigData(RefrigNum).HTemps(Loop) + - (state.dataFluid->RefrigData(RefrigNum).HTemps(Loop + 1) - state.dataFluid->RefrigData(RefrigNum).HTemps(Loop)) / + state.dataFluidProperties->RefrigData(RefrigNum).HTemps(Loop) + + (state.dataFluidProperties->RefrigData(RefrigNum).HTemps(Loop + 1) - state.dataFluidProperties->RefrigData(RefrigNum).HTemps(Loop)) / 2.0; ReturnValue = - GetSatEnthalpyRefrig(state, state.dataFluid->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); + GetSatEnthalpyRefrig(state, state.dataFluidProperties->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); print(state.files.debug, ",{:.2R}", ReturnValue); } - Temperature = state.dataFluid->RefrigData(RefrigNum).HTemps(state.dataFluid->RefrigData(RefrigNum).NumHPoints); + Temperature = state.dataFluidProperties->RefrigData(RefrigNum).HTemps(state.dataFluidProperties->RefrigData(RefrigNum).NumHPoints); ReturnValue = - GetSatEnthalpyRefrig(state, state.dataFluid->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); + GetSatEnthalpyRefrig(state, state.dataFluidProperties->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); print(state.files.debug, ",{:.2R}", ReturnValue); - Temperature = state.dataFluid->RefrigData(RefrigNum).HTemps(state.dataFluid->RefrigData(RefrigNum).NumHPoints) + incr; + Temperature = state.dataFluidProperties->RefrigData(RefrigNum).HTemps(state.dataFluidProperties->RefrigData(RefrigNum).NumHPoints) + incr; ReturnValue = - GetSatEnthalpyRefrig(state, state.dataFluid->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); + GetSatEnthalpyRefrig(state, state.dataFluidProperties->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); print(state.files.debug, ",{:.2R}\n", ReturnValue); } // ========= Specific Heat from Temperatures - if (state.dataFluid->RefrigData(RefrigNum).NumCpPoints > 0) { + if (state.dataFluidProperties->RefrigData(RefrigNum).NumCpPoints > 0) { print(state.files.debug, "Specific Heat Results at Temperatures:"); - print(state.files.debug, ",{:.2R}", state.dataFluid->RefrigData(RefrigNum).CpTemps(1) - incr); - for (int Loop = 1; Loop <= state.dataFluid->RefrigData(RefrigNum).NumCpPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", state.dataFluid->RefrigData(RefrigNum).CpTemps(Loop)); + print(state.files.debug, ",{:.2R}", state.dataFluidProperties->RefrigData(RefrigNum).CpTemps(1) - incr); + for (int Loop = 1; Loop <= state.dataFluidProperties->RefrigData(RefrigNum).NumCpPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", state.dataFluidProperties->RefrigData(RefrigNum).CpTemps(Loop)); Temperature = - state.dataFluid->RefrigData(RefrigNum).CpTemps(Loop) + - (state.dataFluid->RefrigData(RefrigNum).CpTemps(Loop + 1) - state.dataFluid->RefrigData(RefrigNum).CpTemps(Loop)) / + state.dataFluidProperties->RefrigData(RefrigNum).CpTemps(Loop) + + (state.dataFluidProperties->RefrigData(RefrigNum).CpTemps(Loop + 1) - state.dataFluidProperties->RefrigData(RefrigNum).CpTemps(Loop)) / 2.0; print(state.files.debug, ",{:.2R}", Temperature); } print(state.files.debug, ",{:.2R}", - state.dataFluid->RefrigData(RefrigNum).CpTemps(state.dataFluid->RefrigData(RefrigNum).NumCpPoints)); + state.dataFluidProperties->RefrigData(RefrigNum).CpTemps(state.dataFluidProperties->RefrigData(RefrigNum).NumCpPoints)); print(state.files.debug, ",{:.2R}\n", - state.dataFluid->RefrigData(RefrigNum).CpTemps(state.dataFluid->RefrigData(RefrigNum).NumCpPoints) + incr); + state.dataFluidProperties->RefrigData(RefrigNum).CpTemps(state.dataFluidProperties->RefrigData(RefrigNum).NumCpPoints) + incr); print(state.files.debug, "Saturated Specific Heat:"); - Temperature = state.dataFluid->RefrigData(RefrigNum).CpTemps(1) - incr; + Temperature = state.dataFluidProperties->RefrigData(RefrigNum).CpTemps(1) - incr; ReturnValue = - GetSatSpecificHeatRefrig(state, state.dataFluid->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); + GetSatSpecificHeatRefrig(state, state.dataFluidProperties->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); print(state.files.debug, ",{:.2R}", ReturnValue); - for (int Loop = 1; Loop <= state.dataFluid->RefrigData(RefrigNum).NumCpPoints - 1; ++Loop) { - Temperature = state.dataFluid->RefrigData(RefrigNum).CpTemps(Loop); + for (int Loop = 1; Loop <= state.dataFluidProperties->RefrigData(RefrigNum).NumCpPoints - 1; ++Loop) { + Temperature = state.dataFluidProperties->RefrigData(RefrigNum).CpTemps(Loop); ReturnValue = GetSatSpecificHeatRefrig( - state, state.dataFluid->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); + state, state.dataFluidProperties->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); print(state.files.debug, ",{:.2R}", ReturnValue); Temperature = - state.dataFluid->RefrigData(RefrigNum).CpTemps(Loop) + - (state.dataFluid->RefrigData(RefrigNum).CpTemps(Loop + 1) - state.dataFluid->RefrigData(RefrigNum).CpTemps(Loop)) / + state.dataFluidProperties->RefrigData(RefrigNum).CpTemps(Loop) + + (state.dataFluidProperties->RefrigData(RefrigNum).CpTemps(Loop + 1) - state.dataFluidProperties->RefrigData(RefrigNum).CpTemps(Loop)) / 2.0; ReturnValue = GetSatSpecificHeatRefrig( - state, state.dataFluid->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); + state, state.dataFluidProperties->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); print(state.files.debug, ",{:.2R}", ReturnValue); } - Temperature = state.dataFluid->RefrigData(RefrigNum).CpTemps(state.dataFluid->RefrigData(RefrigNum).NumCpPoints); + Temperature = state.dataFluidProperties->RefrigData(RefrigNum).CpTemps(state.dataFluidProperties->RefrigData(RefrigNum).NumCpPoints); ReturnValue = - GetSatSpecificHeatRefrig(state, state.dataFluid->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); + GetSatSpecificHeatRefrig(state, state.dataFluidProperties->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); print(state.files.debug, ",{:.2R}", ReturnValue); - Temperature = state.dataFluid->RefrigData(RefrigNum).CpTemps(state.dataFluid->RefrigData(RefrigNum).NumCpPoints) + incr; + Temperature = state.dataFluidProperties->RefrigData(RefrigNum).CpTemps(state.dataFluidProperties->RefrigData(RefrigNum).NumCpPoints) + incr; ReturnValue = - GetSatSpecificHeatRefrig(state, state.dataFluid->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); + GetSatSpecificHeatRefrig(state, state.dataFluidProperties->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); print(state.files.debug, ",{:.2R}\n", ReturnValue); } // ========= Density from Temperatures - if (state.dataFluid->RefrigData(RefrigNum).NumRhoPoints > 0) { + if (state.dataFluidProperties->RefrigData(RefrigNum).NumRhoPoints > 0) { print(state.files.debug, "Density Results at Temperatures:"); - print(state.files.debug, ",{:.2R}", state.dataFluid->RefrigData(RefrigNum).RhoTemps(1) - incr); - for (int Loop = 1; Loop <= state.dataFluid->RefrigData(RefrigNum).NumRhoPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", state.dataFluid->RefrigData(RefrigNum).RhoTemps(Loop)); + print(state.files.debug, ",{:.2R}", state.dataFluidProperties->RefrigData(RefrigNum).RhoTemps(1) - incr); + for (int Loop = 1; Loop <= state.dataFluidProperties->RefrigData(RefrigNum).NumRhoPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", state.dataFluidProperties->RefrigData(RefrigNum).RhoTemps(Loop)); Temperature = - state.dataFluid->RefrigData(RefrigNum).RhoTemps(Loop) + (state.dataFluid->RefrigData(RefrigNum).RhoTemps(Loop + 1) - - state.dataFluid->RefrigData(RefrigNum).RhoTemps(Loop)) / + state.dataFluidProperties->RefrigData(RefrigNum).RhoTemps(Loop) + (state.dataFluidProperties->RefrigData(RefrigNum).RhoTemps(Loop + 1) - + state.dataFluidProperties->RefrigData(RefrigNum).RhoTemps(Loop)) / 2.0; print(state.files.debug, ",{:.2R}", Temperature); } print(state.files.debug, ",{:.2R}", - state.dataFluid->RefrigData(RefrigNum).RhoTemps(state.dataFluid->RefrigData(RefrigNum).NumRhoPoints)); + state.dataFluidProperties->RefrigData(RefrigNum).RhoTemps(state.dataFluidProperties->RefrigData(RefrigNum).NumRhoPoints)); print(state.files.debug, ",{:.2R}\n", - state.dataFluid->RefrigData(RefrigNum).RhoTemps(state.dataFluid->RefrigData(RefrigNum).NumRhoPoints) + incr); + state.dataFluidProperties->RefrigData(RefrigNum).RhoTemps(state.dataFluidProperties->RefrigData(RefrigNum).NumRhoPoints) + incr); print(state.files.debug, "Saturated Density:"); - Temperature = state.dataFluid->RefrigData(RefrigNum).RhoTemps(1) - incr; + Temperature = state.dataFluidProperties->RefrigData(RefrigNum).RhoTemps(1) - incr; ReturnValue = - GetSatDensityRefrig(state, state.dataFluid->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); + GetSatDensityRefrig(state, state.dataFluidProperties->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); print(state.files.debug, ",{:.2R}", ReturnValue); - for (int Loop = 1; Loop <= state.dataFluid->RefrigData(RefrigNum).NumRhoPoints - 1; ++Loop) { - Temperature = state.dataFluid->RefrigData(RefrigNum).RhoTemps(Loop); + for (int Loop = 1; Loop <= state.dataFluidProperties->RefrigData(RefrigNum).NumRhoPoints - 1; ++Loop) { + Temperature = state.dataFluidProperties->RefrigData(RefrigNum).RhoTemps(Loop); ReturnValue = - GetSatDensityRefrig(state, state.dataFluid->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); + GetSatDensityRefrig(state, state.dataFluidProperties->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); print(state.files.debug, ",{:.2R}", ReturnValue); Temperature = - state.dataFluid->RefrigData(RefrigNum).RhoTemps(Loop) + (state.dataFluid->RefrigData(RefrigNum).RhoTemps(Loop + 1) - - state.dataFluid->RefrigData(RefrigNum).RhoTemps(Loop)) / + state.dataFluidProperties->RefrigData(RefrigNum).RhoTemps(Loop) + (state.dataFluidProperties->RefrigData(RefrigNum).RhoTemps(Loop + 1) - + state.dataFluidProperties->RefrigData(RefrigNum).RhoTemps(Loop)) / 2.0; ReturnValue = - GetSatDensityRefrig(state, state.dataFluid->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); + GetSatDensityRefrig(state, state.dataFluidProperties->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); print(state.files.debug, ",{:.2R}", ReturnValue); } - Temperature = state.dataFluid->RefrigData(RefrigNum).RhoTemps(state.dataFluid->RefrigData(RefrigNum).NumRhoPoints); + Temperature = state.dataFluidProperties->RefrigData(RefrigNum).RhoTemps(state.dataFluidProperties->RefrigData(RefrigNum).NumRhoPoints); ReturnValue = - GetSatDensityRefrig(state, state.dataFluid->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); + GetSatDensityRefrig(state, state.dataFluidProperties->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); print(state.files.debug, ",{:.2R}", ReturnValue); - Temperature = state.dataFluid->RefrigData(RefrigNum).RhoTemps(state.dataFluid->RefrigData(RefrigNum).NumRhoPoints) + incr; + Temperature = state.dataFluidProperties->RefrigData(RefrigNum).RhoTemps(state.dataFluidProperties->RefrigData(RefrigNum).NumRhoPoints) + incr; ReturnValue = - GetSatDensityRefrig(state, state.dataFluid->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); + GetSatDensityRefrig(state, state.dataFluidProperties->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); print(state.files.debug, ",{:.2R}\n", ReturnValue); } } @@ -5578,6 +5585,79 @@ namespace Fluid { //***************************************************************************** + Real64 RefrigerantData::getSatPressure(EnergyPlusData &state, + Real64 const Temperature, // actual temperature given as input + std::string_view const CalledFrom // routine this function was called from (error messages) + ) + { + + // SUBROUTINE INFORMATION: + // AUTHOR Simon Rees + // DATE WRITTEN 24 May 2002 + + // PURPOSE OF THIS FUNCTION: + // This finds the saturation pressure for given temperature. + + // METHODOLOGY EMPLOYED: + // Calls FindArrayIndex to find indices either side of requested temperature + // and linearly interpolates the corresponding saturation pressure values. + + // FUNCTION PARAMETER DEFINITIONS: + static constexpr std::string_view routineName = "RefrigerantData::getSatPressure"; + + Real64 ReturnValue = 0; + bool ErrorFlag = false; // error flag for current call + + int LoTempIndex = FindArrayIndex(Temperature, this->PsTemps, this->PsLowTempIndex, this->PsHighTempIndex); + int HiTempIndex = LoTempIndex + 1; + + // check for out of data bounds problems + if (LoTempIndex == 0) { + ReturnValue = this->PsValues(this->PsLowTempIndex); + ErrorFlag = true; + } else if (HiTempIndex > this->PsHighTempIndex) { + ReturnValue = this->PsValues(this->PsHighTempIndex); + ErrorFlag = true; + } else { + // find interpolation ratio w.r.t temperature + Real64 TempInterpRatio = (Temperature - this->PsTemps(LoTempIndex)) / (this->PsTemps(HiTempIndex) - this->PsTemps(LoTempIndex)); + + // apply final linear interpolation + ReturnValue = this->PsValues(LoTempIndex) + TempInterpRatio * (this->PsValues(HiTempIndex) - this->PsValues(LoTempIndex)); + } + + if (!state.dataGlobal->WarmupFlag && ErrorFlag) { + auto &refrigError = state.dataFluidProperties->RefrigErrorTracking(this->Num); + ++refrigError.SatTempErrCount; + // send warning + if (refrigError.SatTempErrCount <= state.dataFluidProperties->RefrigerantErrorLimitTest) { + ShowSevereMessage(state, + format("{}: Saturation temperature is out of range for refrigerant [{}] supplied data: **", + routineName, + refrigError.Name)); + ShowContinueError(state, + format("...Called From:{}, supplied data range=[{:.2R},{:.2R}]", + CalledFrom, + this->PsTemps(this->PsLowTempIndex), + this->PsTemps(this->PsHighTempIndex))); + ShowContinueError( + state, format("...Supplied Refrigerant Temperature={:.2R} Returned saturated pressure value = {:.0R}", Temperature, ReturnValue)); + ShowContinueErrorTimeStamp(state, ""); + } + ShowRecurringSevereErrorAtEnd(state, + format("{}: Saturation temperature is out of range for refrigerant [{}] supplied data: **", + routineName, refrigError.Name), + refrigError.SatTempErrIndex, + Temperature, + Temperature, + _, + "{C}", + "{C}"); + } + + return ReturnValue; + } + Real64 GetSatPressureRefrig(EnergyPlusData &state, std::string_view const Refrigerant, // carries in substance name Real64 const Temperature, // actual temperature given as input @@ -5597,29 +5677,20 @@ namespace Fluid { // Calls FindArrayIndex to find indices either side of requested temperature // and linearly interpolates the corresponding saturation pressure values. - // Return value - Real64 ReturnValue; - - // FUNCTION PARAMETER DEFINITIONS: - static constexpr std::string_view RoutineName("GetSatPressureRefrig: "); - // FUNCTION LOCAL VARIABLE DECLARATIONS: - int HiTempIndex; // index value of next highest Temperature from table - int LoTempIndex; // index value of next lowest Temperature from table int RefrigNum; // index for refrigerant under consideration - Real64 TempInterpRatio; // ratio to interpolate in temperature domain // error counters and dummy string bool ErrorFlag; // error flag for current call - if (state.dataFluid->GetInput) { + if (state.dataFluidProperties->GetInput) { GetFluidPropertiesData(state); - state.dataFluid->GetInput = false; + state.dataFluidProperties->GetInput = false; } RefrigNum = 0; - if (state.dataFluid->NumOfRefrigerants == 0) { + if (state.dataFluidProperties->NumOfRefrigerants == 0) { ReportFatalRefrigerantErrors( - state, state.dataFluid->NumOfRefrigerants, RefrigNum, true, Refrigerant, "GetSatPressureRefrig", "properties", CalledFrom); + state, state.dataFluidProperties->NumOfRefrigerants, RefrigNum, true, Refrigerant, "GetSatPressureRefrig", "properties", CalledFrom); } ErrorFlag = false; @@ -5628,67 +5699,94 @@ namespace Fluid { RefrigNum = RefrigIndex; } else { // Find which refrigerant (index) is being requested - RefrigNum = FindRefrigerant(state, Refrigerant); + RefrigNum = GetRefrigNum(state, Refrigerant); if (RefrigNum == 0) { ReportFatalRefrigerantErrors( - state, state.dataFluid->NumOfRefrigerants, RefrigNum, true, Refrigerant, "GetSatPressureRefrig", "properties", CalledFrom); + state, state.dataFluidProperties->NumOfRefrigerants, RefrigNum, true, Refrigerant, "GetSatPressureRefrig", "properties", CalledFrom); } RefrigIndex = RefrigNum; } - auto const &refrig(state.dataFluid->RefrigData(RefrigNum)); - // determine array indices for - LoTempIndex = FindArrayIndex(Temperature, refrig.PsTemps, refrig.PsLowTempIndex, refrig.PsHighTempIndex); - HiTempIndex = LoTempIndex + 1; + return state.dataFluidProperties->RefrigData(RefrigNum).getSatPressure(state, Temperature, CalledFrom); + } + + //***************************************************************************** + + Real64 RefrigerantData::getSatTemperature(EnergyPlusData &state, + Real64 const Pressure, // actual temperature given as input + std::string_view const CalledFrom // routine this function was called from (error messages) + ) + { + + // SUBROUTINE INFORMATION: + // AUTHOR Simon Rees + // DATE WRITTEN 24 May 2002 + + // PURPOSE OF THIS FUNCTION: + // This finds the saturation temperature for given pressure. + + // METHODOLOGY EMPLOYED: + // Calls FindArrayIndex to find indices either side of requested pressure + // and linearly interpolates the corresponding saturation temperature values. + + // Return value + Real64 ReturnValue; + + // FUNCTION PARAMETER DEFINITIONS: + static constexpr std::string_view routineName = "RefrigerantData::getSatTemperature"; + + // FUNCTION LOCAL VARIABLE DECLARATIONS: + bool ErrorFlag; // error flag for current call + + // get the array indices + int LoPresIndex = FindArrayIndex(Pressure, this->PsValues, this->PsLowPresIndex, this->PsHighPresIndex); + int HiPresIndex = LoPresIndex + 1; // check for out of data bounds problems - if (LoTempIndex == 0) { - ReturnValue = refrig.PsValues(refrig.PsLowTempIndex); + if (LoPresIndex == 0) { + ReturnValue = this->PsTemps(this->PsLowPresIndex); ErrorFlag = true; - } else if (HiTempIndex > refrig.PsHighTempIndex) { - ReturnValue = refrig.PsValues(refrig.PsHighTempIndex); + } else if (HiPresIndex > this->PsHighPresIndex) { + ReturnValue = this->PsTemps(this->PsHighPresIndex); ErrorFlag = true; } else { // find interpolation ratio w.r.t temperature - TempInterpRatio = (Temperature - refrig.PsTemps(LoTempIndex)) / (refrig.PsTemps(HiTempIndex) - refrig.PsTemps(LoTempIndex)); + Real64 PresInterpRatio = (Pressure - this->PsValues(LoPresIndex)) / (this->PsValues(HiPresIndex) - this->PsValues(LoPresIndex)); // apply final linear interpolation - ReturnValue = refrig.PsValues(LoTempIndex) + TempInterpRatio * (refrig.PsValues(HiTempIndex) - refrig.PsValues(LoTempIndex)); + ReturnValue = this->PsTemps(LoPresIndex) + PresInterpRatio * (this->PsTemps(HiPresIndex) - this->PsTemps(LoPresIndex)); } if (!state.dataGlobal->WarmupFlag && ErrorFlag) { - ++state.dataFluid->RefrigErrorTracking(RefrigNum).SatTempErrCount; + auto &refrigError = state.dataFluidProperties->RefrigErrorTracking(this->Num); + ++refrigError.SatPressErrCount; // send warning - if (state.dataFluid->RefrigErrorTracking(RefrigNum).SatTempErrCount <= state.dataFluid->RefrigerantErrorLimitTest) { + if (refrigError.SatPressErrCount <= state.dataFluidProperties->RefrigerantErrorLimitTest) { ShowSevereMessage(state, - format("{}Saturation temperature is out of range for refrigerant [{}] supplied data: **", - RoutineName, - state.dataFluid->RefrigErrorTracking(RefrigNum).Name)); + format("{}: Saturation pressure is out of range for refrigerant [{}] supplied data: **", + routineName, + refrigError.Name)); ShowContinueError(state, - format("...Called From:{}, supplied data range=[{:.2R},{:.2R}]", + format("...Called From:{}, supplied data range=[{:.0R},{:.0R}]", CalledFrom, - refrig.PsTemps(refrig.PsLowTempIndex), - refrig.PsTemps(refrig.PsHighTempIndex))); + this->PsValues(this->PsLowPresIndex), + this->PsValues(this->PsHighPresIndex))); ShowContinueError( - state, format("...Supplied Refrigerant Temperature={:.2R} Returned saturated pressure value = {:.0R}", Temperature, ReturnValue)); + state, format("...Supplied Refrigerant Pressure={:.0R} Returned saturated temperature value ={:.2R}", Pressure, ReturnValue)); ShowContinueErrorTimeStamp(state, ""); } ShowRecurringSevereErrorAtEnd(state, - std::string{RoutineName} + "Saturation temperature is out of range for refrigerant [" + - state.dataFluid->RefrigErrorTracking(RefrigNum).Name + "] supplied data: **", - state.dataFluid->RefrigErrorTracking(RefrigNum).SatTempErrIndex, - Temperature, - Temperature, + format("{}: Saturation pressure is out of range for refrigerant [{}] supplied data: **", routineName, refrigError.Name), + refrigError.SatPressErrIndex, + Pressure, + Pressure, _, - "{C}", - "{C}"); + "{Pa}", + "{Pa}"); } - return ReturnValue; } - //***************************************************************************** - Real64 GetSatTemperatureRefrig(EnergyPlusData &state, std::string_view const Refrigerant, // carries in substance name Real64 const Pressure, // actual temperature given as input @@ -5708,29 +5806,19 @@ namespace Fluid { // Calls FindArrayIndex to find indices either side of requested pressure // and linearly interpolates the corresponding saturation temperature values. - // Return value - Real64 ReturnValue; - - // FUNCTION PARAMETER DEFINITIONS: - static constexpr std::string_view RoutineName("GetSatTemperatureRefrig: "); - // FUNCTION LOCAL VARIABLE DECLARATIONS: - int HiPresIndex; // index value of next highest Temperature from table - int LoPresIndex; // index value of next lowest Temperature from table int RefrigNum; // index for refrigerant under consideration - Real64 PresInterpRatio; // ratio to interpolate in temperature domain - // error counters and dummy string bool ErrorFlag; // error flag for current call - if (state.dataFluid->GetInput) { + if (state.dataFluidProperties->GetInput) { GetFluidPropertiesData(state); - state.dataFluid->GetInput = false; + state.dataFluidProperties->GetInput = false; } RefrigNum = 0; - if (state.dataFluid->NumOfRefrigerants == 0) { + if (state.dataFluidProperties->NumOfRefrigerants == 0) { ReportFatalRefrigerantErrors( - state, state.dataFluid->NumOfRefrigerants, RefrigNum, true, Refrigerant, "GetSatTemperatureRefrig", "properties", CalledFrom); + state, state.dataFluidProperties->NumOfRefrigerants, RefrigNum, true, Refrigerant, "GetSatTemperatureRefrig", "properties", CalledFrom); } ErrorFlag = false; @@ -5739,10 +5827,10 @@ namespace Fluid { RefrigNum = RefrigIndex; } else { // Find which refrigerant (index) is being requested - RefrigNum = FindRefrigerant(state, Refrigerant); + RefrigNum = GetRefrigNum(state, Refrigerant); if (RefrigNum == 0) { ReportFatalRefrigerantErrors(state, - state.dataFluid->NumOfRefrigerants, + state.dataFluidProperties->NumOfRefrigerants, RefrigNum, true, Refrigerant, @@ -5752,58 +5840,37 @@ namespace Fluid { } RefrigIndex = RefrigNum; } - auto const &refrig(state.dataFluid->RefrigData(RefrigNum)); - // get the array indices - LoPresIndex = FindArrayIndex(Pressure, refrig.PsValues, refrig.PsLowPresIndex, refrig.PsHighPresIndex); - HiPresIndex = LoPresIndex + 1; + return state.dataFluidProperties->RefrigData(RefrigNum).getSatTemperature(state, Pressure, CalledFrom); + } + + //***************************************************************************** - // check for out of data bounds problems - if (LoPresIndex == 0) { - ReturnValue = refrig.PsTemps(refrig.PsLowPresIndex); - ErrorFlag = true; - } else if (HiPresIndex > refrig.PsHighPresIndex) { - ReturnValue = refrig.PsTemps(refrig.PsHighPresIndex); - ErrorFlag = true; - } else { - // find interpolation ratio w.r.t temperature - PresInterpRatio = (Pressure - refrig.PsValues(LoPresIndex)) / (refrig.PsValues(HiPresIndex) - refrig.PsValues(LoPresIndex)); + Real64 RefrigerantData::getSatEnthalpy(EnergyPlusData &state, + Real64 const Temperature, // actual temperature given as input + Real64 const Quality, // actual quality given as input + std::string_view const CalledFrom // routine this function was called from (error messages) + ) + { - // apply final linear interpolation - ReturnValue = refrig.PsTemps(LoPresIndex) + PresInterpRatio * (refrig.PsTemps(HiPresIndex) - refrig.PsTemps(LoPresIndex)); - } + // SUBROUTINE INFORMATION: + // AUTHOR Mike Turner + // DATE WRITTEN 10 December 99 + // MODIFIED Rick Strand (April 2000, May 2000) + // Simon Rees (May 2002) - if (!state.dataGlobal->WarmupFlag && ErrorFlag) { - ++state.dataFluid->RefrigErrorTracking(RefrigNum).SatPressErrCount; - // send warning - if (state.dataFluid->RefrigErrorTracking(RefrigNum).SatPressErrCount <= state.dataFluid->RefrigerantErrorLimitTest) { - ShowSevereMessage(state, - format("{}Saturation pressure is out of range for refrigerant [{}] supplied data: **", - RoutineName, - state.dataFluid->RefrigErrorTracking(RefrigNum).Name)); - ShowContinueError(state, - format("...Called From:{}, supplied data range=[{:.0R},{:.0R}]", - CalledFrom, - refrig.PsValues(refrig.PsLowPresIndex), - refrig.PsValues(refrig.PsHighPresIndex))); - ShowContinueError( - state, format("...Supplied Refrigerant Pressure={:.0R} Returned saturated temperature value ={:.2R}", Pressure, ReturnValue)); - ShowContinueErrorTimeStamp(state, ""); - } - ShowRecurringSevereErrorAtEnd(state, - std::string{RoutineName} + "Saturation pressure is out of range for refrigerant [" + - state.dataFluid->RefrigErrorTracking(RefrigNum).Name + "] supplied data: **", - state.dataFluid->RefrigErrorTracking(RefrigNum).SatPressErrIndex, - Pressure, - Pressure, - _, - "{Pa}", - "{Pa}"); - } - return ReturnValue; - } + // PURPOSE OF THIS FUNCTION: + // This finds enthalpy for given temperature and a quality under the vapor dome. + // This fucntion is only called with a valid refrigerant and quality between 0 and 1. - //***************************************************************************** + // METHODOLOGY EMPLOYED: + // Calls GetInterpolatedSatProp to linearly interpolate between the saturated + // liquid and vapour enthalpies according to the given quality. + + // Apply linear interpolation function + return GetInterpolatedSatProp( + state, Temperature, this->HTemps, this->HfValues, this->HfgValues, Quality, CalledFrom, this->HfLowTempIndex, this->HfHighTempIndex); + } Real64 GetSatEnthalpyRefrig(EnergyPlusData &state, std::string_view const Refrigerant, // carries in substance name @@ -5834,15 +5901,15 @@ namespace Fluid { // FUNCTION LOCAL VARIABLE DECLARATIONS: int RefrigNum; // index for refrigerant under consideration - if (state.dataFluid->GetInput) { + if (state.dataFluidProperties->GetInput) { GetFluidPropertiesData(state); - state.dataFluid->GetInput = false; + state.dataFluidProperties->GetInput = false; } RefrigNum = 0; - if (state.dataFluid->NumOfRefrigerants == 0) { + if (state.dataFluidProperties->NumOfRefrigerants == 0) { ReportFatalRefrigerantErrors( - state, state.dataFluid->NumOfRefrigerants, RefrigNum, true, Refrigerant, RoutineName, "properties", CalledFrom); + state, state.dataFluidProperties->NumOfRefrigerants, RefrigNum, true, Refrigerant, RoutineName, "properties", CalledFrom); } if ((Quality < 0.0) || (Quality > 1.0)) { @@ -5855,28 +5922,23 @@ namespace Fluid { RefrigNum = RefrigIndex; } else { // Find which refrigerant (index) is being requested - RefrigNum = FindRefrigerant(state, Refrigerant); + RefrigNum = GetRefrigNum(state, Refrigerant); if (RefrigNum == 0) { ReportFatalRefrigerantErrors( - state, state.dataFluid->NumOfRefrigerants, RefrigNum, true, Refrigerant, RoutineName, "properties", CalledFrom); + state, state.dataFluidProperties->NumOfRefrigerants, RefrigNum, true, Refrigerant, RoutineName, "properties", CalledFrom); } RefrigIndex = RefrigNum; } - auto const &refrig(state.dataFluid->RefrigData(RefrigNum)); - // Apply linear interpolation function - return GetInterpolatedSatProp( - state, Temperature, refrig.HTemps, refrig.HfValues, refrig.HfgValues, Quality, CalledFrom, refrig.HfLowTempIndex, refrig.HfHighTempIndex); + return state.dataFluidProperties->RefrigData(RefrigNum).getSatEnthalpy(state, Temperature, Quality, CalledFrom); } - + //***************************************************************************** - Real64 GetSatDensityRefrig(EnergyPlusData &state, - std::string_view const Refrigerant, // carries in substance name - Real64 const Temperature, // actual temperature given as input - Real64 const Quality, // actual quality given as input - int &RefrigIndex, // Index to Refrigerant Properties - std::string_view const CalledFrom // routine this function was called from (error messages) + Real64 RefrigerantData::getSatDensity(EnergyPlusData &state, + Real64 const Temperature, // actual temperature given as input + Real64 const Quality, // actual quality given as input + std::string_view const CalledFrom // routine this function was called from (error messages) ) { @@ -5898,80 +5960,47 @@ namespace Fluid { Real64 ReturnValue; // FUNCTION PARAMETER DEFINITIONS: - static constexpr std::string_view RoutineName("GetSatDensityRefrig: "); - - // FUNCTION LOCAL VARIABLE DECLARATIONS: - Real64 LoSatProp; // Sat. prop. at lower temp & given quality - Real64 HiSatProp; // Sat. prop. at higher temp & given quality - Real64 TempInterpRatio; // ratio to interpolate in temperature domain - - // error counters and dummy string - - if (state.dataFluid->GetInput) { - GetFluidPropertiesData(state); - state.dataFluid->GetInput = false; - } - - int RefrigNum = 0; - if (state.dataFluid->NumOfRefrigerants == 0) { - ReportFatalRefrigerantErrors( - state, state.dataFluid->NumOfRefrigerants, RefrigNum, true, Refrigerant, "GetSatDensityRefrig", "properties", CalledFrom); - } + static constexpr std::string_view routineName = "RefrigerantData::getSatDensity"; if ((Quality < 0.0) || (Quality > 1.0)) { - ShowSevereError(state, fmt::format("{}Refrigerant \"{}\", invalid quality, called from {}", RoutineName, Refrigerant, CalledFrom)); + ShowSevereError(state, fmt::format("{}Refrigerant \"{}\", invalid quality, called from {}", routineName, this->Name, CalledFrom)); ShowContinueError(state, format("Saturated density quality must be between 0 and 1, entered value=[{:.4R}].", Quality)); ShowFatalError(state, "Program terminates due to preceding condition."); } - // Find which refrigerant (index) is being requested and then determine - // where the temperature is within the temperature array - if (RefrigIndex > 0) { - RefrigNum = RefrigIndex; - } else { - // Find which refrigerant (index) is being requested - RefrigNum = FindRefrigerant(state, Refrigerant); - if (RefrigNum == 0) { - ReportFatalRefrigerantErrors( - state, state.dataFluid->NumOfRefrigerants, RefrigNum, true, Refrigerant, "GetSatDensityRefrig", "properties", CalledFrom); - } - RefrigIndex = RefrigNum; - } - auto const &refrig(state.dataFluid->RefrigData(RefrigNum)); - bool ErrorFlag = false; - int LoTempIndex = FindArrayIndex(Temperature, refrig.RhoTemps, refrig.RhofLowTempIndex, refrig.RhofHighTempIndex); + int LoTempIndex = FindArrayIndex(Temperature, this->RhoTemps, this->RhofLowTempIndex, this->RhofHighTempIndex); int HiTempIndex = LoTempIndex + 1; // Error check to make sure the temperature is not out of bounds if (LoTempIndex == 0) { // Give the lowest density value if the temperature is below than the minimum // temperature in the refrigerant table - ReturnValue = 1.0 / refrig.RhofValues(refrig.RhofLowTempIndex) + - Quality * (1.0 / refrig.RhofgValues(refrig.RhofLowTempIndex) - 1.0 / refrig.RhofValues(refrig.RhofLowTempIndex)); + ReturnValue = 1.0 / this->RhofValues(this->RhofLowTempIndex) + + Quality * (1.0 / this->RhofgValues(this->RhofLowTempIndex) - 1.0 / this->RhofValues(this->RhofLowTempIndex)); ReturnValue = 1.0 / ReturnValue; ErrorFlag = true; - } else if (HiTempIndex > refrig.RhofHighTempIndex) { + } else if (HiTempIndex > this->RhofHighTempIndex) { // Give the highest density value if the temperature is higher than the maximum // temperature in the refrigerant table - ReturnValue = 1.0 / refrig.RhofValues(refrig.RhofHighTempIndex) + - Quality * (1.0 / refrig.RhofgValues(refrig.RhofHighTempIndex) - 1.0 / refrig.RhofValues(refrig.RhofHighTempIndex)); + ReturnValue = 1.0 / this->RhofValues(this->RhofHighTempIndex) + + Quality * (1.0 / this->RhofgValues(this->RhofHighTempIndex) - 1.0 / this->RhofValues(this->RhofHighTempIndex)); ReturnValue = 1.0 / ReturnValue; ErrorFlag = true; } else { // Okay // Calculate the specific volume for the lower temperature index based on linear // interpolation of the quality - LoSatProp = - 1.0 / refrig.RhofValues(LoTempIndex) + Quality * (1.0 / refrig.RhofgValues(LoTempIndex) - 1.0 / refrig.RhofValues(LoTempIndex)); + Real64 LoSatProp = + 1.0 / this->RhofValues(LoTempIndex) + Quality * (1.0 / this->RhofgValues(LoTempIndex) - 1.0 / this->RhofValues(LoTempIndex)); // Calculate the specific volume for the higher temperature index based on linear // interpolation of the quality - HiSatProp = - 1.0 / refrig.RhofValues(HiTempIndex) + Quality * (1.0 / refrig.RhofgValues(HiTempIndex) - 1.0 / refrig.RhofValues(HiTempIndex)); + Real64 HiSatProp = + 1.0 / this->RhofValues(HiTempIndex) + Quality * (1.0 / this->RhofgValues(HiTempIndex) - 1.0 / this->RhofValues(HiTempIndex)); // Find interpolation ratio in temperature direction - TempInterpRatio = (Temperature - refrig.RhoTemps(LoTempIndex)) / (refrig.RhoTemps(HiTempIndex) - refrig.RhoTemps(LoTempIndex)); + Real64 TempInterpRatio = (Temperature - this->RhoTemps(LoTempIndex)) / (this->RhoTemps(HiTempIndex) - this->RhoTemps(LoTempIndex)); // Apply final linear interpolation to find the specific volume ReturnValue = LoSatProp + TempInterpRatio * (HiSatProp - LoSatProp); @@ -5980,26 +6009,26 @@ namespace Fluid { } if (!state.dataGlobal->WarmupFlag && ErrorFlag) { - ++state.dataFluid->RefrigErrorTracking(RefrigNum).SatTempDensityErrCount; + auto &refrigError = state.dataFluidProperties->RefrigErrorTracking(this->Num); + ++refrigError.SatTempDensityErrCount; // send warning - if (state.dataFluid->RefrigErrorTracking(RefrigNum).SatTempDensityErrCount <= state.dataFluid->RefrigerantErrorLimitTest) { + if (refrigError.SatTempDensityErrCount <= state.dataFluidProperties->RefrigerantErrorLimitTest) { ShowSevereMessage(state, - format("{}Saturation temperature is out of range for refrigerant [{}] supplied data: **", - RoutineName, - state.dataFluid->RefrigErrorTracking(RefrigNum).Name)); + format("{}: Saturation temperature is out of range for refrigerant [{}] supplied data: **", + routineName, + refrigError.Name)); ShowContinueError(state, format("...Called From:{}, supplied data range=[{:.2R},{:.2R}]", CalledFrom, - refrig.RhoTemps(refrig.RhofLowTempIndex), - refrig.RhoTemps(refrig.RhofHighTempIndex))); + this->RhoTemps(this->RhofLowTempIndex), + this->RhoTemps(this->RhofHighTempIndex))); ShowContinueError( state, format("...Supplied Refrigerant Temperature={:.2R} Returned saturated density value ={:.2R}", Temperature, ReturnValue)); ShowContinueErrorTimeStamp(state, ""); } ShowRecurringSevereErrorAtEnd(state, - std::string{RoutineName} + "Saturation temperature is out of range for refrigerant [" + - state.dataFluid->RefrigErrorTracking(RefrigNum).Name + "] supplied data: **", - state.dataFluid->RefrigErrorTracking(RefrigNum).SatTempDensityErrIndex, + format("{}: Saturation temperature is out of range for refrigerant [{}] supplied data: **", routineName, refrigError.Name), + refrigError.SatTempDensityErrIndex, Temperature, Temperature, _, @@ -6009,8 +6038,113 @@ namespace Fluid { return ReturnValue; } + Real64 GetSatDensityRefrig(EnergyPlusData &state, + std::string_view const Refrigerant, // carries in substance name + Real64 const Temperature, // actual temperature given as input + Real64 const Quality, // actual quality given as input + int &RefrigIndex, // Index to Refrigerant Properties + std::string_view const CalledFrom // routine this function was called from (error messages) + ) + { + + // SUBROUTINE INFORMATION: + // AUTHOR Mike Turner + // DATE WRITTEN 10 December 99 + // MODIFIED Rick Strand (April 2000, May 2000) + // Simon Rees (May 2002); Kenneth Tang (Jan 2004) + + // PURPOSE OF THIS SUBROUTINE: + // This finds density for given temperature and a quality under the vapor dome. + // This function is only called with a valid refrigerant and quality between 0 and 1. + + // METHODOLOGY EMPLOYED: + // Calls GetInterpolatedSatProp to linearly interpolate between the saturated + // liquid and vapour densities according to the given quality. + + // FUNCTION PARAMETER DEFINITIONS: + static constexpr std::string_view RoutineName("GetSatDensityRefrig: "); + + // error counters and dummy string + + if (state.dataFluidProperties->GetInput) { + GetFluidPropertiesData(state); + state.dataFluidProperties->GetInput = false; + } + + int RefrigNum = 0; + if (state.dataFluidProperties->NumOfRefrigerants == 0) { + ReportFatalRefrigerantErrors( + state, state.dataFluidProperties->NumOfRefrigerants, RefrigNum, true, Refrigerant, "GetSatDensityRefrig", "properties", CalledFrom); + } + + if ((Quality < 0.0) || (Quality > 1.0)) { + ShowSevereError(state, fmt::format("{}Refrigerant \"{}\", invalid quality, called from {}", RoutineName, Refrigerant, CalledFrom)); + ShowContinueError(state, format("Saturated density quality must be between 0 and 1, entered value=[{:.4R}].", Quality)); + ShowFatalError(state, "Program terminates due to preceding condition."); + } + + // Find which refrigerant (index) is being requested and then determine + // where the temperature is within the temperature array + if (RefrigIndex > 0) { + RefrigNum = RefrigIndex; + } else { + // Find which refrigerant (index) is being requested + RefrigNum = GetRefrigNum(state, Refrigerant); + if (RefrigNum == 0) { + ReportFatalRefrigerantErrors( + state, state.dataFluidProperties->NumOfRefrigerants, RefrigNum, true, Refrigerant, "GetSatDensityRefrig", "properties", CalledFrom); + } + RefrigIndex = RefrigNum; + } + + return state.dataFluidProperties->RefrigData(RefrigNum).getSatDensity(state, Temperature, Quality, CalledFrom); + } + //***************************************************************************** + Real64 RefrigerantData::getSatSpecificHeat(EnergyPlusData &state, + Real64 const Temperature, // actual temperature given as input + Real64 const Quality, // actual quality given as input + std::string_view const CalledFrom // routine this function was called from (error messages) + ) + { + + // SUBROUTINE INFORMATION: + // AUTHOR Mike Turner + // DATE WRITTEN 10 December 99 + // MODIFIED Rick Strand (April 2000, May 2000) + // Simon Rees (May 2002) + + // PURPOSE OF THIS SUBROUTINE: + // This finds specific heat for given temperature and a quality under the vapor dome. + // This fucntion is only called with a valid refrigerant and quality between 0 and 1. + + // METHODOLOGY EMPLOYED: + // Calls GetInterpolatedSatProp to linearly interpolate between the saturated + // liquid and vapour specific heats according to the given quality. + + // FUNCTION PARAMETER DEFINITIONS: + static constexpr std::string_view routineName = "RefrigerantData::getSatSpecificHeat"; + + if ((Quality < 0.0) || (Quality > 1.0)) { + ShowSevereError(state, fmt::format("{}: Refrigerant \"{}\", invalid quality, called from {}", routineName, this->Name, CalledFrom)); + ShowContinueError(state, format("Saturated density quality must be between 0 and 1, entered value=[{:.4R}].", Quality)); + ShowFatalError(state, "Program terminates due to preceding condition."); + } + + // Apply linear interpolation function + return GetInterpolatedSatProp(state, + Temperature, + this->CpTemps, + this->CpfValues, + this->CpfgValues, + Quality, + CalledFrom, + this->CpfLowTempIndex, + this->CpfHighTempIndex); + + } + Real64 GetSatSpecificHeatRefrig(EnergyPlusData &state, std::string_view const Refrigerant, // carries in substance name Real64 const Temperature, // actual temperature given as input @@ -6034,21 +6168,18 @@ namespace Fluid { // Calls GetInterpolatedSatProp to linearly interpolate between the saturated // liquid and vapour specific heats according to the given quality. - // Return value - Real64 ReturnValue; - // FUNCTION PARAMETER DEFINITIONS: static constexpr std::string_view RoutineName("GetSatSpecificHeatRefrig: "); - if (state.dataFluid->GetInput) { + if (state.dataFluidProperties->GetInput) { GetFluidPropertiesData(state); - state.dataFluid->GetInput = false; + state.dataFluidProperties->GetInput = false; } int RefrigNum = 0; - if (state.dataFluid->NumOfRefrigerants == 0) { + if (state.dataFluidProperties->NumOfRefrigerants == 0) { ReportFatalRefrigerantErrors( - state, state.dataFluid->NumOfRefrigerants, RefrigNum, true, Refrigerant, "GetSatSpecificHeatRefrig", "properties", CalledFrom); + state, state.dataFluidProperties->NumOfRefrigerants, RefrigNum, true, Refrigerant, "GetSatSpecificHeatRefrig", "properties", CalledFrom); } if ((Quality < 0.0) || (Quality > 1.0)) { @@ -6063,10 +6194,10 @@ namespace Fluid { RefrigNum = RefrigIndex; } else { // Find which refrigerant (index) is being requested - RefrigNum = FindRefrigerant(state, Refrigerant); + RefrigNum = GetRefrigNum(state, Refrigerant); if (RefrigNum == 0) { ReportFatalRefrigerantErrors(state, - state.dataFluid->NumOfRefrigerants, + state.dataFluidProperties->NumOfRefrigerants, RefrigNum, true, Refrigerant, @@ -6076,30 +6207,16 @@ namespace Fluid { } RefrigIndex = RefrigNum; } - auto const &refrig(state.dataFluid->RefrigData(RefrigNum)); - - // Apply linear interpolation function - ReturnValue = GetInterpolatedSatProp(state, - Temperature, - refrig.CpTemps, - refrig.CpfValues, - refrig.CpfgValues, - Quality, - CalledFrom, - refrig.CpfLowTempIndex, - refrig.CpfHighTempIndex); - return ReturnValue; + return state.dataFluidProperties->RefrigData(RefrigNum).getSatSpecificHeat(state, Temperature, Quality, CalledFrom); } //***************************************************************************** - Real64 GetSupHeatEnthalpyRefrig(EnergyPlusData &state, - std::string_view const Refrigerant, // carries in substance name - Real64 const Temperature, // actual temperature given as input - Real64 const Pressure, // actual pressure given as input - int &RefrigIndex, // Index to Refrigerant Properties - std::string_view const CalledFrom // routine this function was called from (error messages) + Real64 RefrigerantData::getSupHeatEnthalpy(EnergyPlusData &state, + Real64 const Temperature, // actual temperature given as input + Real64 const Pressure, // actual pressure given as input + std::string_view const CalledFrom // routine this function was called from (error messages) ) { @@ -6129,65 +6246,29 @@ namespace Fluid { Real64 ReturnValue; // FUNCTION PARAMETER DEFINITIONS: - static constexpr std::string_view RoutineName("GetSupHeatEnthalpyRefrig: "); - static constexpr std::string_view RoutineNameNoSpace("GetSupHeatEnthalpyRefrig:"); - static constexpr std::string_view RoutineNameNoColon("GetSupHeatEnthalpyRefrig"); - - // SUBROUTINE LOCAL VARIABLE DECLARATIONS: - Real64 PressInterpRatio; // Interpolation factor w.r.t pressure - Real64 TempInterpRatio; // Interpolation factor w.r.t temperature - Real64 EnthalpyHigh; // Enthalpy value at interpolated pressure and high temperature - Real64 EnthalpyLow; // Enthalpy value at interpolated pressure and low temperature - Real64 LoTempLoEnthalpy; // Enthalpy value at low pressure and low temperature - Real64 LoTempHiEnthalpy; // Enthalpy value at high pressure and low temperature - Real64 HiTempLoEnthalpy; // Enthalpy value at low pressure and high temperature - Real64 HiTempHiEnthalpy; // Enthalpy value at high pressure and high temperature + static constexpr std::string_view routineName = "RefrigerantData::getSupHeatEnthalpy"; int HiTempIndex; // high temperature index value int HiPressIndex; // high pressure index value - // see if data is there - if (state.dataFluid->GetInput) { - GetFluidPropertiesData(state); - state.dataFluid->GetInput = false; - } - - int RefrigNum = 0; - if (state.dataFluid->NumOfRefrigerants == 0) { - ReportFatalRefrigerantErrors( - state, state.dataFluid->NumOfRefrigerants, RefrigNum, true, Refrigerant, RoutineNameNoColon, "properties", CalledFrom); - } + // SUBROUTINE LOCAL VARIABLE DECLARATIONS: + Real64 PressInterpRatio; // Interpolation factor w.r.t pressure + Real64 TempInterpRatio; // Interpolation factor w.r.t temperature // error counters and dummy string int ErrCount = 0; int CurTempRangeErrCount = 0; int CurPresRangeErrCount = 0; - // Find which refrigerant (index) is being requested and then determine - // where the temperature and pressure are within the temperature and - // pressure arrays, respectively - if (RefrigIndex > 0) { - RefrigNum = RefrigIndex; - } else { - // Find which refrigerant (index) is being requested - RefrigNum = FindRefrigerant(state, Refrigerant); - if (RefrigNum == 0) { - ReportFatalRefrigerantErrors( - state, state.dataFluid->NumOfRefrigerants, RefrigNum, true, Refrigerant, RoutineNameNoColon, "properties", CalledFrom); - } - RefrigIndex = RefrigNum; - } - auto const &refrig(state.dataFluid->RefrigData(RefrigNum)); - // low index value of Temperature from table - int TempIndex = FindArrayIndex(Temperature, refrig.SHTemps, 1, refrig.NumSuperTempPts); + int TempIndex = FindArrayIndex(Temperature, this->SHTemps, 1, this->NumSuperTempPts); // low index value of Pressure from table - int LoPressIndex = FindArrayIndex(Pressure, refrig.SHPress, 1, refrig.NumSuperPressPts); + int LoPressIndex = FindArrayIndex(Pressure, this->SHPress, 1, this->NumSuperPressPts); // check temperature data range and attempt to cap if necessary - if ((TempIndex > 0) && (TempIndex < refrig.NumSuperTempPts)) { // in range + if ((TempIndex > 0) && (TempIndex < this->NumSuperTempPts)) { // in range HiTempIndex = TempIndex + 1; - TempInterpRatio = (Temperature - refrig.SHTemps(TempIndex)) / (refrig.SHTemps(HiTempIndex) - refrig.SHTemps(TempIndex)); + TempInterpRatio = (Temperature - this->SHTemps(TempIndex)) / (this->SHTemps(HiTempIndex) - this->SHTemps(TempIndex)); } else if (TempIndex < 1) { ++CurTempRangeErrCount; ++ErrCount; @@ -6203,9 +6284,9 @@ namespace Fluid { } // check pressure data range and attempt to cap if necessary - if ((LoPressIndex > 0) && (LoPressIndex < refrig.NumSuperPressPts)) { // in range + if ((LoPressIndex > 0) && (LoPressIndex < this->NumSuperPressPts)) { // in range HiPressIndex = LoPressIndex + 1; - PressInterpRatio = (Pressure - refrig.SHPress(LoPressIndex)) / (refrig.SHPress(HiPressIndex) - refrig.SHPress(LoPressIndex)); + PressInterpRatio = (Pressure - this->SHPress(LoPressIndex)) / (this->SHPress(HiPressIndex) - this->SHPress(LoPressIndex)); } else if (LoPressIndex < 1) { ++CurPresRangeErrCount; ++ErrCount; @@ -6221,52 +6302,52 @@ namespace Fluid { } // get interpolation point values - LoTempLoEnthalpy = refrig.HshValues(LoPressIndex, TempIndex); - LoTempHiEnthalpy = refrig.HshValues(HiPressIndex, TempIndex); - HiTempLoEnthalpy = refrig.HshValues(LoPressIndex, HiTempIndex); - HiTempHiEnthalpy = refrig.HshValues(HiPressIndex, HiTempIndex); + Real64 LoTempLoEnthalpy = this->HshValues(LoPressIndex, TempIndex); + Real64 LoTempHiEnthalpy = this->HshValues(HiPressIndex, TempIndex); + Real64 HiTempLoEnthalpy = this->HshValues(LoPressIndex, HiTempIndex); + Real64 HiTempHiEnthalpy = this->HshValues(HiPressIndex, HiTempIndex); // to give reasonable interpolation near saturation reset any point with zero value // in table to saturation value if (LoTempLoEnthalpy <= 0.0) { - LoTempLoEnthalpy = GetSatEnthalpyRefrig(state, Refrigerant, Temperature, 1.0, RefrigNum, RoutineNameNoColon); + LoTempLoEnthalpy = this->getSatEnthalpy(state, Temperature, 1.0, routineName); } if (LoTempHiEnthalpy <= 0.0) { - LoTempHiEnthalpy = GetSatEnthalpyRefrig(state, Refrigerant, Temperature, 1.0, RefrigNum, RoutineNameNoColon); + LoTempHiEnthalpy = this->getSatEnthalpy(state, Temperature, 1.0, routineName); } if (HiTempLoEnthalpy <= 0.0) { - HiTempLoEnthalpy = GetSatEnthalpyRefrig(state, Refrigerant, Temperature, 1.0, RefrigNum, RoutineNameNoColon); + HiTempLoEnthalpy = this->getSatEnthalpy(state, Temperature, 1.0, routineName); } if (HiTempHiEnthalpy <= 0.0) { - HiTempHiEnthalpy = GetSatEnthalpyRefrig(state, Refrigerant, Temperature, 1.0, RefrigNum, RoutineNameNoColon); + HiTempHiEnthalpy = this->getSatEnthalpy(state, Temperature, 1.0, routineName); } // interpolate w.r.t. pressure - EnthalpyLow = PressInterpRatio * LoTempHiEnthalpy + (1.0 - PressInterpRatio) * LoTempLoEnthalpy; + Real64 EnthalpyLow = PressInterpRatio * LoTempHiEnthalpy + (1.0 - PressInterpRatio) * LoTempLoEnthalpy; - EnthalpyHigh = PressInterpRatio * HiTempHiEnthalpy + (1.0 - PressInterpRatio) * HiTempLoEnthalpy; + Real64 EnthalpyHigh = PressInterpRatio * HiTempHiEnthalpy + (1.0 - PressInterpRatio) * HiTempLoEnthalpy; // interpolate w.r.t. temperature ReturnValue = TempInterpRatio * EnthalpyHigh + (1.0 - TempInterpRatio) * EnthalpyLow; // Check to see if all data is at zero. In this case we are completely // inside the saturation dome. Best thing we can do is return saturation value - if ((refrig.HshValues(LoPressIndex, TempIndex) <= 0.0) && (refrig.HshValues(HiPressIndex, TempIndex) <= 0.0) && - (refrig.HshValues(LoPressIndex, HiTempIndex) <= 0.0) && (refrig.HshValues(HiPressIndex, HiTempIndex) <= 0.0)) { - ++state.dataFluid->SatErrCountGetSupHeatEnthalpyRefrig; + if ((this->HshValues(LoPressIndex, TempIndex) <= 0.0) && (this->HshValues(HiPressIndex, TempIndex) <= 0.0) && + (this->HshValues(LoPressIndex, HiTempIndex) <= 0.0) && (this->HshValues(HiPressIndex, HiTempIndex) <= 0.0)) { + ++state.dataFluidProperties->SatErrCountGetSupHeatEnthalpyRefrig; // set return value - ReturnValue = GetSatEnthalpyRefrig(state, Refrigerant, Temperature, 1.0, RefrigNum, fmt::format("{}{}", RoutineNameNoSpace, CalledFrom)); + ReturnValue = this->getSatEnthalpy(state, Temperature, 1.0, fmt::format("{}:{}", routineName, CalledFrom)); // send warning if (!state.dataGlobal->WarmupFlag) { - state.dataFluid->RefrigErrorTracking(RefrigNum).SatSupEnthalpyErrCount += - state.dataFluid->SatErrCountGetSupHeatEnthalpyRefrig; + auto &refrigError = state.dataFluidProperties->RefrigErrorTracking(this->Num); + refrigError.SatSupEnthalpyErrCount += state.dataFluidProperties->SatErrCountGetSupHeatEnthalpyRefrig; // send warning - if (state.dataFluid->RefrigErrorTracking(RefrigNum).SatTempDensityErrCount <= state.dataFluid->RefrigerantErrorLimitTest) { + if (refrigError.SatTempDensityErrCount <= state.dataFluidProperties->RefrigerantErrorLimitTest) { ShowWarningMessage( state, - format("{}Refrigerant [{}] is saturated at the given conditions, saturated enthalpy at given temperature returned. **", - RoutineName, - state.dataFluid->RefrigErrorTracking(RefrigNum).Name)); + format("{}: Refrigerant [{}] is saturated at the given conditions, saturated enthalpy at given temperature returned. **", + routineName, + refrigError.Name)); ShowContinueError(state, fmt::format("...Called From:{}", CalledFrom)); ShowContinueError(state, format("Refrigerant temperature = {:.2R}", Temperature)); ShowContinueError(state, format("Refrigerant pressure = {:.0R}", Pressure)); @@ -6274,10 +6355,8 @@ namespace Fluid { ShowContinueErrorTimeStamp(state, ""); } ShowRecurringWarningErrorAtEnd(state, - std::string{RoutineName} + "Refrigerant [" + - state.dataFluid->RefrigErrorTracking(RefrigNum).Name + - "] saturated at the given conditions **", - state.dataFluid->RefrigErrorTracking(RefrigNum).SatSupEnthalpyErrIndex, + format("{}: Refrigerant [{}] saturated at the given conditions **", routineName, refrigError.Name), + refrigError.SatSupEnthalpyErrIndex, Temperature, Temperature, _, @@ -6291,22 +6370,22 @@ namespace Fluid { // some checks... if (ErrCount > 0) { // send temp range error if flagged - state.dataFluid->RefrigErrorTracking(RefrigNum).SatSupEnthalpyTempErrCount += CurTempRangeErrCount; - if (CurTempRangeErrCount > 0 && state.dataFluid->RefrigErrorTracking(RefrigNum).SatSupEnthalpyTempErrCount <= - state.dataFluid->RefrigerantErrorLimitTest) { + auto &refrigError = state.dataFluidProperties->RefrigErrorTracking(this->Num); + refrigError.SatSupEnthalpyTempErrCount += CurTempRangeErrCount; + if (CurTempRangeErrCount > 0 && refrigError.SatSupEnthalpyTempErrCount <= state.dataFluidProperties->RefrigerantErrorLimitTest) { ShowWarningMessage(state, - format("{}Refrigerant [{}] Temperature is out of range for superheated refrigerant enthalpy: values capped **", - RoutineName, - state.dataFluid->RefrigErrorTracking(RefrigNum).Name)); + format("{}: Refrigerant [{}] Temperature is out of range for superheated refrigerant enthalpy: values capped **", + routineName, + refrigError.Name)); ShowContinueError(state, fmt::format(" Called From:{}", CalledFrom)); ShowContinueErrorTimeStamp(state, ""); } if (CurTempRangeErrCount > 0) { ShowRecurringWarningErrorAtEnd(state, - std::string{RoutineName} + "Refrigerant [" + - state.dataFluid->RefrigErrorTracking(RefrigNum).Name + - "] Temperature is out of range for superheated refrigerant enthalpy: values capped **", - state.dataFluid->RefrigErrorTracking(RefrigNum).SatSupEnthalpyTempErrIndex, + format("{}: Refrigerant [{}] Temperature is out of range for superheated refrigerant enthalpy: values capped **", + routineName, + refrigError.Name), + refrigError.SatSupEnthalpyTempErrIndex, Temperature, Temperature, _, @@ -6315,22 +6394,19 @@ namespace Fluid { } // send pressure range error if flagged - state.dataFluid->RefrigErrorTracking(RefrigNum).SatSupEnthalpyPresErrCount += CurPresRangeErrCount; - if (CurPresRangeErrCount > 0 && state.dataFluid->RefrigErrorTracking(RefrigNum).SatSupEnthalpyPresErrCount <= - state.dataFluid->RefrigerantErrorLimitTest) { + refrigError.SatSupEnthalpyPresErrCount += CurPresRangeErrCount; + if (CurPresRangeErrCount > 0 && refrigError.SatSupEnthalpyPresErrCount <= state.dataFluidProperties->RefrigerantErrorLimitTest) { ShowWarningMessage(state, - format("{}Refrigerant [{}] Pressure is out of range for superheated refrigerant enthalpy: values capped **", - RoutineName, - state.dataFluid->RefrigErrorTracking(RefrigNum).Name)); + format("{}: Refrigerant [{}] Pressure is out of range for superheated refrigerant enthalpy: values capped **", + routineName, + refrigError.Name)); ShowContinueError(state, fmt::format(" Called From:{}", CalledFrom)); ShowContinueErrorTimeStamp(state, ""); } if (CurPresRangeErrCount > 0) { ShowRecurringWarningErrorAtEnd(state, - std::string{RoutineName} + "Refrigerant [" + - state.dataFluid->RefrigErrorTracking(RefrigNum).Name + - "] Pressure is out of range for superheated refrigerant enthalpy: values capped **", - state.dataFluid->RefrigErrorTracking(RefrigNum).SatSupEnthalpyPresErrIndex, + format("{}: Refrigerant [{}] Pressure is out of range for superheated refrigerant enthalpy: values capped **", routineName, refrigError.Name), + refrigError.SatSupEnthalpyPresErrIndex, Pressure, Pressure, _, @@ -6343,14 +6419,76 @@ namespace Fluid { return ReturnValue; } + Real64 GetSupHeatEnthalpyRefrig(EnergyPlusData &state, + std::string_view const Refrigerant, // carries in substance name + Real64 const Temperature, // actual temperature given as input + Real64 const Pressure, // actual pressure given as input + int &RefrigIndex, // Index to Refrigerant Properties + std::string_view const CalledFrom // routine this function was called from (error messages) + ) + { + + // SUBROUTINE INFORMATION: + // AUTHOR Mike Turner + // DATE WRITTEN 10 December 99 + // MODIFIED Rick Strand (April 2000, May 2000) + // MODIFIED Simon Rees (May 2002) + + // PURPOSE OF THIS SUBROUTINE: + // Performs linear interpolation between pressures and temperatures and + // returns enthalpy values. Works only in superheated region. + + // METHODOLOGY EMPLOYED: + // Double linear interpolation is used with enthalpy values at four + // pressure/temperature input points surrounding the given temperature + // and pressure argument values. + // With enthalpy data it is assumed that zero values in the data are in + // the saturated region. Hence, values near the saturation line are + // approximated using the saturation value instead of the zero data value. + // points completely in the saturation region are given the saturation value + // at the given temperature. Points at the upper limits of pressure/temperature + // have the pressure/temperature capped. Warnings are given if the point + // is not clearly in the bounds of the superheated data. + + // FUNCTION PARAMETER DEFINITIONS: + static constexpr std::string_view routineName = "GetSupHeatEnthalpyRefrig"; + + // see if data is there + if (state.dataFluidProperties->GetInput) { + GetFluidPropertiesData(state); + state.dataFluidProperties->GetInput = false; + } + + int RefrigNum = 0; + if (state.dataFluidProperties->NumOfRefrigerants == 0) { + ReportFatalRefrigerantErrors( + state, state.dataFluidProperties->NumOfRefrigerants, RefrigNum, true, Refrigerant, routineName, "properties", CalledFrom); + } + + // Find which refrigerant (index) is being requested and then determine + // where the temperature and pressure are within the temperature and + // pressure arrays, respectively + if (RefrigIndex > 0) { + RefrigNum = RefrigIndex; + } else { + // Find which refrigerant (index) is being requested + RefrigNum = GetRefrigNum(state, Refrigerant); + if (RefrigNum == 0) { + ReportFatalRefrigerantErrors( + state, state.dataFluidProperties->NumOfRefrigerants, RefrigNum, true, Refrigerant, routineName, "properties", CalledFrom); + } + RefrigIndex = RefrigNum; + } + + return state.dataFluidProperties->RefrigData(RefrigNum).getSupHeatEnthalpy(state, Temperature, Pressure, CalledFrom); + } + //***************************************************************************** - Real64 GetSupHeatPressureRefrig(EnergyPlusData &state, - std::string const &Refrigerant, // carries in substance name - Real64 const Temperature, // actual temperature given as input - Real64 const Enthalpy, // actual enthalpy given as input - int &RefrigIndex, // Index to Refrigerant Properties - std::string_view const CalledFrom // routine this function was called from (error messages) + Real64 RefrigerantData::getSupHeatPressure(EnergyPlusData &state, + Real64 const Temperature, // actual temperature given as input + Real64 const Enthalpy, // actual enthalpy given as input + std::string_view const CalledFrom // routine this function was called from (error messages) ) { @@ -6380,8 +6518,7 @@ namespace Fluid { // FUNCTION PARAMETERS: // the enthalpy calculated from the pressure found - static constexpr std::string_view RoutineName("GetSupHeatPressureRefrig: "); - static constexpr std::string_view RoutineNameNoSpace("GetSupHeatPressureRefrig:"); + static constexpr std::string_view routineName = "GetSupHeatPressureRefrig"; // SUBROUTINE LOCAL VARIABLE DECLARATIONS: Real64 EnthalpyCheck; // recalculates enthalpy based on calculated pressure @@ -6394,53 +6531,21 @@ namespace Fluid { int middle; // mid-point for interval halving - int HiTempIndex; // Index value of higher temperature from data - int LoEnthalpyIndex; // Index value of lower enthalpy from data - int HiEnthalpyIndex; // Index value of higher enthalpy from data - - if (state.dataFluid->GetInput) { - GetFluidPropertiesData(state); - state.dataFluid->GetInput = false; - } - - int RefrigNum = 0; - if (state.dataFluid->NumOfRefrigerants == 0) { - ReportFatalRefrigerantErrors( - state, state.dataFluid->NumOfRefrigerants, RefrigNum, true, Refrigerant, "GetSupHeatPressureRefrig", "properties", CalledFrom); - } - - // error counters and dummy string - int ErrCount = 0; - int CurTempRangeErrCount = 0; - int CurEnthalpyRangeErrCount = 0; - int CurSatErrCount = 0; - - // Find which refrigerant (index) is being requested and then determine - // where the temperature is within the temperature array - if (RefrigIndex > 0) { - RefrigNum = RefrigIndex; - } else { - // Find which refrigerant (index) is being requested - RefrigNum = FindRefrigerant(state, Refrigerant); - if (RefrigNum == 0) { - ReportFatalRefrigerantErrors(state, - state.dataFluid->NumOfRefrigerants, - RefrigNum, - true, - Refrigerant, - "GetSupHeatPressureRefrig", - "properties", - CalledFrom); - } - RefrigIndex = RefrigNum; - } - auto const &refrig(state.dataFluid->RefrigData(RefrigNum)); + int HiTempIndex; // Index value of higher temperature from data + int LoEnthalpyIndex; // Index value of lower enthalpy from data + int HiEnthalpyIndex; // Index value of higher enthalpy from data + + // error counters and dummy string + int ErrCount = 0; + int CurTempRangeErrCount = 0; + int CurEnthalpyRangeErrCount = 0; + int CurSatErrCount = 0; // Index value of lower temperature from data - int LoTempIndex = FindArrayIndex(Temperature, refrig.SHTemps, 1, refrig.NumSuperTempPts); + int LoTempIndex = FindArrayIndex(Temperature, this->SHTemps, 1, this->NumSuperTempPts); // check temperature data range and attempt to cap if necessary - if ((LoTempIndex > 0) && (LoTempIndex < refrig.NumSuperTempPts)) { // in range + if ((LoTempIndex > 0) && (LoTempIndex < this->NumSuperTempPts)) { // in range HiTempIndex = LoTempIndex + 1; } else if (LoTempIndex < 1) { // below lower bound ++CurTempRangeErrCount; @@ -6452,25 +6557,25 @@ namespace Fluid { } // check for lowest non-zero value in lower temp data - int LoTempStart = refrig.NumSuperPressPts; - for (int Loop = 1; Loop <= refrig.NumSuperPressPts; ++Loop) { - if (refrig.HshValues(Loop, LoTempIndex) > 0.0) { + int LoTempStart = this->NumSuperPressPts; + for (int Loop = 1; Loop <= this->NumSuperPressPts; ++Loop) { + if (this->HshValues(Loop, LoTempIndex) > 0.0) { LoTempStart = Loop; break; } } // check for highest non-zero value in lower temp data int LoTempFinish = 1; - for (int Loop = refrig.NumSuperPressPts; Loop >= 1; --Loop) { - if (refrig.HshValues(Loop, LoTempIndex) <= 0.0) { + for (int Loop = this->NumSuperPressPts; Loop >= 1; --Loop) { + if (this->HshValues(Loop, LoTempIndex) <= 0.0) { LoTempFinish = Loop; // EXIT } } // check for lowest non-zero value in high temp data - int HiTempStart = refrig.NumSuperPressPts; - for (int Loop = 1; Loop <= refrig.NumSuperPressPts; ++Loop) { - if (refrig.HshValues(Loop, HiTempIndex) > 0.0) { + int HiTempStart = this->NumSuperPressPts; + for (int Loop = 1; Loop <= this->NumSuperPressPts; ++Loop) { + if (this->HshValues(Loop, HiTempIndex) > 0.0) { HiTempStart = Loop; break; } @@ -6478,8 +6583,8 @@ namespace Fluid { // check for highest non-zero value in high temp data int HiTempFinish = 1; - for (int Loop = refrig.NumSuperPressPts; Loop >= 1; --Loop) { - if (refrig.HshValues(Loop, HiTempIndex) <= 0.0) { + for (int Loop = this->NumSuperPressPts; Loop >= 1; --Loop) { + if (this->HshValues(Loop, HiTempIndex) <= 0.0) { HiTempFinish = Loop; } } @@ -6490,17 +6595,17 @@ namespace Fluid { int TempFinish = min(LoTempFinish, HiTempFinish); // calculate interpolation ratio w.r.t temperature // This ratio is used to find enthalpies at the given temperature - Real64 TempInterpRatio = (Temperature - refrig.SHTemps(LoTempIndex)) / (refrig.SHTemps(HiTempIndex) - refrig.SHTemps(LoTempIndex)); + Real64 TempInterpRatio = (Temperature - this->SHTemps(LoTempIndex)) / (this->SHTemps(HiTempIndex) - this->SHTemps(LoTempIndex)); // search for array index by bisection int start = TempStart; // set the bounds int finish = TempFinish; // find the bounds of the enthalpy data available - EnthalpyMax = max(refrig.HshValues(TempStart, LoTempIndex), refrig.HshValues(TempStart, HiTempIndex)); - EnthalpyMin = min(refrig.HshValues(TempFinish, LoTempIndex), refrig.HshValues(TempFinish, HiTempIndex)); + EnthalpyMax = max(this->HshValues(TempStart, LoTempIndex), this->HshValues(TempStart, HiTempIndex)); + EnthalpyMin = min(this->HshValues(TempFinish, LoTempIndex), this->HshValues(TempFinish, HiTempIndex)); // get saturated enthalpy for checking - SatEnthalpy = GetSatEnthalpyRefrig(state, Refrigerant, Temperature, 1.0, RefrigNum, fmt::format("{}{}", RoutineNameNoSpace, CalledFrom)); + SatEnthalpy = this->getSatEnthalpy(state, Temperature, 1.0, fmt::format("{}:{}", routineName, CalledFrom)); // make some checks on the data before interpolating if (Enthalpy < SatEnthalpy) { @@ -6508,7 +6613,7 @@ namespace Fluid { ++CurSatErrCount; ++ErrCount; // return sat pressure at this temperature - ReturnValue = GetSatPressureRefrig(state, Refrigerant, Temperature, RefrigNum, fmt::format("{}{}", RoutineNameNoSpace, CalledFrom)); + ReturnValue = this->getSatPressure(state, Temperature, fmt::format("{}:{}", routineName, CalledFrom)); } else if (EnthalpyMax < Enthalpy || EnthalpyMin > Enthalpy) { // out of range error @@ -6516,10 +6621,10 @@ namespace Fluid { ++ErrCount; if (Enthalpy > EnthalpyMax) { // return min pressure - ReturnValue = refrig.SHPress(HiTempStart); + ReturnValue = this->SHPress(HiTempStart); } else { // return max pressure - ReturnValue = refrig.SHPress(LoTempFinish); + ReturnValue = this->SHPress(LoTempFinish); } } else { // go ahead and search @@ -6527,8 +6632,8 @@ namespace Fluid { middle = (finish + start) / 2; // calc enthalpy at middle index for given temperature - EnthalpyCheck = refrig.HshValues(middle, LoTempIndex) + - TempInterpRatio * (refrig.HshValues(middle, HiTempIndex) - refrig.HshValues(middle, LoTempIndex)); + EnthalpyCheck = this->HshValues(middle, LoTempIndex) + + TempInterpRatio * (this->HshValues(middle, HiTempIndex) - this->HshValues(middle, LoTempIndex)); if (Enthalpy < EnthalpyCheck) { start = middle; @@ -6540,29 +6645,30 @@ namespace Fluid { HiEnthalpyIndex = start + 1; // calculate enthalpies adjacent specified enthalpy at given temperature - EnthalpyLow = refrig.HshValues(LoEnthalpyIndex, LoTempIndex) + - TempInterpRatio * (refrig.HshValues(LoEnthalpyIndex, HiTempIndex) - refrig.HshValues(LoEnthalpyIndex, LoTempIndex)); + EnthalpyLow = this->HshValues(LoEnthalpyIndex, LoTempIndex) + + TempInterpRatio * (this->HshValues(LoEnthalpyIndex, HiTempIndex) - this->HshValues(LoEnthalpyIndex, LoTempIndex)); - EnthalpyHigh = refrig.HshValues(HiEnthalpyIndex, LoTempIndex) + - TempInterpRatio * (refrig.HshValues(HiEnthalpyIndex, HiTempIndex) - refrig.HshValues(HiEnthalpyIndex, LoTempIndex)); + EnthalpyHigh = this->HshValues(HiEnthalpyIndex, LoTempIndex) + + TempInterpRatio * (this->HshValues(HiEnthalpyIndex, HiTempIndex) - this->HshValues(HiEnthalpyIndex, LoTempIndex)); // calculate an interpolation ratio EnthInterpRatio = (Enthalpy - EnthalpyLow) / (EnthalpyHigh - EnthalpyLow); // apply this interpolation ratio to find the final pressure - ReturnValue = refrig.SHPress(LoEnthalpyIndex) + EnthInterpRatio * (refrig.SHPress(HiEnthalpyIndex) - refrig.SHPress(LoEnthalpyIndex)); + ReturnValue = this->SHPress(LoEnthalpyIndex) + EnthInterpRatio * (this->SHPress(HiEnthalpyIndex) - this->SHPress(LoEnthalpyIndex)); } if (!state.dataGlobal->WarmupFlag) { // ** make error checks ** if (ErrCount > 0) { // send near saturation warning if flagged - state.dataFluid->RefrigErrorTracking(RefrigNum).SatSupPressureErrCount += CurSatErrCount; + auto &refrigError = state.dataFluidProperties->RefrigErrorTracking(this->Num); + refrigError.SatSupPressureErrCount += CurSatErrCount; // send warning - if (state.dataFluid->RefrigErrorTracking(RefrigNum).SatSupPressureErrCount <= state.dataFluid->RefrigerantErrorLimitTest) { + if (refrigError.SatSupPressureErrCount <= state.dataFluidProperties->RefrigerantErrorLimitTest) { ShowSevereMessage(state, - format("{}Refrigerant [{}] is saturated at the given enthalpy and temperature, saturated enthalpy at given " + format("{}: Refrigerant [{}] is saturated at the given enthalpy and temperature, saturated enthalpy at given " "temperature returned. **", - RoutineName, - state.dataFluid->RefrigErrorTracking(RefrigNum).Name)); + routineName, + refrigError.Name)); ShowContinueError(state, fmt::format("...Called From:{}", CalledFrom)); ShowContinueError(state, format("Refrigerant temperature = {:.2R}", Temperature)); ShowContinueError(state, format("Refrigerant Enthalpy = {:.3R}", Enthalpy)); @@ -6571,10 +6677,8 @@ namespace Fluid { } if (CurSatErrCount > 0) { ShowRecurringSevereErrorAtEnd(state, - std::string{RoutineName} + "Refrigerant [" + - state.dataFluid->RefrigErrorTracking(RefrigNum).Name + - "] saturated at the given enthalpy and temperature **", - state.dataFluid->RefrigErrorTracking(RefrigNum).SatSupPressureErrIndex, + format("{}: Refrigerant [{}] saturated at the given enthalpy and temperature **", routineName, refrigError.Name), + refrigError.SatSupPressureErrIndex, ReturnValue, ReturnValue, _, @@ -6583,22 +6687,19 @@ namespace Fluid { } // send temp range error if flagged - state.dataFluid->RefrigErrorTracking(RefrigNum).SatSupPressureTempErrCount += CurTempRangeErrCount; - if (CurTempRangeErrCount > 0 && state.dataFluid->RefrigErrorTracking(RefrigNum).SatSupPressureTempErrCount <= - state.dataFluid->RefrigerantErrorLimitTest) { + refrigError.SatSupPressureTempErrCount += CurTempRangeErrCount; + if (CurTempRangeErrCount > 0 && refrigError.SatSupPressureTempErrCount <= state.dataFluidProperties->RefrigerantErrorLimitTest) { ShowWarningMessage(state, - format("{}Refrigerant [{}] Temperature is out of range for superheated refrigerant pressure: values capped **", - RoutineName, - state.dataFluid->RefrigErrorTracking(RefrigNum).Name)); + format("{}: Refrigerant [{}] Temperature is out of range for superheated refrigerant pressure: values capped **", + routineName, + refrigError.Name)); ShowContinueError(state, fmt::format(" Called From:{}", CalledFrom)); ShowContinueErrorTimeStamp(state, ""); } if (CurTempRangeErrCount > 0) { ShowRecurringWarningErrorAtEnd(state, - std::string{RoutineName} + "Refrigerant [" + - state.dataFluid->RefrigErrorTracking(RefrigNum).Name + - "] Temperature is out of range for superheated refrigerant pressure: values capped **", - state.dataFluid->RefrigErrorTracking(RefrigNum).SatSupPressureTempErrIndex, + format("{}: Refrigerant [{}] Temperature is out of range for superheated refrigerant pressure: values capped **", routineName, refrigError.Name), + refrigError.SatSupPressureTempErrIndex, Temperature, Temperature, _, @@ -6607,22 +6708,19 @@ namespace Fluid { } // send enthalpy range error if flagged - state.dataFluid->RefrigErrorTracking(RefrigNum).SatSupPressureEnthErrCount += CurEnthalpyRangeErrCount; - if (CurEnthalpyRangeErrCount > 0 && state.dataFluid->RefrigErrorTracking(RefrigNum).SatSupPressureEnthErrCount <= - state.dataFluid->RefrigerantErrorLimitTest) { + refrigError.SatSupPressureEnthErrCount += CurEnthalpyRangeErrCount; + if (CurEnthalpyRangeErrCount > 0 && refrigError.SatSupPressureEnthErrCount <= state.dataFluidProperties->RefrigerantErrorLimitTest) { ShowWarningMessage(state, - format("{}Refrigerant [{}] Pressure is out of range for superheated refrigerant enthalpy: values capped **", - RoutineName, - state.dataFluid->RefrigErrorTracking(RefrigNum).Name)); + format("{}: Refrigerant [{}] Pressure is out of range for superheated refrigerant enthalpy: values capped **", + routineName, + refrigError.Name)); ShowContinueError(state, fmt::format(" Called From:{}", CalledFrom)); ShowContinueErrorTimeStamp(state, ""); } if (CurEnthalpyRangeErrCount > 0) { ShowRecurringWarningErrorAtEnd(state, - std::string{RoutineName} + "Refrigerant [" + - state.dataFluid->RefrigErrorTracking(RefrigNum).Name + - "] Pressure is out of range for superheated refrigerant pressure: values capped **", - state.dataFluid->RefrigErrorTracking(RefrigNum).SatSupPressureEnthErrIndex, + format("{}: Refrigerant [{}] Pressure is out of range for superheated refrigerant pressure: values capped **", routineName, refrigError.Name), + refrigError.SatSupPressureEnthErrIndex, Enthalpy, Enthalpy, _, @@ -6635,54 +6733,46 @@ namespace Fluid { return ReturnValue; } - //***************************************************************************** - Real64 GetSupHeatTempRefrig(EnergyPlusData &state, - std::string_view const Refrigerant, // carries in substance name - Real64 const Pressure, // actual pressure given as input - Real64 const Enthalpy, // actual enthalpy given as input - Real64 TempLow, // lower bound of temperature in the iteration - Real64 TempUp, // upper bound of temperature in the iteration - int &RefrigIndex, // Index to Refrigerant Properties - std::string_view const CalledFrom // routine this function was called from (error messages) + Real64 GetSupHeatPressureRefrig(EnergyPlusData &state, + std::string const &Refrigerant, // carries in substance name + Real64 const Temperature, // actual temperature given as input + Real64 const Enthalpy, // actual enthalpy given as input + int &RefrigIndex, // Index to Refrigerant Properties + std::string_view const CalledFrom // routine this function was called from (error messages) ) { + // SUBROUTINE INFORMATION: - // AUTHOR Rongpeng Zhang - // DATE WRITTEN Jan 2016 + // AUTHOR Rick Strand + // DATE WRITTEN May 2000 + // MODIFIED Simon Rees (May 2002) // PURPOSE OF THIS SUBROUTINE: - // Performs iterations to calculate the refrigerant temperature corresponding to the given - // enthalpy and pressure. Works only in superheated region. + // Performs linear interpolation between enthalpy and temperatures and + // returns pressure values. Works only in superheated region. // METHODOLOGY EMPLOYED: - // Perform iterations to identify the temperature by calling GetSupHeatEnthalpyRefrig. - - // Return value - Real64 ReturnValue; - - // FUNCTION PARAMETERS: - // the enthalpy calculated from the pressure found - static constexpr std::string_view RoutineName("GetSupHeatTempRefrig: "); - static constexpr std::string_view RoutineNameNoSpace("GetSupHeatTempRefrig:"); - - // SUBROUTINE LOCAL VARIABLE DECLARATIONS: - int RefrigNum; // index for refrigerant under consideration - Real64 EnthalpyHigh; // Enthalpy value at interpolated pressure and high temperature - Real64 EnthalpyLow; // Enthalpy value at interpolated pressure and low temperature - Real64 RefTHigh; // High Temperature Value for Ps (max in tables) - Real64 RefTSat; // Saturated temperature of the refrigerant. Used to check whether the refrigernat is in the superheat area - Real64 Temp; // Temperature of the superheated refrigerant at the given enthalpy and pressure + // Double linear interpolation is used with pressure values at four + // enthalpy/temperature input points surrounding the given temperature + // and enthalpy argument values. + // All enthalpies have to be calculated at the given temperature before a + // search is made for the data adjacent to the given enthalpy. Linear interpolation + // using the enthalpy data is used to interpolate the correspondng pressures. + // Temperatures and enthalpies outside the bounds of the available data are capped + // and warnings given. For enthlpys lower than the saturated vapour value at the + // given temperature result in the saturation pressure being returned (calls to + // GetSatEnthalpy and GetSatPressure are made.) - if (state.dataFluid->GetInput) { + if (state.dataFluidProperties->GetInput) { GetFluidPropertiesData(state); - state.dataFluid->GetInput = false; + state.dataFluidProperties->GetInput = false; } - RefrigNum = 0; - if (state.dataFluid->NumOfRefrigerants == 0) { + int RefrigNum = 0; + if (state.dataFluidProperties->NumOfRefrigerants == 0) { ReportFatalRefrigerantErrors( - state, state.dataFluid->NumOfRefrigerants, RefrigNum, true, Refrigerant, "GetSupHeatPressureRefrig", "properties", CalledFrom); + state, state.dataFluidProperties->NumOfRefrigerants, RefrigNum, true, Refrigerant, "GetSupHeatPressureRefrig", "properties", CalledFrom); } // Find which refrigerant (index) is being requested and then determine @@ -6691,10 +6781,10 @@ namespace Fluid { RefrigNum = RefrigIndex; } else { // Find which refrigerant (index) is being requested - RefrigNum = FindRefrigerant(state, Refrigerant); + RefrigNum = GetRefrigNum(state, Refrigerant); if (RefrigNum == 0) { ReportFatalRefrigerantErrors(state, - state.dataFluid->NumOfRefrigerants, + state.dataFluidProperties->NumOfRefrigerants, RefrigNum, true, Refrigerant, @@ -6704,26 +6794,65 @@ namespace Fluid { } RefrigIndex = RefrigNum; } - auto const &refrig(state.dataFluid->RefrigData(RefrigNum)); + return state.dataFluidProperties->RefrigData(RefrigNum).getSupHeatPressure(state, Temperature, Enthalpy, CalledFrom); + } + + //***************************************************************************** + + Real64 RefrigerantData::getSupHeatTemp(EnergyPlusData &state, + Real64 const Pressure, // actual pressure given as input + Real64 const Enthalpy, // actual enthalpy given as input + Real64 TempLow, // lower bound of temperature in the iteration + Real64 TempUp, // upper bound of temperature in the iteration + std::string_view const CalledFrom // routine this function was called from (error messages) + ) + { + // SUBROUTINE INFORMATION: + // AUTHOR Rongpeng Zhang + // DATE WRITTEN Jan 2016 + + // PURPOSE OF THIS SUBROUTINE: + // Performs iterations to calculate the refrigerant temperature corresponding to the given + // enthalpy and pressure. Works only in superheated region. + + // METHODOLOGY EMPLOYED: + // Perform iterations to identify the temperature by calling GetSupHeatEnthalpyRefrig. + + // Return value + Real64 ReturnValue; + + // FUNCTION PARAMETERS: + // the enthalpy calculated from the pressure found + static constexpr std::string_view routineName = "GetSupHeatTempRefrig"; + + // SUBROUTINE LOCAL VARIABLE DECLARATIONS: + Real64 EnthalpyHigh; // Enthalpy value at interpolated pressure and high temperature + Real64 EnthalpyLow; // Enthalpy value at interpolated pressure and low temperature + Real64 RefTHigh; // High Temperature Value for Ps (max in tables) + Real64 RefTSat; // Saturated temperature of the refrigerant. Used to check whether the refrigernat is in the superheat area + Real64 Temp; // Temperature of the superheated refrigerant at the given enthalpy and pressure + + auto &refrigError = state.dataFluidProperties->RefrigErrorTracking(this->Num); + // check temperature data range and attempt to cap if necessary - RefTHigh = refrig.PsHighTempValue; - RefTSat = GetSatTemperatureRefrig(state, Refrigerant, Pressure, RefrigNum, fmt::format("{}{}", RoutineNameNoSpace, CalledFrom)); + RefTHigh = this->PsHighTempValue; + RefTSat = this->getSatTemperature(state, Pressure, fmt::format("{}:{}", routineName, CalledFrom)); if (TempLow < RefTSat) { ShowWarningMessage(state, - format("{}Refrigerant [{}] temperature lower bound is out of range for superheated refrigerant: values capped **", - RoutineName, - state.dataFluid->RefrigErrorTracking(RefrigNum).Name)); + format("{}: Refrigerant [{}] temperature lower bound is out of range for superheated refrigerant: values capped **", + routineName, + refrigError.Name)); ShowContinueError(state, fmt::format(" Called From:{}", CalledFrom)); ShowContinueErrorTimeStamp(state, ""); TempLow = RefTSat; } if (TempUp > RefTHigh) { ShowWarningMessage(state, - format("{}Refrigerant [{}] temperature lower bound is out of range for superheated refrigerant: values capped **", - RoutineName, - state.dataFluid->RefrigErrorTracking(RefrigNum).Name)); + format("{}: Refrigerant [{}] temperature lower bound is out of range for superheated refrigerant: values capped **", + routineName, + refrigError.Name)); ShowContinueError(state, fmt::format(" Called From:{}", CalledFrom)); ShowContinueErrorTimeStamp(state, ""); TempUp = RefTHigh; @@ -6731,8 +6860,8 @@ namespace Fluid { if (TempLow >= TempUp) { ShowWarningMessage(state, format("{}Refrigerant [{}] temperature lower bound is out of range for superheated refrigerant: values capped **", - RoutineName, - state.dataFluid->RefrigErrorTracking(RefrigNum).Name)); + routineName, + refrigError.Name)); ShowContinueError(state, fmt::format(" Called From:{}", CalledFrom)); ShowContinueErrorTimeStamp(state, ""); TempLow = RefTSat; @@ -6740,8 +6869,8 @@ namespace Fluid { } // check enthalpy data range and attempt to cap if necessary - EnthalpyLow = GetSupHeatEnthalpyRefrig(state, Refrigerant, TempLow, Pressure, RefrigNum, fmt::format("{}{}", RoutineNameNoSpace, CalledFrom)); - EnthalpyHigh = GetSupHeatEnthalpyRefrig(state, Refrigerant, TempUp, Pressure, RefrigNum, fmt::format("{}{}", RoutineNameNoSpace, CalledFrom)); + EnthalpyLow = this->getSupHeatEnthalpy(state, TempLow, Pressure, fmt::format("{}:{}", routineName, CalledFrom)); + EnthalpyHigh = this->getSupHeatEnthalpy(state, TempUp, Pressure, fmt::format("{}:{}", routineName, CalledFrom)); if (Enthalpy <= EnthalpyLow) { ReturnValue = TempLow; return ReturnValue; @@ -6757,13 +6886,11 @@ namespace Fluid { int constexpr MaxIte(500); // maximum number of iterations int SolFla; // Flag of RegulaFalsi solver - auto f = [&state, RefrigNum, Enthalpy, Pressure](Real64 Temp) { - static constexpr std::string_view RoutineNameNoSpace("GetSupHeatTempRefrigResidual"); + auto f = [&state, this, Enthalpy, Pressure](Real64 Temp) { + static constexpr std::string_view routineName = "GetSupHeatTempRefrigResidual"; Real64 Enthalpy_Req = Enthalpy; - std::string const &Refrigerant = state.dataFluid->RefrigErrorTracking(RefrigNum).Name; if (std::abs(Enthalpy_Req) < 100.0) Enthalpy_Req = sign(100.0, Enthalpy_Req); - int nonConstRefrigNum = RefrigNum; - Real64 Enthalpy_Act = GetSupHeatEnthalpyRefrig(state, Refrigerant, Temp, Pressure, nonConstRefrigNum, RoutineNameNoSpace); + Real64 Enthalpy_Act = this->getSupHeatEnthalpy(state, Temp, Pressure, routineName); return (Enthalpy_Act - Enthalpy_Req) / Enthalpy_Req; }; @@ -6774,14 +6901,67 @@ namespace Fluid { return ReturnValue; } + Real64 GetSupHeatTempRefrig(EnergyPlusData &state, + std::string_view const Refrigerant, // carries in substance name + Real64 const Pressure, // actual pressure given as input + Real64 const Enthalpy, // actual enthalpy given as input + Real64 TempLow, // lower bound of temperature in the iteration + Real64 TempUp, // upper bound of temperature in the iteration + int &RefrigIndex, // Index to Refrigerant Properties + std::string_view const CalledFrom // routine this function was called from (error messages) + ) + { + // SUBROUTINE INFORMATION: + // AUTHOR Rongpeng Zhang + // DATE WRITTEN Jan 2016 + + // PURPOSE OF THIS SUBROUTINE: + // Performs iterations to calculate the refrigerant temperature corresponding to the given + // enthalpy and pressure. Works only in superheated region. + + // METHODOLOGY EMPLOYED: + // Perform iterations to identify the temperature by calling GetSupHeatEnthalpyRefrig. + + if (state.dataFluidProperties->GetInput) { + GetFluidPropertiesData(state); + state.dataFluidProperties->GetInput = false; + } + + int RefrigNum = 0; + if (state.dataFluidProperties->NumOfRefrigerants == 0) { + ReportFatalRefrigerantErrors( + state, state.dataFluidProperties->NumOfRefrigerants, RefrigNum, true, Refrigerant, "GetSupHeatPressureRefrig", "properties", CalledFrom); + } + + // Find which refrigerant (index) is being requested and then determine + // where the temperature is within the temperature array + if (RefrigIndex > 0) { + RefrigNum = RefrigIndex; + } else { + // Find which refrigerant (index) is being requested + RefrigNum = GetRefrigNum(state, Refrigerant); + if (RefrigNum == 0) { + ReportFatalRefrigerantErrors(state, + state.dataFluidProperties->NumOfRefrigerants, + RefrigNum, + true, + Refrigerant, + "GetSupHeatPressureRefrig", + "properties", + CalledFrom); + } + RefrigIndex = RefrigNum; + } + + return state.dataFluidProperties->RefrigData(RefrigNum).getSupHeatTemp(state, Pressure, Enthalpy, TempLow, TempUp, CalledFrom); + } + //***************************************************************************** - Real64 GetSupHeatDensityRefrig(EnergyPlusData &state, - std::string_view const Refrigerant, // carries in substance name - Real64 const Temperature, // actual temperature given as input - Real64 const Pressure, // actual pressure given as input - int &RefrigIndex, // Index to Refrigerant Properties - std::string_view const CalledFrom // routine this function was called from (error messages) + Real64 RefrigerantData::getSupHeatDensity(EnergyPlusData &state, + Real64 const Temperature, // actual temperature given as input + Real64 const Pressure, // actual pressure given as input + std::string_view const CalledFrom // routine this function was called from (error messages) ) { @@ -6811,56 +6991,26 @@ namespace Fluid { Real64 ReturnValue; // FUNCTION PARAMETERS: - static constexpr std::string_view RoutineName("GetSupHeatDensityRefrig"); + static constexpr std::string_view routineName = "RefrigerantData::getSupHeatDensity"; // SUBROUTINE LOCAL VARIABLE DECLARATIONS: Real64 TempInterpRatio; // Interpolation ratio w.r.t temperature Real64 PressInterpRatio; // Interpolation ratio w.r.t pressures - Real64 DensityHigh; // Density value at interpolated pressure and high temperature - Real64 DensityLow; // Density value at interpolated pressure and low temperature int HiTempIndex; // high temperature index value int HiPressIndex; // high pressure index value - // see if data is there - if (state.dataFluid->GetInput) { - GetFluidPropertiesData(state); - state.dataFluid->GetInput = false; - } - - int RefrigNum = 0; - if (state.dataFluid->NumOfRefrigerants == 0) { - ReportFatalRefrigerantErrors( - state, state.dataFluid->NumOfRefrigerants, RefrigNum, true, Refrigerant, RoutineName, "properties", CalledFrom); - } - // initialize for this call error counters and dummy string int ErrCount = 0; int CurTempRangeErrCount = 0; int CurPresRangeErrCount = 0; - // Find which refrigerant (index) is being requested and then determine - // where the temperature and pressure are within the temperature and - // pressure arrays, respectively - if (RefrigIndex > 0) { - RefrigNum = RefrigIndex; - } else { - // Find which refrigerant (index) is being requested - RefrigNum = FindRefrigerant(state, Refrigerant); - if (RefrigNum == 0) { - ReportFatalRefrigerantErrors( - state, state.dataFluid->NumOfRefrigerants, RefrigNum, true, Refrigerant, RoutineName, "properties", CalledFrom); - } - RefrigIndex = RefrigNum; - } - auto const &refrig(state.dataFluid->RefrigData(RefrigNum)); - // check temperature data range and attempt to cap if necessary // low index value of Temperature from table - int TempIndex = FindArrayIndex(Temperature, refrig.SHTemps, 1, refrig.NumSuperTempPts); - if ((TempIndex > 0) && (TempIndex < refrig.NumSuperTempPts)) { // in range + int TempIndex = FindArrayIndex(Temperature, this->SHTemps, 1, this->NumSuperTempPts); + if ((TempIndex > 0) && (TempIndex < this->NumSuperTempPts)) { // in range HiTempIndex = TempIndex + 1; - TempInterpRatio = (Temperature - refrig.SHTemps(TempIndex)) / (refrig.SHTemps(HiTempIndex) - refrig.SHTemps(TempIndex)); + TempInterpRatio = (Temperature - this->SHTemps(TempIndex)) / (this->SHTemps(HiTempIndex) - this->SHTemps(TempIndex)); } else if (TempIndex < 1) { ++CurTempRangeErrCount; ++ErrCount; @@ -6877,11 +7027,11 @@ namespace Fluid { } // check pressure data range and attempt to cap if necessary - int LoPressIndex = FindArrayIndex(Pressure, refrig.SHPress, 1, refrig.NumSuperPressPts); - if ((LoPressIndex > 0) && (LoPressIndex < refrig.NumSuperPressPts)) { // in range + int LoPressIndex = FindArrayIndex(Pressure, this->SHPress, 1, this->NumSuperPressPts); + if ((LoPressIndex > 0) && (LoPressIndex < this->NumSuperPressPts)) { // in range HiPressIndex = LoPressIndex + 1; - Real64 const SHPress_Lo(refrig.SHPress(LoPressIndex)); - PressInterpRatio = (Pressure - SHPress_Lo) / (refrig.SHPress(HiPressIndex) - SHPress_Lo); + Real64 const SHPress_Lo = this->SHPress(LoPressIndex); + PressInterpRatio = (Pressure - SHPress_Lo) / (this->SHPress(HiPressIndex) - SHPress_Lo); } else if (LoPressIndex < 1) { ++CurPresRangeErrCount; ++ErrCount; @@ -6897,18 +7047,17 @@ namespace Fluid { } // get interpolation point values - auto const &Rhosh(refrig.RhoshValues); - Real64 LoTempLoDensity = Rhosh(LoPressIndex, TempIndex); - Real64 LoTempHiDensity = Rhosh(HiPressIndex, TempIndex); - Real64 HiTempLoDensity = Rhosh(LoPressIndex, HiTempIndex); - Real64 HiTempHiDensity = Rhosh(HiPressIndex, HiTempIndex); + Real64 LoTempLoDensity = this->RhoshValues(LoPressIndex, TempIndex); + Real64 LoTempHiDensity = this->RhoshValues(HiPressIndex, TempIndex); + Real64 HiTempLoDensity = this->RhoshValues(LoPressIndex, HiTempIndex); + Real64 HiTempHiDensity = this->RhoshValues(HiPressIndex, HiTempIndex); // to give reasonable interpolation near saturation reset any point with zero value // in table to saturation value int n_zero(0); Real64 saturated_density(0.0); if (min(LoTempLoDensity, LoTempHiDensity, HiTempLoDensity, HiTempHiDensity) <= 0.0) { - saturated_density = GetSatDensityRefrig(state, Refrigerant, Temperature, 1.0, RefrigNum, RoutineName); + saturated_density = this->getSatDensity(state, Temperature, 1.0, routineName); if (LoTempLoDensity <= 0.0) { LoTempLoDensity = saturated_density; ++n_zero; @@ -6929,34 +7078,34 @@ namespace Fluid { if (n_zero < 4) { // interpolate w.r.t. pressure - DensityLow = PressInterpRatio * LoTempHiDensity + (1.0 - PressInterpRatio) * LoTempLoDensity; - DensityHigh = PressInterpRatio * HiTempHiDensity + (1.0 - PressInterpRatio) * HiTempLoDensity; + Real64 DensityLow = PressInterpRatio * LoTempHiDensity + (1.0 - PressInterpRatio) * LoTempLoDensity; + Real64 DensityHigh = PressInterpRatio * HiTempHiDensity + (1.0 - PressInterpRatio) * HiTempLoDensity; // interpolate w.r.t. temperature ReturnValue = TempInterpRatio * DensityHigh + (1.0 - TempInterpRatio) * DensityLow; } else { // All data is at zero: we are completely inside the saturation dome. Best thing we can do is return saturation value - ++state.dataFluid->SatErrCountGetSupHeatDensityRefrig; + + auto &refrigError = state.dataFluidProperties->RefrigErrorTracking(this->Num); + ++state.dataFluidProperties->SatErrCountGetSupHeatDensityRefrig; // send warning - state.dataFluid->RefrigErrorTracking(RefrigNum).SatSupDensityErrCount += state.dataFluid->SatErrCountGetSupHeatDensityRefrig; + refrigError.SatSupDensityErrCount += state.dataFluidProperties->SatErrCountGetSupHeatDensityRefrig; // send warning - if (state.dataFluid->RefrigErrorTracking(RefrigNum).SatSupDensityErrCount <= state.dataFluid->RefrigerantErrorLimitTest) { + if (refrigError.SatSupDensityErrCount <= state.dataFluidProperties->RefrigerantErrorLimitTest) { ShowWarningMessage( state, format("{}: Refrigerant [{}] is saturated at the given conditions, saturated density at given temperature returned. **", - RoutineName, - state.dataFluid->RefrigErrorTracking(RefrigNum).Name)); + routineName, + refrigError.Name)); ShowContinueError(state, fmt::format("...Called From:{}", CalledFrom)); ShowContinueError(state, format("Refrigerant temperature = {:.2R}", Temperature)); ShowContinueError(state, format("Refrigerant pressure = {:.0R}", Pressure)); ShowContinueError(state, format("Returned Density value = {:.3R}", saturated_density)); ShowContinueErrorTimeStamp(state, ""); } - if (state.dataFluid->SatErrCountGetSupHeatDensityRefrig > 0) { + if (state.dataFluidProperties->SatErrCountGetSupHeatDensityRefrig > 0) { ShowRecurringWarningErrorAtEnd(state, - std::string{RoutineName} + ": Refrigerant [" + - state.dataFluid->RefrigErrorTracking(RefrigNum).Name + - "] saturated at the given conditions **", - state.dataFluid->RefrigErrorTracking(RefrigNum).SatSupEnthalpyErrIndex, + format("{}: Refrigerant [{}] saturated at the given conditions **", routineName, refrigError.Name), + refrigError.SatSupEnthalpyErrIndex, Temperature, Temperature, _, @@ -6970,23 +7119,21 @@ namespace Fluid { // some checks... if (ErrCount > 0) { // send temp range error if flagged - state.dataFluid->RefrigErrorTracking(RefrigNum).SatSupDensityTempErrCount += CurTempRangeErrCount; - if (CurTempRangeErrCount > 0 && state.dataFluid->RefrigErrorTracking(RefrigNum).SatSupDensityTempErrCount <= - state.dataFluid->RefrigerantErrorLimitTest) { + auto &refrigError = state.dataFluidProperties->RefrigErrorTracking(this->Num); + refrigError.SatSupDensityTempErrCount += CurTempRangeErrCount; + if (CurTempRangeErrCount > 0 && refrigError.SatSupDensityTempErrCount <= state.dataFluidProperties->RefrigerantErrorLimitTest) { ShowWarningMessage( state, format("{}: Refrigerant [{}] Temperature is out of range for superheated refrigerant density: values capped **", - RoutineName, - state.dataFluid->RefrigErrorTracking(RefrigNum).Name)); + routineName, + refrigError.Name)); ShowContinueError(state, fmt::format(" Called From:{}", CalledFrom)); ShowContinueErrorTimeStamp(state, ""); } if (CurTempRangeErrCount > 0) { ShowRecurringWarningErrorAtEnd(state, - std::string{RoutineName} + ": Refrigerant [" + - state.dataFluid->RefrigErrorTracking(RefrigNum).Name + - "] Temperature is out of range for superheated refrigerant density: values capped **", - state.dataFluid->RefrigErrorTracking(RefrigNum).SatSupDensityTempErrIndex, + format("{}: Refrigerant [{}] Temperature is out of range for superheated refrigerant density: values capped **", routineName, refrigError.Name), + refrigError.SatSupDensityTempErrIndex, Temperature, Temperature, _, @@ -6995,22 +7142,19 @@ namespace Fluid { } // send pressure range error if flagged - state.dataFluid->RefrigErrorTracking(RefrigNum).SatSupDensityPresErrCount += CurPresRangeErrCount; - if (CurPresRangeErrCount > 0 && state.dataFluid->RefrigErrorTracking(RefrigNum).SatSupDensityPresErrCount <= - state.dataFluid->RefrigerantErrorLimitTest) { + refrigError.SatSupDensityPresErrCount += CurPresRangeErrCount; + if (CurPresRangeErrCount > 0 && refrigError.SatSupDensityPresErrCount <= state.dataFluidProperties->RefrigerantErrorLimitTest) { ShowWarningMessage(state, format("{}: Refrigerant [{}] Pressure is out of range for superheated refrigerant density: values capped **", - RoutineName, - state.dataFluid->RefrigErrorTracking(RefrigNum).Name)); + routineName, + refrigError.Name)); ShowContinueError(state, fmt::format(" Called From:{}", CalledFrom)); ShowContinueErrorTimeStamp(state, ""); } if (CurPresRangeErrCount > 0) { ShowRecurringWarningErrorAtEnd(state, - std::string{RoutineName} + ": Refrigerant [" + - state.dataFluid->RefrigErrorTracking(RefrigNum).Name + - "] Pressure is out of range for superheated refrigerant density: values capped **", - state.dataFluid->RefrigErrorTracking(RefrigNum).SatSupDensityPresErrIndex, + format("{}: Refrigerant [{}] Pressure is out of range for superheated refrigerant density: values capped **", routineName, refrigError.Name), + refrigError.SatSupDensityPresErrIndex, Pressure, Pressure, _, @@ -7023,18 +7167,80 @@ namespace Fluid { return ReturnValue; } + Real64 GetSupHeatDensityRefrig(EnergyPlusData &state, + std::string_view const Refrigerant, // carries in substance name + Real64 const Temperature, // actual temperature given as input + Real64 const Pressure, // actual pressure given as input + int &RefrigIndex, // Index to Refrigerant Properties + std::string_view const CalledFrom // routine this function was called from (error messages) + ) + { + + // SUBROUTINE INFORMATION: + // AUTHOR Mike Turner + // DATE WRITTEN 10 December 99 + // MODIFIED Rick Strand (April 2000, May 2000) + // MODIFIED Simon Rees (May 2002) + + // PURPOSE OF THIS SUBROUTINE: + // Performs linear interpolation between pressures and temperatures and + // returns Density values. Works only in superheated region. + + // METHODOLOGY EMPLOYED: + // Double linear interpolation is used with Density values at four + // pressure/temperature input points surrounding the given temperature + // and pressure arguments. + // With Density data it is assumed that zero values in the data are in + // the saturated region. Hence, values near the saturation line are + // approximated using the saturation value instead of the zero data value. + // points completely in the saturation region are given the saturation value + // at the given temperature. Points at the upper limits of pressure/temperature + // have the pressure/temperature capped. Warnings are given if the point + // is not clearly in the bounds of the superheated data. + + // FUNCTION PARAMETERS: + static constexpr std::string_view RoutineName("GetSupHeatDensityRefrig"); + + // see if data is there + if (state.dataFluidProperties->GetInput) { + GetFluidPropertiesData(state); + state.dataFluidProperties->GetInput = false; + } + + int RefrigNum = 0; + if (state.dataFluidProperties->NumOfRefrigerants == 0) { + ReportFatalRefrigerantErrors( + state, state.dataFluidProperties->NumOfRefrigerants, RefrigNum, true, Refrigerant, RoutineName, "properties", CalledFrom); + } + + // Find which refrigerant (index) is being requested and then determine + // where the temperature and pressure are within the temperature and + // pressure arrays, respectively + if (RefrigIndex > 0) { + RefrigNum = RefrigIndex; + } else { + // Find which refrigerant (index) is being requested + RefrigNum = GetRefrigNum(state, Refrigerant); + if (RefrigNum == 0) { + ReportFatalRefrigerantErrors( + state, state.dataFluidProperties->NumOfRefrigerants, RefrigNum, true, Refrigerant, RoutineName, "properties", CalledFrom); + } + RefrigIndex = RefrigNum; + } + + return state.dataFluidProperties->RefrigData(RefrigNum).getSupHeatDensity(state, Temperature, Pressure, CalledFrom); + } + //***************************************************************************** #ifdef EP_cache_GlycolSpecificHeat - Real64 GetSpecificHeatGlycol(EnergyPlusData &state, - std::string_view const Glycol, // carries in substance name - Real64 const Temperature, // actual temperature given as input - int &GlycolIndex, // Index to Glycol Properties - std::string_view const CalledFrom // routine this function was called from (error messages) + Real64 GlycolData::getSpecificHeat(EnergyPlusData &state, + Real64 const Temperature, // actual temperature given as input + std::string_view const CalledFrom // routine this function was called from (error messages) ) { std::uint64_t constexpr Grid_Shift = 64 - 12 - t_sh_precision_bits; - double const t(Temperature + 1000 * GlycolIndex); + double const t(Temperature + 1000 * this->Num); DISABLE_WARNING_PUSH DISABLE_WARNING_STRICT_ALIASING @@ -7044,28 +7250,24 @@ namespace Fluid { DISABLE_WARNING_POP std::uint64_t const hash(T_tag & t_sh_cache_mask); - auto &cTsh(state.dataFluid->cached_t_sh[hash]); + auto &cTsh(state.dataFluidProperties->cached_t_sh[hash]); if (cTsh.iT != T_tag) { cTsh.iT = T_tag; - cTsh.sh = GetSpecificHeatGlycol_raw(state, Glycol, Temperature, GlycolIndex, CalledFrom); + cTsh.sh = this->getSpecificHeat_raw(state, Temperature, CalledFrom); } return cTsh.sh; // saturation pressure {Pascals} } - Real64 GetSpecificHeatGlycol_raw(EnergyPlusData &state, - std::string_view const Glycol, // carries in substance name - Real64 const Temperature, // actual temperature given as input - int &GlycolIndex, // Index to Glycol Properties - std::string_view const CalledFrom // routine this function was called from (error messages) + Real64 GlycolData::getSpecificHeat_raw(EnergyPlusData &state, + Real64 const Temperature, // actual temperature given as input + std::string_view const CalledFrom // routine this function was called from (error messages) ) #else - Real64 GetSpecificHeatGlycol(EnergyPlusData &state, - std::string_view const Glycol, // carries in substance name - Real64 const Temperature, // actual temperature given as input - int &GlycolIndex, // Index to Glycol Properties - std::string_view const CalledFrom // routine this function was called from (error messages) + Real64 GlycolData::getSpecificHeat(EnergyPlusData &state, + Real64 const Temperature, // actual temperature given as input + std::string_view const CalledFrom // routine this function was called from (error messages) ) #endif { @@ -7084,108 +7286,81 @@ namespace Fluid { // Warnings are given if the point is not clearly in the bounds of the // glycol data. The value returned is the appropriate limit value. - // REFERENCES: - // GetFluidPropertiesData: subroutine enforces that temperatures in - // all temperature lists are entered in ascending order. - - // FUNCTION PARAMETERS: - static constexpr std::string_view RoutineName("GetSpecificHeatGlycol: "); - - // Get the input if we haven't already - if (state.dataFluid->GetInput) { - GetFluidPropertiesData(state); - state.dataFluid->GetInput = false; - } - - // If no glycols, no fluid properties can be evaluated - int GlycolNum(0); - if (state.dataFluid->NumOfGlycols == 0) - ReportFatalGlycolErrors( - state, state.dataFluid->NumOfGlycols, GlycolNum, true, Glycol, "GetSpecificHeatGlycol", "specific heat", CalledFrom); - - // If glycol index has not yet been found for this fluid, find its value now - if (GlycolIndex > 0) { - GlycolNum = GlycolIndex; - } else { // Find which glycol (index) is being requested - GlycolNum = FindGlycol(state, Glycol); - if (GlycolNum == 0) { - ReportFatalGlycolErrors( - state, state.dataFluid->NumOfGlycols, GlycolNum, true, Glycol, "GetSpecificHeatGlycol", "specific heat", CalledFrom); - } - GlycolIndex = GlycolNum; - } - auto const &glycol_data(state.dataFluid->GlycolData(GlycolIndex)); - + // REFERENCES: + // GetFluidPropertiesData: subroutine enforces that temperatures in + // all temperature lists are entered in ascending order. + + // FUNCTION PARAMETERS: + static constexpr std::string_view routineName = "GlycolData::getSpecificHeat"; + + auto &glycolError = state.dataFluidProperties->GlycolErrorTracking(this->Num); + // If user didn't input data (shouldn't get this far, but just in case...), we can't find a value - if (!glycol_data.CpDataPresent) { + if (!this->CpDataPresent) { ReportFatalGlycolErrors(state, - state.dataFluid->NumOfGlycols, - GlycolNum, - glycol_data.CpDataPresent, - Glycol, + state.dataFluidProperties->NumOfGlycols, + this->Num, + this->CpDataPresent, + this->Name, "GetSpecificHeatGlycol", "specific heat", CalledFrom); } // Now determine the value of specific heat using interpolation - if (Temperature < glycol_data.CpLowTempValue) { // Temperature too low + if (Temperature < this->CpLowTempValue) { // Temperature too low if (!state.dataGlobal->WarmupFlag) { - state.dataFluid->LowTempLimitErrGetSpecificHeatGlycol_raw = - ++state.dataFluid->GlycolErrorTracking(GlycolIndex).SpecHeatLowErrCount; - if (state.dataFluid->LowTempLimitErrGetSpecificHeatGlycol_raw <= state.dataFluid->GlycolErrorLimitTest) { + state.dataFluidProperties->LowTempLimitErrGetSpecificHeatGlycol_raw = ++glycolError.SpecHeatLowErrCount; + if (state.dataFluidProperties->LowTempLimitErrGetSpecificHeatGlycol_raw <= state.dataFluidProperties->GlycolErrorLimitTest) { ShowWarningMessage(state, - format("{}Temperature is out of range (too low) for fluid [{}] specific heat supplied values **", - RoutineName, - glycol_data.Name)); + format("{}: Temperature is out of range (too low) for fluid [{}] specific heat supplied values **", + routineName, + this->Name)); ShowContinueError(state, format("..Called From:{},Temperature=[{:.2R}], supplied data range=[{:.2R},{:.2R}]", CalledFrom, Temperature, - glycol_data.CpLowTempValue, - glycol_data.CpHighTempValue)); + this->CpLowTempValue, + this->CpHighTempValue)); ShowContinueErrorTimeStamp(state, ""); } ShowRecurringWarningErrorAtEnd(state, - std::string{RoutineName} + "Temperature out of range (too low) for fluid [" + glycol_data.Name + - "] specific heat **", - state.dataFluid->GlycolErrorTracking(GlycolIndex).SpecHeatLowErrIndex, + format("{}: Temperature out of range (too low) for fluid [{}] specific heat **", routineName, this->Name), + glycolError.SpecHeatLowErrIndex, Temperature, Temperature, _, "{C}", "{C}"); } - return glycol_data.CpValues(glycol_data.CpLowTempIndex); - } else if (Temperature > glycol_data.CpHighTempValue) { // Temperature too high + return this->CpValues(this->CpLowTempIndex); + + } else if (Temperature > this->CpHighTempValue) { // Temperature too high if (!state.dataGlobal->WarmupFlag) { - state.dataFluid->HighTempLimitErrGetSpecificHeatGlycol_raw = - ++state.dataFluid->GlycolErrorTracking(GlycolIndex).SpecHeatHighErrCount; - if (state.dataFluid->HighTempLimitErrGetSpecificHeatGlycol_raw <= state.dataFluid->GlycolErrorLimitTest) { + state.dataFluidProperties->HighTempLimitErrGetSpecificHeatGlycol_raw = ++glycolError.SpecHeatHighErrCount; + if (state.dataFluidProperties->HighTempLimitErrGetSpecificHeatGlycol_raw <= state.dataFluidProperties->GlycolErrorLimitTest) { ShowWarningMessage( - state, format("{}Temperature is out of range (too high) for fluid [{}] specific heat **", RoutineName, glycol_data.Name)); + state, format("{}: Temperature is out of range (too high) for fluid [{}] specific heat **", routineName, this->Name)); ShowContinueError(state, format("..Called From:{},Temperature=[{:.2R}], supplied data range=[{:.2R},{:.2R}]", CalledFrom, Temperature, - glycol_data.CpLowTempValue, - glycol_data.CpHighTempValue)); + this->CpLowTempValue, + this->CpHighTempValue)); ShowContinueErrorTimeStamp(state, ""); } ShowRecurringWarningErrorAtEnd(state, - std::string{RoutineName} + "Temperature out of range (too high) for fluid [" + glycol_data.Name + - "] specific heat **", - state.dataFluid->GlycolErrorTracking(GlycolIndex).SpecHeatHighErrIndex, + format("{}: Temperature out of range (too high) for fluid [{}] specific heat **", routineName, this->Name), + glycolError.SpecHeatHighErrIndex, Temperature, Temperature, _, "{C}", "{C}"); } - return glycol_data.CpValues(glycol_data.CpHighTempIndex); + return this->CpValues(this->CpHighTempIndex); + } else { // Temperature somewhere between the lowest and highest value - auto const &glycol_CpTemps(glycol_data.CpTemps); - auto const &glycol_CpValues(glycol_data.CpValues); // bracket is temp > low, <= high (for interpolation // for ( int Loop = glycol_data.CpLowTempIndex + 1; Loop <= glycol_data.CpHighTempIndex; ++Loop ) { //Tuned Replaced by binary search // below if ( Temperature > glycol_data.CpTemps( Loop ) ) continue; return GetInterpValue( Temperature, glycol_CpTemps( Loop - 1 @@ -7193,25 +7368,23 @@ namespace Fluid { //} // assert( std::is_sorted( glycol_CpTemps.begin(), glycol_CpTemps.end() ) ); // Sorted temperature array is assumed: Enable if/when arrays // have begin()/end() - assert(glycol_CpTemps.size() <= + assert(this->CpTemps.size() <= static_cast(std::numeric_limits::max())); // Array indexes are int now so this is future protection - int beg(1), end(glycol_CpTemps.isize()); // 1-based indexing + int beg(1), end(this->CpTemps.isize()); // 1-based indexing assert(end > 0); while (beg + 1 < end) { int mid = ((beg + end) >> 1); // bit shifting is faster than /2 - (Temperature > glycol_CpTemps(mid) ? beg : end) = mid; + (Temperature > this->CpTemps(mid) ? beg : end) = mid; } // Invariant: glycol_CpTemps[beg] <= Temperature <= glycol_CpTemps[end] - return GetInterpValue_fast(Temperature, glycol_CpTemps(beg), glycol_CpTemps(end), glycol_CpValues(beg), glycol_CpValues(end)); + return GetInterpValue_fast(Temperature, this->CpTemps(beg), this->CpTemps(end), this->CpValues(beg), this->CpValues(end)); } } - //***************************************************************************** - - Real64 GetDensityGlycol(EnergyPlusData &state, - std::string_view const Glycol, // carries in substance name - Real64 const Temperature, // actual temperature given as input - int &GlycolIndex, // Index to Glycol Properties - std::string_view const CalledFrom // routine this function was called from (error messages) + Real64 GetSpecificHeatGlycol(EnergyPlusData &state, + std::string_view const Glycol, // carries in substance name + Real64 const Temperature, // actual temperature given as input + int &GlycolIndex, // Index to Glycol Properties + std::string_view const CalledFrom // routine this function was called from (error messages) ) { @@ -7220,11 +7393,11 @@ namespace Fluid { // DATE WRITTEN June 2004 // PURPOSE OF THIS FUNCTION: - // This subroutine finds the density for glycols at different + // This subroutine finds specific heats for glycols at different // temperatures. // METHODOLOGY EMPLOYED: - // Linear interpolation is used to find density values for a + // Linear interpolation is used to find specific heat values for a // particular glycol (water or some mixture of water and another fluid). // Warnings are given if the point is not clearly in the bounds of the // glycol data. The value returned is the appropriate limit value. @@ -7233,105 +7406,123 @@ namespace Fluid { // GetFluidPropertiesData: subroutine enforces that temperatures in // all temperature lists are entered in ascending order. - // Return value - Real64 ReturnValue; - - // FUNCTION PARAMETERS: - static constexpr std::string_view RoutineName("GetDensityGlycol: "); - - // FUNCTION LOCAL VARIABLE DECLARATIONS: - bool LowErrorThisTime = false; - bool HighErrorThisTime = false; - // Get the input if we haven't already - if (state.dataFluid->GetInput) { + if (state.dataFluidProperties->GetInput) { GetFluidPropertiesData(state); - state.dataFluid->GetInput = false; + state.dataFluidProperties->GetInput = false; } // If no glycols, no fluid properties can be evaluated int GlycolNum = 0; - if (state.dataFluid->NumOfGlycols == 0) - ReportFatalGlycolErrors(state, state.dataFluid->NumOfGlycols, GlycolNum, true, Glycol, "GetDensityGlycol", "density", CalledFrom); + if (state.dataFluidProperties->NumOfGlycols == 0) + ReportFatalGlycolErrors( + state, state.dataFluidProperties->NumOfGlycols, GlycolNum, true, Glycol, "GetSpecificHeatGlycol", "specific heat", CalledFrom); // If glycol index has not yet been found for this fluid, find its value now if (GlycolIndex > 0) { GlycolNum = GlycolIndex; - } else { // Find which refrigerant (index) is being requested - GlycolNum = FindGlycol(state, Glycol); + } else { // Find which glycol (index) is being requested + GlycolNum = GetGlycolNum(state, Glycol); if (GlycolNum == 0) { ReportFatalGlycolErrors( - state, state.dataFluid->NumOfGlycols, GlycolNum, true, Glycol, "GetDensityGlycol", "density", CalledFrom); + state, state.dataFluidProperties->NumOfGlycols, GlycolNum, true, Glycol, "GetSpecificHeatGlycol", "specific heat", CalledFrom); } GlycolIndex = GlycolNum; } + return state.dataFluidProperties->GlycolData(GlycolIndex).getSpecificHeat(state, Temperature, CalledFrom); + } + + //***************************************************************************** + + Real64 GlycolData::getDensity(EnergyPlusData &state, + Real64 const Temperature, // actual temperature given as input + std::string_view const CalledFrom // routine this function was called from (error messages) + ) + { + + // FUNCTION INFORMATION: + // AUTHOR Rick Strand + // DATE WRITTEN June 2004 + + // PURPOSE OF THIS FUNCTION: + // This subroutine finds the density for glycols at different + // temperatures. + + // METHODOLOGY EMPLOYED: + // Linear interpolation is used to find density values for a + // particular glycol (water or some mixture of water and another fluid). + // Warnings are given if the point is not clearly in the bounds of the + // glycol data. The value returned is the appropriate limit value. + + // REFERENCES: + // GetFluidPropertiesData: subroutine enforces that temperatures in + // all temperature lists are entered in ascending order. + + // Return value + Real64 ReturnValue; + + // FUNCTION PARAMETERS: + static constexpr std::string_view routineName = "GetDensityGlycol"; + + // FUNCTION LOCAL VARIABLE DECLARATIONS: + bool LowErrorThisTime = false; + bool HighErrorThisTime = false; + // If user didn't input data (shouldn't get this far, but just in case...), we can't find a value - if (!state.dataFluid->GlycolData(GlycolIndex).RhoDataPresent) { + if (!this->RhoDataPresent) { ReportFatalGlycolErrors(state, - state.dataFluid->NumOfGlycols, - GlycolNum, - state.dataFluid->GlycolData(GlycolIndex).RhoDataPresent, - Glycol, + state.dataFluidProperties->NumOfGlycols, + this->Num, + this->RhoDataPresent, + this->Name, "GetDensityGlycol", "density", CalledFrom); } // Now determine the value of specific heat using interpolation - if (Temperature < state.dataFluid->GlycolData(GlycolIndex).RhoLowTempValue) { // Temperature too low + if (Temperature < this->RhoLowTempValue) { // Temperature too low LowErrorThisTime = true; - ReturnValue = state.dataFluid->GlycolData(GlycolIndex).RhoValues(state.dataFluid->GlycolData(GlycolIndex).RhoLowTempIndex); - } else if (Temperature > state.dataFluid->GlycolData(GlycolIndex).RhoHighTempValue) { // Temperature too high + ReturnValue = this->RhoValues(this->RhoLowTempIndex); + } else if (Temperature > this->RhoHighTempValue) { // Temperature too high HighErrorThisTime = true; - ReturnValue = state.dataFluid->GlycolData(GlycolIndex).RhoValues(state.dataFluid->GlycolData(GlycolIndex).RhoHighTempIndex); + ReturnValue = this->RhoValues(this->RhoHighTempIndex); } else { // Temperature somewhere between the lowest and highest value - ReturnValue = state.dataFluid->GlycolData(GlycolIndex).RhoValues(state.dataFluid->GlycolData(GlycolIndex).RhoLowTempIndex); - // bracket is temp > low, <= high (for interpolation - for (int Loop = state.dataFluid->GlycolData(GlycolIndex).RhoLowTempIndex + 1; - Loop <= state.dataFluid->GlycolData(GlycolIndex).RhoHighTempIndex; - ++Loop) { - if (Temperature > state.dataFluid->GlycolData(GlycolIndex).RhoTemps(Loop)) continue; - ReturnValue = GetInterpValue(state, - Temperature, - state.dataFluid->GlycolData(GlycolIndex).RhoTemps(Loop - 1), - state.dataFluid->GlycolData(GlycolIndex).RhoTemps(Loop), - state.dataFluid->GlycolData(GlycolIndex).RhoValues(Loop - 1), - state.dataFluid->GlycolData(GlycolIndex).RhoValues(Loop)); - break; // DO loop - } + int LoTempIndex = FindArrayIndex(Temperature, this->RhoTemps, 1, this->NumRhoTempPts); + Real64 TempInterpRatio = (Temperature - this->RhoTemps(LoTempIndex)) / (this->RhoTemps(LoTempIndex+1) - this->RhoTemps(LoTempIndex)); + ReturnValue = this->RhoValues(LoTempIndex) + TempInterpRatio * (this->RhoValues(LoTempIndex+1) - this->RhoValues(LoTempIndex)); } // Error handling if (!state.dataGlobal->WarmupFlag) { - + auto &glycolError = state.dataFluidProperties->GlycolErrorTracking(this->Num); if (LowErrorThisTime) { - ++state.dataFluid->GlycolErrorTracking(GlycolIndex).DensityLowErrCount; - state.dataFluid->LowTempLimitErrGetDensityGlycol = state.dataFluid->GlycolErrorTracking(GlycolIndex).DensityLowErrCount; + ++glycolError.DensityLowErrCount; + state.dataFluidProperties->LowTempLimitErrGetDensityGlycol = glycolError.DensityLowErrCount; } if (HighErrorThisTime) { - ++state.dataFluid->GlycolErrorTracking(GlycolIndex).DensityHighErrCount; - state.dataFluid->HighTempLimitErrGetDensityGlycol = state.dataFluid->GlycolErrorTracking(GlycolIndex).DensityHighErrCount; + ++glycolError.DensityHighErrCount; + state.dataFluidProperties->HighTempLimitErrGetDensityGlycol = glycolError.DensityHighErrCount; } - if ((LowErrorThisTime) && (state.dataFluid->LowTempLimitErrGetDensityGlycol <= state.dataFluid->GlycolErrorLimitTest)) { + if ((LowErrorThisTime) && (state.dataFluidProperties->LowTempLimitErrGetDensityGlycol <= state.dataFluidProperties->GlycolErrorLimitTest)) { ShowWarningMessage(state, format("{}Temperature is out of range (too low) for fluid [{}] density **", - RoutineName, - state.dataFluid->GlycolData(GlycolIndex).Name)); + routineName, + this->Name)); ShowContinueError(state, format("..Called From:{},Temperature=[{:.2R}], supplied data range=[{:.2R},{:.2R}]", CalledFrom, Temperature, - state.dataFluid->GlycolData(GlycolIndex).RhoLowTempValue, - state.dataFluid->GlycolData(GlycolIndex).RhoHighTempValue)); + this->RhoLowTempValue, + this->RhoHighTempValue)); ShowContinueErrorTimeStamp(state, ""); } if (LowErrorThisTime) { ShowRecurringWarningErrorAtEnd(state, - std::string{RoutineName} + "Temperature out of range (too low) for fluid [" + - state.dataFluid->GlycolData(GlycolIndex).Name + "] density **", - state.dataFluid->GlycolErrorTracking(GlycolIndex).DensityLowErrIndex, + format("{}: Temperature out of range (too low) for fluid [{}] density **", routineName, this->Name), + glycolError.DensityLowErrIndex, Temperature, Temperature, _, @@ -7339,24 +7530,23 @@ namespace Fluid { "{C}"); } - if ((HighErrorThisTime) && (state.dataFluid->HighTempLimitErrGetDensityGlycol <= state.dataFluid->GlycolErrorLimitTest)) { + if ((HighErrorThisTime) && (state.dataFluidProperties->HighTempLimitErrGetDensityGlycol <= state.dataFluidProperties->GlycolErrorLimitTest)) { ShowWarningMessage(state, - format("{}Temperature is out of range (too high) for fluid [{}] density **", - RoutineName, - state.dataFluid->GlycolData(GlycolIndex).Name)); + format("{}: Temperature is out of range (too high) for fluid [{}] density **", + routineName, + this->Name)); ShowContinueError(state, format("..Called From:{},Temperature=[{:.2R}], supplied data range=[{:.2R},{:.2R}]", CalledFrom, Temperature, - state.dataFluid->GlycolData(GlycolIndex).RhoLowTempValue, - state.dataFluid->GlycolData(GlycolIndex).RhoHighTempValue)); + this->RhoLowTempValue, + this->RhoHighTempValue)); ShowContinueErrorTimeStamp(state, ""); } if (HighErrorThisTime) { ShowRecurringWarningErrorAtEnd(state, - std::string{RoutineName} + "Temperature out of range (too high) for fluid [" + - state.dataFluid->GlycolData(GlycolIndex).Name + "] density **", - state.dataFluid->GlycolErrorTracking(GlycolIndex).DensityHighErrIndex, + format("{}: Temperature out of range (too high) for fluid [{}] density **", routineName, this->Name), + glycolError.DensityHighErrIndex, Temperature, Temperature, _, @@ -7368,13 +7558,11 @@ namespace Fluid { return ReturnValue; } - //***************************************************************************** - - Real64 GetConductivityGlycol(EnergyPlusData &state, - std::string_view const Glycol, // carries in substance name - Real64 const Temperature, // actual temperature given as input - int &GlycolIndex, // Index to Glycol Properties - std::string_view const CalledFrom // routine this function was called from (error messages) + Real64 GetDensityGlycol(EnergyPlusData &state, + std::string_view const Glycol, // carries in substance name + Real64 const Temperature, // actual temperature given as input + int &GlycolIndex, // Index to Glycol Properties + std::string_view const CalledFrom // routine this function was called from (error messages) ) { @@ -7383,11 +7571,11 @@ namespace Fluid { // DATE WRITTEN June 2004 // PURPOSE OF THIS FUNCTION: - // This subroutine finds the conductivity for glycols at different + // This subroutine finds the density for glycols at different // temperatures. // METHODOLOGY EMPLOYED: - // Linear interpolation is used to find conductivity values for a + // Linear interpolation is used to find density values for a // particular glycol (water or some mixture of water and another fluid). // Warnings are given if the point is not clearly in the bounds of the // glycol data. The value returned is the appropriate limit value. @@ -7396,108 +7584,122 @@ namespace Fluid { // GetFluidPropertiesData: subroutine enforces that temperatures in // all temperature lists are entered in ascending order. - // Return value - Real64 ReturnValue; - - // FUNCTION PARAMETERS: - static constexpr std::string_view RoutineName("GetConductivityGlycol: "); - - // FUNCTION LOCAL VARIABLE DECLARATIONS: - bool LowErrorThisTime = false; - bool HighErrorThisTime = false; - // Get the input if we haven't already - if (state.dataFluid->GetInput) { + if (state.dataFluidProperties->GetInput) { GetFluidPropertiesData(state); - state.dataFluid->GetInput = false; + state.dataFluidProperties->GetInput = false; } // If no glycols, no fluid properties can be evaluated int GlycolNum = 0; - if (state.dataFluid->NumOfGlycols == 0) - ReportFatalGlycolErrors( - state, state.dataFluid->NumOfGlycols, GlycolNum, true, Glycol, "GetConductivityGlycol", "conductivity", CalledFrom); + if (state.dataFluidProperties->NumOfGlycols == 0) + ReportFatalGlycolErrors(state, state.dataFluidProperties->NumOfGlycols, GlycolNum, true, Glycol, "GetDensityGlycol", "density", CalledFrom); // If glycol index has not yet been found for this fluid, find its value now if (GlycolIndex > 0) { GlycolNum = GlycolIndex; } else { // Find which refrigerant (index) is being requested - GlycolNum = FindGlycol(state, Glycol); + GlycolNum = GetGlycolNum(state, Glycol); if (GlycolNum == 0) { ReportFatalGlycolErrors( - state, state.dataFluid->NumOfGlycols, GlycolNum, true, Glycol, "GetConductivityGlycol", "conductivity", CalledFrom); + state, state.dataFluidProperties->NumOfGlycols, GlycolNum, true, Glycol, "GetDensityGlycol", "density", CalledFrom); } GlycolIndex = GlycolNum; } + return state.dataFluidProperties->GlycolData(GlycolIndex).getDensity(state, Temperature, CalledFrom); + } + + //***************************************************************************** + + Real64 GlycolData::getConductivity(EnergyPlusData &state, + Real64 const Temperature, // actual temperature given as input + std::string_view const CalledFrom // routine this function was called from (error messages) + ) + { + + // FUNCTION INFORMATION: + // AUTHOR Rick Strand + // DATE WRITTEN June 2004 + + // PURPOSE OF THIS FUNCTION: + // This subroutine finds the conductivity for glycols at different + // temperatures. + + // METHODOLOGY EMPLOYED: + // Linear interpolation is used to find conductivity values for a + // particular glycol (water or some mixture of water and another fluid). + // Warnings are given if the point is not clearly in the bounds of the + // glycol data. The value returned is the appropriate limit value. + + // REFERENCES: + // GetFluidPropertiesData: subroutine enforces that temperatures in + // all temperature lists are entered in ascending order. + + // Return value + Real64 ReturnValue; + + // FUNCTION PARAMETERS: + static constexpr std::string_view routineName = "GlycolData::getConductivity"; + + // FUNCTION LOCAL VARIABLE DECLARATIONS: + bool LowErrorThisTime = false; + bool HighErrorThisTime = false; + // If user didn't input data (shouldn't get this far, but just in case...), we can't find a value - if (!state.dataFluid->GlycolData(GlycolIndex).CondDataPresent) { + if (!this->CondDataPresent) { ReportFatalGlycolErrors(state, - state.dataFluid->NumOfGlycols, - GlycolNum, - state.dataFluid->GlycolData(GlycolIndex).CondDataPresent, - Glycol, + state.dataFluidProperties->NumOfGlycols, + this->Num, + this->CondDataPresent, + this->Name, "GetConductivityGlycol", "conductivity", CalledFrom); } // Now determine the value of specific heat using interpolation - if (Temperature < state.dataFluid->GlycolData(GlycolIndex).CondLowTempValue) { // Temperature too low + if (Temperature < this->CondLowTempValue) { // Temperature too low LowErrorThisTime = true; - ReturnValue = state.dataFluid->GlycolData(GlycolIndex).CondValues(state.dataFluid->GlycolData(GlycolIndex).CondLowTempIndex); - } else if (Temperature > state.dataFluid->GlycolData(GlycolIndex).CondHighTempValue) { // Temperature too high + ReturnValue = this->CondValues(this->CondLowTempIndex); + } else if (Temperature > this->CondHighTempValue) { // Temperature too high HighErrorThisTime = true; - ReturnValue = state.dataFluid->GlycolData(GlycolIndex).CondValues(state.dataFluid->GlycolData(GlycolIndex).CondHighTempIndex); + ReturnValue = this->CondValues(this->CondHighTempIndex); } else { // Temperature somewhere between the lowest and highest value - ReturnValue = state.dataFluid->GlycolData(GlycolIndex).CondValues(state.dataFluid->GlycolData(GlycolIndex).CondLowTempIndex); - // bracket is temp > low, <= high (for interpolation - for (int Loop = state.dataFluid->GlycolData(GlycolIndex).CondLowTempIndex + 1; - Loop <= state.dataFluid->GlycolData(GlycolIndex).CondHighTempIndex; - ++Loop) { - if (Temperature > state.dataFluid->GlycolData(GlycolIndex).CondTemps(Loop)) continue; - ReturnValue = GetInterpValue(state, - Temperature, - state.dataFluid->GlycolData(GlycolIndex).CondTemps(Loop - 1), - state.dataFluid->GlycolData(GlycolIndex).CondTemps(Loop), - state.dataFluid->GlycolData(GlycolIndex).CondValues(Loop - 1), - state.dataFluid->GlycolData(GlycolIndex).CondValues(Loop)); - break; // DO loop - } + int LoTempIndex = FindArrayIndex(Temperature, this->CondTemps, 1, this->NumCondTempPts); + Real64 TempInterpRatio = (Temperature - this->CondTemps(LoTempIndex)) / (this->CondTemps(LoTempIndex+1) - this->CondTemps(LoTempIndex)); + ReturnValue = this->CondValues(LoTempIndex) + TempInterpRatio * (this->CondValues(LoTempIndex+1) - this->CondValues(LoTempIndex)); } // Error handling if (!state.dataGlobal->WarmupFlag) { - + auto &glycolError = state.dataFluidProperties->GlycolErrorTracking(this->Num); if (LowErrorThisTime) { - ++state.dataFluid->GlycolErrorTracking(GlycolIndex).ConductivityLowErrCount; - state.dataFluid->LowTempLimitErrGetConductivityGlycol = - state.dataFluid->GlycolErrorTracking(GlycolIndex).ConductivityLowErrCount; + ++glycolError.ConductivityLowErrCount; + state.dataFluidProperties->LowTempLimitErrGetConductivityGlycol = glycolError.ConductivityLowErrCount; } if (HighErrorThisTime) { - ++state.dataFluid->GlycolErrorTracking(GlycolIndex).ConductivityHighErrCount; - state.dataFluid->HighTempLimitErrGetConductivityGlycol = - state.dataFluid->GlycolErrorTracking(GlycolIndex).ConductivityHighErrCount; + ++glycolError.ConductivityHighErrCount; + state.dataFluidProperties->HighTempLimitErrGetConductivityGlycol = glycolError.ConductivityHighErrCount; } - if ((LowErrorThisTime) && (state.dataFluid->LowTempLimitErrGetConductivityGlycol <= state.dataFluid->GlycolErrorLimitTest)) { + if ((LowErrorThisTime) && (state.dataFluidProperties->LowTempLimitErrGetConductivityGlycol <= state.dataFluidProperties->GlycolErrorLimitTest)) { ShowWarningMessage(state, - format("{}Temperature is out of range (too low) for fluid [{}] conductivity **", - RoutineName, - state.dataFluid->GlycolData(GlycolIndex).Name)); + format("{}: Temperature is out of range (too low) for fluid [{}] conductivity **", + routineName, + this->Name)); ShowContinueError(state, format("..Called From:{},Temperature=[{:.2R}], supplied data range=[{:.2R},{:.2R}]", CalledFrom, Temperature, - state.dataFluid->GlycolData(GlycolIndex).CondLowTempValue, - state.dataFluid->GlycolData(GlycolIndex).CondHighTempValue)); + this->CondLowTempValue, + this->CondHighTempValue)); ShowContinueErrorTimeStamp(state, ""); } if (LowErrorThisTime) { ShowRecurringWarningErrorAtEnd(state, - std::string{RoutineName} + "Temperature out of range (too low) for fluid [" + - state.dataFluid->GlycolData(GlycolIndex).Name + "] conductivity **", - state.dataFluid->GlycolErrorTracking(GlycolIndex).ConductivityLowErrIndex, + format("{}: Temperature out of range (too low) for fluid [{}] conductivity **", routineName, this->Name), + glycolError.ConductivityLowErrIndex, Temperature, Temperature, _, @@ -7505,24 +7707,23 @@ namespace Fluid { "{C}"); } - if ((HighErrorThisTime) && (state.dataFluid->HighTempLimitErrGetConductivityGlycol <= state.dataFluid->GlycolErrorLimitTest)) { + if ((HighErrorThisTime) && (state.dataFluidProperties->HighTempLimitErrGetConductivityGlycol <= state.dataFluidProperties->GlycolErrorLimitTest)) { ShowWarningMessage(state, - format("{}Temperature is out of range (too high) for fluid [{}] conductivity **", - RoutineName, - state.dataFluid->GlycolData(GlycolIndex).Name)); + format("{}: Temperature is out of range (too high) for fluid [{}] conductivity **", + routineName, + this->Name)); ShowContinueError(state, format("..Called From:{},Temperature=[{:.2R}], supplied data range=[{:.2R},{:.2R}]", CalledFrom, Temperature, - state.dataFluid->GlycolData(GlycolIndex).CondLowTempValue, - state.dataFluid->GlycolData(GlycolIndex).CondHighTempValue)); + this->CondLowTempValue, + this->CondHighTempValue)); ShowContinueErrorTimeStamp(state, ""); } if (HighErrorThisTime) { ShowRecurringWarningErrorAtEnd(state, - std::string{RoutineName} + "Temperature out of range (too high) for fluid [" + - state.dataFluid->GlycolData(GlycolIndex).Name + "] conductivity **", - state.dataFluid->GlycolErrorTracking(GlycolIndex).ConductivityHighErrIndex, + format("{}: Temperature out of range (too high) for fluid [{}] conductivity **", routineName, this->Name), + glycolError.ConductivityHighErrIndex, Temperature, Temperature, _, @@ -7534,13 +7735,11 @@ namespace Fluid { return ReturnValue; } - //***************************************************************************** - - Real64 GetViscosityGlycol(EnergyPlusData &state, - std::string_view const Glycol, // carries in substance name - Real64 const Temperature, // actual temperature given as input - int &GlycolIndex, // Index to Glycol Properties - std::string_view const CalledFrom // routine this function was called from (error messages) + Real64 GetConductivityGlycol(EnergyPlusData &state, + std::string_view const Glycol, // carries in substance name + Real64 const Temperature, // actual temperature given as input + int &GlycolIndex, // Index to Glycol Properties + std::string_view const CalledFrom // routine this function was called from (error messages) ) { @@ -7549,11 +7748,11 @@ namespace Fluid { // DATE WRITTEN June 2004 // PURPOSE OF THIS FUNCTION: - // This subroutine finds the viscosity for glycols at different + // This subroutine finds the conductivity for glycols at different // temperatures. // METHODOLOGY EMPLOYED: - // Linear interpolation is used to find viscosity values for a + // Linear interpolation is used to find conductivity values for a // particular glycol (water or some mixture of water and another fluid). // Warnings are given if the point is not clearly in the bounds of the // glycol data. The value returned is the appropriate limit value. @@ -7562,107 +7761,124 @@ namespace Fluid { // GetFluidPropertiesData: subroutine enforces that temperatures in // all temperature lists are entered in ascending order. - // Return value - Real64 ReturnValue; // Value for function - - // FUNCTION PARAMETERS: - static constexpr std::string_view RoutineName("GetViscosityGlycol: "); - - // FUNCTION LOCAL VARIABLE DECLARATIONS: - bool LowErrorThisTime = false; - bool HighErrorThisTime = false; - // Get the input if we haven't already - if (state.dataFluid->GetInput) { + if (state.dataFluidProperties->GetInput) { GetFluidPropertiesData(state); - state.dataFluid->GetInput = false; + state.dataFluidProperties->GetInput = false; } // If no glycols, no fluid properties can be evaluated int GlycolNum = 0; - if (state.dataFluid->NumOfGlycols == 0) + if (state.dataFluidProperties->NumOfGlycols == 0) ReportFatalGlycolErrors( - state, state.dataFluid->NumOfGlycols, GlycolNum, true, Glycol, "GetViscosityGlycol", "viscosity", CalledFrom); + state, state.dataFluidProperties->NumOfGlycols, GlycolNum, true, Glycol, "GetConductivityGlycol", "conductivity", CalledFrom); // If glycol index has not yet been found for this fluid, find its value now if (GlycolIndex > 0) { GlycolNum = GlycolIndex; } else { // Find which refrigerant (index) is being requested - GlycolNum = FindGlycol(state, Glycol); + GlycolNum = GetGlycolNum(state, Glycol); if (GlycolNum == 0) { ReportFatalGlycolErrors( - state, state.dataFluid->NumOfGlycols, GlycolNum, true, Glycol, "GetViscosityGlycol", "viscosity", CalledFrom); + state, state.dataFluidProperties->NumOfGlycols, GlycolNum, true, Glycol, "GetConductivityGlycol", "conductivity", CalledFrom); } GlycolIndex = GlycolNum; } // If user didn't input data (shouldn't get this far, but just in case...), we can't find a value - if (!state.dataFluid->GlycolData(GlycolIndex).ViscDataPresent) { + return state.dataFluidProperties->GlycolData(GlycolIndex).getConductivity(state, Temperature, CalledFrom); + } + + //***************************************************************************** + + Real64 GlycolData::getViscosity(EnergyPlusData &state, + Real64 const Temperature, // actual temperature given as input + std::string_view const CalledFrom // routine this function was called from (error messages) + ) + { + + // FUNCTION INFORMATION: + // AUTHOR Rick Strand + // DATE WRITTEN June 2004 + + // PURPOSE OF THIS FUNCTION: + // This subroutine finds the viscosity for glycols at different + // temperatures. + + // METHODOLOGY EMPLOYED: + // Linear interpolation is used to find viscosity values for a + // particular glycol (water or some mixture of water and another fluid). + // Warnings are given if the point is not clearly in the bounds of the + // glycol data. The value returned is the appropriate limit value. + + // REFERENCES: + // GetFluidPropertiesData: subroutine enforces that temperatures in + // all temperature lists are entered in ascending order. + + // Return value + Real64 ReturnValue; // Value for function + + // FUNCTION PARAMETERS: + static constexpr std::string_view routineName = "GlycolData::getViscosity"; + + // FUNCTION LOCAL VARIABLE DECLARATIONS: + bool LowErrorThisTime = false; + bool HighErrorThisTime = false; + + // If user didn't input data (shouldn't get this far, but just in case...), we can't find a value + if (!this->ViscDataPresent) { ReportFatalGlycolErrors(state, - state.dataFluid->NumOfGlycols, - GlycolNum, - state.dataFluid->GlycolData(GlycolIndex).ViscDataPresent, - Glycol, + state.dataFluidProperties->NumOfGlycols, + this->Num, + this->ViscDataPresent, + this->Name, "GetViscosityGlycol", "viscosity", CalledFrom); } // Now determine the value of specific heat using interpolation - if (Temperature < state.dataFluid->GlycolData(GlycolIndex).ViscLowTempValue) { // Temperature too low + if (Temperature < this->ViscLowTempValue) { // Temperature too low LowErrorThisTime = true; - ReturnValue = state.dataFluid->GlycolData(GlycolIndex).ViscValues(state.dataFluid->GlycolData(GlycolIndex).ViscLowTempIndex); - } else if (Temperature > state.dataFluid->GlycolData(GlycolIndex).ViscHighTempValue) { // Temperature too high + ReturnValue = this->ViscValues(this->ViscLowTempIndex); + } else if (Temperature > this->ViscHighTempValue) { // Temperature too high HighErrorThisTime = true; - ReturnValue = state.dataFluid->GlycolData(GlycolIndex).ViscValues(state.dataFluid->GlycolData(GlycolIndex).ViscHighTempIndex); + ReturnValue = this->ViscValues(this->ViscHighTempIndex); } else { // Temperature somewhere between the lowest and highest value - ReturnValue = state.dataFluid->GlycolData(GlycolIndex).ViscValues(state.dataFluid->GlycolData(GlycolIndex).ViscLowTempIndex); - // bracket is temp > low, <= high (for interpolation - for (int Loop = state.dataFluid->GlycolData(GlycolIndex).ViscLowTempIndex + 1; - Loop <= state.dataFluid->GlycolData(GlycolIndex).ViscHighTempIndex; - ++Loop) { - if (Temperature > state.dataFluid->GlycolData(GlycolIndex).ViscTemps(Loop)) continue; - ReturnValue = GetInterpValue(state, - Temperature, - state.dataFluid->GlycolData(GlycolIndex).ViscTemps(Loop - 1), - state.dataFluid->GlycolData(GlycolIndex).ViscTemps(Loop), - state.dataFluid->GlycolData(GlycolIndex).ViscValues(Loop - 1), - state.dataFluid->GlycolData(GlycolIndex).ViscValues(Loop)); - break; // DO loop - } + int LoTempIndex = FindArrayIndex(Temperature, this->ViscTemps, 1, this->NumViscTempPts); + Real64 TempInterpRatio = (Temperature - this->ViscTemps(LoTempIndex)) / (this->ViscTemps(LoTempIndex+1) - this->ViscTemps(LoTempIndex)); + ReturnValue = this->ViscValues(LoTempIndex) + TempInterpRatio * (this->ViscValues(LoTempIndex+1) - this->ViscValues(LoTempIndex)); } // Error handling if (!state.dataGlobal->WarmupFlag) { - + auto &glycolError = state.dataFluidProperties->GlycolErrorTracking(this->Num); if (LowErrorThisTime) { - ++state.dataFluid->GlycolErrorTracking(GlycolIndex).ViscosityLowErrCount; - state.dataFluid->LowTempLimitErrGetViscosityGlycol = state.dataFluid->GlycolErrorTracking(GlycolIndex).ViscosityLowErrCount; + ++glycolError.ViscosityLowErrCount; + state.dataFluidProperties->LowTempLimitErrGetViscosityGlycol = glycolError.ViscosityLowErrCount; } if (HighErrorThisTime) { - ++state.dataFluid->GlycolErrorTracking(GlycolIndex).ViscosityHighErrCount; - state.dataFluid->HighTempLimitErrGetViscosityGlycol = - state.dataFluid->GlycolErrorTracking(GlycolIndex).ViscosityHighErrCount; + ++glycolError.ViscosityHighErrCount; + state.dataFluidProperties->HighTempLimitErrGetViscosityGlycol = glycolError.ViscosityHighErrCount; } - if ((LowErrorThisTime) && (state.dataFluid->LowTempLimitErrGetViscosityGlycol <= state.dataFluid->GlycolErrorLimitTest)) { + if ((LowErrorThisTime) && (state.dataFluidProperties->LowTempLimitErrGetViscosityGlycol <= state.dataFluidProperties->GlycolErrorLimitTest)) { ShowWarningMessage(state, - format("{}Temperature is out of range (too low) for fluid [{}] viscosity **", - RoutineName, - state.dataFluid->GlycolData(GlycolIndex).Name)); + format("{}: Temperature is out of range (too low) for fluid [{}] viscosity **", + routineName, + glycolError.Name)); ShowContinueError(state, format("..Called From:{},Temperature=[{:.2R}], supplied data range=[{:.2R},{:.2R}]", CalledFrom, Temperature, - state.dataFluid->GlycolData(GlycolIndex).ViscLowTempValue, - state.dataFluid->GlycolData(GlycolIndex).ViscHighTempValue)); + this->ViscLowTempValue, + this->ViscHighTempValue)); ShowContinueErrorTimeStamp(state, ""); } if (LowErrorThisTime) { ShowRecurringWarningErrorAtEnd(state, - std::string{RoutineName} + "Temperature out of range (too low) for fluid [" + - state.dataFluid->GlycolData(GlycolIndex).Name + "] viscosity **", - state.dataFluid->GlycolErrorTracking(GlycolIndex).ViscosityLowErrIndex, + format("{}: Temperature out of range (too low) for fluid [{}] viscosity **", routineName, glycolError.Name), + glycolError.ViscosityLowErrIndex, Temperature, Temperature, _, @@ -7670,24 +7886,23 @@ namespace Fluid { "{C}"); } - if ((HighErrorThisTime) && (state.dataFluid->HighTempLimitErrGetViscosityGlycol <= state.dataFluid->GlycolErrorLimitTest)) { + if ((HighErrorThisTime) && (state.dataFluidProperties->HighTempLimitErrGetViscosityGlycol <= state.dataFluidProperties->GlycolErrorLimitTest)) { ShowWarningMessage(state, format("{}Temperature is out of range (too high) for fluid [{}] viscosity **", - RoutineName, - state.dataFluid->GlycolData(GlycolIndex).Name)); + routineName, + glycolError.Name)); ShowContinueError(state, format("..Called From:{},Temperature=[{:.2R}], supplied data range=[{:.2R},{:.2R}]", CalledFrom, Temperature, - state.dataFluid->GlycolData(GlycolIndex).ViscLowTempValue, - state.dataFluid->GlycolData(GlycolIndex).ViscHighTempValue)); + this->ViscLowTempValue, + this->ViscHighTempValue)); ShowContinueErrorTimeStamp(state, ""); } if (HighErrorThisTime) { ShowRecurringWarningErrorAtEnd(state, - std::string{RoutineName} + "Temperature out of range (too high) for fluid [" + - state.dataFluid->GlycolData(GlycolIndex).Name + "] viscosity **", - state.dataFluid->GlycolErrorTracking(GlycolIndex).ViscosityHighErrIndex, + format("{}: Temperature out of range (too high) for fluid [{}] viscosity **", routineName, glycolError.Name), + glycolError.ViscosityHighErrIndex, Temperature, Temperature, _, @@ -7699,6 +7914,60 @@ namespace Fluid { return ReturnValue; } + Real64 GetViscosityGlycol(EnergyPlusData &state, + std::string_view const Glycol, // carries in substance name + Real64 const Temperature, // actual temperature given as input + int &GlycolIndex, // Index to Glycol Properties + std::string_view const CalledFrom // routine this function was called from (error messages) + ) + { + + // FUNCTION INFORMATION: + // AUTHOR Rick Strand + // DATE WRITTEN June 2004 + + // PURPOSE OF THIS FUNCTION: + // This subroutine finds the viscosity for glycols at different + // temperatures. + + // METHODOLOGY EMPLOYED: + // Linear interpolation is used to find viscosity values for a + // particular glycol (water or some mixture of water and another fluid). + // Warnings are given if the point is not clearly in the bounds of the + // glycol data. The value returned is the appropriate limit value. + + // REFERENCES: + // GetFluidPropertiesData: subroutine enforces that temperatures in + // all temperature lists are entered in ascending order. + + // Get the input if we haven't already + if (state.dataFluidProperties->GetInput) { + GetFluidPropertiesData(state); + state.dataFluidProperties->GetInput = false; + } + + // If no glycols, no fluid properties can be evaluated + int GlycolNum = 0; + if (state.dataFluidProperties->NumOfGlycols == 0) + ReportFatalGlycolErrors( + state, state.dataFluidProperties->NumOfGlycols, GlycolNum, true, Glycol, "GetViscosityGlycol", "viscosity", CalledFrom); + + // If glycol index has not yet been found for this fluid, find its value now + if (GlycolIndex > 0) { + GlycolNum = GlycolIndex; + } else { // Find which refrigerant (index) is being requested + GlycolNum = GetGlycolNum(state, Glycol); + if (GlycolNum == 0) { + ReportFatalGlycolErrors( + state, state.dataFluidProperties->NumOfGlycols, GlycolNum, true, Glycol, "GetViscosityGlycol", "viscosity", CalledFrom); + } + GlycolIndex = GlycolNum; + } + + // Now determine the value of specific heat using interpolation + return state.dataFluidProperties->GlycolData(GlycolIndex).getViscosity(state, Temperature, CalledFrom); + } + //***************************************************************************** void GetInterpValue_error(EnergyPlusData &state) @@ -7706,7 +7975,7 @@ namespace Fluid { ShowFatalError(state, "GetInterpValue: Temperatures for fluid property data too close together, division by zero"); } - int FindRefrigerant(EnergyPlusData &state, std::string_view const Refrigerant) // carries in substance name + int GetRefrigNum(EnergyPlusData &state, std::string_view const name) // carries in substance name { // FUNCTION INFORMATION: @@ -7724,31 +7993,30 @@ namespace Fluid { // to the index within the derived type. If the input has not been read // yet for some reason, that must be done. - // Return value - int FindRefrigerant; - // Make sure we have already read in the input - if (state.dataFluid->GetInput) { + if (state.dataFluidProperties->GetInput) { GetFluidPropertiesData(state); - state.dataFluid->GetInput = false; + state.dataFluidProperties->GetInput = false; } // Check to see if this glycol shows up in the glycol data - int Found = Util::FindItemInList(Util::makeUPPER(Refrigerant), state.dataFluid->RefrigData); + int refrigNum = Util::FindItemInList(Util::makeUPPER(name), state.dataFluidProperties->RefrigData); - if (Found > 0) { - FindRefrigerant = Found; - state.dataFluid->RefrigUsed(Found) = true; - } else { // not found - errors handled in calling proceedure - FindRefrigerant = 0; + if (refrigNum > 0) { + state.dataFluidProperties->RefrigUsed(refrigNum) = true; } - return FindRefrigerant; + return refrigNum; + } + + RefrigerantData *GetRefrig(EnergyPlusData &state, std::string_view const name) { + int refrigNum = GetRefrigNum(state, name); + return (refrigNum > 0) ? &state.dataFluidProperties->RefrigData(refrigNum) : nullptr; } //***************************************************************************** - int FindGlycol(EnergyPlusData &state, std::string_view const Glycol) // carries in substance name + int GetGlycolNum(EnergyPlusData &state, std::string_view const name) // carries in substance name { // FUNCTION INFORMATION: @@ -7766,28 +8034,27 @@ namespace Fluid { // to the index within the derived type. If the input has not been read // yet for some reason, that must be done. - // Return value - int FindGlycol; - // Make sure we have already read in the input - if (state.dataFluid->GetInput) { + if (state.dataFluidProperties->GetInput) { GetFluidPropertiesData(state); - state.dataFluid->GetInput = false; + state.dataFluidProperties->GetInput = false; } // Check to see if this glycol shows up in the glycol data - int Found = Util::FindItemInList(Util::makeUPPER(Glycol), - state.dataFluid->GlycolData, - state.dataFluid->NumOfGlycols); // GlycolData is allocated to NumOfGlyConcs + int glycolNum = Util::FindItemInList(Util::makeUPPER(name), + state.dataFluidProperties->GlycolData, + state.dataFluidProperties->NumOfGlycols); // GlycolData is allocated to NumOfGlyConcs - if (Found > 0) { - FindGlycol = Found; - state.dataFluid->GlycolUsed(Found) = true; - } else { // return zero - error checking in calling proceedure - FindGlycol = 0; + if (glycolNum > 0) { + state.dataFluidProperties->GlycolUsed(glycolNum) = true; } - return FindGlycol; + return glycolNum; + } + + GlycolData *GetGlycol(EnergyPlusData &state, std::string_view const name) { + int glycolNum = GetGlycolNum(state, name); + return (glycolNum > 0) ? &state.dataFluidProperties->GlycolData(glycolNum) : nullptr; } //***************************************************************************** @@ -7813,8 +8080,8 @@ namespace Fluid { // Check to see if this glycol shows up in the glycol data // ArrayLength = SIZE(GlycolData) - if (Idx > 0 && Idx <= state.dataFluid->NumOfGlycols) { - return state.dataFluid->GlycolData(Idx).Name; + if (Idx > 0 && Idx <= state.dataFluidProperties->NumOfGlycols) { + return state.dataFluidProperties->GlycolData(Idx).Name; } else { // return blank - error checking in calling proceedure return ""; } @@ -7986,9 +8253,9 @@ namespace Fluid { } if (ErrorFlag && (CalledFrom != "ReportAndTestRefrigerants")) { - ++state.dataFluid->TempRangeErrCountGetInterpolatedSatProp; + ++state.dataFluidProperties->TempRangeErrCountGetInterpolatedSatProp; // send warning - if (state.dataFluid->TempRangeErrCountGetInterpolatedSatProp <= state.dataFluid->RefrigerantErrorLimitTest) { + if (state.dataFluidProperties->TempRangeErrCountGetInterpolatedSatProp <= state.dataFluidProperties->RefrigerantErrorLimitTest) { ShowWarningError(state, "GetInterpolatedSatProp: Saturation temperature for interpolation is out of range of data supplied: **"); ShowContinueErrorTimeStamp(state, fmt::format(" Called from:{}", CalledFrom)); ShowContinueError(state, format("Refrigerant temperature = {:.2R}", Temperature)); @@ -7996,7 +8263,7 @@ namespace Fluid { } else { ShowRecurringWarningErrorAtEnd(state, "GetInterpolatedSatProp: Refrigerant temperature for interpolation out of range error", - state.dataFluid->TempRangeErrIndexGetInterpolatedSatProp, + state.dataFluidProperties->TempRangeErrIndexGetInterpolatedSatProp, Temperature, Temperature, _, @@ -8024,20 +8291,20 @@ namespace Fluid { // Return value int CheckFluidPropertyName; - if (state.dataFluid->GetInput) { + if (state.dataFluidProperties->GetInput) { GetFluidPropertiesData(state); - state.dataFluid->GetInput = false; + state.dataFluidProperties->GetInput = false; } // Item must be either in Refrigerant or Glycol list int Found = 0; - if (state.dataFluid->NumOfRefrigerants > 0) { - Found = Util::FindItemInList(NameToCheck, state.dataFluid->RefrigData); + if (state.dataFluidProperties->NumOfRefrigerants > 0) { + Found = Util::FindItemInList(NameToCheck, state.dataFluidProperties->RefrigData); } if (Found == 0) { - if (state.dataFluid->NumOfGlycols > 0) { + if (state.dataFluidProperties->NumOfGlycols > 0) { Found = Util::FindItemInList( - NameToCheck, state.dataFluid->GlycolData, state.dataFluid->NumOfGlycols); // GlycolData is allocated to NumOfGlyConcs + NameToCheck, state.dataFluidProperties->GlycolData, state.dataFluidProperties->NumOfGlycols); // GlycolData is allocated to NumOfGlyConcs } } @@ -8060,16 +8327,16 @@ namespace Fluid { bool NeedOrphanMessage = true; int NumUnusedRefrig = 0; - for (int Item = 1; Item <= state.dataFluid->NumOfRefrigerants; ++Item) { - if (state.dataFluid->RefrigUsed(Item)) continue; - if (Util::SameString(state.dataFluid->RefrigData(Item).Name, Steam)) continue; + for (int Item = 1; Item <= state.dataFluidProperties->NumOfRefrigerants; ++Item) { + if (state.dataFluidProperties->RefrigUsed(Item)) continue; + if (Util::SameString(state.dataFluidProperties->RefrigData(Item).Name, Steam)) continue; if (NeedOrphanMessage && state.dataGlobal->DisplayUnusedObjects) { ShowWarningError(state, "The following fluid names are \"Unused Fluids\". These fluids are in the idf"); ShowContinueError(state, " file but are never obtained by the simulation and therefore are NOT used."); NeedOrphanMessage = false; } if (state.dataGlobal->DisplayUnusedObjects) { - ShowMessage(state, format("Refrigerant={}", state.dataFluid->RefrigData(Item).Name)); + ShowMessage(state, format("Refrigerant={}", state.dataFluidProperties->RefrigData(Item).Name)); } else { ++NumUnusedRefrig; } @@ -8077,18 +8344,18 @@ namespace Fluid { int NumUnusedGlycol = 0; - for (int Item = 1; Item <= state.dataFluid->NumOfGlycols; ++Item) { - if (state.dataFluid->GlycolUsed(Item)) continue; - if (Util::SameString(state.dataFluid->GlycolData(Item).Name, Water)) continue; - if (Util::SameString(state.dataFluid->GlycolData(Item).Name, EthyleneGlycol)) continue; - if (Util::SameString(state.dataFluid->GlycolData(Item).Name, PropyleneGlycol)) continue; + for (int Item = 1; Item <= state.dataFluidProperties->NumOfGlycols; ++Item) { + if (state.dataFluidProperties->GlycolUsed(Item)) continue; + if (Util::SameString(state.dataFluidProperties->GlycolData(Item).Name, Water)) continue; + if (Util::SameString(state.dataFluidProperties->GlycolData(Item).Name, EthyleneGlycol)) continue; + if (Util::SameString(state.dataFluidProperties->GlycolData(Item).Name, PropyleneGlycol)) continue; if (NeedOrphanMessage && state.dataGlobal->DisplayUnusedObjects) { ShowWarningError(state, "The following fluid names are \"Unused Fluids\". These fluids are in the idf"); ShowContinueError(state, " file but are never obtained by the simulation and therefore are NOT used."); NeedOrphanMessage = false; } if (state.dataGlobal->DisplayUnusedObjects) { - ShowMessage(state, format("Glycol={}", state.dataFluid->GlycolData(Item).Name)); + ShowMessage(state, format("Glycol={}", state.dataFluidProperties->GlycolData(Item).Name)); } else { ++NumUnusedGlycol; } @@ -8120,7 +8387,7 @@ namespace Fluid { // Consolidate fatal error reporting for glycols. // check and see if it might be a refrigerant - int RefrigNo = FindRefrigerant(state, GlycolName); + int RefrigNo = GetRefrigNum(state, GlycolName); if (NumGlycols == 0) { ShowSevereError( @@ -8162,7 +8429,7 @@ namespace Fluid { // Consolidate fatal error reporting for refrigerants. // check and see if it might be a refrigerant - int GlycolNo = FindGlycol(state, RefrigerantName); + int GlycolNo = GetGlycolNum(state, RefrigerantName); if (NumRefrigerants == 0) { ShowSevereError(state, @@ -8193,28 +8460,28 @@ namespace Fluid { { // Get the input if we haven't already - if (state.dataFluid->GetInput) { + if (state.dataFluidProperties->GetInput) { GetFluidPropertiesData(state); - state.dataFluid->GetInput = false; + state.dataFluidProperties->GetInput = false; } if (FluidIndex > 0) { - MinTempLimit = state.dataFluid->GlycolData(FluidIndex).RhoLowTempValue; - MaxTempLimit = state.dataFluid->GlycolData(FluidIndex).RhoHighTempValue; + MinTempLimit = state.dataFluidProperties->GlycolData(FluidIndex).RhoLowTempValue; + MaxTempLimit = state.dataFluidProperties->GlycolData(FluidIndex).RhoHighTempValue; } } void GetFluidSpecificHeatTemperatureLimits(EnergyPlusData &state, int const FluidIndex, Real64 &MinTempLimit, Real64 &MaxTempLimit) { // Get the input if we haven't already - if (state.dataFluid->GetInput) { + if (state.dataFluidProperties->GetInput) { GetFluidPropertiesData(state); - state.dataFluid->GetInput = false; + state.dataFluidProperties->GetInput = false; } if (FluidIndex > 0) { - MinTempLimit = state.dataFluid->GlycolData(FluidIndex).CpLowTempValue; - MaxTempLimit = state.dataFluid->GlycolData(FluidIndex).CpHighTempValue; + MinTempLimit = state.dataFluidProperties->GlycolData(FluidIndex).CpLowTempValue; + MaxTempLimit = state.dataFluidProperties->GlycolData(FluidIndex).CpHighTempValue; } } @@ -8229,19 +8496,19 @@ namespace Fluid { } Real64 GlycolAPI::specificHeat(EnergyPlusData &state, Real64 temperature) { - return Fluid::GetSpecificHeatGlycol(state, this->glycolName, temperature, this->glycolIndex, this->cf); + return FluidProperties::GetSpecificHeatGlycol(state, this->glycolName, temperature, this->glycolIndex, this->cf); } Real64 GlycolAPI::density(EnergyPlusData &state, Real64 temperature) { - return Fluid::GetDensityGlycol(state, this->glycolName, temperature, this->glycolIndex, this->cf); + return FluidProperties::GetDensityGlycol(state, this->glycolName, temperature, this->glycolIndex, this->cf); } Real64 GlycolAPI::conductivity(EnergyPlusData &state, Real64 temperature) { - return Fluid::GetConductivityGlycol(state, this->glycolName, temperature, this->glycolIndex, this->cf); + return FluidProperties::GetConductivityGlycol(state, this->glycolName, temperature, this->glycolIndex, this->cf); } Real64 GlycolAPI::viscosity(EnergyPlusData &state, Real64 temperature) { - return Fluid::GetViscosityGlycol(state, this->glycolName, temperature, this->glycolIndex, this->cf); + return FluidProperties::GetViscosityGlycol(state, this->glycolName, temperature, this->glycolIndex, this->cf); } RefrigerantAPI::RefrigerantAPI(EnergyPlusData &state, std::string const &refrigName) @@ -8255,35 +8522,35 @@ namespace Fluid { } Real64 RefrigerantAPI::saturationPressure(EnergyPlusData &state, Real64 temperature) { - return Fluid::GetSatPressureRefrig(state, this->rName, temperature, this->rIndex, this->cf); + return FluidProperties::GetSatPressureRefrig(state, this->rName, temperature, this->rIndex, this->cf); } Real64 RefrigerantAPI::saturationTemperature(EnergyPlusData &state, Real64 pressure) { - return Fluid::GetSatTemperatureRefrig(state, this->rName, pressure, this->rIndex, this->cf); + return FluidProperties::GetSatTemperatureRefrig(state, this->rName, pressure, this->rIndex, this->cf); } Real64 RefrigerantAPI::saturatedEnthalpy(EnergyPlusData &state, Real64 temperature, Real64 quality) { - return Fluid::GetSatEnthalpyRefrig(state, this->rName, temperature, quality, this->rIndex, this->cf); + return FluidProperties::GetSatEnthalpyRefrig(state, this->rName, temperature, quality, this->rIndex, this->cf); } Real64 RefrigerantAPI::saturatedDensity(EnergyPlusData &state, Real64 temperature, Real64 quality) { - return Fluid::GetSatDensityRefrig(state, this->rName, temperature, quality, this->rIndex, this->cf); + return FluidProperties::GetSatDensityRefrig(state, this->rName, temperature, quality, this->rIndex, this->cf); } Real64 RefrigerantAPI::saturatedSpecificHeat(EnergyPlusData &state, Real64 temperature, Real64 quality) { - return Fluid::GetSatSpecificHeatRefrig(state, this->rName, temperature, quality, this->rIndex, this->cf); + return FluidProperties::GetSatSpecificHeatRefrig(state, this->rName, temperature, quality, this->rIndex, this->cf); } Real64 RefrigerantAPI::superHeatedEnthalpy(EnergyPlusData &state, Real64 temperature, Real64 pressure) { - return Fluid::GetSupHeatEnthalpyRefrig(state, this->rName, temperature, pressure, this->rIndex, this->cf); + return FluidProperties::GetSupHeatEnthalpyRefrig(state, this->rName, temperature, pressure, this->rIndex, this->cf); } Real64 RefrigerantAPI::superHeatedPressure(EnergyPlusData &state, Real64 temperature, Real64 enthalpy) { - return Fluid::GetSupHeatPressureRefrig(state, this->rName, temperature, enthalpy, this->rIndex, this->cf); + return FluidProperties::GetSupHeatPressureRefrig(state, this->rName, temperature, enthalpy, this->rIndex, this->cf); } Real64 RefrigerantAPI::superHeatedDensity(EnergyPlusData &state, Real64 temperature, Real64 pressure) { - return Fluid::GetSupHeatDensityRefrig(state, this->rName, temperature, pressure, this->rIndex, this->cf); + return FluidProperties::GetSupHeatDensityRefrig(state, this->rName, temperature, pressure, this->rIndex, this->cf); } } // namespace Fluid diff --git a/src/EnergyPlus/FluidProperties.hh b/src/EnergyPlus/FluidProperties.hh index fbb86d00dbe..3264330f5ce 100644 --- a/src/EnergyPlus/FluidProperties.hh +++ b/src/EnergyPlus/FluidProperties.hh @@ -67,7 +67,7 @@ namespace EnergyPlus { // Forward declarations struct EnergyPlusData; -namespace Fluid { +namespace FluidProperties { int constexpr EthyleneGlycolIndex = -2; int constexpr PropyleneGlycolIndex = -1; @@ -99,237 +99,277 @@ namespace Fluid { std::uint64_t constexpr t_sh_cache_mask = (t_sh_cache_size - 1); #endif - struct FluidPropsRefrigerantData + struct RefrigerantData { // Members std::string Name; // Name of the refrigerant - int NumPsPoints; // Number of saturation pressure - Real64 PsLowTempValue; // Low Temperature Value for Ps (>0.0) - Real64 PsHighTempValue; // High Temperature Value for Ps (max in tables) - int PsLowTempIndex; // Low Temperature Min Index for Ps (>0.0) - int PsHighTempIndex; // High Temperature Max Index for Ps (>0.0) - Real64 PsLowPresValue; // Low Pressure Value for Ps (>0.0) - Real64 PsHighPresValue; // High Pressure Value for Ps (max in tables) - int PsLowPresIndex; // Low Pressure Min Index for Ps (>0.0) - int PsHighPresIndex; // High Pressure Max Index for Ps (>0.0) + int Num = 0; + + int NumPsPoints = 0; // Number of saturation pressure + Real64 PsLowTempValue = 0.0; // Low Temperature Value for Ps (>0.0) + Real64 PsHighTempValue = 0.0; // High Temperature Value for Ps (max in tables) + int PsLowTempIndex = 0; // Low Temperature Min Index for Ps (>0.0) + int PsHighTempIndex = 0; // High Temperature Max Index for Ps (>0.0) + Real64 PsLowPresValue = 0.0; // Low Pressure Value for Ps (>0.0) + Real64 PsHighPresValue = 0.0; // High Pressure Value for Ps (max in tables) + int PsLowPresIndex = 0; // Low Pressure Min Index for Ps (>0.0) + int PsHighPresIndex = 0; // High Pressure Max Index for Ps (>0.0) Array1D PsTemps; // Temperatures for saturation pressures Array1D PsValues; // Saturation pressures at PsTemps - int NumHPoints; // Number of enthalpy points - Real64 HfLowTempValue; // Low Temperature Value for Hf (>0.0) - Real64 HfHighTempValue; // High Temperature Value for Hf (max in tables) - int HfLowTempIndex; // Low Temperature Min Index for Hf (>0.0) - int HfHighTempIndex; // High Temperature Max Index for Hf (>0.0) - Real64 HfgLowTempValue; // Low Temperature Value for Hfg (>0.0) - Real64 HfgHighTempValue; // High Temperature Value for Hfg (max in tables) - int HfgLowTempIndex; // Low Temperature Min Index for Hfg (>0.0) - int HfgHighTempIndex; // High Temperature Max Index for Hfg (>0.0) + + int NumHPoints = 0; // Number of enthalpy points + Real64 HfLowTempValue = 0.0; // Low Temperature Value for Hf (>0.0) + Real64 HfHighTempValue = 0.0; // High Temperature Value for Hf (max in tables) + int HfLowTempIndex = 0; // Low Temperature Min Index for Hf (>0.0) + int HfHighTempIndex = 0; // High Temperature Max Index for Hf (>0.0) + Real64 HfgLowTempValue = 0.0; // Low Temperature Value for Hfg (>0.0) + Real64 HfgHighTempValue = 0.0; // High Temperature Value for Hfg (max in tables) + int HfgLowTempIndex = 0; // Low Temperature Min Index for Hfg (>0.0) + int HfgHighTempIndex = 0; // High Temperature Max Index for Hfg (>0.0) Array1D HTemps; // Temperatures for enthalpy points Array1D HfValues; // Enthalpy of saturated fluid at HTemps Array1D HfgValues; // Enthalpy of saturated fluid/gas at HTemps - int NumCpPoints; // Number of specific heat of fluid points - Real64 CpfLowTempValue; // Low Temperature Value for Cpf (>0.0) - Real64 CpfHighTempValue; // High Temperature Value for Cpf (max in tables) - int CpfLowTempIndex; // Low Temperature Min Index for Cpf (>0.0) - int CpfHighTempIndex; // High Temperature Max Index for Cpf (>0.0) - Real64 CpfgLowTempValue; // Low Temperature Value for Cpfg (>0.0) - Real64 CpfgHighTempValue; // High Temperature Value for Cpfg (max in tables) - int CpfgLowTempIndex; // Low Temperature Min Index for Cpfg (>0.0) - int CpfgHighTempIndex; // High Temperature Max Index for Cpfg (>0.0) + + int NumCpPoints = 0; // Number of specific heat of fluid points + Real64 CpfLowTempValue = 0.0; // Low Temperature Value for Cpf (>0.0) + Real64 CpfHighTempValue = 0.0; // High Temperature Value for Cpf (max in tables) + int CpfLowTempIndex = 0; // Low Temperature Min Index for Cpf (>0.0) + int CpfHighTempIndex = 0; // High Temperature Max Index for Cpf (>0.0) + Real64 CpfgLowTempValue = 0.0; // Low Temperature Value for Cpfg (>0.0) + Real64 CpfgHighTempValue = 0.0; // High Temperature Value for Cpfg (max in tables) + int CpfgLowTempIndex = 0; // Low Temperature Min Index for Cpfg (>0.0) + int CpfgHighTempIndex = 0; // High Temperature Max Index for Cpfg (>0.0) Array1D CpTemps; // Temperatures for specific heat points Array1D CpfValues; // Specific heat of saturated fluid at CpTemps Array1D CpfgValues; // Specific heat of saturated fluid/gas at CpTemps - int NumRhoPoints; // Number of density of fluid points - Real64 RhofLowTempValue; // Low Temperature Value for Rhof (>0.0) - Real64 RhofHighTempValue; // High Temperature Value for Rhof (max in tables) - int RhofLowTempIndex; // Low Temperature Min Index for Rhof (>0.0) - int RhofHighTempIndex; // High Temperature Max Index for Rhof (>0.0) - Real64 RhofgLowTempValue; // Low Temperature Value for Rhofg (>0.0) - Real64 RhofgHighTempValue; // High Temperature Value for Rhofg (max in tables) - int RhofgLowTempIndex; // Low Temperature Min Index for Rhofg (>0.0) - int RhofgHighTempIndex; // High Temperature Max Index for Rhofg (>0.0) + + int NumRhoPoints = 0; // Number of density of fluid points + Real64 RhofLowTempValue = 0.0; // Low Temperature Value for Rhof (>0.0) + Real64 RhofHighTempValue = 0.0; // High Temperature Value for Rhof (max in tables) + int RhofLowTempIndex = 0; // Low Temperature Min Index for Rhof (>0.0) + int RhofHighTempIndex = 0; // High Temperature Max Index for Rhof (>0.0) + Real64 RhofgLowTempValue = 0.0; // Low Temperature Value for Rhofg (>0.0) + Real64 RhofgHighTempValue = 0.0; // High Temperature Value for Rhofg (max in tables) + int RhofgLowTempIndex = 0; // Low Temperature Min Index for Rhofg (>0.0) + int RhofgHighTempIndex = 0; // High Temperature Max Index for Rhofg (>0.0) Array1D RhoTemps; // Temperatures for density of fluid points Array1D RhofValues; // Density of saturated fluid at RhoTemps Array1D RhofgValues; // Density of saturated fluid/gas at RhoTemps - int NumSuperTempPts; // Number of temperature points for superheated enthalpy - int NumSuperPressPts; // Number of pressure points for superheated enthalpy + + int NumSuperTempPts = 0; // Number of temperature points for superheated enthalpy + int NumSuperPressPts = 0; // Number of pressure points for superheated enthalpy Array1D SHTemps; // Temperatures for superheated gas Array1D SHPress; // Pressures for superheated gas Array2D HshValues; // Enthalpy of superheated gas at HshTemps, HshPress Array2D RhoshValues; // Density of superheated gas at HshTemps, HshPress - // Default Constructor - FluidPropsRefrigerantData() - : NumPsPoints(0), PsLowTempValue(0.0), PsHighTempValue(0.0), PsLowTempIndex(0), PsHighTempIndex(0), PsLowPresValue(0.0), - PsHighPresValue(0.0), PsLowPresIndex(0), PsHighPresIndex(0), NumHPoints(0), HfLowTempValue(0.0), HfHighTempValue(0.0), - HfLowTempIndex(0), HfHighTempIndex(0), HfgLowTempValue(0.0), HfgHighTempValue(0.0), HfgLowTempIndex(0), HfgHighTempIndex(0), - NumCpPoints(0), CpfLowTempValue(0.0), CpfHighTempValue(0.0), CpfLowTempIndex(0), CpfHighTempIndex(0), CpfgLowTempValue(0.0), - CpfgHighTempValue(0.0), CpfgLowTempIndex(0), CpfgHighTempIndex(0), NumRhoPoints(0), RhofLowTempValue(0.0), RhofHighTempValue(0.0), - RhofLowTempIndex(0), RhofHighTempIndex(0), RhofgLowTempValue(0.0), RhofgHighTempValue(0.0), RhofgLowTempIndex(0), RhofgHighTempIndex(0), - NumSuperTempPts(0), NumSuperPressPts(0) - { - } + Real64 getQuality(EnergyPlusData &state, + Real64 Temperature, // actual temperature given as input + Real64 Enthalpy, // actual enthalpy given as input + std::string_view CalledFrom); // routine this function was called from (error messages) + + Real64 getSatPressure(EnergyPlusData &state, + Real64 Temperature, // actual temperature given as input + std::string_view CalledFrom); // routine this function was called from (error messages) + + Real64 getSatTemperature(EnergyPlusData &state, + Real64 Pressure, // actual temperature given as input + std::string_view CalledFrom); // routine this function was called from (error messages) + + Real64 getSatEnthalpy(EnergyPlusData &state, + Real64 Temperature, // actual temperature given as input + Real64 Quality, // actual quality given as input + std::string_view CalledFrom); // routine this function was called from (error messages) + + Real64 getSatDensity(EnergyPlusData &state, + Real64 Temperature, // actual temperature given as input + Real64 Quality, // actual quality given as input + std::string_view CalledFrom); // routine this function was called from (error messages) + + Real64 getSatSpecificHeat(EnergyPlusData &state, + Real64 Temperature, // actual temperature given as input + Real64 Quality, // actual quality given as input + std::string_view CalledFrom); // routine this function was called from (error messages) + + Real64 getSupHeatEnthalpy(EnergyPlusData &state, + Real64 Temperature, // actual temperature given as input + Real64 Pressure, // actual pressure given as input + std::string_view CalledFrom); // routine this function was called from (error messages) + + Real64 getSupHeatPressure(EnergyPlusData &state, + Real64 Temperature, // actual temperature given as input + Real64 Enthalpy, // actual enthalpy given as input + std::string_view CalledFrom); // routine this function was called from (error messages) + + Real64 getSupHeatTemp(EnergyPlusData &state, + Real64 Pressure, // actual pressure given as input + Real64 Enthalpy, // actual enthalpy given as input + Real64 TempLow, // lower bound of temperature in the iteration + Real64 TempUp, // upper bound of temperature in the iteration + std::string_view CalledFrom); // routine this function was called from (error messages) + + Real64 getSupHeatDensity(EnergyPlusData &state, + Real64 Temperature, // actual temperature given as input + Real64 Pressure, // actual pressure given as input + std::string_view CalledFrom); // routine this function was called from (error messages) }; - struct FluidPropsGlycolRawData + struct GlycolRawData { // Members std::string Name; // Name of the glycol - bool CpDataPresent; // Flag set when specific heat data is available - int NumCpTempPts; // Number of temperature points for specific heat - int NumCpConcPts; // Number of concentration points for specific heat + int Num = 0; + + bool CpDataPresent = false; // Flag set when specific heat data is available + int NumCpTempPts = 0; // Number of temperature points for specific heat + int NumCpConcPts = 0; // Number of concentration points for specific heat Array1D CpTemps; // Temperatures for specific heat of glycol Array1D CpConcs; // Concentration for specific heat of glycol Array2D CpValues; // Specific heat data values - bool RhoDataPresent; // Flag set when density data is available - int NumRhoTempPts; // Number of temperature points for density - int NumRhoConcPts; // Number of concentration points for density + + bool RhoDataPresent = false; // Flag set when density data is available + int NumRhoTempPts = 0; // Number of temperature points for density + int NumRhoConcPts = 0; // Number of concentration points for density Array1D RhoTemps; // Temperatures for density of glycol Array1D RhoConcs; // Concentration for density of glycol Array2D RhoValues; // Density data values - bool CondDataPresent; // Flag set when conductivity data is available - int NumCondTempPts; // Number of temperature points for conductivity - int NumCondConcPts; // Number of concentration points for conductivity + + bool CondDataPresent = false; // Flag set when conductivity data is available + int NumCondTempPts = 0; // Number of temperature points for conductivity + int NumCondConcPts = 0; // Number of concentration points for conductivity Array1D CondTemps; // Temperatures for conductivity of glycol Array1D CondConcs; // Concentration for conductivity of glycol Array2D CondValues; // conductivity values - bool ViscDataPresent; // Flag set when viscosity data is available - int NumViscTempPts; // Number of temperature points for viscosity - int NumViscConcPts; // Number of concentration points for viscosity + + bool ViscDataPresent = false; // Flag set when viscosity data is available + int NumViscTempPts = 0; // Number of temperature points for viscosity + int NumViscConcPts = 0; // Number of concentration points for viscosity Array1D ViscTemps; // Temperatures for viscosity of glycol Array1D ViscConcs; // Concentration for viscosity of glycol Array2D ViscValues; // viscosity values - - // Default Constructor - FluidPropsGlycolRawData() - : CpDataPresent(false), NumCpTempPts(0), NumCpConcPts(0), RhoDataPresent(false), NumRhoTempPts(0), NumRhoConcPts(0), - CondDataPresent(false), NumCondTempPts(0), NumCondConcPts(0), ViscDataPresent(false), NumViscTempPts(0), NumViscConcPts(0) - { - } }; - struct FluidPropsGlycolData + struct GlycolData { // Members std::string Name; // Name of the glycol mixture (used by other parts of code) + int Num = 0; + std::string GlycolName; // Name of non-water fluid that is part of this mixture // (refers to ethylene glycol, propylene glycol, or user fluid) - int GlycolIndex; // Index in user defined glycol data (>0 = index in raw data, + int BaseGlycolIndex = 0; // Index in user defined glycol data (>0 = index in raw data, // -1=propylene glycol, -2=ethylene glycol) - Real64 Concentration; // Concentration (if applicable) - bool CpDataPresent; // Flag set when specific heat data is available - Real64 CpLowTempValue; // Low Temperature Value for Cp (>0.0) - Real64 CpHighTempValue; // High Temperature Value for Cp (max in tables) - int CpLowTempIndex; // Low Temperature Min Index for Cp (>0.0) - int CpHighTempIndex; // High Temperature Max Index for Cp (>0.0) - int NumCpTempPts; // Number of temperature points for specific heat + Real64 Concentration = 0.0; // Concentration (if applicable) + + bool CpDataPresent = false; // Flag set when specific heat data is available + Real64 CpLowTempValue = 0.0; // Low Temperature Value for Cp (>0.0) + Real64 CpHighTempValue = 0.0; // High Temperature Value for Cp (max in tables) + int CpLowTempIndex = 0; // Low Temperature Min Index for Cp (>0.0) + int CpHighTempIndex = 0; // High Temperature Max Index for Cp (>0.0) + int NumCpTempPts = 0; // Number of temperature points for specific heat Array1D CpTemps; // Temperatures for specific heat of glycol Array1D CpValues; // Specific heat data values (J/kg-K) - bool RhoDataPresent; // Flag set when density data is available - int NumRhoTempPts; // Number of temperature points for density - Real64 RhoLowTempValue; // Low Temperature Value for Rho (>0.0) - Real64 RhoHighTempValue; // High Temperature Value for Rho (max in tables) - int RhoLowTempIndex; // Low Temperature Min Index for Rho (>0.0) - int RhoHighTempIndex; // High Temperature Max Index for Rho (>0.0) + + bool RhoDataPresent = false; // Flag set when density data is available + int NumRhoTempPts = 0.0; // Number of temperature points for density + Real64 RhoLowTempValue = 0.0; // Low Temperature Value for Rho (>0.0) + Real64 RhoHighTempValue = 0.0; // High Temperature Value for Rho (max in tables) + int RhoLowTempIndex = 0; // Low Temperature Min Index for Rho (>0.0) + int RhoHighTempIndex = 0; // High Temperature Max Index for Rho (>0.0) Array1D RhoTemps; // Temperatures for density of glycol Array1D RhoValues; // Density data values (kg/m3) - bool CondDataPresent; // Flag set when conductivity data is available - int NumCondTempPts; // Number of temperature points for conductivity - Real64 CondLowTempValue; // Low Temperature Value for Cond (>0.0) - Real64 CondHighTempValue; // High Temperature Value for Cond (max in tables) - int CondLowTempIndex; // Low Temperature Min Index for Cond (>0.0) - int CondHighTempIndex; // High Temperature Max Index for Cond (>0.0) + + bool CondDataPresent = false; // Flag set when conductivity data is available + int NumCondTempPts = 0; // Number of temperature points for conductivity + Real64 CondLowTempValue = 0.0; // Low Temperature Value for Cond (>0.0) + Real64 CondHighTempValue = 0.0; // High Temperature Value for Cond (max in tables) + int CondLowTempIndex = 0; // Low Temperature Min Index for Cond (>0.0) + int CondHighTempIndex = 0; // High Temperature Max Index for Cond (>0.0) Array1D CondTemps; // Temperatures for conductivity of glycol Array1D CondValues; // conductivity values (W/m-K) - bool ViscDataPresent; // Flag set when viscosity data is available - int NumViscTempPts; // Number of temperature points for viscosity - Real64 ViscLowTempValue; // Low Temperature Value for Visc (>0.0) - Real64 ViscHighTempValue; // High Temperature Value for Visc (max in tables) - int ViscLowTempIndex; // Low Temperature Min Index for Visc (>0.0) - int ViscHighTempIndex; // High Temperature Max Index for Visc (>0.0) + + bool ViscDataPresent = false; // Flag set when viscosity data is available + int NumViscTempPts = 0; // Number of temperature points for viscosity + Real64 ViscLowTempValue = 0.0; // Low Temperature Value for Visc (>0.0) + Real64 ViscHighTempValue = 0.0; // High Temperature Value for Visc (max in tables) + int ViscLowTempIndex = 0; // Low Temperature Min Index for Visc (>0.0) + int ViscHighTempIndex = 0; // High Temperature Max Index for Visc (>0.0) Array1D ViscTemps; // Temperatures for viscosity of glycol Array1D ViscValues; // viscosity values (mPa-s) - // Default Constructor - FluidPropsGlycolData() - : GlycolIndex(0), Concentration(1.0), CpDataPresent(false), CpLowTempValue(0.0), CpHighTempValue(0.0), CpLowTempIndex(0), - CpHighTempIndex(0), NumCpTempPts(0), RhoDataPresent(false), NumRhoTempPts(0), RhoLowTempValue(0.0), RhoHighTempValue(0.0), - RhoLowTempIndex(0), RhoHighTempIndex(0), CondDataPresent(false), NumCondTempPts(0), CondLowTempValue(0.0), CondHighTempValue(0.0), - CondLowTempIndex(0), CondHighTempIndex(0), ViscDataPresent(false), NumViscTempPts(0), ViscLowTempValue(0.0), ViscHighTempValue(0.0), - ViscLowTempIndex(0), ViscHighTempIndex(0) - { - } +#ifdef EP_cache_GlycolSpecificHeat + Real64 getSpecificHeat_raw(EnergyPlusData &state, + Real64 Temperature, // actual temperature given as input + std::string_view CalledFrom // routine this function was called from (error messages) + ); +#endif + Real64 getSpecificHeat(EnergyPlusData &state, + Real64 Temperature, // actual temperature given as input + std::string_view CalledFrom); // routine this function was called from (error messages) + + Real64 getDensity(EnergyPlusData &state, + Real64 Temperature, // actual temperature given as input + std::string_view CalledFrom); // routine this function was called from (error messages) + + Real64 getConductivity(EnergyPlusData &state, + Real64 Temperature, // actual temperature given as input + std::string_view CalledFrom); // routine this function was called from (error messages) + + Real64 getViscosity(EnergyPlusData &state, + Real64 Temperature, // actual temperature given as input + std::string_view CalledFrom); // routine this function was called from (error messages) }; - struct FluidPropsRefrigErrors + struct RefrigErrors { // Members std::string Name; - int SatTempErrIndex; // Index for Sat Temperature Error (Recurring errors) - int SatTempErrCount; // Count for Sat Temperature Error (Recurring errors) - int SatPressErrIndex; // Index for Sat Pressure Error (Recurring errors) - int SatPressErrCount; // Count for Sat Pressure Error (Recurring errors) - int SatTempDensityErrIndex; // Index for Sat Temperature (Density) Error (Recurring errors) - int SatTempDensityErrCount; // Count for Sat Temperature (Density) Error (Recurring errors) - int SatSupEnthalpyErrIndex; // Index for Sat Temperature (Density) Error (Recurring errors) - int SatSupEnthalpyErrCount; // Count for Sat Temperature (Density) Error (Recurring errors) - int SatSupEnthalpyTempErrIndex; // Index for Sat Temperature (Density) Error (Recurring errors) - int SatSupEnthalpyTempErrCount; // Count for Sat Temperature (Density) Error (Recurring errors) - int SatSupEnthalpyPresErrIndex; // Index for Sat Temperature (Density) Error (Recurring errors) - int SatSupEnthalpyPresErrCount; // Count for Sat Temperature (Density) Error (Recurring errors) - int SatSupPressureErrIndex; // Index for Sat Temperature (Density) Error (Recurring errors) - int SatSupPressureErrCount; // Count for Sat Temperature (Density) Error (Recurring errors) - int SatSupPressureTempErrIndex; // Index for Sat Temperature (Density) Error (Recurring errors) - int SatSupPressureTempErrCount; // Count for Sat Temperature (Density) Error (Recurring errors) - int SatSupPressureEnthErrIndex; // Index for Sat Temperature (Density) Error (Recurring errors) - int SatSupPressureEnthErrCount; // Count for Sat Temperature (Density) Error (Recurring errors) - int SatSupDensityErrIndex; // Index for Sat Temperature (Density) Error (Recurring errors) - int SatSupDensityErrCount; // Count for Sat Temperature (Density) Error (Recurring errors) - int SatSupDensityTempErrIndex; // Index for Sat Temperature (Density) Error (Recurring errors) - int SatSupDensityTempErrCount; // Count for Sat Temperature (Density) Error (Recurring errors) - int SatSupDensityPresErrIndex; // Index for Sat Temperature (Density) Error (Recurring errors) - int SatSupDensityPresErrCount; // Count for Sat Temperature (Density) Error (Recurring errors) - - // Default Constructor - FluidPropsRefrigErrors() - : SatTempErrIndex(0), SatTempErrCount(0), SatPressErrIndex(0), SatPressErrCount(0), SatTempDensityErrIndex(0), SatTempDensityErrCount(0), - SatSupEnthalpyErrIndex(0), SatSupEnthalpyErrCount(0), SatSupEnthalpyTempErrIndex(0), SatSupEnthalpyTempErrCount(0), - SatSupEnthalpyPresErrIndex(0), SatSupEnthalpyPresErrCount(0), SatSupPressureErrIndex(0), SatSupPressureErrCount(0), - SatSupPressureTempErrIndex(0), SatSupPressureTempErrCount(0), SatSupPressureEnthErrIndex(0), SatSupPressureEnthErrCount(0), - SatSupDensityErrIndex(0), SatSupDensityErrCount(0), SatSupDensityTempErrIndex(0), SatSupDensityTempErrCount(0), - SatSupDensityPresErrIndex(0), SatSupDensityPresErrCount(0) - { - } + int SatTempErrIndex = 0; // Index for Sat Temperature Error (Recurring errors) + int SatTempErrCount = 0; // Count for Sat Temperature Error (Recurring errors) + int SatPressErrIndex = 0; // Index for Sat Pressure Error (Recurring errors) + int SatPressErrCount = 0; // Count for Sat Pressure Error (Recurring errors) + int SatTempDensityErrIndex = 0; // Index for Sat Temperature (Density) Error (Recurring errors) + int SatTempDensityErrCount = 0; // Count for Sat Temperature (Density) Error (Recurring errors) + int SatSupEnthalpyErrIndex = 0; // Index for Sat Temperature (Density) Error (Recurring errors) + int SatSupEnthalpyErrCount = 0; // Count for Sat Temperature (Density) Error (Recurring errors) + int SatSupEnthalpyTempErrIndex = 0; // Index for Sat Temperature (Density) Error (Recurring errors) + int SatSupEnthalpyTempErrCount = 0; // Count for Sat Temperature (Density) Error (Recurring errors) + int SatSupEnthalpyPresErrIndex = 0; // Index for Sat Temperature (Density) Error (Recurring errors) + int SatSupEnthalpyPresErrCount = 0; // Count for Sat Temperature (Density) Error (Recurring errors) + int SatSupPressureErrIndex = 0; // Index for Sat Temperature (Density) Error (Recurring errors) + int SatSupPressureErrCount = 0; // Count for Sat Temperature (Density) Error (Recurring errors) + int SatSupPressureTempErrIndex = 0; // Index for Sat Temperature (Density) Error (Recurring errors) + int SatSupPressureTempErrCount = 0; // Count for Sat Temperature (Density) Error (Recurring errors) + int SatSupPressureEnthErrIndex = 0; // Index for Sat Temperature (Density) Error (Recurring errors) + int SatSupPressureEnthErrCount = 0; // Count for Sat Temperature (Density) Error (Recurring errors) + int SatSupDensityErrIndex = 0; // Index for Sat Temperature (Density) Error (Recurring errors) + int SatSupDensityErrCount = 0; // Count for Sat Temperature (Density) Error (Recurring errors) + int SatSupDensityTempErrIndex = 0; // Index for Sat Temperature (Density) Error (Recurring errors) + int SatSupDensityTempErrCount = 0; // Count for Sat Temperature (Density) Error (Recurring errors) + int SatSupDensityPresErrIndex = 0; // Index for Sat Temperature (Density) Error (Recurring errors) + int SatSupDensityPresErrCount = 0; // Count for Sat Temperature (Density) Error (Recurring errors) }; - struct FluidPropsGlycolErrors + struct GlycolErrors { // Members std::string Name; // Which glycol this error structure is for - int SpecHeatLowErrIndex; // Index for Specific Heat Low Error (Recurring errors) - int SpecHeatHighErrIndex; // Index for Specific Heat High Error (Recurring errors) - int SpecHeatLowErrCount; // Count for Specific Heat Low Error (Recurring errors) - int SpecHeatHighErrCount; // Count for Specific Heat High Error (Recurring errors) - int DensityHighErrCount; // Index for Density Low Error (Recurring errors) - int DensityLowErrIndex; // Index for Density High Error (Recurring errors) - int DensityHighErrIndex; // Count for Density Low Error (Recurring errors) - int DensityLowErrCount; // Count for Density High Error (Recurring errors) - int ConductivityLowErrIndex; // Index for Conductivity Low Error (Recurring errors) - int ConductivityHighErrIndex; // Index for Conductivity High Error (Recurring errors) - int ConductivityLowErrCount; // Count for Conductivity Low Error (Recurring errors) - int ConductivityHighErrCount; // Count for Conductivity High Error (Recurring errors) - int ViscosityLowErrIndex; // Index for Viscosity Low Error (Recurring errors) - int ViscosityHighErrIndex; // Index for Viscosity High Error (Recurring errors) - int ViscosityLowErrCount; // Count for Viscosity Low Error (Recurring errors) - int ViscosityHighErrCount; // Count for Viscosity High Error (Recurring errors) - - // Default Constructor - FluidPropsGlycolErrors() - : SpecHeatLowErrIndex(0), SpecHeatHighErrIndex(0), SpecHeatLowErrCount(0), SpecHeatHighErrCount(0), DensityHighErrCount(0), - DensityLowErrIndex(0), DensityHighErrIndex(0), DensityLowErrCount(0), ConductivityLowErrIndex(0), ConductivityHighErrIndex(0), - ConductivityLowErrCount(0), ConductivityHighErrCount(0), ViscosityLowErrIndex(0), ViscosityHighErrIndex(0), ViscosityLowErrCount(0), - ViscosityHighErrCount(0) - { - } + int SpecHeatLowErrIndex = 0; // Index for Specific Heat Low Error (Recurring errors) + int SpecHeatHighErrIndex = 0; // Index for Specific Heat High Error (Recurring errors) + int SpecHeatLowErrCount = 0; // Count for Specific Heat Low Error (Recurring errors) + int SpecHeatHighErrCount = 0; // Count for Specific Heat High Error (Recurring errors) + int DensityHighErrCount = 0; // Index for Density Low Error (Recurring errors) + int DensityLowErrIndex = 0; // Index for Density High Error (Recurring errors) + int DensityHighErrIndex = 0; // Count for Density Low Error (Recurring errors) + int DensityLowErrCount = 0; // Count for Density High Error (Recurring errors) + int ConductivityLowErrIndex = 0; // Index for Conductivity Low Error (Recurring errors) + int ConductivityHighErrIndex = 0; // Index for Conductivity High Error (Recurring errors) + int ConductivityLowErrCount = 0; // Count for Conductivity Low Error (Recurring errors) + int ConductivityHighErrCount = 0; // Count for Conductivity High Error (Recurring errors) + int ViscosityLowErrIndex = 0; // Index for Viscosity Low Error (Recurring errors) + int ViscosityHighErrIndex = 0; // Index for Viscosity High Error (Recurring errors) + int ViscosityLowErrCount = 0; // Count for Viscosity Low Error (Recurring errors) + int ViscosityHighErrCount = 0; // Count for Viscosity High Error (Recurring errors) }; struct cached_tsh @@ -374,6 +414,14 @@ namespace Fluid { void ReportAndTestRefrigerants(EnergyPlusData &state); + Real64 GetQualityRefrig(EnergyPlusData &state, + std::string const &Refrigerant, // carries in substance name + Real64 Temperature, // actual temperature given as input + Real64 Enthalpy, // actual enthalpy given as input + int &RefrigIndex, // Index to Refrigerant Properties + std::string_view CalledFrom // routine this function was called from (error messages) + ); + Real64 GetSatPressureRefrig(EnergyPlusData &state, std::string_view Refrigerant, // carries in substance name Real64 Temperature, // actual temperature given as input @@ -446,14 +494,6 @@ namespace Fluid { std::string_view CalledFrom // routine this function was called from (error messages) ); -#ifdef EP_cache_GlycolSpecificHeat - Real64 GetSpecificHeatGlycol_raw(EnergyPlusData &state, - std::string_view Glycol, // carries in substance name - Real64 Temperature, // actual temperature given as input - int &GlycolIndex, // Index to Glycol Properties - std::string_view CalledFrom // routine this function was called from (error messages) - ); -#endif Real64 GetSpecificHeatGlycol(EnergyPlusData &state, std::string_view Glycol, // carries in substance name Real64 Temperature, // actual temperature given as input @@ -528,17 +568,11 @@ namespace Fluid { return Xhi - (((Thi - Tact) / (Thi - Tlo)) * (Xhi - Xlo)); } - Real64 GetQualityRefrig(EnergyPlusData &state, - std::string const &Refrigerant, // carries in substance name - Real64 Temperature, // actual temperature given as input - Real64 Enthalpy, // actual enthalpy given as input - int &RefrigIndex, // Index to Refrigerant Properties - std::string_view CalledFrom // routine this function was called from (error messages) - ); - - int FindRefrigerant(EnergyPlusData &state, std::string_view Rrefrigerant); // carries in substance name - - int FindGlycol(EnergyPlusData &state, std::string_view Glycol); // carries in substance name + int GetRefrigNum(EnergyPlusData &state, std::string_view name); + RefrigerantData *GetRefrig(EnergyPlusData &state, std::string_view name); + + int GetGlycolNum(EnergyPlusData &state, std::string_view name); + GlycolData *GetGlycol(EnergyPlusData &state, std::string_view name); std::string GetGlycolNameByIndex(EnergyPlusData &state, int Idx); // carries in substance index @@ -637,11 +671,11 @@ struct FluidData : BaseGlobalStruct Array1D_bool RefrigUsed; Array1D_bool GlycolUsed; - Array1D RefrigData; - Array1D RefrigErrorTracking; - Array1D GlyRawData; - Array1D GlycolData; - Array1D GlycolErrorTracking; + Array1D RefrigData; + Array1D RefrigErrorTracking; + Array1D GlyRawData; + Array1D GlycolData; + Array1D GlycolErrorTracking; int SatErrCountGetSupHeatEnthalpyRefrig = 0; int SatErrCountGetSupHeatDensityRefrig = 0; @@ -659,12 +693,12 @@ struct FluidData : BaseGlobalStruct int TempRangeErrIndexGetInterpolatedSatProp = 0; #ifdef EP_cache_GlycolSpecificHeat - std::array cached_t_sh; + std::array cached_t_sh; #endif void init_state(EnergyPlusData &state) override { - Fluid::GetFluidPropertiesData(state); + FluidProperties::GetFluidPropertiesData(state); this->GetInput = false; } diff --git a/src/EnergyPlus/FuelCellElectricGenerator.cc b/src/EnergyPlus/FuelCellElectricGenerator.cc index 6a9a94be210..47a55dcc2b1 100644 --- a/src/EnergyPlus/FuelCellElectricGenerator.cc +++ b/src/EnergyPlus/FuelCellElectricGenerator.cc @@ -3032,7 +3032,7 @@ namespace FuelCellElectricGenerator { this->ExhaustHX.THXexh = TprodGasIn - this->ExhaustHX.qHX / (NdotGas * CpProdGasMol * 1000.0); - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, TwaterIn, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -3368,7 +3368,7 @@ namespace FuelCellElectricGenerator { this->Inverter.PCUlosses = 0.0; this->Inverter.QairIntake = 0.0; - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, DataGenerators::InitHRTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, diff --git a/src/EnergyPlus/Furnaces.cc b/src/EnergyPlus/Furnaces.cc index 86bc6ce5de9..941c5288275 100644 --- a/src/EnergyPlus/Furnaces.cc +++ b/src/EnergyPlus/Furnaces.cc @@ -1130,7 +1130,7 @@ namespace Furnaces { thisFurnace.MaxHeatCoilFluidFlow = SteamCoils::GetCoilMaxSteamFlowRate(state, thisFurnace.HeatingCoilIndex, errFlag); if (thisFurnace.MaxHeatCoilFluidFlow > 0.0) { SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed - SteamDensity = Fluid::GetSatDensityRefrig( + SteamDensity = FluidProperties::GetSatDensityRefrig( state, fluidNameSteam, state.dataFurnaces->TempSteamIn, 1.0, SteamIndex, getUnitaryHeatOnly); thisFurnace.MaxHeatCoilFluidFlow *= SteamDensity; } @@ -1672,7 +1672,7 @@ namespace Furnaces { thisFurnace.MaxHeatCoilFluidFlow = SteamCoils::GetCoilMaxSteamFlowRate(state, thisFurnace.HeatingCoilIndex, errFlag); if (thisFurnace.MaxHeatCoilFluidFlow > 0.0) { SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed - SteamDensity = Fluid::GetSatDensityRefrig( + SteamDensity = FluidProperties::GetSatDensityRefrig( state, fluidNameSteam, state.dataFurnaces->TempSteamIn, 1.0, SteamIndex, getAirLoopHVACHeatCoolInput); thisFurnace.MaxHeatCoilFluidFlow *= SteamDensity; } @@ -2129,7 +2129,7 @@ namespace Furnaces { thisFurnace.MaxSuppCoilFluidFlow = SteamCoils::GetCoilMaxSteamFlowRate(state, thisFurnace.SuppHeatCoilIndex, errFlag); if (thisFurnace.MaxSuppCoilFluidFlow > 0.0) { SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed - SteamDensity = Fluid::GetSatDensityRefrig( + SteamDensity = FluidProperties::GetSatDensityRefrig( state, fluidNameSteam, state.dataFurnaces->TempSteamIn, 1.0, SteamIndex, getAirLoopHVACHeatCoolInput); thisFurnace.MaxSuppCoilFluidFlow = SteamCoils::GetCoilMaxSteamFlowRate(state, thisFurnace.SuppHeatCoilIndex, errFlag) * SteamDensity; @@ -3138,7 +3138,7 @@ namespace Furnaces { thisFurnace.MaxSuppCoilFluidFlow = SteamCoils::GetCoilMaxSteamFlowRate(state, thisFurnace.SuppHeatCoilIndex, errFlag); if (thisFurnace.MaxSuppCoilFluidFlow > 0.0) { SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed - SteamDensity = Fluid::GetSatDensityRefrig( + SteamDensity = FluidProperties::GetSatDensityRefrig( state, fluidNameSteam, state.dataFurnaces->TempSteamIn, 1.0, SteamIndex, getAirLoopHVACHeatCoolInput); thisFurnace.MaxSuppCoilFluidFlow = SteamCoils::GetCoilMaxSteamFlowRate(state, thisFurnace.SuppHeatCoilIndex, errFlag) * SteamDensity; @@ -3953,7 +3953,7 @@ namespace Furnaces { thisFurnace.MaxSuppCoilFluidFlow = SteamCoils::GetCoilMaxSteamFlowRate(state, thisFurnace.SuppHeatCoilIndex, errFlag); if (thisFurnace.MaxSuppCoilFluidFlow > 0.0) { SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed - SteamDensity = Fluid::GetSatDensityRefrig( + SteamDensity = FluidProperties::GetSatDensityRefrig( state, fluidNameSteam, state.dataFurnaces->TempSteamIn, 1.0, SteamIndex, getAirLoopHVACHeatCoolInput); thisFurnace.MaxSuppCoilFluidFlow = SteamCoils::GetCoilMaxSteamFlowRate(state, thisFurnace.SuppHeatCoilIndex, errFlag) * SteamDensity; @@ -4786,7 +4786,7 @@ namespace Furnaces { thisFurnace.MaxHeatCoilFluidFlow = WaterCoils::GetCoilMaxWaterFlowRate(state, "Coil:Heating:Water", thisFurnace.HeatingCoilName, ErrorsFound); if (thisFurnace.MaxHeatCoilFluidFlow > 0.0) { - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(thisFurnace.plantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(thisFurnace.plantLoc.loopNum).FluidIndex, @@ -4812,7 +4812,7 @@ namespace Furnaces { thisFurnace.MaxHeatCoilFluidFlow = SteamCoils::GetCoilMaxSteamFlowRate(state, thisFurnace.HeatingCoilIndex, ErrorsFound); if (thisFurnace.MaxHeatCoilFluidFlow > 0.0) { int SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed - SteamDensity = Fluid::GetSatDensityRefrig( + SteamDensity = FluidProperties::GetSatDensityRefrig( state, fluidNameSteam, state.dataFurnaces->TempSteamIn, 1.0, SteamIndex, RoutineName); thisFurnace.MaxHeatCoilFluidFlow *= SteamDensity; } @@ -4849,7 +4849,7 @@ namespace Furnaces { thisFurnace.MaxSuppCoilFluidFlow = WaterCoils::GetCoilMaxWaterFlowRate(state, "Coil:Heating:Water", thisFurnace.SuppHeatCoilName, ErrorsFound); if (thisFurnace.MaxSuppCoilFluidFlow > 0.0) { - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(thisFurnace.SuppPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(thisFurnace.SuppPlantLoc.loopNum).FluidIndex, @@ -4874,7 +4874,7 @@ namespace Furnaces { thisFurnace.MaxSuppCoilFluidFlow = SteamCoils::GetCoilMaxSteamFlowRate(state, thisFurnace.SuppHeatCoilIndex, ErrorsFound); if (thisFurnace.MaxSuppCoilFluidFlow > 0.0) { int SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed - SteamDensity = Fluid::GetSatDensityRefrig( + SteamDensity = FluidProperties::GetSatDensityRefrig( state, fluidNameSteam, state.dataFurnaces->TempSteamIn, 1.0, SteamIndex, RoutineName); thisFurnace.MaxSuppCoilFluidFlow *= SteamDensity; } @@ -4917,7 +4917,7 @@ namespace Furnaces { CoilMaxVolFlowRate = WaterCoils::GetCoilMaxWaterFlowRate(state, "Coil:Heating:Water", thisFurnace.HeatingCoilName, ErrorsFound); if (CoilMaxVolFlowRate != DataSizing::AutoSize) { - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(thisFurnace.plantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(thisFurnace.plantLoc.loopNum).FluidIndex, @@ -4936,7 +4936,7 @@ namespace Furnaces { CoilMaxVolFlowRate = SteamCoils::GetCoilMaxSteamFlowRate(state, thisFurnace.HeatingCoilIndex, ErrorsFound); if (CoilMaxVolFlowRate != DataSizing::AutoSize) { int SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed - SteamDensity = Fluid::GetSatDensityRefrig( + SteamDensity = FluidProperties::GetSatDensityRefrig( state, fluidNameSteam, state.dataFurnaces->TempSteamIn, 1.0, SteamIndex, RoutineName); thisFurnace.MaxHeatCoilFluidFlow = CoilMaxVolFlowRate * SteamDensity; } @@ -4955,7 +4955,7 @@ namespace Furnaces { CoilMaxVolFlowRate = WaterCoils::GetCoilMaxWaterFlowRate(state, "Coil:Heating:Water", thisFurnace.SuppHeatCoilName, ErrorsFound); if (CoilMaxVolFlowRate != DataSizing::AutoSize) { - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(thisFurnace.SuppPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(thisFurnace.SuppPlantLoc.loopNum).FluidIndex, @@ -4973,7 +4973,7 @@ namespace Furnaces { CoilMaxVolFlowRate = SteamCoils::GetCoilMaxSteamFlowRate(state, thisFurnace.SuppHeatCoilIndex, ErrorsFound); if (CoilMaxVolFlowRate != DataSizing::AutoSize) { int SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed - SteamDensity = Fluid::GetSatDensityRefrig( + SteamDensity = FluidProperties::GetSatDensityRefrig( state, fluidNameSteam, state.dataFurnaces->TempSteamIn, 1.0, SteamIndex, RoutineName); thisFurnace.MaxSuppCoilFluidFlow = CoilMaxVolFlowRate * SteamDensity; } diff --git a/src/EnergyPlus/GroundHeatExchangers.cc b/src/EnergyPlus/GroundHeatExchangers.cc index f9d102c5e20..7c86b973419 100644 --- a/src/EnergyPlus/GroundHeatExchangers.cc +++ b/src/EnergyPlus/GroundHeatExchangers.cc @@ -1137,12 +1137,12 @@ void GLHEVert::calcShortTimestepGFunctions(EnergyPlusData &state) Real64 bh_equivalent_resistance_convection = bhResistance - bh_equivalent_resistance_tube_grout; Real64 initial_temperature = this->inletTemp; - Real64 cpFluid_init = Fluid::GetSpecificHeatGlycol(state, + Real64 cpFluid_init = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, initial_temperature, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); - Real64 fluidDensity_init = Fluid::GetDensityGlycol(state, + Real64 fluidDensity_init = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, initial_temperature, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -2004,7 +2004,7 @@ void GLHEBase::calcGroundHeatExchanger(EnergyPlusData &state) this->inletTemp = state.dataLoopNodes->Node(this->inletNodeNum).Temp; - Real64 cpFluid = Fluid::GetSpecificHeatGlycol(state, + Real64 cpFluid = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, this->inletTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -2275,7 +2275,7 @@ void GLHEBase::updateGHX(EnergyPlusData &state) state.dataLoopNodes->Node(this->outletNodeNum).Temp = this->outletTemp; state.dataLoopNodes->Node(this->outletNodeNum).Enthalpy = - this->outletTemp * Fluid::GetSpecificHeatGlycol(state, + this->outletTemp * FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, this->outletTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -2284,7 +2284,7 @@ void GLHEBase::updateGHX(EnergyPlusData &state) Real64 GLHEdeltaTemp = std::abs(this->outletTemp - this->inletTemp); if (GLHEdeltaTemp > deltaTempLimit && this->numErrorCalls < state.dataGroundHeatExchanger->numVerticalGLHEs && !state.dataGlobal->WarmupFlag) { - Real64 fluidDensity = Fluid::GetDensityGlycol(state, + Real64 fluidDensity = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, this->inletTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -2636,7 +2636,7 @@ Real64 GLHEVert::calcHXResistance(EnergyPlusData &state) } else { std::string_view const RoutineName = "calcBHResistance"; - Real64 const cpFluid = Fluid::GetSpecificHeatGlycol(state, + Real64 const cpFluid = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, this->inletTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -2671,17 +2671,17 @@ Real64 GLHEVert::calcPipeConvectionResistance(EnergyPlusData &state) // Get fluid props this->inletTemp = state.dataLoopNodes->Node(this->inletNodeNum).Temp; - Real64 const cpFluid = Fluid::GetSpecificHeatGlycol(state, + Real64 const cpFluid = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, this->inletTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); - Real64 const kFluid = Fluid::GetConductivityGlycol(state, + Real64 const kFluid = FluidProperties::GetConductivityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, this->inletTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); - Real64 const fluidViscosity = Fluid::GetViscosityGlycol(state, + Real64 const fluidViscosity = FluidProperties::GetViscosityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, this->inletTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -2775,22 +2775,22 @@ Real64 GLHESlinky::calcHXResistance(EnergyPlusData &state) constexpr Real64 B = 350; constexpr Real64 laminarNusseltNo = 4.364; - Real64 cpFluid = Fluid::GetSpecificHeatGlycol(state, + Real64 cpFluid = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, this->inletTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); - Real64 kFluid = Fluid::GetConductivityGlycol(state, + Real64 kFluid = FluidProperties::GetConductivityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, this->inletTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); - Real64 fluidDensity = Fluid::GetDensityGlycol(state, + Real64 fluidDensity = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, this->inletTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); - Real64 fluidViscosity = Fluid::GetViscosityGlycol(state, + Real64 fluidViscosity = FluidProperties::GetViscosityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, this->inletTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -2951,7 +2951,7 @@ void GLHEVert::initEnvironment(EnergyPlusData &state, [[maybe_unused]] Real64 co std::string_view const RoutineName = "initEnvironment"; this->myEnvrnFlag = false; - Real64 fluidDensity = Fluid::GetDensityGlycol(state, + Real64 fluidDensity = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, 20.0, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -3026,7 +3026,7 @@ void GLHESlinky::initEnvironment(EnergyPlusData &state, Real64 const CurTime) std::string_view const RoutineName = "initEnvironment"; this->myEnvrnFlag = false; - Real64 fluidDensity = Fluid::GetDensityGlycol(state, + Real64 fluidDensity = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, 20.0, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, diff --git a/src/EnergyPlus/HVACControllers.cc b/src/EnergyPlus/HVACControllers.cc index 635bb5e5f83..a0a1ba563e2 100644 --- a/src/EnergyPlus/HVACControllers.cc +++ b/src/EnergyPlus/HVACControllers.cc @@ -1021,7 +1021,7 @@ void InitController(EnergyPlusData &state, int const ControlNum, bool &IsConverg // Do the Begin Environment initializations if (state.dataGlobal->BeginEnvrnFlag && MyEnvrnFlag(ControlNum)) { - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(thisController.ActuatedNodePlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(thisController.ActuatedNodePlantLoc.loopNum).FluidIndex, diff --git a/src/EnergyPlus/HVACCooledBeam.cc b/src/EnergyPlus/HVACCooledBeam.cc index 14f38030df9..635b0f71340 100644 --- a/src/EnergyPlus/HVACCooledBeam.cc +++ b/src/EnergyPlus/HVACCooledBeam.cc @@ -508,7 +508,7 @@ namespace HVACCooledBeam { // Using/Aliasing using DataZoneEquipment::CheckZoneEquipmentList; - using Fluid::GetDensityGlycol; + using FluidProperties::GetDensityGlycol; using PlantUtilities::InitComponentNodes; using PlantUtilities::ScanPlantLoopsForObject; using PlantUtilities::SetComponentFlowRate; @@ -647,8 +647,8 @@ namespace HVACCooledBeam { // Using/Aliasing using namespace DataSizing; - using Fluid::GetDensityGlycol; - using Fluid::GetSpecificHeatGlycol; + using FluidProperties::GetDensityGlycol; + using FluidProperties::GetSpecificHeatGlycol; using PlantUtilities::MyPlantSizingIndex; using PlantUtilities::RegisterPlantCompDesignFlow; @@ -1021,8 +1021,8 @@ namespace HVACCooledBeam { // na // Using/Aliasing - using Fluid::GetDensityGlycol; - using Fluid::GetSpecificHeatGlycol; + using FluidProperties::GetDensityGlycol; + using FluidProperties::GetSpecificHeatGlycol; using PlantUtilities::SetComponentFlowRate; // Locals diff --git a/src/EnergyPlus/HVACFourPipeBeam.cc b/src/EnergyPlus/HVACFourPipeBeam.cc index b6d8b3ba734..47961c0e382 100644 --- a/src/EnergyPlus/HVACFourPipeBeam.cc +++ b/src/EnergyPlus/HVACFourPipeBeam.cc @@ -734,8 +734,8 @@ namespace FourPipeBeam { // Using using namespace DataSizing; - using Fluid::GetDensityGlycol; - using Fluid::GetSpecificHeatGlycol; + using FluidProperties::GetDensityGlycol; + using FluidProperties::GetSpecificHeatGlycol; using PlantUtilities::MyPlantSizingIndex; using PlantUtilities::RegisterPlantCompDesignFlow; using Psychrometrics::PsyCpAirFnW; @@ -871,7 +871,7 @@ namespace FourPipeBeam { this->totBeamLength = this->vDotDesignPrimAir / this->vDotNormRatedPrimAir; if (this->vDotDesignCWWasAutosized) { this->vDotDesignCW = this->vDotNormRatedCW * this->totBeamLength; - Real64 const rho = Fluid::GetDensityGlycol(state, + Real64 const rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->cWplantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->cWplantLoc.loopNum).FluidIndex, @@ -884,7 +884,7 @@ namespace FourPipeBeam { } if (vDotDesignHWWasAutosized) { this->vDotDesignHW = this->vDotNormRatedHW * this->totBeamLength; - Real64 const rho = Fluid::GetDensityGlycol(state, + Real64 const rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->hWplantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->hWplantLoc.loopNum).FluidIndex, @@ -951,7 +951,7 @@ namespace FourPipeBeam { this->totBeamLength = this->vDotDesignPrimAir / this->vDotNormRatedPrimAir; if (this->vDotDesignCWWasAutosized) { this->vDotDesignCW = this->vDotNormRatedCW * this->totBeamLength; - Real64 const rho = Fluid::GetDensityGlycol(state, + Real64 const rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->cWplantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->cWplantLoc.loopNum).FluidIndex, @@ -964,7 +964,7 @@ namespace FourPipeBeam { } if (vDotDesignHWWasAutosized) { this->vDotDesignHW = this->vDotNormRatedHW * this->totBeamLength; - Real64 const rho = Fluid::GetDensityGlycol(state, + Real64 const rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->hWplantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->hWplantLoc.loopNum).FluidIndex, @@ -1034,7 +1034,7 @@ namespace FourPipeBeam { } if (this->beamCoolingPresent) { - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->cWplantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->cWplantLoc.loopNum).FluidIndex, @@ -1044,7 +1044,7 @@ namespace FourPipeBeam { PlantUtilities::InitComponentNodes(state, 0.0, this->mDotDesignCW, this->cWInNodeNum, this->cWOutNodeNum); } if (this->beamHeatingPresent) { - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->hWplantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->hWplantLoc.loopNum).FluidIndex, @@ -1244,8 +1244,8 @@ namespace FourPipeBeam { { // Using/Aliasing - using Fluid::GetDensityGlycol; - using Fluid::GetSpecificHeatGlycol; + using FluidProperties::GetDensityGlycol; + using FluidProperties::GetSpecificHeatGlycol; using PlantUtilities::SetComponentFlowRate; // Locals diff --git a/src/EnergyPlus/HVACInterfaceManager.cc b/src/EnergyPlus/HVACInterfaceManager.cc index 54a1e257a13..d292194eacc 100644 --- a/src/EnergyPlus/HVACInterfaceManager.cc +++ b/src/EnergyPlus/HVACInterfaceManager.cc @@ -506,7 +506,7 @@ void UpdatePlantLoopInterface(EnergyPlusData &state, Real64 OldTankOutletTemp = state.dataLoopNodes->Node(OtherLoopSideInletNode).Temp; // calculate the specific heat - Real64 Cp = Fluid::GetSpecificHeatGlycol( + Real64 Cp = FluidProperties::GetSpecificHeatGlycol( state, state.dataPlnt->PlantLoop(LoopNum).FluidName, OldTankOutletTemp, state.dataPlnt->PlantLoop(LoopNum).FluidIndex, RoutineName); // update the enthalpy @@ -660,7 +660,7 @@ void UpdateHalfLoopInletTemp(EnergyPlusData &state, int const LoopNum, const Dat Real64 LastTankOutletTemp = state.dataPlnt->PlantLoop(LoopNum).LoopSide(TankOutletLoopSide).LastTempInterfaceTankOutlet; // calculate the specific heat for the capacitance calculation - Real64 Cp = Fluid::GetSpecificHeatGlycol( + Real64 Cp = FluidProperties::GetSpecificHeatGlycol( state, state.dataPlnt->PlantLoop(LoopNum).FluidName, LastTankOutletTemp, state.dataPlnt->PlantLoop(LoopNum).FluidIndex, RoutineName); // set the fraction of loop mass assigned to each half loop outlet capacitance ('tank') calculation @@ -791,7 +791,7 @@ void UpdateCommonPipe(EnergyPlusData &state, Real64 LastTankOutletTemp = state.dataPlnt->PlantLoop(LoopNum).LoopSide(TankOutletLoopSide).LastTempInterfaceTankOutlet; // calculate the specific heat for the capacitance calculation - Real64 Cp = Fluid::GetSpecificHeatGlycol( + Real64 Cp = FluidProperties::GetSpecificHeatGlycol( state, state.dataPlnt->PlantLoop(LoopNum).FluidName, LastTankOutletTemp, state.dataPlnt->PlantLoop(LoopNum).FluidIndex, RoutineName); // set the fraction of loop mass assigned to each half loop outlet capacitance ('tank') calculation diff --git a/src/EnergyPlus/HVACMultiSpeedHeatPump.cc b/src/EnergyPlus/HVACMultiSpeedHeatPump.cc index b203328f07f..3f243b24ac4 100644 --- a/src/EnergyPlus/HVACMultiSpeedHeatPump.cc +++ b/src/EnergyPlus/HVACMultiSpeedHeatPump.cc @@ -904,7 +904,7 @@ namespace HVACMultiSpeedHeatPump { thisMSHP.MaxCoilFluidFlow = SteamCoils::GetCoilMaxSteamFlowRate(state, thisMSHP.HeatCoilNum, errFlag); if (thisMSHP.MaxCoilFluidFlow > 0.0) { SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed - SteamDensity = Fluid::GetSatDensityRefrig( + SteamDensity = FluidProperties::GetSatDensityRefrig( state, fluidNameSteam, state.dataHVACMultiSpdHP->TempSteamIn, 1.0, SteamIndex, routineName); thisMSHP.MaxCoilFluidFlow *= SteamDensity; } @@ -1176,7 +1176,7 @@ namespace HVACMultiSpeedHeatPump { thisMSHP.MaxSuppCoilFluidFlow = SteamCoils::GetCoilMaxSteamFlowRate(state, thisMSHP.SuppHeatCoilNum, errFlag); if (thisMSHP.MaxSuppCoilFluidFlow > 0.0) { SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed - SteamDensity = Fluid::GetSatDensityRefrig( + SteamDensity = FluidProperties::GetSatDensityRefrig( state, fluidNameSteam, state.dataHVACMultiSpdHP->TempSteamIn, 1.0, SteamIndex, routineName); thisMSHP.MaxSuppCoilFluidFlow *= SteamDensity; } @@ -1841,7 +1841,7 @@ namespace HVACMultiSpeedHeatPump { WaterCoils::GetCoilMaxWaterFlowRate(state, "Coil:Heating:Water", MSHeatPump(MSHeatPumpNum).HeatCoilName, ErrorsFound); if (MSHeatPump(MSHeatPumpNum).MaxCoilFluidFlow > 0.0) { - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(MSHeatPump(MSHeatPumpNum).plantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(MSHeatPump(MSHeatPumpNum).plantLoc.loopNum).FluidIndex, @@ -1874,7 +1874,7 @@ namespace HVACMultiSpeedHeatPump { if (MSHeatPump(MSHeatPumpNum).MaxCoilFluidFlow > 0.0) { int SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed // TODO: Why do you want to re-look this up? - SteamDensity = Fluid::GetSatDensityRefrig( + SteamDensity = FluidProperties::GetSatDensityRefrig( state, fluidNameSteam, state.dataHVACMultiSpdHP->TempSteamIn, 1.0, SteamIndex, RoutineName); MSHeatPump(MSHeatPumpNum).MaxCoilFluidFlow *= SteamDensity; } @@ -1903,7 +1903,7 @@ namespace HVACMultiSpeedHeatPump { WaterCoils::GetCoilMaxWaterFlowRate(state, "Coil:Heating:Water", MSHeatPump(MSHeatPumpNum).SuppHeatCoilName, ErrorsFound); if (MSHeatPump(MSHeatPumpNum).MaxSuppCoilFluidFlow > 0.0) { - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(MSHeatPump(MSHeatPumpNum).SuppPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(MSHeatPump(MSHeatPumpNum).SuppPlantLoc.loopNum).FluidIndex, @@ -1936,7 +1936,7 @@ namespace HVACMultiSpeedHeatPump { SteamCoils::GetCoilMaxSteamFlowRate(state, MSHeatPump(MSHeatPumpNum).SuppHeatCoilNum, ErrorsFound); if (MSHeatPump(MSHeatPumpNum).MaxSuppCoilFluidFlow > 0.0) { int SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed - SteamDensity = Fluid::GetSatDensityRefrig( + SteamDensity = FluidProperties::GetSatDensityRefrig( state, fluidNameSteam, state.dataHVACMultiSpdHP->TempSteamIn, 1.0, SteamIndex, RoutineName); MSHeatPump(MSHeatPumpNum).MaxSuppCoilFluidFlow *= SteamDensity; } @@ -2058,7 +2058,7 @@ namespace HVACMultiSpeedHeatPump { if ((MSHeatPump(MSHeatPumpNum).HeatRecActive) && (!MSHeatPump(MSHeatPumpNum).MyPlantScantFlag)) { - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(MSHeatPump(MSHeatPumpNum).HRPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(MSHeatPump(MSHeatPumpNum).HRPlantLoc.loopNum).FluidIndex, @@ -2081,7 +2081,7 @@ namespace HVACMultiSpeedHeatPump { CoilMaxVolFlowRate = WaterCoils::GetCoilMaxWaterFlowRate(state, "Coil:Heating:Water", MSHeatPump(MSHeatPumpNum).HeatCoilName, ErrorsFound); if (CoilMaxVolFlowRate != DataSizing::AutoSize) { - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(MSHeatPump(MSHeatPumpNum).plantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(MSHeatPump(MSHeatPumpNum).plantLoc.loopNum).FluidIndex, @@ -2106,7 +2106,7 @@ namespace HVACMultiSpeedHeatPump { if (CoilMaxVolFlowRate != DataSizing::AutoSize) { int SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed - SteamDensity = Fluid::GetSatDensityRefrig( + SteamDensity = FluidProperties::GetSatDensityRefrig( state, fluidNameSteam, state.dataHVACMultiSpdHP->TempSteamIn, 1.0, SteamIndex, RoutineName); MSHeatPump(MSHeatPumpNum).MaxCoilFluidFlow = CoilMaxVolFlowRate * SteamDensity; } @@ -2127,7 +2127,7 @@ namespace HVACMultiSpeedHeatPump { CoilMaxVolFlowRate = WaterCoils::GetCoilMaxWaterFlowRate(state, "Coil:Heating:Water", MSHeatPump(MSHeatPumpNum).SuppHeatCoilName, ErrorsFound); if (CoilMaxVolFlowRate != DataSizing::AutoSize) { - rho = Fluid::GetDensityGlycol( + rho = FluidProperties::GetDensityGlycol( state, state.dataPlnt->PlantLoop(MSHeatPump(MSHeatPumpNum).SuppPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, @@ -2153,7 +2153,7 @@ namespace HVACMultiSpeedHeatPump { if (CoilMaxVolFlowRate != DataSizing::AutoSize) { int SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed - SteamDensity = Fluid::GetSatDensityRefrig( + SteamDensity = FluidProperties::GetSatDensityRefrig( state, fluidNameSteam, state.dataHVACMultiSpdHP->TempSteamIn, 1.0, SteamIndex, RoutineName); MSHeatPump(MSHeatPumpNum).MaxSuppCoilFluidFlow = CoilMaxVolFlowRate * SteamDensity; } @@ -3945,7 +3945,7 @@ namespace HVACMultiSpeedHeatPump { if (HeatRecMassFlowRate > 0.0) { // Heat reclaim water inlet specific heat [J/kg-K] - Real64 CpHeatRec = Fluid::GetSpecificHeatGlycol( + Real64 CpHeatRec = FluidProperties::GetSpecificHeatGlycol( state, state.dataPlnt->PlantLoop(state.dataHVACMultiSpdHP->MSHeatPump(MSHeatPumpNum).HRPlantLoc.loopNum).FluidName, HeatRecInletTemp, diff --git a/src/EnergyPlus/HVACSingleDuctInduc.cc b/src/EnergyPlus/HVACSingleDuctInduc.cc index d5171cd2d17..a7fd16f81b8 100644 --- a/src/EnergyPlus/HVACSingleDuctInduc.cc +++ b/src/EnergyPlus/HVACSingleDuctInduc.cc @@ -620,7 +620,7 @@ namespace HVACSingleDuctInduc { int HotConNode = state.dataHVACSingleDuctInduc->IndUnit(IUNum).HWControlNode; if (HotConNode > 0 && !state.dataHVACSingleDuctInduc->MyPlantScanFlag(IUNum)) { - rho = Fluid::GetDensityGlycol( + rho = FluidProperties::GetDensityGlycol( state, state.dataPlnt->PlantLoop(state.dataHVACSingleDuctInduc->IndUnit(IUNum).HWPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, @@ -641,7 +641,7 @@ namespace HVACSingleDuctInduc { int ColdConNode = state.dataHVACSingleDuctInduc->IndUnit(IUNum).CWControlNode; if (ColdConNode > 0) { - rho = Fluid::GetDensityGlycol( + rho = FluidProperties::GetDensityGlycol( state, state.dataPlnt->PlantLoop(state.dataHVACSingleDuctInduc->IndUnit(IUNum).CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, @@ -850,14 +850,14 @@ namespace HVACSingleDuctInduc { state.dataSize->TermUnitFinalZoneSizing(state.dataSize->CurTermUnitSizingNum).DesHeatCoilInTempTU); } state.dataHVACSingleDuctInduc->IndUnit(IUNum).DesHeatingLoad = DesCoilLoad; - Cp = Fluid::GetSpecificHeatGlycol( + Cp = FluidProperties::GetSpecificHeatGlycol( state, state.dataPlnt->PlantLoop(state.dataHVACSingleDuctInduc->IndUnit(IUNum).HWPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(state.dataHVACSingleDuctInduc->IndUnit(IUNum).HWPlantLoc.loopNum).FluidIndex, RoutineName); - rho = Fluid::GetDensityGlycol( + rho = FluidProperties::GetDensityGlycol( state, state.dataPlnt->PlantLoop(state.dataHVACSingleDuctInduc->IndUnit(IUNum).HWPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, @@ -985,14 +985,14 @@ namespace HVACSingleDuctInduc { state.dataSize->TermUnitFinalZoneSizing(state.dataSize->CurTermUnitSizingNum).ZoneSizThermSetPtHi); } state.dataHVACSingleDuctInduc->IndUnit(IUNum).DesCoolingLoad = DesCoilLoad; - Cp = Fluid::GetSpecificHeatGlycol( + Cp = FluidProperties::GetSpecificHeatGlycol( state, state.dataPlnt->PlantLoop(state.dataHVACSingleDuctInduc->IndUnit(IUNum).CWPlantLoc.loopNum).FluidName, 5.0, state.dataPlnt->PlantLoop(state.dataHVACSingleDuctInduc->IndUnit(IUNum).CWPlantLoc.loopNum).FluidIndex, RoutineName); - rho = Fluid::GetDensityGlycol( + rho = FluidProperties::GetDensityGlycol( state, state.dataPlnt->PlantLoop(state.dataHVACSingleDuctInduc->IndUnit(IUNum).CWPlantLoc.loopNum).FluidName, 5.0, diff --git a/src/EnergyPlus/HVACSizingSimulationManager.cc b/src/EnergyPlus/HVACSizingSimulationManager.cc index 5eb14ef0172..9dd268ccea2 100644 --- a/src/EnergyPlus/HVACSizingSimulationManager.cc +++ b/src/EnergyPlus/HVACSizingSimulationManager.cc @@ -97,12 +97,12 @@ void HVACSizingSimulationManager::CreateNewCoincidentPlantAnalysisObject(EnergyP for (int i = 1; i <= state.dataPlnt->TotNumLoops; ++i) { if (PlantLoopName == state.dataPlnt->PlantLoop(i).Name) { // found it - density = Fluid::GetDensityGlycol(state, + density = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(i).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(i).FluidIndex, "createNewCoincidentPlantAnalysisObject"); - cp = Fluid::GetSpecificHeatGlycol(state, + cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(i).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(i).FluidIndex, diff --git a/src/EnergyPlus/HVACUnitaryBypassVAV.cc b/src/EnergyPlus/HVACUnitaryBypassVAV.cc index f1ae2872352..b12b3213faf 100644 --- a/src/EnergyPlus/HVACUnitaryBypassVAV.cc +++ b/src/EnergyPlus/HVACUnitaryBypassVAV.cc @@ -901,7 +901,7 @@ namespace HVACUnitaryBypassVAV { thisCBVAV.CoilControlNode = state.dataSteamCoils->SteamCoil(thisCBVAV.HeatCoilIndex).SteamInletNodeNum; thisCBVAV.MaxHeatCoilFluidFlow = state.dataSteamCoils->SteamCoil(thisCBVAV.HeatCoilIndex).MaxSteamVolFlowRate; int SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed - Real64 SteamDensity = Fluid::GetSatDensityRefrig( + Real64 SteamDensity = FluidProperties::GetSatDensityRefrig( state, fluidNameSteam, state.dataHVACUnitaryBypassVAV->TempSteamIn, 1.0, SteamIndex, getUnitaryHeatCoolVAVChangeoverBypass); if (thisCBVAV.MaxHeatCoilFluidFlow > 0.0) { thisCBVAV.MaxHeatCoilFluidFlow = thisCBVAV.MaxHeatCoilFluidFlow * SteamDensity; @@ -1382,7 +1382,7 @@ namespace HVACUnitaryBypassVAV { cBVAV.MaxHeatCoilFluidFlow = WaterCoils::GetCoilMaxWaterFlowRate(state, "Coil:Heating:Water", cBVAV.HeatCoilName, ErrorsFound); if (cBVAV.MaxHeatCoilFluidFlow > 0.0) { - Real64 FluidDensity = Fluid::GetDensityGlycol(state, + Real64 FluidDensity = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(cBVAV.plantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(cBVAV.plantLoc.loopNum).FluidIndex, @@ -1405,7 +1405,7 @@ namespace HVACUnitaryBypassVAV { if (cBVAV.MaxHeatCoilFluidFlow > 0.0) { int SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed - Real64 FluidDensity = Fluid::GetSatDensityRefrig( + Real64 FluidDensity = FluidProperties::GetSatDensityRefrig( state, fluidNameSteam, state.dataHVACUnitaryBypassVAV->TempSteamIn, 1.0, SteamIndex, RoutineName); cBVAV.MaxHeatCoilFluidFlow = SteamCoils::GetCoilMaxSteamFlowRate(state, cBVAV.HeatCoilIndex, ErrorsFound) * FluidDensity; } @@ -1480,7 +1480,7 @@ namespace HVACUnitaryBypassVAV { ShowContinueError(state, format("Occurs in {} = {}", "AirLoopHVAC:UnitaryHeatCool:VAVChangeoverBypass", cBVAV.Name)); } if (CoilMaxVolFlowRate != DataSizing::AutoSize) { - Real64 FluidDensity = Fluid::GetDensityGlycol(state, + Real64 FluidDensity = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(cBVAV.plantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(cBVAV.plantLoc.loopNum).FluidIndex, @@ -1502,7 +1502,7 @@ namespace HVACUnitaryBypassVAV { } if (CoilMaxVolFlowRate != DataSizing::AutoSize) { int SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed - Real64 FluidDensity = Fluid::GetSatDensityRefrig( + Real64 FluidDensity = FluidProperties::GetSatDensityRefrig( state, fluidNameSteam, state.dataHVACUnitaryBypassVAV->TempSteamIn, 1.0, SteamIndex, RoutineName); cBVAV.MaxHeatCoilFluidFlow = CoilMaxVolFlowRate * FluidDensity; } diff --git a/src/EnergyPlus/HVACVariableRefrigerantFlow.cc b/src/EnergyPlus/HVACVariableRefrigerantFlow.cc index 155b4cd2731..50b61cac8c2 100644 --- a/src/EnergyPlus/HVACVariableRefrigerantFlow.cc +++ b/src/EnergyPlus/HVACVariableRefrigerantFlow.cc @@ -358,7 +358,6 @@ void CalcVRFCondenser(EnergyPlusData &state, int const VRFCond) // If terminal units require more capacity than can be delivered by condenser, a limit is set. using Curve::CurveValue; - using Fluid::GetSpecificHeatGlycol; using PlantUtilities::SetComponentFlowRate; using Psychrometrics::RhoH2O; @@ -1268,7 +1267,7 @@ void CalcVRFCondenser(EnergyPlusData &state, int const VRFCond) // VRF( VRFCond ).CondenserInletTemp = state.dataLoopNodes->Node(VRF(VRFCond).CondenserNodeNum).Temp; vrf.WaterCondenserMassFlow = state.dataLoopNodes->Node(vrf.CondenserNodeNum).MassFlowRate; - CpCond = GetSpecificHeatGlycol(state, + CpCond = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(vrf.SourcePlantLoc.loopNum).FluidName, vrf.CondenserInletTemp, state.dataPlnt->PlantLoop(vrf.SourcePlantLoc.loopNum).FluidIndex, @@ -2453,6 +2452,9 @@ void GetVRFInputData(EnergyPlusData &state, bool &ErrorsFound) lAlphaFieldBlanks, cAlphaFieldNames, cNumericFieldNames); + + ErrorObjectHeader eoh{routineName, cCurrentModuleObject, cAlphaArgs(1)}; + GlobalNames::VerifyUniqueInterObjectName( state, state.dataHVACVarRefFlow->VrfUniqueNames, cAlphaArgs(1), cCurrentModuleObject, cAlphaFieldNames(1), ErrorsFound); @@ -2483,13 +2485,13 @@ void GetVRFInputData(EnergyPlusData &state, bool &ErrorsFound) } // Refrigerant type - thisVrfFluidCtrl.RefrigerantName = cAlphaArgs(4); - if (Util::FindItemInList(thisVrfFluidCtrl.RefrigerantName, state.dataFluid->RefrigData, state.dataFluid->NumOfRefrigerants) == 0) { - ShowSevereError(state, cCurrentModuleObject + " = " + thisVrfFluidCtrl.Name); - ShowContinueError(state, "Illegal " + cAlphaFieldNames(4) + " = " + cAlphaArgs(4)); + thisVrfFluidCtrl.refrigName = cAlphaArgs(4); + thisVrfFluidCtrl.refrig = FluidProperties::GetRefrig(state, thisVrfFluidCtrl.refrigName); + if (thisVrfFluidCtrl.refrig == nullptr) { + ShowSevereItemNotFound(state, eoh, cAlphaFieldNames(4), cAlphaArgs(4)); ErrorsFound = true; } - + thisVrfFluidCtrl.RatedEvapCapacity = rNumericArgs(1); thisVrfFluidCtrl.RatedCompPowerPerCapcity = rNumericArgs(2); thisVrfFluidCtrl.RatedCompPower = thisVrfFluidCtrl.RatedCompPowerPerCapcity * thisVrfFluidCtrl.RatedEvapCapacity; @@ -2844,6 +2846,9 @@ void GetVRFInputData(EnergyPlusData &state, bool &ErrorsFound) lAlphaFieldBlanks, cAlphaFieldNames, cNumericFieldNames); + + ErrorObjectHeader eoh{routineName, cCurrentModuleObject, cAlphaArgs(1)}; + GlobalNames::VerifyUniqueInterObjectName( state, state.dataHVACVarRefFlow->VrfUniqueNames, cAlphaArgs(1), cCurrentModuleObject, cAlphaFieldNames(1), ErrorsFound); @@ -2878,11 +2883,9 @@ void GetVRFInputData(EnergyPlusData &state, bool &ErrorsFound) } // Refrigerant type - thisVrfFluidCtrlHR.RefrigerantName = cAlphaArgs(4); - if (Util::FindItemInList(thisVrfFluidCtrlHR.RefrigerantName, state.dataFluid->RefrigData, state.dataFluid->NumOfRefrigerants) == - 0) { - ShowSevereError(state, cCurrentModuleObject + " = " + thisVrfFluidCtrlHR.Name); - ShowContinueError(state, "Illegal " + cAlphaFieldNames(4) + " = " + cAlphaArgs(4)); + thisVrfFluidCtrlHR.refrigName = cAlphaArgs(4); + if ((thisVrfFluidCtrlHR.refrig = FluidProperties::GetRefrig(state, thisVrfFluidCtrlHR.refrigName)) == nullptr) { + ShowSevereItemNotFound(state, eoh, cAlphaFieldNames(4), cAlphaArgs(4)); ErrorsFound = true; } @@ -4292,7 +4295,7 @@ void GetVRFInputData(EnergyPlusData &state, bool &ErrorsFound) if (thisVrfTU.SuppHeatCoilFluidMaxFlow > 0.0) { int SteamIndex = 0; // fluid type index of 0 is passed if steam Real64 TempSteamIn = 100.0; - Real64 SteamDensity = Fluid::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, SteamIndex, RoutineName); + Real64 SteamDensity = FluidProperties::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, SteamIndex, RoutineName); thisVrfTU.SuppHeatCoilFluidMaxFlow = SteamCoils::GetCoilMaxSteamFlowRate(state, thisVrfTU.SuppHeatCoilIndex, errFlag) * SteamDensity; } @@ -5519,7 +5522,6 @@ void InitVRF(EnergyPlusData &state, int const VRFTUNum, int const ZoneNum, bool using DataSizing::AutoSize; using DataZoneEquipment::CheckZoneEquipmentList; - using Fluid::GetDensityGlycol; using PlantUtilities::InitComponentNodes; using ScheduleManager::GetCurrentScheduleValue; @@ -5654,7 +5656,7 @@ void InitVRF(EnergyPlusData &state, int const VRFTUNum, int const ZoneNum, bool state, "Coil:Heating:Water", state.dataHVACVarRefFlow->VRFTU(VRFTUNum).SuppHeatCoilName, ErrorsFound); if (state.dataHVACVarRefFlow->VRFTU(VRFTUNum).SuppHeatCoilFluidMaxFlow > 0.0) { - rho = GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(state.dataHVACVarRefFlow->VRFTU(VRFTUNum).SuppHeatCoilPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(state.dataHVACVarRefFlow->VRFTU(VRFTUNum).SuppHeatCoilPlantLoc.loopNum).FluidIndex, @@ -5689,7 +5691,7 @@ void InitVRF(EnergyPlusData &state, int const VRFTUNum, int const ZoneNum, bool if (state.dataHVACVarRefFlow->VRFTU(VRFTUNum).SuppHeatCoilFluidMaxFlow > 0.0) { int SteamIndex = 0; // fluid type index of 0 is passed if steam Real64 TempSteamIn = 100.0; - Real64 SteamDensity = Fluid::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, SteamIndex, RoutineName); + Real64 SteamDensity = FluidProperties::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, SteamIndex, RoutineName); state.dataHVACVarRefFlow->VRFTU(VRFTUNum).SuppHeatCoilFluidMaxFlow = state.dataHVACVarRefFlow->VRFTU(VRFTUNum).SuppHeatCoilFluidMaxFlow * SteamDensity; } @@ -6266,7 +6268,7 @@ void InitVRF(EnergyPlusData &state, int const VRFTUNum, int const ZoneNum, bool state.dataHVACVarRefFlow->MyEnvrnFlag(VRFTUNum) = false; if (state.dataHVACVarRefFlow->VRF(VRFCond).CondenserType == DataHeatBalance::RefrigCondenserType::Water) { - rho = GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(state.dataHVACVarRefFlow->VRF(VRFCond).SourcePlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(state.dataHVACVarRefFlow->VRF(VRFCond).SourcePlantLoc.loopNum).FluidIndex, @@ -6297,7 +6299,7 @@ void InitVRF(EnergyPlusData &state, int const VRFTUNum, int const ZoneNum, bool Real64 CoilMaxVolFlowRate = WaterCoils::GetCoilMaxWaterFlowRate( state, "Coil:Heating:Water", state.dataHVACVarRefFlow->VRFTU(VRFTUNum).SuppHeatCoilName, ErrorsFound); if (CoilMaxVolFlowRate != DataSizing::AutoSize) { - rho = GetDensityGlycol( + rho = FluidProperties::GetDensityGlycol( state, state.dataPlnt->PlantLoop(state.dataHVACVarRefFlow->VRFTU(VRFTUNum).SuppHeatCoilPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, @@ -6321,7 +6323,7 @@ void InitVRF(EnergyPlusData &state, int const VRFTUNum, int const ZoneNum, bool if (CoilMaxVolFlowRate != DataSizing::AutoSize) { int SteamIndex = 0; // fluid type index of 0 is passed if steam Real64 TempSteamIn = 100.0; - Real64 SteamDensity = Fluid::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, SteamIndex, RoutineName); + Real64 SteamDensity = FluidProperties::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, SteamIndex, RoutineName); state.dataHVACVarRefFlow->VRFTU(VRFTUNum).SuppHeatCoilFluidMaxFlow = CoilMaxVolFlowRate * SteamDensity; } } @@ -8907,13 +8909,13 @@ void VRFCondenserEquipment::SizeVRFCondenser(EnergyPlusData &state) if (this->WaterCondVolFlowRate == DataSizing::AutoSize) { if (this->SourcePlantLoc.loopNum > 0) PltSizCondNum = state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).PlantSizNum; if (PltSizCondNum > 0) { - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidName, state.dataSize->PlantSizData(PltSizCondNum).ExitTemp, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidIndex, RoutineName); - Cp = Fluid::GetSpecificHeatGlycol(state, + Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidName, state.dataSize->PlantSizData(PltSizCondNum).ExitTemp, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidIndex, @@ -8929,7 +8931,7 @@ void VRFCondenserEquipment::SizeVRFCondenser(EnergyPlusData &state) this->WaterCondVolFlowRate); } - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidIndex, @@ -11023,14 +11025,6 @@ void VRFCondenserEquipment::CalcVRFCondenser_FluidTCtrl(EnergyPlusData &state) // A new physics based VRF model applicable for Fluid Temperature Control. using Curve::CurveValue; - using Fluid::FindRefrigerant; - using Fluid::GetSatEnthalpyRefrig; - using Fluid::GetSatPressureRefrig; - using Fluid::GetSatTemperatureRefrig; - using Fluid::GetSpecificHeatGlycol; - using Fluid::GetSupHeatDensityRefrig; - using Fluid::GetSupHeatEnthalpyRefrig; - using Fluid::GetSupHeatTempRefrig; using General::SolveRoot; using PlantUtilities::SetComponentFlowRate; @@ -11095,7 +11089,6 @@ void VRFCondenserEquipment::CalcVRFCondenser_FluidTCtrl(EnergyPlusData &state) int Counter; // index for iterations [-] int NumIteHIUIn; // index for HIU calculation iterations [-] int NumOfCompSpdInput; // Number of compressor speed input by the user [-] - int RefrigerantIndex; // Index of the refrigerant [-] Real64 CompSpdActual; // Actual compressor running speed [rps] Real64 C_cap_operation; // Compressor capacity modification algorithm_modified Cap [-] Real64 CompEvaporatingCAPSpdMin; // evaporating capacity at the lowest compressor speed [W] @@ -11192,7 +11185,6 @@ void VRFCondenserEquipment::CalcVRFCondenser_FluidTCtrl(EnergyPlusData &state) NumTUInCoolingMode = 0; NumTUInHeatingMode = 0; Tolerance = 0.05; - RefrigerantIndex = -1; Counter = 1; NumIteHIUIn = 1; this->ElecCoolingPower = 0.0; @@ -11212,13 +11204,11 @@ void VRFCondenserEquipment::CalcVRFCondenser_FluidTCtrl(EnergyPlusData &state) // Refrigerant data RefMinTe = -15; RefMaxPc = 4000000.0; - RefrigerantIndex = FindRefrigerant(state, this->RefrigerantName); - RefMinPe = GetSatPressureRefrig(state, this->RefrigerantName, RefMinTe, RefrigerantIndex, RoutineName); - RefMinPe = GetSatPressureRefrig(state, this->RefrigerantName, RefMinTe, RefrigerantIndex, RoutineName); - RefTLow = state.dataFluid->RefrigData(RefrigerantIndex).PsLowTempValue; // High Temperature Value for Ps (max in tables) - RefTHigh = state.dataFluid->RefrigData(RefrigerantIndex).PsHighTempValue; // High Temperature Value for Ps (max in tables) - RefPLow = state.dataFluid->RefrigData(RefrigerantIndex).PsLowPresValue; // Low Pressure Value for Ps (>0.0) - RefPHigh = state.dataFluid->RefrigData(RefrigerantIndex).PsHighPresValue; // High Pressure Value for Ps (max in tables) + RefMinPe = this->refrig->getSatPressure(state, RefMinTe, RoutineName); + RefTLow = this->refrig->PsLowTempValue; // High Temperature Value for Ps (max in tables) + RefTHigh = this->refrig->PsHighTempValue; // High Temperature Value for Ps (max in tables) + RefPLow = this->refrig->PsLowPresValue; // Low Pressure Value for Ps (>0.0) + RefPHigh = this->refrig->PsHighPresValue; // High Pressure Value for Ps (max in tables) // sum loads on TU coils for (NumTU = 1; NumTU <= NumTUInList; ++NumTU) { @@ -11320,7 +11310,7 @@ void VRFCondenserEquipment::CalcVRFCondenser_FluidTCtrl(EnergyPlusData &state) Q_c_TU_PL = TU_CoolingLoad; // Evaporator (IU side) operational parameters - Pevap = GetSatPressureRefrig(state, this->RefrigerantName, this->IUEvaporatingTemp, RefrigerantIndex, RoutineName); + Pevap = this->refrig->getSatPressure(state, this->IUEvaporatingTemp, RoutineName); Psuction = Pevap; Tsuction = this->IUEvaporatingTemp; // GetSatTemperatureRefrig(state, this->RefrigerantName, max( min( Psuction, RefPHigh ), RefPLow ), // RefrigerantIndex, RoutineName ); @@ -11330,13 +11320,13 @@ void VRFCondenserEquipment::CalcVRFCondenser_FluidTCtrl(EnergyPlusData &state) // Condenser (OU side) operation ranges CapMaxPc = min(Psuction + this->CompMaxDeltaP, RefMaxPc); - CapMaxTc = GetSatTemperatureRefrig(state, this->RefrigerantName, max(min(CapMaxPc, RefPHigh), RefPLow), RefrigerantIndex, RoutineName); + CapMaxTc = this->refrig->getSatTemperature(state, max(min(CapMaxPc, RefPHigh), RefPLow), RoutineName); CapMinTc = OutdoorDryBulb + this->SC; - CapMinPc = GetSatPressureRefrig(state, this->RefrigerantName, CapMinTc, RefrigerantIndex, RoutineName); + CapMinPc = this->refrig->getSatPressure(state, CapMinTc, RoutineName); // Evaporator (IU side) operation ranges CapMinPe = max(CapMinPc - this->CompMaxDeltaP, RefMinPe); - CapMinTe = GetSatTemperatureRefrig(state, this->RefrigerantName, max(min(CapMinPe, RefPHigh), RefPLow), RefrigerantIndex, RoutineName); + CapMinTe = this->refrig->getSatTemperature(state, max(min(CapMinPe, RefPHigh), RefPLow), RoutineName); // Evaporative capacity ranges CompEvaporatingCAPSpdMin = this->CoffEvapCap * this->RatedEvapCapacity * CurveValue(state, this->OUCoolingCAPFT(1), CapMinTc, CapMinTe); @@ -11347,12 +11337,9 @@ void VRFCondenserEquipment::CalcVRFCondenser_FluidTCtrl(EnergyPlusData &state) this->RatedCompPower * CurveValue(state, this->OUCoolingPWRFT(NumOfCompSpdInput), this->CondensingTemp, this->IUEvaporatingTemp); // Initialization for h_IU_evap_in iterations (Label12) - h_IU_evap_in_low = - GetSatEnthalpyRefrig(state, this->RefrigerantName, OutdoorDryBulb - this->SC, 0.0, RefrigerantIndex, RoutineName); // Tc = Tamb - h_IU_evap_in_up = - GetSatEnthalpyRefrig(state, this->RefrigerantName, CapMaxTc - this->SC, 0.0, RefrigerantIndex, RoutineName); // Tc = CapMaxTc - h_IU_evap_in = - GetSatEnthalpyRefrig(state, this->RefrigerantName, OutdoorDryBulb + 10 - this->SC, 0.0, RefrigerantIndex, RoutineName); // Tc = Tamb+10 + h_IU_evap_in_low = this->refrig->getSatEnthalpy(state, OutdoorDryBulb - this->SC, 0.0, RoutineName); // Tc = Tamb + h_IU_evap_in_up = this->refrig->getSatEnthalpy(state, CapMaxTc - this->SC, 0.0, RoutineName); // Tc = CapMaxTc + h_IU_evap_in = this->refrig->getSatEnthalpy(state, OutdoorDryBulb + 10 - this->SC, 0.0, RoutineName); // Tc = Tamb+10 NumIteHIUIn = 1; Label12:; @@ -11369,13 +11356,8 @@ void VRFCondenserEquipment::CalcVRFCondenser_FluidTCtrl(EnergyPlusData &state) Q_c_TU_PL = CompEvaporatingCAPSpdMax; TU_CoolingLoad = CompEvaporatingCAPSpdMax; this->TUCoolingLoad = TU_CoolingLoad; - RefTSat = GetSatTemperatureRefrig(state, this->RefrigerantName, max(min(Pevap, RefPHigh), RefPLow), RefrigerantIndex, RoutineName); - h_IU_evap_out = GetSupHeatEnthalpyRefrig(state, - this->RefrigerantName, - max(RefTSat, this->IUEvaporatingTemp + 3), - max(min(Pevap, RefPHigh), RefPLow), - RefrigerantIndex, - RoutineName); + RefTSat = this->refrig->getSatTemperature(state, max(min(Pevap, RefPHigh), RefPLow), RoutineName); + h_IU_evap_out = this->refrig->getSupHeatEnthalpy(state, max(RefTSat, this->IUEvaporatingTemp + 3), max(min(Pevap, RefPHigh), RefPLow), RoutineName); SH_IU_merged = 3; m_ref_IU_evap = TU_CoolingLoad / (h_IU_evap_out - h_IU_evap_in); @@ -11386,14 +11368,10 @@ void VRFCondenserEquipment::CalcVRFCondenser_FluidTCtrl(EnergyPlusData &state) TUIndex = state.dataHVACVarRefFlow->TerminalUnitList(TUListNum).ZoneTUPtr(NumTU); CoolCoilIndex = state.dataHVACVarRefFlow->VRFTU(TUIndex).CoolCoilIndex; - RefTSat = - GetSatTemperatureRefrig(state, this->RefrigerantName, max(min(Pevap, RefPHigh), RefPLow), RefrigerantIndex, RoutineName); - h_IU_evap_out_i = - GetSupHeatEnthalpyRefrig(state, - this->RefrigerantName, + RefTSat = this->refrig->getSatTemperature(state, max(min(Pevap, RefPHigh), RefPLow), RoutineName); + h_IU_evap_out_i = this->refrig->getSupHeatEnthalpy(state, max(RefTSat, this->IUEvaporatingTemp + state.dataDXCoils->DXCoil(CoolCoilIndex).ActualSH), max(min(Pevap, RefPHigh), RefPLow), - RefrigerantIndex, RoutineName); if (h_IU_evap_out_i > h_IU_evap_in) { @@ -11411,13 +11389,11 @@ void VRFCondenserEquipment::CalcVRFCondenser_FluidTCtrl(EnergyPlusData &state) h_IU_evap_out = h_IU_evap_out / m_ref_IU_evap; SH_IU_merged = SH_IU_merged / m_ref_IU_evap; } else { - RefTSat = GetSatTemperatureRefrig(state, this->RefrigerantName, max(min(Pevap, RefPHigh), RefPLow), RefrigerantIndex, RoutineName); - h_IU_evap_out = GetSupHeatEnthalpyRefrig(state, - this->RefrigerantName, - max(RefTSat, this->IUEvaporatingTemp + 3), - max(min(Pevap, RefPHigh), RefPLow), - RefrigerantIndex, - RoutineName); + RefTSat = this->refrig->getSatTemperature(state, max(min(Pevap, RefPHigh), RefPLow), RoutineName); + h_IU_evap_out = this->refrig->getSupHeatEnthalpy(state, + max(RefTSat, this->IUEvaporatingTemp + 3), + max(min(Pevap, RefPHigh), RefPLow), + RoutineName); SH_IU_merged = 3; m_ref_IU_evap = TU_CoolingLoad / (h_IU_evap_out - h_IU_evap_in); } @@ -11426,18 +11402,15 @@ void VRFCondenserEquipment::CalcVRFCondenser_FluidTCtrl(EnergyPlusData &state) // *Calculate piping loss this->VRFOU_PipeLossC( state, m_ref_IU_evap, max(min(Pevap, RefPHigh), RefPLow), h_IU_evap_out, SH_IU_merged, OutdoorDryBulb, Pipe_Q_c, Pipe_DeltP_c, h_comp_in); - Tsuction = - GetSatTemperatureRefrig(state, this->RefrigerantName, max(min(Pevap - Pipe_DeltP_c, RefPHigh), RefPLow), RefrigerantIndex, RoutineName); + Tsuction = this->refrig->getSatTemperature(state, max(min(Pevap - Pipe_DeltP_c, RefPHigh), RefPLow), RoutineName); Psuction = Pevap - Pipe_DeltP_c; // This Psuction is used for rps > min; will be updated for rps = min // Perform iteration to calculate T_comp_in - T_comp_in = GetSupHeatTempRefrig(state, - this->RefrigerantName, + T_comp_in = this->refrig->getSupHeatTemp(state, max(min(Pevap - Pipe_DeltP_c, RefPHigh), RefPLow), h_comp_in, Tsuction + 3, Tsuction + 30, - RefrigerantIndex, RoutineName); SH_Comp = T_comp_in - Tsuction; // This is used for rps > min; will be updated for rps = min @@ -11501,7 +11474,7 @@ void VRFCondenserEquipment::CalcVRFCondenser_FluidTCtrl(EnergyPlusData &state) } // Update h_IU_evap_in in iterations Label12 - h_IU_evap_in_new = GetSatEnthalpyRefrig(state, this->RefrigerantName, this->CondensingTemp - this->SC, 0.0, RefrigerantIndex, RoutineName); + h_IU_evap_in_new = this->refrig->getSatEnthalpy(state, this->CondensingTemp - this->SC, 0.0, RoutineName); if ((std::abs(h_IU_evap_in - h_IU_evap_in_new) > Tolerance * h_IU_evap_in) && (h_IU_evap_in < h_IU_evap_in_up) && (h_IU_evap_in > h_IU_evap_in_low)) { h_IU_evap_in = h_IU_evap_in_new; @@ -11561,12 +11534,10 @@ void VRFCondenserEquipment::CalcVRFCondenser_FluidTCtrl(EnergyPlusData &state) this->RatedCompPower * CurveValue(state, this->OUCoolingPWRFT(NumOfCompSpdInput), this->IUCondensingTemp, CapMaxTe); // Initialization of h_comp_out iterations (Label23) - Pcond = GetSatPressureRefrig(state, this->RefrigerantName, 40.0, RefrigerantIndex, RoutineName); - RefTSat = GetSatTemperatureRefrig(state, this->RefrigerantName, Pcond, RefrigerantIndex, RoutineName); - h_IU_cond_in_up = GetSupHeatEnthalpyRefrig( - state, this->RefrigerantName, max(RefTSat, min(this->IUCondensingTemp + 50, RefTHigh)), Pcond, RefrigerantIndex, RoutineName); - h_IU_cond_in_low = - GetSatEnthalpyRefrig(state, this->RefrigerantName, this->IUCondensingTemp, 1.0, RefrigerantIndex, RoutineName); // Quality=1 + Pcond = this->refrig->getSatPressure(state, 40.0, RoutineName); + RefTSat = this->refrig->getSatTemperature(state, Pcond, RoutineName); + h_IU_cond_in_up = this->refrig->getSupHeatEnthalpy(state, max(RefTSat, min(this->IUCondensingTemp + 50, RefTHigh)), Pcond, RoutineName); + h_IU_cond_in_low = this->refrig->getSatEnthalpy(state, this->IUCondensingTemp, 1.0, RoutineName); // Quality=1 h_IU_cond_in = h_IU_cond_in_low; Label23:; @@ -11578,12 +11549,10 @@ void VRFCondenserEquipment::CalcVRFCondenser_FluidTCtrl(EnergyPlusData &state) if (Q_h_TU_PL > CompEvaporatingCAPSpdMax + CompEvaporatingPWRSpdMax) { // Required load is beyond the max system capacity - h_IU_cond_out = GetSatEnthalpyRefrig( + h_IU_cond_out = this->refrig->getSatEnthalpy( state, - this->RefrigerantName, - GetSatTemperatureRefrig(state, this->RefrigerantName, max(min(Pcond, RefPHigh), RefPLow), RefrigerantIndex, RoutineName) - 5.0, + this->refrig->getSatTemperature(state, max(min(Pcond, RefPHigh), RefPLow), RoutineName) - 5.0, 0.0, - RefrigerantIndex, RoutineName); // Quality=0 h_IU_cond_out_ave = h_IU_cond_out; SC_IU_merged = 5; @@ -11594,13 +11563,11 @@ void VRFCondenserEquipment::CalcVRFCondenser_FluidTCtrl(EnergyPlusData &state) if (state.dataHVACVarRefFlow->TerminalUnitList(TUListNum).TotalHeatLoad(NumTU) > 0) { TUIndex = state.dataHVACVarRefFlow->TerminalUnitList(TUListNum).ZoneTUPtr(NumTU); HeatCoilIndex = state.dataHVACVarRefFlow->VRFTU(TUIndex).HeatCoilIndex; - h_IU_cond_out_i = GetSatEnthalpyRefrig( + h_IU_cond_out_i = this->refrig->getSatEnthalpy( state, - this->RefrigerantName, - GetSatTemperatureRefrig(state, this->RefrigerantName, max(min(Pcond, RefPHigh), RefPLow), RefrigerantIndex, RoutineName) - + this->refrig->getSatTemperature(state, max(min(Pcond, RefPHigh), RefPLow), RoutineName) - state.dataDXCoils->DXCoil(HeatCoilIndex).ActualSC, 0.0, - RefrigerantIndex, RoutineName); // Quality=0 m_ref_IU_cond_i = (state.dataHVACVarRefFlow->TerminalUnitList(TUListNum).TotalHeatLoad(NumTU) <= 0.0) @@ -11615,12 +11582,10 @@ void VRFCondenserEquipment::CalcVRFCondenser_FluidTCtrl(EnergyPlusData &state) h_IU_cond_out_ave = h_IU_cond_out_ave / m_ref_IU_cond; // h_merge SC_IU_merged = SC_IU_merged / m_ref_IU_cond; } else { - h_IU_cond_out_ave = GetSatEnthalpyRefrig( + h_IU_cond_out_ave = this->refrig->getSatEnthalpy( state, - this->RefrigerantName, - GetSatTemperatureRefrig(state, this->RefrigerantName, max(min(Pcond, RefPHigh), RefPLow), RefrigerantIndex, RoutineName) - 5.0, + this->refrig->getSatTemperature(state, max(min(Pcond, RefPHigh), RefPLow), RoutineName) - 5.0, 0.0, - RefrigerantIndex, RoutineName); // Quality=0 SC_IU_merged = 5; m_ref_IU_cond = TU_HeatingLoad / (h_IU_cond_in - h_IU_cond_out_ave); @@ -11632,11 +11597,11 @@ void VRFCondenserEquipment::CalcVRFCondenser_FluidTCtrl(EnergyPlusData &state) state, m_ref_IU_cond, max(min(Pcond, RefPHigh), RefPLow), h_IU_cond_in, OutdoorDryBulb, Pipe_Q_h, Pipe_DeltP_h, h_comp_out); Pdischarge = max(Pcond + Pipe_DeltP_h, Pcond); // affected by piping loss - Tdischarge = GetSatTemperatureRefrig(state, this->RefrigerantName, max(min(Pdischarge, RefPHigh), RefPLow), RefrigerantIndex, RoutineName); + Tdischarge = this->refrig->getSatTemperature(state, max(min(Pdischarge, RefPHigh), RefPLow), RoutineName); // Evaporative capacity ranges_Min CapMinPe = min(Pdischarge - this->CompMaxDeltaP, RefMinPe); - CapMinTe = GetSatTemperatureRefrig(state, this->RefrigerantName, max(min(CapMinPe, RefPHigh), RefPLow), RefrigerantIndex, RoutineName); + CapMinTe = this->refrig->getSatTemperature(state, max(min(CapMinPe, RefPHigh), RefPLow), RoutineName); CompEvaporatingCAPSpdMin = this->CoffEvapCap * this->RatedEvapCapacity * CurveValue(state, this->OUCoolingCAPFT(1), Tdischarge, CapMinTe); CompEvaporatingPWRSpdMin = this->RatedCompPower * CurveValue(state, this->OUCoolingPWRFT(1), Tdischarge, CapMinTe); @@ -11644,9 +11609,9 @@ void VRFCondenserEquipment::CalcVRFCondenser_FluidTCtrl(EnergyPlusData &state) Q_c_OU = max(0.0, Q_h_TU_PL - CompEvaporatingPWRSpdMin); // *Calculate capacity modification factor - RefTSat = GetSatTemperatureRefrig(state, this->RefrigerantName, max(min(CapMinPe, RefPHigh), RefPLow), RefrigerantIndex, RoutineName); - h_comp_in = GetSupHeatEnthalpyRefrig( - state, this->RefrigerantName, max(RefTSat, CapMinTe + this->SH), max(min(CapMinPe, RefPHigh), RefPLow), RefrigerantIndex, RoutineName); + RefTSat = this->refrig->getSatTemperature(state, max(min(CapMinPe, RefPHigh), RefPLow), RoutineName); + h_comp_in = this->refrig->getSupHeatEnthalpy( + state, max(RefTSat, CapMinTe + this->SH), max(min(CapMinPe, RefPHigh), RefPLow), RoutineName); C_cap_operation = this->VRFOU_CapModFactor(state, h_comp_in, h_IU_cond_out_ave, @@ -11740,13 +11705,11 @@ void VRFCondenserEquipment::CalcVRFCondenser_FluidTCtrl(EnergyPlusData &state) } // Update h_comp_out in iteration Label23 - P_comp_in = GetSatPressureRefrig(state, this->RefrigerantName, this->EvaporatingTemp, RefrigerantIndex, RoutineName); - RefTSat = GetSatTemperatureRefrig(state, this->RefrigerantName, max(min(P_comp_in, RefPHigh), RefPLow), RefrigerantIndex, RoutineName); - h_comp_in_new = GetSupHeatEnthalpyRefrig(state, - this->RefrigerantName, + P_comp_in = this->refrig->getSatPressure(state, this->EvaporatingTemp, RoutineName); + RefTSat = this->refrig->getSatTemperature(state, max(min(P_comp_in, RefPHigh), RefPLow), RoutineName); + h_comp_in_new = this->refrig->getSupHeatEnthalpy(state, max(RefTSat, this->SH + this->EvaporatingTemp), max(min(P_comp_in, RefPHigh), RefPLow), - RefrigerantIndex, RoutineName); h_comp_out_new = Ncomp_new / m_ref_IU_cond + h_comp_in_new; @@ -11796,32 +11759,31 @@ void VRFCondenserEquipment::CalcVRFCondenser_FluidTCtrl(EnergyPlusData &state) Q_h_TU_PL = TU_HeatingLoad; // Evaporator (IU side) operational parameters - Pevap = GetSatPressureRefrig(state, this->RefrigerantName, this->IUEvaporatingTemp, RefrigerantIndex, RoutineName); + Pevap = this->refrig->getSatPressure(state, this->IUEvaporatingTemp, RoutineName); Psuction = Pevap; Tsuction = this->IUEvaporatingTemp; this->EvaporatingTemp = this->IUEvaporatingTemp; // Condenser (OU side) operation ranges CapMaxPc = min(Psuction + this->CompMaxDeltaP, RefMaxPc); - CapMaxTc = GetSatTemperatureRefrig(state, this->RefrigerantName, max(min(CapMaxPc, RefPHigh), RefPLow), RefrigerantIndex, RoutineName); + CapMaxTc = this->refrig->getSatTemperature(state, max(min(CapMaxPc, RefPHigh), RefPLow), RoutineName); CapMinTc = OutdoorDryBulb + this->SC; - CapMinPc = GetSatPressureRefrig(state, this->RefrigerantName, CapMinTc, RefrigerantIndex, RoutineName); + CapMinPc = this->refrig->getSatPressure(state, CapMinTc, RoutineName); // Evaporator (IU side) operation ranges CapMinPe = max(CapMinPc - this->CompMaxDeltaP, RefMinPe); - CapMinTe = GetSatTemperatureRefrig(state, this->RefrigerantName, max(min(CapMinPe, RefPHigh), RefPLow), RefrigerantIndex, RoutineName); + CapMinTe = this->refrig->getSatTemperature(state, max(min(CapMinPe, RefPHigh), RefPLow), RoutineName); //===**h_comp_out Iteration Starts // Initialization of h_comp_out iterations (Label230) { - Pcond = GetSatPressureRefrig(state, this->RefrigerantName, this->IUCondensingTemp, RefrigerantIndex, RoutineName); - Real64 Pcond_temp = GetSatPressureRefrig(state, this->RefrigerantName, 40.0, RefrigerantIndex, RoutineName); - RefTSat = GetSatTemperatureRefrig(state, this->RefrigerantName, Pcond_temp, RefrigerantIndex, RoutineName); - h_IU_cond_in_up = GetSupHeatEnthalpyRefrig( - state, this->RefrigerantName, max(RefTSat, min(this->IUCondensingTemp + 50, RefTHigh)), Pcond_temp, RefrigerantIndex, RoutineName); - h_IU_cond_in_low = - GetSatEnthalpyRefrig(state, this->RefrigerantName, this->IUCondensingTemp, 1.0, RefrigerantIndex, RoutineName); // Quality=1 + Pcond = this->refrig->getSatPressure(state, this->IUCondensingTemp, RoutineName); + Real64 Pcond_temp = this->refrig->getSatPressure(state, 40.0, RoutineName); + RefTSat = this->refrig->getSatTemperature(state, Pcond_temp, RoutineName); + h_IU_cond_in_up = this->refrig->getSupHeatEnthalpy( + state, max(RefTSat, min(this->IUCondensingTemp + 50, RefTHigh)), Pcond_temp, RoutineName); + h_IU_cond_in_low = this->refrig->getSatEnthalpy(state, this->IUCondensingTemp, 1.0, RoutineName); // Quality=1 h_IU_cond_in = h_IU_cond_in_low; } @@ -11835,13 +11797,11 @@ void VRFCondenserEquipment::CalcVRFCondenser_FluidTCtrl(EnergyPlusData &state) if (state.dataHVACVarRefFlow->TerminalUnitList(TUListNum).TotalHeatLoad(NumTU) > 0) { TUIndex = state.dataHVACVarRefFlow->TerminalUnitList(TUListNum).ZoneTUPtr(NumTU); HeatCoilIndex = state.dataHVACVarRefFlow->VRFTU(TUIndex).HeatCoilIndex; - h_IU_cond_out_i = GetSatEnthalpyRefrig( + h_IU_cond_out_i = this->refrig->getSatEnthalpy( state, - this->RefrigerantName, - GetSatTemperatureRefrig(state, this->RefrigerantName, max(min(Pcond, RefPHigh), RefPLow), RefrigerantIndex, RoutineName) - + this->refrig->getSatTemperature(state, max(min(Pcond, RefPHigh), RefPLow), RoutineName) - state.dataDXCoils->DXCoil(HeatCoilIndex).ActualSC, 0.0, - RefrigerantIndex, RoutineName); // Quality=0 m_ref_IU_cond_i = (state.dataHVACVarRefFlow->TerminalUnitList(TUListNum).TotalHeatLoad(NumTU) <= 0.0) @@ -11856,12 +11816,10 @@ void VRFCondenserEquipment::CalcVRFCondenser_FluidTCtrl(EnergyPlusData &state) h_IU_cond_out_ave = h_IU_cond_out_ave / m_ref_IU_cond; SC_IU_merged = SC_IU_merged / m_ref_IU_cond; } else { - h_IU_cond_out_ave = GetSatEnthalpyRefrig( + h_IU_cond_out_ave = this->refrig->getSatEnthalpy( state, - this->RefrigerantName, - GetSatTemperatureRefrig(state, this->RefrigerantName, max(min(Pcond, RefPHigh), RefPLow), RefrigerantIndex, RoutineName) - 5.0, + this->refrig->getSatTemperature(state, max(min(Pcond, RefPHigh), RefPLow), RoutineName) - 5.0, 0.0, - RefrigerantIndex, RoutineName); // Quality=0 SC_IU_merged = 5; m_ref_IU_cond = TU_HeatingLoad / (h_IU_cond_in - h_IU_cond_out_ave); @@ -11871,7 +11829,7 @@ void VRFCondenserEquipment::CalcVRFCondenser_FluidTCtrl(EnergyPlusData &state) this->VRFOU_PipeLossH( state, m_ref_IU_cond, max(min(Pcond, RefPHigh), RefPLow), h_IU_cond_in, OutdoorDryBulb, Pipe_Q_h, Pipe_DeltP_h, h_comp_out); Pdischarge = max(Pcond + Pipe_DeltP_h, Pcond); // affected by piping loss - Tdischarge = GetSatTemperatureRefrig(state, this->RefrigerantName, max(min(Pdischarge, RefPHigh), RefPLow), RefrigerantIndex, RoutineName); + Tdischarge = this->refrig->getSatTemperature(state, max(min(Pdischarge, RefPHigh), RefPLow), RoutineName); Q_h_TU_PL = TU_HeatingLoad + Pipe_Q_h; // *PL-c: Calculate total IU refrigerant flow rate and SH_IU_merged @@ -11884,12 +11842,10 @@ void VRFCondenserEquipment::CalcVRFCondenser_FluidTCtrl(EnergyPlusData &state) TUIndex = state.dataHVACVarRefFlow->TerminalUnitList(TUListNum).ZoneTUPtr(NumTU); CoolCoilIndex = state.dataHVACVarRefFlow->VRFTU(TUIndex).CoolCoilIndex; - RefTSat = GetSatTemperatureRefrig(state, this->RefrigerantName, max(min(Pevap, RefPHigh), RefPLow), RefrigerantIndex, RoutineName); - h_IU_evap_out_i = GetSupHeatEnthalpyRefrig(state, - this->RefrigerantName, + RefTSat = this->refrig->getSatTemperature(state, max(min(Pevap, RefPHigh), RefPLow), RoutineName); + h_IU_evap_out_i = this->refrig->getSupHeatEnthalpy(state, max(RefTSat, this->IUEvaporatingTemp + state.dataDXCoils->DXCoil(CoolCoilIndex).ActualSH), max(min(Pevap, RefPHigh), RefPLow), - RefrigerantIndex, RoutineName); if (h_IU_evap_out_i > h_IU_evap_in) { @@ -11907,12 +11863,10 @@ void VRFCondenserEquipment::CalcVRFCondenser_FluidTCtrl(EnergyPlusData &state) h_IU_evap_out = h_IU_evap_out / m_ref_IU_evap; SH_IU_merged = SH_IU_merged / m_ref_IU_evap; } else { - RefTSat = GetSatTemperatureRefrig(state, this->RefrigerantName, max(min(Pevap, RefPHigh), RefPLow), RefrigerantIndex, RoutineName); - h_IU_evap_out = GetSupHeatEnthalpyRefrig(state, - this->RefrigerantName, + RefTSat = this->refrig->getSatTemperature(state, max(min(Pevap, RefPHigh), RefPLow), RoutineName); + h_IU_evap_out = this->refrig->getSupHeatEnthalpy(state, max(RefTSat, this->IUEvaporatingTemp + 3), max(min(Pevap, RefPHigh), RefPLow), - RefrigerantIndex, RoutineName); SH_IU_merged = 3; m_ref_IU_evap = TU_CoolingLoad / (h_IU_evap_out - h_IU_evap_in); @@ -11929,7 +11883,7 @@ void VRFCondenserEquipment::CalcVRFCondenser_FluidTCtrl(EnergyPlusData &state) Pipe_DeltP_c, h_IU_PLc_out); Psuction = min(Pevap - Pipe_DeltP_c, Pevap); // This Psuction is used for rps > min; will be updated for rps = min - Tsuction = GetSatTemperatureRefrig(state, this->RefrigerantName, max(min(Psuction, RefPHigh), RefPLow), RefrigerantIndex, RoutineName); + Tsuction = this->refrig->getSatTemperature(state, max(min(Psuction, RefPHigh), RefPLow), RoutineName); h_comp_in = h_IU_PLc_out; Q_c_TU_PL = TU_CoolingLoad + Pipe_Q_c; @@ -13477,13 +13431,6 @@ Real64 VRFCondenserEquipment::VRFOU_CapModFactor( // METHODOLOGY EMPLOYED: // This is part of the VRF-FluidTCtrl Model. - using Fluid::FindRefrigerant; - using Fluid::GetSatEnthalpyRefrig; - using Fluid::GetSatTemperatureRefrig; - using Fluid::GetSupHeatDensityRefrig; - using Fluid::GetSupHeatEnthalpyRefrig; - - int RefrigerantIndex; // Index of the refrigerant [-] Real64 C_cap_density; // Compressor capacity modification algorithm_modified flow rate [-] Real64 C_cap_enthalpy; // Compressor capacity modification algorithm_modified enthalpy difference [-] Real64 C_cap_operation; // Compressor capacity modification algorithm_modified Cap [-] @@ -13495,20 +13442,16 @@ Real64 VRFCondenserEquipment::VRFOU_CapModFactor( static constexpr std::string_view RoutineName("VRFOU_CapModFactor"); - // variable initializations - RefrigerantIndex = FindRefrigerant(state, this->RefrigerantName); - // Saturated temperature at real evaporating pressure - RefTSat = GetSatTemperatureRefrig(state, this->RefrigerantName, P_evap_real, RefrigerantIndex, RoutineName); + RefTSat = this->refrig->getSatTemperature(state, P_evap_real, RoutineName); // Enthalpy at rated conditions - h_evap_out_rate = - GetSupHeatEnthalpyRefrig(state, this->RefrigerantName, max(RefTSat, T_comp_in_rate), P_evap_real, RefrigerantIndex, RoutineName); - h_evap_in_rate = GetSatEnthalpyRefrig(state, this->RefrigerantName, T_cond_out_rate, 0.0, RefrigerantIndex, RoutineName); + h_evap_out_rate = this->refrig->getSupHeatEnthalpy(state, max(RefTSat, T_comp_in_rate), P_evap_real, RoutineName); + h_evap_in_rate = this->refrig->getSatEnthalpy(state, T_cond_out_rate, 0.0, RoutineName); // Density calculations - density_rate = GetSupHeatDensityRefrig(state, this->RefrigerantName, T_comp_in_rate, P_evap_real, RefrigerantIndex, RoutineName); - density_real = GetSupHeatDensityRefrig(state, this->RefrigerantName, T_comp_in_real, P_evap_real, RefrigerantIndex, RoutineName); + density_rate = this->refrig->getSupHeatDensity(state, T_comp_in_rate, P_evap_real, RoutineName); + density_real = this->refrig->getSupHeatDensity(state, T_comp_in_real, P_evap_real, RoutineName); // Modification factor calculations if (density_real > 0) @@ -13554,15 +13497,9 @@ void VRFCondenserEquipment::VRFOU_TeModification( // METHODOLOGY EMPLOYED: // This is part of the VRF-FluidTCtrl Model. - using Fluid::FindRefrigerant; - using Fluid::GetSatPressureRefrig; - using Fluid::GetSatTemperatureRefrig; - using Fluid::GetSupHeatEnthalpyRefrig; - int CoolCoilIndex; // index to cooling coil in terminal unit int NumTUInList; // number of terminal units is list int NumTeIte; // counter for Te calculation iterations [-] - int RefrigerantIndex; // Index of the refrigerant [-] int TUListNum; // index to TU List int TUIndex; // Index to terminal unit Real64 MaxNumTeIte; // Piping Loss Algorithm Parameter: max number of iterations for Te [-] @@ -13583,9 +13520,8 @@ void VRFCondenserEquipment::VRFOU_TeModification( // variable initializations TUListNum = this->ZoneTUListPtr; - RefrigerantIndex = FindRefrigerant(state, this->RefrigerantName); - RefPLow = state.dataFluid->RefrigData(RefrigerantIndex).PsLowPresValue; - RefPHigh = state.dataFluid->RefrigData(RefrigerantIndex).PsHighPresValue; + RefPLow = this->refrig->PsLowPresValue; + RefPHigh = this->refrig->PsHighPresValue; NumTUInList = state.dataHVACVarRefFlow->TerminalUnitList(TUListNum).NumTUInList; // Initialization of Te iterations (Label11) @@ -13600,7 +13536,7 @@ Label11:; Pipe_h_IU_out_i = 0; Pipe_m_ref_i = 0; Pipe_SH_merged = 0; - Pe_update = GetSatPressureRefrig(state, this->RefrigerantName, Te_update, RefrigerantIndex, RoutineName); + Pe_update = this->refrig->getSatPressure(state, Te_update, RoutineName); // Re-calculate total refrigerant flow rate, with updated SH for (int NumTU = 1; NumTU <= NumTUInList; NumTU++) { @@ -13619,12 +13555,10 @@ Label11:; SH_IU_update = (-this->C2Te + std::pow((pow_2(this->C2Te) - 4 * (this->C1Te - Tfs + Te_update) * this->C3Te), 0.5)) / (2 * this->C3Te); - RefTSat = GetSatTemperatureRefrig(state, this->RefrigerantName, Pe_update, RefrigerantIndex, RoutineName); - Pipe_h_IU_out_i = GetSupHeatEnthalpyRefrig(state, - this->RefrigerantName, + RefTSat = this->refrig->getSatTemperature(state, Pe_update, RoutineName); + Pipe_h_IU_out_i = this->refrig->getSupHeatEnthalpy(state, max(RefTSat, Te_update + SH_IU_update), Pe_update, - RefrigerantIndex, RoutineName); // hB_i for the IU if (Pipe_h_IU_out_i > Pipe_h_IU_in) { @@ -13642,16 +13576,14 @@ Label11:; Pipe_SH_merged = Pipe_SH_merged / Pipe_m_ref; } else { Pipe_SH_merged = this->SH; - RefTSat = GetSatTemperatureRefrig(state, this->RefrigerantName, Pe_update, RefrigerantIndex, RoutineName); - Pipe_h_IU_out = GetSupHeatEnthalpyRefrig( - state, this->RefrigerantName, max(RefTSat, Te_update + Pipe_SH_merged), Pe_update, RefrigerantIndex, RoutineName); + RefTSat = this->refrig->getSatTemperature(state, Pe_update, RoutineName); + Pipe_h_IU_out = this->refrig->getSupHeatEnthalpy(state, max(RefTSat, Te_update + Pipe_SH_merged), Pe_update, RoutineName); } // Re-calculate piping loss this->VRFOU_PipeLossC(state, Pipe_m_ref, Pe_update, Pipe_h_IU_out, Pipe_SH_merged, OutdoorDryBulb, Pipe_Q, Pipe_DeltP, Pipe_h_comp_in); - Tsuction = - GetSatTemperatureRefrig(state, this->RefrigerantName, max(min(Pe_update - Pipe_DeltP, RefPHigh), RefPLow), RefrigerantIndex, RoutineName); + Tsuction = this->refrig->getSatTemperature(state, max(min(Pe_update - Pipe_DeltP, RefPHigh), RefPLow), RoutineName); if ((std::abs(Tsuction - Te_low) > 0.5) && (Te_update < Te_up) && (Te_update > Te_low) && (NumTeIte < MaxNumTeIte)) { Te_update = Te_update - 0.1; @@ -13692,9 +13624,6 @@ void VRFCondenserEquipment::VRFOU_CompSpd( // This is part of the VRF-FluidTCtrl Model. using Curve::CurveValue; - using Fluid::FindRefrigerant; - using Fluid::GetSatPressureRefrig; - using Fluid::GetSupHeatTempRefrig; // Locals // SUBROUTINE ARGUMENT DEFINITIONS: @@ -13705,7 +13634,6 @@ void VRFCondenserEquipment::VRFOU_CompSpd( int CompSpdUB; // index for Compressor speed up bound [-] int NumOfCompSpdInput; // Number of compressor speed input by the user [-] int NumTUInList; // number of terminal units is list - int RefrigerantIndex; // Index of the refrigerant int TUListNum; // index to TU List Real64 C_cap_operation; // Compressor capacity modification algorithm_modified Cap [-] Real64 P_suction; // Compressor suction pressure Pe' [Pa] @@ -13723,9 +13651,8 @@ void VRFCondenserEquipment::VRFOU_CompSpd( // variable initializations: component index TUListNum = this->ZoneTUListPtr; NumTUInList = state.dataHVACVarRefFlow->TerminalUnitList(TUListNum).NumTUInList; - RefrigerantIndex = FindRefrigerant(state, this->RefrigerantName); - RefPLow = state.dataFluid->RefrigData(RefrigerantIndex).PsLowPresValue; - RefPHigh = state.dataFluid->RefrigData(RefrigerantIndex).PsHighPresValue; + RefPLow = this->refrig->PsLowPresValue; + RefPHigh = this->refrig->PsHighPresValue; // variable initializations: compressor NumOfCompSpdInput = this->CompressorSpeed.size(); @@ -13733,14 +13660,12 @@ void VRFCondenserEquipment::VRFOU_CompSpd( CompEvaporatingCAPSpd.dimension(NumOfCompSpdInput); // variable initializations: system operational parameters - P_suction = GetSatPressureRefrig(state, this->RefrigerantName, T_suction, RefrigerantIndex, RoutineName); - T_comp_in = GetSupHeatTempRefrig(state, - this->RefrigerantName, + P_suction = this->refrig->getSatPressure(state, T_suction, RoutineName); + T_comp_in = this->refrig->getSupHeatTemp(state, max(min(P_suction, RefPHigh), RefPLow), h_comp_in, T_suction + 3, T_suction + 30, - RefrigerantIndex, RoutineName); SH_Comp = T_comp_in - T_suction; @@ -13851,16 +13776,11 @@ void VRFCondenserEquipment::VRFOU_CompCap( // This is part of the VRF-FluidTCtrl Model. using Curve::CurveValue; - using Fluid::FindRefrigerant; - using Fluid::GetSatPressureRefrig; - using Fluid::GetSupHeatTempRefrig; - int CounterCompSpdTemp; // Index for the compressor speed level[-] int CompSpdLB; // index for Compressor speed low bound [-] int CompSpdUB; // index for Compressor speed up bound [-] int NumOfCompSpdInput; // Number of compressor speed input by the user [-] int NumTUInList; // number of terminal units is list - int RefrigerantIndex; // Index of the refrigerant int TUListNum; // index to TU List Real64 C_cap_operation; // Compressor capacity modification algorithm_modified Cap [-] Real64 P_suction; // Compressor suction pressure Pe' [Pa] @@ -13877,9 +13797,8 @@ void VRFCondenserEquipment::VRFOU_CompCap( // variable initializations: component index TUListNum = this->ZoneTUListPtr; NumTUInList = state.dataHVACVarRefFlow->TerminalUnitList(TUListNum).NumTUInList; - RefrigerantIndex = FindRefrigerant(state, this->RefrigerantName); - RefPLow = state.dataFluid->RefrigData(RefrigerantIndex).PsLowPresValue; - RefPHigh = state.dataFluid->RefrigData(RefrigerantIndex).PsHighPresValue; + RefPLow = this->refrig->PsLowPresValue; + RefPHigh = this->refrig->PsHighPresValue; // variable initializations: compressor NumOfCompSpdInput = this->CompressorSpeed.size(); @@ -13923,14 +13842,12 @@ void VRFCondenserEquipment::VRFOU_CompCap( } // variable initializations: system operational parameters - P_suction = GetSatPressureRefrig(state, this->RefrigerantName, T_suction, RefrigerantIndex, RoutineName); - T_comp_in = GetSupHeatTempRefrig(state, - this->RefrigerantName, + P_suction = this->refrig->getSatPressure(state, T_suction, RoutineName); + T_comp_in = this->refrig->getSupHeatTemp(state, max(min(P_suction, RefPHigh), RefPLow), h_comp_in, T_suction + 3, T_suction + 30, - RefrigerantIndex, RoutineName); SH_Comp = T_comp_in - T_suction; @@ -13973,12 +13890,7 @@ void VRFCondenserEquipment::VRFOU_CalcCompC(EnergyPlusData &state, // This is part of the VRF-FluidTCtrl Model. using Curve::CurveValue; - using Fluid::FindRefrigerant; - using Fluid::GetSatEnthalpyRefrig; - using Fluid::GetSatPressureRefrig; - using Fluid::GetSatTemperatureRefrig; - using Fluid::GetSupHeatEnthalpyRefrig; - using Fluid::GetSupHeatTempRefrig; + using General::SolveRoot; int CounterCompSpdTemp; // Index for the compressor speed level[-] @@ -13990,7 +13902,6 @@ void VRFCondenserEquipment::VRFOU_CalcCompC(EnergyPlusData &state, int NumIteCcap; // counter for Ccap calculation iterations [-] int NumIteTe; // counter for Te calculation iterations [-] int NumTUInList; // number of terminal units is list - int RefrigerantIndex; // Index of the refrigerant [-] int SolFla; // Slove flag for SolveRoot [-] int TUListNum; // index to TU List int TUIndex; // Index to terminal unit @@ -14035,9 +13946,8 @@ void VRFCondenserEquipment::VRFOU_CalcCompC(EnergyPlusData &state, Q_evap_req = TU_load + Pipe_Q; TUListNum = this->ZoneTUListPtr; - RefrigerantIndex = FindRefrigerant(state, this->RefrigerantName); - RefPLow = state.dataFluid->RefrigData(RefrigerantIndex).PsLowPresValue; - RefPHigh = state.dataFluid->RefrigData(RefrigerantIndex).PsHighPresValue; + RefPLow = this->refrig->PsLowPresValue; + RefPHigh = this->refrig->PsHighPresValue; NumTUInList = state.dataHVACVarRefFlow->TerminalUnitList(TUListNum).NumTUInList; Modifi_SH = Pipe_T_comp_in - T_suction; @@ -14091,19 +14001,18 @@ void VRFCondenserEquipment::VRFOU_CalcCompC(EnergyPlusData &state, // Update the C_cap_operation Label13:; Q_evap_req = TU_load + Pipe_Q0; // Pipe_Q0 is updated during the iteration - Pipe_h_IU_in = GetSatEnthalpyRefrig(state, this->RefrigerantName, T_discharge_new - this->SC, 0.0, RefrigerantIndex, RoutineName); + Pipe_h_IU_in = this->refrig->getSatEnthalpy(state, T_discharge_new - this->SC, 0.0, RoutineName); CompSpdActual = this->CompressorSpeed(1); Real64 CondHeat = Q_evap_req * C_cap_operation0 / this->RatedEvapCapacity; // 150130 To be confirmed int CAPFT = this->OUCoolingCAPFT(CounterCompSpdTemp); // Update Te' (SmallLoadTe) to meet the required evaporator capacity MinOutdoorUnitTe = 6; - P_discharge = GetSatPressureRefrig(state, this->RefrigerantName, T_discharge, RefrigerantIndex, RoutineName); + P_discharge = this->refrig->getSatPressure(state, T_discharge, RoutineName); - MinRefriPe = GetSatPressureRefrig(state, this->RefrigerantName, -15, RefrigerantIndex, RoutineName); + MinRefriPe = this->refrig->getSatPressure(state, -15, RoutineName); MinOutdoorUnitPe = max(P_discharge - this->CompMaxDeltaP, MinRefriPe); - MinOutdoorUnitTe = GetSatTemperatureRefrig( - state, this->RefrigerantName, max(min(MinOutdoorUnitPe, RefPHigh), RefPLow), RefrigerantIndex, RoutineName); + MinOutdoorUnitTe = this->refrig->getSatTemperature(state, max(min(MinOutdoorUnitPe, RefPHigh), RefPLow), RoutineName); auto f = [&state, T_discharge_new, CondHeat, CAPFT](Real64 const T_suc) { return CompResidual_FluidTCtrl(state, T_discharge_new, CondHeat, CAPFT, T_suc); @@ -14132,7 +14041,7 @@ void VRFCondenserEquipment::VRFOU_CalcCompC(EnergyPlusData &state, Pipe_h_IU_out_i = 0; Pipe_m_ref_i = 0; Pipe_SH_merged = 0; - Pipe_Pe_assumed = GetSatPressureRefrig(state, this->RefrigerantName, Pipe_Te_assumed, RefrigerantIndex, RoutineName); + Pipe_Pe_assumed = this->refrig->getSatPressure(state, Pipe_Te_assumed, RoutineName); // Re-calculate total refrigerant flow rate, with updated SH for (int NumTU = 1; NumTU <= NumTUInList; NumTU++) { @@ -14151,13 +14060,10 @@ void VRFCondenserEquipment::VRFOU_CalcCompC(EnergyPlusData &state, (-this->C2Te + std::pow((pow_2(this->C2Te) - 4 * (this->C1Te - Tfs + Pipe_Te_assumed) * this->C3Te), 0.5)) / (2 * this->C3Te); - RefTSat = GetSatTemperatureRefrig( - state, this->RefrigerantName, max(min(Pipe_Pe_assumed, RefPHigh), RefPLow), RefrigerantIndex, RoutineName); - Pipe_h_IU_out_i = GetSupHeatEnthalpyRefrig(state, - this->RefrigerantName, + RefTSat = this->refrig->getSatTemperature(state, max(min(Pipe_Pe_assumed, RefPHigh), RefPLow), RoutineName); + Pipe_h_IU_out_i = this->refrig->getSupHeatEnthalpy(state, max(RefTSat, Pipe_Te_assumed + Modifi_SHin), max(min(Pipe_Pe_assumed, RefPHigh), RefPLow), - RefrigerantIndex, RoutineName); if (Pipe_h_IU_out_i > Pipe_h_IU_in) { @@ -14176,14 +14082,11 @@ void VRFCondenserEquipment::VRFOU_CalcCompC(EnergyPlusData &state, Pipe_SH_merged = Pipe_SH_merged / Pipe_m_ref; } else { Pipe_SH_merged = this->SH; - RefTSat = GetSatTemperatureRefrig( - state, this->RefrigerantName, max(min(Pipe_Pe_assumed, RefPHigh), RefPLow), RefrigerantIndex, RoutineName); - Pipe_h_IU_out = GetSupHeatEnthalpyRefrig(state, - this->RefrigerantName, - max(RefTSat, Pipe_Te_assumed + Pipe_SH_merged), - max(min(Pipe_Pe_assumed, RefPHigh), RefPLow), - RefrigerantIndex, - RoutineName); + RefTSat = this->refrig->getSatTemperature(state, max(min(Pipe_Pe_assumed, RefPHigh), RefPLow), RoutineName); + Pipe_h_IU_out = this->refrig->getSupHeatEnthalpy(state, + max(RefTSat, Pipe_Te_assumed + Pipe_SH_merged), + max(min(Pipe_Pe_assumed, RefPHigh), RefPLow), + RoutineName); } // Re-calculate piping loss @@ -14197,8 +14100,7 @@ void VRFCondenserEquipment::VRFOU_CalcCompC(EnergyPlusData &state, Pipe_DeltP, Pipe_h_comp_in); - T_suction = GetSatTemperatureRefrig( - state, this->RefrigerantName, max(min(Pipe_Pe_assumed - Pipe_DeltP, RefPHigh), RefPLow), RefrigerantIndex, RoutineName); + T_suction = this->refrig->getSatTemperature(state, max(min(Pipe_Pe_assumed - Pipe_DeltP, RefPHigh), RefPLow), RoutineName); if ((std::abs(T_suction - SmallLoadTe) > 0.5) && (Pipe_Te_assumed < this->EvaporatingTemp) && (Pipe_Te_assumed > SmallLoadTe) && (NumIteTe < MaxNumIteTe)) { @@ -14217,13 +14119,11 @@ void VRFCondenserEquipment::VRFOU_CalcCompC(EnergyPlusData &state, } // Perform iteration to calculate Pipe_T_comp_in( Te'+SH' ) - Pipe_T_comp_in = GetSupHeatTempRefrig(state, - this->RefrigerantName, + Pipe_T_comp_in = this->refrig->getSupHeatTemp(state, max(min(Pipe_Pe_assumed - Pipe_DeltP, RefPHigh), RefPLow), Pipe_h_comp_in, T_suction + 3, T_suction + 30, - RefrigerantIndex, RoutineName); Modifi_SH = Pipe_T_comp_in - T_suction; @@ -14322,12 +14222,6 @@ void VRFCondenserEquipment::VRFOU_CalcCompH( // This is part of the VRF-FluidTCtrl Model. using Curve::CurveValue; - using Fluid::FindRefrigerant; - using Fluid::GetSatEnthalpyRefrig; - using Fluid::GetSatPressureRefrig; - using Fluid::GetSatTemperatureRefrig; - using Fluid::GetSupHeatEnthalpyRefrig; - using Fluid::GetSupHeatTempRefrig; using General::SolveRoot; int CounterCompSpdTemp; // Index for the compressor speed level[-] @@ -14337,7 +14231,6 @@ void VRFCondenserEquipment::VRFOU_CalcCompH( int NumOfCompSpdInput; // Number of compressor speed input by the user [-] int NumIteCcap; // counter for Ccap calculation iterations [-] int NumTUInList; // number of terminal units is list - int RefrigerantIndex; // Index of the refrigerant [-] int SolFla; // Solve flag for SolveRoot [-] int TUListNum; // index to TU List Real64 Cap_Eva0; // Evaporating capacity calculated based on physics model, used in the iterations [W] @@ -14366,19 +14259,16 @@ void VRFCondenserEquipment::VRFOU_CalcCompH( Q_evap_req = TU_load + Pipe_Q - Ncomp; TUListNum = this->ZoneTUListPtr; - RefrigerantIndex = FindRefrigerant(state, this->RefrigerantName); - RefPLow = state.dataFluid->RefrigData(RefrigerantIndex).PsLowPresValue; - RefPHigh = state.dataFluid->RefrigData(RefrigerantIndex).PsHighPresValue; + RefPLow = this->refrig->PsLowPresValue; + RefPHigh = this->refrig->PsHighPresValue; NumTUInList = state.dataHVACVarRefFlow->TerminalUnitList(TUListNum).NumTUInList; // Calculate capacity modification factor - MinOutdoorUnitPe = GetSatPressureRefrig(state, this->RefrigerantName, T_suction, RefrigerantIndex, RoutineName); - RefTSat = GetSatTemperatureRefrig(state, this->RefrigerantName, max(min(MinOutdoorUnitPe, RefPHigh), RefPLow), RefrigerantIndex, RoutineName); - Pipe_h_comp_in = GetSupHeatEnthalpyRefrig(state, - this->RefrigerantName, + MinOutdoorUnitPe = this->refrig->getSatPressure(state, T_suction, RoutineName); + RefTSat = this->refrig->getSatTemperature(state, max(min(MinOutdoorUnitPe, RefPHigh), RefPLow), RoutineName); + Pipe_h_comp_in = this->refrig->getSupHeatEnthalpy(state, max(RefTSat, T_suction + this->SH), max(min(MinOutdoorUnitPe, RefPHigh), RefPLow), - RefrigerantIndex, RoutineName); C_cap_operation = this->VRFOU_CapModFactor( state, Pipe_h_comp_in, Pipe_h_out_ave, max(min(MinOutdoorUnitPe, RefPHigh), RefPLow), T_suction + this->SH, T_suction + 8, IUMaxCondTemp - 5); @@ -14438,17 +14328,14 @@ void VRFCondenserEquipment::VRFOU_CalcCompH( Modifi_SH = (-this->C2Te + std::pow((pow_2(this->C2Te) - 4 * (this->C1Te - Tfs + T_suction) * this->C3Te), 0.5)) / (2 * this->C3Te); - Modifi_Pe = GetSatPressureRefrig(state, this->RefrigerantName, T_suction, RefrigerantIndex, RoutineName); + Modifi_Pe = this->refrig->getSatPressure(state, T_suction, RoutineName); // Calculate capacity modification factor - RefTSat = - GetSatTemperatureRefrig(state, this->RefrigerantName, max(min(Modifi_Pe, RefPHigh), RefPLow), RefrigerantIndex, RoutineName); - Pipe_h_comp_in = GetSupHeatEnthalpyRefrig(state, - this->RefrigerantName, - max(RefTSat, T_suction + Modifi_SH), - max(min(Modifi_Pe, RefPHigh), RefPLow), - RefrigerantIndex, - RoutineName); + RefTSat = this->refrig->getSatTemperature(state, max(min(Modifi_Pe, RefPHigh), RefPLow), RoutineName); + Pipe_h_comp_in = this->refrig->getSupHeatEnthalpy(state, + max(RefTSat, T_suction + Modifi_SH), + max(min(Modifi_Pe, RefPHigh), RefPLow), + RoutineName); C_cap_operation = this->VRFOU_CapModFactor(state, Pipe_h_comp_in, Pipe_h_out_ave, @@ -14530,17 +14417,12 @@ void VRFCondenserEquipment::VRFHR_OU_HR_Mode(EnergyPlusData &state, // METHODOLOGY EMPLOYED: // This is part of the physics based VRF model applicable for Fluid Temperature Control. - using Fluid::FindRefrigerant; - using Fluid::GetSatEnthalpyRefrig; - using Fluid::GetSatPressureRefrig; - using Fluid::GetSupHeatEnthalpyRefrig; using General::SolveRoot; Real64 constexpr ErrorTol(0.1); // tolerance for RegulaFalsi iterations int constexpr MaxIte(100); // maximum number of iterations int HRMode(0); // HR operational mode [W] int HRMode_sub(0); // HR operational mode (sub) [W] - int RefrigerantIndex; // Index of the refrigerant [-] int SolFla; // Flag of RegulaFalsi solver Real64 C_OU_HexRatio; // capacity ratio between the OU condenser and OU evaporator [-] Real64 m_air_rated; // OU coil air mass flow rate [kg/s] @@ -14570,9 +14452,8 @@ void VRFCondenserEquipment::VRFHR_OU_HR_Mode(EnergyPlusData &state, C_OU_HexRatio = this->HROUHexRatio; // Initializations: component index - RefrigerantIndex = FindRefrigerant(state, this->RefrigerantName); - RefPLow = state.dataFluid->RefrigData(RefrigerantIndex).PsLowPresValue; - RefPHigh = state.dataFluid->RefrigData(RefrigerantIndex).PsHighPresValue; + RefPLow = this->refrig->PsLowPresValue; + RefPHigh = this->refrig->PsHighPresValue; // **Q_OU: HR mode determination // HRMode-1. Cooling Only @@ -14914,14 +14795,13 @@ void VRFCondenserEquipment::VRFHR_OU_HR_Mode(EnergyPlusData &state, Real64 h_OU_cond_in; // enthalpy of OU condenser at inlet [kJ/kg] Real64 h_OU_cond_out; // enthalpy of OU condenser at outlet [kJ/kg] - Real64 Psuction = GetSatPressureRefrig(state, this->RefrigerantName, Tsuction, RefrigerantIndex, RoutineName); + Real64 Psuction = this->refrig->getSatPressure(state, Tsuction, RoutineName); // enthalpy of OU evaporator/condenser inlets and outlets h_OU_evap_in = h_IU_evap_in; h_OU_cond_in = h_comp_out; - h_OU_evap_out = GetSupHeatEnthalpyRefrig( - state, this->RefrigerantName, Tsuction + this->SH, max(min(Psuction, RefPHigh), RefPLow), RefrigerantIndex, RoutineName); - h_OU_cond_out = GetSatEnthalpyRefrig(state, this->RefrigerantName, Tdischarge - this->SC, 0.0, RefrigerantIndex, RoutineName); + h_OU_evap_out = this->refrig->getSupHeatEnthalpy(state, Tsuction + this->SH, max(min(Psuction, RefPHigh), RefPLow), RoutineName); + h_OU_cond_out = this->refrig->getSatEnthalpy(state, Tdischarge - this->SC, 0.0, RoutineName); if ((Q_c_OU == 0) || (h_OU_evap_out - h_OU_evap_in) <= 0) { m_ref_OU_evap = 0; @@ -14969,8 +14849,6 @@ void VRFCondenserEquipment::VRFOU_PipeLossC( // METHODOLOGY EMPLOYED: // Use a physics based piping loss model. - using Fluid::FindRefrigerant; - using Fluid::GetSupHeatDensityRefrig; using General::SolveRoot; int TUListNum; // index to TU List @@ -14978,7 +14856,6 @@ void VRFCondenserEquipment::VRFOU_PipeLossC( int CoilIndex; // index to coil in terminal unit int NumTUInList; // number of terminal units is list int NumIUActivated; // number of the used indoor units [-] - int RefrigerantIndex; // Index of the refrigerant [-] Real64 Pipe_v_ref; // Piping Loss Algorithm Parameter: Refrigerant velocity [m/s] Real64 Pipe_T_room; // Piping Loss Algorithm Parameter: Average Room Temperature [C] @@ -15007,9 +14884,8 @@ void VRFCondenserEquipment::VRFOU_PipeLossC( Pipe_cp_ref = 1.6; // Refrigerant data - RefrigerantIndex = FindRefrigerant(state, this->RefrigerantName); - Real64 RefPLow = state.dataFluid->RefrigData(RefrigerantIndex).PsLowPresValue; // Low Pressure Value for Ps (>0.0) - Real64 RefPHigh = state.dataFluid->RefrigData(RefrigerantIndex).PsHighPresValue; // High Pressure Value for Ps (max in tables) + Real64 RefPLow = this->refrig->PsLowPresValue; // Low Pressure Value for Ps (>0.0) + Real64 RefPHigh = this->refrig->PsHighPresValue; // High Pressure Value for Ps (max in tables) // Calculate Pipe_T_room Pipe_T_room = 0; @@ -15041,11 +14917,9 @@ void VRFCondenserEquipment::VRFOU_PipeLossC( if (Pipe_viscosity_ref <= 0) Pipe_viscosity_ref = 16.26; // default superheated vapor viscosity data (MuPa*s) at T=353.15 K, P=2MPa Pipe_v_ref = Pipe_m_ref / (Constant::Pi * pow_2(this->RefPipDiaSuc) * 0.25) / - GetSupHeatDensityRefrig(state, - this->RefrigerantName, + this->refrig->getSupHeatDensity(state, this->EvaporatingTemp + Pipe_SH_merged, max(min(Pevap, RefPHigh), RefPLow), - RefrigerantIndex, RoutineName); Pipe_Num_Re = Pipe_m_ref / (Constant::Pi * pow_2(this->RefPipDiaSuc) * 0.25) * this->RefPipDiaSuc / Pipe_viscosity_ref * 1000000; Pipe_Num_Pr = Pipe_viscosity_ref * Pipe_cp_ref * 0.001 / Pipe_conductivity_ref; @@ -15054,19 +14928,15 @@ void VRFCondenserEquipment::VRFOU_PipeLossC( Pipe_DeltP = max(0.0, 8 * Pipe_Num_St * std::pow(Pipe_Num_Pr, 0.6667) * this->RefPipEquLen / this->RefPipDiaSuc * - GetSupHeatDensityRefrig(state, - this->RefrigerantName, + this->refrig->getSupHeatDensity(state, this->EvaporatingTemp + Pipe_SH_merged, max(min(Pevap, RefPHigh), RefPLow), - RefrigerantIndex, RoutineName) * pow_2(Pipe_v_ref) / 2 - this->RefPipHei * - GetSupHeatDensityRefrig(state, - this->RefrigerantName, + this->refrig->getSupHeatDensity(state, this->EvaporatingTemp + Pipe_SH_merged, max(min(Pevap, RefPHigh), RefPLow), - RefrigerantIndex, RoutineName) * 9.80665); @@ -15116,11 +14986,6 @@ void VRFCondenserEquipment::VRFOU_PipeLossH( // METHODOLOGY EMPLOYED: // Use a physics based piping loss model. - using Fluid::FindRefrigerant; - using Fluid::GetSatTemperatureRefrig; - using Fluid::GetSupHeatDensityRefrig; - using Fluid::GetSupHeatEnthalpyRefrig; - using Fluid::GetSupHeatTempRefrig; using General::SolveRoot; int TUListNum; // index to TU List @@ -15128,7 +14993,6 @@ void VRFCondenserEquipment::VRFOU_PipeLossH( int CoilIndex; // index to coil in terminal unit int NumTUInList; // number of terminal units is list int NumIUActivated; // number of the used indoor units [-] - int RefrigerantIndex; // Index of the refrigerant [-] Real64 Pipe_v_ref; // Piping Loss Algorithm Parameter: Refrigerant velocity [m/s] Real64 Pipe_T_room; // Piping Loss Algorithm Parameter: Average Room Temperature [C] @@ -15158,20 +15022,17 @@ void VRFCondenserEquipment::VRFOU_PipeLossH( Pipe_cp_ref = 1.6; // Refrigerant data - RefrigerantIndex = FindRefrigerant(state, this->RefrigerantName); - Real64 RefTHigh = state.dataFluid->RefrigData(RefrigerantIndex).PsHighTempValue; // High Temperature Value for Ps (max in tables) - Real64 RefPLow = state.dataFluid->RefrigData(RefrigerantIndex).PsLowPresValue; // Low Pressure Value for Ps (>0.0) - Real64 RefPHigh = state.dataFluid->RefrigData(RefrigerantIndex).PsHighPresValue; // High Pressure Value for Ps (max in tables) - Real64 RefTSat = GetSatTemperatureRefrig(state, this->RefrigerantName, max(min(Pcond, RefPHigh), RefPLow), RefrigerantIndex, RoutineName); + Real64 RefTHigh = this->refrig->PsHighTempValue; // High Temperature Value for Ps (max in tables) + Real64 RefPLow = this->refrig->PsLowPresValue; // Low Pressure Value for Ps (>0.0) + Real64 RefPHigh = this->refrig->PsHighPresValue; // High Pressure Value for Ps (max in tables) + Real64 RefTSat = this->refrig->getSatTemperature(state, max(min(Pcond, RefPHigh), RefPLow), RoutineName); // Perform iteration to calculate Pipe_T_IU_in, given P and h - Pipe_T_IU_in = GetSupHeatTempRefrig(state, - this->RefrigerantName, + Pipe_T_IU_in = this->refrig->getSupHeatTemp(state, max(min(Pcond, RefPHigh), RefPLow), Pipe_h_IU_in, max(this->IUCondensingTemp, RefTSat), min(this->IUCondensingTemp + 50, RefTHigh), - RefrigerantIndex, RoutineName); Pipe_T_IU_in = min(RefTHigh, Pipe_T_IU_in); @@ -15204,7 +15065,7 @@ void VRFCondenserEquipment::VRFOU_PipeLossH( Pipe_v_ref = Pipe_m_ref / (Constant::Pi * pow_2(this->RefPipDiaDis) * 0.25) / - GetSupHeatDensityRefrig(state, this->RefrigerantName, Pipe_T_IU_in, max(min(Pcond, RefPHigh), RefPLow), RefrigerantIndex, RoutineName); + this->refrig->getSupHeatDensity(state, Pipe_T_IU_in, max(min(Pcond, RefPHigh), RefPLow), RoutineName); Pipe_Num_Re = Pipe_m_ref / (Constant::Pi * pow_2(this->RefPipDiaDis) * 0.25) * this->RefPipDiaDis / Pipe_viscosity_ref * 1000000; Pipe_Num_Pr = Pipe_viscosity_ref * Pipe_cp_ref * 0.001 / Pipe_conductivity_ref; Pipe_Num_Nu = 0.023 * std::pow(Pipe_Num_Re, 0.8) * std::pow(Pipe_Num_Pr, 0.4); @@ -15219,12 +15080,12 @@ void VRFCondenserEquipment::VRFOU_PipeLossH( (1 / Pipe_Coe_k1 + 1 / Pipe_Coe_k2 + 1 / Pipe_Coe_k3)); // [W] Pipe_DeltP = max(0.0, 8 * Pipe_Num_St * std::pow(Pipe_Num_Pr, 0.6667) * this->RefPipEquLen / this->RefPipDiaDis * - GetSupHeatDensityRefrig( - state, this->RefrigerantName, Pipe_T_IU_in, max(min(Pcond, RefPHigh), RefPLow), RefrigerantIndex, RoutineName) * + this->refrig->getSupHeatDensity( + state, Pipe_T_IU_in, max(min(Pcond, RefPHigh), RefPLow), RoutineName) * pow_2(Pipe_v_ref) / 2 - this->RefPipHei * - GetSupHeatDensityRefrig( - state, this->RefrigerantName, Pipe_T_IU_in, max(min(Pcond, RefPHigh), RefPLow), RefrigerantIndex, RoutineName) * + this->refrig->getSupHeatDensity( + state, Pipe_T_IU_in, max(min(Pcond, RefPHigh), RefPLow), RoutineName) * 9.80665); Pipe_h_comp_out = Pipe_h_IU_in + Pipe_Q / Pipe_m_ref; diff --git a/src/EnergyPlus/HVACVariableRefrigerantFlow.hh b/src/EnergyPlus/HVACVariableRefrigerantFlow.hh index 480aa67321a..0c964296861 100644 --- a/src/EnergyPlus/HVACVariableRefrigerantFlow.hh +++ b/src/EnergyPlus/HVACVariableRefrigerantFlow.hh @@ -58,6 +58,7 @@ #include #include #include +#include #include #include #include @@ -359,7 +360,8 @@ namespace HVACVariableRefrigerantFlow { Real64 OUCondHeatRate; // Outdoor Unit Condenser Heat Release Rate, excluding piping loss [W] Real64 OUEvapHeatRate; // Outdoor Unit Evaporator Heat Extract Rate, excluding piping loss [W] Real64 OUFanPower; // Outdoor unit fan power at real conditions[W] - std::string RefrigerantName; // Name of refrigerant, must match name in FluidName (see fluidpropertiesrefdata.idf) + std::string refrigName; // Name of refrigerant, must match name in FluidName (see fluidpropertiesrefdata.idf) + FluidProperties::RefrigerantData *refrig; Real64 RatedEvapCapacity; // Rated Evaporative Capacity [W] Real64 RatedHeatCapacity; // Rated Heating Capacity [W] Real64 RatedCompPower; // Rated Compressor Power [W] diff --git a/src/EnergyPlus/HWBaseboardRadiator.cc b/src/EnergyPlus/HWBaseboardRadiator.cc index d3d6f57df9e..c6ff41bfedc 100644 --- a/src/EnergyPlus/HWBaseboardRadiator.cc +++ b/src/EnergyPlus/HWBaseboardRadiator.cc @@ -880,7 +880,7 @@ namespace HWBaseboardRadiator { // Initialize WaterInletNode = HWBaseboard.WaterInletNode; - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(HWBaseboard.plantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(HWBaseboard.plantLoc.loopNum).FluidIndex, @@ -892,7 +892,7 @@ namespace HWBaseboardRadiator { state.dataLoopNodes->Node(WaterInletNode).Temp = 60.0; - Cp = Fluid::GetSpecificHeatGlycol(state, + Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(HWBaseboard.plantLoc.loopNum).FluidName, state.dataLoopNodes->Node(WaterInletNode).Temp, state.dataPlnt->PlantLoop(HWBaseboard.plantLoc.loopNum).FluidIndex, @@ -1068,12 +1068,12 @@ namespace HWBaseboardRadiator { CheckZoneSizing(state, cCMO_BBRadiator_Water, hWBaseboard.Name); DesCoilLoad = RatedCapacityDes; if (DesCoilLoad >= HVAC::SmallLoad) { - Cp = Fluid::GetSpecificHeatGlycol(state, + Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(hWBaseboard.plantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(hWBaseboard.plantLoc.loopNum).FluidIndex, RoutineName); - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(hWBaseboard.plantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(hWBaseboard.plantLoc.loopNum).FluidIndex, @@ -1120,7 +1120,7 @@ namespace HWBaseboardRadiator { WaterMassFlowRateStd = hWBaseboard.WaterMassFlowRateStd; } else if (hWBaseboard.RatedCapacity == DataSizing::AutoSize || hWBaseboard.RatedCapacity == 0.0) { DesCoilLoad = RatedCapacityDes; - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(hWBaseboard.plantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(hWBaseboard.plantLoc.loopNum).FluidIndex, @@ -1132,7 +1132,7 @@ namespace HWBaseboardRadiator { // Air mass flow rate is obtained from the following linear equation // m_dot = 0.0062 + 2.75e-05*q AirMassFlowRate = Constant + Coeff * DesCoilLoad; - Cp = Fluid::GetSpecificHeatGlycol(state, + Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(hWBaseboard.plantLoc.loopNum).FluidName, hWBaseboard.WaterTempAvg, state.dataPlnt->PlantLoop(hWBaseboard.plantLoc.loopNum).FluidIndex, @@ -1188,7 +1188,7 @@ namespace HWBaseboardRadiator { WaterMassFlowRateStd = hWBaseboard.WaterMassFlowRateStd; // m_dot = 0.0062 + 2.75e-05*q AirMassFlowRate = Constant + Coeff * DesCoilLoad; - Cp = Fluid::GetSpecificHeatGlycol(state, + Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(hWBaseboard.plantLoc.loopNum).FluidName, hWBaseboard.WaterTempAvg, state.dataPlnt->PlantLoop(hWBaseboard.plantLoc.loopNum).FluidIndex, @@ -1293,7 +1293,7 @@ namespace HWBaseboardRadiator { // Calculate air mass flow rate AirMassFlowRate = hWBaseboard.AirMassFlowRateStd * (WaterMassFlowRate / hWBaseboard.WaterMassFlowRateMax); CapacitanceAir = Psychrometrics::PsyCpAirFnW(hWBaseboard.AirInletHumRat) * AirMassFlowRate; - Cp = Fluid::GetSpecificHeatGlycol(state, + Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(hWBaseboard.plantLoc.loopNum).FluidName, WaterInletTemp, state.dataPlnt->PlantLoop(hWBaseboard.plantLoc.loopNum).FluidIndex, diff --git a/src/EnergyPlus/HeatPumpWaterToWaterCOOLING.cc b/src/EnergyPlus/HeatPumpWaterToWaterCOOLING.cc index 7dfb18e22e5..db7141f1015 100644 --- a/src/EnergyPlus/HeatPumpWaterToWaterCOOLING.cc +++ b/src/EnergyPlus/HeatPumpWaterToWaterCOOLING.cc @@ -359,7 +359,7 @@ void GetGshpInput(EnergyPlusData &state) ShowFatalError(state, "Errors Found in getting Gshp input"); } - state.dataHPWaterToWaterClg->GSHPRefrigIndex = Fluid::FindRefrigerant(state, GSHPRefrigerant); + state.dataHPWaterToWaterClg->GSHPRefrigIndex = FluidProperties::GetRefrigNum(state, GSHPRefrigerant); if (state.dataHPWaterToWaterClg->GSHPRefrigIndex == 0) { ShowFatalError(state, format("Refrigerant for {} not found, should have been={}", ModuleCompName, GSHPRefrigerant)); ShowFatalError(state, format("FluidProperties:* objects for {} must be included in the idf file.", GSHPRefrigerant)); @@ -489,7 +489,7 @@ void GshpPeCoolingSpecs::initialize(EnergyPlusData &state) this->MustRun = true; this->beginEnvironFlag = false; - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidIndex, @@ -498,7 +498,7 @@ void GshpPeCoolingSpecs::initialize(EnergyPlusData &state) PlantUtilities::InitComponentNodes(state, 0.0, this->LoadSideDesignMassFlow, this->LoadSideInletNodeNum, this->LoadSideOutletNodeNum); - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidIndex, @@ -660,13 +660,13 @@ void GshpPeCoolingSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad) initialQLoad = 0.0; IterationCount = 0; - CpSourceSide = Fluid::GetSpecificHeatGlycol(state, + CpSourceSide = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidName, this->SourceSideWaterInletTemp, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidIndex, RoutineName); - CpLoadSide = Fluid::GetSpecificHeatGlycol(state, + CpLoadSide = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidName, this->LoadSideWaterInletTemp, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidIndex, @@ -689,9 +689,9 @@ void GshpPeCoolingSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad) this->SourceSideWaterInletTemp + initialQSource / (SourceSideEffect * CpSourceSide * this->SourceSideWaterMassFlowRate); // Determine the evaporating and condensing pressures - SourceSidePressure = Fluid::GetSatPressureRefrig( + SourceSidePressure = FluidProperties::GetSatPressureRefrig( state, GSHPRefrigerant, SourceSideRefridgTemp, state.dataHPWaterToWaterClg->GSHPRefrigIndex, RoutineName); - LoadSidePressure = Fluid::GetSatPressureRefrig( + LoadSidePressure = FluidProperties::GetSatPressureRefrig( state, GSHPRefrigerant, LoadSideRefridgTemp, state.dataHPWaterToWaterClg->GSHPRefrigIndex, RoutineName); if (SourceSidePressure < this->LowPressCutoff) { @@ -738,11 +738,11 @@ void GshpPeCoolingSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad) // Determine the Source Side Outlet Enthalpy qual = 1.0; - LoadSideOutletEnth = Fluid::GetSatEnthalpyRefrig( + LoadSideOutletEnth = FluidProperties::GetSatEnthalpyRefrig( state, GSHPRefrigerant, LoadSideRefridgTemp, qual, state.dataHPWaterToWaterClg->GSHPRefrigIndex, RoutineNameLoadSideRefridgTemp); qual = 0.0; - SourceSideOutletEnth = Fluid::GetSatEnthalpyRefrig( + SourceSideOutletEnth = FluidProperties::GetSatEnthalpyRefrig( state, GSHPRefrigerant, SourceSideRefridgTemp, qual, state.dataHPWaterToWaterClg->GSHPRefrigIndex, RoutineNameSourceSideRefridgTemp); // Determine Load Side Outlet Enthalpy @@ -750,7 +750,7 @@ void GshpPeCoolingSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad) CompressInletTemp = LoadSideRefridgTemp + this->SuperheatTemp; // Determine the enathalpy of the super heated fluid at Source Side outlet - SuperHeatEnth = Fluid::GetSupHeatEnthalpyRefrig( + SuperHeatEnth = FluidProperties::GetSupHeatEnthalpyRefrig( state, GSHPRefrigerant, CompressInletTemp, LoadSidePressure, state.dataHPWaterToWaterClg->GSHPRefrigIndex, RoutineNameCompressInletTemp); // Determining the suction state of the fluid from inlet state involves interation @@ -759,7 +759,7 @@ void GshpPeCoolingSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad) // check that with the inlet enthalpy ( as suction loss is isenthalpic). Iterate till desired accuracy is reached // this routine was reenginerred from HVACsim + takes pressure in Pascals, tolrance, refrgerant # R22 =6 - CompSuctionSatTemp = Fluid::GetSatTemperatureRefrig( + CompSuctionSatTemp = FluidProperties::GetSatTemperatureRefrig( state, GSHPRefrigerant, SuctionPr, state.dataHPWaterToWaterClg->GSHPRefrigIndex, RoutineNameSuctionPr); T110 = CompSuctionSatTemp; @@ -769,7 +769,7 @@ void GshpPeCoolingSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad) while (true) { CompSuctionTemp = 0.5 * (T110 + T111); - CompSuctionEnth = Fluid::GetSupHeatEnthalpyRefrig( + CompSuctionEnth = FluidProperties::GetSupHeatEnthalpyRefrig( state, GSHPRefrigerant, CompSuctionTemp, SuctionPr, state.dataHPWaterToWaterClg->GSHPRefrigIndex, RoutineNameCompSuctionTemp); if (std::abs(CompSuctionEnth - SuperHeatEnth) / SuperHeatEnth < 0.0001) { @@ -785,7 +785,7 @@ void GshpPeCoolingSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad) LOOP_exit:; // Determine the Mass flow rate of refrigerant - CompSuctionDensity = Fluid::GetSupHeatDensityRefrig( + CompSuctionDensity = FluidProperties::GetSupHeatDensityRefrig( state, GSHPRefrigerant, CompSuctionTemp, SuctionPr, state.dataHPWaterToWaterClg->GSHPRefrigIndex, RoutineNameCompSuctionTemp); MassRef = this->CompPistonDisp * CompSuctionDensity * (1 + this->CompClearanceFactor - this->CompClearanceFactor * std::pow(DischargePr / SuctionPr, 1 / gamma)); diff --git a/src/EnergyPlus/HeatPumpWaterToWaterHEATING.cc b/src/EnergyPlus/HeatPumpWaterToWaterHEATING.cc index e3428d2a5cb..b2448cc8586 100644 --- a/src/EnergyPlus/HeatPumpWaterToWaterHEATING.cc +++ b/src/EnergyPlus/HeatPumpWaterToWaterHEATING.cc @@ -349,7 +349,7 @@ void GetGshpInput(EnergyPlusData &state) ShowFatalError(state, format("Errors Found in getting {} Input", ModuleCompNameUC)); } - state.dataHPWaterToWaterHtg->GSHPRefrigIndex = Fluid::FindRefrigerant(state, GSHPRefrigerant); + state.dataHPWaterToWaterHtg->GSHPRefrigIndex = FluidProperties::GetRefrigNum(state, GSHPRefrigerant); if (state.dataHPWaterToWaterHtg->GSHPRefrigIndex == 0) { ShowFatalError(state, format("Refrigerant for {} not found, should have been={}", ModuleCompName, GSHPRefrigerant)); } @@ -479,7 +479,7 @@ void GshpPeHeatingSpecs::initialize(EnergyPlusData &state) this->MustRun = true; this->beginEnvironFlag = false; - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidIndex, @@ -488,7 +488,7 @@ void GshpPeHeatingSpecs::initialize(EnergyPlusData &state) PlantUtilities::InitComponentNodes(state, 0.0, this->LoadSideDesignMassFlow, this->LoadSideInletNodeNum, this->LoadSideOutletNodeNum); - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidIndex, @@ -613,13 +613,13 @@ void GshpPeHeatingSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad) Real64 initialQLoad = 0.0; int IterationCount = 0; - Real64 CpSourceSide = Fluid::GetSpecificHeatGlycol(state, + Real64 CpSourceSide = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidName, this->SourceSideWaterInletTemp, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidIndex, RoutineName); - Real64 CpLoadSide = Fluid::GetSpecificHeatGlycol(state, + Real64 CpLoadSide = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidName, this->LoadSideWaterInletTemp, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidIndex, @@ -640,9 +640,9 @@ void GshpPeHeatingSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad) Real64 LoadSideTemp = this->LoadSideWaterInletTemp + initialQLoad / (LoadSideEffect * CpLoadSide * this->LoadSideWaterMassFlowRate); // Determine the evaporating and condensing pressures - Real64 SourceSidePressure = Fluid::GetSatPressureRefrig( + Real64 SourceSidePressure = FluidProperties::GetSatPressureRefrig( state, GSHPRefrigerant, SourceSideTemp, state.dataHPWaterToWaterHtg->GSHPRefrigIndex, RoutineNameSourceSideTemp); - Real64 LoadSidePressure = Fluid::GetSatPressureRefrig( + Real64 LoadSidePressure = FluidProperties::GetSatPressureRefrig( state, GSHPRefrigerant, LoadSideTemp, state.dataHPWaterToWaterHtg->GSHPRefrigIndex, RoutineNameLoadSideTemp); // check cutoff pressures @@ -682,18 +682,18 @@ void GshpPeHeatingSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad) // Determine the Source Side Outlet Enthalpy Real64 qualOne = 1.0; - Real64 SourceSideOutletEnth = Fluid::GetSatEnthalpyRefrig( + Real64 SourceSideOutletEnth = FluidProperties::GetSatEnthalpyRefrig( state, GSHPRefrigerant, SourceSideTemp, qualOne, state.dataHPWaterToWaterHtg->GSHPRefrigIndex, RoutineNameSourceSideTemp); // Determine Load Side Outlet Enthalpy Real64 qualZero = 0.0; - Real64 LoadSideOutletEnth = Fluid::GetSatEnthalpyRefrig( + Real64 LoadSideOutletEnth = FluidProperties::GetSatEnthalpyRefrig( state, GSHPRefrigerant, LoadSideTemp, qualZero, state.dataHPWaterToWaterHtg->GSHPRefrigIndex, RoutineNameLoadSideTemp); // Determine superheated temperature of the Source Side outlet/compressor inlet Real64 CompressInletTemp = SourceSideTemp + this->SuperheatTemp; // Determine the enathalpy of the super heated fluid at Source Side outlet - Real64 SuperHeatEnth = Fluid::GetSupHeatEnthalpyRefrig(state, + Real64 SuperHeatEnth = FluidProperties::GetSupHeatEnthalpyRefrig(state, GSHPRefrigerant, CompressInletTemp, SourceSidePressure, @@ -705,7 +705,7 @@ void GshpPeHeatingSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad) // Determine the saturated temp at suction pressure, shoot out into the superheated region find the enthalpy // check that with the inlet enthalpy ( as suction loss is isenthalpic). Iterate till desired accuracy is reached - CompSuctionSatTemp = Fluid::GetSatTemperatureRefrig( + CompSuctionSatTemp = FluidProperties::GetSatTemperatureRefrig( state, GSHPRefrigerant, SuctionPr, state.dataHPWaterToWaterHtg->GSHPRefrigIndex, RoutineNameSuctionPr); Real64 T110 = CompSuctionSatTemp; @@ -716,7 +716,7 @@ void GshpPeHeatingSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad) while (true) { CompSuctionTemp = 0.5 * (T110 + T111); - CompSuctionEnth = Fluid::GetSupHeatEnthalpyRefrig( + CompSuctionEnth = FluidProperties::GetSupHeatEnthalpyRefrig( state, GSHPRefrigerant, CompSuctionTemp, SuctionPr, state.dataHPWaterToWaterHtg->GSHPRefrigIndex, RoutineNameCompSuctionTemp); if (std::abs(CompSuctionEnth - SuperHeatEnth) / SuperHeatEnth < 0.0001) { break; @@ -730,7 +730,7 @@ void GshpPeHeatingSpecs::calculate(EnergyPlusData &state, Real64 &MyLoad) } // Determine the Mass flow rate of refrigerant - CompSuctionDensity = Fluid::GetSupHeatDensityRefrig( + CompSuctionDensity = FluidProperties::GetSupHeatDensityRefrig( state, GSHPRefrigerant, CompSuctionTemp, SuctionPr, state.dataHPWaterToWaterHtg->GSHPRefrigIndex, RoutineNameCompSuctionTemp); Real64 MassRef = this->CompPistonDisp * CompSuctionDensity * (1.0 + this->CompClearanceFactor - this->CompClearanceFactor * std::pow(DischargePr / SuctionPr, 1.0 / gamma)); diff --git a/src/EnergyPlus/HeatPumpWaterToWaterSimple.cc b/src/EnergyPlus/HeatPumpWaterToWaterSimple.cc index ba04b7dfaf5..ec365e8c315 100644 --- a/src/EnergyPlus/HeatPumpWaterToWaterSimple.cc +++ b/src/EnergyPlus/HeatPumpWaterToWaterSimple.cc @@ -729,26 +729,26 @@ void GshpSpecs::InitWatertoWaterHP(EnergyPlusData &state, this->MustRun = true; if (this->WWHPType == DataPlant::PlantEquipmentType::HPWaterEFHeating) { - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidIndex, RoutineName); this->LoadSideDesignMassFlow = this->RatedLoadVolFlowHeat * rho; - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidIndex, RoutineName); this->SourceSideDesignMassFlow = this->RatedSourceVolFlowHeat * rho; } else if (this->WWHPType == DataPlant::PlantEquipmentType::HPWaterEFCooling) { - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidIndex, RoutineName); this->LoadSideDesignMassFlow = this->RatedLoadVolFlowCool * rho; - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidIndex, @@ -881,12 +881,12 @@ void GshpSpecs::sizeCoolingWaterToWaterHP(EnergyPlusData &state) // store flow rate right away regardless of PlantFirstSizesOkayToFinalize so that data are available this->RatedLoadVolFlowCool = tmpLoadSideVolFlowRate; } - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidIndex, @@ -894,12 +894,12 @@ void GshpSpecs::sizeCoolingWaterToWaterHP(EnergyPlusData &state) tmpCoolingCap = Cp * rho * state.dataSize->PlantSizData(pltLoadSizNum).DeltaT * tmpLoadSideVolFlowRate; } else if (this->companionIdentified && this->RatedLoadVolFlowHeat > 0.0) { tmpLoadSideVolFlowRate = this->RatedLoadVolFlowHeat; - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidIndex, @@ -1069,12 +1069,12 @@ void GshpSpecs::sizeCoolingWaterToWaterHP(EnergyPlusData &state) if (!this->ratedLoadVolFlowCoolWasAutoSized) tmpLoadSideVolFlowRate = this->RatedLoadVolFlowCool; int pltSourceSizNum = state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).PlantSizNum; if (pltSourceSizNum > 0) { - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidIndex, RoutineName); - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidIndex, @@ -1237,12 +1237,12 @@ void GshpSpecs::sizeHeatingWaterToWaterHP(EnergyPlusData &state) // PlantFirstSizesOkayToFinalize is true this->RatedLoadVolFlowHeat = tmpLoadSideVolFlowRate; } - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidIndex, @@ -1250,12 +1250,12 @@ void GshpSpecs::sizeHeatingWaterToWaterHP(EnergyPlusData &state) tmpHeatingCap = Cp * rho * state.dataSize->PlantSizData(pltLoadSizNum).DeltaT * tmpLoadSideVolFlowRate; } else if (this->companionIdentified && this->RatedLoadVolFlowCool > 0.0) { tmpLoadSideVolFlowRate = this->RatedLoadVolFlowCool; - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidIndex, @@ -1424,12 +1424,12 @@ void GshpSpecs::sizeHeatingWaterToWaterHP(EnergyPlusData &state) if (!this->ratedLoadVolFlowHeatWasAutoSized) tmpLoadSideVolFlowRate = this->RatedLoadVolFlowHeat; int pltSourceSizNum = state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).PlantSizNum; if (pltSourceSizNum > 0) { - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidIndex, RoutineName); - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidIndex, @@ -1622,13 +1622,13 @@ void GshpSpecs::CalcWatertoWaterHPCooling(EnergyPlusData &state, Real64 const My return; } - rhoLoadSide = Fluid::GetDensityGlycol(state, + rhoLoadSide = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidName, LoadSideInletTemp, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidIndex, RoutineName); - rhoSourceSide = Fluid::GetDensityGlycol(state, + rhoSourceSide = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidName, SourceSideInletTemp, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidIndex, @@ -1697,13 +1697,13 @@ void GshpSpecs::CalcWatertoWaterHPCooling(EnergyPlusData &state, Real64 const My QSource *= PartLoadRatio; } - CpLoadSide = Fluid::GetSpecificHeatGlycol(state, + CpLoadSide = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidName, LoadSideInletTemp, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidIndex, RoutineName); - CpSourceSide = Fluid::GetSpecificHeatGlycol(state, + CpSourceSide = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidName, SourceSideInletTemp, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidIndex, @@ -1786,13 +1786,13 @@ void GshpSpecs::CalcWatertoWaterHPHeating(EnergyPlusData &state, Real64 const My if (!this->MustRun) { return; } - rhoLoadSide = Fluid::GetDensityGlycol(state, + rhoLoadSide = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidName, LoadSideInletTemp, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidIndex, RoutineName); - rhoSourceSide = Fluid::GetDensityGlycol(state, + rhoSourceSide = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidName, SourceSideInletTemp, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidIndex, @@ -1860,13 +1860,13 @@ void GshpSpecs::CalcWatertoWaterHPHeating(EnergyPlusData &state, Real64 const My QSource *= PartLoadRatio; } - CpLoadSide = Fluid::GetSpecificHeatGlycol(state, + CpLoadSide = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidName, LoadSideInletTemp, state.dataPlnt->PlantLoop(this->LoadPlantLoc.loopNum).FluidIndex, RoutineName); - CpSourceSide = Fluid::GetSpecificHeatGlycol(state, + CpSourceSide = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidName, SourceSideInletTemp, state.dataPlnt->PlantLoop(this->SourcePlantLoc.loopNum).FluidIndex, diff --git a/src/EnergyPlus/Humidifiers.cc b/src/EnergyPlus/Humidifiers.cc index e6839367170..4331a105300 100644 --- a/src/EnergyPlus/Humidifiers.cc +++ b/src/EnergyPlus/Humidifiers.cc @@ -721,10 +721,8 @@ namespace Humidifiers { // Using/Aliasing using DataSizing::AutoSize; - using Fluid::FindGlycol; - using Fluid::FindRefrigerant; - using Fluid::GetSatEnthalpyRefrig; - using Fluid::GetSpecificHeatGlycol; + using FluidProperties::GetSatEnthalpyRefrig; + using FluidProperties::GetSpecificHeatGlycol; using Psychrometrics::PsyRhoAirFnPbTdbW; using Psychrometrics::RhoH2O; @@ -880,8 +878,8 @@ namespace Humidifiers { } NomCap = RhoH2O(Constant::InitConvTemp) * NomCapVol; - RefrigerantIndex = FindRefrigerant(state, format(fluidNameSteam)); - WaterIndex = FindGlycol(state, format(fluidNameWater)); + RefrigerantIndex = FluidProperties::GetRefrigNum(state, format(fluidNameSteam)); + WaterIndex = FluidProperties::GetGlycolNum(state, format(fluidNameWater)); SteamSatEnthalpy = GetSatEnthalpyRefrig(state, format(fluidNameSteam), TSteam, 1.0, RefrigerantIndex, CalledFrom); WaterSatEnthalpy = GetSatEnthalpyRefrig(state, format(fluidNameSteam), TSteam, 0.0, RefrigerantIndex, CalledFrom); WaterSpecHeatAvg = 0.5 * (GetSpecificHeatGlycol(state, format(fluidNameWater), TSteam, WaterIndex, CalledFrom) + @@ -1164,10 +1162,8 @@ namespace Humidifiers { // Using/Aliasing using Curve::CurveValue; - using Fluid::FindGlycol; - using Fluid::FindRefrigerant; - using Fluid::GetSatEnthalpyRefrig; - using Fluid::GetSpecificHeatGlycol; + using FluidProperties::GetSatEnthalpyRefrig; + using FluidProperties::GetSpecificHeatGlycol; using Psychrometrics::PsyHFnTdbW; using Psychrometrics::PsyTdbFnHW; using Psychrometrics::PsyWFnTdbRhPb; @@ -1256,8 +1252,8 @@ namespace Humidifiers { CurMakeupWaterTemp = state.dataEnvrn->WaterMainsTemp; } Tref = CurMakeupWaterTemp; - RefrigerantIndex = FindRefrigerant(state, format(fluidNameSteam)); - WaterIndex = FindGlycol(state, format(fluidNameWater)); + RefrigerantIndex = FluidProperties::GetRefrigNum(state, format(fluidNameSteam)); + WaterIndex = FluidProperties::GetGlycolNum(state, format(fluidNameWater)); SteamSatEnthalpy = GetSatEnthalpyRefrig(state, format(fluidNameSteam), TSteam, 1.0, RefrigerantIndex, RoutineName); WaterSatEnthalpy = GetSatEnthalpyRefrig(state, format(fluidNameSteam), TSteam, 0.0, RefrigerantIndex, RoutineName); WaterSpecHeatAvg = 0.5 * (GetSpecificHeatGlycol(state, format(fluidNameWater), TSteam, WaterIndex, RoutineName) + diff --git a/src/EnergyPlus/ICEngineElectricGenerator.cc b/src/EnergyPlus/ICEngineElectricGenerator.cc index ba63156289e..0a69998a723 100644 --- a/src/EnergyPlus/ICEngineElectricGenerator.cc +++ b/src/EnergyPlus/ICEngineElectricGenerator.cc @@ -748,7 +748,7 @@ namespace ICEngineElectricGenerator { HRecRatio = 1.0; Real64 HeatRecInTemp = state.dataLoopNodes->Node(this->HeatRecInletNodeNum).Temp; - Real64 HeatRecCp = Fluid::GetSpecificHeatGlycol(state, + Real64 HeatRecCp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidName, HeatRecInTemp, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidIndex, @@ -876,7 +876,7 @@ namespace ICEngineElectricGenerator { if (this->MySizeAndNodeInitFlag && (!this->MyPlantScanFlag) && this->HeatRecActive) { // size mass flow rate - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidIndex, diff --git a/src/EnergyPlus/IceThermalStorage.cc b/src/EnergyPlus/IceThermalStorage.cc index ab0392f0cd2..7b1aed106ae 100644 --- a/src/EnergyPlus/IceThermalStorage.cc +++ b/src/EnergyPlus/IceThermalStorage.cc @@ -224,7 +224,7 @@ namespace IceThermalStorage { } Real64 DemandMdot = this->DesignMassFlowRate; - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, TempIn, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -361,7 +361,7 @@ namespace IceThermalStorage { } // Calculate the current load on the ice storage unit - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, TempIn, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -1688,7 +1688,7 @@ namespace IceThermalStorage { //---------------------------- int loopNum = this->plantLoc.loopNum; - Real64 CpFluid = Fluid::GetDensityGlycol(state, + Real64 CpFluid = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(loopNum).FluidName, state.dataLoopNodes->Node(this->PltInletNodeNum).Temp, state.dataPlnt->PlantLoop(loopNum).FluidIndex, diff --git a/src/EnergyPlus/LowTempRadiantSystem.cc b/src/EnergyPlus/LowTempRadiantSystem.cc index 3a7834158af..98d926fd018 100644 --- a/src/EnergyPlus/LowTempRadiantSystem.cc +++ b/src/EnergyPlus/LowTempRadiantSystem.cc @@ -272,7 +272,6 @@ namespace LowTempRadiantSystem { using DataSizing::FractionOfAutosizedCoolingCapacity; using DataSizing::FractionOfAutosizedHeatingCapacity; using DataSizing::HeatingDesignCapacity; - using Fluid::FindGlycol; using NodeInputManager::GetOnlySingleNode; using ScheduleManager::GetScheduleIndex; @@ -376,7 +375,7 @@ namespace LowTempRadiantSystem { state.dataLowTempRadSys->HydrRadSys.allocate(state.dataLowTempRadSys->NumOfHydrLowTempRadSys); if (state.dataLowTempRadSys->NumOfHydrLowTempRadSys > 0) { - GlycolIndex = FindGlycol(state, fluidNameWater); + GlycolIndex = FluidProperties::GetGlycolNum(state, fluidNameWater); for (auto &e : state.dataLowTempRadSys->HydrRadSys) e.GlycolIndex = GlycolIndex; if (GlycolIndex == 0) { @@ -390,7 +389,7 @@ namespace LowTempRadiantSystem { state.dataLowTempRadSys->CFloRadSys.allocate(state.dataLowTempRadSys->NumOfCFloLowTempRadSys); if (state.dataLowTempRadSys->NumOfCFloLowTempRadSys > 0) { - GlycolIndex = FindGlycol(state, fluidNameWater); + GlycolIndex = FluidProperties::GetGlycolNum(state, fluidNameWater); for (auto &e : state.dataLowTempRadSys->CFloRadSys) e.GlycolIndex = GlycolIndex; if (GlycolIndex == 0) { @@ -1904,7 +1903,7 @@ namespace LowTempRadiantSystem { using DataSizing::AutoSize; using DataZoneEquipment::CheckZoneEquipmentList; - using Fluid::GetDensityGlycol; + using FluidProperties::GetDensityGlycol; using PlantUtilities::InitComponentNodes; using PlantUtilities::ScanPlantLoopsForObject; @@ -2633,8 +2632,8 @@ namespace LowTempRadiantSystem { // Using/Aliasing using namespace DataSizing; - using Fluid::GetDensityGlycol; - using Fluid::GetSpecificHeatGlycol; + using FluidProperties::GetDensityGlycol; + using FluidProperties::GetSpecificHeatGlycol; using HVAC::AutoCalculateSizing; using HVAC::CoolingCapacitySizing; using HVAC::HeatingCapacitySizing; @@ -4181,7 +4180,7 @@ namespace LowTempRadiantSystem { // Using/Aliasing using DataHeatBalance::ZoneData; - using Fluid::GetSpecificHeatGlycol; + using FluidProperties::GetSpecificHeatGlycol; using HVAC::SmallLoad; using PlantUtilities::SetComponentFlowRate; using ScheduleManager::GetCurrentScheduleValue; @@ -4691,7 +4690,7 @@ namespace LowTempRadiantSystem { auto &Zone = state.dataHeatBal->Zone; // Using/Aliasing - using Fluid::GetSpecificHeatGlycol; + using FluidProperties::GetSpecificHeatGlycol; using PlantUtilities::SetComponentFlowRate; // SUBROUTINE PARAMETER DEFINITIONS: @@ -5328,7 +5327,7 @@ namespace LowTempRadiantSystem { { // Using/Aliasing - using Fluid::GetSpecificHeatGlycol; + using FluidProperties::GetSpecificHeatGlycol; using PlantUtilities::SafeCopyPlantNode; using PlantUtilities::SetComponentFlowRate; @@ -5414,7 +5413,7 @@ namespace LowTempRadiantSystem { { // Using/Aliasing - using Fluid::GetSpecificHeatGlycol; + using FluidProperties::GetSpecificHeatGlycol; using PlantUtilities::SafeCopyPlantNode; using PlantUtilities::SetComponentFlowRate; @@ -5645,7 +5644,7 @@ namespace LowTempRadiantSystem { // Code based loosely on code from IBLAST program (research version) // Using/Aliasing - using Fluid::GetSpecificHeatGlycol; + using FluidProperties::GetSpecificHeatGlycol; // Return value Real64 calculateHXEffectivenessTerm; @@ -5980,7 +5979,7 @@ namespace LowTempRadiantSystem { // Using/Aliasing Real64 TimeStepSysSec = state.dataHVACGlobal->TimeStepSysSec; - using Fluid::GetSpecificHeatGlycol; + using FluidProperties::GetSpecificHeatGlycol; constexpr std::string_view routineName("ReportConstantFlowSystem"); Real64 cpFluid; // Specific heat of the fluid in the radiant system diff --git a/src/EnergyPlus/MicroCHPElectricGenerator.cc b/src/EnergyPlus/MicroCHPElectricGenerator.cc index 73aeffcbd11..409b3df0f3c 100644 --- a/src/EnergyPlus/MicroCHPElectricGenerator.cc +++ b/src/EnergyPlus/MicroCHPElectricGenerator.cc @@ -696,7 +696,7 @@ void MicroCHPDataStruct::onInitLoopEquip(EnergyPlusData &state, const EnergyPlus { static constexpr std::string_view RoutineName("MicroCHPDataStruct::onInitLoopEquip"); - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->PlantInletNodeID).Temp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -1165,7 +1165,7 @@ void MicroCHPDataStruct::CalcMicroCHPNoNormalizeGeneratorModel(EnergyPlusData &s Teng = FuncDetermineEngineTemp( TcwOut, this->A42Model.MCeng, this->A42Model.UAhx, this->A42Model.UAskin, thisAmbientTemp, Qgenss, this->A42Model.TengLast, dt); - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, TcwIn, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -1382,7 +1382,7 @@ void MicroCHPDataStruct::CalcUpdateHeatRecovery(EnergyPlusData &state) const state.dataLoopNodes->Node(this->PlantOutletNodeID).Temp = this->A42Model.TcwOut; - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, this->A42Model.TcwIn, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -1417,7 +1417,7 @@ void MicroCHPDataStruct::UpdateMicroCHPGeneratorRecords(EnergyPlusData &state) / this->A42Model.ACEnergyGen = this->A42Model.Pnet * state.dataHVACGlobal->TimeStepSysSec; // energy produced (J) this->A42Model.QdotHX = this->A42Model.UAhx * (this->A42Model.Teng - this->A42Model.TcwOut); // heat recovered rate (W) - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, this->A42Model.TcwIn, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, diff --git a/src/EnergyPlus/MicroturbineElectricGenerator.cc b/src/EnergyPlus/MicroturbineElectricGenerator.cc index bcff2b46c84..7fec013cf98 100644 --- a/src/EnergyPlus/MicroturbineElectricGenerator.cc +++ b/src/EnergyPlus/MicroturbineElectricGenerator.cc @@ -1251,7 +1251,7 @@ void MTGeneratorSpecs::CalcMTGeneratorModel(EnergyPlusData &state, if (this->HeatRecActive) { HeatRecInTemp = state.dataLoopNodes->Node(this->HeatRecInletNodeNum).Temp; - HeatRecCp = Fluid::GetSpecificHeatGlycol(state, + HeatRecCp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidName, HeatRecInTemp, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidIndex, @@ -1585,7 +1585,7 @@ void MTGeneratorSpecs::CalcMTGeneratorModel(EnergyPlusData &state, // Calculate heat recovery rate modifier curve output (function of water [volumetric] flow rate) if (this->HeatRecRateFWaterFlowCurveNum > 0) { - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidName, HeatRecInTemp, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidIndex, @@ -1958,7 +1958,7 @@ void MTGeneratorSpecs::oneTimeInit(EnergyPlusData &state) if (this->MySizeAndNodeInitFlag && (!this->MyPlantScanFlag) && this->HeatRecActive) { // size mass flow rate - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidIndex, diff --git a/src/EnergyPlus/NodeInputManager.cc b/src/EnergyPlus/NodeInputManager.cc index e60b130c2e9..e2203396fc8 100644 --- a/src/EnergyPlus/NodeInputManager.cc +++ b/src/EnergyPlus/NodeInputManager.cc @@ -967,10 +967,10 @@ void CalcMoreNodeInfo(EnergyPlusData &state) // stored in MoreNodeInfo. // Using/Aliasing - using Fluid::GetDensityGlycol; - using Fluid::GetSatDensityRefrig; - using Fluid::GetSatEnthalpyRefrig; - using Fluid::GetSpecificHeatGlycol; + using FluidProperties::GetDensityGlycol; + using FluidProperties::GetSatDensityRefrig; + using FluidProperties::GetSatEnthalpyRefrig; + using FluidProperties::GetSpecificHeatGlycol; using Psychrometrics::CPCW; using Psychrometrics::PsyCpAirFnW; using Psychrometrics::PsyHFnTdbW; @@ -1031,7 +1031,7 @@ void CalcMoreNodeInfo(EnergyPlusData &state) for (int iNode = 1; iNode <= state.dataLoopNodes->NumOfNodes; ++iNode) { nodeReportingStrings.push_back(std::string(NodeReportingCalc + state.dataLoopNodes->NodeID(iNode))); - nodeFluidNames.push_back(Fluid::GetGlycolNameByIndex(state, state.dataLoopNodes->Node(iNode).FluidIndex)); + nodeFluidNames.push_back(FluidProperties::GetGlycolNameByIndex(state, state.dataLoopNodes->Node(iNode).FluidIndex)); for (auto const *reqVar : state.dataOutputProcessor->reqVars) { if (Util::SameString(reqVar->key, state.dataLoopNodes->NodeID(iNode)) || reqVar->key.empty()) { @@ -1143,7 +1143,7 @@ void CalcMoreNodeInfo(EnergyPlusData &state) } else if (state.dataLoopNodes->Node(iNode).FluidType == DataLoopNode::NodeFluidType::Water) { if (!((state.dataLoopNodes->Node(iNode).FluidIndex > 0) && - (state.dataLoopNodes->Node(iNode).FluidIndex <= state.dataFluid->NumOfGlycols))) { + (state.dataLoopNodes->Node(iNode).FluidIndex <= state.dataFluidProperties->NumOfGlycols))) { rho = RhoWaterStdInit; rhoStd = RhoWaterStdInit; Cp = CPCW(state.dataLoopNodes->Node(iNode).Temp); diff --git a/src/EnergyPlus/OutdoorAirUnit.cc b/src/EnergyPlus/OutdoorAirUnit.cc index 9a59cb708d1..afb905ad6e3 100644 --- a/src/EnergyPlus/OutdoorAirUnit.cc +++ b/src/EnergyPlus/OutdoorAirUnit.cc @@ -217,7 +217,6 @@ namespace OutdoorAirUnit { // Using/Aliasing using BranchNodeConnections::SetUpCompSets; using BranchNodeConnections::TestCompSet; - using Fluid::FindRefrigerant; using NodeInputManager::GetOnlySingleNode; using ScheduleManager::GetScheduleIndex; using SteamCoils::GetCoilAirInletNode; @@ -718,7 +717,7 @@ namespace OutdoorAirUnit { thisOutAirUnit.OAEquip(CompNum).MinVolWaterFlow = 0.0; // below: no extra error needed if steam properties not in input // file because getting the steam coil will have done that. - thisOutAirUnit.OAEquip(CompNum).FluidIndex = FindRefrigerant(state, "Steam"); + thisOutAirUnit.OAEquip(CompNum).FluidIndex = FluidProperties::GetRefrigNum(state, "Steam"); break; } case CompType::WaterCoil_DetailedCool: { @@ -1115,7 +1114,7 @@ namespace OutdoorAirUnit { // Using/Aliasing using DataZoneEquipment::CheckZoneEquipmentList; - using Fluid::GetDensityGlycol; + using FluidProperties::GetDensityGlycol; using HVACHXAssistedCoolingCoil::SimHXAssistedCoolingCoil; using PlantUtilities::InitComponentNodes; using PlantUtilities::ScanPlantLoopsForObject; @@ -1285,7 +1284,7 @@ namespace OutdoorAirUnit { thisOutAirUnit.OAEquip(compLoop).MaxVolWaterFlow = GetCoilMaxSteamFlowRate(state, thisOutAirUnit.OAEquip(compLoop).ComponentIndex, errFlag); Real64 const rho = - Fluid::GetSatDensityRefrig(state, + FluidProperties::GetSatDensityRefrig(state, state.dataPlnt->PlantLoop(thisOutAirUnit.OAEquip(compLoop).plantLoc.loopNum).FluidName, Constant::SteamInitConvTemp, 1.0, diff --git a/src/EnergyPlus/OutsideEnergySources.cc b/src/EnergyPlus/OutsideEnergySources.cc index bc45d174aa0..452a0703452 100644 --- a/src/EnergyPlus/OutsideEnergySources.cc +++ b/src/EnergyPlus/OutsideEnergySources.cc @@ -371,19 +371,19 @@ void OutsideEnergySourceSpecs::size(EnergyPlusData &state) if (this->EnergyType == DataPlant::PlantEquipmentType::PurchChilledWater || this->EnergyType == DataPlant::PlantEquipmentType::PurchHotWater) { Real64 const rho = - Fluid::GetDensityGlycol(state, loop.FluidName, Constant::InitConvTemp, loop.FluidIndex, format("Size {}", typeName)); + FluidProperties::GetDensityGlycol(state, loop.FluidName, Constant::InitConvTemp, loop.FluidIndex, format("Size {}", typeName)); Real64 const Cp = - Fluid::GetSpecificHeatGlycol(state, loop.FluidName, Constant::InitConvTemp, loop.FluidIndex, format("Size {}", typeName)); + FluidProperties::GetSpecificHeatGlycol(state, loop.FluidName, Constant::InitConvTemp, loop.FluidIndex, format("Size {}", typeName)); NomCapDes = Cp * rho * state.dataSize->PlantSizData(PltSizNum).DeltaT * state.dataSize->PlantSizData(PltSizNum).DesVolFlowRate; } else { // this->EnergyType == DataPlant::TypeOf_PurchSteam - Real64 const tempSteam = Fluid::GetSatTemperatureRefrig( + Real64 const tempSteam = FluidProperties::GetSatTemperatureRefrig( state, loop.FluidName, state.dataEnvrn->StdBaroPress, loop.FluidIndex, format("Size {}", typeName)); Real64 const rhoSteam = - Fluid::GetSatDensityRefrig(state, loop.FluidName, tempSteam, 1.0, loop.FluidIndex, format("Size {}", typeName)); + FluidProperties::GetSatDensityRefrig(state, loop.FluidName, tempSteam, 1.0, loop.FluidIndex, format("Size {}", typeName)); Real64 const EnthSteamDry = - Fluid::GetSatEnthalpyRefrig(state, loop.FluidName, tempSteam, 1.0, loop.FluidIndex, format("Size {}", typeName)); + FluidProperties::GetSatEnthalpyRefrig(state, loop.FluidName, tempSteam, 1.0, loop.FluidIndex, format("Size {}", typeName)); Real64 const EnthSteamWet = - Fluid::GetSatEnthalpyRefrig(state, loop.FluidName, tempSteam, 0.0, loop.FluidIndex, format("Size {}", typeName)); + FluidProperties::GetSatEnthalpyRefrig(state, loop.FluidName, tempSteam, 0.0, loop.FluidIndex, format("Size {}", typeName)); Real64 const LatentHeatSteam = EnthSteamDry - EnthSteamWet; NomCapDes = rhoSteam * state.dataSize->PlantSizData(PltSizNum).DesVolFlowRate * LatentHeatSteam; } @@ -474,7 +474,7 @@ void OutsideEnergySourceSpecs::calculate(EnergyPlusData &state, bool runFlag, Re if ((this->MassFlowRate > 0.0) && runFlag) { if (this->EnergyType == DataPlant::PlantEquipmentType::PurchChilledWater || this->EnergyType == DataPlant::PlantEquipmentType::PurchHotWater) { - Real64 const Cp = Fluid::GetSpecificHeatGlycol( + Real64 const Cp = FluidProperties::GetSpecificHeatGlycol( state, state.dataPlnt->PlantLoop(LoopNum).FluidName, this->InletTemp, state.dataPlnt->PlantLoop(LoopNum).FluidIndex, RoutineName); this->OutletTemp = (MyLoad + this->MassFlowRate * Cp * this->InletTemp) / (this->MassFlowRate * Cp); // apply loop limits on temperature result to keep in check @@ -489,11 +489,11 @@ void OutsideEnergySourceSpecs::calculate(EnergyPlusData &state, bool runFlag, Re } else if (this->EnergyType == DataPlant::PlantEquipmentType::PurchSteam) { // determine mass flow rate based on inlet temp, saturate temp at // atmospheric pressure, Cp of inlet condensate, and MyLoad Real64 SatTempAtmPress = - Fluid::GetSatTemperatureRefrig(state, loop.FluidName, DataEnvironment::StdPressureSeaLevel, loop.FluidIndex, RoutineName); - Real64 CpCondensate = Fluid::GetSpecificHeatGlycol(state, loop.FluidName, this->InletTemp, loop.FluidIndex, RoutineName); + FluidProperties::GetSatTemperatureRefrig(state, loop.FluidName, DataEnvironment::StdPressureSeaLevel, loop.FluidIndex, RoutineName); + Real64 CpCondensate = FluidProperties::GetSpecificHeatGlycol(state, loop.FluidName, this->InletTemp, loop.FluidIndex, RoutineName); Real64 deltaTsensible = SatTempAtmPress - this->InletTemp; - Real64 EnthSteamInDry = Fluid::GetSatEnthalpyRefrig(state, loop.FluidName, this->InletTemp, 1.0, loop.FluidIndex, RoutineName); - Real64 EnthSteamOutWet = Fluid::GetSatEnthalpyRefrig(state, loop.FluidName, this->InletTemp, 0.0, loop.FluidIndex, RoutineName); + Real64 EnthSteamInDry = FluidProperties::GetSatEnthalpyRefrig(state, loop.FluidName, this->InletTemp, 1.0, loop.FluidIndex, RoutineName); + Real64 EnthSteamOutWet = FluidProperties::GetSatEnthalpyRefrig(state, loop.FluidName, this->InletTemp, 0.0, loop.FluidIndex, RoutineName); Real64 LatentHeatSteam = EnthSteamInDry - EnthSteamOutWet; this->MassFlowRate = MyLoad / (LatentHeatSteam + (CpCondensate * deltaTsensible)); PlantUtilities::SetComponentFlowRate(state, this->MassFlowRate, this->InletNodeNum, this->OutletNodeNum, this->plantLoc); diff --git a/src/EnergyPlus/PackagedThermalStorageCoil.cc b/src/EnergyPlus/PackagedThermalStorageCoil.cc index 94567c790e4..c56067863b8 100644 --- a/src/EnergyPlus/PackagedThermalStorageCoil.cc +++ b/src/EnergyPlus/PackagedThermalStorageCoil.cc @@ -198,10 +198,9 @@ void GetTESCoilInput(EnergyPlusData &state) // Using/Aliasing using BranchNodeConnections::TestCompSet; using DataZoneEquipment::FindControlledZoneIndexFromSystemNodeNumberForZone; - using Fluid::CheckFluidPropertyName; - using Fluid::FindGlycol; - using Fluid::GetFluidDensityTemperatureLimits; - using Fluid::GetFluidSpecificHeatTemperatureLimits; + using FluidProperties::CheckFluidPropertyName; + using FluidProperties::GetFluidDensityTemperatureLimits; + using FluidProperties::GetFluidSpecificHeatTemperatureLimits; using GlobalNames::VerifyUniqueCoilName; using NodeInputManager::GetOnlySingleNode; using ScheduleManager::GetScheduleIndex; @@ -286,7 +285,7 @@ void GetTESCoilInput(EnergyPlusData &state) break; case MediaType::Water: thisTESCoil.StorageFluidName = "WATER"; - thisTESCoil.StorageFluidIndex = FindGlycol(state, "WATER"); + thisTESCoil.StorageFluidIndex = FluidProperties::GetGlycolNum(state, "WATER"); break; default: ShowSevereError(state, format("{}{}=\"{}\", invalid", RoutineName, cCurrentModuleObject, thisTESCoil.Name)); @@ -304,7 +303,7 @@ void GetTESCoilInput(EnergyPlusData &state) state, format("Check that fluid property data have been input for fluid name = {}", state.dataIPShortCut->cAlphaArgs(6))); ErrorsFound = true; } else { - thisTESCoil.StorageFluidIndex = FindGlycol(state, state.dataIPShortCut->cAlphaArgs(6)); + thisTESCoil.StorageFluidIndex = FluidProperties::GetGlycolNum(state, state.dataIPShortCut->cAlphaArgs(6)); if (thisTESCoil.StorageFluidIndex == 0) { ShowSevereError(state, format("{}{}=\"{}\", invalid fluid data", RoutineName, cCurrentModuleObject, thisTESCoil.Name)); ShowContinueError(state, @@ -2145,8 +2144,8 @@ void SizeTESCoil(EnergyPlusData &state, int &TESCoilNum) // Using/Aliasing using namespace DataSizing; using namespace OutputReportPredefined; - using Fluid::GetDensityGlycol; - using Fluid::GetSpecificHeatGlycol; + using FluidProperties::GetDensityGlycol; + using FluidProperties::GetSpecificHeatGlycol; // SUBROUTINE PARAMETER DEFINITIONS: static constexpr std::string_view RoutineName("SizeTESCoil "); @@ -2771,8 +2770,8 @@ void CalcTESCoilCoolingAndChargeMode(EnergyPlusData &state, // Using/Aliasing Real64 const TimeStepSysSec = state.dataHVACGlobal->TimeStepSysSec; - using Fluid::GetDensityGlycol; - using Fluid::GetSpecificHeatGlycol; + using FluidProperties::GetDensityGlycol; + using FluidProperties::GetSpecificHeatGlycol; // SUBROUTINE PARAMETER DEFINITIONS: int constexpr MaxIter(30); @@ -3181,8 +3180,8 @@ void CalcTESCoilCoolingAndDischargeMode(EnergyPlusData &state, // Using/Aliasing Real64 const TimeStepSysSec = state.dataHVACGlobal->TimeStepSysSec; - using Fluid::GetDensityGlycol; - using Fluid::GetSpecificHeatGlycol; + using FluidProperties::GetDensityGlycol; + using FluidProperties::GetSpecificHeatGlycol; // SUBROUTINE PARAMETER DEFINITIONS: int constexpr MaxIter(30); @@ -3528,8 +3527,8 @@ void CalcTESCoilChargeOnlyMode(EnergyPlusData &state, int const TESCoilNum) // Using/Aliasing Real64 const TimeStepSysSec = state.dataHVACGlobal->TimeStepSysSec; - using Fluid::GetDensityGlycol; - using Fluid::GetSpecificHeatGlycol; + using FluidProperties::GetDensityGlycol; + using FluidProperties::GetSpecificHeatGlycol; // SUBROUTINE PARAMETER DEFINITIONS: static constexpr std::string_view RoutineName("CalcTESCoilChargeOnlyMode"); @@ -3692,8 +3691,8 @@ void CalcTESCoilDischargeOnlyMode(EnergyPlusData &state, int const TESCoilNum, R // Using/Aliasing Real64 const TimeStepSysSec = state.dataHVACGlobal->TimeStepSysSec; - using Fluid::GetDensityGlycol; - using Fluid::GetSpecificHeatGlycol; + using FluidProperties::GetDensityGlycol; + using FluidProperties::GetSpecificHeatGlycol; // SUBROUTINE PARAMETER DEFINITIONS: int constexpr MaxIter(30); @@ -3994,8 +3993,8 @@ void CalcTESWaterStorageTank(EnergyPlusData &state, int const TESCoilNum) // Using/Aliasing Real64 const TimeStepSysSec = state.dataHVACGlobal->TimeStepSysSec; - using Fluid::GetDensityGlycol; - using Fluid::GetSpecificHeatGlycol; + using FluidProperties::GetDensityGlycol; + using FluidProperties::GetSpecificHeatGlycol; using WaterThermalTanks::WaterThermalTankData; auto &thisTESCoil = state.dataPackagedThermalStorageCoil->TESCoil(TESCoilNum); @@ -4104,7 +4103,7 @@ void CalcTESIceStorageTank(EnergyPlusData &state, int const TESCoilNum) // Using/Aliasing Real64 const TimeStepSysSec = state.dataHVACGlobal->TimeStepSysSec; - using Fluid::GetSpecificHeatGlycol; + using FluidProperties::GetSpecificHeatGlycol; // SUBROUTINE PARAMETER DEFINITIONS: constexpr Real64 FreezingTemp(0.0); // zero degrees C diff --git a/src/EnergyPlus/PhotovoltaicThermalCollectors.cc b/src/EnergyPlus/PhotovoltaicThermalCollectors.cc index eda0d2ed155..1dcca089a10 100644 --- a/src/EnergyPlus/PhotovoltaicThermalCollectors.cc +++ b/src/EnergyPlus/PhotovoltaicThermalCollectors.cc @@ -701,7 +701,7 @@ namespace PhotovoltaicThermalCollectors { switch (this->WorkingFluidType) { case WorkingFluidEnum::LIQUID: { - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->WPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->WPlantLoc.loopNum).FluidIndex, diff --git a/src/EnergyPlus/PipeHeatTransfer.cc b/src/EnergyPlus/PipeHeatTransfer.cc index 57b34133931..f8761f3275c 100644 --- a/src/EnergyPlus/PipeHeatTransfer.cc +++ b/src/EnergyPlus/PipeHeatTransfer.cc @@ -942,8 +942,8 @@ void PipeHTData::InitPipesHeatTransfer(EnergyPlusData &state, bool const FirstHV // Using/Aliasing Real64 SysTimeElapsed = state.dataHVACGlobal->SysTimeElapsed; Real64 TimeStepSysSec = state.dataHVACGlobal->TimeStepSysSec; - using Fluid::GetDensityGlycol; - using Fluid::GetSpecificHeatGlycol; + using FluidProperties::GetDensityGlycol; + using FluidProperties::GetSpecificHeatGlycol; using ScheduleManager::GetCurrentScheduleValue; // SUBROUTINE PARAMETER DEFINITIONS: @@ -1713,8 +1713,8 @@ Real64 PipeHTData::CalcPipeHeatTransCoef(EnergyPlusData &state, // Code based loosely on code from IBLAST program (research version) // Using/Aliasing - using Fluid::GetConductivityGlycol; - using Fluid::GetViscosityGlycol; + using FluidProperties::GetConductivityGlycol; + using FluidProperties::GetViscosityGlycol; // Return value Real64 CalcPipeHeatTransCoef; diff --git a/src/EnergyPlus/Plant/EquipAndOperations.cc b/src/EnergyPlus/Plant/EquipAndOperations.cc index 80df453c7b4..96d2871e845 100644 --- a/src/EnergyPlus/Plant/EquipAndOperations.cc +++ b/src/EnergyPlus/Plant/EquipAndOperations.cc @@ -883,7 +883,7 @@ namespace DataPlant { // Calculate load on primary chilled water loop and store in PrimaryPlantCoolingLoad Real64 CW_RetMdot = state.dataLoopNodes->Node(this->PlantOps.PrimaryChWLoopSupInletNode).MassFlowRate; - Real64 const CpCW = Fluid::GetSpecificHeatGlycol(state, + Real64 const CpCW = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->PlantOps.PrimaryChWLoopIndex).FluidName, state.dataLoopNodes->Node(this->PlantOps.PrimaryChWLoopSupInletNode).Temp, state.dataPlnt->PlantLoop(this->PlantOps.PrimaryChWLoopIndex).FluidIndex, @@ -899,7 +899,7 @@ namespace DataPlant { // int HWSupInletNode = this->PlantOps.PrimaryHWLoopSupInletNode; // state.dataPlnt->PlantLoop(this->PlantOps.PrimaryHWLoopIndex).LoopSide(DataPlant::LoopSideLocation::Supply).Branch(1).NodeNumIn; Real64 HW_RetMdot = state.dataLoopNodes->Node(this->PlantOps.PrimaryHWLoopSupInletNode).MassFlowRate; - Real64 const CpHW = Fluid::GetSpecificHeatGlycol(state, + Real64 const CpHW = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->PlantOps.PrimaryHWLoopIndex).FluidName, state.dataLoopNodes->Node(this->PlantOps.PrimaryHWLoopSupInletNode).Temp, state.dataPlnt->PlantLoop(this->PlantOps.PrimaryHWLoopIndex).FluidIndex, @@ -1372,7 +1372,7 @@ namespace DataPlant { // step 2. calculate the loads to adjust the // returns to hit the associated setpoints at their current mass flow Real64 const CpCW = - Fluid::GetSpecificHeatGlycol(state, + FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->DedicatedHR_HeatingPLHP.sourceSidePlantLoc.loopNum).FluidName, state.dataLoopNodes->Node(inletChWReturnNodeNum).Temp, state.dataPlnt->PlantLoop(this->DedicatedHR_HeatingPLHP.sourceSidePlantLoc.loopNum).FluidIndex, @@ -1381,7 +1381,7 @@ namespace DataPlant { CW_RetMdot * CpCW * (this->Setpoint.SecCW - state.dataLoopNodes->Node(inletChWReturnNodeNum).Temp); // power = Mdot Cp Delta T, cooling load is negative Real64 const CpHW = - Fluid::GetSpecificHeatGlycol(state, + FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->DedicatedHR_CoolingPLHP.sourceSidePlantLoc.loopNum).FluidName, state.dataLoopNodes->Node(inletHWReturnNodeNum).Temp, state.dataPlnt->PlantLoop(this->DedicatedHR_CoolingPLHP.sourceSidePlantLoc.loopNum).FluidIndex, @@ -1605,7 +1605,7 @@ namespace DataPlant { Real64 Mdot = state.dataLoopNodes->Node(inletBoilerNodeNum).MassFlowRate; Real64 const CpHW = - Fluid::GetSpecificHeatGlycol(state, + FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->PlantBoilerComps(BoilerNum).loopNum).FluidName, Tin, state.dataPlnt->PlantLoop(this->PlantBoilerComps(BoilerNum).loopNum).FluidIndex, diff --git a/src/EnergyPlus/Plant/Loop.cc b/src/EnergyPlus/Plant/Loop.cc index 167eaeeac85..b186a777718 100644 --- a/src/EnergyPlus/Plant/Loop.cc +++ b/src/EnergyPlus/Plant/Loop.cc @@ -133,7 +133,7 @@ void PlantLoopData::CalcUnmetPlantDemand(EnergyPlusData &state) if (this->FluidType == DataLoopNode::NodeFluidType::Water) { - Cp = Fluid::GetSpecificHeatGlycol(state, this->FluidName, TargetTemp, this->FluidIndex, RoutineName); + Cp = FluidProperties::GetSpecificHeatGlycol(state, this->FluidName, TargetTemp, this->FluidIndex, RoutineName); switch (this->LoopDemandCalcScheme) { case DataPlant::LoopDemandCalcScheme::SingleSetPoint: { @@ -177,7 +177,7 @@ void PlantLoopData::CalcUnmetPlantDemand(EnergyPlusData &state) } else if (this->FluidType == DataLoopNode::NodeFluidType::Steam) { - Cp = Fluid::GetSpecificHeatGlycol(state, this->FluidName, TargetTemp, this->FluidIndex, RoutineName); + Cp = FluidProperties::GetSpecificHeatGlycol(state, this->FluidName, TargetTemp, this->FluidIndex, RoutineName); switch (this->LoopDemandCalcScheme) { case DataPlant::LoopDemandCalcScheme::SingleSetPoint: { @@ -188,8 +188,8 @@ void PlantLoopData::CalcUnmetPlantDemand(EnergyPlusData &state) // Calculate the delta temperature DeltaTemp = LoopSetPointTemperature - TargetTemp; - EnthalpySteamSatVapor = Fluid::GetSatEnthalpyRefrig(state, this->FluidName, LoopSetPointTemperature, 1.0, this->FluidIndex, RoutineNameAlt); - EnthalpySteamSatLiquid = Fluid::GetSatEnthalpyRefrig(state, this->FluidName, LoopSetPointTemperature, 0.0, this->FluidIndex, RoutineNameAlt); + EnthalpySteamSatVapor = FluidProperties::GetSatEnthalpyRefrig(state, this->FluidName, LoopSetPointTemperature, 1.0, this->FluidIndex, RoutineNameAlt); + EnthalpySteamSatLiquid = FluidProperties::GetSatEnthalpyRefrig(state, this->FluidName, LoopSetPointTemperature, 0.0, this->FluidIndex, RoutineNameAlt); LatentHeatSteam = EnthalpySteamSatVapor - EnthalpySteamSatLiquid; diff --git a/src/EnergyPlus/Plant/LoopSide.cc b/src/EnergyPlus/Plant/LoopSide.cc index cd3713c3c08..7d91b9c4a7f 100644 --- a/src/EnergyPlus/Plant/LoopSide.cc +++ b/src/EnergyPlus/Plant/LoopSide.cc @@ -738,7 +738,7 @@ namespace DataPlant { if (thisPlantLoop.FluidType == DataLoopNode::NodeFluidType::Water) { Real64 Cp = - Fluid::GetSpecificHeatGlycol(state, thisPlantLoop.FluidName, WeightedInletTemp, thisPlantLoop.FluidIndex, RoutineName); + FluidProperties::GetSpecificHeatGlycol(state, thisPlantLoop.FluidName, WeightedInletTemp, thisPlantLoop.FluidIndex, RoutineName); { @@ -811,7 +811,7 @@ namespace DataPlant { } else if (thisPlantLoop.FluidType == DataLoopNode::NodeFluidType::Steam) { Real64 Cp = - Fluid::GetSpecificHeatGlycol(state, thisPlantLoop.FluidName, WeightedInletTemp, thisPlantLoop.FluidIndex, RoutineName); + FluidProperties::GetSpecificHeatGlycol(state, thisPlantLoop.FluidName, WeightedInletTemp, thisPlantLoop.FluidIndex, RoutineName); { @@ -824,9 +824,9 @@ namespace DataPlant { Real64 DeltaTemp = LoopSetPointTemperature - WeightedInletTemp; Real64 EnthalpySteamSatVapor = - Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, LoopSetPointTemperature, 1.0, this->refrigIndex, RoutineNameAlt); + FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, LoopSetPointTemperature, 1.0, this->refrigIndex, RoutineNameAlt); Real64 EnthalpySteamSatLiquid = - Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, LoopSetPointTemperature, 0.0, this->refrigIndex, RoutineNameAlt); + FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, LoopSetPointTemperature, 0.0, this->refrigIndex, RoutineNameAlt); Real64 LatentHeatSteam = EnthalpySteamSatVapor - EnthalpySteamSatLiquid; @@ -1998,7 +1998,7 @@ namespace DataPlant { Real64 const InletTemp(state.dataLoopNodes->Node(InletNode).Temp); Real64 const OutletTemp(state.dataLoopNodes->Node(OutletNode).Temp); Real64 const AverageTemp((InletTemp + OutletTemp) / 2.0); - Real64 const ComponentCp(Fluid::GetSpecificHeatGlycol(state, + Real64 const ComponentCp(FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, AverageTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, diff --git a/src/EnergyPlus/Plant/PlantManager.cc b/src/EnergyPlus/Plant/PlantManager.cc index 2ccb556362b..d65fc52bd15 100644 --- a/src/EnergyPlus/Plant/PlantManager.cc +++ b/src/EnergyPlus/Plant/PlantManager.cc @@ -383,17 +383,17 @@ void GetPlantLoopData(EnergyPlusData &state) } else if (Util::SameString(Alpha(2), "WATER")) { this_loop.FluidType = DataLoopNode::NodeFluidType::Water; this_loop.FluidName = Alpha(2); - this_loop.FluidIndex = Fluid::FindGlycol(state, Alpha(2)); + this_loop.FluidIndex = FluidProperties::GetGlycolNum(state, Alpha(2)); } else if (Util::SameString(Alpha(2), "USERDEFINEDFLUIDTYPE")) { this_loop.FluidType = DataLoopNode::NodeFluidType::Water; this_loop.FluidName = Alpha(3); // check for valid fluid name - NumFluids = Fluid::CheckFluidPropertyName(state, Alpha(3)); + NumFluids = FluidProperties::CheckFluidPropertyName(state, Alpha(3)); if (NumFluids == 0) { ShowSevereError(state, CurrentModuleObject + "=\"" + Alpha(1) + "\", missing fluid data for Plant loop."); ErrorsFound = true; } else { - this_loop.FluidIndex = Fluid::FindGlycol(state, Alpha(3)); + this_loop.FluidIndex = FluidProperties::GetGlycolNum(state, Alpha(3)); if (this_loop.FluidIndex == 0) { ShowSevereError(state, CurrentModuleObject + "=\"" + Alpha(1) + "\", invalid glycol fluid data for Plant loop."); ErrorsFound = true; @@ -407,7 +407,7 @@ void GetPlantLoopData(EnergyPlusData &state) this_loop.FluidType = DataLoopNode::NodeFluidType::Water; this_loop.FluidName = "WATER"; - this_loop.FluidIndex = Fluid::FindGlycol(state, "WATER"); + this_loop.FluidIndex = FluidProperties::GetGlycolNum(state, "WATER"); } this_loop.OperationScheme = Alpha(4); // Load the Plant Control Scheme Priority List @@ -2509,7 +2509,7 @@ void ReInitPlantLoopsAtFirstHVACIteration(EnergyPlusData &state) state.dataPlnt->PlantLoop(LoopNum).LoopSide(LoopSideNum).OutletNode.MassFlowRateHistory = 0.0; if (state.dataPlnt->PlantLoop(LoopNum).FluidType != DataLoopNode::NodeFluidType::Steam) { - Cp = Fluid::GetSpecificHeatGlycol(state, + Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(LoopNum).FluidName, LoopSetPointTemp, state.dataPlnt->PlantLoop(LoopNum).FluidIndex, @@ -2518,7 +2518,7 @@ void ReInitPlantLoopsAtFirstHVACIteration(EnergyPlusData &state) } // Use Min/Max flow rates to initialize loop if (state.dataPlnt->PlantLoop(LoopNum).FluidType == DataLoopNode::NodeFluidType::Water) { - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(LoopNum).FluidName, LoopSetPointTemp, state.dataPlnt->PlantLoop(LoopNum).FluidIndex, @@ -2531,9 +2531,9 @@ void ReInitPlantLoopsAtFirstHVACIteration(EnergyPlusData &state) if (state.dataPlnt->PlantLoop(LoopNum).FluidType == DataLoopNode::NodeFluidType::Steam) { SteamTemp = 100.0; SteamDensity = - Fluid::GetSatDensityRefrig(state, fluidNameSteam, SteamTemp, 1.0, state.dataPlnt->PlantLoop(LoopNum).FluidIndex, RoutineName); + FluidProperties::GetSatDensityRefrig(state, fluidNameSteam, SteamTemp, 1.0, state.dataPlnt->PlantLoop(LoopNum).FluidIndex, RoutineName); LoopMaxMassFlowRate = state.dataPlnt->PlantLoop(LoopNum).MaxVolFlowRate * SteamDensity; - StartEnthalpy = Fluid::GetSatEnthalpyRefrig( + StartEnthalpy = FluidProperties::GetSatEnthalpyRefrig( state, fluidNameSteam, LoopSetPointTemp, 0.0, state.dataPlnt->PlantLoop(LoopNum).FluidIndex, RoutineName); LoopMinMassFlowRate = state.dataPlnt->PlantLoop(LoopNum).MinVolFlowRate * SteamDensity; } @@ -3238,10 +3238,10 @@ void SizePlantLoop(EnergyPlusData &state, // should now have plant volume, calculate plant volume's mass for fluid type if (state.dataPlnt->PlantLoop(LoopNum).FluidType == DataLoopNode::NodeFluidType::Water) { - FluidDensity = Fluid::GetDensityGlycol( + FluidDensity = FluidProperties::GetDensityGlycol( state, state.dataPlnt->PlantLoop(LoopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(LoopNum).FluidIndex, RoutineName); if (PlantSizNum > 0 && allocated(state.dataSize->PlantSizData)) { // method only works if sizing delta T is avaiable - Real64 cp = Fluid::GetSpecificHeatGlycol(state, + Real64 cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(LoopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(LoopNum).FluidIndex, @@ -3251,7 +3251,7 @@ void SizePlantLoop(EnergyPlusData &state, state.dataSize->PlantSizData(PlantSizNum).DesCapacity = DesignPlantCapacity; // store it for later use in scaling } } else if (state.dataPlnt->PlantLoop(LoopNum).FluidType == DataLoopNode::NodeFluidType::Steam) { - FluidDensity = Fluid::GetSatDensityRefrig(state, fluidNameSteam, 100.0, 1.0, state.dataPlnt->PlantLoop(LoopNum).FluidIndex, RoutineName); + FluidDensity = FluidProperties::GetSatDensityRefrig(state, fluidNameSteam, 100.0, 1.0, state.dataPlnt->PlantLoop(LoopNum).FluidIndex, RoutineName); } else { assert(false); } @@ -3382,10 +3382,10 @@ void ResizePlantLoopLevelSizes(EnergyPlusData &state, int const LoopNum // Suppl // should now have plant volume, calculate plant volume's mass for fluid type if (state.dataPlnt->PlantLoop(LoopNum).FluidType == DataLoopNode::NodeFluidType::Water) { - FluidDensity = Fluid::GetDensityGlycol( + FluidDensity = FluidProperties::GetDensityGlycol( state, state.dataPlnt->PlantLoop(LoopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(LoopNum).FluidIndex, RoutineName); } else if (state.dataPlnt->PlantLoop(LoopNum).FluidType == DataLoopNode::NodeFluidType::Steam) { - FluidDensity = Fluid::GetSatDensityRefrig(state, fluidNameSteam, 100.0, 1.0, state.dataPlnt->PlantLoop(LoopNum).FluidIndex, RoutineName); + FluidDensity = FluidProperties::GetSatDensityRefrig(state, fluidNameSteam, 100.0, 1.0, state.dataPlnt->PlantLoop(LoopNum).FluidIndex, RoutineName); } else { assert(false); } diff --git a/src/EnergyPlus/PlantCentralGSHP.cc b/src/EnergyPlus/PlantCentralGSHP.cc index a698ab2be93..323da9bafe3 100644 --- a/src/EnergyPlus/PlantCentralGSHP.cc +++ b/src/EnergyPlus/PlantCentralGSHP.cc @@ -313,13 +313,13 @@ void WrapperSpecs::SizeWrapper(EnergyPlusData &state) // each individual chiller heater module is sized to be capable of supporting the total load on the wrapper if (PltSizNum > 0) { if (state.dataSize->PlantSizData(PltSizNum).DesVolFlowRate >= HVAC::SmallWaterVolFlow && tmpEvapVolFlowRate > 0.0) { - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -414,13 +414,13 @@ void WrapperSpecs::SizeWrapper(EnergyPlusData &state) // each individual chiller heater module is sized to be capable of supporting the total load on the wrapper if (PltSizCondNum > 0) { if (state.dataSize->PlantSizData(PltSizNum).DesVolFlowRate >= HVAC::SmallWaterVolFlow) { - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->GLHEPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->GLHEPlantLoc.loopNum).FluidIndex, RoutineName); // TODO: JM 2018-12-06 I wonder why Cp isn't calculated at the same temp as rho... - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->GLHEPlantLoc.loopNum).FluidName, this->ChillerHeater(NumChillerHeater).TempRefCondInCooling, state.dataPlnt->PlantLoop(this->GLHEPlantLoc.loopNum).FluidIndex, @@ -1685,7 +1685,7 @@ void WrapperSpecs::initialize(EnergyPlusData &state, this->GLHEVolFlowRate += this->ChillerHeater(ChillerHeaterNum).CondVolFlowRate; } - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -1899,17 +1899,17 @@ void WrapperSpecs::CalcChillerModel(EnergyPlusData &state) // Calculate density ratios to adjust mass flow rates from initialized ones // Hot water temperature is known, but evaporator mass flow rates will be adjusted in the following "Do" loop - Real64 InitDensity = Fluid::GetDensityGlycol(state, + Real64 InitDensity = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 EvapDensity = Fluid::GetDensityGlycol(state, + Real64 EvapDensity = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, EvapInletTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 CondDensity = Fluid::GetDensityGlycol(state, + Real64 CondDensity = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, CondInletTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -2028,7 +2028,7 @@ void WrapperSpecs::CalcChillerModel(EnergyPlusData &state) } // Calculate the specific heat of chilled water - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, EvapInletTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -2165,7 +2165,7 @@ void WrapperSpecs::CalcChillerModel(EnergyPlusData &state) } if (CondMassFlowRate > DataBranchAirLoopPlant::MassFlowTolerance) { - Cp = Fluid::GetSpecificHeatGlycol(state, + Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->GLHEPlantLoc.loopNum).FluidName, CondInletTemp, state.dataPlnt->PlantLoop(this->GLHEPlantLoc.loopNum).FluidIndex, @@ -2340,17 +2340,17 @@ void WrapperSpecs::CalcChillerHeaterModel(EnergyPlusData &state) // Calculate density ratios to adjust mass flow rates from initialized ones // Hot water temperature is known, but condenser mass flow rates will be adjusted in the following "Do" loop - Real64 InitDensity = Fluid::GetDensityGlycol(state, + Real64 InitDensity = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 EvapDensity = Fluid::GetDensityGlycol(state, + Real64 EvapDensity = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, EvapInletTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 CondDensity = Fluid::GetDensityGlycol(state, + Real64 CondDensity = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, CondInletTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -2442,7 +2442,7 @@ void WrapperSpecs::CalcChillerHeaterModel(EnergyPlusData &state) // Mode 4 uses all data from the chilled water loop due to no heating demand if (this->SimulClgDominant || CurrentMode == 3) { CurrentMode = 3; - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->HWPlantLoc.loopNum).FluidName, CondInletTemp, state.dataPlnt->PlantLoop(this->HWPlantLoc.loopNum).FluidIndex, @@ -2557,7 +2557,7 @@ void WrapperSpecs::CalcChillerHeaterModel(EnergyPlusData &state) PartLoadRat = 0.0; } - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->HWPlantLoc.loopNum).FluidName, this->ChillerHeater(ChillerHeaterNum).EvapInletNode.Temp, state.dataPlnt->PlantLoop(this->HWPlantLoc.loopNum).FluidIndex, @@ -2646,7 +2646,7 @@ void WrapperSpecs::CalcChillerHeaterModel(EnergyPlusData &state) // Set load this chiller heater should meet and temperatures given QCondenser = min(HeatingLoadToMeet, QCondenser); - Cp = Fluid::GetSpecificHeatGlycol(state, + Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->HWPlantLoc.loopNum).FluidName, CondInletTemp, state.dataPlnt->PlantLoop(this->HWPlantLoc.loopNum).FluidIndex, diff --git a/src/EnergyPlus/PlantChillers.cc b/src/EnergyPlus/PlantChillers.cc index 82c29986718..a51e5cbca6c 100644 --- a/src/EnergyPlus/PlantChillers.cc +++ b/src/EnergyPlus/PlantChillers.cc @@ -855,7 +855,7 @@ namespace PlantChillers { if (this->MyEnvrnFlag && state.dataGlobal->BeginEnvrnFlag && (state.dataPlnt->PlantFirstSizesOkayToFinalize)) { - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -869,7 +869,7 @@ namespace PlantChillers { state.dataLoopNodes->Node(this->CondInletNodeNum).Temp = this->TempDesCondIn; // old behavior, still want? - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -896,7 +896,7 @@ namespace PlantChillers { } if (this->HeatRecActive) { - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidIndex, @@ -1030,12 +1030,12 @@ namespace PlantChillers { Real64 tmpNomCap = this->NomCap; if (PltSizNum > 0) { if (state.dataSize->PlantSizData(PltSizNum).DesVolFlowRate >= HVAC::SmallWaterVolFlow) { - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -1152,12 +1152,12 @@ namespace PlantChillers { Real64 tmpCondVolFlowRate = this->CondVolFlowRate; if (PltSizCondNum > 0 && PltSizNum > 0) { if (state.dataSize->PlantSizData(PltSizNum).DesVolFlowRate >= HVAC::SmallWaterVolFlow && tmpNomCap > 0.0) { - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, this->TempDesCondIn, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, this->TempDesCondIn, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -1575,7 +1575,7 @@ namespace PlantChillers { OperPartLoadRat = 0.0; } - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->EvapInletNodeNum).Temp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -1815,7 +1815,7 @@ namespace PlantChillers { if (this->CondMassFlowRate > DataBranchAirLoopPlant::MassFlowTolerance) { // If Heat Recovery specified for this vapor compression chiller, then Qcondenser will be adjusted by this subroutine if (this->HeatRecActive) this->calcHeatRecovery(state, this->QCondenser, this->CondMassFlowRate, condInletTemp, this->QHeatRecovered); - Real64 CpCond = Fluid::GetSpecificHeatGlycol(state, + Real64 CpCond = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, condInletTemp, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -1906,7 +1906,7 @@ namespace PlantChillers { this->HeatRecInletTemp = state.dataLoopNodes->Node(this->HeatRecInletNodeNum).Temp; Real64 HeatRecMassFlowRate = state.dataLoopNodes->Node(this->HeatRecInletNodeNum).MassFlowRate; - Real64 CpHeatRec = Fluid::GetSpecificHeatGlycol(state, + Real64 CpHeatRec = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidName, this->HeatRecInletTemp, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidIndex, @@ -1914,7 +1914,7 @@ namespace PlantChillers { Real64 CpCond; if (this->CondenserType == DataPlant::CondenserType::WaterCooled) { - CpCond = Fluid::GetSpecificHeatGlycol(state, + CpCond = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, condInletTemp, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -2917,7 +2917,7 @@ namespace PlantChillers { // Initialize critical Demand Side Variables if (this->MyEnvrnFlag && state.dataGlobal->BeginEnvrnFlag && (state.dataPlnt->PlantFirstSizesOkayToFinalize)) { - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -2932,7 +2932,7 @@ namespace PlantChillers { state.dataLoopNodes->Node(this->CondInletNodeNum).Temp = this->TempDesCondIn; - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -2958,7 +2958,7 @@ namespace PlantChillers { } if (this->HeatRecActive) { - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidIndex, @@ -3051,12 +3051,12 @@ namespace PlantChillers { if (PltSizNum > 0) { if (state.dataSize->PlantSizData(PltSizNum).DesVolFlowRate >= HVAC::SmallWaterVolFlow) { - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -3172,13 +3172,13 @@ namespace PlantChillers { if (PltSizCondNum > 0 && PltSizNum > 0) { if (state.dataSize->PlantSizData(PltSizNum).DesVolFlowRate >= HVAC::SmallWaterVolFlow && tmpNomCap > 0.0) { - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, this->TempDesCondIn, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, this->TempDesCondIn, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -3612,7 +3612,7 @@ namespace PlantChillers { OperPartLoadRat = 0.0; } - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->EvapInletNodeNum).Temp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -3853,7 +3853,7 @@ namespace PlantChillers { if (this->CondenserType == DataPlant::CondenserType::WaterCooled) { if (this->CondMassFlowRate > DataBranchAirLoopPlant::MassFlowTolerance) { - Real64 CpCond = Fluid::GetSpecificHeatGlycol(state, + Real64 CpCond = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, this->CondInletTemp, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -4008,7 +4008,7 @@ namespace PlantChillers { this->HeatRecMdotActual = state.dataLoopNodes->Node(this->HeatRecInletNodeNum).MassFlowRate; this->HeatRecInletTemp = state.dataLoopNodes->Node(this->HeatRecInletNodeNum).Temp; - Real64 cp = Fluid::GetSpecificHeatGlycol(state, + Real64 cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidName, this->HeatRecInletTemp, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidIndex, @@ -4902,7 +4902,7 @@ namespace PlantChillers { if (this->MyEnvrnFlag && state.dataGlobal->BeginEnvrnFlag && (state.dataPlnt->PlantFirstSizesOkayToFinalize)) { - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -4916,7 +4916,7 @@ namespace PlantChillers { state.dataLoopNodes->Node(this->CondInletNodeNum).Temp = this->TempDesCondIn; - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -4942,7 +4942,7 @@ namespace PlantChillers { } if (this->HeatRecActive) { - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidIndex, @@ -5035,12 +5035,12 @@ namespace PlantChillers { if (PltSizNum > 0) { if (state.dataSize->PlantSizData(PltSizNum).DesVolFlowRate >= HVAC::SmallWaterVolFlow) { - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -5160,12 +5160,12 @@ namespace PlantChillers { if (PltSizCondNum > 0 && PltSizNum > 0) { if (state.dataSize->PlantSizData(PltSizNum).DesVolFlowRate >= HVAC::SmallWaterVolFlow && tmpNomCap > 0.0) { - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, this->TempDesCondIn, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, this->TempDesCondIn, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -5617,7 +5617,7 @@ namespace PlantChillers { OperPartLoadRat = 0.0; } - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->EvapInletNodeNum).Temp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -5843,7 +5843,7 @@ namespace PlantChillers { if (this->CondenserType == DataPlant::CondenserType::WaterCooled) { if (this->CondMassFlowRate > DataBranchAirLoopPlant::MassFlowTolerance) { - Real64 CpCond = Fluid::GetSpecificHeatGlycol(state, + Real64 CpCond = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, condInletTemp, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -5922,7 +5922,7 @@ namespace PlantChillers { // This mdot is input specified mdot "Desired Flowrate", already set at node in init routine heatRecMdot = state.dataLoopNodes->Node(this->HeatRecInletNodeNum).MassFlowRate; this->HeatRecInletTemp = state.dataLoopNodes->Node(this->HeatRecInletNodeNum).Temp; - Real64 HeatRecCp = Fluid::GetSpecificHeatGlycol(state, + Real64 HeatRecCp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidName, this->HeatRecInletTemp, state.dataPlnt->PlantLoop(this->HRPlantLoc.loopNum).FluidIndex, @@ -6682,7 +6682,7 @@ namespace PlantChillers { // Initialize critical Demand Side Variables at the beginning of each environment if (this->MyEnvrnFlag && state.dataGlobal->BeginEnvrnFlag && (state.dataPlnt->PlantFirstSizesOkayToFinalize)) { - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -6695,7 +6695,7 @@ namespace PlantChillers { state.dataLoopNodes->Node(this->CondInletNodeNum).Temp = TempDesCondIn; - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -6787,12 +6787,12 @@ namespace PlantChillers { if (PltSizNum > 0) { if (state.dataSize->PlantSizData(PltSizNum).DesVolFlowRate >= HVAC::SmallWaterVolFlow) { - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -6915,12 +6915,12 @@ namespace PlantChillers { if (this->CondenserType == DataPlant::CondenserType::WaterCooled) { if (PltSizCondNum > 0 && PltSizNum > 0) { if (state.dataSize->PlantSizData(PltSizNum).DesVolFlowRate >= HVAC::SmallWaterVolFlow && tmpNomCap > 0.0) { - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, 29.44, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, RoutineName); - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, 29.44, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, @@ -7247,7 +7247,7 @@ namespace PlantChillers { // condenser side outlet temperature. // local for fluid specif heat, for evaporator - Real64 const Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 const Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->EvapInletNodeNum).Temp, state.dataPlnt->PlantLoop(this->CWPlantLoc.loopNum).FluidIndex, @@ -7437,7 +7437,7 @@ namespace PlantChillers { if (this->CondenserType == DataPlant::CondenserType::WaterCooled) { // local for fluid specif heat, for condenser - Real64 const CpCond = Fluid::GetSpecificHeatGlycol(state, + Real64 const CpCond = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidName, CondInletTemp, state.dataPlnt->PlantLoop(this->CDPlantLoc.loopNum).FluidIndex, diff --git a/src/EnergyPlus/PlantComponentTemperatureSources.cc b/src/EnergyPlus/PlantComponentTemperatureSources.cc index f9eaec46b5e..03089902c9f 100644 --- a/src/EnergyPlus/PlantComponentTemperatureSources.cc +++ b/src/EnergyPlus/PlantComponentTemperatureSources.cc @@ -132,7 +132,7 @@ namespace PlantComponentTemperatureSources { // Initialize critical Demand Side Variables at the beginning of each environment if (this->MyEnvironFlag && state.dataGlobal->BeginEnvrnFlag && (state.dataPlnt->PlantFirstSizesOkayToFinalize)) { - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -154,7 +154,7 @@ namespace PlantComponentTemperatureSources { } // Calculate specific heat - Real64 cp = Fluid::GetSpecificHeatGlycol(state, + Real64 cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, this->BoundaryTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -364,7 +364,7 @@ namespace PlantComponentTemperatureSources { if (this->MassFlowRate > 0.0) { this->OutletTemp = this->BoundaryTemp; - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, this->BoundaryTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, diff --git a/src/EnergyPlus/PlantCondLoopOperation.cc b/src/EnergyPlus/PlantCondLoopOperation.cc index 2353b57dcdc..39a5f69ed1b 100644 --- a/src/EnergyPlus/PlantCondLoopOperation.cc +++ b/src/EnergyPlus/PlantCondLoopOperation.cc @@ -102,7 +102,7 @@ namespace EnergyPlus::PlantCondLoopOperation { // Using/Aliasing using namespace DataPlant; -using Fluid::GetSpecificHeatGlycol; +using FluidProperties::GetSpecificHeatGlycol; using HVAC::SmallLoad; void ManagePlantLoadDistribution(EnergyPlusData &state, @@ -3679,7 +3679,7 @@ void FindCompSPLoad(EnergyPlusData &state, // Using/Aliasing using DataLoopNode::SensedNodeFlagValue; - using Fluid::GetDensityGlycol; + using FluidProperties::GetDensityGlycol; // Locals // SUBROUTINE ARGUMENT DEFINITIONS: diff --git a/src/EnergyPlus/PlantHeatExchangerFluidToFluid.cc b/src/EnergyPlus/PlantHeatExchangerFluidToFluid.cc index 2bf0a4e077c..31d1dbb94b8 100644 --- a/src/EnergyPlus/PlantHeatExchangerFluidToFluid.cc +++ b/src/EnergyPlus/PlantHeatExchangerFluidToFluid.cc @@ -648,7 +648,7 @@ void HeatExchangerStruct::initialize(EnergyPlusData &state) if (state.dataGlobal->BeginEnvrnFlag && this->MyEnvrnFlag && (state.dataPlnt->PlantFirstSizesOkayToFinalize)) { - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->DemandSideLoop.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->DemandSideLoop.loopNum).FluidIndex, @@ -660,7 +660,7 @@ void HeatExchangerStruct::initialize(EnergyPlusData &state) this->DemandSideLoop.inletNodeNum, this->DemandSideLoop.outletNodeNum); - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->SupplySideLoop.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->SupplySideLoop.loopNum).FluidIndex, @@ -807,13 +807,13 @@ void HeatExchangerStruct::size(EnergyPlusData &state) Real64 tmpDeltaTSupLoop = state.dataSize->PlantSizData(PltSizNumSupSide).DeltaT; if (tmpSupSideDesignVolFlowRate >= HVAC::SmallWaterVolFlow) { - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->SupplySideLoop.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->SupplySideLoop.loopNum).FluidIndex, RoutineName); - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->SupplySideLoop.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->SupplySideLoop.loopNum).FluidIndex, @@ -901,13 +901,13 @@ void HeatExchangerStruct::size(EnergyPlusData &state) } } - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->SupplySideLoop.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->SupplySideLoop.loopNum).FluidIndex, RoutineName); Real64 SupSideMdot = this->SupplySideLoop.DesignVolumeFlowRate * rho; - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->DemandSideLoop.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->DemandSideLoop.loopNum).FluidIndex, @@ -996,7 +996,7 @@ void HeatExchangerStruct::control(EnergyPlusData &state, Real64 MyLoad, bool Fir state, mdotSupSide, this->SupplySideLoop.inletNodeNum, this->SupplySideLoop.outletNodeNum, this->SupplySideLoop); if (mdotSupSide > DataBranchAirLoopPlant::MassFlowTolerance) { // if supply side loop has massflow, request demand side flow - Real64 cp = Fluid::GetSpecificHeatGlycol(state, + Real64 cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->SupplySideLoop.loopNum).FluidName, this->SupplySideLoop.InletTemp, state.dataPlnt->PlantLoop(this->SupplySideLoop.loopNum).FluidIndex, @@ -1031,7 +1031,7 @@ void HeatExchangerStruct::control(EnergyPlusData &state, Real64 MyLoad, bool Fir PlantUtilities::SetComponentFlowRate( state, mdotSupSide, this->SupplySideLoop.inletNodeNum, this->SupplySideLoop.outletNodeNum, this->SupplySideLoop); if (mdotSupSide > DataBranchAirLoopPlant::MassFlowTolerance) { - Real64 cp = Fluid::GetSpecificHeatGlycol(state, + Real64 cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->SupplySideLoop.loopNum).FluidName, this->SupplySideLoop.InletTemp, state.dataPlnt->PlantLoop(this->SupplySideLoop.loopNum).FluidIndex, @@ -1503,14 +1503,14 @@ void HeatExchangerStruct::calculate(EnergyPlusData &state, Real64 const SupSideM Real64 DmdSideLoopInletTemp = state.dataLoopNodes->Node(this->DemandSideLoop.inletNodeNum).Temp; // specific heat of fluid entering from supply side loop at inlet temp - Real64 SupSideLoopInletCp = Fluid::GetSpecificHeatGlycol(state, + Real64 SupSideLoopInletCp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->SupplySideLoop.loopNum).FluidName, SupSideLoopInletTemp, state.dataPlnt->PlantLoop(this->SupplySideLoop.loopNum).FluidIndex, RoutineName); // specific heat of fluid entering from demand side loop at inlet temp - Real64 DmdSideLoopInletCp = Fluid::GetSpecificHeatGlycol(state, + Real64 DmdSideLoopInletCp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->DemandSideLoop.loopNum).FluidName, DmdSideLoopInletTemp, state.dataPlnt->PlantLoop(this->DemandSideLoop.loopNum).FluidIndex, diff --git a/src/EnergyPlus/PlantLoadProfile.cc b/src/EnergyPlus/PlantLoadProfile.cc index 76b2a888990..fa976ca3efe 100644 --- a/src/EnergyPlus/PlantLoadProfile.cc +++ b/src/EnergyPlus/PlantLoadProfile.cc @@ -142,7 +142,7 @@ void PlantProfileData::simulate(EnergyPlusData &state, if (this->FluidType == PlantLoopFluidType::Water) { if (this->MassFlowRate > 0.0) { - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, this->InletTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -155,25 +155,25 @@ void PlantProfileData::simulate(EnergyPlusData &state, this->OutletTemp = this->InletTemp - DeltaTemp; } else if (this->FluidType == PlantLoopFluidType::Steam) { if (this->MassFlowRate > 0.0 && this->Power > 0.0) { - Real64 EnthSteamInDry = Fluid::GetSatEnthalpyRefrig(state, + Real64 EnthSteamInDry = FluidProperties::GetSatEnthalpyRefrig(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, this->InletTemp, 1.0, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); - Real64 EnthSteamOutWet = Fluid::GetSatEnthalpyRefrig(state, + Real64 EnthSteamOutWet = FluidProperties::GetSatEnthalpyRefrig(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, this->InletTemp, 0.0, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); Real64 LatentHeatSteam = EnthSteamInDry - EnthSteamOutWet; - Real64 SatTemp = Fluid::GetSatTemperatureRefrig(state, + Real64 SatTemp = FluidProperties::GetSatTemperatureRefrig(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, DataEnvironment::StdPressureSeaLevel, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); - Real64 CpWater = Fluid::GetSpecificHeatGlycol(state, + Real64 CpWater = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, SatTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -232,18 +232,18 @@ void PlantProfileData::InitPlantProfile(EnergyPlusData &state) state.dataLoopNodes->Node(OutletNode).Temp = 0.0; if (this->FluidType == PlantLoopFluidType::Water) { - FluidDensityInit = Fluid::GetDensityGlycol(state, + FluidDensityInit = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); } else { //(this->FluidType == PlantLoopFluidType::Steam) - Real64 SatTempAtmPress = Fluid::GetSatTemperatureRefrig(state, + Real64 SatTempAtmPress = FluidProperties::GetSatTemperatureRefrig(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, DataEnvironment::StdPressureSeaLevel, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); - FluidDensityInit = Fluid::GetSatDensityRefrig(state, + FluidDensityInit = FluidProperties::GetSatDensityRefrig(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, SatTempAtmPress, 1.0, @@ -271,13 +271,13 @@ void PlantProfileData::InitPlantProfile(EnergyPlusData &state) if (this->EMSOverridePower) this->Power = this->EMSPowerValue; if (this->FluidType == PlantLoopFluidType::Water) { - FluidDensityInit = Fluid::GetDensityGlycol(state, + FluidDensityInit = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, this->InletTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); } else { //(this->FluidType == PlantLoopFluidType::Steam) - FluidDensityInit = Fluid::GetSatDensityRefrig(state, + FluidDensityInit = FluidProperties::GetSatDensityRefrig(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, this->InletTemp, 1.0, diff --git a/src/EnergyPlus/PlantLoopHeatPumpEIR.cc b/src/EnergyPlus/PlantLoopHeatPumpEIR.cc index 125b06fc88b..9eff1c9a64f 100644 --- a/src/EnergyPlus/PlantLoopHeatPumpEIR.cc +++ b/src/EnergyPlus/PlantLoopHeatPumpEIR.cc @@ -142,7 +142,7 @@ void EIRPlantLoopHeatPump::simulate( if (this->running) { if (this->sysControlType == ControlType::Setpoint) { Real64 leavingSetpoint = state.dataLoopNodes->Node(this->loadSideNodes.outlet).TempSetPoint; - Real64 CurSpecHeat = Fluid::GetSpecificHeatGlycol(state, + Real64 CurSpecHeat = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->loadSidePlantLoc.loopNum).FluidName, loadSideInletTemp, state.dataPlnt->PlantLoop(this->loadSidePlantLoc.loopNum).FluidIndex, @@ -488,7 +488,7 @@ void EIRPlantLoopHeatPump::calcAvailableCapacity(EnergyPlusData &state, Real64 c if (this->heatRecoveryHeatPump) { // check to see if souce side outlet temp exceeds limit and reduce PLR if necessary auto &thisSourcePlantLoop = state.dataPlnt->PlantLoop(this->sourceSidePlantLoc.loopNum); - Real64 const CpSrc = Fluid::GetSpecificHeatGlycol( + Real64 const CpSrc = FluidProperties::GetSpecificHeatGlycol( state, thisSourcePlantLoop.FluidName, this->sourceSideInletTemp, thisSourcePlantLoop.FluidIndex, "EIRPlantLoopHeatPump::doPhysics()"); Real64 const sourceMCp = this->sourceSideMassFlowRate * CpSrc; Real64 const tempSourceOutletTemp = @@ -556,7 +556,7 @@ void EIRPlantLoopHeatPump::calcLoadSideHeatTransfer(EnergyPlusData &state, Real6 { // evaluate the actual current operating load side heat transfer rate auto &thisLoadPlantLoop = state.dataPlnt->PlantLoop(this->loadSidePlantLoc.loopNum); - Real64 CpLoad = Fluid::GetSpecificHeatGlycol(state, + Real64 CpLoad = FluidProperties::GetSpecificHeatGlycol(state, thisLoadPlantLoop.FluidName, state.dataLoopNodes->Node(this->loadSideNodes.inlet).Temp, thisLoadPlantLoop.FluidIndex, @@ -610,7 +610,7 @@ void EIRPlantLoopHeatPump::calcSourceSideHeatTransferWSHP(EnergyPlusData &state) // calculate source side outlet conditions auto &thisSourcePlantLoop = state.dataPlnt->PlantLoop(this->sourceSidePlantLoc.loopNum); - Real64 const CpSrc = Fluid::GetSpecificHeatGlycol(state, + Real64 const CpSrc = FluidProperties::GetSpecificHeatGlycol(state, thisSourcePlantLoop.FluidName, this->sourceSideInletTemp, thisSourcePlantLoop.FluidIndex, @@ -658,7 +658,7 @@ void EIRPlantLoopHeatPump::calcHeatRecoveryHeatTransferASHP(EnergyPlusData &stat // calculate heat recovery side outlet conditions auto &thisHeatRecoveryPlantLoop = state.dataPlnt->PlantLoop(this->heatRecoveryPlantLoc.loopNum); - Real64 const CpHR = Fluid::GetSpecificHeatGlycol(state, + Real64 const CpHR = FluidProperties::GetSpecificHeatGlycol(state, thisHeatRecoveryPlantLoop.FluidName, this->heatRecoveryInletTemp, thisHeatRecoveryPlantLoop.FluidIndex, @@ -958,7 +958,7 @@ void EIRPlantLoopHeatPump::onInitLoopEquip(EnergyPlusData &state, [[maybe_unused if (state.dataGlobal->BeginEnvrnFlag && this->envrnInit && state.dataPlnt->PlantFirstSizesOkayToFinalize) { - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->loadSidePlantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->loadSidePlantLoc.loopNum).FluidIndex, @@ -967,7 +967,7 @@ void EIRPlantLoopHeatPump::onInitLoopEquip(EnergyPlusData &state, [[maybe_unused PlantUtilities::InitComponentNodes(state, 0.0, this->loadSideDesignMassFlowRate, this->loadSideNodes.inlet, this->loadSideNodes.outlet); if (this->waterSource) { - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->sourceSidePlantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->sourceSidePlantLoc.loopNum).FluidIndex, @@ -980,7 +980,7 @@ void EIRPlantLoopHeatPump::onInitLoopEquip(EnergyPlusData &state, [[maybe_unused this->sourceSideDesignMassFlowRate = rho * this->sourceSideDesignVolFlowRate; // heat recovery if (this->heatRecoveryAvailable) { - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->heatRecoveryPlantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->heatRecoveryPlantLoc.loopNum).FluidIndex, @@ -1044,12 +1044,12 @@ void EIRPlantLoopHeatPump::sizeLoadSide(EnergyPlusData &state) (this->EIRHPType == DataPlant::PlantEquipmentType::HeatPumpEIRHeating) ? Constant::HWInitConvTemp : Constant::CWInitConvTemp; // I guess I can assume the plant fluids are the same for HW and CW. So only the sizing type is an issue on which to use. - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->loadSidePlantLoc.loopNum).FluidName, loadSideInitTemp, state.dataPlnt->PlantLoop(this->loadSidePlantLoc.loopNum).FluidIndex, "EIRPlantLoopHeatPump::sizeLoadSide()"); - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->loadSidePlantLoc.loopNum).FluidName, loadSideInitTemp, state.dataPlnt->PlantLoop(this->loadSidePlantLoc.loopNum).FluidIndex, @@ -1076,13 +1076,13 @@ void EIRPlantLoopHeatPump::sizeLoadSide(EnergyPlusData &state) Real64 compCp = Cp; Real64 compDeltaT = deltaT; if (compLoopNum > 0) { - compRho = Fluid::GetDensityGlycol( + compRho = FluidProperties::GetDensityGlycol( state, state.dataPlnt->PlantLoop(compLoopNum).FluidName, this->EIRHPType == DataPlant::PlantEquipmentType::HeatPumpEIRCooling ? Constant::HWInitConvTemp : Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(compLoopNum).FluidIndex, "EIRPlantLoopHeatPump::sizeLoadSide()"); - compCp = Fluid::GetSpecificHeatGlycol( + compCp = FluidProperties::GetSpecificHeatGlycol( state, state.dataPlnt->PlantLoop(compLoopNum).FluidName, this->EIRHPType == DataPlant::PlantEquipmentType::HeatPumpEIRCooling ? Constant::HWInitConvTemp : Constant::CWInitConvTemp, @@ -1132,12 +1132,12 @@ void EIRPlantLoopHeatPump::sizeLoadSide(EnergyPlusData &state) (this->EIRHPType == DataPlant::PlantEquipmentType::HeatPumpEIRCooling) ? Constant::HWInitConvTemp : Constant::CWInitConvTemp; int compLoopNum = this->companionHeatPumpCoil->loadSidePlantLoc.loopNum; if (compLoopNum > 0) { - Real64 const compRho = Fluid::GetDensityGlycol(state, + Real64 const compRho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(compLoopNum).FluidName, compLoadSideInitTemp, state.dataPlnt->PlantLoop(compLoopNum).FluidIndex, "EIRPlantLoopHeatPump::sizeLoadSide()"); - Real64 const compCp = Fluid::GetSpecificHeatGlycol(state, + Real64 const compCp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(compLoopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(compLoopNum).FluidIndex, @@ -1311,12 +1311,12 @@ void EIRPlantLoopHeatPump::sizeSrcSideWSHP(EnergyPlusData &state) Real64 sourceSideInitTemp = (this->EIRHPType == DataPlant::PlantEquipmentType::HeatPumpEIRCooling) ? Constant::CWInitConvTemp : Constant::HWInitConvTemp; - Real64 const rhoSrc = Fluid::GetDensityGlycol(state, + Real64 const rhoSrc = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->loadSidePlantLoc.loopNum).FluidName, sourceSideInitTemp, state.dataPlnt->PlantLoop(this->loadSidePlantLoc.loopNum).FluidIndex, "EIRPlantLoopHeatPump::sizeSrcSideWSHP()"); - Real64 const CpSrc = Fluid::GetSpecificHeatGlycol(state, + Real64 const CpSrc = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->loadSidePlantLoc.loopNum).FluidName, sourceSideInitTemp, state.dataPlnt->PlantLoop(this->loadSidePlantLoc.loopNum).FluidIndex, @@ -1536,12 +1536,12 @@ void EIRPlantLoopHeatPump::sizeHeatRecoveryASHP(EnergyPlusData &state) std::string_view const typeName = DataPlant::PlantEquipTypeNames[static_cast(this->EIRHPType)]; Real64 heatRecoveryInitTemp = (this->EIRHPType == DataPlant::PlantEquipmentType::HeatPumpEIRCooling) ? Constant::HWInitConvTemp : Constant::CWInitConvTemp; - Real64 const rhoHR = Fluid::GetDensityGlycol(state, + Real64 const rhoHR = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->heatRecoveryPlantLoc.loopNum).FluidName, heatRecoveryInitTemp, state.dataPlnt->PlantLoop(this->heatRecoveryPlantLoc.loopNum).FluidIndex, "EIRPlantLoopHeatPump::sizeHeatRecoveryASHP()"); - Real64 const CpHR = Fluid::GetSpecificHeatGlycol(state, + Real64 const CpHR = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->heatRecoveryPlantLoc.loopNum).FluidName, heatRecoveryInitTemp, state.dataPlnt->PlantLoop(this->heatRecoveryPlantLoc.loopNum).FluidIndex, @@ -2504,7 +2504,7 @@ void EIRFuelFiredHeatPump::doPhysics(EnergyPlusData &state, Real64 currentLoad) } DataPlant::PlantLoopData &thisLoadPlantLoop = state.dataPlnt->PlantLoop(this->loadSidePlantLoc.loopNum); - Real64 CpLoad = Fluid::GetSpecificHeatGlycol( + Real64 CpLoad = FluidProperties::GetSpecificHeatGlycol( state, thisLoadPlantLoop.FluidName, thisInletNode.Temp, thisLoadPlantLoop.FluidIndex, "PLFFHPEIR::simulate()"); // Set the current load equal to the FFHP load @@ -2890,7 +2890,7 @@ void EIRFuelFiredHeatPump::doPhysics(EnergyPlusData &state, Real64 currentLoad) Real64 CpSrc = 0.0; if (this->waterSource) { auto &thisSourcePlantLoop = state.dataPlnt->PlantLoop(this->sourceSidePlantLoc.loopNum); - CpSrc = Fluid::GetSpecificHeatGlycol( + CpSrc = FluidProperties::GetSpecificHeatGlycol( state, thisSourcePlantLoop.FluidName, this->sourceSideInletTemp, thisSourcePlantLoop.FluidIndex, "PLFFHPEIR::simulate()"); } else if (this->airSource) { CpSrc = Psychrometrics::PsyCpAirFnW(state.dataEnvrn->OutHumRat); diff --git a/src/EnergyPlus/PlantPipingSystemsManager.cc b/src/EnergyPlus/PlantPipingSystemsManager.cc index a4537988cf5..dc8deb1da92 100644 --- a/src/EnergyPlus/PlantPipingSystemsManager.cc +++ b/src/EnergyPlus/PlantPipingSystemsManager.cc @@ -2109,7 +2109,7 @@ namespace PlantPipingSystemsManager { } // Once we find ourselves on the plant loop, we can do other things - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(thisCircuit->plantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(thisCircuit->plantLoc.loopNum).FluidIndex, @@ -5689,22 +5689,22 @@ namespace PlantPipingSystemsManager { // retrieve fluid properties based on the circuit inlet temperature -- which varies during the simulation // but need to verify the value of inlet temperature during warm up, etc. - FluidCp = Fluid::GetSpecificHeatGlycol(state, + FluidCp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(thisCircuit->plantLoc.loopNum).FluidName, thisCircuit->InletTemperature, state.dataPlnt->PlantLoop(thisCircuit->plantLoc.loopNum).FluidIndex, RoutineName); - FluidDensity = Fluid::GetDensityGlycol(state, + FluidDensity = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(thisCircuit->plantLoc.loopNum).FluidName, thisCircuit->InletTemperature, state.dataPlnt->PlantLoop(thisCircuit->plantLoc.loopNum).FluidIndex, RoutineName); - FluidConductivity = Fluid::GetConductivityGlycol(state, + FluidConductivity = FluidProperties::GetConductivityGlycol(state, state.dataPlnt->PlantLoop(thisCircuit->plantLoc.loopNum).FluidName, thisCircuit->InletTemperature, state.dataPlnt->PlantLoop(thisCircuit->plantLoc.loopNum).FluidIndex, RoutineName); - FluidViscosity = Fluid::GetViscosityGlycol(state, + FluidViscosity = FluidProperties::GetViscosityGlycol(state, state.dataPlnt->PlantLoop(thisCircuit->plantLoc.loopNum).FluidName, thisCircuit->InletTemperature, state.dataPlnt->PlantLoop(thisCircuit->plantLoc.loopNum).FluidIndex, diff --git a/src/EnergyPlus/PlantPressureSystem.cc b/src/EnergyPlus/PlantPressureSystem.cc index 8f04efbdc57..dc15cff6b4c 100644 --- a/src/EnergyPlus/PlantPressureSystem.cc +++ b/src/EnergyPlus/PlantPressureSystem.cc @@ -375,8 +375,8 @@ void BranchPressureDrop(EnergyPlusData &state, // Using/Aliasing using Curve::CurveValue; using Curve::PressureCurveValue; - using Fluid::GetDensityGlycol; - using Fluid::GetViscosityGlycol; + using FluidProperties::GetDensityGlycol; + using FluidProperties::GetViscosityGlycol; // SUBROUTINE PARAMETER DEFINITIONS: static constexpr std::string_view RoutineName("CalcPlantPressureSystem"); @@ -839,8 +839,8 @@ Real64 ResolveLoopFlowVsPressure(EnergyPlusData &state, // Using/Aliasing using Curve::CurveValue; - using Fluid::GetDensityGlycol; - using Fluid::GetViscosityGlycol; + using FluidProperties::GetDensityGlycol; + using FluidProperties::GetViscosityGlycol; // Return value Real64 ResolvedLoopMassFlowRate; diff --git a/src/EnergyPlus/PlantUtilities.cc b/src/EnergyPlus/PlantUtilities.cc index 493e3f2fed3..3d442924399 100644 --- a/src/EnergyPlus/PlantUtilities.cc +++ b/src/EnergyPlus/PlantUtilities.cc @@ -985,7 +985,7 @@ void UpdateChillerComponentCondenserSide(EnergyPlusData &state, // update outlet conditions if needed or possible // Using/Aliasing - using Fluid::GetSpecificHeatGlycol; + using FluidProperties::GetSpecificHeatGlycol; // SUBROUTINE PARAMETER DEFINITIONS: static constexpr std::string_view RoutineName("UpdateChillerComponentCondenserSide"); @@ -1079,7 +1079,7 @@ void UpdateComponentHeatRecoverySide(EnergyPlusData &state, // update outlet conditions if needed or possible // Using/Aliasing - using Fluid::GetSpecificHeatGlycol; + using FluidProperties::GetSpecificHeatGlycol; // SUBROUTINE PARAMETER DEFINITIONS: static constexpr std::string_view RoutineName("UpdateComponentHeatRecoverySide"); diff --git a/src/EnergyPlus/PondGroundHeatExchanger.cc b/src/EnergyPlus/PondGroundHeatExchanger.cc index f7837cfa626..2c760a70f8f 100644 --- a/src/EnergyPlus/PondGroundHeatExchanger.cc +++ b/src/EnergyPlus/PondGroundHeatExchanger.cc @@ -207,7 +207,7 @@ void GetPondGroundHeatExchanger(EnergyPlusData &state) state.dataIPShortCut->cAlphaFieldNames, state.dataIPShortCut->cNumericFieldNames); - state.dataPondGHE->PondGHE(Item).WaterIndex = Fluid::FindGlycol(state, fluidNameWater); + state.dataPondGHE->PondGHE(Item).WaterIndex = FluidProperties::GetGlycolNum(state, fluidNameWater); // General user input data state.dataPondGHE->PondGHE(Item).Name = state.dataIPShortCut->cAlphaArgs(1); @@ -470,10 +470,10 @@ void PondGroundHeatExchangerData::CalcPondGroundHeatExchanger(EnergyPlusData &st static constexpr std::string_view RoutineName("CalcPondGroundHeatExchanger"); Real64 PondMass = this->Depth * this->Area * - Fluid::GetDensityGlycol( + FluidProperties::GetDensityGlycol( state, fluidNameWater, max(this->PondTemp, DataPrecisionGlobals::constant_zero), this->WaterIndex, RoutineName); - Real64 SpecificHeat = Fluid::GetSpecificHeatGlycol( + Real64 SpecificHeat = FluidProperties::GetSpecificHeatGlycol( state, fluidNameWater, max(this->PondTemp, DataPrecisionGlobals::constant_zero), this->WaterIndex, RoutineName); Real64 Flux = this->CalcTotalFLux(state, this->PondTemp); @@ -571,7 +571,7 @@ Real64 PondGroundHeatExchangerData::CalcTotalFLux(EnergyPlusData &state, Real64 Real64 FluxSolAbsorbed = CalcSolarFlux(state); // specific heat from fluid prop routines - Real64 SpecHeat = Fluid::GetSpecificHeatGlycol(state, + Real64 SpecHeat = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, max(this->InletTemp, 0.0), state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -713,17 +713,17 @@ Real64 PondGroundHeatExchangerData::CalcEffectiveness(EnergyPlusData &state, // evaluate properties at pipe fluid temperature for given pipe fluid - Real64 SpecificHeat = Fluid::GetSpecificHeatGlycol(state, + Real64 SpecificHeat = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, InsideTemperature, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, CalledFrom); - Real64 Conductivity = Fluid::GetConductivityGlycol(state, + Real64 Conductivity = FluidProperties::GetConductivityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, InsideTemperature, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, CalledFrom); - Real64 Viscosity = Fluid::GetViscosityGlycol(state, + Real64 Viscosity = FluidProperties::GetViscosityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, InsideTemperature, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -747,10 +747,10 @@ Real64 PondGroundHeatExchangerData::CalcEffectiveness(EnergyPlusData &state, Real64 ConvCoefIn = Conductivity * NusseltNum / this->TubeInDiameter; // now find properties of pond water - always assume pond fluid is water - Real64 WaterSpecHeat = Fluid::GetSpecificHeatGlycol(state, fluidNameWater, max(PondTemperature, 0.0), this->WaterIndex, CalledFrom); - Real64 WaterConductivity = Fluid::GetConductivityGlycol(state, fluidNameWater, max(PondTemperature, 0.0), this->WaterIndex, CalledFrom); - Real64 WaterViscosity = Fluid::GetViscosityGlycol(state, fluidNameWater, max(PondTemperature, 0.0), this->WaterIndex, CalledFrom); - Real64 WaterDensity = Fluid::GetDensityGlycol(state, fluidNameWater, max(PondTemperature, 0.0), this->WaterIndex, CalledFrom); + Real64 WaterSpecHeat = FluidProperties::GetSpecificHeatGlycol(state, fluidNameWater, max(PondTemperature, 0.0), this->WaterIndex, CalledFrom); + Real64 WaterConductivity = FluidProperties::GetConductivityGlycol(state, fluidNameWater, max(PondTemperature, 0.0), this->WaterIndex, CalledFrom); + Real64 WaterViscosity = FluidProperties::GetViscosityGlycol(state, fluidNameWater, max(PondTemperature, 0.0), this->WaterIndex, CalledFrom); + Real64 WaterDensity = FluidProperties::GetDensityGlycol(state, fluidNameWater, max(PondTemperature, 0.0), this->WaterIndex, CalledFrom); // derived properties for natural convection coefficient // expansion coef (Beta) = -1/Rho. dRho/dT @@ -758,8 +758,8 @@ Real64 PondGroundHeatExchangerData::CalcEffectiveness(EnergyPlusData &state, // It guarantees that the delta T is 10C and also avoids the problems associated with // water hitting a maximum density at around 4C. (RKS) Real64 ExpansionCoef = - -(Fluid::GetDensityGlycol(state, fluidNameWater, max(PondTemperature, 10.0) + 5.0, this->WaterIndex, CalledFrom) - - Fluid::GetDensityGlycol(state, fluidNameWater, max(PondTemperature, 10.0) - 5.0, this->WaterIndex, CalledFrom)) / + -(FluidProperties::GetDensityGlycol(state, fluidNameWater, max(PondTemperature, 10.0) + 5.0, this->WaterIndex, CalledFrom) - + FluidProperties::GetDensityGlycol(state, fluidNameWater, max(PondTemperature, 10.0) - 5.0, this->WaterIndex, CalledFrom)) / (10.0 * WaterDensity); Real64 ThermDiff = WaterConductivity / (WaterDensity * WaterSpecHeat); @@ -842,7 +842,7 @@ void PondGroundHeatExchangerData::UpdatePondGroundHeatExchanger(EnergyPlusData & // Calculate the water side outlet conditions and set the // appropriate conditions on the correct HVAC node. - Real64 CpFluid = Fluid::GetSpecificHeatGlycol(state, + Real64 CpFluid = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, this->InletTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -898,12 +898,12 @@ void PondGroundHeatExchangerData::oneTimeInit(EnergyPlusData &state) if (errFlag) { ShowFatalError(state, "InitPondGroundHeatExchanger: Program terminated due to previous condition(s)."); } - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, DataPrecisionGlobals::constant_zero, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, DataPrecisionGlobals::constant_zero, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, diff --git a/src/EnergyPlus/PoweredInductionUnits.cc b/src/EnergyPlus/PoweredInductionUnits.cc index 76b8a1a0075..876a3f399cb 100644 --- a/src/EnergyPlus/PoweredInductionUnits.cc +++ b/src/EnergyPlus/PoweredInductionUnits.cc @@ -231,7 +231,6 @@ void GetPIUs(EnergyPlusData &state) using BranchNodeConnections::SetUpCompSets; using BranchNodeConnections::TestCompSet; - using Fluid::FindRefrigerant; using NodeInputManager::GetOnlySingleNode; using SteamCoils::GetCoilSteamInletNode; using WaterCoils::GetCoilWaterInletNode; @@ -323,7 +322,7 @@ void GetPIUs(EnergyPlusData &state) } case HtgCoilType::SteamAirHeating: { thisPIU.HCoil_PlantType = DataPlant::PlantEquipmentType::CoilSteamAirHeating; - thisPIU.HCoil_FluidIndex = FindRefrigerant(state, "Steam"); + thisPIU.HCoil_FluidIndex = FluidProperties::GetRefrigNum(state, "Steam"); if (thisPIU.HCoil_FluidIndex == 0) { ShowSevereError(state, format("{} Steam Properties for {} not found.", RoutineName, thisPIU.Name)); if (SteamMessageNeeded) { @@ -723,7 +722,7 @@ void InitPIU(EnergyPlusData &state, if (thisPIU.HotControlNode > 0) { // plant upgrade note? why no separate handling of steam coil? add it ? // local plant fluid density - Real64 const rho = Fluid::GetDensityGlycol(state, + Real64 const rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(thisPIU.HWplantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(thisPIU.HWplantLoc.loopNum).FluidIndex, @@ -853,8 +852,8 @@ void SizePIU(EnergyPlusData &state, int const PIUNum) // Using/Aliasing using namespace DataSizing; - using Fluid::GetDensityGlycol; - using Fluid::GetSpecificHeatGlycol; + using FluidProperties::GetDensityGlycol; + using FluidProperties::GetSpecificHeatGlycol; using SteamCoils::GetCoilSteamInletNode; using SteamCoils::GetCoilSteamOutletNode; using WaterCoils::GetCoilWaterInletNode; @@ -1308,12 +1307,12 @@ void SizePIU(EnergyPlusData &state, int const PIUNum) DesCoilLoad = PsyCpAirFnW(CoilOutHumRat) * DesMassFlow * (CoilOutTemp - CoilInTemp); Real64 constexpr TempSteamIn = 100.00; Real64 const EnthSteamInDry = - Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 1.0, thisPIU.HCoil_FluidIndex, RoutineName); + FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 1.0, thisPIU.HCoil_FluidIndex, RoutineName); Real64 const EnthSteamOutWet = - Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 0.0, thisPIU.HCoil_FluidIndex, RoutineName); + FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 0.0, thisPIU.HCoil_FluidIndex, RoutineName); Real64 const LatentHeatSteam = EnthSteamInDry - EnthSteamOutWet; Real64 const SteamDensity = - Fluid::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, thisPIU.HCoil_FluidIndex, RoutineName); + FluidProperties::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, thisPIU.HCoil_FluidIndex, RoutineName); int DummyWaterIndex = 1; Real64 const Cp = GetSpecificHeatGlycol( state, fluidNameWater, state.dataSize->PlantSizData(PltSizHeatNum).ExitTemp, DummyWaterIndex, RoutineName); @@ -1420,8 +1419,8 @@ void CalcSeriesPIU(EnergyPlusData &state, // Using/Aliasing using namespace DataZoneEnergyDemands; - using Fluid::GetDensityGlycol; - using Fluid::GetSpecificHeatGlycol; + using FluidProperties::GetDensityGlycol; + using FluidProperties::GetSpecificHeatGlycol; using HeatingCoils::SimulateHeatingCoilComponents; using MixerComponent::SimAirMixer; using PlantUtilities::SetComponentFlowRate; diff --git a/src/EnergyPlus/Pumps.cc b/src/EnergyPlus/Pumps.cc index 9799fa8d4ef..b22f78716f8 100644 --- a/src/EnergyPlus/Pumps.cc +++ b/src/EnergyPlus/Pumps.cc @@ -217,8 +217,8 @@ void GetPumpInput(EnergyPlusData &state) using Curve::GetCurveIndex; using Curve::GetCurveMinMaxValues; using DataSizing::AutoSize; - using Fluid::GetDensityGlycol; - using Fluid::GetSatDensityRefrig; + using FluidProperties::GetDensityGlycol; + using FluidProperties::GetSatDensityRefrig; using NodeInputManager::GetOnlySingleNode; using ScheduleManager::CheckScheduleValueMinMax; using ScheduleManager::GetScheduleIndex; @@ -1353,8 +1353,8 @@ void InitializePumps(EnergyPlusData &state, int const PumpNum) // This subroutine does one-time and begin-envrn inits for the pump // Using/Aliasing - using Fluid::GetDensityGlycol; - using Fluid::GetSatDensityRefrig; + using FluidProperties::GetDensityGlycol; + using FluidProperties::GetSatDensityRefrig; using PlantUtilities::InitComponentNodes; using PlantUtilities::ScanPlantLoopsForObject; @@ -1579,7 +1579,7 @@ void SetupPumpMinMaxFlows(EnergyPlusData &state, int const LoopNum, int const Pu // These values are also bounded by EMS overridable limit of max flow rate. // Using/Aliasing - using Fluid::GetDensityGlycol; + using FluidProperties::GetDensityGlycol; using PlantPressureSystem::ResolveLoopFlowVsPressure; using PlantUtilities::BoundValueToWithinTwoValues; using ScheduleManager::GetCurrentScheduleValue; @@ -1756,8 +1756,8 @@ void CalcPumps(EnergyPlusData &state, int const PumpNum, Real64 const FlowReques // Energy Calculations, ASHRAE, 1993, pp2-10 to 2-15 // Using/Aliasing - using Fluid::GetDensityGlycol; - using Fluid::GetSpecificHeatGlycol; + using FluidProperties::GetDensityGlycol; + using FluidProperties::GetSpecificHeatGlycol; using PlantUtilities::SetComponentFlowRate; using ScheduleManager::GetCurrentScheduleValue; @@ -2018,8 +2018,8 @@ void SizePump(EnergyPlusData &state, int const PumpNum) // Obtains flow rates from the plant sizing array. // Using/Aliasing - using Fluid::GetDensityGlycol; - using Fluid::GetSatDensityRefrig; + using FluidProperties::GetDensityGlycol; + using FluidProperties::GetSatDensityRefrig; // SUBROUTINE PARAMETER DEFINITIONS: Real64 constexpr StartTemp(100.0); // Standard Temperature across code to calculated Steam density @@ -2325,8 +2325,8 @@ void GetRequiredMassFlowRate(EnergyPlusData &state, Real64 &PumpMaxMassFlowRateVFDRange) { // Using/Aliasing - using Fluid::GetDensityGlycol; - using Fluid::GetSpecificHeatGlycol; + using FluidProperties::GetDensityGlycol; + using FluidProperties::GetSpecificHeatGlycol; using PlantPressureSystem::ResolveLoopFlowVsPressure; using PlantUtilities::SetComponentFlowRate; diff --git a/src/EnergyPlus/RefrigeratedCase.cc b/src/EnergyPlus/RefrigeratedCase.cc index d2e406cb097..ec4e4873db0 100644 --- a/src/EnergyPlus/RefrigeratedCase.cc +++ b/src/EnergyPlus/RefrigeratedCase.cc @@ -4658,10 +4658,10 @@ void GetRefrigerationInput(EnergyPlusData &state) TBrineInRated = TBrineOutRated + Secondary(SecondaryNum).TRangeDifRated; Real64 TBrineAverage = (TBrineOutRated + TBrineInRated) / 2.0; Secondary(SecondaryNum).TBrineAverage = TBrineAverage; - DensityBrineRated = Fluid::GetDensityGlycol( + DensityBrineRated = FluidProperties::GetDensityGlycol( state, Secondary(SecondaryNum).FluidName, TBrineAverage, Secondary(SecondaryNum).FluidID, TrackMessage); Secondary(SecondaryNum).DensityBrineRated = DensityBrineRated; - CpBrineRated = Fluid::GetSpecificHeatGlycol( + CpBrineRated = FluidProperties::GetSpecificHeatGlycol( state, Secondary(SecondaryNum).FluidName, TBrineAverage, Secondary(SecondaryNum).FluidID, TrackMessage); Secondary(SecondaryNum).CpBrineRated = CpBrineRated; @@ -4742,19 +4742,19 @@ void GetRefrigerationInput(EnergyPlusData &state) Secondary(SecondaryNum).CircRate = DefaultCircRate; if (!lNumericBlanks(10)) Secondary(SecondaryNum).CircRate = Numbers(10); - DensityPhaseChange = Fluid::GetSatDensityRefrig(state, + DensityPhaseChange = FluidProperties::GetSatDensityRefrig(state, Secondary(SecondaryNum).FluidName, Secondary(SecondaryNum).TCondense, 0.0, Secondary(SecondaryNum).FluidID, TrackMessageAlt); - DeltaHPhaseChange = Fluid::GetSatEnthalpyRefrig(state, + DeltaHPhaseChange = FluidProperties::GetSatEnthalpyRefrig(state, Secondary(SecondaryNum).FluidName, Secondary(SecondaryNum).TCondense, 1.0, Secondary(SecondaryNum).FluidID, TrackMessageAlt) - - Fluid::GetSatEnthalpyRefrig(state, + FluidProperties::GetSatEnthalpyRefrig(state, Secondary(SecondaryNum).FluidName, Secondary(SecondaryNum).TCondense, 0.0, @@ -6230,15 +6230,15 @@ void GetRefrigerationInput(EnergyPlusData &state) // Determine intercooler pressure and temperature at design conditions if (System(RefrigSysNum).NumStages == 2) { - Real64 PCond = Fluid::GetSatPressureRefrig(state, + Real64 PCond = FluidProperties::GetSatPressureRefrig(state, System(RefrigSysNum).RefrigerantName, Condenser(System(RefrigSysNum).CondenserNum(1)).RatedTCondense, System(RefrigSysNum).RefIndex, RoutineName); - Real64 PEvap = Fluid::GetSatPressureRefrig( + Real64 PEvap = FluidProperties::GetSatPressureRefrig( state, System(RefrigSysNum).RefrigerantName, System(RefrigSysNum).TEvapDesign, System(RefrigSysNum).RefIndex, RoutineName); System(RefrigSysNum).PIntercooler = std::sqrt(PCond * PEvap); - System(RefrigSysNum).TIntercooler = Fluid::GetSatTemperatureRefrig( + System(RefrigSysNum).TIntercooler = FluidProperties::GetSatTemperatureRefrig( state, System(RefrigSysNum).RefrigerantName, System(RefrigSysNum).PIntercooler, System(RefrigSysNum).RefIndex, RoutineName); } // NumStages @@ -6846,7 +6846,7 @@ void GetRefrigerationInput(EnergyPlusData &state) if (Compressor(CompNum).TransFlag) { // Calculate nominal capacity of transcritical Compressor Real64 GCOutletH = - Fluid::GetSupHeatEnthalpyRefrig(state, + FluidProperties::GetSupHeatEnthalpyRefrig(state, TransSystem(TransRefrigSysNum).RefrigerantName, GasCooler(TransSystem(TransRefrigSysNum).GasCoolerNum(1)).RatedOutletT, GasCooler(TransSystem(TransRefrigSysNum).GasCoolerNum(1)).RatedOutletP, @@ -6948,7 +6948,7 @@ void GetRefrigerationInput(EnergyPlusData &state) } // Check receiver temperature against minimum condensing temperature (from gas cooler input) and design evaporator temperatures - TransSystem(TransRefrigSysNum).TReceiver = Fluid::GetSatTemperatureRefrig( + TransSystem(TransRefrigSysNum).TReceiver = FluidProperties::GetSatTemperatureRefrig( state, TransSystem(TransRefrigSysNum).RefrigerantName, TransSystem(TransRefrigSysNum).PReceiver, RefrigIndex, RoutineNameNoColon); if (TransSystem(TransRefrigSysNum).TReceiver > GasCooler(TransSystem(TransRefrigSysNum).GasCoolerNum(NumGasCoolers)).MinCondTemp) { ShowWarningError(state, @@ -10651,7 +10651,7 @@ void InitRefrigerationPlantConnections(EnergyPlusData &state) ShowFatalError(state, "InitRefrigerationPlantConnections: Program terminated due to previous condition(s)."); } - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(Condenser(RefCondLoop).plantLoc.loopNum).FluidName, 20.0, state.dataPlnt->PlantLoop(Condenser(RefCondLoop).plantLoc.loopNum).FluidIndex, @@ -10682,7 +10682,7 @@ void InitRefrigerationPlantConnections(EnergyPlusData &state) ShowFatalError(state, "InitRefrigerationPlantConnections: Program terminated due to previous condition(s)."); } - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(RefrigRack(RefCompRackLoop).plantLoc.loopNum).FluidName, 20.0, state.dataPlnt->PlantLoop(RefrigRack(RefCompRackLoop).plantLoc.loopNum).FluidIndex, @@ -10707,7 +10707,7 @@ void InitRefrigerationPlantConnections(EnergyPlusData &state) for (int RefCondLoop = 1; RefCondLoop <= state.dataRefrigCase->NumRefrigCondensers; ++RefCondLoop) { if (Condenser(RefCondLoop).CondenserType != DataHeatBalance::RefrigCondenserType::Water) continue; - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(Condenser(RefCondLoop).plantLoc.loopNum).FluidName, 20.0, state.dataPlnt->PlantLoop(Condenser(RefCondLoop).plantLoc.loopNum).FluidIndex, @@ -10725,7 +10725,7 @@ void InitRefrigerationPlantConnections(EnergyPlusData &state) for (int RefCompRackLoop = 1; RefCompRackLoop <= state.dataRefrigCase->NumRefrigeratedRacks; ++RefCompRackLoop) { if (RefrigRack(RefCompRackLoop).CondenserType != DataHeatBalance::RefrigCondenserType::Water) continue; - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(RefrigRack(RefCompRackLoop).plantLoc.loopNum).FluidName, 20.0, state.dataPlnt->PlantLoop(RefrigRack(RefCompRackLoop).plantLoc.loopNum).FluidIndex, @@ -11612,12 +11612,12 @@ void RefrigCondenserData::simulate(EnergyPlusData &state, // Make demand request on first HVAC iteration // get cooling fluid properties - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(PlantLoc.loopNum).FluidName, this->InletTemp, state.dataPlnt->PlantLoop(PlantLoc.loopNum).FluidIndex, RoutineName); - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(PlantLoc.loopNum).FluidName, this->InletTemp, state.dataPlnt->PlantLoop(PlantLoc.loopNum).FluidIndex, @@ -11772,12 +11772,12 @@ void RefrigRackData::simulate(EnergyPlusData &state, // Make demand request on first HVAC iteration // get cooling fluid properties - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(PlantLoc.loopNum).FluidName, this->InletTemp, state.dataPlnt->PlantLoop(PlantLoc.loopNum).FluidIndex, RoutineName); - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(PlantLoc.loopNum).FluidName, this->InletTemp, state.dataPlnt->PlantLoop(PlantLoc.loopNum).FluidIndex, @@ -12159,9 +12159,9 @@ void SimulateDetailedRefrigerationSystems(EnergyPlusData &state) // only calc detailed system if have load (could be zero first time through if only load is cascade condenser) thisSys.TotalSystemLoad = thisSys.TotalCoolingLoad + thisSys.SumSecondaryLoopLoad + thisSys.SumMechSCLoad + thisSys.SumCascadeLoad; if (thisSys.TotalSystemLoad > 0.0) { - thisSys.CpSatVapEvap = Fluid::GetSatSpecificHeatRefrig( + thisSys.CpSatVapEvap = FluidProperties::GetSatSpecificHeatRefrig( state, thisSys.RefrigerantName, thisSys.TEvapNeeded, 1.0, thisSys.RefIndex, RoutineName); - thisSys.HCaseOut = Fluid::GetSatEnthalpyRefrig( + thisSys.HCaseOut = FluidProperties::GetSatEnthalpyRefrig( state, thisSys.RefrigerantName, thisSys.TEvapNeeded, 1.0, thisSys.RefIndex, RoutineName) + thisSys.CpSatVapEvap * CaseSuperheat; // Establish estimates to start solution loop @@ -12187,8 +12187,8 @@ void SimulateDetailedRefrigerationSystems(EnergyPlusData &state) // Produce first time step estimates, assume no subcoolers thisSys.HSatLiqCond = - Fluid::GetSatEnthalpyRefrig(state, thisSys.RefrigerantName, thisSys.TCondense, 0.0, thisSys.RefIndex, RoutineName); - thisSys.CpSatLiqCond = Fluid::GetSatSpecificHeatRefrig( + FluidProperties::GetSatEnthalpyRefrig(state, thisSys.RefrigerantName, thisSys.TCondense, 0.0, thisSys.RefIndex, RoutineName); + thisSys.CpSatLiqCond = FluidProperties::GetSatSpecificHeatRefrig( state, thisSys.RefrigerantName, thisSys.TCondense, 0.0, thisSys.RefIndex, RoutineName); thisSys.HCaseIn = thisSys.HSatLiqCond - thisSys.CpSatLiqCond * Condenser(thisSys.CondenserNum(1)).RatedSubcool; thisSys.RefMassFlowtoLoads = thisSys.TotalSystemLoad / (thisSys.HCaseOut - thisSys.HCaseIn); @@ -12475,24 +12475,24 @@ void SimulateDetailedTransRefrigSystems(EnergyPlusData &state) if (sys.TotalSystemLoad > 0.0) { if (sys.TransSysType == 2) { sys.CpSatVapEvapLT = - Fluid::GetSatSpecificHeatRefrig(state, sys.RefrigerantName, sys.TEvapNeededLT, 1.0, sys.RefIndex, RoutineName); + FluidProperties::GetSatSpecificHeatRefrig(state, sys.RefrigerantName, sys.TEvapNeededLT, 1.0, sys.RefIndex, RoutineName); sys.HCaseOutLT = - Fluid::GetSatEnthalpyRefrig(state, sys.RefrigerantName, sys.TEvapNeededLT, 1.0, sys.RefIndex, RoutineName) + + FluidProperties::GetSatEnthalpyRefrig(state, sys.RefrigerantName, sys.TEvapNeededLT, 1.0, sys.RefIndex, RoutineName) + sys.CpSatVapEvapLT * TransCaseSuperheat; } sys.CpSatVapEvapMT = - Fluid::GetSatSpecificHeatRefrig(state, sys.RefrigerantName, sys.TEvapNeededMT, 1.0, sys.RefIndex, RoutineName); + FluidProperties::GetSatSpecificHeatRefrig(state, sys.RefrigerantName, sys.TEvapNeededMT, 1.0, sys.RefIndex, RoutineName); sys.HCaseOutMT = - Fluid::GetSatEnthalpyRefrig(state, sys.RefrigerantName, sys.TEvapNeededMT, 1.0, sys.RefIndex, RoutineName) + + FluidProperties::GetSatEnthalpyRefrig(state, sys.RefrigerantName, sys.TEvapNeededMT, 1.0, sys.RefIndex, RoutineName) + sys.CpSatVapEvapMT * TransCaseSuperheat; // Produce first time step estimates. // Assume no subcoolers and neglect flow through bypass. - sys.TReceiver = Fluid::GetSatTemperatureRefrig(state, sys.RefrigerantName, sys.PReceiver, sys.RefIndex, RoutineName); + sys.TReceiver = FluidProperties::GetSatTemperatureRefrig(state, sys.RefrigerantName, sys.PReceiver, sys.RefIndex, RoutineName); sys.HSatLiqReceiver = - Fluid::GetSatEnthalpyRefrig(state, sys.RefrigerantName, sys.TReceiver, 0.0, sys.RefIndex, RoutineName); + FluidProperties::GetSatEnthalpyRefrig(state, sys.RefrigerantName, sys.TReceiver, 0.0, sys.RefIndex, RoutineName); sys.CpSatLiqReceiver = - Fluid::GetSatSpecificHeatRefrig(state, sys.RefrigerantName, sys.TReceiver, 0.0, sys.RefIndex, RoutineName); + FluidProperties::GetSatSpecificHeatRefrig(state, sys.RefrigerantName, sys.TReceiver, 0.0, sys.RefIndex, RoutineName); sys.HCaseInMT = sys.HSatLiqReceiver; sys.HCaseInLT = sys.HSatLiqReceiver; sys.RefMassFlowtoLTLoads = 0.0; @@ -13211,7 +13211,7 @@ void TransRefrigSystemData::CalcGasCooler(EnergyPlusData &state, int const SysNu if (cooler.PGasCoolerOut < 7.5e6) { // Ensure gas cooler pressure is at least 7.5 MPa for transcritical operation cooler.PGasCoolerOut = 7.5e6; } - cooler.HGasCoolerOut = Fluid::GetSupHeatEnthalpyRefrig( + cooler.HGasCoolerOut = FluidProperties::GetSupHeatEnthalpyRefrig( state, this->RefrigerantName, cooler.TGasCoolerOut, cooler.PGasCoolerOut, this->RefIndex, RoutineName); cooler.TransOpFlag = true; } else { // Gas cooler in subcritical operation @@ -13219,23 +13219,23 @@ void TransRefrigSystemData::CalcGasCooler(EnergyPlusData &state, int const SysNu if (cooler.TGasCoolerOut > 30.978) { // Gas temperature should be less than critical temperature cooler.PGasCoolerOut = 7.2e6; // Fix the pressure to be subcritical cooler.TGasCoolerOut = - Fluid::GetSatTemperatureRefrig(state, this->RefrigerantName, cooler.PGasCoolerOut, this->RefIndex, RoutineName); + FluidProperties::GetSatTemperatureRefrig(state, this->RefrigerantName, cooler.PGasCoolerOut, this->RefIndex, RoutineName); } else if (cooler.TGasCoolerOut > cooler.MinCondTemp) { // Allow condensing temperature to float above the minimum cooler.PGasCoolerOut = - Fluid::GetSatPressureRefrig(state, this->RefrigerantName, cooler.TGasCoolerOut, this->RefIndex, RoutineName); + FluidProperties::GetSatPressureRefrig(state, this->RefrigerantName, cooler.TGasCoolerOut, this->RefIndex, RoutineName); } else { // Don't allow condensing temperature to drop below minimum cooler.TGasCoolerOut = cooler.MinCondTemp; cooler.PGasCoolerOut = - Fluid::GetSatPressureRefrig(state, this->RefrigerantName, cooler.TGasCoolerOut, this->RefIndex, RoutineName); + FluidProperties::GetSatPressureRefrig(state, this->RefrigerantName, cooler.TGasCoolerOut, this->RefIndex, RoutineName); } cooler.HGasCoolerOut = - Fluid::GetSatEnthalpyRefrig(state, this->RefrigerantName, cooler.TGasCoolerOut, 0.0, this->RefIndex, RoutineName); + FluidProperties::GetSatEnthalpyRefrig(state, this->RefrigerantName, cooler.TGasCoolerOut, 0.0, this->RefIndex, RoutineName); cooler.TransOpFlag = false; } // (OutDbTemp > TransitionTemperature) if (cooler.TGasCoolerOut < 30.978) { cooler.CpGasCoolerOut = - Fluid::GetSatSpecificHeatRefrig(state, this->RefrigerantName, cooler.TGasCoolerOut, 0.0, this->RefIndex, RoutineName); + FluidProperties::GetSatSpecificHeatRefrig(state, this->RefrigerantName, cooler.TGasCoolerOut, 0.0, this->RefIndex, RoutineName); } else { cooler.CpGasCoolerOut = 0.0; } @@ -13385,11 +13385,11 @@ void RefrigSystemData::CalculateCompressors(EnergyPlusData &state) TsatforPdisch = this->TCondense + DelTDischPipes; // need (Psat of (Tcond + delT corresponding to delP disch Pipes)) TsatforPsuct = this->TEvapNeeded - DelTSuctPipes; // need (Psat of (Tevap - delT corresponding to del P suct Pipes)) HsatVaporforTevapneeded = - Fluid::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TEvapNeeded, 1.0, this->RefIndex, RoutineName); + FluidProperties::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TEvapNeeded, 1.0, this->RefIndex, RoutineName); this->HSatLiqCond = - Fluid::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TCondense, 0.0, this->RefIndex, RoutineName); + FluidProperties::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TCondense, 0.0, this->RefIndex, RoutineName); this->CpSatLiqCond = - Fluid::GetSatSpecificHeatRefrig(state, this->RefrigerantName, this->TCondense, 0.0, this->RefIndex, RoutineName); + FluidProperties::GetSatSpecificHeatRefrig(state, this->RefrigerantName, this->TCondense, 0.0, this->RefIndex, RoutineName); // HCaseIn is a function of the condenser rated subcooling, not the compressor rated subcooling // TCompIn needs to include case superheat as well as Temp change from lshx subcoolers // Calculate both here unless set previously by subcooler subroutine @@ -13403,23 +13403,23 @@ void RefrigSystemData::CalculateCompressors(EnergyPlusData &state) } else { // subcooler subroutine has been called to calc TCompIn and HCaseIn this->HCompIn = this->HCaseOut + this->CpSatVapEvap * (this->TCompIn - (this->TEvapNeeded + CaseSuperheat)); } // whether or not subcooler routine used - PSuction = Fluid::GetSatPressureRefrig(state, this->RefrigerantName, TsatforPsuct, this->RefIndex, RoutineName); + PSuction = FluidProperties::GetSatPressureRefrig(state, this->RefrigerantName, TsatforPsuct, this->RefIndex, RoutineName); NumComps = this->NumCompressors; } else { // Low-stage side of two-stage system - PCond = Fluid::GetSatPressureRefrig(state, this->RefrigerantName, this->TCondense, this->RefIndex, RoutineName); - PEvap = Fluid::GetSatPressureRefrig(state, this->RefrigerantName, this->TEvapNeeded, this->RefIndex, RoutineName); + PCond = FluidProperties::GetSatPressureRefrig(state, this->RefrigerantName, this->TCondense, this->RefIndex, RoutineName); + PEvap = FluidProperties::GetSatPressureRefrig(state, this->RefrigerantName, this->TEvapNeeded, this->RefIndex, RoutineName); this->PIntercooler = std::sqrt(PCond * PEvap); this->TIntercooler = - Fluid::GetSatTemperatureRefrig(state, this->RefrigerantName, this->PIntercooler, this->RefIndex, RoutineName); + FluidProperties::GetSatTemperatureRefrig(state, this->RefrigerantName, this->PIntercooler, this->RefIndex, RoutineName); NeededCapacity = NeededCapacity_base; // because compressor capacity rated from txv to comp inlet TsatforPdisch = this->TIntercooler + DelTDischPipes; // need (Psat of (Tinter + delT corresponding to delP disch Pipes)) TsatforPsuct = this->TEvapNeeded - DelTSuctPipes; // need (Psat of (Tevap - delT corresponding to del P suct Pipes)) HsatVaporforTevapneeded = - Fluid::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TEvapNeeded, 1.0, this->RefIndex, RoutineName); + FluidProperties::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TEvapNeeded, 1.0, this->RefIndex, RoutineName); this->HSatLiqCond = - Fluid::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TCondense, 0.0, this->RefIndex, RoutineName); + FluidProperties::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TCondense, 0.0, this->RefIndex, RoutineName); this->CpSatLiqCond = - Fluid::GetSatSpecificHeatRefrig(state, this->RefrigerantName, this->TCondense, 0.0, this->RefIndex, RoutineName); + FluidProperties::GetSatSpecificHeatRefrig(state, this->RefrigerantName, this->TCondense, 0.0, this->RefIndex, RoutineName); // HCaseIn is a function of the condenser rated subcooling, not the compressor rated subcooling // TCompIn needs to include case superheat as well as Temp change from lshx subcoolers // Calculate both here unless set previously by subcooler subroutine @@ -13427,7 +13427,7 @@ void RefrigSystemData::CalculateCompressors(EnergyPlusData &state) if (this->NumSubcoolers == 0) { // No subcooler on this system if (this->IntercoolerType == 1) { // Flash Intercooler this->HCaseIn = - Fluid::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TIntercooler, 0.0, this->RefIndex, RoutineName); + FluidProperties::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TIntercooler, 0.0, this->RefIndex, RoutineName); this->TLiqInActual = this->TIntercooler; } else if (this->IntercoolerType == 2) { // Shell-and-Coil Intercooler this->TLiqInActual = this->TCondense - Condenser1.RatedSubcool - @@ -13439,7 +13439,7 @@ void RefrigSystemData::CalculateCompressors(EnergyPlusData &state) } else { // subcooler subroutine has been called to calc TCompIn and HCaseIn this->HCompIn = this->HCaseOut + this->CpSatVapEvap * (this->TCompIn - (this->TEvapNeeded + CaseSuperheat)); } // whether or not subcooler routine used - PSuction = Fluid::GetSatPressureRefrig(state, this->RefrigerantName, TsatforPsuct, this->RefIndex, RoutineName); + PSuction = FluidProperties::GetSatPressureRefrig(state, this->RefrigerantName, TsatforPsuct, this->RefIndex, RoutineName); NumComps = this->NumCompressors; } // NumStages } else { // Two-stage system, high-stage side @@ -13447,24 +13447,24 @@ void RefrigSystemData::CalculateCompressors(EnergyPlusData &state) TsatforPdisch = this->TCondense + DelTDischPipes; TsatforPsuct = this->TIntercooler; HsatVaporforTevapneeded = - Fluid::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TIntercooler, 1.0, this->RefIndex, RoutineName); - // HSatLiqCond = Fluid::GetSatEnthalpyRefrig(state, RefrigerantName, TCondense, 0.0, RefIndex, + FluidProperties::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TIntercooler, 1.0, this->RefIndex, RoutineName); + // HSatLiqCond = FluidProperties::GetSatEnthalpyRefrig(state, RefrigerantName, TCondense, 0.0, RefIndex, // RoutineName //); ////Autodesk:Tuned These don't change for 2nd stage - // CpSatLiqCond = Fluid::GetSatSpecificHeatRefrig(RefrigerantName, TCondense, 0.0, RefIndex, + // CpSatLiqCond = FluidProperties::GetSatSpecificHeatRefrig(RefrigerantName, TCondense, 0.0, RefIndex, // RoutineName ); ////Autodesk:Tuned These don't change for 2nd stage this->HCaseIn = this->HSatLiqCond - this->CpSatLiqCond * Condenser1.RatedSubcool; this->TCompIn = this->TIntercooler; // System(SysNum)%TLiqInActual = System(SysNum)%TCondense-Condenser(System(SysNum)%CondenserNum(1))%RatedSubcool this->HCompIn = HsatVaporforTevapneeded; - PSuction = Fluid::GetSatPressureRefrig(state, this->RefrigerantName, TsatforPsuct, this->RefIndex, RoutineName); + PSuction = FluidProperties::GetSatPressureRefrig(state, this->RefrigerantName, TsatforPsuct, this->RefIndex, RoutineName); NumComps = this->NumHiStageCompressors; } // StageIndex // dispatch compressors to meet load, note they were listed in compressor list in dispatch order - DensityActual = Fluid::GetSupHeatDensityRefrig(state, + DensityActual = FluidProperties::GetSupHeatDensityRefrig(state, this->RefrigerantName, this->TCompIn, PSuction, @@ -13474,10 +13474,10 @@ void RefrigSystemData::CalculateCompressors(EnergyPlusData &state) if (this->NumStages == 2) { // Autodesk:Tuned Hoisted out of CompIndex loop if (StageIndex == 1) { HCaseInRated_base = - Fluid::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TIntercooler, 0.0, this->RefIndex, RoutineName); + FluidProperties::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TIntercooler, 0.0, this->RefIndex, RoutineName); } else if (StageIndex == 2) { HCompInRated_base = - Fluid::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TIntercooler, 1.0, this->RefIndex, RoutineName); + FluidProperties::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TIntercooler, 1.0, this->RefIndex, RoutineName); } } for (int CompIndex = 1; CompIndex <= NumComps; ++CompIndex) { @@ -13542,7 +13542,7 @@ void RefrigSystemData::CalculateCompressors(EnergyPlusData &state) } // Compressor SuperheatRatingType CaseEnthalpyChangeRated = HCompInRated - HCaseInRated; - DensityRated = Fluid::GetSupHeatDensityRefrig(state, this->RefrigerantName, TempInRated, PSuction, this->RefIndex, RoutineName); + DensityRated = FluidProperties::GetSupHeatDensityRefrig(state, this->RefrigerantName, TempInRated, PSuction, this->RefIndex, RoutineName); // Adjust capacity and mass flow to reflect the specific volume change due to superheating and // the increase in capacity due to extra subcooling MassCorrection = DensityActual / DensityRated; @@ -13602,13 +13602,13 @@ void RefrigSystemData::CalculateCompressors(EnergyPlusData &state) this->HCompOut = this->HCompIn + this->TotCompPower / this->RefMassFlowComps; // error found 9/19/2011, was System(SysNum)%TotCompPower*LocalTimeStep*DataGlobals::SecInHour/System(SysNum)%RefMassFlowComps } else { // High-stage compressors (only for two-stage systems) - HHiStageCompIn = Fluid::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TIntercooler, 1.0, this->RefIndex, RoutineName); + HHiStageCompIn = FluidProperties::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TIntercooler, 1.0, this->RefIndex, RoutineName); this->HCompOut = HHiStageCompIn + this->TotHiStageCompPower / this->RefMassFlowHiStageComps; } // Calculate superheat energy available for desuperheaters - HSatVapCondense = Fluid::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TCondense, 1.0, this->RefIndex, RoutineName); - CpSatVapCondense = Fluid::GetSatSpecificHeatRefrig(state, this->RefrigerantName, this->TCondense, 1.0, this->RefIndex, RoutineName); + HSatVapCondense = FluidProperties::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TCondense, 1.0, this->RefIndex, RoutineName); + CpSatVapCondense = FluidProperties::GetSatSpecificHeatRefrig(state, this->RefrigerantName, this->TCondense, 1.0, this->RefIndex, RoutineName); if (this->NumStages == 1) { // Single-stage systems state.dataHeatBal->HeatReclaimRefrigCondenser(CondID).AvailCapacity = this->RefMassFlowComps * (this->HCompOut - HSatVapCondense); } else { // Two-stage systems @@ -13736,10 +13736,10 @@ void TransRefrigSystemData::CalculateTransCompressors(EnergyPlusData &state) // Determine refrigerant properties at receiver this->CpSatLiqReceiver = - Fluid::GetSatSpecificHeatRefrig(state, this->RefrigerantName, this->TReceiver, 0.0, this->RefIndex, RoutineName); + FluidProperties::GetSatSpecificHeatRefrig(state, this->RefrigerantName, this->TReceiver, 0.0, this->RefIndex, RoutineName); // Enthalpy at the receiver bypass, J/kg - Real64 HReceiverBypass = Fluid::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TReceiver, 1.0, this->RefIndex, RoutineName); + Real64 HReceiverBypass = FluidProperties::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TReceiver, 1.0, this->RefIndex, RoutineName); // Determine refrigerant properties at low temperature (LT) loads (if present) // Dispatch low pressure (LP) compressors as necessary @@ -13751,12 +13751,12 @@ void TransRefrigSystemData::CalculateTransCompressors(EnergyPlusData &state) TsatforPsucLT = this->TEvapNeededLT; TsatforPdisLT = this->TEvapNeededMT; HsatVaporforTevapneededLT = - Fluid::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TEvapNeededLT, 1.0, this->RefIndex, RoutineName); + FluidProperties::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TEvapNeededLT, 1.0, this->RefIndex, RoutineName); HsatLiqforTevapNeededMT = - Fluid::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TEvapNeededMT, 0.0, this->RefIndex, RoutineName); - PSuctionLT = Fluid::GetSatPressureRefrig(state, this->RefrigerantName, TsatforPsucLT, this->RefIndex, RoutineName); + FluidProperties::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TEvapNeededMT, 0.0, this->RefIndex, RoutineName); + PSuctionLT = FluidProperties::GetSatPressureRefrig(state, this->RefrigerantName, TsatforPsucLT, this->RefIndex, RoutineName); DensityActualLT = - Fluid::GetSupHeatDensityRefrig(state, this->RefrigerantName, this->TCompInLP, PSuctionLT, this->RefIndex, RoutineName); + FluidProperties::GetSupHeatDensityRefrig(state, this->RefrigerantName, this->TCompInLP, PSuctionLT, this->RefIndex, RoutineName); TotalEnthalpyChangeActualLT = this->HCompInLP - this->HCaseInLT; // Dispatch low pressure (LP) compressors @@ -13785,7 +13785,7 @@ void TransRefrigSystemData::CalculateTransCompressors(EnergyPlusData &state) } break; case CompRatingType::LiquidTemperature: { // have rated liquid temperature stored in "RatedSubcool" HCaseInRatedLT = - Fluid::GetSatEnthalpyRefrig(state, this->RefrigerantName, compressor.RatedSubcool, 0.0, this->RefIndex, RoutineName); + FluidProperties::GetSatEnthalpyRefrig(state, this->RefrigerantName, compressor.RatedSubcool, 0.0, this->RefIndex, RoutineName); } break; default: break; @@ -13798,7 +13798,7 @@ void TransRefrigSystemData::CalculateTransCompressors(EnergyPlusData &state) case CompRatingType::ReturnGasTemperature: { // have rated compressor inlet temperature stored in // "CompRatingType::Superheat" TempInRatedLP = compressor.RatedSuperheat; - HCompInRatedLP = Fluid::GetSupHeatEnthalpyRefrig( + HCompInRatedLP = FluidProperties::GetSupHeatEnthalpyRefrig( state, this->RefrigerantName, compressor.RatedSuperheat, PSuctionLT, this->RefIndex, RoutineName); } break; default: @@ -13807,7 +13807,7 @@ void TransRefrigSystemData::CalculateTransCompressors(EnergyPlusData &state) CaseEnthalpyChangeRatedLT = HCompInRatedLP - HCaseInRatedLT; DensityRatedLP = - Fluid::GetSupHeatDensityRefrig(state, this->RefrigerantName, TempInRatedLP, PSuctionLT, this->RefIndex, RoutineName); + FluidProperties::GetSupHeatDensityRefrig(state, this->RefrigerantName, TempInRatedLP, PSuctionLT, this->RefIndex, RoutineName); // Adjust capacity and mass flow to reflect the specific volume change due to superheating and // the increase in capacity due to extra subcooling @@ -13849,10 +13849,10 @@ void TransRefrigSystemData::CalculateTransCompressors(EnergyPlusData &state) } else { // Transcritical system is operating in subcritical region TsatforPdisMT = GasCooler(this->GasCoolerNum(1)).TGasCoolerOut; } - PSuctionMT = Fluid::GetSatPressureRefrig(state, this->RefrigerantName, TsatforPsucMT, this->RefIndex, RoutineName); + PSuctionMT = FluidProperties::GetSatPressureRefrig(state, this->RefrigerantName, TsatforPsucMT, this->RefIndex, RoutineName); PGCOutlet = GasCooler(this->GasCoolerNum(1)).PGasCoolerOut; HsatVaporforTevapneededMT = - Fluid::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TEvapNeededMT, 1.0, this->RefIndex, RoutineName); + FluidProperties::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TEvapNeededMT, 1.0, this->RefIndex, RoutineName); this->HCaseInMT = this->HSatLiqReceiver; // Enthalpy of refrigerant after leaving medium temperature loads and low pressure compressors @@ -13869,7 +13869,7 @@ void TransRefrigSystemData::CalculateTransCompressors(EnergyPlusData &state) for (Iter = 1; Iter <= 15; ++Iter) { // Maximum of 15 iterations to find receiver quality QualityReceiver = (Xu + Xl) / 2.0; Real64 Hnew = - Fluid::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TReceiver, QualityReceiver, this->RefIndex, RoutineName); + FluidProperties::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TReceiver, QualityReceiver, this->RefIndex, RoutineName); // estimated QualityReceiver is too high if (Hnew > (GasCooler(this->GasCoolerNum(1)).HGasCoolerOut + this->DelHSubcoolerDis)) { @@ -13890,11 +13890,11 @@ void TransRefrigSystemData::CalculateTransCompressors(EnergyPlusData &state) (this->RefMassFlowtoLTLoads + this->RefMassFlowtoMTLoads + this->RefMassFlowReceiverBypass); // Iterate to find the suction temperature entering subcooler - Xl = Fluid::GetSatTemperatureRefrig(state, this->RefrigerantName, PSuctionMT, this->RefIndex, RoutineName); + Xl = FluidProperties::GetSatTemperatureRefrig(state, this->RefrigerantName, PSuctionMT, this->RefIndex, RoutineName); Xu = Xl + 50.0; for (Iter = 1; Iter <= 15; ++Iter) { // Maximum of 15 iterations Xnew = (Xu + Xl) / 2.0; - Real64 Hnew = Fluid::GetSupHeatEnthalpyRefrig(state, this->RefrigerantName, Xnew, PSuctionMT, this->RefIndex, RoutineName); + Real64 Hnew = FluidProperties::GetSupHeatEnthalpyRefrig(state, this->RefrigerantName, Xnew, PSuctionMT, this->RefIndex, RoutineName); if (Hnew > this->HCompInHP) { // xnew is too high Xu = Xnew; } else { // xnew is too low @@ -13905,7 +13905,7 @@ void TransRefrigSystemData::CalculateTransCompressors(EnergyPlusData &state) TSubcoolerColdIn = Xnew; // Modify receiver inlet enthalpy and HP compressor inlet enthalpy to account for subcooler - HIdeal = Fluid::GetSupHeatEnthalpyRefrig( + HIdeal = FluidProperties::GetSupHeatEnthalpyRefrig( state, this->RefrigerantName, GasCooler(this->GasCoolerNum(1)).TGasCoolerOut, PSuctionMT, this->RefIndex, RoutineName); // Only use subcooler if suction gas inlet temperature less than gas cooler outlet temperature if (TSubcoolerColdIn < GasCooler(this->GasCoolerNum(1)).TGasCoolerOut) { @@ -13918,11 +13918,11 @@ void TransRefrigSystemData::CalculateTransCompressors(EnergyPlusData &state) this->DelHSubcoolerDis = -this->DelHSubcoolerSuc; // Iterate to find the temperature at the inlet of the high pressure (HP) compressors - Xl = Fluid::GetSatTemperatureRefrig(state, this->RefrigerantName, PSuctionMT, this->RefIndex, RoutineName); + Xl = FluidProperties::GetSatTemperatureRefrig(state, this->RefrigerantName, PSuctionMT, this->RefIndex, RoutineName); Xu = Xl + 50.0; for (Iter = 1; Iter <= 15; ++Iter) { // Maximum of 15 iterations Xnew = (Xu + Xl) / 2.0; - Real64 Hnew = Fluid::GetSupHeatEnthalpyRefrig(state, this->RefrigerantName, Xnew, PSuctionMT, this->RefIndex, RoutineName); + Real64 Hnew = FluidProperties::GetSupHeatEnthalpyRefrig(state, this->RefrigerantName, Xnew, PSuctionMT, this->RefIndex, RoutineName); if (Hnew > this->HCompInHP) { // xnew is too high Xu = Xnew; } else { // xnew is too low @@ -13936,7 +13936,7 @@ void TransRefrigSystemData::CalculateTransCompressors(EnergyPlusData &state) // to constitute the "load". The actual and rated conditions at the exit of the gas cooler and the inlet of the // HP compressors are used for capacity correction calculations. DensityActualMT = - Fluid::GetSupHeatDensityRefrig(state, this->RefrigerantName, this->TCompInHP, PSuctionMT, this->RefIndex, RoutineName); + FluidProperties::GetSupHeatDensityRefrig(state, this->RefrigerantName, this->TCompInHP, PSuctionMT, this->RefIndex, RoutineName); TotalEnthalpyChangeActualMT = this->HCompInHP - GasCooler(this->GasCoolerNum(1)).HGasCoolerOut; // Dispatch HP compressors @@ -13975,7 +13975,7 @@ void TransRefrigSystemData::CalculateTransCompressors(EnergyPlusData &state) case CompRatingType::LiquidTemperature: { // have rated liquid temperature stored in "RatedSubcool" if (!GasCooler(this->GasCoolerNum(1)).TransOpFlag) { // Subcritical operation HCaseInRatedMT = - Fluid::GetSatEnthalpyRefrig(state, this->RefrigerantName, compressor.RatedSubcool, 0.0, this->RefIndex, RoutineName); + FluidProperties::GetSatEnthalpyRefrig(state, this->RefrigerantName, compressor.RatedSubcool, 0.0, this->RefIndex, RoutineName); } else { // Transcritical operation HCaseInRatedMT = GasCooler(this->GasCoolerNum(1)).HGasCoolerOut; } // (.NOT.GasCooler(SysNum)%TransOpFlag) @@ -13990,7 +13990,7 @@ void TransRefrigSystemData::CalculateTransCompressors(EnergyPlusData &state) } break; case CompRatingType::ReturnGasTemperature: { // have rated compressor inlet temperature stored in "RatedSuperheat" TempInRatedHP = compressor.RatedSuperheat; - HCompInRatedHP = Fluid::GetSupHeatEnthalpyRefrig( + HCompInRatedHP = FluidProperties::GetSupHeatEnthalpyRefrig( state, this->RefrigerantName, compressor.RatedSuperheat, PSuctionMT, this->RefIndex, RoutineName); } break; default: @@ -13999,7 +13999,7 @@ void TransRefrigSystemData::CalculateTransCompressors(EnergyPlusData &state) CaseEnthalpyChangeRatedMT = HCompInRatedHP - HCaseInRatedMT; DensityRatedHP = - Fluid::GetSupHeatDensityRefrig(state, this->RefrigerantName, TempInRatedHP, PSuctionMT, this->RefIndex, RoutineName); + FluidProperties::GetSupHeatDensityRefrig(state, this->RefrigerantName, TempInRatedHP, PSuctionMT, this->RefIndex, RoutineName); // Adjust capacity and mass flow to reflect the specific volume change due to superheating and // the increase in capacity due to extra subcooling MassCorrectionMT = DensityActualMT / DensityRatedHP; @@ -14080,25 +14080,25 @@ void RefrigSystemData::CalculateSubcoolers(EnergyPlusData &state) // HCaseIn has to be recalculated as the starting point for the subcoolers here because // of the multiple number of iterations through this subroutine and because Tcondense is evolving. if (this->NumStages == 1) { // Single-stage compression system - this->HSatLiqCond = Fluid::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TCondense, 0.0, this->RefIndex, RoutineName); + this->HSatLiqCond = FluidProperties::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TCondense, 0.0, this->RefIndex, RoutineName); this->CpSatLiqCond = - Fluid::GetSatSpecificHeatRefrig(state, this->RefrigerantName, this->TCondense, 0.0, this->RefIndex, RoutineName); + FluidProperties::GetSatSpecificHeatRefrig(state, this->RefrigerantName, this->TCondense, 0.0, this->RefIndex, RoutineName); this->HCaseIn = this->HSatLiqCond - this->CpSatLiqCond * Condenser(this->CondenserNum(1)).RatedSubcool; // Two-stage compression with flash intercooler } else if (this->NumStages == 2 && this->IntercoolerType == 1) { - this->HSatLiqCond = Fluid::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TCondense, 0.0, this->RefIndex, RoutineName); + this->HSatLiqCond = FluidProperties::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TCondense, 0.0, this->RefIndex, RoutineName); this->CpSatLiqCond = - Fluid::GetSatSpecificHeatRefrig(state, this->RefrigerantName, this->TCondense, 0.0, this->RefIndex, RoutineName); - this->HCaseIn = Fluid::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TIntercooler, 0.0, this->RefIndex, RoutineName); + FluidProperties::GetSatSpecificHeatRefrig(state, this->RefrigerantName, this->TCondense, 0.0, this->RefIndex, RoutineName); + this->HCaseIn = FluidProperties::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TIntercooler, 0.0, this->RefIndex, RoutineName); // Two-stage compression with shell-and-coil intercooler } else if (this->NumStages == 2 && this->IntercoolerType == 2) { TLiqInActualLocal = this->TCondense - Condenser(this->CondenserNum(1)).RatedSubcool - this->IntercoolerEffectiveness * (this->TCondense - Condenser(this->CondenserNum(1)).RatedSubcool - this->TIntercooler); - this->HSatLiqCond = Fluid::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TCondense, 0.0, this->RefIndex, RoutineName); + this->HSatLiqCond = FluidProperties::GetSatEnthalpyRefrig(state, this->RefrigerantName, this->TCondense, 0.0, this->RefIndex, RoutineName); this->CpSatLiqCond = - Fluid::GetSatSpecificHeatRefrig(state, this->RefrigerantName, this->TCondense, 0.0, this->RefIndex, RoutineName); + FluidProperties::GetSatSpecificHeatRefrig(state, this->RefrigerantName, this->TCondense, 0.0, this->RefIndex, RoutineName); this->HCaseIn = this->HSatLiqCond - this->CpSatLiqCond * (this->TCondense - TLiqInActualLocal); } // NumStages and IntercoolerType diff --git a/src/EnergyPlus/ReportCoilSelection.cc b/src/EnergyPlus/ReportCoilSelection.cc index e1a237c4225..e46290b92e2 100644 --- a/src/EnergyPlus/ReportCoilSelection.cc +++ b/src/EnergyPlus/ReportCoilSelection.cc @@ -807,25 +807,25 @@ void ReportCoilSelection::doFinalProcessingOfCoilData(EnergyPlusData &state) c->plantLoopName = state.dataPlnt->PlantLoop(c->waterLoopNum).Name; if (state.dataSize->PlantSizData(c->pltSizNum).LoopType != DataSizing::TypeOfPlantLoop::Steam) { - c->rhoFluid = Fluid::GetDensityGlycol(state, + c->rhoFluid = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(c->waterLoopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(c->waterLoopNum).FluidIndex, "ReportCoilSelection::doFinalProcessingOfCoilData"); - c->cpFluid = Fluid::GetSpecificHeatGlycol(state, + c->cpFluid = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(c->waterLoopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(c->waterLoopNum).FluidIndex, "ReportCoilSelection::doFinalProcessingOfCoilData"); } else { // steam loop - c->rhoFluid = Fluid::GetSatDensityRefrig(state, + c->rhoFluid = FluidProperties::GetSatDensityRefrig(state, state.dataPlnt->PlantLoop(c->waterLoopNum).FluidName, 100.0, 1.0, state.dataPlnt->PlantLoop(c->waterLoopNum).FluidIndex, "ReportCoilSelection::doFinalProcessingOfCoilData"); - c->cpFluid = Fluid::GetSatSpecificHeatRefrig(state, + c->cpFluid = FluidProperties::GetSatSpecificHeatRefrig(state, state.dataPlnt->PlantLoop(c->waterLoopNum).FluidName, 100.0, 0.0, @@ -1080,25 +1080,25 @@ void ReportCoilSelection::setCoilWaterFlowPltSizNum(EnergyPlusData &state, if (c->waterLoopNum > 0 && c->pltSizNum > 0) { if (state.dataSize->PlantSizData(c->pltSizNum).LoopType != DataSizing::TypeOfPlantLoop::Steam) { - c->rhoFluid = Fluid::GetDensityGlycol(state, + c->rhoFluid = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(c->waterLoopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(c->waterLoopNum).FluidIndex, "ReportCoilSelection::setCoilWaterFlow"); - c->cpFluid = Fluid::GetSpecificHeatGlycol(state, + c->cpFluid = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(c->waterLoopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(c->waterLoopNum).FluidIndex, "ReportCoilSelection::setCoilWaterFlow"); } else { // steam loop - c->rhoFluid = Fluid::GetSatDensityRefrig(state, + c->rhoFluid = FluidProperties::GetSatDensityRefrig(state, state.dataPlnt->PlantLoop(c->waterLoopNum).FluidName, 100.0, 1.0, state.dataPlnt->PlantLoop(c->waterLoopNum).FluidIndex, "ReportCoilSelection::setCoilWaterFlow"); - c->cpFluid = Fluid::GetSatSpecificHeatRefrig(state, + c->cpFluid = FluidProperties::GetSatSpecificHeatRefrig(state, state.dataPlnt->PlantLoop(c->waterLoopNum).FluidName, 100.0, 0.0, diff --git a/src/EnergyPlus/RoomAirModelUserTempPattern.cc b/src/EnergyPlus/RoomAirModelUserTempPattern.cc index e97ff494632..6a0738ea74e 100644 --- a/src/EnergyPlus/RoomAirModelUserTempPattern.cc +++ b/src/EnergyPlus/RoomAirModelUserTempPattern.cc @@ -300,7 +300,7 @@ void FigureHeightPattern(EnergyPlusData &state, int const PattrnID, int const Zo // treat profile as lookup table and interpolate // Using/Aliasing - using Fluid::FindArrayIndex; + using FluidProperties::FindArrayIndex; // SUBROUTINE LOCAL VARIABLE DECLARATIONS: diff --git a/src/EnergyPlus/SetPointManager.cc b/src/EnergyPlus/SetPointManager.cc index 43c383e07b0..80d0dfaaf40 100644 --- a/src/EnergyPlus/SetPointManager.cc +++ b/src/EnergyPlus/SetPointManager.cc @@ -3880,7 +3880,7 @@ void SPMReturnWaterTemp::calculate(EnergyPlusData &state) // fluidIndex = state.dataPlnt->PlantLoop(this->plantLoopNum).FluidIndex; // // we don't need fluid names since we have a real index, so just pass in the temperature and get properties // Real64 const avgTemp = (returnNode.Temp + supplyNode.Temp) / 2; - // Real64 const cp = Fluid::GetSpecificHeatGlycol(state, "", avgTemp, fluidIndex, "ReturnWaterChWSetPointManager::calculate"); + // Real64 const cp = FluidProperties::GetSpecificHeatGlycol(state, "", avgTemp, fluidIndex, "ReturnWaterChWSetPointManager::calculate"); // Real64 const Qdemand = mdot * cp * deltaT; // check for strange conditions diff --git a/src/EnergyPlus/SimulationManager.cc b/src/EnergyPlus/SimulationManager.cc index 2723fbc4c3d..c65add180fb 100644 --- a/src/EnergyPlus/SimulationManager.cc +++ b/src/EnergyPlus/SimulationManager.cc @@ -2616,8 +2616,6 @@ namespace SimulationManager { // Using/Aliasing // using SQLiteProcedures::CreateSQLiteDatabase; - using Fluid::FindGlycol; - state.dataGlobal->DoingInputProcessing = false; state.dataInputProcessing->inputProcessor->preProcessorCheck( diff --git a/src/EnergyPlus/SingleDuct.cc b/src/EnergyPlus/SingleDuct.cc index 5855485f416..2bcacb8ea80 100644 --- a/src/EnergyPlus/SingleDuct.cc +++ b/src/EnergyPlus/SingleDuct.cc @@ -2564,7 +2564,7 @@ void SingleDuctAirTerminal::InitSys(EnergyPlusData &state, bool const FirstHVACI this->MassFlowDiff = 1.0e-10 * this->AirMassFlowRateMax; if (this->HWplantLoc.loopNum > 0 && this->ReheatComp_Num != HeatingCoilType::SteamAirHeating) { // protect early calls before plant is setup - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->HWplantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->HWplantLoc.loopNum).FluidIndex, @@ -2582,7 +2582,7 @@ void SingleDuctAirTerminal::InitSys(EnergyPlusData &state, bool const FirstHVACI if (this->ReheatComp_Num == HeatingCoilType::SteamAirHeating) { SteamTemp = 100.0; - SteamDensity = Fluid::GetSatDensityRefrig(state, fluidNameSteam, SteamTemp, 1.0, this->FluidIndex, RoutineNameFull); + SteamDensity = FluidProperties::GetSatDensityRefrig(state, fluidNameSteam, SteamTemp, 1.0, this->FluidIndex, RoutineNameFull); this->MaxReheatSteamFlow = SteamDensity * this->MaxReheatSteamVolFlow; this->MinReheatSteamFlow = SteamDensity * this->MinReheatSteamVolFlow; } @@ -2784,8 +2784,8 @@ void SingleDuctAirTerminal::SizeSys(EnergyPlusData &state) // Obtains flow rates from the zone or system sizing arrays. // Using/Aliasing - using Fluid::GetDensityGlycol; - using Fluid::GetSpecificHeatGlycol; + using FluidProperties::GetDensityGlycol; + using FluidProperties::GetSpecificHeatGlycol; using General::SafeDivide; using PlantUtilities::MyPlantSizingIndex; using SteamCoils::GetCoilSteamInletNode; @@ -3637,10 +3637,10 @@ void SingleDuctAirTerminal::SizeSys(EnergyPlusData &state) (state.dataSingleDuct->ZoneDesTempSS - state.dataSingleDuct->CoilInTempSS); if (state.dataSingleDuct->DesCoilLoadSS >= SmallLoad) { TempSteamIn = 100.00; - EnthSteamInDry = Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 1.0, this->FluidIndex, RoutineNameFull); - EnthSteamOutWet = Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 0.0, this->FluidIndex, RoutineNameFull); + EnthSteamInDry = FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 1.0, this->FluidIndex, RoutineNameFull); + EnthSteamOutWet = FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 0.0, this->FluidIndex, RoutineNameFull); LatentHeatSteam = EnthSteamInDry - EnthSteamOutWet; - SteamDensity = Fluid::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, this->FluidIndex, RoutineNameFull); + SteamDensity = FluidProperties::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, this->FluidIndex, RoutineNameFull); Cp = GetSpecificHeatGlycol(state, fluidNameWater, diff --git a/src/EnergyPlus/SolarCollectors.cc b/src/EnergyPlus/SolarCollectors.cc index 15efc78d5b7..20efa9010b7 100644 --- a/src/EnergyPlus/SolarCollectors.cc +++ b/src/EnergyPlus/SolarCollectors.cc @@ -937,7 +937,7 @@ namespace SolarCollectors { if (state.dataGlobal->BeginEnvrnFlag && this->Init) { // Clear node initial conditions if (this->VolFlowRateMax > 0) { - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -1115,7 +1115,7 @@ namespace SolarCollectors { Real64 massFlowRate = this->MassFlowRate; // Specific heat of collector fluid (J/kg-K) - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, inletTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -1405,14 +1405,14 @@ namespace SolarCollectors { Real64 massFlowRate = this->MassFlowRate; // Specific heat of collector fluid (J/kg-K) - Real64 Cpw = Fluid::GetSpecificHeatGlycol(state, + Real64 Cpw = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, inletTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, RoutineName); // density of collector fluid (kg/m3) - Real64 Rhow = Fluid::GetDensityGlycol(state, + Real64 Rhow = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, inletTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, @@ -2049,17 +2049,17 @@ namespace SolarCollectors { Real64 DeltaT = std::abs(TAbsorber - TWater); Real64 TReference = TAbsorber - 0.25 * (TAbsorber - TWater); // record fluid prop index for water - int WaterIndex = Fluid::FindGlycol(state, fluidNameWater); + int WaterIndex = FluidProperties::GetGlycolNum(state, fluidNameWater); // find properties of water - always assume water - Real64 WaterSpecHeat = Fluid::GetSpecificHeatGlycol(state, fluidNameWater, max(TReference, 0.0), WaterIndex, CalledFrom); - Real64 CondOfWater = Fluid::GetConductivityGlycol(state, fluidNameWater, max(TReference, 0.0), WaterIndex, CalledFrom); - Real64 VisOfWater = Fluid::GetViscosityGlycol(state, fluidNameWater, max(TReference, 0.0), WaterIndex, CalledFrom); - Real64 DensOfWater = Fluid::GetDensityGlycol(state, fluidNameWater, max(TReference, 0.0), WaterIndex, CalledFrom); + Real64 WaterSpecHeat = FluidProperties::GetSpecificHeatGlycol(state, fluidNameWater, max(TReference, 0.0), WaterIndex, CalledFrom); + Real64 CondOfWater = FluidProperties::GetConductivityGlycol(state, fluidNameWater, max(TReference, 0.0), WaterIndex, CalledFrom); + Real64 VisOfWater = FluidProperties::GetViscosityGlycol(state, fluidNameWater, max(TReference, 0.0), WaterIndex, CalledFrom); + Real64 DensOfWater = FluidProperties::GetDensityGlycol(state, fluidNameWater, max(TReference, 0.0), WaterIndex, CalledFrom); Real64 PrOfWater = VisOfWater * WaterSpecHeat / CondOfWater; // Requires a different reference temperature for volumetric expansion coefficient TReference = TWater - 0.25 * (TWater - TAbsorber); - Real64 VolExpWater = -(Fluid::GetDensityGlycol(state, fluidNameWater, max(TReference, 10.0) + 5.0, WaterIndex, CalledFrom) - - Fluid::GetDensityGlycol(state, fluidNameWater, max(TReference, 10.0) - 5.0, WaterIndex, CalledFrom)) / + Real64 VolExpWater = -(FluidProperties::GetDensityGlycol(state, fluidNameWater, max(TReference, 10.0) + 5.0, WaterIndex, CalledFrom) - + FluidProperties::GetDensityGlycol(state, fluidNameWater, max(TReference, 10.0) - 5.0, WaterIndex, CalledFrom)) / (10.0 * DensOfWater); // Grashof number @@ -2116,7 +2116,7 @@ namespace SolarCollectors { PlantUtilities::SafeCopyPlantNode(state, this->InletNode, this->OutletNode); // Set outlet node variables that are possibly changed state.dataLoopNodes->Node(this->OutletNode).Temp = this->OutletTemp; - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, this->OutletTemp, state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, diff --git a/src/EnergyPlus/StandardRatings.cc b/src/EnergyPlus/StandardRatings.cc index eddcb2afa26..846600bf9ad 100644 --- a/src/EnergyPlus/StandardRatings.cc +++ b/src/EnergyPlus/StandardRatings.cc @@ -409,8 +409,8 @@ namespace StandardRatings { using namespace OutputReportPredefined; using Curve::CurveValue; using Curve::GetCurveName; - using Fluid::GetDensityGlycol; - using Fluid::GetSpecificHeatGlycol; + using FluidProperties::GetDensityGlycol; + using FluidProperties::GetSpecificHeatGlycol; using General::SolveRoot; Real64 constexpr Acc(0.0001); // Accuracy of result diff --git a/src/EnergyPlus/SteamBaseboardRadiator.cc b/src/EnergyPlus/SteamBaseboardRadiator.cc index fbe8a7a9c94..089fd60f2db 100644 --- a/src/EnergyPlus/SteamBaseboardRadiator.cc +++ b/src/EnergyPlus/SteamBaseboardRadiator.cc @@ -267,7 +267,6 @@ namespace SteamBaseboardRadiator { // Using/Aliasing using BranchNodeConnections::TestCompSet; - using Fluid::FindRefrigerant; using GlobalNames::VerifyUniqueBaseboardName; using NodeInputManager::GetOnlySingleNode; @@ -780,7 +779,7 @@ namespace SteamBaseboardRadiator { } if (state.dataSteamBaseboardRadiator->SteamIndex == 0 && BaseboardNum == 1) { - state.dataSteamBaseboardRadiator->SteamIndex = FindRefrigerant(state, "Steam"); + state.dataSteamBaseboardRadiator->SteamIndex = FluidProperties::GetRefrigNum(state, "Steam"); if (state.dataSteamBaseboardRadiator->SteamIndex == 0) { ShowSevereError(state, format("{}Steam Properties for {} not found.", RoutineName, state.dataIPShortCut->cAlphaArgs(1))); if (SteamMessageNeeded) ShowContinueError(state, "Steam Fluid Properties should have been included in the input file."); @@ -909,8 +908,8 @@ namespace SteamBaseboardRadiator { // REFERENCES: // Using/Aliasing - using Fluid::GetSatDensityRefrig; - using Fluid::GetSatEnthalpyRefrig; + using FluidProperties::GetSatDensityRefrig; + using FluidProperties::GetSatEnthalpyRefrig; using PlantUtilities::InitComponentNodes; using PlantUtilities::ScanPlantLoopsForObject; @@ -1069,9 +1068,9 @@ namespace SteamBaseboardRadiator { // Using/Aliasing using namespace DataSizing; - using Fluid::GetSatDensityRefrig; - using Fluid::GetSatEnthalpyRefrig; - using Fluid::GetSatSpecificHeatRefrig; + using FluidProperties::GetSatDensityRefrig; + using FluidProperties::GetSatEnthalpyRefrig; + using FluidProperties::GetSatSpecificHeatRefrig; using HVAC::HeatingCapacitySizing; using PlantUtilities::RegisterPlantCompDesignFlow; @@ -1295,9 +1294,9 @@ namespace SteamBaseboardRadiator { // REFERENCES: // Using/Aliasing - using Fluid::GetSatDensityRefrig; - using Fluid::GetSatEnthalpyRefrig; - using Fluid::GetSatSpecificHeatRefrig; + using FluidProperties::GetSatDensityRefrig; + using FluidProperties::GetSatEnthalpyRefrig; + using FluidProperties::GetSatSpecificHeatRefrig; using HVAC::SmallLoad; using ScheduleManager::GetCurrentScheduleValue; diff --git a/src/EnergyPlus/SteamCoils.cc b/src/EnergyPlus/SteamCoils.cc index f028f8ac300..1a08fa67b76 100644 --- a/src/EnergyPlus/SteamCoils.cc +++ b/src/EnergyPlus/SteamCoils.cc @@ -214,7 +214,6 @@ namespace SteamCoils { // Using/Aliasing using BranchNodeConnections::TestCompSet; - using Fluid::FindRefrigerant; using GlobalNames::VerifyUniqueCoilName; using NodeInputManager::GetOnlySingleNode; @@ -371,7 +370,7 @@ namespace SteamCoils { TestCompSet(state, CurrentModuleObject, AlphArray(1), AlphArray(5), AlphArray(6), "Air Nodes"); if (state.dataSteamCoils->SteamIndex == 0 && CoilNum == 1) { - state.dataSteamCoils->SteamIndex = FindRefrigerant(state, "Steam"); + state.dataSteamCoils->SteamIndex = FluidProperties::GetRefrigNum(state, "Steam"); if (state.dataSteamCoils->SteamIndex == 0) { ShowSevereError(state, format("{}Steam Properties for {} not found.", RoutineName, AlphArray(1))); ShowContinueError(state, "Steam Fluid Properties should have been included in the input file."); @@ -467,8 +466,8 @@ namespace SteamCoils { // na // Using/Aliasing - using Fluid::GetSatDensityRefrig; - using Fluid::GetSatEnthalpyRefrig; + using FluidProperties::GetSatDensityRefrig; + using FluidProperties::GetSatEnthalpyRefrig; using PlantUtilities::InitComponentNodes; // Locals @@ -663,8 +662,8 @@ namespace SteamCoils { // Using/Aliasing using namespace DataSizing; - using Fluid::GetSatDensityRefrig; - using Fluid::GetSatEnthalpyRefrig; + using FluidProperties::GetSatDensityRefrig; + using FluidProperties::GetSatEnthalpyRefrig; using PlantUtilities::RegisterPlantCompDesignFlow; // SUBROUTINE PARAMETER DEFINITIONS: @@ -827,7 +826,7 @@ namespace SteamCoils { // TempSteamIn, & // PlantLoop(SteamCoil(CoilNum)%LoopNum)%FluidIndex, & // 'SizeSteamCoil') - CpWater = Fluid::GetSatSpecificHeatRefrig( + CpWater = FluidProperties::GetSatSpecificHeatRefrig( state, fluidNameSteam, TempSteamIn, 0.0, state.dataSteamCoils->SteamCoil(CoilNum).FluidIndex, RoutineName); state.dataSteamCoils->SteamCoil(CoilNum).MaxSteamVolFlowRate = @@ -896,7 +895,7 @@ namespace SteamCoils { // TempSteamIn, & // PlantLoop(SteamCoil(CoilNum)%LoopNum)%FluidIndex, & // 'SizeSteamCoil') - CpWater = Fluid::GetSatSpecificHeatRefrig( + CpWater = FluidProperties::GetSatSpecificHeatRefrig( state, fluidNameSteam, TempSteamIn, 0.0, state.dataSteamCoils->SteamCoil(CoilNum).FluidIndex, RoutineName); state.dataSteamCoils->SteamCoil(CoilNum).MaxSteamVolFlowRate = @@ -1117,9 +1116,9 @@ namespace SteamCoils { // converted to water and only then the steam trap allows it to leave the heat // exchanger, subsequently heat exchange is latent heat + subcooling. EnthSteamInDry = - Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 1.0, state.dataSteamCoils->SteamCoil(CoilNum).FluidIndex, RoutineName); + FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 1.0, state.dataSteamCoils->SteamCoil(CoilNum).FluidIndex, RoutineName); EnthSteamOutWet = - Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 0.0, state.dataSteamCoils->SteamCoil(CoilNum).FluidIndex, RoutineName); + FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 0.0, state.dataSteamCoils->SteamCoil(CoilNum).FluidIndex, RoutineName); LatentHeatSteam = EnthSteamInDry - EnthSteamOutWet; @@ -1128,7 +1127,7 @@ namespace SteamCoils { // PlantLoop(SteamCoil(CoilNum)%LoopNum)%FluidIndex, & // 'CalcSteamAirCoil') - CpWater = Fluid::GetSatSpecificHeatRefrig( + CpWater = FluidProperties::GetSatSpecificHeatRefrig( state, fluidNameSteam, TempSteamIn, 0.0, state.dataSteamCoils->SteamCoil(CoilNum).FluidIndex, RoutineNameSizeSteamCoil); // Max Heat Transfer @@ -1180,7 +1179,7 @@ namespace SteamCoils { // considering saturated state. // StdBaroPress=101325 - TempWaterAtmPress = Fluid::GetSatTemperatureRefrig( + TempWaterAtmPress = FluidProperties::GetSatTemperatureRefrig( state, fluidNameSteam, state.dataEnvrn->StdBaroPress, state.dataSteamCoils->SteamCoil(CoilNum).FluidIndex, RoutineName); // Point 4 at atm - loop delta subcool during return journery back to pump @@ -1188,15 +1187,15 @@ namespace SteamCoils { // Actual Steam Coil Outlet Enthalpy EnthCoilOutlet = - Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 0.0, state.dataSteamCoils->SteamCoil(CoilNum).FluidIndex, RoutineName) - + FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 0.0, state.dataSteamCoils->SteamCoil(CoilNum).FluidIndex, RoutineName) - CpWater * SubcoolDeltaTemp; // Enthalpy at Point 4 - EnthAtAtmPress = Fluid::GetSatEnthalpyRefrig( + EnthAtAtmPress = FluidProperties::GetSatEnthalpyRefrig( state, fluidNameSteam, TempWaterAtmPress, 0.0, state.dataSteamCoils->SteamCoil(CoilNum).FluidIndex, RoutineName); // Reported value of coil outlet enthalpy at the node to match the node outlet temperature - CpWater = Fluid::GetSatSpecificHeatRefrig( + CpWater = FluidProperties::GetSatSpecificHeatRefrig( state, fluidNameSteam, TempLoopOutToPump, 0.0, state.dataSteamCoils->SteamCoil(CoilNum).FluidIndex, RoutineNameSizeSteamCoil); EnthPumpInlet = EnthAtAtmPress - CpWater * state.dataSteamCoils->SteamCoil(CoilNum).LoopSubcoolReturn; @@ -1232,16 +1231,16 @@ namespace SteamCoils { // converted to water and only then the steam trap allows it to leave the heat // exchanger, subsequently heat exchange is latent heat + subcooling. EnthSteamInDry = - Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 1.0, state.dataSteamCoils->SteamCoil(CoilNum).FluidIndex, RoutineName); + FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 1.0, state.dataSteamCoils->SteamCoil(CoilNum).FluidIndex, RoutineName); EnthSteamOutWet = - Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 0.0, state.dataSteamCoils->SteamCoil(CoilNum).FluidIndex, RoutineName); + FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 0.0, state.dataSteamCoils->SteamCoil(CoilNum).FluidIndex, RoutineName); LatentHeatSteam = EnthSteamInDry - EnthSteamOutWet; // CpWater = GetSpecificHeatGlycol('WATER', & // TempSteamIn, & // PlantLoop(SteamCoil(CoilNum)%LoopNum)%FluidIndex, & // 'CalcSteamAirCoil') - CpWater = Fluid::GetSatSpecificHeatRefrig( + CpWater = FluidProperties::GetSatSpecificHeatRefrig( state, fluidNameSteam, TempSteamIn, 0.0, state.dataSteamCoils->SteamCoil(CoilNum).FluidIndex, RoutineNameSizeSteamCoil); // Max Heat Transfer @@ -1352,22 +1351,22 @@ namespace SteamCoils { // considering saturated state. // StdBaroPress=101325 - TempWaterAtmPress = Fluid::GetSatTemperatureRefrig( + TempWaterAtmPress = FluidProperties::GetSatTemperatureRefrig( state, fluidNameSteam, state.dataEnvrn->StdBaroPress, state.dataSteamCoils->SteamCoil(CoilNum).FluidIndex, RoutineName); // Point 4 at atm - loop delta subcool during return journery back to pump TempLoopOutToPump = TempWaterAtmPress - state.dataSteamCoils->SteamCoil(CoilNum).LoopSubcoolReturn; // Actual Steam Coil Outlet Enthalpy - EnthCoilOutlet = Fluid::GetSatEnthalpyRefrig( + EnthCoilOutlet = FluidProperties::GetSatEnthalpyRefrig( state, fluidNameSteam, TempSteamIn, 0.0, state.dataSteamCoils->SteamCoil(CoilNum).FluidIndex, RoutineName) - CpWater * SubcoolDeltaTemp; // Enthalpy at Point 4 - EnthAtAtmPress = Fluid::GetSatEnthalpyRefrig( + EnthAtAtmPress = FluidProperties::GetSatEnthalpyRefrig( state, fluidNameSteam, TempWaterAtmPress, 0.0, state.dataSteamCoils->SteamCoil(CoilNum).FluidIndex, RoutineName); - CpWater = Fluid::GetSatSpecificHeatRefrig( + CpWater = FluidProperties::GetSatSpecificHeatRefrig( state, fluidNameSteam, TempLoopOutToPump, 0.0, state.dataSteamCoils->SteamCoil(CoilNum).FluidIndex, RoutineNameSizeSteamCoil); // Reported value of coil outlet enthalpy at the node to match the node outlet temperature diff --git a/src/EnergyPlus/SurfaceGroundHeatExchanger.cc b/src/EnergyPlus/SurfaceGroundHeatExchanger.cc index 9939e1b8d57..a2d01f30089 100644 --- a/src/EnergyPlus/SurfaceGroundHeatExchanger.cc +++ b/src/EnergyPlus/SurfaceGroundHeatExchanger.cc @@ -183,8 +183,7 @@ namespace SurfaceGroundHeatExchanger { // Using/Aliasing using BranchNodeConnections::TestCompSet; - using Fluid::CheckFluidPropertyName; - using Fluid::FindGlycol; + using FluidProperties::CheckFluidPropertyName; using NodeInputManager::GetOnlySingleNode; using namespace DataLoopNode; @@ -1078,7 +1077,7 @@ namespace SurfaceGroundHeatExchanger { // Code based loosely on code from IBLAST program (research version) // Using/Aliasing - using Fluid::GetSpecificHeatGlycol; + using FluidProperties::GetSpecificHeatGlycol; // Return value Real64 CalcHXEffectTerm; @@ -1346,7 +1345,7 @@ namespace SurfaceGroundHeatExchanger { // Using/Aliasing Real64 SysTimeElapsed = state.dataHVACGlobal->SysTimeElapsed; Real64 TimeStepSys = state.dataHVACGlobal->TimeStepSys; - using Fluid::GetSpecificHeatGlycol; + using FluidProperties::GetSpecificHeatGlycol; using PlantUtilities::SafeCopyPlantNode; // SUBROUTINE PARAMETER DEFINITIONS: @@ -1434,7 +1433,7 @@ namespace SurfaceGroundHeatExchanger { void SurfaceGroundHeatExchangerData::oneTimeInit_new(EnergyPlusData &state) { - using Fluid::GetDensityGlycol; + using FluidProperties::GetDensityGlycol; using PlantUtilities::InitComponentNodes; using PlantUtilities::RegisterPlantCompDesignFlow; using PlantUtilities::ScanPlantLoopsForObject; diff --git a/src/EnergyPlus/SwimmingPool.cc b/src/EnergyPlus/SwimmingPool.cc index bf4eb26a9c3..ca74f2ae0a9 100644 --- a/src/EnergyPlus/SwimmingPool.cc +++ b/src/EnergyPlus/SwimmingPool.cc @@ -510,7 +510,7 @@ void SwimmingPoolData::initialize(EnergyPlusData &state, bool const FirstHVACIte this->WaterOutletTemp = 0.0; this->WaterMassFlowRate = 0.0; this->PeopleHeatGain = 0.0; - Real64 Density = Fluid::GetDensityGlycol(state, "WATER", this->PoolWaterTemp, this->GlycolIndex, RoutineName); + Real64 Density = FluidProperties::GetDensityGlycol(state, "WATER", this->PoolWaterTemp, this->GlycolIndex, RoutineName); this->WaterMass = state.dataSurface->Surface(this->SurfacePtr).Area * this->AvgDepth * Density; this->WaterMassFlowRateMax = this->WaterVolFlowMax * Density; this->initSwimmingPoolPlantNodeFlow(state); @@ -917,7 +917,7 @@ void SwimmingPoolData::calculate(EnergyPlusData &state) // Get an estimate of the pool water specific heat Real64 Cp = - Fluid::GetSpecificHeatGlycol(state, "WATER", this->PoolWaterTemp, this->GlycolIndex, RoutineName); // specific heat of pool water + FluidProperties::GetSpecificHeatGlycol(state, "WATER", this->PoolWaterTemp, this->GlycolIndex, RoutineName); // specific heat of pool water Real64 TH22 = state.dataHeatBalSurf->SurfInsideTempHist(2)( SurfNum); // inside surface temperature at the previous time step equals the old pool water temperature @@ -1050,12 +1050,12 @@ void SwimmingPoolData::report(EnergyPlusData &state) this->PoolWaterTemp = state.dataHeatBalSurf->SurfInsideTempHist(1)(SurfNum); // Next calculate the amount of heating done by the plant loop - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, "WATER", this->PoolWaterTemp, this->GlycolIndex, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, "WATER", this->PoolWaterTemp, this->GlycolIndex, RoutineName); // specific heat of water this->HeatPower = this->WaterMassFlowRate * Cp * (this->WaterInletTemp - this->PoolWaterTemp); // Now the power consumption of miscellaneous equipment - Real64 Density = Fluid::GetDensityGlycol(state, "WATER", this->PoolWaterTemp, this->GlycolIndex, + Real64 Density = FluidProperties::GetDensityGlycol(state, "WATER", this->PoolWaterTemp, this->GlycolIndex, RoutineName); // density of water if (Density > MinDensity) { this->MiscEquipPower = this->MiscPowerFactor * this->WaterMassFlowRate / Density; diff --git a/src/EnergyPlus/UnitHeater.cc b/src/EnergyPlus/UnitHeater.cc index 05cee954296..8631437f9dc 100644 --- a/src/EnergyPlus/UnitHeater.cc +++ b/src/EnergyPlus/UnitHeater.cc @@ -658,7 +658,7 @@ namespace UnitHeater { // Using/Aliasing using DataZoneEquipment::CheckZoneEquipmentList; - using Fluid::GetDensityGlycol; + using FluidProperties::GetDensityGlycol; using PlantUtilities::InitComponentNodes; using PlantUtilities::ScanPlantLoopsForObject; using PlantUtilities::SetComponentFlowRate; @@ -783,7 +783,7 @@ namespace UnitHeater { } if (state.dataUnitHeaters->UnitHeat(UnitHeatNum).Type == HCoilType::SteamCoil) { TempSteamIn = 100.00; - SteamDensity = Fluid::GetSatDensityRefrig( + SteamDensity = FluidProperties::GetSatDensityRefrig( state, fluidNameSteam, TempSteamIn, 1.0, state.dataUnitHeaters->UnitHeat(UnitHeatNum).HCoil_FluidIndex, RoutineName); state.dataUnitHeaters->UnitHeat(UnitHeatNum).MaxHotSteamFlow = SteamDensity * state.dataUnitHeaters->UnitHeat(UnitHeatNum).MaxVolHotSteamFlow; @@ -1138,13 +1138,13 @@ namespace UnitHeater { } if (DesCoilLoad >= SmallLoad) { - rho = Fluid::GetDensityGlycol( + rho = FluidProperties::GetDensityGlycol( state, state.dataPlnt->PlantLoop(state.dataUnitHeaters->UnitHeat(UnitHeatNum).HWplantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(state.dataUnitHeaters->UnitHeat(UnitHeatNum).HWplantLoc.loopNum).FluidIndex, RoutineName); - Cp = Fluid::GetSpecificHeatGlycol( + Cp = FluidProperties::GetSpecificHeatGlycol( state, state.dataPlnt->PlantLoop(state.dataUnitHeaters->UnitHeat(UnitHeatNum).HWplantLoc.loopNum).FluidName, Constant::HWInitConvTemp, @@ -1269,12 +1269,12 @@ namespace UnitHeater { if (DesCoilLoad >= SmallLoad) { TempSteamIn = 100.00; EnthSteamInDry = - Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 1.0, state.dataUnitHeaters->RefrigIndex, RoutineName); + FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 1.0, state.dataUnitHeaters->RefrigIndex, RoutineName); EnthSteamOutWet = - Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 0.0, state.dataUnitHeaters->RefrigIndex, RoutineName); + FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 0.0, state.dataUnitHeaters->RefrigIndex, RoutineName); LatentHeatSteam = EnthSteamInDry - EnthSteamOutWet; SteamDensity = - Fluid::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, state.dataUnitHeaters->RefrigIndex, RoutineName); + FluidProperties::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, state.dataUnitHeaters->RefrigIndex, RoutineName); MaxVolHotSteamFlowDes = DesCoilLoad / (SteamDensity * (LatentHeatSteam + state.dataSize->PlantSizData(PltSizHeatNum).DeltaT * CPHW(state.dataSize->PlantSizData(PltSizHeatNum).ExitTemp))); diff --git a/src/EnergyPlus/UnitVentilator.cc b/src/EnergyPlus/UnitVentilator.cc index 04cb120f742..6e72faa07bc 100644 --- a/src/EnergyPlus/UnitVentilator.cc +++ b/src/EnergyPlus/UnitVentilator.cc @@ -1127,7 +1127,7 @@ namespace UnitVentilator { if (unitVent.HCoilType == HeatCoilType::Water) { - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(unitVent.HWplantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(unitVent.HWplantLoc.loopNum).FluidIndex, @@ -1142,7 +1142,7 @@ namespace UnitVentilator { if (unitVent.HCoilType == HeatCoilType::Steam) { Real64 TempSteamIn = 100.00; Real64 SteamDensity = - Fluid::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, unitVent.HCoil_FluidIndex, RoutineName); + FluidProperties::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, unitVent.HCoil_FluidIndex, RoutineName); unitVent.MaxHotSteamFlow = SteamDensity * unitVent.MaxVolHotSteamFlow; unitVent.MinHotSteamFlow = SteamDensity * unitVent.MinVolHotSteamFlow; @@ -1152,7 +1152,7 @@ namespace UnitVentilator { } //(UnitVent(UnitVentNum)%HCoilPresent) if (unitVent.CCoilPresent) { // Only initialize these if a cooling coil is actually present - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(unitVent.CWPlantLoc.loopNum).FluidName, 5.0, state.dataPlnt->PlantLoop(unitVent.CWPlantLoc.loopNum).FluidIndex, @@ -1881,12 +1881,12 @@ namespace UnitVentilator { sizerHeatingCapacity.initializeWithinEP(state, CompType, CompName, PrintFlag, RoutineName); DesHeatingLoad = sizerHeatingCapacity.size(state, TempSize, errorsFound); } - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(unitVent.HWplantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(unitVent.HWplantLoc.loopNum).FluidIndex, RoutineName); - Cp = Fluid::GetSpecificHeatGlycol(state, + Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(unitVent.HWplantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(unitVent.HWplantLoc.loopNum).FluidIndex, @@ -2012,14 +2012,14 @@ namespace UnitVentilator { DesHeatingLoad = sizerHeatingCapacity.size(state, TempSize, errorsFound); } TempSteamIn = 100.00; - EnthSteamInDry = Fluid::GetSatEnthalpyRefrig( + EnthSteamInDry = FluidProperties::GetSatEnthalpyRefrig( state, fluidNameSteam, TempSteamIn, 1.0, state.dataUnitVentilators->RefrigIndex, RoutineName); - EnthSteamOutWet = Fluid::GetSatEnthalpyRefrig( + EnthSteamOutWet = FluidProperties::GetSatEnthalpyRefrig( state, fluidNameSteam, TempSteamIn, 0.0, state.dataUnitVentilators->RefrigIndex, RoutineName); LatentHeatSteam = EnthSteamInDry - EnthSteamOutWet; - SteamDensity = Fluid::GetSatDensityRefrig( + SteamDensity = FluidProperties::GetSatDensityRefrig( state, fluidNameSteam, TempSteamIn, 1.0, state.dataUnitVentilators->RefrigIndex, RoutineName); - Cp = Fluid::GetSpecificHeatGlycol(state, + Cp = FluidProperties::GetSpecificHeatGlycol(state, fluidNameWater, state.dataSize->PlantSizData(PltSizHeatNum).ExitTemp, state.dataUnitVentilators->DummyWaterIndex, @@ -2170,12 +2170,12 @@ namespace UnitVentilator { sizerCoolingCapacity.initializeWithinEP(state, CompType, CompName, PrintFlag, RoutineName); DesCoolingLoad = sizerCoolingCapacity.size(state, TempSize, ErrorsFound); } - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(unitVent.CWPlantLoc.loopNum).FluidName, 5., state.dataPlnt->PlantLoop(unitVent.CWPlantLoc.loopNum).FluidIndex, RoutineName); - Cp = Fluid::GetSpecificHeatGlycol(state, + Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(unitVent.CWPlantLoc.loopNum).FluidName, 5., state.dataPlnt->PlantLoop(unitVent.CWPlantLoc.loopNum).FluidIndex, diff --git a/src/EnergyPlus/UnitarySystem.cc b/src/EnergyPlus/UnitarySystem.cc index 07967395c02..cb772fa38b5 100644 --- a/src/EnergyPlus/UnitarySystem.cc +++ b/src/EnergyPlus/UnitarySystem.cc @@ -589,7 +589,7 @@ namespace UnitarySystems { state, CoolingCoilType, CoolingCoilName, state.dataUnitarySystems->initUnitarySystemsErrorsFound); if (this->MaxCoolCoilFluidFlow > 0.0) { - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CoolCoilPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CoolCoilPlantLoc.loopNum).FluidIndex, @@ -636,7 +636,7 @@ namespace UnitarySystems { state, HeatingCoilType, this->m_HeatingCoilName, state.dataUnitarySystems->initUnitarySystemsErrorsFound); if (this->MaxHeatCoilFluidFlow > 0.0) { - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->HeatCoilPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->HeatCoilPlantLoc.loopNum).FluidIndex, @@ -652,7 +652,7 @@ namespace UnitarySystems { if (this->MaxHeatCoilFluidFlow > 0.0) { int SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed Real64 TempSteamIn = 100.0; - Real64 SteamDensity = Fluid::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, SteamIndex, routineName); + Real64 SteamDensity = FluidProperties::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, SteamIndex, routineName); this->MaxHeatCoilFluidFlow *= SteamDensity; } } @@ -692,7 +692,7 @@ namespace UnitarySystems { state, "Coil:Heating:Water", this->m_SuppHeatCoilName, state.dataUnitarySystems->initUnitarySystemsErrorsFound); if (this->m_MaxSuppCoilFluidFlow > 0.0) { - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->m_SuppCoilPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->m_SuppCoilPlantLoc.loopNum).FluidIndex, @@ -725,7 +725,7 @@ namespace UnitarySystems { if (this->m_MaxSuppCoilFluidFlow > 0.0) { int SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed Real64 TempSteamIn = 100.0; - Real64 SteamDensity = Fluid::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, SteamIndex, routineName); + Real64 SteamDensity = FluidProperties::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, SteamIndex, routineName); this->m_MaxSuppCoilFluidFlow *= SteamDensity; } @@ -764,7 +764,7 @@ namespace UnitarySystems { if ((this->m_HeatRecActive) && (!this->m_MyPlantScanFlag)) { - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->m_HRPlantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state.dataPlnt->PlantLoop(this->m_HRPlantLoc.loopNum).FluidIndex, @@ -790,7 +790,7 @@ namespace UnitarySystems { Real64 CoilMaxVolFlowRate = WaterCoils::GetCoilMaxWaterFlowRate( state, CoolingCoilType, this->m_CoolingCoilName, state.dataUnitarySystems->initUnitarySystemsErrorsFound); if (CoilMaxVolFlowRate != DataSizing::AutoSize) { - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->CoolCoilPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->CoolCoilPlantLoc.loopNum).FluidIndex, @@ -811,7 +811,7 @@ namespace UnitarySystems { Real64 CoilMaxVolFlowRate = WaterCoils::GetCoilMaxWaterFlowRate( state, "Coil:Heating:Water", this->m_HeatingCoilName, state.dataUnitarySystems->initUnitarySystemsErrorsFound); if (CoilMaxVolFlowRate != DataSizing::AutoSize) { - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->HeatCoilPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->HeatCoilPlantLoc.loopNum).FluidIndex, @@ -834,7 +834,7 @@ namespace UnitarySystems { int SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed Real64 TempSteamIn = 100.0; Real64 SteamDensity = - Fluid::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, SteamIndex, routineName); + FluidProperties::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, SteamIndex, routineName); this->MaxHeatCoilFluidFlow = CoilMaxVolFlowRate * SteamDensity; } } @@ -851,7 +851,7 @@ namespace UnitarySystems { Real64 CoilMaxVolFlowRate = WaterCoils::GetCoilMaxWaterFlowRate( state, "Coil:Heating:Water", this->m_SuppHeatCoilName, state.dataUnitarySystems->initUnitarySystemsErrorsFound); if (CoilMaxVolFlowRate != DataSizing::AutoSize) { - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->m_SuppCoilPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->m_SuppCoilPlantLoc.loopNum).FluidIndex, @@ -873,7 +873,7 @@ namespace UnitarySystems { int SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed Real64 TempSteamIn = 100.0; Real64 SteamDensity = - Fluid::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, SteamIndex, routineName); + FluidProperties::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, SteamIndex, routineName); this->m_MaxSuppCoilFluidFlow = CoilMaxVolFlowRate * SteamDensity; } } @@ -4359,7 +4359,7 @@ namespace UnitarySystems { int SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed Real64 TempSteamIn = 100.0; Real64 SteamDensity = - Fluid::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, SteamIndex, "getUnitarySystemInputData"); + FluidProperties::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, SteamIndex, "getUnitarySystemInputData"); this->MaxHeatCoilFluidFlow *= SteamDensity; errFlag = false; } @@ -5379,7 +5379,7 @@ namespace UnitarySystems { if (this->m_MaxSuppCoilFluidFlow > 0.0) { int SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed Real64 TempSteamIn = 100.0; - Real64 SteamDensity = Fluid::GetSatDensityRefrig( + Real64 SteamDensity = FluidProperties::GetSatDensityRefrig( state, fluidNameSteam, TempSteamIn, 1.0, SteamIndex, "getUnitarySystemInputData"); this->m_MaxSuppCoilFluidFlow = this->m_MaxSuppCoilFluidFlow * SteamDensity; } @@ -9998,7 +9998,7 @@ namespace UnitarySystems { Real64 CoilMaxVolFlowRate = WaterCoils::GetCoilMaxWaterFlowRate(state, "Coil:Heating:Water", this->m_HeatingCoilName, errorsFound); if (CoilMaxVolFlowRate != DataSizing::AutoSize) { - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->HeatCoilPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->HeatCoilPlantLoc.loopNum).FluidIndex, @@ -10019,7 +10019,7 @@ namespace UnitarySystems { int SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed Real64 TempSteamIn = 100.0; Real64 SteamDensity = - Fluid::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, SteamIndex, routineName); + FluidProperties::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, SteamIndex, routineName); this->MaxHeatCoilFluidFlow = CoilMaxVolFlowRate * SteamDensity; } } @@ -10036,7 +10036,7 @@ namespace UnitarySystems { Real64 CoilMaxVolFlowRate = WaterCoils::GetCoilMaxWaterFlowRate(state, "Coil:Heating:Water", this->m_SuppHeatCoilName, errorsFound); if (CoilMaxVolFlowRate != DataSizing::AutoSize) { - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->m_SuppCoilPlantLoc.loopNum).FluidName, Constant::CWInitConvTemp, state.dataPlnt->PlantLoop(this->m_SuppCoilPlantLoc.loopNum).FluidIndex, @@ -10056,7 +10056,7 @@ namespace UnitarySystems { int SteamIndex = 0; // Function GetSatDensityRefrig will look up steam index if 0 is passed Real64 TempSteamIn = 100.0; Real64 SteamDensity = - Fluid::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, SteamIndex, routineName); + FluidProperties::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, SteamIndex, routineName); this->m_MaxSuppCoilFluidFlow = CoilMaxVolFlowRate * SteamDensity; } } @@ -15724,7 +15724,7 @@ namespace UnitarySystems { if (HeatRecMassFlowRate > 0.0) { - Real64 CpHeatRec = Fluid::GetSpecificHeatGlycol(state, + Real64 CpHeatRec = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->m_HRPlantLoc.loopNum).FluidName, HeatRecInletTemp, state.dataPlnt->PlantLoop(this->m_HRPlantLoc.loopNum).FluidIndex, diff --git a/src/EnergyPlus/UserDefinedComponents.cc b/src/EnergyPlus/UserDefinedComponents.cc index 2d70b6c875f..edce549a41f 100644 --- a/src/EnergyPlus/UserDefinedComponents.cc +++ b/src/EnergyPlus/UserDefinedComponents.cc @@ -2429,13 +2429,13 @@ namespace UserDefinedComponents { // fill internal variable targets this->Loop(LoopNum).MyLoad = MyLoad; - this->Loop(LoopNum).InletRho = Fluid::GetDensityGlycol(state, + this->Loop(LoopNum).InletRho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->Loop(LoopNum).plantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->Loop(LoopNum).InletNodeNum).Temp, state.dataPlnt->PlantLoop(this->Loop(LoopNum).plantLoc.loopNum).FluidIndex, RoutineName); this->Loop(LoopNum).InletCp = - Fluid::GetSpecificHeatGlycol(state, + FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->Loop(LoopNum).plantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->Loop(LoopNum).InletNodeNum).Temp, state.dataPlnt->PlantLoop(this->Loop(LoopNum).plantLoc.loopNum).FluidIndex, @@ -2498,12 +2498,12 @@ namespace UserDefinedComponents { } if (this->PlantIsConnected) { - this->Loop.InletRho = Fluid::GetDensityGlycol(state, + this->Loop.InletRho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->Loop.plantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->Loop.InletNodeNum).Temp, state.dataPlnt->PlantLoop(this->Loop.plantLoc.loopNum).FluidIndex, RoutineName); - this->Loop.InletCp = Fluid::GetSpecificHeatGlycol(state, + this->Loop.InletCp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->Loop.plantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->Loop.InletNodeNum).Temp, state.dataPlnt->PlantLoop(this->Loop.plantLoc.loopNum).FluidIndex, @@ -2581,13 +2581,13 @@ namespace UserDefinedComponents { if (this->NumPlantConnections > 0) { for (int loop = 1; loop <= this->NumPlantConnections; ++loop) { - this->Loop(loop).InletRho = Fluid::GetDensityGlycol(state, + this->Loop(loop).InletRho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->Loop(loop).plantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->Loop(loop).InletNodeNum).Temp, state.dataPlnt->PlantLoop(this->Loop(loop).plantLoc.loopNum).FluidIndex, RoutineName); this->Loop(loop).InletCp = - Fluid::GetSpecificHeatGlycol(state, + FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->Loop(loop).plantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->Loop(loop).InletNodeNum).Temp, state.dataPlnt->PlantLoop(this->Loop(loop).plantLoc.loopNum).FluidIndex, @@ -2663,13 +2663,13 @@ namespace UserDefinedComponents { if (this->NumPlantConnections > 0) { for (int loop = 1; loop <= this->NumPlantConnections; ++loop) { - this->Loop(loop).InletRho = Fluid::GetDensityGlycol(state, + this->Loop(loop).InletRho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->Loop(loop).plantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->Loop(loop).InletNodeNum).Temp, state.dataPlnt->PlantLoop(this->Loop(loop).plantLoc.loopNum).FluidIndex, RoutineName); this->Loop(loop).InletCp = - Fluid::GetSpecificHeatGlycol(state, + FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->Loop(loop).plantLoc.loopNum).FluidName, state.dataLoopNodes->Node(this->Loop(loop).InletNodeNum).Temp, state.dataPlnt->PlantLoop(this->Loop(loop).plantLoc.loopNum).FluidIndex, diff --git a/src/EnergyPlus/VariableSpeedCoils.cc b/src/EnergyPlus/VariableSpeedCoils.cc index b35ff54ba90..7170b2096cb 100644 --- a/src/EnergyPlus/VariableSpeedCoils.cc +++ b/src/EnergyPlus/VariableSpeedCoils.cc @@ -139,7 +139,6 @@ namespace VariableSpeedCoils { // This subroutine manages variable-speed Water to Air Heat Pump component simulation. // Using/Aliasing - using Fluid::FindGlycol; using General::SolveRoot; // SUBROUTINE LOCAL VARIABLE DECLARATIONS: @@ -3880,8 +3879,8 @@ namespace VariableSpeedCoils { // Uses the status flags to trigger initializations. // Using/Aliasing - using Fluid::GetDensityGlycol; - using Fluid::GetSpecificHeatGlycol; + using FluidProperties::GetDensityGlycol; + using FluidProperties::GetSpecificHeatGlycol; using PlantUtilities::InitComponentNodes; using PlantUtilities::ScanPlantLoopsForObject; @@ -5283,12 +5282,12 @@ namespace VariableSpeedCoils { false); if (PltSizNum > 0) { - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(varSpeedCoil.plantLoc.loopNum).FluidName, state.dataSize->PlantSizData(PltSizNum).ExitTemp, state.dataPlnt->PlantLoop(varSpeedCoil.plantLoc.loopNum).FluidIndex, RoutineNameAlt); - cp = Fluid::GetSpecificHeatGlycol(state, + cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(varSpeedCoil.plantLoc.loopNum).FluidName, state.dataSize->PlantSizData(PltSizNum).ExitTemp, state.dataPlnt->PlantLoop(varSpeedCoil.plantLoc.loopNum).FluidIndex, @@ -5426,7 +5425,7 @@ namespace VariableSpeedCoils { if (PltSizNum > 0) { rhoW = rho; } else { - rhoW = Fluid::GetDensityGlycol(state, + rhoW = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(varSpeedCoil.plantLoc.loopNum).FluidName, RatedSourceTempCool, state.dataPlnt->PlantLoop(varSpeedCoil.plantLoc.loopNum).FluidIndex, @@ -5874,7 +5873,7 @@ namespace VariableSpeedCoils { // Using/Aliasing using Curve::CurveValue; Real64 TimeStepSysSec = state.dataHVACGlobal->TimeStepSysSec; - using Fluid::GetSpecificHeatGlycol; + using FluidProperties::GetSpecificHeatGlycol; using Psychrometrics::PsyCpAirFnW; using Psychrometrics::PsyHFnTdbW; using Psychrometrics::PsyRhoAirFnPbTdbW; @@ -7236,7 +7235,7 @@ namespace VariableSpeedCoils { // Using/Aliasing using Curve::CurveValue; Real64 TimeStepSysSec = state.dataHVACGlobal->TimeStepSysSec; - using Fluid::GetSpecificHeatGlycol; + using FluidProperties::GetSpecificHeatGlycol; using Psychrometrics::PsyCpAirFnW; using Psychrometrics::PsyHFnTdbW; using Psychrometrics::PsyRhoAirFnPbTdbW; @@ -7747,7 +7746,6 @@ namespace VariableSpeedCoils { // as negative. // Using/Aliasing - using Fluid::FindGlycol; // Return value Real64 CoilCapacity; // returned capacity of matched coil @@ -7808,9 +7806,6 @@ namespace VariableSpeedCoils { // incorrect coil type or name is given, ErrorsFound is returned as true and index is returned // as zero. - // Using/Aliasing - using Fluid::FindGlycol; - // Return value int IndexNum; // returned index of matched coil @@ -7991,9 +7986,6 @@ namespace VariableSpeedCoils { // incorrect coil type or name is given, ErrorsFound is returned as true and value is returned // as zero. - // Using/Aliasing - using Fluid::FindGlycol; - // Return value int NodeNumber; // returned outlet node of matched coil @@ -8039,9 +8031,6 @@ namespace VariableSpeedCoils { // incorrect coil type or name is given, ErrorsFound is returned as true and value is returned // as zero. - // Using/Aliasing - using Fluid::FindGlycol; - // Return value int NodeNumber; // returned outlet node of matched coil @@ -8216,9 +8205,6 @@ namespace VariableSpeedCoils { // This routine was designed to "push" information from a parent object to // this WSHP coil object. - // Using/Aliasing - using Fluid::FindGlycol; - // Obtains and Allocates WatertoAirHP related parameters from input file if (state.dataVariableSpeedCoils->GetCoilsInputFlag) { // First time subroutine has been entered GetVarSpeedCoilInput(state); diff --git a/src/EnergyPlus/VentilatedSlab.cc b/src/EnergyPlus/VentilatedSlab.cc index 893dc0220f7..455f3f92c09 100644 --- a/src/EnergyPlus/VentilatedSlab.cc +++ b/src/EnergyPlus/VentilatedSlab.cc @@ -234,7 +234,6 @@ namespace VentilatedSlab { using namespace DataLoopNode; using namespace DataSurfaceLists; - using Fluid::FindRefrigerant; using OutAirNodeManager::CheckAndAddAirNodeNumber; // SUBROUTINE PARAMETER DEFINITIONS: @@ -1024,7 +1023,7 @@ namespace VentilatedSlab { } case HeatingCoilType::Steam: { ventSlab.heatingCoilType = DataPlant::PlantEquipmentType::CoilSteamAirHeating; - ventSlab.heatingCoil_FluidIndex = FindRefrigerant(state, "Steam"); + ventSlab.heatingCoil_FluidIndex = FluidProperties::GetRefrigNum(state, "Steam"); if (ventSlab.heatingCoil_FluidIndex == 0) { ShowSevereError(state, format("{}=\"{}Steam Properties not found.", CurrentModuleObject, ventSlab.Name)); if (SteamMessageNeeded) ShowContinueError(state, "Steam Fluid Properties should have been included in the input file."); @@ -1492,7 +1491,7 @@ namespace VentilatedSlab { auto &ventSlab = state.dataVentilatedSlab->VentSlab(Item); using DataZoneEquipment::CheckZoneEquipmentList; - using Fluid::GetDensityGlycol; + using FluidProperties::GetDensityGlycol; using PlantUtilities::InitComponentNodes; using PlantUtilities::ScanPlantLoopsForObject; using ScheduleManager::GetCurrentScheduleValue; @@ -1681,7 +1680,7 @@ namespace VentilatedSlab { if (ventSlab.heatingCoilType == DataPlant::PlantEquipmentType::CoilSteamAirHeating && !state.dataVentilatedSlab->MyPlantScanFlag(Item)) { TempSteamIn = 100.00; - SteamDensity = Fluid::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, ventSlab.heatingCoil_FluidIndex, RoutineName); + SteamDensity = FluidProperties::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, ventSlab.heatingCoil_FluidIndex, RoutineName); ventSlab.MaxHotSteamFlow = SteamDensity * ventSlab.MaxVolHotSteamFlow; ventSlab.MinHotSteamFlow = SteamDensity * ventSlab.MinVolHotSteamFlow; @@ -1789,8 +1788,8 @@ namespace VentilatedSlab { // Using/Aliasing using namespace DataSizing; - using Fluid::GetDensityGlycol; - using Fluid::GetSpecificHeatGlycol; + using FluidProperties::GetDensityGlycol; + using FluidProperties::GetSpecificHeatGlycol; using HVAC::CoolingCapacitySizing; using HVAC::HeatingAirflowSizing; using HVAC::HeatingCapacitySizing; @@ -2319,12 +2318,12 @@ namespace VentilatedSlab { } TempSteamIn = 100.00; EnthSteamInDry = - Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 1.0, ventSlab.heatingCoil_FluidIndex, RoutineName); + FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 1.0, ventSlab.heatingCoil_FluidIndex, RoutineName); EnthSteamOutWet = - Fluid::GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 0.0, ventSlab.heatingCoil_FluidIndex, RoutineName); + FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 0.0, ventSlab.heatingCoil_FluidIndex, RoutineName); LatentHeatSteam = EnthSteamInDry - EnthSteamOutWet; SteamDensity = - Fluid::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, ventSlab.heatingCoil_FluidIndex, RoutineName); + FluidProperties::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, ventSlab.heatingCoil_FluidIndex, RoutineName); Cp = GetSpecificHeatGlycol(state, fluidNameWater, Constant::HWInitConvTemp, DummyWaterIndex, RoutineName); rho = GetDensityGlycol(state, fluidNameWater, Constant::HWInitConvTemp, DummyWaterIndex, RoutineName); MaxVolHotSteamFlowDes = diff --git a/src/EnergyPlus/WaterCoils.cc b/src/EnergyPlus/WaterCoils.cc index 4aae6b48349..b488f4fb3ca 100644 --- a/src/EnergyPlus/WaterCoils.cc +++ b/src/EnergyPlus/WaterCoils.cc @@ -121,8 +121,8 @@ namespace EnergyPlus::WaterCoils { using namespace DataLoopNode; -using Fluid::GetDensityGlycol; -using Fluid::GetSpecificHeatGlycol; +using FluidProperties::GetDensityGlycol; +using FluidProperties::GetSpecificHeatGlycol; using Psychrometrics::PsyCpAirFnW; using Psychrometrics::PsyHFnTdbRhPb; using Psychrometrics::PsyHFnTdbW; diff --git a/src/EnergyPlus/WaterThermalTanks.cc b/src/EnergyPlus/WaterThermalTanks.cc index 18ca280aae4..730b4f5ddad 100644 --- a/src/EnergyPlus/WaterThermalTanks.cc +++ b/src/EnergyPlus/WaterThermalTanks.cc @@ -2589,7 +2589,7 @@ bool getWaterHeaterMixedInputs(EnergyPlusData &state) Tank.OnCycLossCoeff = state.dataIPShortCut->rNumericArgs(15); Tank.OnCycLossFracToZone = state.dataIPShortCut->rNumericArgs(16); - Real64 rho = Fluid::GetDensityGlycol(state, fluidNameWater, Constant::InitConvTemp, Tank.FluidIndex, RoutineName); + Real64 rho = FluidProperties::GetDensityGlycol(state, fluidNameWater, Constant::InitConvTemp, Tank.FluidIndex, RoutineName); Tank.MassFlowRateMax = state.dataIPShortCut->rNumericArgs(17) * rho; if ((state.dataIPShortCut->cAlphaArgs(14).empty()) && (state.dataIPShortCut->cAlphaArgs(15).empty())) { @@ -2828,7 +2828,7 @@ bool getWaterHeaterStratifiedInput(EnergyPlusData &state) if (Tank.Volume == DataSizing::AutoSize) { Tank.VolumeWasAutoSized = true; } - Real64 rho = Fluid::GetDensityGlycol(state, fluidNameWater, Constant::InitConvTemp, Tank.FluidIndex, RoutineName); + Real64 rho = FluidProperties::GetDensityGlycol(state, fluidNameWater, Constant::InitConvTemp, Tank.FluidIndex, RoutineName); Tank.Mass = Tank.Volume * rho; Tank.Height = state.dataIPShortCut->rNumericArgs(2); if (Tank.Height == DataSizing::AutoSize) { @@ -3132,7 +3132,7 @@ bool getWaterHeaterStratifiedInput(EnergyPlusData &state) Tank.OffCycFlueLossFracToZone = state.dataIPShortCut->rNumericArgs(21); // this is temporary until we know fluid type - rho = Fluid::GetDensityGlycol(state, fluidNameWater, Constant::InitConvTemp, Tank.FluidIndex, RoutineName); + rho = FluidProperties::GetDensityGlycol(state, fluidNameWater, Constant::InitConvTemp, Tank.FluidIndex, RoutineName); Tank.MassFlowRateMax = state.dataIPShortCut->rNumericArgs(22) * rho; if ((state.dataIPShortCut->cAlphaArgs(16).empty()) && (state.dataIPShortCut->cAlphaArgs(17).empty())) { @@ -3766,7 +3766,7 @@ bool getWaterTankStratifiedInput(EnergyPlusData &state) if (Tank.Volume == DataSizing::AutoSize) { Tank.VolumeWasAutoSized = true; } - Real64 rho = Fluid::GetDensityGlycol(state, fluidNameWater, Constant::InitConvTemp, Tank.FluidIndex, RoutineName); + Real64 rho = FluidProperties::GetDensityGlycol(state, fluidNameWater, Constant::InitConvTemp, Tank.FluidIndex, RoutineName); Tank.Mass = Tank.Volume * rho; Tank.Height = state.dataIPShortCut->rNumericArgs(2); if (Tank.Height == DataSizing::AutoSize) { @@ -5800,13 +5800,13 @@ void WaterThermalTankData::SetupStratifiedNodes(EnergyPlusData &state) this->Node.allocate(NumNodes); Real64 rho; if ((this->UseSidePlantLoc.loopNum > 0) && allocated(state.dataPlnt->PlantLoop)) { - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidIndex, RoutineName); } else { - rho = Fluid::GetDensityGlycol(state, fluidNameWater, Constant::InitConvTemp, this->FluidIndex, RoutineName); + rho = FluidProperties::GetDensityGlycol(state, fluidNameWater, Constant::InitConvTemp, this->FluidIndex, RoutineName); } Real64 NodeMass = this->Volume * rho / NumNodes; @@ -6058,7 +6058,7 @@ void WaterThermalTankData::initialize(EnergyPlusData &state, bool const FirstHVA if (this->SetLoopIndexFlag && allocated(state.dataPlnt->PlantLoop)) { if ((this->UseInletNode > 0) && (this->HeatPumpNum == 0)) { - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidIndex, @@ -6073,7 +6073,7 @@ void WaterThermalTankData::initialize(EnergyPlusData &state, bool const FirstHVA } } if ((this->UseInletNode > 0) && (this->HeatPumpNum > 0)) { - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidIndex, @@ -6088,7 +6088,7 @@ void WaterThermalTankData::initialize(EnergyPlusData &state, bool const FirstHVA } } if ((this->SourceInletNode > 0) && (this->DesuperheaterNum == 0) && (this->HeatPumpNum == 0)) { - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->SrcSidePlantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->SrcSidePlantLoc.loopNum).FluidIndex, @@ -6153,7 +6153,7 @@ void WaterThermalTankData::initialize(EnergyPlusData &state, bool const FirstHVA // Clear node initial conditions if (this->UseInletNode > 0 && this->UseOutletNode > 0) { state.dataLoopNodes->Node(this->UseInletNode).Temp = 0.0; - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidIndex, @@ -6170,7 +6170,7 @@ void WaterThermalTankData::initialize(EnergyPlusData &state, bool const FirstHVA } if ((this->SourceInletNode > 0) && (this->DesuperheaterNum == 0) && (this->HeatPumpNum == 0)) { - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->SrcSidePlantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->SrcSidePlantLoc.loopNum).FluidIndex, @@ -6190,7 +6190,7 @@ void WaterThermalTankData::initialize(EnergyPlusData &state, bool const FirstHVA this->SourceOutletTemp = 0.0; this->SourceMassFlowRate = 0.0; this->SavedSourceOutletTemp = 0.0; - Real64 rho = Fluid::GetDensityGlycol(state, fluidNameWater, Constant::InitConvTemp, this->FluidIndex, SizeTankForDemand); + Real64 rho = FluidProperties::GetDensityGlycol(state, fluidNameWater, Constant::InitConvTemp, this->FluidIndex, SizeTankForDemand); this->PlantSourceMassFlowRateMax = this->SourceDesignVolFlowRate * rho; } @@ -6835,26 +6835,26 @@ void WaterThermalTankData::CalcWaterThermalTankMixed(EnergyPlusData &state) // W Real64 rho; if (this->UseSidePlantLoc.loopNum > 0) { - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidName, TankTemp_loc, state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidIndex, RoutineName); } else { - rho = Fluid::GetDensityGlycol(state, fluidNameWater, TankTemp_loc, this->waterIndex, RoutineName); + rho = FluidProperties::GetDensityGlycol(state, fluidNameWater, TankTemp_loc, this->waterIndex, RoutineName); } Real64 TankMass = rho * this->Volume; Real64 Cp; if (this->UseSidePlantLoc.loopNum > 0) { - Cp = Fluid::GetSpecificHeatGlycol(state, + Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidName, TankTemp_loc, state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidIndex, RoutineName); } else { - Cp = Fluid::GetSpecificHeatGlycol(state, fluidNameWater, TankTemp_loc, this->waterIndex, RoutineName); + Cp = FluidProperties::GetSpecificHeatGlycol(state, fluidNameWater, TankTemp_loc, this->waterIndex, RoutineName); } Real64 SecInTimeStep = state.dataHVACGlobal->TimeStepSysSec; @@ -7736,13 +7736,13 @@ void WaterThermalTankData::CalcWaterThermalTankStratified(EnergyPlusData &state) // Specific Heat of water (J/kg K) const Real64 Cp = [&] { if (this->UseSidePlantLoc.loopNum > 0) { - return Fluid::GetSpecificHeatGlycol(state, + return FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidName, this->TankTemp, state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidIndex, RoutineName); } else { - return Fluid::GetSpecificHeatGlycol(state, fluidNameWater, this->TankTemp, this->waterIndex, RoutineName); + return FluidProperties::GetSpecificHeatGlycol(state, fluidNameWater, this->TankTemp, this->waterIndex, RoutineName); } }(); @@ -10720,7 +10720,7 @@ void WaterThermalTankData::SizeSupplySidePlantConnections(EnergyPlusData &state, PlantUtilities::RegisterPlantCompDesignFlow(state, this->UseInletNode, tmpUseDesignVolFlowRate); } - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidIndex, @@ -10738,13 +10738,13 @@ void WaterThermalTankData::SizeSupplySidePlantConnections(EnergyPlusData &state, PlantUtilities::RegisterPlantCompDesignFlow(state, this->UseInletNode, this->UseDesignVolFlowRate); Real64 rho; if (this->UseSidePlantLoc.loopNum > 0) { - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidIndex, RoutineName); } else { - rho = Fluid::GetDensityGlycol(state, fluidNameWater, Constant::InitConvTemp, this->waterIndex, RoutineName); + rho = FluidProperties::GetDensityGlycol(state, fluidNameWater, Constant::InitConvTemp, this->waterIndex, RoutineName); } this->PlantUseMassFlowRateMax = this->UseDesignVolFlowRate * rho; @@ -10783,7 +10783,7 @@ void WaterThermalTankData::SizeSupplySidePlantConnections(EnergyPlusData &state, } else { PlantUtilities::RegisterPlantCompDesignFlow(state, this->SourceInletNode, tmpSourceDesignVolFlowRate); } - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->SrcSidePlantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->SrcSidePlantLoc.loopNum).FluidIndex, @@ -10802,13 +10802,13 @@ void WaterThermalTankData::SizeSupplySidePlantConnections(EnergyPlusData &state, PlantUtilities::RegisterPlantCompDesignFlow(state, this->SourceInletNode, this->SourceDesignVolFlowRate); Real64 rho; if (this->SrcSidePlantLoc.loopNum > 0) { - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->SrcSidePlantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->SrcSidePlantLoc.loopNum).FluidIndex, RoutineName); } else { - rho = Fluid::GetDensityGlycol(state, fluidNameWater, Constant::InitConvTemp, this->waterIndex, RoutineName); + rho = FluidProperties::GetDensityGlycol(state, fluidNameWater, Constant::InitConvTemp, this->waterIndex, RoutineName); } this->PlantSourceMassFlowRateMax = this->SourceDesignVolFlowRate * rho; } @@ -11015,19 +11015,19 @@ void WaterThermalTankData::SizeTankForDemandSide(EnergyPlusData &state) Real64 rho; Real64 Cp; if (this->UseSidePlantLoc.loopNum > 0) { - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidName, ((Tfinish + Tstart) / 2.0), state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidIndex, RoutineName); - Cp = Fluid::GetSpecificHeatGlycol(state, + Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidName, ((Tfinish + Tstart) / 2.0), state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidIndex, RoutineName); } else { - rho = Fluid::GetDensityGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); - Cp = Fluid::GetSpecificHeatGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); + rho = FluidProperties::GetDensityGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); + Cp = FluidProperties::GetSpecificHeatGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); } tmpMaxCapacity = SumPeopleAllZones * this->Sizing.RecoveryCapacityPerPerson * (Tfinish - Tstart) * (1.0 / Constant::SecInHour) * rho * @@ -11066,19 +11066,19 @@ void WaterThermalTankData::SizeTankForDemandSide(EnergyPlusData &state) Real64 rho; Real64 Cp; if (this->UseSidePlantLoc.loopNum > 0) { - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidName, ((Tfinish + Tstart) / 2.0), state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidIndex, RoutineName); - Cp = Fluid::GetSpecificHeatGlycol(state, + Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidName, ((Tfinish + Tstart) / 2.0), state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidIndex, RoutineName); } else { - rho = Fluid::GetDensityGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); - Cp = Fluid::GetSpecificHeatGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); + rho = FluidProperties::GetDensityGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); + Cp = FluidProperties::GetSpecificHeatGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); } tmpMaxCapacity = SumFloorAreaAllZones * this->Sizing.RecoveryCapacityPerArea * (Tfinish - Tstart) * (1.0 / Constant::SecInHour) * rho * Cp; // m2 | m3/hr/m2 | delta T in K | 1 hr/ 3600 s | kg/m3 | J/Kg/k @@ -11111,19 +11111,19 @@ void WaterThermalTankData::SizeTankForDemandSide(EnergyPlusData &state) Real64 rho; Real64 Cp; if (this->UseSidePlantLoc.loopNum > 0) { - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidName, ((Tfinish + Tstart) / 2.0), state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidIndex, RoutineName); - Cp = Fluid::GetSpecificHeatGlycol(state, + Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidName, ((Tfinish + Tstart) / 2.0), state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidIndex, RoutineName); } else { - rho = Fluid::GetDensityGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); - Cp = Fluid::GetSpecificHeatGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); + rho = FluidProperties::GetDensityGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); + Cp = FluidProperties::GetSpecificHeatGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); } tmpMaxCapacity = this->Sizing.NumberOfUnits * this->Sizing.RecoveryCapacityPerUnit * (Tfinish - Tstart) * (1.0 / Constant::SecInHour) * rho * Cp; // m3/hr/ea | delta T in K | 1 hr/ 3600 s | kg/m3 | J/Kg/k @@ -11224,19 +11224,19 @@ void WaterThermalTankData::SizeTankForSupplySide(EnergyPlusData &state) Real64 rho; Real64 Cp; if (this->SrcSidePlantLoc.loopNum > 0) { - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->SrcSidePlantLoc.loopNum).FluidName, ((Tfinish + Tstart) / 2.0), state.dataPlnt->PlantLoop(this->SrcSidePlantLoc.loopNum).FluidIndex, RoutineName); - Cp = Fluid::GetSpecificHeatGlycol(state, + Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(this->SrcSidePlantLoc.loopNum).FluidName, ((Tfinish + Tstart) / 2.0), state.dataPlnt->PlantLoop(this->SrcSidePlantLoc.loopNum).FluidIndex, RoutineName); } else { - rho = Fluid::GetDensityGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); - Cp = Fluid::GetSpecificHeatGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); + rho = FluidProperties::GetDensityGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); + Cp = FluidProperties::GetSpecificHeatGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); } tmpMaxCapacity = (this->Volume * rho * Cp * (Tfinish - Tstart)) / (this->Sizing.RecoveryTime * Constant::SecInHour); // m3 | kg/m3 | J/Kg/K | K | seconds @@ -11402,7 +11402,7 @@ void WaterThermalTankData::SizeDemandSidePlantConnections(EnergyPlusData &state) } else { PlantUtilities::RegisterPlantCompDesignFlow(state, this->UseInletNode, tmpUseDesignVolFlowRate); } - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidIndex, @@ -11422,13 +11422,13 @@ void WaterThermalTankData::SizeDemandSidePlantConnections(EnergyPlusData &state) PlantUtilities::RegisterPlantCompDesignFlow(state, this->UseInletNode, this->UseDesignVolFlowRate); Real64 rho; if (this->UseSidePlantLoc.loopNum > 0) { - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->UseSidePlantLoc.loopNum).FluidIndex, RoutineName); } else { - rho = Fluid::GetDensityGlycol(state, fluidNameWater, Constant::InitConvTemp, this->waterIndex, RoutineName); + rho = FluidProperties::GetDensityGlycol(state, fluidNameWater, Constant::InitConvTemp, this->waterIndex, RoutineName); } this->PlantUseMassFlowRateMax = this->UseDesignVolFlowRate * rho; } // autosizing needed. @@ -11490,7 +11490,7 @@ void WaterThermalTankData::SizeDemandSidePlantConnections(EnergyPlusData &state) } else { PlantUtilities::RegisterPlantCompDesignFlow(state, this->SourceInletNode, tmpSourceDesignVolFlowRate); } - Real64 rho = Fluid::GetDensityGlycol(state, + Real64 rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->SrcSidePlantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->SrcSidePlantLoc.loopNum).FluidIndex, @@ -11510,13 +11510,13 @@ void WaterThermalTankData::SizeDemandSidePlantConnections(EnergyPlusData &state) PlantUtilities::RegisterPlantCompDesignFlow(state, this->SourceInletNode, this->SourceDesignVolFlowRate); Real64 rho; if (this->SrcSidePlantLoc.loopNum > 0) { - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(this->SrcSidePlantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(this->SrcSidePlantLoc.loopNum).FluidIndex, RoutineName); } else { - rho = Fluid::GetDensityGlycol(state, fluidNameWater, Constant::InitConvTemp, this->waterIndex, RoutineName); + rho = FluidProperties::GetDensityGlycol(state, fluidNameWater, Constant::InitConvTemp, this->waterIndex, RoutineName); } this->PlantSourceMassFlowRateMax = this->SourceDesignVolFlowRate * rho; } // autosizing needed. @@ -11558,7 +11558,7 @@ void WaterThermalTankData::SizeStandAloneWaterHeater(EnergyPlusData &state) case SizingMode::PeakDraw: { // get draw rate from maximum in schedule - Real64 rho = Fluid::GetDensityGlycol(state, fluidNameWater, Constant::InitConvTemp, this->waterIndex, RoutineName); + Real64 rho = FluidProperties::GetDensityGlycol(state, fluidNameWater, Constant::InitConvTemp, this->waterIndex, RoutineName); Real64 DrawDesignVolFlowRate = ScheduleManager::GetScheduleMaxValue(state, this->FlowRateSchedule) * this->MassFlowRateMax / rho; if (this->VolumeWasAutoSized) { @@ -11568,9 +11568,9 @@ void WaterThermalTankData::SizeStandAloneWaterHeater(EnergyPlusData &state) } if (this->MaxCapacityWasAutoSized) { if (this->Sizing.RecoveryTime > 0.0) { - rho = Fluid::GetDensityGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); + rho = FluidProperties::GetDensityGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); Real64 Cp = - Fluid::GetSpecificHeatGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); + FluidProperties::GetSpecificHeatGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); tmpMaxCapacity = (this->Volume * rho * Cp * (Tfinish - Tstart)) / (this->Sizing.RecoveryTime * Constant::SecInHour); // m3 | kg/m3 | J/Kg/K | K | seconds @@ -11734,8 +11734,8 @@ void WaterThermalTankData::SizeStandAloneWaterHeater(EnergyPlusData &state) tmpTankVolume = this->Sizing.TankCapacityPerPerson * SumPeopleAllZones; } if (this->MaxCapacityWasAutoSized) { - Real64 rho = Fluid::GetDensityGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); + Real64 rho = FluidProperties::GetDensityGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); tmpMaxCapacity = SumPeopleAllZones * this->Sizing.RecoveryCapacityPerPerson * (Tfinish - Tstart) * (1.0 / Constant::SecInHour) * rho * Cp; // m3/hr/person | delta T in K | 1 hr/ 3600 s | kg/m3 | J/Kg/k } @@ -11763,8 +11763,8 @@ void WaterThermalTankData::SizeStandAloneWaterHeater(EnergyPlusData &state) } if (this->MaxCapacityWasAutoSized) { - Real64 rho = Fluid::GetDensityGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); + Real64 rho = FluidProperties::GetDensityGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); tmpMaxCapacity = SumFloorAreaAllZones * this->Sizing.RecoveryCapacityPerArea * (Tfinish - Tstart) * (1.0 / Constant::SecInHour) * rho * Cp; // m2 | m3/hr/m2 | delta T in K | 1 hr/ 3600 s | kg/m3 | J/Kg/k } @@ -11783,8 +11783,8 @@ void WaterThermalTankData::SizeStandAloneWaterHeater(EnergyPlusData &state) if (this->VolumeWasAutoSized) tmpTankVolume = this->Sizing.TankCapacityPerUnit * this->Sizing.NumberOfUnits; if (this->MaxCapacityWasAutoSized) { - Real64 rho = Fluid::GetDensityGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); - Real64 Cp = Fluid::GetSpecificHeatGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); + Real64 rho = FluidProperties::GetDensityGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(state, fluidNameWater, ((Tfinish + Tstart) / 2.0), this->waterIndex, RoutineName); tmpMaxCapacity = this->Sizing.NumberOfUnits * this->Sizing.RecoveryCapacityPerUnit * (Tfinish - Tstart) * (1.0 / Constant::SecInHour) * rho * Cp; // m3/hr/ea | delta T in K | 1 hr/ 3600 s | kg/m3 | J/Kg/k } diff --git a/src/EnergyPlus/WaterToAirHeatPump.cc b/src/EnergyPlus/WaterToAirHeatPump.cc index e070b12bdad..32c55f30d84 100644 --- a/src/EnergyPlus/WaterToAirHeatPump.cc +++ b/src/EnergyPlus/WaterToAirHeatPump.cc @@ -120,9 +120,6 @@ namespace WaterToAirHeatPump { // PURPOSE OF THIS SUBROUTINE: // This subroutine manages Water to Air Heat Pump component simulation. - // Using/Aliasing - using Fluid::FindGlycol; - // shut off after compressor cycle off [s] // cycling fan/cycling compressor @@ -131,7 +128,7 @@ namespace WaterToAirHeatPump { // Obtains and Allocates WatertoAirHP related parameters from input file if (state.dataWaterToAirHeatPump->GetCoilsInputFlag) { // First time subroutine has been entered - state.dataWaterToAirHeatPump->WaterIndex = FindGlycol(state, fluidNameWater); // Initialize the WaterIndex once + state.dataWaterToAirHeatPump->WaterIndex = FluidProperties::GetGlycolNum(state, fluidNameWater); // Initialize the WaterIndex once GetWatertoAirHPInput(state); state.dataWaterToAirHeatPump->GetCoilsInputFlag = false; } @@ -203,8 +200,7 @@ namespace WaterToAirHeatPump { // Using/Aliasing using namespace NodeInputManager; using BranchNodeConnections::TestCompSet; - using Fluid::CheckFluidPropertyName; - using Fluid::FindGlycol; + using FluidProperties::CheckFluidPropertyName; using GlobalNames::VerifyUniqueCoilName; using PlantUtilities::RegisterPlantCompDesignFlow; using namespace OutputReportPredefined; @@ -996,8 +992,8 @@ namespace WaterToAirHeatPump { // Uses the status flags to trigger initializations. // Using/Aliasing - using Fluid::GetDensityGlycol; - using Fluid::GetSpecificHeatGlycol; + using FluidProperties::GetDensityGlycol; + using FluidProperties::GetSpecificHeatGlycol; using PlantUtilities::InitComponentNodes; using PlantUtilities::ScanPlantLoopsForObject; using PlantUtilities::SetComponentFlowRate; @@ -1331,7 +1327,7 @@ namespace WaterToAirHeatPump { SourceSideFluidIndex = state.dataPlnt->PlantLoop(heatPump.plantLoc.loopNum).FluidIndex; SourceSideVolFlowRate = heatPump.InletWaterMassFlowRate / - Fluid::GetDensityGlycol(state, SourceSideFluidName, heatPump.InletWaterTemp, SourceSideFluidIndex, RoutineNameSourceSideInletTemp); + FluidProperties::GetDensityGlycol(state, SourceSideFluidName, heatPump.InletWaterTemp, SourceSideFluidIndex, RoutineNameSourceSideInletTemp); StillSimulatingFlag = true; @@ -1437,7 +1433,7 @@ namespace WaterToAirHeatPump { } // Determine Effectiveness of Source Side - CpFluid = Fluid::GetSpecificHeatGlycol( + CpFluid = FluidProperties::GetSpecificHeatGlycol( state, SourceSideFluidName, heatPump.InletWaterTemp, SourceSideFluidIndex, RoutineNameSourceSideInletTemp); // IF (SourceSideFluidName=='WATER') THEN @@ -1494,9 +1490,9 @@ namespace WaterToAirHeatPump { LoadSideTemp = EvapTemp; // Determine the Load Side and Source Side Saturated Temp (evaporating and condensing pressures) - SourceSidePressure = Fluid::GetSatPressureRefrig( + SourceSidePressure = FluidProperties::GetSatPressureRefrig( state, heatPump.Refrigerant, SourceSideTemp, state.dataWaterToAirHeatPump->RefrigIndex, RoutineNameSourceSideTemp); - LoadSidePressure = Fluid::GetSatPressureRefrig( + LoadSidePressure = FluidProperties::GetSatPressureRefrig( state, heatPump.Refrigerant, LoadSideTemp, state.dataWaterToAirHeatPump->RefrigIndex, RoutineNameLoadSideTemp); if (LoadSidePressure < heatPump.LowPressCutoff && !FirstHVACIteration) { @@ -1546,18 +1542,18 @@ namespace WaterToAirHeatPump { // Determine the Load Side Outlet Enthalpy (Saturated Gas) Quality = 1.0; - LoadSideOutletEnth = Fluid::GetSatEnthalpyRefrig( + LoadSideOutletEnth = FluidProperties::GetSatEnthalpyRefrig( state, heatPump.Refrigerant, LoadSideTemp, Quality, state.dataWaterToAirHeatPump->RefrigIndex, RoutineNameLoadSideTemp); // Determine Source Side Outlet Enthalpy (Saturated Liquid) Quality = 0.0; - SourceSideOutletEnth = Fluid::GetSatEnthalpyRefrig( + SourceSideOutletEnth = FluidProperties::GetSatEnthalpyRefrig( state, heatPump.Refrigerant, SourceSideTemp, Quality, state.dataWaterToAirHeatPump->RefrigIndex, RoutineNameSourceSideTemp); // Determine Superheated Temperature of the Load Side outlet/compressor Inlet CompressInletTemp = LoadSideTemp + heatPump.SuperheatTemp; // Determine the Enthalpy of the Superheated Fluid at Load Side Outlet/Compressor Inlet - SuperHeatEnth = Fluid::GetSupHeatEnthalpyRefrig(state, + SuperHeatEnth = FluidProperties::GetSupHeatEnthalpyRefrig(state, heatPump.Refrigerant, CompressInletTemp, LoadSidePressure, @@ -1569,7 +1565,7 @@ namespace WaterToAirHeatPump { // Determine the saturated temp at suction pressure, shoot out into the superheated region find the enthalpy // check that with the inlet enthalpy ( as suction loss is isenthalpic). Iterate till desired accuracy is reached if (!Converged) { - CompSuctionSatTemp = Fluid::GetSatTemperatureRefrig( + CompSuctionSatTemp = FluidProperties::GetSatTemperatureRefrig( state, heatPump.Refrigerant, SuctionPr, state.dataWaterToAirHeatPump->RefrigIndex, RoutineNameSuctionPr); CompSuctionTemp1 = CompSuctionSatTemp; @@ -1581,7 +1577,7 @@ namespace WaterToAirHeatPump { static constexpr std::string_view RoutineName("CalcWaterToAirHPHeating:CalcCompSuctionTemp"); std::string Refrigerant; // Name of refrigerant int refrigIndex = state.dataWaterToAirHeatPump->RefrigIndex; - Real64 compSuctionEnth = Fluid::GetSupHeatEnthalpyRefrig(state, Refrigerant, CompSuctionTemp, SuctionPr, refrigIndex, RoutineName); + Real64 compSuctionEnth = FluidProperties::GetSupHeatEnthalpyRefrig(state, Refrigerant, CompSuctionTemp, SuctionPr, refrigIndex, RoutineName); return (compSuctionEnth - SuperHeatEnth) / SuperHeatEnth; }; @@ -1591,13 +1587,13 @@ namespace WaterToAirHeatPump { heatPump.SimFlag = false; return; } - CompSuctionEnth = Fluid::GetSupHeatEnthalpyRefrig(state, + CompSuctionEnth = FluidProperties::GetSupHeatEnthalpyRefrig(state, heatPump.Refrigerant, state.dataWaterToAirHeatPump->CompSuctionTemp, SuctionPr, state.dataWaterToAirHeatPump->RefrigIndex, RoutineNameCompSuctionTemp); - CompSuctionDensity = Fluid::GetSupHeatDensityRefrig(state, + CompSuctionDensity = FluidProperties::GetSupHeatDensityRefrig(state, heatPump.Refrigerant, state.dataWaterToAirHeatPump->CompSuctionTemp, SuctionPr, @@ -1846,7 +1842,7 @@ namespace WaterToAirHeatPump { SourceSideFluidIndex = state.dataPlnt->PlantLoop(heatPump.plantLoc.loopNum).FluidIndex; SourceSideVolFlowRate = heatPump.InletWaterMassFlowRate / - Fluid::GetDensityGlycol(state, SourceSideFluidName, heatPump.InletWaterTemp, SourceSideFluidIndex, RoutineNameSourceSideInletTemp); + FluidProperties::GetDensityGlycol(state, SourceSideFluidName, heatPump.InletWaterTemp, SourceSideFluidIndex, RoutineNameSourceSideInletTemp); // If heat pump is not operating, return if (SensDemand == 0.0 || heatPump.InletAirMassFlowRate <= 0.0 || heatPump.InletWaterMassFlowRate <= 0.0) { @@ -1906,7 +1902,7 @@ namespace WaterToAirHeatPump { // Determine Effectiveness of Source Side CpFluid = - Fluid::GetSpecificHeatGlycol(state, SourceSideFluidName, heatPump.InletWaterTemp, SourceSideFluidIndex, RoutineNameSourceSideInletTemp); + FluidProperties::GetSpecificHeatGlycol(state, SourceSideFluidName, heatPump.InletWaterTemp, SourceSideFluidIndex, RoutineNameSourceSideInletTemp); // IF (SourceSideFluidName=='WATER') THEN if (SourceSideFluidIndex == state.dataWaterToAirHeatPump->WaterIndex) { @@ -1926,9 +1922,9 @@ namespace WaterToAirHeatPump { LoadSideTemp = heatPump.InletAirDBTemp + state.dataWaterToAirHeatPump->initialQLoad * LoadSideEffect_CpAir_MassFlowRate_inv; // Determine the Load Side and Source Side Saturated Temp (evaporating and condensing pressures) - SourceSidePressure = Fluid::GetSatPressureRefrig( + SourceSidePressure = FluidProperties::GetSatPressureRefrig( state, heatPump.Refrigerant, SourceSideTemp, state.dataWaterToAirHeatPump->RefrigIndex, RoutineNameSourceSideTemp); - LoadSidePressure = Fluid::GetSatPressureRefrig( + LoadSidePressure = FluidProperties::GetSatPressureRefrig( state, heatPump.Refrigerant, LoadSideTemp, state.dataWaterToAirHeatPump->RefrigIndex, RoutineNameLoadSideTemp); if (SourceSidePressure < heatPump.LowPressCutoff && !FirstHVACIteration) { if (!state.dataGlobal->WarmupFlag) { @@ -1991,20 +1987,20 @@ namespace WaterToAirHeatPump { // Determine the Source Side Outlet Enthalpy // Quality of the refrigerant leaving the evaporator is saturated gas Quality = 1.0; - SourceSideOutletEnth = Fluid::GetSatEnthalpyRefrig( + SourceSideOutletEnth = FluidProperties::GetSatEnthalpyRefrig( state, heatPump.Refrigerant, SourceSideTemp, Quality, state.dataWaterToAirHeatPump->RefrigIndex, RoutineNameSourceSideTemp); // Determine Load Side Outlet Enthalpy // Quality of the refrigerant leaving the condenser is saturated liguid Quality = 0.0; - LoadSideOutletEnth = Fluid::GetSatEnthalpyRefrig( + LoadSideOutletEnth = FluidProperties::GetSatEnthalpyRefrig( state, heatPump.Refrigerant, LoadSideTemp, Quality, state.dataWaterToAirHeatPump->RefrigIndex, RoutineNameLoadSideTemp); // Determine Superheated Temperature of the Source Side outlet/compressor Inlet CompressInletTemp = SourceSideTemp + heatPump.SuperheatTemp; // Determine the Enathalpy of the Superheated Fluid at Source Side Outlet/Compressor Inlet - SuperHeatEnth = Fluid::GetSupHeatEnthalpyRefrig(state, + SuperHeatEnth = FluidProperties::GetSupHeatEnthalpyRefrig(state, heatPump.Refrigerant, CompressInletTemp, SourceSidePressure, @@ -2017,7 +2013,7 @@ namespace WaterToAirHeatPump { // check that with the inlet enthalpy ( as suction loss is isenthalpic). Iterate till desired accuracy is reached if (!Converged) { - CompSuctionSatTemp = Fluid::GetSatTemperatureRefrig( + CompSuctionSatTemp = FluidProperties::GetSatTemperatureRefrig( state, heatPump.Refrigerant, SuctionPr, state.dataWaterToAirHeatPump->RefrigIndex, RoutineNameSuctionPr); CompSuctionTemp1 = CompSuctionSatTemp; @@ -2052,7 +2048,7 @@ namespace WaterToAirHeatPump { static constexpr std::string_view RoutineName("CalcWaterToAirHPHeating:CalcCompSuctionTemp"); std::string Refrigerant; // Name of refrigerant int refrigIndex = state.dataWaterToAirHeatPump->RefrigIndex; - Real64 compSuctionEnth = Fluid::GetSupHeatEnthalpyRefrig(state, Refrigerant, CompSuctionTemp, SuctionPr, refrigIndex, RoutineName); + Real64 compSuctionEnth = FluidProperties::GetSupHeatEnthalpyRefrig(state, Refrigerant, CompSuctionTemp, SuctionPr, refrigIndex, RoutineName); return (compSuctionEnth - SuperHeatEnth) / SuperHeatEnth; }; @@ -2061,9 +2057,9 @@ namespace WaterToAirHeatPump { heatPump.SimFlag = false; return; } - CompSuctionEnth = Fluid::GetSupHeatEnthalpyRefrig( + CompSuctionEnth = FluidProperties::GetSupHeatEnthalpyRefrig( state, heatPump.Refrigerant, CompSuctionTemp, SuctionPr, state.dataWaterToAirHeatPump->RefrigIndex, RoutineNameCompSuctionTemp); - CompSuctionDensity = Fluid::GetSupHeatDensityRefrig( + CompSuctionDensity = FluidProperties::GetSupHeatDensityRefrig( state, heatPump.Refrigerant, CompSuctionTemp, SuctionPr, state.dataWaterToAirHeatPump->RefrigIndex, RoutineNameCompSuctionTemp); // Find Refrigerant Flow Rate @@ -2442,14 +2438,14 @@ namespace WaterToAirHeatPump { Real64 CpCoolant; // Specific heat of water [J/kg-K] Real64 CondCoolant; // Conductivity of water [W/m-K] - VisWater = Fluid::GetViscosityGlycol(state, fluidNameWater, Temp, state.dataWaterToAirHeatPump->WaterIndex, CalledFrom); - DensityWater = Fluid::GetDensityGlycol(state, fluidNameWater, Temp, state.dataWaterToAirHeatPump->WaterIndex, CalledFrom); - CpWater = Fluid::GetSpecificHeatGlycol(state, fluidNameWater, Temp, state.dataWaterToAirHeatPump->WaterIndex, CalledFrom); - CondWater = Fluid::GetConductivityGlycol(state, fluidNameWater, Temp, state.dataWaterToAirHeatPump->WaterIndex, CalledFrom); - VisCoolant = Fluid::GetViscosityGlycol(state, FluidName, Temp, FluidIndex, CalledFrom); - DensityCoolant = Fluid::GetDensityGlycol(state, FluidName, Temp, FluidIndex, CalledFrom); - CpCoolant = Fluid::GetSpecificHeatGlycol(state, FluidName, Temp, FluidIndex, CalledFrom); - CondCoolant = Fluid::GetConductivityGlycol(state, FluidName, Temp, FluidIndex, CalledFrom); + VisWater = FluidProperties::GetViscosityGlycol(state, fluidNameWater, Temp, state.dataWaterToAirHeatPump->WaterIndex, CalledFrom); + DensityWater = FluidProperties::GetDensityGlycol(state, fluidNameWater, Temp, state.dataWaterToAirHeatPump->WaterIndex, CalledFrom); + CpWater = FluidProperties::GetSpecificHeatGlycol(state, fluidNameWater, Temp, state.dataWaterToAirHeatPump->WaterIndex, CalledFrom); + CondWater = FluidProperties::GetConductivityGlycol(state, fluidNameWater, Temp, state.dataWaterToAirHeatPump->WaterIndex, CalledFrom); + VisCoolant = FluidProperties::GetViscosityGlycol(state, FluidName, Temp, FluidIndex, CalledFrom); + DensityCoolant = FluidProperties::GetDensityGlycol(state, FluidName, Temp, FluidIndex, CalledFrom); + CpCoolant = FluidProperties::GetSpecificHeatGlycol(state, FluidName, Temp, FluidIndex, CalledFrom); + CondCoolant = FluidProperties::GetConductivityGlycol(state, FluidName, Temp, FluidIndex, CalledFrom); DegradF = std::pow(VisCoolant / VisWater, -0.47) * std::pow(DensityCoolant / DensityWater, 0.8) * std::pow(CpCoolant / CpWater, 0.33) * std::pow(CondCoolant / CondWater, 0.67); @@ -2475,16 +2471,13 @@ namespace WaterToAirHeatPump { // incorrect coil type or name is given, ErrorsFound is returned as true and value is returned // as zero. - // Using/Aliasing - using Fluid::FindGlycol; - // Return value int IndexNum; // returned index of matched coil // Obtains and Allocates WatertoAirHP related parameters from input file if (state.dataWaterToAirHeatPump->GetCoilsInputFlag) { // First time subroutine has been entered GetWatertoAirHPInput(state); - state.dataWaterToAirHeatPump->WaterIndex = FindGlycol(state, fluidNameWater); // Initialize the WaterIndex once + state.dataWaterToAirHeatPump->WaterIndex = FluidProperties::GetGlycolNum(state, fluidNameWater); // Initialize the WaterIndex once state.dataWaterToAirHeatPump->GetCoilsInputFlag = false; } @@ -2516,9 +2509,6 @@ namespace WaterToAirHeatPump { // incorrect coil type or name is given, ErrorsFound is returned as true and capacity is returned // as negative. - // Using/Aliasing - using Fluid::FindGlycol; - // Return value Real64 CoilCapacity; // returned capacity of matched coil @@ -2527,7 +2517,7 @@ namespace WaterToAirHeatPump { // Obtains and Allocates WatertoAirHP related parameters from input file if (state.dataWaterToAirHeatPump->GetCoilsInputFlag) { // First time subroutine has been entered - state.dataWaterToAirHeatPump->WaterIndex = FindGlycol(state, fluidNameWater); // Initialize the WaterIndex once + state.dataWaterToAirHeatPump->WaterIndex = FluidProperties::GetGlycolNum(state, fluidNameWater); // Initialize the WaterIndex once GetWatertoAirHPInput(state); state.dataWaterToAirHeatPump->GetCoilsInputFlag = false; } @@ -2573,9 +2563,6 @@ namespace WaterToAirHeatPump { // incorrect coil type or name is given, ErrorsFound is returned as true and value is returned // as zero. - // Using/Aliasing - using Fluid::FindGlycol; - // Return value int NodeNumber; // returned outlet node of matched coil @@ -2585,7 +2572,7 @@ namespace WaterToAirHeatPump { // Obtains and Allocates WatertoAirHP related parameters from input file if (state.dataWaterToAirHeatPump->GetCoilsInputFlag) { // First time subroutine has been entered GetWatertoAirHPInput(state); - state.dataWaterToAirHeatPump->WaterIndex = FindGlycol(state, fluidNameWater); // Initialize the WaterIndex once + state.dataWaterToAirHeatPump->WaterIndex = FluidProperties::GetGlycolNum(state, fluidNameWater); // Initialize the WaterIndex once state.dataWaterToAirHeatPump->GetCoilsInputFlag = false; } @@ -2621,9 +2608,6 @@ namespace WaterToAirHeatPump { // incorrect coil type or name is given, ErrorsFound is returned as true and value is returned // as zero. - // Using/Aliasing - using Fluid::FindGlycol; - // Return value int NodeNumber; // returned outlet node of matched coil @@ -2633,7 +2617,7 @@ namespace WaterToAirHeatPump { // Obtains and Allocates WatertoAirHP related parameters from input file if (state.dataWaterToAirHeatPump->GetCoilsInputFlag) { // First time subroutine has been entered GetWatertoAirHPInput(state); - state.dataWaterToAirHeatPump->WaterIndex = FindGlycol(state, fluidNameWater); // Initialize the WaterIndex once + state.dataWaterToAirHeatPump->WaterIndex = FluidProperties::GetGlycolNum(state, fluidNameWater); // Initialize the WaterIndex once state.dataWaterToAirHeatPump->GetCoilsInputFlag = false; } diff --git a/src/EnergyPlus/WaterToAirHeatPumpSimple.cc b/src/EnergyPlus/WaterToAirHeatPumpSimple.cc index 3d3a091e9ff..4da0dc01b80 100644 --- a/src/EnergyPlus/WaterToAirHeatPumpSimple.cc +++ b/src/EnergyPlus/WaterToAirHeatPumpSimple.cc @@ -1126,7 +1126,7 @@ namespace WaterToAirHeatPumpSimple { simpleWatertoAirHP.PartLoadRatio = 0.0; if (simpleWatertoAirHP.RatedWaterVolFlowRate != DataSizing::AutoSize) { - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(simpleWatertoAirHP.plantLoc.loopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(simpleWatertoAirHP.plantLoc.loopNum).FluidIndex, @@ -2865,12 +2865,12 @@ namespace WaterToAirHeatPumpSimple { false); if (PltSizNum > 0) { - rho = Fluid::GetDensityGlycol(state, + rho = FluidProperties::GetDensityGlycol(state, state.dataPlnt->PlantLoop(simpleWatertoAirHP.plantLoc.loopNum).FluidName, state.dataSize->PlantSizData(PltSizNum).ExitTemp, state.dataPlnt->PlantLoop(simpleWatertoAirHP.plantLoc.loopNum).FluidIndex, RoutineNameAlt); - Cp = Fluid::GetSpecificHeatGlycol(state, + Cp = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(simpleWatertoAirHP.plantLoc.loopNum).FluidName, state.dataSize->PlantSizData(PltSizNum).ExitTemp, state.dataPlnt->PlantLoop(simpleWatertoAirHP.plantLoc.loopNum).FluidIndex, @@ -3097,7 +3097,7 @@ namespace WaterToAirHeatPumpSimple { state.dataWaterToAirHeatPumpSimple->SourceSideMassFlowRate = simpleWatertoAirHP.WaterMassFlowRate; state.dataWaterToAirHeatPumpSimple->SourceSideInletTemp = simpleWatertoAirHP.InletWaterTemp; state.dataWaterToAirHeatPumpSimple->SourceSideInletEnth = simpleWatertoAirHP.InletWaterEnthalpy; - CpWater = Fluid::GetSpecificHeatGlycol(state, + CpWater = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(simpleWatertoAirHP.plantLoc.loopNum).FluidName, state.dataWaterToAirHeatPumpSimple->SourceSideInletTemp, state.dataPlnt->PlantLoop(simpleWatertoAirHP.plantLoc.loopNum).FluidIndex, @@ -3399,7 +3399,7 @@ namespace WaterToAirHeatPumpSimple { state.dataWaterToAirHeatPumpSimple->SourceSideMassFlowRate = simpleWatertoAirHP.WaterMassFlowRate; state.dataWaterToAirHeatPumpSimple->SourceSideInletTemp = simpleWatertoAirHP.InletWaterTemp; state.dataWaterToAirHeatPumpSimple->SourceSideInletEnth = simpleWatertoAirHP.InletWaterEnthalpy; - CpWater = Fluid::GetSpecificHeatGlycol(state, + CpWater = FluidProperties::GetSpecificHeatGlycol(state, state.dataPlnt->PlantLoop(simpleWatertoAirHP.plantLoc.loopNum).FluidName, state.dataWaterToAirHeatPumpSimple->SourceSideInletTemp, state.dataPlnt->PlantLoop(simpleWatertoAirHP.plantLoc.loopNum).FluidIndex, diff --git a/src/EnergyPlus/WaterUse.cc b/src/EnergyPlus/WaterUse.cc index 46d87616c28..9d3a86681f6 100644 --- a/src/EnergyPlus/WaterUse.cc +++ b/src/EnergyPlus/WaterUse.cc @@ -1702,7 +1702,7 @@ namespace WaterUse { if (state.dataWaterUse->calcRhoH2O) { int DummyValue = 1; - state.dataWaterUse->rhoH2OStd = Fluid::GetDensityGlycol(state, "WATER", Constant::InitConvTemp, DummyValue, RoutineName); + state.dataWaterUse->rhoH2OStd = FluidProperties::GetDensityGlycol(state, "WATER", Constant::InitConvTemp, DummyValue, RoutineName); state.dataWaterUse->calcRhoH2O = false; } return state.dataWaterUse->rhoH2OStd; diff --git a/src/EnergyPlus/api/EnergyPlusPgm.cc b/src/EnergyPlus/api/EnergyPlusPgm.cc index 6fc0c2ef5d2..a86e8c1a94e 100644 --- a/src/EnergyPlus/api/EnergyPlusPgm.cc +++ b/src/EnergyPlus/api/EnergyPlusPgm.cc @@ -360,7 +360,7 @@ int wrapUpEnergyPlus(EnergyPlus::EnergyPlusData &state) Psychrometrics::ShowPsychrometricSummary(state, state.files.audit); state.dataInputProcessing->inputProcessor->reportOrphanRecordObjects(state); - Fluid::ReportOrphanFluids(state); + FluidProperties::ReportOrphanFluids(state); ScheduleManager::ReportOrphanSchedules(state); if (state.dataSQLiteProcedures->sqlite) { state.dataSQLiteProcedures->sqlite.reset(); diff --git a/src/EnergyPlus/api/func.cc b/src/EnergyPlus/api/func.cc index 4136e0675e8..c17d244fb16 100644 --- a/src/EnergyPlus/api/func.cc +++ b/src/EnergyPlus/api/func.cc @@ -62,7 +62,7 @@ void initializeFunctionalAPI(EnergyPlusState state) thisState->dataInputProcessing->inputProcessor = EnergyPlus::InputProcessor::factory(); } EnergyPlus::Psychrometrics::InitializePsychRoutines(*thisState); - EnergyPlus::Fluid::InitializeGlycRoutines(); + EnergyPlus::FluidProperties::InitializeGlycRoutines(); } const char *apiVersionFromEPlus(EnergyPlusState) @@ -89,68 +89,68 @@ void registerErrorCallback(EnergyPlusState state, void (*f)(int, const char *)) Glycol glycolNew(EnergyPlusState state, const char *glycolName) { auto *thisState = reinterpret_cast(state); - auto *glycol = new EnergyPlus::Fluid::GlycolAPI(*thisState, glycolName); + auto *glycol = new EnergyPlus::FluidProperties::GlycolAPI(*thisState, glycolName); return reinterpret_cast(glycol); } void glycolDelete(EnergyPlusState, Glycol glycol) { - delete reinterpret_cast(glycol); + delete reinterpret_cast(glycol); } Real64 glycolSpecificHeat(EnergyPlusState state, Glycol glycol, Real64 temperature) { auto *thisState = reinterpret_cast(state); - return reinterpret_cast(glycol)->specificHeat(*thisState, temperature); + return reinterpret_cast(glycol)->specificHeat(*thisState, temperature); } Real64 glycolDensity(EnergyPlusState state, Glycol glycol, Real64 temperature) { auto *thisState = reinterpret_cast(state); - return reinterpret_cast(glycol)->density(*thisState, temperature); + return reinterpret_cast(glycol)->density(*thisState, temperature); } Real64 glycolConductivity(EnergyPlusState state, Glycol glycol, Real64 temperature) { auto *thisState = reinterpret_cast(state); - return reinterpret_cast(glycol)->conductivity(*thisState, temperature); + return reinterpret_cast(glycol)->conductivity(*thisState, temperature); } Real64 glycolViscosity(EnergyPlusState state, Glycol glycol, Real64 temperature) { auto *thisState = reinterpret_cast(state); - return reinterpret_cast(glycol)->viscosity(*thisState, temperature); + return reinterpret_cast(glycol)->viscosity(*thisState, temperature); } Refrigerant refrigerantNew(EnergyPlusState state, const char *refrigerantName) { auto *thisState = reinterpret_cast(state); - auto *refrigerant = new EnergyPlus::Fluid::RefrigerantAPI(*thisState, refrigerantName); + auto *refrigerant = new EnergyPlus::FluidProperties::RefrigerantAPI(*thisState, refrigerantName); return reinterpret_cast(refrigerant); } void refrigerantDelete(EnergyPlusState, Refrigerant refrigerant) { - delete reinterpret_cast(refrigerant); + delete reinterpret_cast(refrigerant); } Real64 refrigerantSaturationPressure(EnergyPlusState state, Refrigerant refrigerant, Real64 temperature) { auto *thisState = reinterpret_cast(state); - return reinterpret_cast(refrigerant)->saturationPressure(*thisState, temperature); + return reinterpret_cast(refrigerant)->saturationPressure(*thisState, temperature); } Real64 refrigerantSaturationTemperature(EnergyPlusState state, Refrigerant refrigerant, Real64 pressure) { auto *thisState = reinterpret_cast(state); - return reinterpret_cast(refrigerant)->saturationTemperature(*thisState, pressure); + return reinterpret_cast(refrigerant)->saturationTemperature(*thisState, pressure); } Real64 refrigerantSaturatedEnthalpy(EnergyPlusState state, Refrigerant refrigerant, Real64 temperature, Real64 quality) { auto *thisState = reinterpret_cast(state); - return reinterpret_cast(refrigerant)->saturatedEnthalpy(*thisState, temperature, quality); + return reinterpret_cast(refrigerant)->saturatedEnthalpy(*thisState, temperature, quality); } Real64 refrigerantSaturatedDensity(EnergyPlusState state, Refrigerant refrigerant, Real64 temperature, Real64 quality) { auto *thisState = reinterpret_cast(state); - return reinterpret_cast(refrigerant)->saturatedDensity(*thisState, temperature, quality); + return reinterpret_cast(refrigerant)->saturatedDensity(*thisState, temperature, quality); } Real64 refrigerantSaturatedSpecificHeat(EnergyPlusState state, Refrigerant refrigerant, Real64 temperature, Real64 quality) { auto *thisState = reinterpret_cast(state); - return reinterpret_cast(refrigerant)->saturatedSpecificHeat(*thisState, temperature, quality); + return reinterpret_cast(refrigerant)->saturatedSpecificHeat(*thisState, temperature, quality); } // Real64 refrigerantSuperHeatedEnthalpy(EnergyPlusState, Refrigerant refrigerant, Real64 temperature, Real64 pressure) { // return reinterpret_cast(refrigerant)->superHeatedEnthalpy(temperature, pressure); diff --git a/tst/EnergyPlus/unit/BoilerHotWater.unit.cc b/tst/EnergyPlus/unit/BoilerHotWater.unit.cc index f7ae5b15711..19baffc169c 100644 --- a/tst/EnergyPlus/unit/BoilerHotWater.unit.cc +++ b/tst/EnergyPlus/unit/BoilerHotWater.unit.cc @@ -137,12 +137,12 @@ TEST_F(EnergyPlusFixture, Boiler_HotWaterAutoSizeTempTest) state->dataPlnt->PlantFirstSizesOkayToFinalize = true; // calculate nominal capacity at 60.0 C hot water temperature - Real64 rho = Fluid::GetDensityGlycol(*state, + Real64 rho = FluidProperties::GetDensityGlycol(*state, state->dataPlnt->PlantLoop(state->dataBoilers->Boiler(1).plantLoc.loopNum).FluidName, 60.0, state->dataPlnt->PlantLoop(state->dataBoilers->Boiler(1).plantLoc.loopNum).FluidIndex, "Boiler_HotWaterAutoSizeTempTest"); - Real64 Cp = Fluid::GetSpecificHeatGlycol(*state, + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(*state, state->dataPlnt->PlantLoop(state->dataBoilers->Boiler(1).plantLoc.loopNum).FluidName, 60.0, state->dataPlnt->PlantLoop(state->dataBoilers->Boiler(1).plantLoc.loopNum).FluidIndex, diff --git a/tst/EnergyPlus/unit/ChillerAbsorption.unit.cc b/tst/EnergyPlus/unit/ChillerAbsorption.unit.cc index e32037d8699..7bd0003246a 100644 --- a/tst/EnergyPlus/unit/ChillerAbsorption.unit.cc +++ b/tst/EnergyPlus/unit/ChillerAbsorption.unit.cc @@ -2022,13 +2022,13 @@ TEST_F(EnergyPlusFixture, ChillerAbsorption_Autosize) state->dataPlnt->PlantFinalSizesOkayToReport = true; // Calculate expected values - Real64 rho_cw = Fluid::GetDensityGlycol(*state, + Real64 rho_cw = FluidProperties::GetDensityGlycol(*state, state->dataPlnt->PlantLoop(chwLoopNum).FluidName, Constant::CWInitConvTemp, state->dataPlnt->PlantLoop(chwLoopNum).FluidIndex, "ChillerAbsorption_Autosize_TEST"); - Real64 Cp_evap = Fluid::GetSpecificHeatGlycol(*state, + Real64 Cp_evap = FluidProperties::GetSpecificHeatGlycol(*state, state->dataPlnt->PlantLoop(chwLoopNum).FluidName, Constant::CWInitConvTemp, state->dataPlnt->PlantLoop(chwLoopNum).FluidIndex, @@ -2042,13 +2042,13 @@ TEST_F(EnergyPlusFixture, ChillerAbsorption_Autosize) Real64 const SteamInputRatNom = thisChiller.SteamLoadCoef[0] + thisChiller.SteamLoadCoef[1] + thisChiller.SteamLoadCoef[2]; EXPECT_DOUBLE_EQ(1.0, SteamInputRatNom); - Real64 rho_cond = Fluid::GetDensityGlycol(*state, + Real64 rho_cond = FluidProperties::GetDensityGlycol(*state, state->dataPlnt->PlantLoop(cndLoopNum).FluidName, Constant::CWInitConvTemp, state->dataPlnt->PlantLoop(cndLoopNum).FluidIndex, "ChillerAbsorption_Autosize_TEST"); - Real64 Cp_cond = Fluid::GetSpecificHeatGlycol(*state, + Real64 Cp_cond = FluidProperties::GetSpecificHeatGlycol(*state, state->dataPlnt->PlantLoop(cndLoopNum).FluidName, thisChiller.TempDesCondIn, state->dataPlnt->PlantLoop(cndLoopNum).FluidIndex, @@ -2058,13 +2058,13 @@ TEST_F(EnergyPlusFixture, ChillerAbsorption_Autosize) expectedNomCap * (1.0 + SteamInputRatNom + nomCapToPumpRatio) / (rho_cond * Cp_cond * state->dataSize->PlantSizData(cndLoopNum).DeltaT); Real64 const SteamDeltaT = state->dataSize->PlantSizData(genLoopNum).DeltaT; - Real64 const Cp_gen = Fluid::GetSpecificHeatGlycol(*state, + Real64 const Cp_gen = FluidProperties::GetSpecificHeatGlycol(*state, state->dataPlnt->PlantLoop(genLoopNum).FluidName, state->dataSize->PlantSizData(genLoopNum).ExitTemp, state->dataPlnt->PlantLoop(genLoopNum).FluidIndex, "ChillerAbsorption_Autosize_TEST"); - Real64 const rho_gen = Fluid::GetDensityGlycol(*state, + Real64 const rho_gen = FluidProperties::GetDensityGlycol(*state, state->dataPlnt->PlantLoop(genLoopNum).FluidName, (state->dataSize->PlantSizData(genLoopNum).ExitTemp - SteamDeltaT), state->dataPlnt->PlantLoop(genLoopNum).FluidIndex, diff --git a/tst/EnergyPlus/unit/ChillerExhaustAbsorption.unit.cc b/tst/EnergyPlus/unit/ChillerExhaustAbsorption.unit.cc index d06b22313a7..1aaeb633ec5 100644 --- a/tst/EnergyPlus/unit/ChillerExhaustAbsorption.unit.cc +++ b/tst/EnergyPlus/unit/ChillerExhaustAbsorption.unit.cc @@ -685,7 +685,7 @@ TEST_F(EnergyPlusFixture, ExhAbsorption_calcHeater_Fix_Test) bool const runflaginput = true; thisChillerHeater.calcHeater(*state, loadinput, runflaginput); - const Real64 CpHW = Fluid::GetSpecificHeatGlycol(*state, hwPlantLoop.FluidName, hwReturnTemp, hwPlantLoop.FluidIndex, "UnitTest"); + const Real64 CpHW = FluidProperties::GetSpecificHeatGlycol(*state, hwPlantLoop.FluidName, hwReturnTemp, hwPlantLoop.FluidIndex, "UnitTest"); EXPECT_EQ(4185.0, CpHW); const Real64 expectedHeatingLoad = (hwSupplySetpoint - hwReturnTemp) * hwMassFlow * CpHW; diff --git a/tst/EnergyPlus/unit/Fixtures/EnergyPlusFixture.cc b/tst/EnergyPlus/unit/Fixtures/EnergyPlusFixture.cc index 5e229225aaa..c46bbb9d30f 100644 --- a/tst/EnergyPlus/unit/Fixtures/EnergyPlusFixture.cc +++ b/tst/EnergyPlus/unit/Fixtures/EnergyPlusFixture.cc @@ -118,7 +118,7 @@ void EnergyPlusFixture::SetUp() state->dataUtilityRoutines->outputErrorHeader = false; Psychrometrics::InitializePsychRoutines(*state); - Fluid::InitializeGlycRoutines(); + FluidProperties::InitializeGlycRoutines(); createCoilSelectionReportObj(*state); } @@ -349,8 +349,8 @@ bool EnergyPlusFixture::process_idf(std::string_view const idf_snippet, bool use inputProcessor->initializeMaps(); SimulationManager::PostIPProcessing(*state); - Fluid::GetFluidPropertiesData(*state); - state->dataFluid->GetInput = false; + FluidProperties::GetFluidPropertiesData(*state); + state->dataFluidProperties->GetInput = false; if (state->dataSQLiteProcedures->sqlite) { bool writeOutputToSQLite = false; diff --git a/tst/EnergyPlus/unit/FluidProperties.unit.cc b/tst/EnergyPlus/unit/FluidProperties.unit.cc index d6539ee8ed8..631475993fd 100644 --- a/tst/EnergyPlus/unit/FluidProperties.unit.cc +++ b/tst/EnergyPlus/unit/FluidProperties.unit.cc @@ -75,17 +75,17 @@ TEST_F(EnergyPlusFixture, FluidProperties_GetDensityGlycol) int FluidIndex = 0; - EXPECT_NEAR(1037.89, Fluid::GetDensityGlycol(*state, "GLHXFLUID", -35.0, FluidIndex, "UnitTest"), 0.01); - EXPECT_NEAR(1037.89, Fluid::GetDensityGlycol(*state, "GLHXFLUID", -15.0, FluidIndex, "UnitTest"), 0.01); - EXPECT_NEAR(1034.46, Fluid::GetDensityGlycol(*state, "GLHXFLUID", 5.0, FluidIndex, "UnitTest"), 0.01); - EXPECT_NEAR(1030.51, Fluid::GetDensityGlycol(*state, "GLHXFLUID", 15.0, FluidIndex, "UnitTest"), 0.01); - EXPECT_NEAR(1026.06, Fluid::GetDensityGlycol(*state, "GLHXFLUID", 25.0, FluidIndex, "UnitTest"), 0.01); - EXPECT_NEAR(1021.09, Fluid::GetDensityGlycol(*state, "GLHXFLUID", 35.0, FluidIndex, "UnitTest"), 0.01); - EXPECT_NEAR(1015.62, Fluid::GetDensityGlycol(*state, "GLHXFLUID", 45.0, FluidIndex, "UnitTest"), 0.01); - EXPECT_NEAR(1003.13, Fluid::GetDensityGlycol(*state, "GLHXFLUID", 65.0, FluidIndex, "UnitTest"), 0.01); - EXPECT_NEAR(988.60, Fluid::GetDensityGlycol(*state, "GLHXFLUID", 85.0, FluidIndex, "UnitTest"), 0.01); - EXPECT_NEAR(972.03, Fluid::GetDensityGlycol(*state, "GLHXFLUID", 105.0, FluidIndex, "UnitTest"), 0.01); - EXPECT_NEAR(953.41, Fluid::GetDensityGlycol(*state, "GLHXFLUID", 125.0, FluidIndex, "UnitTest"), 0.01); + EXPECT_NEAR(1037.89, FluidProperties::GetDensityGlycol(*state, "GLHXFLUID", -35.0, FluidIndex, "UnitTest"), 0.01); + EXPECT_NEAR(1037.89, FluidProperties::GetDensityGlycol(*state, "GLHXFLUID", -15.0, FluidIndex, "UnitTest"), 0.01); + EXPECT_NEAR(1034.46, FluidProperties::GetDensityGlycol(*state, "GLHXFLUID", 5.0, FluidIndex, "UnitTest"), 0.01); + EXPECT_NEAR(1030.51, FluidProperties::GetDensityGlycol(*state, "GLHXFLUID", 15.0, FluidIndex, "UnitTest"), 0.01); + EXPECT_NEAR(1026.06, FluidProperties::GetDensityGlycol(*state, "GLHXFLUID", 25.0, FluidIndex, "UnitTest"), 0.01); + EXPECT_NEAR(1021.09, FluidProperties::GetDensityGlycol(*state, "GLHXFLUID", 35.0, FluidIndex, "UnitTest"), 0.01); + EXPECT_NEAR(1015.62, FluidProperties::GetDensityGlycol(*state, "GLHXFLUID", 45.0, FluidIndex, "UnitTest"), 0.01); + EXPECT_NEAR(1003.13, FluidProperties::GetDensityGlycol(*state, "GLHXFLUID", 65.0, FluidIndex, "UnitTest"), 0.01); + EXPECT_NEAR(988.60, FluidProperties::GetDensityGlycol(*state, "GLHXFLUID", 85.0, FluidIndex, "UnitTest"), 0.01); + EXPECT_NEAR(972.03, FluidProperties::GetDensityGlycol(*state, "GLHXFLUID", 105.0, FluidIndex, "UnitTest"), 0.01); + EXPECT_NEAR(953.41, FluidProperties::GetDensityGlycol(*state, "GLHXFLUID", 125.0, FluidIndex, "UnitTest"), 0.01); } TEST_F(EnergyPlusFixture, FluidProperties_GetSpecificHeatGlycol) @@ -103,17 +103,17 @@ TEST_F(EnergyPlusFixture, FluidProperties_GetSpecificHeatGlycol) int FluidIndex = 0; - EXPECT_NEAR(3779, Fluid::GetSpecificHeatGlycol(*state, "GLHXFLUID", -35.0, FluidIndex, "UnitTest"), 0.01); - EXPECT_NEAR(3779, Fluid::GetSpecificHeatGlycol(*state, "GLHXFLUID", -15.0, FluidIndex, "UnitTest"), 0.01); - EXPECT_NEAR(3807, Fluid::GetSpecificHeatGlycol(*state, "GLHXFLUID", 5.0, FluidIndex, "UnitTest"), 0.01); - EXPECT_NEAR(3834, Fluid::GetSpecificHeatGlycol(*state, "GLHXFLUID", 15.0, FluidIndex, "UnitTest"), 0.01); - EXPECT_NEAR(3862, Fluid::GetSpecificHeatGlycol(*state, "GLHXFLUID", 25.0, FluidIndex, "UnitTest"), 0.01); - EXPECT_NEAR(3889, Fluid::GetSpecificHeatGlycol(*state, "GLHXFLUID", 35.0, FluidIndex, "UnitTest"), 0.01); - EXPECT_NEAR(3917, Fluid::GetSpecificHeatGlycol(*state, "GLHXFLUID", 45.0, FluidIndex, "UnitTest"), 0.01); - EXPECT_NEAR(3972, Fluid::GetSpecificHeatGlycol(*state, "GLHXFLUID", 65.0, FluidIndex, "UnitTest"), 0.01); - EXPECT_NEAR(4027, Fluid::GetSpecificHeatGlycol(*state, "GLHXFLUID", 85.0, FluidIndex, "UnitTest"), 0.01); - EXPECT_NEAR(4082, Fluid::GetSpecificHeatGlycol(*state, "GLHXFLUID", 105.0, FluidIndex, "UnitTest"), 0.01); - EXPECT_NEAR(4137, Fluid::GetSpecificHeatGlycol(*state, "GLHXFLUID", 125.0, FluidIndex, "UnitTest"), 0.01); + EXPECT_NEAR(3779, FluidProperties::GetSpecificHeatGlycol(*state, "GLHXFLUID", -35.0, FluidIndex, "UnitTest"), 0.01); + EXPECT_NEAR(3779, FluidProperties::GetSpecificHeatGlycol(*state, "GLHXFLUID", -15.0, FluidIndex, "UnitTest"), 0.01); + EXPECT_NEAR(3807, FluidProperties::GetSpecificHeatGlycol(*state, "GLHXFLUID", 5.0, FluidIndex, "UnitTest"), 0.01); + EXPECT_NEAR(3834, FluidProperties::GetSpecificHeatGlycol(*state, "GLHXFLUID", 15.0, FluidIndex, "UnitTest"), 0.01); + EXPECT_NEAR(3862, FluidProperties::GetSpecificHeatGlycol(*state, "GLHXFLUID", 25.0, FluidIndex, "UnitTest"), 0.01); + EXPECT_NEAR(3889, FluidProperties::GetSpecificHeatGlycol(*state, "GLHXFLUID", 35.0, FluidIndex, "UnitTest"), 0.01); + EXPECT_NEAR(3917, FluidProperties::GetSpecificHeatGlycol(*state, "GLHXFLUID", 45.0, FluidIndex, "UnitTest"), 0.01); + EXPECT_NEAR(3972, FluidProperties::GetSpecificHeatGlycol(*state, "GLHXFLUID", 65.0, FluidIndex, "UnitTest"), 0.01); + EXPECT_NEAR(4027, FluidProperties::GetSpecificHeatGlycol(*state, "GLHXFLUID", 85.0, FluidIndex, "UnitTest"), 0.01); + EXPECT_NEAR(4082, FluidProperties::GetSpecificHeatGlycol(*state, "GLHXFLUID", 105.0, FluidIndex, "UnitTest"), 0.01); + EXPECT_NEAR(4137, FluidProperties::GetSpecificHeatGlycol(*state, "GLHXFLUID", 125.0, FluidIndex, "UnitTest"), 0.01); } TEST_F(EnergyPlusFixture, FluidProperties_InterpValuesForGlycolConc) @@ -141,7 +141,7 @@ TEST_F(EnergyPlusFixture, FluidProperties_InterpValuesForGlycolConc) Result.allocate(NumTemp); // Test interpolation for the single-concentration scenario - Fluid::InterpValuesForGlycolConc(*state, + FluidProperties::InterpValuesForGlycolConc(*state, NumCon, // number of concentrations (dimension of raw data) NumTemp, // number of temperatures (dimension of raw data) ConData, // concentrations for raw data diff --git a/tst/EnergyPlus/unit/HVACVariableRefrigerantFlow.unit.cc b/tst/EnergyPlus/unit/HVACVariableRefrigerantFlow.unit.cc index 8b73ce09b9c..525ee7c2e2e 100644 --- a/tst/EnergyPlus/unit/HVACVariableRefrigerantFlow.unit.cc +++ b/tst/EnergyPlus/unit/HVACVariableRefrigerantFlow.unit.cc @@ -2354,7 +2354,7 @@ TEST_F(EnergyPlusFixture, VRF_FluidTCtrl_VRFOU_Compressor) // Read in IDF ProcessScheduleInput(*state); // read schedules Curve::GetCurveInput(*state); // read curves - Fluid::GetFluidPropertiesData(*state); // read refrigerant properties + FluidProperties::GetFluidPropertiesData(*state); // read refrigerant properties // set up ZoneEquipConfig data state->dataGlobal->NumOfZones = 1; @@ -2395,7 +2395,7 @@ TEST_F(EnergyPlusFixture, VRF_FluidTCtrl_VRFOU_Compressor) state->dataEnvrn->OutDryBulbTemp = 10.35; // Run - Temperature = Fluid::GetSupHeatTempRefrig(*state, Refrigerant, Pressure, Enthalpy, TempLow, TempUp, RefrigIndex, CalledFrom); + Temperature = FluidProperties::GetSupHeatTempRefrig(*state, Refrigerant, Pressure, Enthalpy, TempLow, TempUp, RefrigIndex, CalledFrom); // Test EXPECT_NEAR(Temperature, 44.5, 0.5); @@ -5859,12 +5859,12 @@ TEST_F(EnergyPlusFixture, VRFTest_SysCurve_WaterCooled) EXPECT_TRUE(state->dataHVACVarRefFlow->VRF(VRFCond).VRFCondPLR > 0.0); EXPECT_NEAR(SysOutputProvided, state->dataZoneEnergyDemand->ZoneSysEnergyDemand(CurZoneNum).RemainingOutputReqToCoolSP, 1.0); - rho = Fluid::GetDensityGlycol(*state, + rho = FluidProperties::GetDensityGlycol(*state, state->dataPlnt->PlantLoop(state->dataHVACVarRefFlow->VRF(VRFCond).SourcePlantLoc.loopNum).FluidName, state->dataSize->PlantSizData(1).ExitTemp, state->dataPlnt->PlantLoop(state->dataHVACVarRefFlow->VRF(VRFCond).SourcePlantLoc.loopNum).FluidIndex, RoutineName); - Cp = Fluid::GetSpecificHeatGlycol(*state, + Cp = FluidProperties::GetSpecificHeatGlycol(*state, state->dataPlnt->PlantLoop(state->dataHVACVarRefFlow->VRF(VRFCond).SourcePlantLoc.loopNum).FluidName, state->dataSize->PlantSizData(1).ExitTemp, state->dataPlnt->PlantLoop(state->dataHVACVarRefFlow->VRF(VRFCond).SourcePlantLoc.loopNum).FluidIndex, @@ -5874,7 +5874,7 @@ TEST_F(EnergyPlusFixture, VRFTest_SysCurve_WaterCooled) EXPECT_DOUBLE_EQ(CondVolFlowRate, state->dataHVACVarRefFlow->VRF(VRFCond).WaterCondVolFlowRate); - rho = Fluid::GetDensityGlycol(*state, + rho = FluidProperties::GetDensityGlycol(*state, state->dataPlnt->PlantLoop(state->dataHVACVarRefFlow->VRF(VRFCond).SourcePlantLoc.loopNum).FluidName, Constant::InitConvTemp, state->dataPlnt->PlantLoop(state->dataHVACVarRefFlow->VRF(VRFCond).SourcePlantLoc.loopNum).FluidIndex, @@ -22715,7 +22715,7 @@ TEST_F(EnergyPlusFixture, VRF_MixedTypes) // Read in IDF ProcessScheduleInput(*state); // read schedules Curve::GetCurveInput(*state); // read curves - Fluid::GetFluidPropertiesData(*state); // read refrigerant properties + FluidProperties::GetFluidPropertiesData(*state); // read refrigerant properties // set up ZoneEquipConfig data state->dataGlobal->NumOfZones = 1; diff --git a/tst/EnergyPlus/unit/LowTempRadiantSystem.unit.cc b/tst/EnergyPlus/unit/LowTempRadiantSystem.unit.cc index abf6b69f0a3..ff5fce64ea2 100644 --- a/tst/EnergyPlus/unit/LowTempRadiantSystem.unit.cc +++ b/tst/EnergyPlus/unit/LowTempRadiantSystem.unit.cc @@ -1200,24 +1200,24 @@ TEST_F(LowTempRadiantSystemTest, AutosizeLowTempRadiantVariableFlowTest) CoolingCapacity = state->dataSize->FinalZoneSizing(state->dataSize->CurZoneEqNum).NonAirSysDesCoolLoad * state->dataLowTempRadSys->HydrRadSys(RadSysNum).ScaledCoolingCapacity; // hot water flow rate sizing calculation - Density = Fluid::GetDensityGlycol(*state, + Density = FluidProperties::GetDensityGlycol(*state, state->dataPlnt->PlantLoop(state->dataLowTempRadSys->HydrRadSys(RadSysNum).HWPlantLoc.loopNum).FluidName, 60.0, state->dataPlnt->PlantLoop(state->dataLowTempRadSys->HydrRadSys(RadSysNum).HWPlantLoc.loopNum).FluidIndex, "AutosizeLowTempRadiantVariableFlowTest"); - Cp = Fluid::GetSpecificHeatGlycol(*state, + Cp = FluidProperties::GetSpecificHeatGlycol(*state, state->dataPlnt->PlantLoop(state->dataLowTempRadSys->HydrRadSys(RadSysNum).HWPlantLoc.loopNum).FluidName, 60.0, state->dataPlnt->PlantLoop(state->dataLowTempRadSys->HydrRadSys(RadSysNum).HWPlantLoc.loopNum).FluidIndex, "AutosizeLowTempRadiantVariableFlowTest"); HotWaterFlowRate = HeatingCapacity / (state->dataSize->PlantSizData(1).DeltaT * Cp * Density); // chilled water flow rate sizing calculation - Density = Fluid::GetDensityGlycol(*state, + Density = FluidProperties::GetDensityGlycol(*state, state->dataPlnt->PlantLoop(state->dataLowTempRadSys->HydrRadSys(RadSysNum).CWPlantLoc.loopNum).FluidName, 5.05, state->dataPlnt->PlantLoop(state->dataLowTempRadSys->HydrRadSys(RadSysNum).CWPlantLoc.loopNum).FluidIndex, "AutosizeLowTempRadiantVariableFlowTest"); - Cp = Fluid::GetSpecificHeatGlycol(*state, + Cp = FluidProperties::GetSpecificHeatGlycol(*state, state->dataPlnt->PlantLoop(state->dataLowTempRadSys->HydrRadSys(RadSysNum).CWPlantLoc.loopNum).FluidName, 5.05, state->dataPlnt->PlantLoop(state->dataLowTempRadSys->HydrRadSys(RadSysNum).CWPlantLoc.loopNum).FluidIndex, @@ -2630,12 +2630,12 @@ TEST_F(LowTempRadiantSystemTest, LowTempRadConFlowSystemAutoSizeTempTest) state->dataSize->FinalZoneSizing(state->dataSize->CurZoneEqNum).NonAirSysDesCoolLoad = 1000.0; // hot water volume flow rate sizing calculation - Density = Fluid::GetDensityGlycol(*state, + Density = FluidProperties::GetDensityGlycol(*state, state->dataPlnt->PlantLoop(state->dataLowTempRadSys->CFloRadSys(RadSysNum).HWPlantLoc.loopNum).FluidName, 60.0, state->dataPlnt->PlantLoop(state->dataLowTempRadSys->CFloRadSys(RadSysNum).HWPlantLoc.loopNum).FluidIndex, "LowTempRadConFlowSystemAutoSizeTempTest"); - Cp = Fluid::GetSpecificHeatGlycol(*state, + Cp = FluidProperties::GetSpecificHeatGlycol(*state, state->dataPlnt->PlantLoop(state->dataLowTempRadSys->CFloRadSys(RadSysNum).HWPlantLoc.loopNum).FluidName, 60.0, state->dataPlnt->PlantLoop(state->dataLowTempRadSys->CFloRadSys(RadSysNum).HWPlantLoc.loopNum).FluidIndex, @@ -2655,12 +2655,12 @@ TEST_F(LowTempRadiantSystemTest, LowTempRadConFlowSystemAutoSizeTempTest) state->dataLowTempRadSys->CFloRadSys(RadSysNum).WaterVolFlowMax = AutoSize; // chilled water volume flow rate sizing calculation - Density = Fluid::GetDensityGlycol(*state, + Density = FluidProperties::GetDensityGlycol(*state, state->dataPlnt->PlantLoop(state->dataLowTempRadSys->CFloRadSys(RadSysNum).CWPlantLoc.loopNum).FluidName, 5.05, state->dataPlnt->PlantLoop(state->dataLowTempRadSys->CFloRadSys(RadSysNum).CWPlantLoc.loopNum).FluidIndex, "LowTempRadConFlowSystemAutoSizeTempTest"); - Cp = Fluid::GetSpecificHeatGlycol(*state, + Cp = FluidProperties::GetSpecificHeatGlycol(*state, state->dataPlnt->PlantLoop(state->dataLowTempRadSys->CFloRadSys(RadSysNum).CWPlantLoc.loopNum).FluidName, 5.05, state->dataPlnt->PlantLoop(state->dataLowTempRadSys->CFloRadSys(RadSysNum).CWPlantLoc.loopNum).FluidIndex, diff --git a/tst/EnergyPlus/unit/OutdoorAirUnit.unit.cc b/tst/EnergyPlus/unit/OutdoorAirUnit.unit.cc index 8ba54110eea..95c18b51bd1 100644 --- a/tst/EnergyPlus/unit/OutdoorAirUnit.unit.cc +++ b/tst/EnergyPlus/unit/OutdoorAirUnit.unit.cc @@ -687,10 +687,10 @@ TEST_F(EnergyPlusFixture, OutdoorAirUnit_WaterCoolingCoilAutoSizeTest) Real64 DesWaterCoolingCoilLoad = DesAirMassFlow * (EnthalpyAirIn - EnthalpyAirOut) + FanCoolLoad; Real64 CoilDesWaterDeltaT = state->dataSize->PlantSizData(1).DeltaT; - Real64 Cp = Fluid::GetSpecificHeatGlycol( + Real64 Cp = FluidProperties::GetSpecificHeatGlycol( *state, state->dataPlnt->PlantLoop(1).FluidName, Constant::CWInitConvTemp, state->dataPlnt->PlantLoop(1).FluidIndex, " "); Real64 rho = - Fluid::GetDensityGlycol(*state, state->dataPlnt->PlantLoop(1).FluidName, Constant::CWInitConvTemp, state->dataPlnt->PlantLoop(1).FluidIndex, " "); + FluidProperties::GetDensityGlycol(*state, state->dataPlnt->PlantLoop(1).FluidName, Constant::CWInitConvTemp, state->dataPlnt->PlantLoop(1).FluidIndex, " "); Real64 DesCoolingCoilWaterVolFlowRate = DesWaterCoolingCoilLoad / (CoilDesWaterDeltaT * Cp * rho); // check water coil water flow rate calc EXPECT_EQ(DesWaterCoolingCoilLoad, state->dataWaterCoils->WaterCoil(1).DesWaterCoolingCoilRate); @@ -993,11 +993,11 @@ TEST_F(EnergyPlusFixture, OutdoorAirUnit_SteamHeatingCoilAutoSizeTest) Real64 DesSteamCoilLoad = DesAirMassFlow * CpAirAvg * (DesCoilOutTemp - DesCoilInTemp); // do steam flow rate sizing calculation - Real64 EnthSteamIn = Fluid::GetSatEnthalpyRefrig(*state, "STEAM", Constant::SteamInitConvTemp, 1.0, state->dataSteamCoils->SteamCoil(1).FluidIndex, ""); - Real64 EnthSteamOut = Fluid::GetSatEnthalpyRefrig(*state, "STEAM", Constant::SteamInitConvTemp, 0.0, state->dataSteamCoils->SteamCoil(1).FluidIndex, ""); - Real64 SteamDensity = Fluid::GetSatDensityRefrig(*state, "STEAM", Constant::SteamInitConvTemp, 1.0, state->dataSteamCoils->SteamCoil(1).FluidIndex, ""); + Real64 EnthSteamIn = FluidProperties::GetSatEnthalpyRefrig(*state, "STEAM", Constant::SteamInitConvTemp, 1.0, state->dataSteamCoils->SteamCoil(1).FluidIndex, ""); + Real64 EnthSteamOut = FluidProperties::GetSatEnthalpyRefrig(*state, "STEAM", Constant::SteamInitConvTemp, 0.0, state->dataSteamCoils->SteamCoil(1).FluidIndex, ""); + Real64 SteamDensity = FluidProperties::GetSatDensityRefrig(*state, "STEAM", Constant::SteamInitConvTemp, 1.0, state->dataSteamCoils->SteamCoil(1).FluidIndex, ""); Real64 CpOfCondensate = - Fluid::GetSatSpecificHeatRefrig(*state, "STEAM", Constant::SteamInitConvTemp, 0.0, state->dataSteamCoils->SteamCoil(1).FluidIndex, ""); + FluidProperties::GetSatSpecificHeatRefrig(*state, "STEAM", Constant::SteamInitConvTemp, 0.0, state->dataSteamCoils->SteamCoil(1).FluidIndex, ""); Real64 LatentHeatChange = EnthSteamIn - EnthSteamOut; Real64 DesMaxSteamVolFlowRate = DesSteamCoilLoad / (SteamDensity * (LatentHeatChange + state->dataSteamCoils->SteamCoil(1).DegOfSubcooling * CpOfCondensate)); diff --git a/tst/EnergyPlus/unit/OutsideEnergySources.unit.cc b/tst/EnergyPlus/unit/OutsideEnergySources.unit.cc index f96cb4c1ffe..8eda2e0503b 100644 --- a/tst/EnergyPlus/unit/OutsideEnergySources.unit.cc +++ b/tst/EnergyPlus/unit/OutsideEnergySources.unit.cc @@ -139,7 +139,7 @@ TEST_F(EnergyPlusFixture, DistrictCoolingandHeating) thisDistrictHeatingWater.BeginEnvrnInitFlag = true; thisDistrictHeatingWater.simulate(*state, locHotWater, firstHVAC, MyLoad, RunFlag); - Real64 Cp = Fluid::GetSpecificHeatGlycol( + Real64 Cp = FluidProperties::GetSpecificHeatGlycol( *state, thisHotWaterLoop.FluidName, thisDistrictHeatingWater.InletTemp, thisHotWaterLoop.FluidIndex, RoutineName); Real64 calOutletTemp = (MyLoad + thisHotWaterLoop.MaxMassFlowRate * Cp * thisDistrictHeatingWater.InletTemp) / (thisHotWaterLoop.MaxMassFlowRate * Cp); @@ -173,7 +173,7 @@ TEST_F(EnergyPlusFixture, DistrictCoolingandHeating) thisDistrictCooling.BeginEnvrnInitFlag = true; thisDistrictCooling.simulate(*state, locChilledWater, firstHVAC, MyLoad, RunFlag); - Cp = Fluid::GetSpecificHeatGlycol( + Cp = FluidProperties::GetSpecificHeatGlycol( *state, thisChilledWaterLoop.FluidName, thisDistrictCooling.InletTemp, thisChilledWaterLoop.FluidIndex, RoutineName); calOutletTemp = (MyLoad + thisChilledWaterLoop.MaxMassFlowRate * Cp * thisDistrictCooling.InletTemp) / (thisChilledWaterLoop.MaxMassFlowRate * Cp); @@ -204,14 +204,14 @@ TEST_F(EnergyPlusFixture, DistrictCoolingandHeating) thisDistrictHeatingSteam.BeginEnvrnInitFlag = true; thisDistrictHeatingSteam.simulate(*state, locSteam, firstHVAC, MyLoad, RunFlag); - Real64 SatTempAtmPress = Fluid::GetSatTemperatureRefrig( + Real64 SatTempAtmPress = FluidProperties::GetSatTemperatureRefrig( *state, thisSteamLoop.FluidName, DataEnvironment::StdPressureSeaLevel, thisSteamLoop.FluidIndex, RoutineName); - Real64 CpCondensate = Fluid::GetSpecificHeatGlycol( + Real64 CpCondensate = FluidProperties::GetSpecificHeatGlycol( *state, thisSteamLoop.FluidName, thisDistrictHeatingSteam.InletTemp, thisSteamLoop.FluidIndex, RoutineName); Real64 deltaTsensible = SatTempAtmPress - thisDistrictHeatingSteam.InletTemp; - Real64 EnthSteamInDry = Fluid::GetSatEnthalpyRefrig( + Real64 EnthSteamInDry = FluidProperties::GetSatEnthalpyRefrig( *state, thisSteamLoop.FluidName, thisDistrictHeatingSteam.InletTemp, 1.0, thisSteamLoop.FluidIndex, RoutineName); - Real64 EnthSteamOutWet = Fluid::GetSatEnthalpyRefrig( + Real64 EnthSteamOutWet = FluidProperties::GetSatEnthalpyRefrig( *state, thisSteamLoop.FluidName, thisDistrictHeatingSteam.InletTemp, 0.0, thisSteamLoop.FluidIndex, RoutineName); Real64 LatentHeatSteam = EnthSteamInDry - EnthSteamOutWet; Real64 calOutletMdot = MyLoad / (LatentHeatSteam + (CpCondensate * deltaTsensible)); diff --git a/tst/EnergyPlus/unit/PlantCentralGSHP.unit.cc b/tst/EnergyPlus/unit/PlantCentralGSHP.unit.cc index 454e54ad473..913657fa1d0 100644 --- a/tst/EnergyPlus/unit/PlantCentralGSHP.unit.cc +++ b/tst/EnergyPlus/unit/PlantCentralGSHP.unit.cc @@ -137,25 +137,25 @@ TEST_F(EnergyPlusFixture, ChillerHeater_Autosize) state->dataPlantCentralGSHP->Wrapper(1).GLHEPlantLoc.loopNum = PltSizCondNum; // Calculate expected values - Real64 rho_evap = Fluid::GetDensityGlycol(*state, + Real64 rho_evap = FluidProperties::GetDensityGlycol(*state, state->dataPlnt->PlantLoop(PltSizNum).FluidName, Constant::CWInitConvTemp, state->dataPlnt->PlantLoop(PltSizNum).FluidIndex, "ChillerHeater_Autosize_TEST"); - Real64 Cp_evap = Fluid::GetSpecificHeatGlycol(*state, + Real64 Cp_evap = FluidProperties::GetSpecificHeatGlycol(*state, state->dataPlnt->PlantLoop(PltSizNum).FluidName, Constant::CWInitConvTemp, state->dataPlnt->PlantLoop(PltSizNum).FluidIndex, "ChillerHeater_Autosize_TEST"); - Real64 rho_cond = Fluid::GetDensityGlycol(*state, + Real64 rho_cond = FluidProperties::GetDensityGlycol(*state, state->dataPlnt->PlantLoop(PltSizCondNum).FluidName, Constant::CWInitConvTemp, state->dataPlnt->PlantLoop(PltSizCondNum).FluidIndex, "ChillerHeater_Autosize_TEST"); - Real64 Cp_cond = Fluid::GetSpecificHeatGlycol(*state, + Real64 Cp_cond = FluidProperties::GetSpecificHeatGlycol(*state, state->dataPlnt->PlantLoop(PltSizCondNum).FluidName, state->dataPlantCentralGSHP->Wrapper(1).ChillerHeater(1).TempRefCondInCooling, state->dataPlnt->PlantLoop(PltSizCondNum).FluidIndex, diff --git a/tst/EnergyPlus/unit/PlantLoadProfile.unit.cc b/tst/EnergyPlus/unit/PlantLoadProfile.unit.cc index 7996d5a5179..67142450ce6 100644 --- a/tst/EnergyPlus/unit/PlantLoadProfile.unit.cc +++ b/tst/EnergyPlus/unit/PlantLoadProfile.unit.cc @@ -178,8 +178,8 @@ TEST_F(EnergyPlusFixture, LoadProfile_initandsimulate_Waterloop) std::string_view RoutineName("PlantLoadProfileTests"); thisLoadProfileWaterLoop.simulate(*state, locWater, firstHVAC, curLoad, runFlag); - Real64 rhoWater = Fluid::GetDensityGlycol(*state, thisWaterLoop.FluidName, 60, thisWaterLoop.FluidIndex, RoutineName); - Real64 Cp = Fluid::GetSpecificHeatGlycol( + Real64 rhoWater = FluidProperties::GetDensityGlycol(*state, thisWaterLoop.FluidName, 60, thisWaterLoop.FluidIndex, RoutineName); + Real64 Cp = FluidProperties::GetSpecificHeatGlycol( *state, thisWaterLoop.FluidName, thisLoadProfileWaterLoop.InletTemp, thisWaterLoop.FluidIndex, RoutineName); Real64 deltaTemp = curLoad / (rhoWater * thisLoadProfileWaterLoop.VolFlowRate * Cp); Real64 calOutletTemp = thisLoadProfileWaterLoop.InletTemp - deltaTemp; @@ -209,7 +209,7 @@ TEST_F(EnergyPlusFixture, LoadProfile_initandsimulate_Steamloop) std::string_view RoutineName("PlantLoadProfileTests"); - Real64 SatTempAtmPress = Fluid::GetSatTemperatureRefrig( + Real64 SatTempAtmPress = FluidProperties::GetSatTemperatureRefrig( *state, state->dataPlnt->PlantLoop(1).FluidName, DataEnvironment::StdPressureSeaLevel, state->dataPlnt->PlantLoop(1).FluidIndex, RoutineName); state->dataLoopNodes->Node(1).Temp = SatTempAtmPress; @@ -252,12 +252,12 @@ TEST_F(EnergyPlusFixture, LoadProfile_initandsimulate_Steamloop) thisLoadProfileSteamLoop.simulate(*state, locSteam, firstHVAC, curLoad, runFlag); Real64 EnthSteamIn = - Fluid::GetSatEnthalpyRefrig(*state, thisSteamLoop.FluidName, SatTempAtmPress, 1.0, thisSteamLoop.FluidIndex, RoutineName); + FluidProperties::GetSatEnthalpyRefrig(*state, thisSteamLoop.FluidName, SatTempAtmPress, 1.0, thisSteamLoop.FluidIndex, RoutineName); Real64 EnthSteamOut = - Fluid::GetSatEnthalpyRefrig(*state, thisSteamLoop.FluidName, SatTempAtmPress, 0.0, thisSteamLoop.FluidIndex, RoutineName); + FluidProperties::GetSatEnthalpyRefrig(*state, thisSteamLoop.FluidName, SatTempAtmPress, 0.0, thisSteamLoop.FluidIndex, RoutineName); Real64 LatentHeatSteam = EnthSteamIn - EnthSteamOut; Real64 CpCondensate = - Fluid::GetSpecificHeatGlycol(*state, thisSteamLoop.FluidName, SatTempAtmPress, thisSteamLoop.FluidIndex, RoutineName); + FluidProperties::GetSpecificHeatGlycol(*state, thisSteamLoop.FluidName, SatTempAtmPress, thisSteamLoop.FluidIndex, RoutineName); Real64 calOutletMdot = curLoad / (LatentHeatSteam + thisLoadProfileSteamLoop.DegOfSubcooling * CpCondensate); EXPECT_EQ(thisLoadProfileSteamLoop.MassFlowRate, calOutletMdot); diff --git a/tst/EnergyPlus/unit/SetPointManager.unit.cc b/tst/EnergyPlus/unit/SetPointManager.unit.cc index 1a2f04c9997..26e18a0a647 100644 --- a/tst/EnergyPlus/unit/SetPointManager.unit.cc +++ b/tst/EnergyPlus/unit/SetPointManager.unit.cc @@ -189,8 +189,8 @@ TEST_F(EnergyPlusFixture, SetPointManager_DefineReturnWaterChWSetPointManager_Fl ASSERT_TRUE(process_idf(idf_objects)); - EXPECT_EQ(2, state->dataFluid->NumOfGlycols); - const auto &thisGlycol = state->dataFluid->GlycolData(2); + EXPECT_EQ(2, state->dataFluidProperties->NumOfGlycols); + const auto &thisGlycol = state->dataFluidProperties->GlycolData(2); EXPECT_EQ("ETHYLENEGLYCOL40PERCENT", thisGlycol.Name); EXPECT_EQ("ETHYLENEGLYCOL", thisGlycol.GlycolName); diff --git a/tst/EnergyPlus/unit/UnitHeater.unit.cc b/tst/EnergyPlus/unit/UnitHeater.unit.cc index 3d53f4424c6..8d673096237 100644 --- a/tst/EnergyPlus/unit/UnitHeater.unit.cc +++ b/tst/EnergyPlus/unit/UnitHeater.unit.cc @@ -1151,12 +1151,12 @@ TEST_F(EnergyPlusFixture, UnitHeater_HWHeatingCoilUAAutoSizingTest) EXPECT_FALSE(ErrorsFound); HWMaxVolFlowRate = state->dataWaterCoils->WaterCoil(CoilNum).MaxWaterVolFlowRate; - HWDensity = Fluid::GetDensityGlycol(*state, + HWDensity = FluidProperties::GetDensityGlycol(*state, state->dataPlnt->PlantLoop(state->dataUnitHeaters->UnitHeat(UnitHeatNum).HWplantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state->dataPlnt->PlantLoop(state->dataUnitHeaters->UnitHeat(UnitHeatNum).HWplantLoc.loopNum).FluidIndex, "xxx"); - CpHW = Fluid::GetSpecificHeatGlycol(*state, + CpHW = FluidProperties::GetSpecificHeatGlycol(*state, state->dataPlnt->PlantLoop(state->dataUnitHeaters->UnitHeat(UnitHeatNum).HWplantLoc.loopNum).FluidName, Constant::HWInitConvTemp, state->dataPlnt->PlantLoop(state->dataUnitHeaters->UnitHeat(UnitHeatNum).HWplantLoc.loopNum).FluidIndex, @@ -1398,7 +1398,7 @@ TEST_F(EnergyPlusFixture, UnitHeater_SimUnitHeaterTest) EXPECT_NEAR(UHHeatingRate, state->dataUnitHeaters->UnitHeat(UnitHeatNum).HeatPower, ConvTol); // verify the heat rate delivered by the hot water heating coil HWMassFlowRate = state->dataWaterCoils->WaterCoil(CoilNum).InletWaterMassFlowRate; - CpHW = Fluid::GetSpecificHeatGlycol(*state, + CpHW = FluidProperties::GetSpecificHeatGlycol(*state, state->dataPlnt->PlantLoop(state->dataUnitHeaters->UnitHeat(UnitHeatNum).HWplantLoc.loopNum).FluidName, 60.0, state->dataPlnt->PlantLoop(state->dataUnitHeaters->UnitHeat(UnitHeatNum).HWplantLoc.loopNum).FluidIndex, diff --git a/tst/EnergyPlus/unit/UnitarySystem.unit.cc b/tst/EnergyPlus/unit/UnitarySystem.unit.cc index 41ce3190923..af593caa68e 100644 --- a/tst/EnergyPlus/unit/UnitarySystem.unit.cc +++ b/tst/EnergyPlus/unit/UnitarySystem.unit.cc @@ -382,7 +382,7 @@ TEST_F(AirloopUnitarySysTest, MultipleWaterCoolingCoilSizing) state->dataPlnt->PlantLoop(1).LoopSide(DataPlant::LoopSideLocation::Demand).Branch(1).Comp(1).Name = state->dataWaterCoils->WaterCoil(CoilNum).Name; state->dataSize->DataWaterLoopNum = 1; - state->dataFluid->NumOfGlycols = 1; + state->dataFluidProperties->NumOfGlycols = 1; createCoilSelectionReportObj(*state); WaterCoils::SizeWaterCoil(*state, CoilNum); diff --git a/tst/EnergyPlus/unit/WaterCoils.unit.cc b/tst/EnergyPlus/unit/WaterCoils.unit.cc index 0d0fdbd31be..b0fcbe41a92 100644 --- a/tst/EnergyPlus/unit/WaterCoils.unit.cc +++ b/tst/EnergyPlus/unit/WaterCoils.unit.cc @@ -228,7 +228,7 @@ TEST_F(WaterCoilsTest, WaterCoolingCoilSizing) state->dataSize->PlantSizData(1).DeltaT = 5.0; state->dataSize->FinalSysSizing(1).MassFlowAtCoolPeak = state->dataSize->FinalSysSizing(1).DesMainVolFlow * state->dataEnvrn->StdRhoAir; state->dataSize->DataWaterLoopNum = 1; - state->dataFluid->NumOfGlycols = 1; + state->dataFluidProperties->NumOfGlycols = 1; createCoilSelectionReportObj(*state); SizeWaterCoil(*state, CoilNum); @@ -463,7 +463,7 @@ TEST_F(WaterCoilsTest, CoilHeatingWaterUASizing) state->dataSize->CurSysNum = 1; state->dataSize->CurOASysNum = 0; state->dataSize->DataWaterLoopNum = 1; - state->dataFluid->NumOfGlycols = 1; + state->dataFluidProperties->NumOfGlycols = 1; state->dataWaterCoils->MyUAAndFlowCalcFlag.allocate(1); state->dataWaterCoils->MyUAAndFlowCalcFlag(1) = true; @@ -491,9 +491,9 @@ TEST_F(WaterCoilsTest, CoilHeatingWaterUASizing) Real64 rho = 0; Real64 DesWaterFlowRate = 0; - Cp = Fluid::GetSpecificHeatGlycol( + Cp = FluidProperties::GetSpecificHeatGlycol( *state, state->dataPlnt->PlantLoop(1).FluidName, Constant::HWInitConvTemp, state->dataPlnt->PlantLoop(1).FluidIndex, "Unit Test"); - rho = Fluid::GetDensityGlycol( + rho = FluidProperties::GetDensityGlycol( *state, state->dataPlnt->PlantLoop(1).FluidName, Constant::HWInitConvTemp, state->dataPlnt->PlantLoop(1).FluidIndex, "Unit Test"); DesWaterFlowRate = state->dataWaterCoils->WaterCoil(CoilNum).DesWaterHeatingCoilRate / (10.0 * Cp * rho); @@ -619,7 +619,7 @@ TEST_F(WaterCoilsTest, CoilHeatingWaterLowAirFlowUASizing) state->dataSize->CurSysNum = 1; state->dataSize->CurOASysNum = 0; state->dataSize->DataWaterLoopNum = 1; - state->dataFluid->NumOfGlycols = 1; + state->dataFluidProperties->NumOfGlycols = 1; state->dataWaterCoils->MyUAAndFlowCalcFlag.allocate(1); state->dataWaterCoils->MyUAAndFlowCalcFlag(1) = true; @@ -647,9 +647,9 @@ TEST_F(WaterCoilsTest, CoilHeatingWaterLowAirFlowUASizing) Real64 rho = 0; Real64 DesWaterFlowRate = 0; - Cp = Fluid::GetSpecificHeatGlycol( + Cp = FluidProperties::GetSpecificHeatGlycol( *state, state->dataPlnt->PlantLoop(1).FluidName, Constant::HWInitConvTemp, state->dataPlnt->PlantLoop(1).FluidIndex, "Unit Test"); - rho = Fluid::GetDensityGlycol( + rho = FluidProperties::GetDensityGlycol( *state, state->dataPlnt->PlantLoop(1).FluidName, Constant::HWInitConvTemp, state->dataPlnt->PlantLoop(1).FluidIndex, "Unit Test"); DesWaterFlowRate = state->dataWaterCoils->WaterCoil(CoilNum).DesWaterHeatingCoilRate / (10.0 * Cp * rho); @@ -779,7 +779,7 @@ TEST_F(WaterCoilsTest, CoilHeatingWaterUASizingLowHwaterInletTemp) state->dataSize->CurOASysNum = 0; state->dataSize->DataWaterLoopNum = 1; - state->dataFluid->NumOfGlycols = 1; + state->dataFluidProperties->NumOfGlycols = 1; state->dataWaterCoils->MyUAAndFlowCalcFlag.allocate(1); state->dataWaterCoils->MyUAAndFlowCalcFlag(1) = true; @@ -807,9 +807,9 @@ TEST_F(WaterCoilsTest, CoilHeatingWaterUASizingLowHwaterInletTemp) Real64 rho = 0; Real64 DesWaterFlowRate = 0; - Cp = Fluid::GetSpecificHeatGlycol( + Cp = FluidProperties::GetSpecificHeatGlycol( *state, state->dataPlnt->PlantLoop(1).FluidName, Constant::HWInitConvTemp, state->dataPlnt->PlantLoop(1).FluidIndex, "Unit Test"); - rho = Fluid::GetDensityGlycol( + rho = FluidProperties::GetDensityGlycol( *state, state->dataPlnt->PlantLoop(1).FluidName, Constant::HWInitConvTemp, state->dataPlnt->PlantLoop(1).FluidIndex, "Unit Test"); DesWaterFlowRate = state->dataWaterCoils->WaterCoil(CoilNum).DesWaterHeatingCoilRate / (10.0 * Cp * rho); @@ -899,7 +899,7 @@ TEST_F(WaterCoilsTest, CoilCoolingWaterSimpleSizing) state->dataSize->PlantSizData(1).DeltaT = 5.0; state->dataSize->DataWaterLoopNum = 1; - state->dataFluid->NumOfGlycols = 1; + state->dataFluidProperties->NumOfGlycols = 1; // run water coil sizing createCoilSelectionReportObj(*state); @@ -921,9 +921,9 @@ TEST_F(WaterCoilsTest, CoilCoolingWaterSimpleSizing) Real64 rho = 0; Real64 DesWaterFlowRate = 0; - Cp = Fluid::GetSpecificHeatGlycol( + Cp = FluidProperties::GetSpecificHeatGlycol( *state, state->dataPlnt->PlantLoop(1).FluidName, Constant::CWInitConvTemp, state->dataPlnt->PlantLoop(1).FluidIndex, "Unit Test"); - rho = Fluid::GetDensityGlycol( + rho = FluidProperties::GetDensityGlycol( *state, state->dataPlnt->PlantLoop(1).FluidName, Constant::CWInitConvTemp, state->dataPlnt->PlantLoop(1).FluidIndex, "Unit Test"); DesWaterFlowRate = state->dataWaterCoils->WaterCoil(CoilNum).DesWaterCoolingCoilRate / (state->dataWaterCoils->WaterCoil(CoilNum).DesignWaterDeltaTemp * Cp * rho); @@ -1017,7 +1017,7 @@ TEST_F(WaterCoilsTest, CoilCoolingWaterDetailedSizing) state->dataSize->PlantSizData(1).ExitTemp = 5.7; state->dataSize->PlantSizData(1).DeltaT = 5.0; state->dataSize->DataWaterLoopNum = 1; - state->dataFluid->NumOfGlycols = 1; + state->dataFluidProperties->NumOfGlycols = 1; // run water coil sizing createCoilSelectionReportObj(*state); @@ -1038,9 +1038,9 @@ TEST_F(WaterCoilsTest, CoilCoolingWaterDetailedSizing) Real64 rho = 0; Real64 DesWaterFlowRate = 0; - Cp = Fluid::GetSpecificHeatGlycol( + Cp = FluidProperties::GetSpecificHeatGlycol( *state, state->dataPlnt->PlantLoop(1).FluidName, Constant::CWInitConvTemp, state->dataPlnt->PlantLoop(1).FluidIndex, "Unit Test"); - rho = Fluid::GetDensityGlycol( + rho = FluidProperties::GetDensityGlycol( *state, state->dataPlnt->PlantLoop(1).FluidName, Constant::CWInitConvTemp, state->dataPlnt->PlantLoop(1).FluidIndex, "Unit Test"); DesWaterFlowRate = state->dataWaterCoils->WaterCoil(CoilNum).DesWaterCoolingCoilRate / (6.67 * Cp * rho); // check cooling coil design water flow rate @@ -1142,7 +1142,7 @@ TEST_F(WaterCoilsTest, CoilCoolingWaterDetailed_WarningMath) state->dataSize->PlantSizData(1).ExitTemp = 5.7; state->dataSize->PlantSizData(1).DeltaT = 5.0; state->dataSize->DataWaterLoopNum = 1; - state->dataFluid->NumOfGlycols = 1; + state->dataFluidProperties->NumOfGlycols = 1; OutputReportPredefined::SetPredefinedTables(*state); @@ -1165,9 +1165,9 @@ TEST_F(WaterCoilsTest, CoilCoolingWaterDetailed_WarningMath) Real64 rho = 0; Real64 DesWaterFlowRate = 0; - Cp = Fluid::GetSpecificHeatGlycol( + Cp = FluidProperties::GetSpecificHeatGlycol( *state, state->dataPlnt->PlantLoop(1).FluidName, Constant::CWInitConvTemp, state->dataPlnt->PlantLoop(1).FluidIndex, "Unit Test"); - rho = Fluid::GetDensityGlycol( + rho = FluidProperties::GetDensityGlycol( *state, state->dataPlnt->PlantLoop(1).FluidName, Constant::CWInitConvTemp, state->dataPlnt->PlantLoop(1).FluidIndex, "Unit Test"); DesWaterFlowRate = state->dataWaterCoils->WaterCoil(CoilNum).DesWaterCoolingCoilRate / (6.67 * Cp * rho); // check cooling coil design water flow rate @@ -1298,7 +1298,7 @@ TEST_F(WaterCoilsTest, CoilHeatingWaterSimpleSizing) state->dataSize->PlantSizData(1).DeltaT = 10.0; state->dataSize->DataWaterLoopNum = 1; - state->dataFluid->NumOfGlycols = 1; + state->dataFluidProperties->NumOfGlycols = 1; // run water coil sizing createCoilSelectionReportObj(*state); @@ -1320,9 +1320,9 @@ TEST_F(WaterCoilsTest, CoilHeatingWaterSimpleSizing) Real64 rho = 0; Real64 DesWaterFlowRate = 0; - Cp = Fluid::GetSpecificHeatGlycol( + Cp = FluidProperties::GetSpecificHeatGlycol( *state, state->dataPlnt->PlantLoop(1).FluidName, Constant::HWInitConvTemp, state->dataPlnt->PlantLoop(1).FluidIndex, "Unit Test"); - rho = Fluid::GetDensityGlycol( + rho = FluidProperties::GetDensityGlycol( *state, state->dataPlnt->PlantLoop(1).FluidName, Constant::HWInitConvTemp, state->dataPlnt->PlantLoop(1).FluidIndex, "Unit Test"); DesWaterFlowRate = state->dataWaterCoils->WaterCoil(CoilNum).DesWaterHeatingCoilRate / (11.0 * Cp * rho); @@ -1394,7 +1394,7 @@ TEST_F(WaterCoilsTest, HotWaterHeatingCoilAutoSizeTempTest) state->dataSize->CurOASysNum = 0; state->dataSize->DataWaterLoopNum = 1; - state->dataFluid->NumOfGlycols = 1; + state->dataFluidProperties->NumOfGlycols = 1; state->dataWaterCoils->MyUAAndFlowCalcFlag.allocate(1); state->dataWaterCoils->MyUAAndFlowCalcFlag(1) = true; @@ -1422,8 +1422,8 @@ TEST_F(WaterCoilsTest, HotWaterHeatingCoilAutoSizeTempTest) Real64 DesWaterFlowRate(0.0); // now size heating coil hot water flow rate at 60.0C - Cp = Fluid::GetSpecificHeatGlycol(*state, state->dataPlnt->PlantLoop(1).FluidName, 60.0, state->dataPlnt->PlantLoop(1).FluidIndex, "Unit Test"); - rho = Fluid::GetDensityGlycol(*state, state->dataPlnt->PlantLoop(1).FluidName, 60.0, state->dataPlnt->PlantLoop(1).FluidIndex, "Unit Test"); + Cp = FluidProperties::GetSpecificHeatGlycol(*state, state->dataPlnt->PlantLoop(1).FluidName, 60.0, state->dataPlnt->PlantLoop(1).FluidIndex, "Unit Test"); + rho = FluidProperties::GetDensityGlycol(*state, state->dataPlnt->PlantLoop(1).FluidName, 60.0, state->dataPlnt->PlantLoop(1).FluidIndex, "Unit Test"); DesWaterFlowRate = DesCoilHeatingLoad / (state->dataSize->PlantSizData(1).DeltaT * Cp * rho); // check heating coil design water flow rate calculated here and sizing results are identical diff --git a/tst/EnergyPlus/unit/WaterThermalTanks.unit.cc b/tst/EnergyPlus/unit/WaterThermalTanks.unit.cc index ae221acb93a..4f734dad428 100644 --- a/tst/EnergyPlus/unit/WaterThermalTanks.unit.cc +++ b/tst/EnergyPlus/unit/WaterThermalTanks.unit.cc @@ -771,7 +771,7 @@ TEST_F(EnergyPlusFixture, HPWHEnergyBalance) state->dataWaterThermalTanks->mdotAir = 0.0993699992873531; int GlycolIndex = 0; - const Real64 Cp = Fluid::GetSpecificHeatGlycol(*state, Fluid::Water, Tank.TankTemp, GlycolIndex, "HPWHEnergyBalance"); + const Real64 Cp = FluidProperties::GetSpecificHeatGlycol(*state, FluidProperties::Water, Tank.TankTemp, GlycolIndex, "HPWHEnergyBalance"); Tank.CalcHeatPumpWaterHeater(*state, false); @@ -2016,7 +2016,7 @@ TEST_F(EnergyPlusFixture, StratifiedTankCalc) auto &node = Tank.Node[i]; TankNodeEnergy += node.Mass * (NodeTemps[i] - PrevNodeTemps[i]); } - Real64 Cp = Fluid::GetSpecificHeatGlycol(*state, "WATER", 60.0, DummyIndex, "StratifiedTankCalcNoDraw"); + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(*state, "WATER", 60.0, DummyIndex, "StratifiedTankCalcNoDraw"); TankNodeEnergy *= Cp; EXPECT_NEAR(Tank.NetHeatTransferRate * state->dataHVACGlobal->TimeStepSysSec, TankNodeEnergy, fabs(TankNodeEnergy * 0.0001)); @@ -2155,7 +2155,7 @@ TEST_F(EnergyPlusFixture, StratifiedTankSourceFlowRateCalc) Tank.SourceMassFlowRate = 6.30901964e-5 * 997; // 1 gal/min int DummyIndex = 1; - Real64 Cp = Fluid::GetSpecificHeatGlycol(*state, "WATER", 60.0, DummyIndex, "StratifiedTankCalcNoDraw"); + Real64 Cp = FluidProperties::GetSpecificHeatGlycol(*state, "WATER", 60.0, DummyIndex, "StratifiedTankCalcNoDraw"); Tank.CalcWaterThermalTankStratified(*state); @@ -3132,7 +3132,7 @@ TEST_F(EnergyPlusFixture, Desuperheater_Multispeed_Coil_Test) TEST_F(EnergyPlusFixture, MixedTankAlternateSchedule) { - using Fluid::GetDensityGlycol; + using FluidProperties::GetDensityGlycol; std::string const idf_objects = delimited_string({ "Schedule:Constant, Inlet Water Temperature, , 10.0;", @@ -3220,7 +3220,7 @@ TEST_F(EnergyPlusFixture, MixedTankAlternateSchedule) // Source side is in the demand side of the plant loop Tank.SrcSidePlantLoc.loopSideNum = EnergyPlus::DataPlant::LoopSideLocation::Demand; Tank.SavedSourceOutletTemp = 60.0; - rho = Fluid::GetDensityGlycol(*state, "Water", Tank.TankTemp, WaterIndex, "MixedTankAlternateSchedule"); + rho = FluidProperties::GetDensityGlycol(*state, "Water", Tank.TankTemp, WaterIndex, "MixedTankAlternateSchedule"); // Set the available max flow rates for tank and node Tank.PlantSourceMassFlowRateMax = Tank.SourceDesignVolFlowRate * rho; diff --git a/tst/EnergyPlus/unit/WaterToAirHeatPump.unit.cc b/tst/EnergyPlus/unit/WaterToAirHeatPump.unit.cc index 7a3b1236092..31e6a5e59c0 100644 --- a/tst/EnergyPlus/unit/WaterToAirHeatPump.unit.cc +++ b/tst/EnergyPlus/unit/WaterToAirHeatPump.unit.cc @@ -137,61 +137,63 @@ TEST_F(EnergyPlusFixture, WaterToAirHeatPumpTest_SimWaterToAir) ASSERT_TRUE(process_idf(idf_objects)); - state->dataFluid->RefrigData.allocate(1); - state->dataFluid->RefrigData(1).Name = "R22"; - state->dataFluid->RefrigData(1).PsLowTempIndex = 1; - state->dataFluid->RefrigData(1).PsHighTempIndex = 2; - state->dataFluid->RefrigData(1).PsTemps.allocate(2); - state->dataFluid->RefrigData(1).PsTemps(1) = -157.42; - state->dataFluid->RefrigData(1).PsTemps(2) = 96.145; - state->dataFluid->RefrigData(1).PsValues.allocate(2); - state->dataFluid->RefrigData(1).PsValues(1) = 0.3795; - state->dataFluid->RefrigData(1).PsValues(2) = 4990000.0; - - state->dataFluid->RefrigData(1).HfLowTempIndex = 1; - state->dataFluid->RefrigData(1).HfHighTempIndex = 2; - state->dataFluid->RefrigData(1).PsLowPresIndex = 1; - state->dataFluid->RefrigData(1).PsHighPresIndex = 2; - state->dataFluid->RefrigData(1).HTemps.allocate(2); - state->dataFluid->RefrigData(1).HfValues.allocate(2); - state->dataFluid->RefrigData(1).HfgValues.allocate(2); - - state->dataFluid->RefrigData(1).HTemps(1) = -157.42; - state->dataFluid->RefrigData(1).HTemps(2) = 96.145; - state->dataFluid->RefrigData(1).HfValues(1) = 29600.0; - state->dataFluid->RefrigData(1).HfValues(2) = 366900.0; - state->dataFluid->RefrigData(1).HfgValues(1) = 332700.0; - state->dataFluid->RefrigData(1).HfgValues(2) = 366900.0; - state->dataFluid->RefrigData(1).NumSuperTempPts = 2; - state->dataFluid->RefrigData(1).NumSuperPressPts = 2; - state->dataFluid->RefrigData(1).SHTemps.allocate(2); - state->dataFluid->RefrigData(1).SHPress.allocate(2); - state->dataFluid->RefrigData(1).SHTemps(1) = -157.15; - state->dataFluid->RefrigData(1).SHTemps(2) = 152.85; - state->dataFluid->RefrigData(1).SHPress(1) = 0.4043; - state->dataFluid->RefrigData(1).SHPress(2) = 16500000.0; - state->dataFluid->RefrigData(1).HshValues.allocate(2, 2); - state->dataFluid->RefrigData(1).HshValues(1, 1) = 332800.0; - state->dataFluid->RefrigData(1).HshValues(1, 2) = 537000.0; - state->dataFluid->RefrigData(1).HshValues(2, 1) = 332800.0; - state->dataFluid->RefrigData(1).HshValues(2, 2) = 537000.0; - state->dataFluid->RefrigData(1).RhoshValues.allocate(2, 2); - state->dataFluid->RefrigData(1).RhoshValues(1, 1) = 0.00003625; - state->dataFluid->RefrigData(1).RhoshValues(1, 2) = 0.0; - state->dataFluid->RefrigData(1).RhoshValues(2, 1) = 0.00003625; - state->dataFluid->RefrigData(1).RhoshValues(2, 2) = 0.0; - - state->dataFluid->RefrigData(1).RhofLowTempIndex = 1; - state->dataFluid->RefrigData(1).RhofHighTempIndex = 2; - state->dataFluid->RefrigData(1).RhoTemps.allocate(2); - state->dataFluid->RefrigData(1).RhoTemps(1) = -157.42; - state->dataFluid->RefrigData(1).RhoTemps(2) = 96.145; - state->dataFluid->RefrigData(1).RhofValues.allocate(2); - state->dataFluid->RefrigData(1).RhofValues(1) = 1721.0; - state->dataFluid->RefrigData(1).RhofValues(2) = 523.8; - state->dataFluid->RefrigData(1).RhofgValues.allocate(2); - state->dataFluid->RefrigData(1).RhofgValues(1) = 0.341; - state->dataFluid->RefrigData(1).RhofgValues(2) = 523.8; + state->dataFluidProperties->RefrigData.allocate(1); + auto &refrig = state->dataFluidProperties->RefrigData(1); + refrig.Name = "R22"; + refrig.Num = 1; + refrig.PsLowTempIndex = 1; + refrig.PsHighTempIndex = 2; + refrig.PsTemps.allocate(2); + refrig.PsTemps(1) = -157.42; + refrig.PsTemps(2) = 96.145; + refrig.PsValues.allocate(2); + refrig.PsValues(1) = 0.3795; + refrig.PsValues(2) = 4990000.0; + + refrig.HfLowTempIndex = 1; + refrig.HfHighTempIndex = 2; + refrig.PsLowPresIndex = 1; + refrig.PsHighPresIndex = 2; + refrig.HTemps.allocate(2); + refrig.HfValues.allocate(2); + refrig.HfgValues.allocate(2); + + refrig.HTemps(1) = -157.42; + refrig.HTemps(2) = 96.145; + refrig.HfValues(1) = 29600.0; + refrig.HfValues(2) = 366900.0; + refrig.HfgValues(1) = 332700.0; + refrig.HfgValues(2) = 366900.0; + refrig.NumSuperTempPts = 2; + refrig.NumSuperPressPts = 2; + refrig.SHTemps.allocate(2); + refrig.SHPress.allocate(2); + refrig.SHTemps(1) = -157.15; + refrig.SHTemps(2) = 152.85; + refrig.SHPress(1) = 0.4043; + refrig.SHPress(2) = 16500000.0; + refrig.HshValues.allocate(2, 2); + refrig.HshValues(1, 1) = 332800.0; + refrig.HshValues(1, 2) = 537000.0; + refrig.HshValues(2, 1) = 332800.0; + refrig.HshValues(2, 2) = 537000.0; + refrig.RhoshValues.allocate(2, 2); + refrig.RhoshValues(1, 1) = 0.00003625; + refrig.RhoshValues(1, 2) = 0.0; + refrig.RhoshValues(2, 1) = 0.00003625; + refrig.RhoshValues(2, 2) = 0.0; + + refrig.RhofLowTempIndex = 1; + refrig.RhofHighTempIndex = 2; + refrig.RhoTemps.allocate(2); + refrig.RhoTemps(1) = -157.42; + refrig.RhoTemps(2) = 96.145; + refrig.RhofValues.allocate(2); + refrig.RhofValues(1) = 1721.0; + refrig.RhofValues(2) = 523.8; + refrig.RhofgValues.allocate(2); + refrig.RhofgValues(1) = 0.341; + refrig.RhofgValues(2) = 523.8; GetWatertoAirHPInput(*state); @@ -306,5 +308,5 @@ TEST_F(EnergyPlusFixture, WaterToAirHeatPumpTest_SimWaterToAir) // clean up state->dataWaterToAirHeatPump->WatertoAirHP.deallocate(); - state->dataFluid->RefrigData.deallocate(); + state->dataFluidProperties->RefrigData.deallocate(); } From abed1f003e7c6def9efec9d40184eb8f161b25f2 Mon Sep 17 00:00:00 2001 From: Edwin Lee Date: Mon, 15 Jul 2024 12:10:48 -0500 Subject: [PATCH 39/68] Clang format --- tst/EnergyPlus/unit/MixedAir.unit.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tst/EnergyPlus/unit/MixedAir.unit.cc b/tst/EnergyPlus/unit/MixedAir.unit.cc index 16ec825ebd1..47d9a53d472 100644 --- a/tst/EnergyPlus/unit/MixedAir.unit.cc +++ b/tst/EnergyPlus/unit/MixedAir.unit.cc @@ -7745,7 +7745,8 @@ TEST_F(EnergyPlusFixture, MixedAir_TemperatureError) MixedAir::SimOAMixer(*state, state->dataAirLoop->OutsideAirSys(1).ComponentName(1), state->dataAirLoop->OutsideAirSys(1).ComponentIndex(1)); - Real64 const T_sat = Psychrometrics::PsyTsatFnHPb(*state, state->dataMixedAir->OAMixer(1).MixEnthalpy, state->dataMixedAir->OAMixer(1).MixPressure); + Real64 const T_sat = + Psychrometrics::PsyTsatFnHPb(*state, state->dataMixedAir->OAMixer(1).MixEnthalpy, state->dataMixedAir->OAMixer(1).MixPressure); // T_db must be >= T_sat at the mixed-air node to remain physical EXPECT_TRUE(state->dataMixedAir->OAMixer(1).MixTemp >= T_sat); From 907bf19b5470c95c6fc429e433ed596ccf25cfbc Mon Sep 17 00:00:00 2001 From: amirroth Date: Thu, 18 Jul 2024 16:17:55 -0400 Subject: [PATCH 40/68] Some local cleanup --- src/EnergyPlus/FluidProperties.cc | 6393 ++++++++--------- src/EnergyPlus/FluidProperties.hh | 142 +- src/EnergyPlus/HVACVariableRefrigerantFlow.hh | 2 +- src/EnergyPlus/UtilityRoutines.hh | 6 + 4 files changed, 3026 insertions(+), 3517 deletions(-) diff --git a/src/EnergyPlus/FluidProperties.cc b/src/EnergyPlus/FluidProperties.cc index c900b5e5485..870bb5e0567 100644 --- a/src/EnergyPlus/FluidProperties.cc +++ b/src/EnergyPlus/FluidProperties.cc @@ -559,14 +559,12 @@ namespace FluidProperties { // Array initializer only takes one argument. std::bind is used to convert the // actual initializer into a function of one argument. - state.dataFluidProps->NumOfRefrigerants = 0; - state.dataFluidProps->NumOfGlycols = 0; - - // For default "glycol" fluids of Water, Ethylene Glycol, and Propylene Glycol - - + auto &df = state.dataFluidProps; + df->NumOfRefrigerants = 0; + df->NumOfGlycols = 0; + // For default "glycol" fluids of Water, Ethylene Glycol, and Propylene Glycol Array2D DefaultSteamSuperheatedEnthalpyData(DefaultNumSteamSuperheatedPressure, DefaultNumSteamSuperheatedTemps); Array2D DefaultSteamSuperheatedDensityData(DefaultNumSteamSuperheatedPressure, DefaultNumSteamSuperheatedTemps); @@ -575,37 +573,22 @@ namespace FluidProperties { { // Members std::string Name; // Name of the temperature list - int NumOfTemps; // Number of temperatures in a particular arry + int NumOfTemps = 0; // Number of temperatures in a particular arry Array1D Temps; // Temperature values (degrees C) - - // Default Constructor - FluidTempData() : NumOfTemps(0) - { - } }; struct PressureSequence { // Members - Real64 Pressure; - int InPtr; - - // Default Constructor - PressureSequence() : Pressure(0.0), InPtr(0) - { - } + Real64 Pressure = 0.0; + int InPtr = 0; }; struct FluidData { // Members std::string Name; - bool IsGlycol; - - // Default Constructor - FluidData() : IsGlycol(false) - { - } + bool IsGlycol = false; }; // Object Data @@ -694,10 +677,10 @@ namespace FluidProperties { ++FluidNum; FluidNames(FluidNum).Name = Alphas(1); if (Util::SameString(Alphas(2), Refrig)) { - ++state.dataFluidProps->NumOfRefrigerants; + ++df->NumOfRefrigerants; FluidNames(FluidNum).IsGlycol = false; } else if (Util::SameString(Alphas(2), Glycol)) { - ++state.dataFluidProps->NumOfGlycols; + ++df->NumOfGlycols; FluidNames(FluidNum).IsGlycol = true; } else { ShowSevereError(state, format("{}{}=\"{}\", invalid type", RoutineName, CurrentModuleObject, Alphas(1))); @@ -710,78 +693,72 @@ namespace FluidProperties { ShowFatalError(state, format("{} Previous errors in input cause program termination.", RoutineName)); } - if (state.dataFluidProps->NumOfRefrigerants + 1 > 0) { - state.dataFluidProps->RefrigData.allocate(state.dataFluidProps->NumOfRefrigerants + 1); - state.dataFluidProps->RefrigUsed.allocate(state.dataFluidProps->NumOfRefrigerants + 1); - state.dataFluidProps->RefrigUsed = false; - state.dataFluidProps->RefrigErrorTracking.allocate(state.dataFluidProps->NumOfRefrigerants + 1); + if (df->NumOfRefrigerants + 1 > 0) { + df->RefrigData.allocate(df->NumOfRefrigerants + 1); } - if (state.dataFluidProps->NumOfGlycols > 0) { - state.dataFluidProps->GlyRawData.allocate(state.dataFluidProps->NumOfGlycols); + if (df->NumOfGlycols > 0) { + df->GlyRawData.allocate(df->NumOfGlycols); } // Take the fluid names and assign them to the appropriate derived type - state.dataFluidProps->NumOfRefrigerants = 1; - state.dataFluidProps->NumOfGlycols = 0; - state.dataFluidProps->RefrigData(1).Name = "STEAM"; // Steam is a refrigerant? In which universe? - state.dataFluidProps->RefrigData(1).Num = 1; - state.dataFluidProps->RefrigUsed(1) = true; - state.dataFluidProps->RefrigErrorTracking(1).Name = "STEAM"; + df->NumOfRefrigerants = 1; + df->NumOfGlycols = 0; + df->RefrigData(1).Name = "STEAM"; // Steam is a refrigerant? In which universe? + df->RefrigData(1).Num = 1; + df->RefrigData(1).used = 1; + for (int Loop = 1; Loop <= FluidNum; ++Loop) { if (!FluidNames(Loop).IsGlycol) { - ++state.dataFluidProps->NumOfRefrigerants; - state.dataFluidProps->RefrigData(state.dataFluidProps->NumOfRefrigerants).Name = FluidNames(Loop).Name; - state.dataFluidProps->RefrigData(state.dataFluidProps->NumOfRefrigerants).Num = state.dataFluidProps->NumOfRefrigerants; - state.dataFluidProps->RefrigErrorTracking(state.dataFluidProps->NumOfRefrigerants).Name = FluidNames(Loop).Name; + ++df->NumOfRefrigerants; + df->RefrigData(df->NumOfRefrigerants).Name = FluidNames(Loop).Name; + df->RefrigData(df->NumOfRefrigerants).Num = df->NumOfRefrigerants; } else if (FluidNames(Loop).IsGlycol) { - ++state.dataFluidProps->NumOfGlycols; - state.dataFluidProps->GlyRawData(state.dataFluidProps->NumOfGlycols).Name = FluidNames(Loop).Name; - state.dataFluidProps->GlyRawData(state.dataFluidProps->NumOfGlycols).Num = state.dataFluidProps->NumOfGlycols; + ++df->NumOfGlycols; + df->GlyRawData(df->NumOfGlycols).Name = FluidNames(Loop).Name; + df->GlyRawData(df->NumOfGlycols).Num = df->NumOfGlycols; } } FluidNames.deallocate(); - state.dataFluidProps->RefrigData(1).NumPsPoints = DefaultNumSteamTemps; - state.dataFluidProps->RefrigData(1).PsTemps.allocate(DefaultNumSteamTemps); - state.dataFluidProps->RefrigData(1).PsValues.allocate(DefaultNumSteamTemps); - state.dataFluidProps->RefrigData(1).NumHPoints = DefaultNumSteamTemps; - state.dataFluidProps->RefrigData(1).HTemps.allocate(DefaultNumSteamTemps); - state.dataFluidProps->RefrigData(1).HfValues.allocate(DefaultNumSteamTemps); - state.dataFluidProps->RefrigData(1).HfgValues.allocate(DefaultNumSteamTemps); - state.dataFluidProps->RefrigData(1).NumCpPoints = DefaultNumSteamTemps; - state.dataFluidProps->RefrigData(1).CpTemps.allocate(DefaultNumSteamTemps); - state.dataFluidProps->RefrigData(1).CpfValues.allocate(DefaultNumSteamTemps); - state.dataFluidProps->RefrigData(1).CpfgValues.allocate(DefaultNumSteamTemps); - state.dataFluidProps->RefrigData(1).NumRhoPoints = DefaultNumSteamTemps; - state.dataFluidProps->RefrigData(1).RhoTemps.allocate(DefaultNumSteamTemps); - state.dataFluidProps->RefrigData(1).RhofValues.allocate(DefaultNumSteamTemps); - state.dataFluidProps->RefrigData(1).RhofgValues.allocate(DefaultNumSteamTemps); - - state.dataFluidProps->RefrigData(1).PsTemps = DefaultSteamTemps; - state.dataFluidProps->RefrigData(1).PsValues = DefaultSteamPressData; - state.dataFluidProps->RefrigData(1).HTemps = DefaultSteamTemps; - state.dataFluidProps->RefrigData(1).HfValues = DefaultSteamEnthalpyFluidData; - state.dataFluidProps->RefrigData(1).HfgValues = DefaultSteamEnthalpyGasFluidData; - state.dataFluidProps->RefrigData(1).CpTemps = DefaultSteamTemps; - state.dataFluidProps->RefrigData(1).CpfValues = DefaultSteamCpFluidData; - state.dataFluidProps->RefrigData(1).CpfgValues = DefaultSteamCpGasFluidData; - state.dataFluidProps->RefrigData(1).RhoTemps = DefaultSteamTemps; - state.dataFluidProps->RefrigData(1).RhofValues = DefaultSteamDensityFluidData; - state.dataFluidProps->RefrigData(1).RhofgValues = DefaultSteamDensityGasFluidData; - - state.dataFluidProps->RefrigData(1).NumSuperTempPts = DefaultNumSteamSuperheatedTemps; - state.dataFluidProps->RefrigData(1).NumSuperPressPts = DefaultNumSteamSuperheatedPressure; - state.dataFluidProps->RefrigData(1).SHTemps.allocate(state.dataFluidProps->RefrigData(1).NumSuperTempPts); - state.dataFluidProps->RefrigData(1).SHPress.allocate(state.dataFluidProps->RefrigData(1).NumSuperPressPts); - state.dataFluidProps->RefrigData(1).HshValues.allocate(state.dataFluidProps->RefrigData(1).NumSuperPressPts, - state.dataFluidProps->RefrigData(1).NumSuperTempPts); - state.dataFluidProps->RefrigData(1).RhoshValues.allocate(state.dataFluidProps->RefrigData(1).NumSuperPressPts, - state.dataFluidProps->RefrigData(1).NumSuperTempPts); - state.dataFluidProps->RefrigData(1).SHTemps = DefaultSteamSuperheatedTemps; - state.dataFluidProps->RefrigData(1).SHPress = DefaultSteamSuperheatedPressData; - state.dataFluidProps->RefrigData(1).HshValues = DefaultSteamSuperheatedEnthalpyData; - state.dataFluidProps->RefrigData(1).RhoshValues = DefaultSteamSuperheatedDensityData; + df->RefrigData(1).NumPsPoints = DefaultNumSteamTemps; + df->RefrigData(1).PsTemps.allocate(DefaultNumSteamTemps); + df->RefrigData(1).PsValues.allocate(DefaultNumSteamTemps); + df->RefrigData(1).NumHPoints = DefaultNumSteamTemps; + df->RefrigData(1).HTemps.allocate(DefaultNumSteamTemps); + df->RefrigData(1).HfValues.allocate(DefaultNumSteamTemps); + df->RefrigData(1).HfgValues.allocate(DefaultNumSteamTemps); + df->RefrigData(1).NumCpPoints = DefaultNumSteamTemps; + df->RefrigData(1).CpTemps.allocate(DefaultNumSteamTemps); + df->RefrigData(1).CpfValues.allocate(DefaultNumSteamTemps); + df->RefrigData(1).CpfgValues.allocate(DefaultNumSteamTemps); + df->RefrigData(1).NumRhoPoints = DefaultNumSteamTemps; + df->RefrigData(1).RhoTemps.allocate(DefaultNumSteamTemps); + df->RefrigData(1).RhofValues.allocate(DefaultNumSteamTemps); + df->RefrigData(1).RhofgValues.allocate(DefaultNumSteamTemps); + + df->RefrigData(1).PsTemps = DefaultSteamTemps; + df->RefrigData(1).PsValues = DefaultSteamPressData; + df->RefrigData(1).HTemps = DefaultSteamTemps; + df->RefrigData(1).HfValues = DefaultSteamEnthalpyFluidData; + df->RefrigData(1).HfgValues = DefaultSteamEnthalpyGasFluidData; + df->RefrigData(1).CpTemps = DefaultSteamTemps; + df->RefrigData(1).CpfValues = DefaultSteamCpFluidData; + df->RefrigData(1).CpfgValues = DefaultSteamCpGasFluidData; + df->RefrigData(1).RhoTemps = DefaultSteamTemps; + df->RefrigData(1).RhofValues = DefaultSteamDensityFluidData; + df->RefrigData(1).RhofgValues = DefaultSteamDensityGasFluidData; + + df->RefrigData(1).NumSuperTempPts = DefaultNumSteamSuperheatedTemps; + df->RefrigData(1).NumSuperPressPts = DefaultNumSteamSuperheatedPressure; + df->RefrigData(1).SHTemps.allocate(df->RefrigData(1).NumSuperTempPts); + df->RefrigData(1).SHPress.allocate(df->RefrigData(1).NumSuperPressPts); + df->RefrigData(1).HshValues.allocate(df->RefrigData(1).NumSuperPressPts, df->RefrigData(1).NumSuperTempPts); + df->RefrigData(1).RhoshValues.allocate(df->RefrigData(1).NumSuperPressPts, df->RefrigData(1).NumSuperTempPts); + df->RefrigData(1).SHTemps = DefaultSteamSuperheatedTemps; + df->RefrigData(1).SHPress = DefaultSteamSuperheatedPressData; + df->RefrigData(1).HshValues = DefaultSteamSuperheatedEnthalpyData; + df->RefrigData(1).RhoshValues = DefaultSteamSuperheatedDensityData; // Read in all of the temperature arrays in the input file FluidTemps.allocate(NumOfFluidTempArrays); @@ -830,7 +807,7 @@ namespace FluidProperties { // Go through each refrigerant found in the fluid names statement and read in the data // Note that every valid fluid must have ALL of the necessary data or a fatal error will // be produced. - for (int Loop = 2; Loop <= state.dataFluidProps->NumOfRefrigerants; ++Loop) { + for (int Loop = 2; Loop <= df->NumOfRefrigerants; ++Loop) { // For each property, cycle through all the valid input until the proper match is found. @@ -855,7 +832,7 @@ namespace FluidProperties { cAlphaFieldNames, cNumericFieldNames); - if ((Util::SameString(Alphas(1), state.dataFluidProps->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), Pressure)) && + if ((Util::SameString(Alphas(1), df->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), Pressure)) && (Util::SameString(Alphas(3), GasFluid))) { for (int TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) { @@ -864,14 +841,14 @@ namespace FluidProperties { TempsName = FluidTemps(TempLoop).Name; // At this point, we have found the correct input line and found a match // for the temperature array. It's time to load up the local derived type. - state.dataFluidProps->RefrigData(Loop).NumPsPoints = FluidTemps(TempLoop).NumOfTemps; - state.dataFluidProps->RefrigData(Loop).PsTemps.allocate(state.dataFluidProps->RefrigData(Loop).NumPsPoints); - state.dataFluidProps->RefrigData(Loop).PsValues.allocate(state.dataFluidProps->RefrigData(Loop).NumPsPoints); + df->RefrigData(Loop).NumPsPoints = FluidTemps(TempLoop).NumOfTemps; + df->RefrigData(Loop).PsTemps.allocate(df->RefrigData(Loop).NumPsPoints); + df->RefrigData(Loop).PsValues.allocate(df->RefrigData(Loop).NumPsPoints); // Make sure the number of points in the two arrays (temps and values) are the same - if (NumNumbers != state.dataFluidProps->RefrigData(Loop).NumPsPoints) { + if (NumNumbers != df->RefrigData(Loop).NumPsPoints) { ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); ShowContinueError(state, format("Temperature Name={}, Temperature array and fluid saturation pressure array must have the " "same number of points", @@ -879,15 +856,15 @@ namespace FluidProperties { ShowContinueError(state, format("Temperature # points={} whereas {} # pressure points={}", NumNumbers, - state.dataFluidProps->RefrigData(Loop).Name, - state.dataFluidProps->RefrigData(Loop).NumPsPoints)); + df->RefrigData(Loop).Name, + df->RefrigData(Loop).NumPsPoints)); ErrorsFound = true; break; // the TempLoop DO Loop } // Same number of points so assign the values - state.dataFluidProps->RefrigData(Loop).PsTemps = FluidTemps(TempLoop).Temps; - state.dataFluidProps->RefrigData(Loop).PsValues = Numbers({1, NumNumbers}); + df->RefrigData(Loop).PsTemps = FluidTemps(TempLoop).Temps; + df->RefrigData(Loop).PsValues = Numbers({1, NumNumbers}); break; // the TempLoop DO loop } @@ -895,7 +872,7 @@ namespace FluidProperties { // If it made it all the way to the last temperature array and didn't find a match, then no match was found if (TempLoop == NumOfFluidTempArrays) { ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); ShowContinueError(state, "Found saturated fluid gas/fluid pressure input but no matching temperature array"); ShowContinueError(state, format("Entered Temperature Name={}", TempsName)); ErrorsFound = true; @@ -909,7 +886,7 @@ namespace FluidProperties { // If it made it all the way to the last input occurrence and didn't find a match, // then no sat press data found if (InData == NumOfSatFluidPropArrays) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); ShowContinueError(state, format(R"(No Gas/Fluid Saturation Pressure found. Need properties with {}="Pressure" and {}="FluidGas".)", cAlphaFieldNames(2), @@ -937,7 +914,7 @@ namespace FluidProperties { cAlphaFieldNames, cNumericFieldNames); - if ((Util::SameString(Alphas(1), state.dataFluidProps->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), Enthalpy)) && + if ((Util::SameString(Alphas(1), df->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), Enthalpy)) && (Util::SameString(Alphas(3), Fluid))) { for (int TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) { @@ -946,14 +923,14 @@ namespace FluidProperties { TempsName = FluidTemps(TempLoop).Name; // At this point, we have found the correct input line and found a match // for the temperature array. It's time to load up the local derived type. - state.dataFluidProps->RefrigData(Loop).NumHPoints = FluidTemps(TempLoop).NumOfTemps; - state.dataFluidProps->RefrigData(Loop).HTemps.allocate(state.dataFluidProps->RefrigData(Loop).NumHPoints); - state.dataFluidProps->RefrigData(Loop).HfValues.allocate(state.dataFluidProps->RefrigData(Loop).NumHPoints); + df->RefrigData(Loop).NumHPoints = FluidTemps(TempLoop).NumOfTemps; + df->RefrigData(Loop).HTemps.allocate(df->RefrigData(Loop).NumHPoints); + df->RefrigData(Loop).HfValues.allocate(df->RefrigData(Loop).NumHPoints); // Make sure the number of points in the two arrays (temps and values) are the same - if (NumNumbers != state.dataFluidProps->RefrigData(Loop).NumHPoints) { + if (NumNumbers != df->RefrigData(Loop).NumHPoints) { ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); ShowSevereError(state, format("Temperature Name={}, Temperature array and saturated fluid enthalpy array must have the same " "number of points", @@ -961,15 +938,15 @@ namespace FluidProperties { ShowContinueError(state, format("Temperature # points={} whereas {} # points={}", NumNumbers, - state.dataFluidProps->RefrigData(Loop).Name, - state.dataFluidProps->RefrigData(Loop).NumHPoints)); + df->RefrigData(Loop).Name, + df->RefrigData(Loop).NumHPoints)); ErrorsFound = true; break; // the TempLoop DO Loop } // Same number of points so assign the values - state.dataFluidProps->RefrigData(Loop).HTemps = FluidTemps(TempLoop).Temps; - state.dataFluidProps->RefrigData(Loop).HfValues = Numbers({1, NumNumbers}); + df->RefrigData(Loop).HTemps = FluidTemps(TempLoop).Temps; + df->RefrigData(Loop).HfValues = Numbers({1, NumNumbers}); break; // the TempLoop DO loop } @@ -977,7 +954,7 @@ namespace FluidProperties { // If it made it all the way to the last temperature array and didn't find a match, then no match was found if (TempLoop == NumOfFluidTempArrays) { ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); ShowContinueError(state, "Found saturated fluid enthalpy input but no matching temperature array"); ShowContinueError(state, format("Entered Temperature Name={}", TempsName)); ErrorsFound = true; @@ -990,7 +967,7 @@ namespace FluidProperties { // If it made it all the way to the last input occurrence and didn't find a match, then no sat fluid enthalpy data found if (InData == NumOfSatFluidPropArrays) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); ShowContinueError(state, format(R"(No Saturated Fluid Enthalpy found. Need properties to be entered with {}="Enthalpy" and {}="Fluid".)", cAlphaFieldNames(2), @@ -1017,7 +994,7 @@ namespace FluidProperties { cAlphaFieldNames, cNumericFieldNames); - if ((Util::SameString(Alphas(1), state.dataFluidProps->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), Enthalpy)) && + if ((Util::SameString(Alphas(1), df->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), Enthalpy)) && (Util::SameString(Alphas(3), GasFluid))) { for (int TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) { @@ -1025,7 +1002,7 @@ namespace FluidProperties { if (Util::SameString(Alphas(4), FluidTemps(TempLoop).Name)) { if (!Util::SameString(FluidTemps(TempLoop).Name, TempsName)) { ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); ShowContinueError(state, "Temperatures for enthalpy fluid and gas/fluid points are not the same"); ShowContinueError(state, format("Name={} => {} /= {}", Alphas(4), FluidTemps(TempLoop).Name, TempsName)); ErrorsFound = true; @@ -1033,12 +1010,12 @@ namespace FluidProperties { } // At this point, we have found the correct input line and found a match // for the temperature array. It's time to load up the local derived type. - state.dataFluidProps->RefrigData(Loop).HfgValues.allocate(state.dataFluidProps->RefrigData(Loop).NumHPoints); + df->RefrigData(Loop).HfgValues.allocate(df->RefrigData(Loop).NumHPoints); // Make sure the number of points in the two arrays (temps and values) are the same - if (NumNumbers != state.dataFluidProps->RefrigData(Loop).NumHPoints) { + if (NumNumbers != df->RefrigData(Loop).NumHPoints) { ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); ShowContinueError(state, format("Temperature Name={}, Temperature array and saturated gas/fluid enthalpy array must have " "the same number of points", @@ -1046,14 +1023,14 @@ namespace FluidProperties { ShowContinueError(state, format("Temperature # points={} whereas {} # points={}", NumNumbers, - state.dataFluidProps->RefrigData(Loop).Name, - state.dataFluidProps->RefrigData(Loop).NumHPoints)); + df->RefrigData(Loop).Name, + df->RefrigData(Loop).NumHPoints)); ErrorsFound = true; break; // the TempLoop DO Loop } // Same number of points so assign the values - state.dataFluidProps->RefrigData(Loop).HfgValues = Numbers({1, NumNumbers}); + df->RefrigData(Loop).HfgValues = Numbers({1, NumNumbers}); break; // the TempLoop DO loop } @@ -1061,7 +1038,7 @@ namespace FluidProperties { // If it made it all the way to the last temperature array and didn't find a match, then no match was found if (TempLoop == NumOfFluidTempArrays) { ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); ShowContinueError(state, "Found saturated gas/fluid enthalpy input but no matching temperature array"); ShowContinueError(state, format("Entered Temperature Name={}", TempsName)); ErrorsFound = true; @@ -1074,7 +1051,7 @@ namespace FluidProperties { // If it made it all the way to the last input occurrence and didn't find a match, then no sat f/g enthalpy data found if (InData == NumOfSatFluidPropArrays) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); ShowContinueError( state, format(R"(No Saturated Gas/Fluid Enthalpy found. Need properties to be entered with {}="Enthalpy" and {}="FluidGas".)", @@ -1103,7 +1080,7 @@ namespace FluidProperties { cAlphaFieldNames, cNumericFieldNames); - if ((Util::SameString(Alphas(1), state.dataFluidProps->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), SpecificHeat)) && + if ((Util::SameString(Alphas(1), df->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), SpecificHeat)) && (Util::SameString(Alphas(3), Fluid))) { for (int TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) { @@ -1112,14 +1089,14 @@ namespace FluidProperties { TempsName = FluidTemps(TempLoop).Name; // At this point, we have found the correct input line and found a match // for the temperature array. It's time to load up the local derived type. - state.dataFluidProps->RefrigData(Loop).NumCpPoints = FluidTemps(TempLoop).NumOfTemps; - state.dataFluidProps->RefrigData(Loop).CpTemps.allocate(state.dataFluidProps->RefrigData(Loop).NumCpPoints); - state.dataFluidProps->RefrigData(Loop).CpfValues.allocate(state.dataFluidProps->RefrigData(Loop).NumCpPoints); + df->RefrigData(Loop).NumCpPoints = FluidTemps(TempLoop).NumOfTemps; + df->RefrigData(Loop).CpTemps.allocate(df->RefrigData(Loop).NumCpPoints); + df->RefrigData(Loop).CpfValues.allocate(df->RefrigData(Loop).NumCpPoints); // Make sure the number of points in the two arrays (temps and values) are the same - if (NumNumbers != state.dataFluidProps->RefrigData(Loop).NumCpPoints) { + if (NumNumbers != df->RefrigData(Loop).NumCpPoints) { ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); ShowSevereError( state, format("Temperature Name={}, Temperature array and saturated fluid Cp array must have the same number of points", @@ -1127,15 +1104,15 @@ namespace FluidProperties { ShowContinueError(state, format("Temperature # points={} whereas {} # Cp points={}", NumNumbers, - state.dataFluidProps->RefrigData(Loop).Name, - state.dataFluidProps->RefrigData(Loop).NumCpPoints)); + df->RefrigData(Loop).Name, + df->RefrigData(Loop).NumCpPoints)); ErrorsFound = true; break; // the TempLoop DO Loop } // Same number of points so assign the values - state.dataFluidProps->RefrigData(Loop).CpTemps = FluidTemps(TempLoop).Temps; - state.dataFluidProps->RefrigData(Loop).CpfValues = Numbers({1, NumNumbers}); + df->RefrigData(Loop).CpTemps = FluidTemps(TempLoop).Temps; + df->RefrigData(Loop).CpfValues = Numbers({1, NumNumbers}); break; // the TempLoop DO loop } @@ -1143,7 +1120,7 @@ namespace FluidProperties { // If it made it all the way to the last temperature array and didn't find a match, then no match was found if (TempLoop == NumOfFluidTempArrays) { ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); ShowContinueError(state, "Found saturated fluid specific heat (Cp) input but no matching temperature array"); ShowContinueError(state, format("Entered Temperature Name={}", TempsName)); ErrorsFound = true; @@ -1156,7 +1133,7 @@ namespace FluidProperties { // If it made it all the way to the last input occurrence and didn't find a match, then no sat fluid Cp data found if (InData == NumOfSatFluidPropArrays) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); ShowContinueError( state, format(R"(No Saturated Fluid Specific Heat found. Need properties to be entered with {}="SpecificHeat" and {}="Fluid".)", @@ -1184,7 +1161,7 @@ namespace FluidProperties { cAlphaFieldNames, cNumericFieldNames); - if ((Util::SameString(Alphas(1), state.dataFluidProps->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), SpecificHeat)) && + if ((Util::SameString(Alphas(1), df->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), SpecificHeat)) && (Util::SameString(Alphas(3), GasFluid))) { for (int TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) { @@ -1192,7 +1169,7 @@ namespace FluidProperties { if (Util::SameString(Alphas(4), FluidTemps(TempLoop).Name)) { if (!Util::SameString(FluidTemps(TempLoop).Name, TempsName)) { ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); ShowContinueError(state, "Temperatures for specific heat fluid and gas/fluid points are not the same"); ShowContinueError(state, format("Name={} => {} /= {}", Alphas(4), FluidTemps(TempLoop).Name, TempsName)); ErrorsFound = true; @@ -1200,12 +1177,12 @@ namespace FluidProperties { } // At this point, we have found the correct input line and found a match // for the temperature array. It's time to load up the local derived type. - state.dataFluidProps->RefrigData(Loop).CpfgValues.allocate(state.dataFluidProps->RefrigData(Loop).NumCpPoints); + df->RefrigData(Loop).CpfgValues.allocate(df->RefrigData(Loop).NumCpPoints); // Make sure the number of points in the two arrays (temps and values) are the same - if (NumNumbers != state.dataFluidProps->RefrigData(Loop).NumCpPoints) { + if (NumNumbers != df->RefrigData(Loop).NumCpPoints) { ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); ShowContinueError( state, format( @@ -1214,14 +1191,14 @@ namespace FluidProperties { ShowContinueError(state, format("Temperature # points={} whereas {} # Cp points={}", NumNumbers, - state.dataFluidProps->RefrigData(Loop).Name, - state.dataFluidProps->RefrigData(Loop).NumCpPoints)); + df->RefrigData(Loop).Name, + df->RefrigData(Loop).NumCpPoints)); ErrorsFound = true; break; // the TempLoop DO Loop } // Same number of points so assign the values - state.dataFluidProps->RefrigData(Loop).CpfgValues = Numbers({1, NumNumbers}); + df->RefrigData(Loop).CpfgValues = Numbers({1, NumNumbers}); break; // the TempLoop DO loop } @@ -1229,7 +1206,7 @@ namespace FluidProperties { // If it made it all the way to the last temperature array and didn't find a match, then no match was found if (TempLoop == NumOfFluidTempArrays) { ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); ShowContinueError(state, "Found saturated gas/fluid specific heat (Cp) input but no matching temperature array"); ShowContinueError(state, format("Entered Temperature Name={}", TempsName)); ErrorsFound = true; @@ -1242,7 +1219,7 @@ namespace FluidProperties { // If it made it all the way to the last input occurrence and didn't find a match, then no sat f/g Cp data found if (InData == NumOfSatFluidPropArrays) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); ShowContinueError( state, format( @@ -1272,7 +1249,7 @@ namespace FluidProperties { cAlphaFieldNames, cNumericFieldNames); - if ((Util::SameString(Alphas(1), state.dataFluidProps->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), Density)) && + if ((Util::SameString(Alphas(1), df->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), Density)) && (Util::SameString(Alphas(3), Fluid))) { for (int TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) { @@ -1281,14 +1258,14 @@ namespace FluidProperties { TempsName = FluidTemps(TempLoop).Name; // At this point, we have found the correct input line and found a match // for the temperature array. It's time to load up the local derived type. - state.dataFluidProps->RefrigData(Loop).NumRhoPoints = FluidTemps(TempLoop).NumOfTemps; - state.dataFluidProps->RefrigData(Loop).RhoTemps.allocate(state.dataFluidProps->RefrigData(Loop).NumRhoPoints); - state.dataFluidProps->RefrigData(Loop).RhofValues.allocate(state.dataFluidProps->RefrigData(Loop).NumRhoPoints); + df->RefrigData(Loop).NumRhoPoints = FluidTemps(TempLoop).NumOfTemps; + df->RefrigData(Loop).RhoTemps.allocate(df->RefrigData(Loop).NumRhoPoints); + df->RefrigData(Loop).RhofValues.allocate(df->RefrigData(Loop).NumRhoPoints); // Make sure the number of points in the two arrays (temps and values) are the same - if (NumNumbers != state.dataFluidProps->RefrigData(Loop).NumRhoPoints) { + if (NumNumbers != df->RefrigData(Loop).NumRhoPoints) { ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); ShowContinueError(state, format("Temperature Name={}, Temperature array and saturated fluid density array must have the " "same number of points", @@ -1296,15 +1273,15 @@ namespace FluidProperties { ShowContinueError(state, format("Temperature # points={} whereas {} # Density points={}", NumNumbers, - state.dataFluidProps->RefrigData(Loop).Name, - state.dataFluidProps->RefrigData(Loop).NumRhoPoints)); + df->RefrigData(Loop).Name, + df->RefrigData(Loop).NumRhoPoints)); ErrorsFound = true; break; // the TempLoop DO Loop } // Same number of points so assign the values - state.dataFluidProps->RefrigData(Loop).RhoTemps = FluidTemps(TempLoop).Temps; - state.dataFluidProps->RefrigData(Loop).RhofValues = Numbers({1, NumNumbers}); + df->RefrigData(Loop).RhoTemps = FluidTemps(TempLoop).Temps; + df->RefrigData(Loop).RhofValues = Numbers({1, NumNumbers}); break; // the TempLoop DO loop } @@ -1312,7 +1289,7 @@ namespace FluidProperties { // If it made it all the way to the last temperature array and didn't find a match, then no match was found if (TempLoop == NumOfFluidTempArrays) { ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); ShowContinueError(state, "Found saturated fluid density input but no matching temperature array"); ShowContinueError(state, format("Entered Temperature Name={}", TempsName)); ErrorsFound = true; @@ -1325,7 +1302,7 @@ namespace FluidProperties { // If it made it all the way to the last input occurrence and didn't find a match, then no sat fluid density data found if (InData == NumOfSatFluidPropArrays) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); ShowContinueError(state, format(R"(No Saturated Fluid Density found. Need properties to be entered with {}="Density" and {}="Fluid".)", cAlphaFieldNames(2), @@ -1352,7 +1329,7 @@ namespace FluidProperties { cAlphaFieldNames, cNumericFieldNames); - if ((Util::SameString(Alphas(1), state.dataFluidProps->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), Density)) && + if ((Util::SameString(Alphas(1), df->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), Density)) && (Util::SameString(Alphas(3), GasFluid))) { for (int TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) { @@ -1360,7 +1337,7 @@ namespace FluidProperties { if (Util::SameString(Alphas(4), FluidTemps(TempLoop).Name)) { if (!Util::SameString(FluidTemps(TempLoop).Name, TempsName)) { ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); ShowContinueError(state, "Temperatures for density fluid and gas/fluid points are not the same"); ShowContinueError(state, format("Name={} => {} /= {}", Alphas(4), FluidTemps(TempLoop).Name, TempsName)); ErrorsFound = true; @@ -1368,12 +1345,12 @@ namespace FluidProperties { } // At this point, we have found the correct input line and found a match // for the temperature array. It's time to load up the local derived type. - state.dataFluidProps->RefrigData(Loop).RhofgValues.allocate(state.dataFluidProps->RefrigData(Loop).NumRhoPoints); + df->RefrigData(Loop).RhofgValues.allocate(df->RefrigData(Loop).NumRhoPoints); // Make sure the number of points in the two arrays (temps and values) are the same - if (NumNumbers != state.dataFluidProps->RefrigData(Loop).NumRhoPoints) { + if (NumNumbers != df->RefrigData(Loop).NumRhoPoints) { ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); ShowContinueError(state, format("Temperature Name={}, Temperature array and saturated gas/fluid density array must have the " "same number of points", @@ -1381,14 +1358,14 @@ namespace FluidProperties { ShowContinueError(state, format("Temperature # points={} whereas {} # density points={}", NumNumbers, - state.dataFluidProps->RefrigData(Loop).Name, - state.dataFluidProps->RefrigData(Loop).NumRhoPoints)); + df->RefrigData(Loop).Name, + df->RefrigData(Loop).NumRhoPoints)); ErrorsFound = true; break; // the TempLoop DO Loop } // Same number of points so assign the values - state.dataFluidProps->RefrigData(Loop).RhofgValues = Numbers({1, NumNumbers}); + df->RefrigData(Loop).RhofgValues = Numbers({1, NumNumbers}); break; // the TempLoop DO loop } @@ -1396,7 +1373,7 @@ namespace FluidProperties { // If it made it all the way to the last temperature array and didn't find a match, then no match was found if (TempLoop == NumOfFluidTempArrays) { ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); ShowContinueError(state, "Found saturated gas/fluid density input but no matching temperature array"); ShowContinueError(state, format("Entered Temperature Name={}", TempsName)); ErrorsFound = true; @@ -1409,7 +1386,7 @@ namespace FluidProperties { // If it made it all the way to the last input occurrence and didn't find a match, then no sat f/g density data found if (InData == NumOfSatFluidPropArrays) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); ShowSevereError( state, format(R"(No Saturated Gas/Fluid Density found. Need properties to be entered with {}="Density" and {}="FluidGas".)", @@ -1465,7 +1442,7 @@ namespace FluidProperties { !Util::SameString(Alphas(2), Density)) { if (iTemp == 0) { ShowWarningError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); ShowContinueError( state, format(R"({}="{}", but {}="{}" is not valid.)", cAlphaFieldNames(3), Fluid, cAlphaFieldNames(2), Alphas(2))); ShowContinueError(state, format(R"(Valid choices are "{}", "{}", "{}".)", Enthalpy, SpecificHeat, Density)); @@ -1480,7 +1457,7 @@ namespace FluidProperties { !Util::SameString(Alphas(2), SpecificHeat) && !Util::SameString(Alphas(2), Density)) { if (iTemp == 0) { ShowWarningError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); ShowContinueError( state, format(R"({}="{}", but {}="{}" is not valid.)", cAlphaFieldNames(3), Fluid, cAlphaFieldNames(2), Alphas(2))); ShowContinueError(state, @@ -1492,7 +1469,7 @@ namespace FluidProperties { } else { if (iTemp == 0) { ShowWarningError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); ShowContinueError(state, format("{}=\"{}\" is not valid.", cAlphaFieldNames(3), Alphas(3))); ShowContinueError(state, format(R"(Valid choices are "{}", "{}".)", Fluid, GasFluid)); ShowContinueError(state, @@ -1529,7 +1506,7 @@ namespace FluidProperties { cAlphaFieldNames, cNumericFieldNames); - if ((Util::SameString(Alphas(1), state.dataFluidProps->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), Enthalpy))) { + if ((Util::SameString(Alphas(1), df->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), Enthalpy))) { ++NumOfPressPts; if (FirstSHMatch) { TempsName = Alphas(3); @@ -1537,7 +1514,7 @@ namespace FluidProperties { } else { if (!Util::SameString(TempsName, Alphas(3))) { ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); ShowContinueError(state, "All superheated data for the same property must use the same temperature list"); ShowContinueError(state, format("Expected name={}, Entered name={}", TempsName, Alphas(3))); ErrorsFound = true; @@ -1546,7 +1523,7 @@ namespace FluidProperties { } } if (NumOfPressPts == 0) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); ShowContinueError(state, "No pressure data found for superheated enthalpy"); ErrorsFound = true; } @@ -1555,13 +1532,13 @@ namespace FluidProperties { // First, allocate the temperature array and transfer the data from the FluidTemp array for (int TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) { if (Util::SameString(TempsName, FluidTemps(TempLoop).Name)) { - state.dataFluidProps->RefrigData(Loop).NumSuperTempPts = FluidTemps(TempLoop).NumOfTemps; - state.dataFluidProps->RefrigData(Loop).SHTemps.allocate(state.dataFluidProps->RefrigData(Loop).NumSuperTempPts); - state.dataFluidProps->RefrigData(Loop).SHTemps = FluidTemps(TempLoop).Temps; + df->RefrigData(Loop).NumSuperTempPts = FluidTemps(TempLoop).NumOfTemps; + df->RefrigData(Loop).SHTemps.allocate(df->RefrigData(Loop).NumSuperTempPts); + df->RefrigData(Loop).SHTemps = FluidTemps(TempLoop).Temps; break; // the TempLoop DO loop } if (TempLoop == NumOfFluidTempArrays) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); ShowContinueError(state, "No match for temperature array name found with superheated enthalpy data"); ShowContinueError(state, format("Entered Temperature Name={}", TempsName)); ErrorsFound = true; @@ -1569,10 +1546,10 @@ namespace FluidProperties { } // Next, allocate the pressure related arrays - state.dataFluidProps->RefrigData(Loop).NumSuperPressPts = NumOfPressPts; - state.dataFluidProps->RefrigData(Loop).SHPress.allocate(state.dataFluidProps->RefrigData(Loop).NumSuperPressPts); - state.dataFluidProps->RefrigData(Loop).HshValues.allocate(state.dataFluidProps->RefrigData(Loop).NumSuperPressPts, - state.dataFluidProps->RefrigData(Loop).NumSuperTempPts); + df->RefrigData(Loop).NumSuperPressPts = NumOfPressPts; + df->RefrigData(Loop).SHPress.allocate(df->RefrigData(Loop).NumSuperPressPts); + df->RefrigData(Loop).HshValues.allocate(df->RefrigData(Loop).NumSuperPressPts, + df->RefrigData(Loop).NumSuperTempPts); // Finally, get the pressure and enthalpy values from the user input CurrentModuleObject = "FluidProperties:Superheated"; @@ -1592,10 +1569,10 @@ namespace FluidProperties { cAlphaFieldNames, cNumericFieldNames); - if ((Util::SameString(Alphas(1), state.dataFluidProps->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), Enthalpy))) { + if ((Util::SameString(Alphas(1), df->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), Enthalpy))) { ++NumOfPressPts; if (Numbers(1) <= 0.0) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); ShowContinueError(state, format("Negative pressures not allowed in fluid property input data, Value =[{:.3R}].", Numbers(1))); ErrorsFound = true; } @@ -1633,27 +1610,27 @@ namespace FluidProperties { lAlphaFieldBlanks, cAlphaFieldNames, cNumericFieldNames); - state.dataFluidProps->RefrigData(Loop).SHPress(InData) = Numbers(1); + df->RefrigData(Loop).SHPress(InData) = Numbers(1); // a little error trapping if (InData > 1) { - if (state.dataFluidProps->RefrigData(Loop).SHPress(InData) <= state.dataFluidProps->RefrigData(Loop).SHPress(InData - 1)) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + if (df->RefrigData(Loop).SHPress(InData) <= df->RefrigData(Loop).SHPress(InData - 1)) { + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); ShowContinueError(state, "Pressures must be entered in ascending order for fluid property data"); ShowContinueError(state, format("First Occurrence at Pressure({}) {{{:.3R}}} >= Pressure({}) {{{:.3R}}}", InData - 1, - state.dataFluidProps->RefrigData(Loop).SHPress(InData - 1), + df->RefrigData(Loop).SHPress(InData - 1), InData, - state.dataFluidProps->RefrigData(Loop).SHPress(InData))); + df->RefrigData(Loop).SHPress(InData))); ErrorsFound = true; break; } } - if ((NumNumbers - 1) == state.dataFluidProps->RefrigData(Loop).NumSuperTempPts) { - state.dataFluidProps->RefrigData(Loop).HshValues(InData, {1, state.dataFluidProps->RefrigData(Loop).NumSuperTempPts}) = + if ((NumNumbers - 1) == df->RefrigData(Loop).NumSuperTempPts) { + df->RefrigData(Loop).HshValues(InData, {1, df->RefrigData(Loop).NumSuperTempPts}) = Numbers({2, NumNumbers}); } else { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); ShowContinueError(state, "Number of superheated enthalpy data points not equal to number of temperature points"); ErrorsFound = true; } @@ -1665,8 +1642,8 @@ namespace FluidProperties { // First find the number of pressure value syntax lines have been entered and // make sure that all of the pressure input is linked to the same temperature list // Then allocate the arrays and read the data into the proper place - state.dataFluidProps->RefrigData(Loop).RhoshValues.allocate(state.dataFluidProps->RefrigData(Loop).NumSuperPressPts, - state.dataFluidProps->RefrigData(Loop).NumSuperTempPts); + df->RefrigData(Loop).RhoshValues.allocate(df->RefrigData(Loop).NumSuperPressPts, + df->RefrigData(Loop).NumSuperTempPts); CurrentModuleObject = "FluidProperties:Superheated"; NumOfPressPts = 0; PressurePtr.allocate(NumOfSHFluidPropArrays); @@ -1683,10 +1660,10 @@ namespace FluidProperties { lAlphaFieldBlanks, cAlphaFieldNames, cNumericFieldNames); - if ((Util::SameString(Alphas(1), state.dataFluidProps->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), Density))) { + if ((Util::SameString(Alphas(1), df->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), Density))) { ++NumOfPressPts; if (Numbers(1) <= 0.0) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); ShowContinueError(state, format("Negative pressures not allowed in fluid property input data, Value =[{:.3R}].", Numbers(1))); ErrorsFound = true; } @@ -1724,21 +1701,21 @@ namespace FluidProperties { lAlphaFieldBlanks, cAlphaFieldNames, cNumericFieldNames); - if (std::abs(Numbers(1) - state.dataFluidProps->RefrigData(Loop).SHPress(InData)) > PressToler) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + if (std::abs(Numbers(1) - df->RefrigData(Loop).SHPress(InData)) > PressToler) { + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); ShowContinueError(state, "All superheated data for the same refrigerant must use the same pressure data"); ErrorsFound = true; } if (!Util::SameString(TempsName, Alphas(3))) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); ShowContinueError(state, "All superheated data for the same property must use the same temperature list"); ErrorsFound = true; } - if ((NumNumbers - 1) == state.dataFluidProps->RefrigData(Loop).NumSuperTempPts) { - state.dataFluidProps->RefrigData(Loop).RhoshValues(InData, {1, state.dataFluidProps->RefrigData(Loop).NumSuperTempPts}) = + if ((NumNumbers - 1) == df->RefrigData(Loop).NumSuperTempPts) { + df->RefrigData(Loop).RhoshValues(InData, {1, df->RefrigData(Loop).NumSuperTempPts}) = Numbers({2, NumNumbers}); } else { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); ShowContinueError(state, "Number of superheated density data points not equal to number of temperature points"); ErrorsFound = true; } @@ -1766,7 +1743,7 @@ namespace FluidProperties { if (!Util::SameString(Alphas(2), Enthalpy) && !Util::SameString(Alphas(2), Density)) { if (iTemp == 0) { ShowWarningError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); ShowContinueError(state, format("{}=\"{}\" is not valid.", cAlphaFieldNames(2), Alphas(2))); ShowContinueError(state, format(R"(Valid choices are "{}", "{}".)", Enthalpy, Density)); ShowContinueError(state, format("Pressure value of this item=[{:.2R}].", Numbers(1))); @@ -1781,12 +1758,12 @@ namespace FluidProperties { } if (NumOfPressPts == 0) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); ShowSevereError(state, "No pressure data found for superheated density"); ErrorsFound = true; } - if (NumOfPressPts != state.dataFluidProps->RefrigData(Loop).NumSuperPressPts) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->RefrigData(Loop).Name)); + if (NumOfPressPts != df->RefrigData(Loop).NumSuperPressPts) { + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); ShowSevereError(state, "Number of pressure points for superheated data different for enthalpy and density"); ErrorsFound = true; } @@ -1798,7 +1775,7 @@ namespace FluidProperties { // Note that every valid fluid must have ALL of the necessary data or a fatal error will // be produced. CurrentModuleObject = "FluidProperties:Concentration"; - for (int Loop = 1; Loop <= state.dataFluidProps->NumOfGlycols; ++Loop) { + for (int Loop = 1; Loop <= df->NumOfGlycols; ++Loop) { // Get: ***** SPECIFIC HEAT of GLYCOLS ***** // First find the number of concentration value syntax lines have been entered and @@ -1806,7 +1783,7 @@ namespace FluidProperties { TempsName = ""; FirstSHMatch = true; int NumOfConcPts = 0; - state.dataFluidProps->GlyRawData(Loop).CpDataPresent = false; + df->GlyRawData(Loop).CpDataPresent = false; for (InData = 1; InData <= NumOfGlyFluidPropArrays; ++InData) { // check temperatures given for specific heat are consistant state.dataInputProcessing->inputProcessor->getObjectItem(state, CurrentModuleObject, @@ -1820,7 +1797,7 @@ namespace FluidProperties { lAlphaFieldBlanks, cAlphaFieldNames, cNumericFieldNames); - if ((Util::SameString(Alphas(1), state.dataFluidProps->GlyRawData(Loop).Name)) && (Util::SameString(Alphas(2), SpecificHeat))) { + if ((Util::SameString(Alphas(1), df->GlyRawData(Loop).Name)) && (Util::SameString(Alphas(2), SpecificHeat))) { ++NumOfConcPts; if (FirstSHMatch) { TempsName = Alphas(3); @@ -1828,7 +1805,7 @@ namespace FluidProperties { } else { if (!Util::SameString(TempsName, Alphas(3))) { ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->GlyRawData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, df->GlyRawData(Loop).Name)); ShowContinueError(state, "All glycol specific heat data for the same glycol must use the same temperature list"); ShowContinueError(state, format("Expected name={}, Entered name={}", TempsName, Alphas(3))); ErrorsFound = true; @@ -1839,26 +1816,26 @@ namespace FluidProperties { if (NumOfConcPts > 0) { // Now allocate the arrays and read the data into the proper place // First, allocate the temperature array and transfer the data from the FluidTemp array - state.dataFluidProps->GlyRawData(Loop).CpDataPresent = true; + df->GlyRawData(Loop).CpDataPresent = true; for (int TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) { if (Util::SameString(TempsName, FluidTemps(TempLoop).Name)) { - state.dataFluidProps->GlyRawData(Loop).NumCpTempPts = FluidTemps(TempLoop).NumOfTemps; - state.dataFluidProps->GlyRawData(Loop).CpTemps.allocate(state.dataFluidProps->GlyRawData(Loop).NumCpTempPts); - state.dataFluidProps->GlyRawData(Loop).CpTemps = FluidTemps(TempLoop).Temps; + df->GlyRawData(Loop).NumCpTempPts = FluidTemps(TempLoop).NumOfTemps; + df->GlyRawData(Loop).CpTemps.allocate(df->GlyRawData(Loop).NumCpTempPts); + df->GlyRawData(Loop).CpTemps = FluidTemps(TempLoop).Temps; break; // the TempLoop DO loop } if (TempLoop == NumOfFluidTempArrays) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->GlyRawData(Loop).Name)); + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->GlyRawData(Loop).Name)); ShowContinueError(state, "No match for temperature array name found with glycol data"); ErrorsFound = true; } } // Next, allocate the specific heat related arrays - state.dataFluidProps->GlyRawData(Loop).NumCpConcPts = NumOfConcPts; - state.dataFluidProps->GlyRawData(Loop).CpConcs.allocate(state.dataFluidProps->GlyRawData(Loop).NumCpConcPts); - state.dataFluidProps->GlyRawData(Loop).CpValues.allocate(state.dataFluidProps->GlyRawData(Loop).NumCpConcPts, - state.dataFluidProps->GlyRawData(Loop).NumCpTempPts); + df->GlyRawData(Loop).NumCpConcPts = NumOfConcPts; + df->GlyRawData(Loop).CpConcs.allocate(df->GlyRawData(Loop).NumCpConcPts); + df->GlyRawData(Loop).CpValues.allocate(df->GlyRawData(Loop).NumCpConcPts, + df->GlyRawData(Loop).NumCpTempPts); // Finally, get the specific heat and concentration values from the user input CurrentModuleObject = "FluidProperties:Concentration"; @@ -1876,32 +1853,32 @@ namespace FluidProperties { lAlphaFieldBlanks, cAlphaFieldNames, cNumericFieldNames); - if ((Util::SameString(Alphas(1), state.dataFluidProps->GlyRawData(Loop).Name)) && (Util::SameString(Alphas(2), SpecificHeat))) { + if ((Util::SameString(Alphas(1), df->GlyRawData(Loop).Name)) && (Util::SameString(Alphas(2), SpecificHeat))) { ++NumOfConcPts; - state.dataFluidProps->GlyRawData(Loop).CpConcs(NumOfConcPts) = Numbers(1); + df->GlyRawData(Loop).CpConcs(NumOfConcPts) = Numbers(1); // a little error trapping if (NumOfConcPts == 1) { - if (state.dataFluidProps->GlyRawData(Loop).CpConcs(NumOfConcPts) < 0.0) { + if (df->GlyRawData(Loop).CpConcs(NumOfConcPts) < 0.0) { ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->GlyRawData(Loop).Name)); + state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->GlyRawData(Loop).Name)); ShowContinueError(state, "Negative concentrations not allowed in fluid property input data"); ErrorsFound = true; } } else { - if (state.dataFluidProps->GlyRawData(Loop).CpConcs(NumOfConcPts) <= - state.dataFluidProps->GlyRawData(Loop).CpConcs(NumOfConcPts - 1)) { + if (df->GlyRawData(Loop).CpConcs(NumOfConcPts) <= + df->GlyRawData(Loop).CpConcs(NumOfConcPts - 1)) { ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->GlyRawData(Loop).Name)); + state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->GlyRawData(Loop).Name)); ShowContinueError(state, "Concentrations must be entered in ascending order for fluid property data"); ErrorsFound = true; } } - if ((NumNumbers - 1) == state.dataFluidProps->GlyRawData(Loop).NumCpTempPts) { - state.dataFluidProps->GlyRawData(Loop).CpValues(NumOfConcPts, {1, state.dataFluidProps->GlyRawData(Loop).NumCpTempPts}) = + if ((NumNumbers - 1) == df->GlyRawData(Loop).NumCpTempPts) { + df->GlyRawData(Loop).CpValues(NumOfConcPts, {1, df->GlyRawData(Loop).NumCpTempPts}) = Numbers({2, NumNumbers}); } else { ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->GlyRawData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, df->GlyRawData(Loop).Name)); ShowContinueError(state, "Number of specific heat data points not equal to number of temperature points"); ErrorsFound = true; } @@ -1914,7 +1891,7 @@ namespace FluidProperties { TempsName = ""; FirstSHMatch = true; NumOfConcPts = 0; - state.dataFluidProps->GlyRawData(Loop).RhoDataPresent = false; + df->GlyRawData(Loop).RhoDataPresent = false; CurrentModuleObject = "FluidProperties:Concentration"; for (InData = 1; InData <= NumOfGlyFluidPropArrays; ++InData) { // check temperatures given for density are consistant state.dataInputProcessing->inputProcessor->getObjectItem(state, @@ -1929,7 +1906,7 @@ namespace FluidProperties { lAlphaFieldBlanks, cAlphaFieldNames, cNumericFieldNames); - if ((Util::SameString(Alphas(1), state.dataFluidProps->GlyRawData(Loop).Name)) && (Util::SameString(Alphas(2), Density))) { + if ((Util::SameString(Alphas(1), df->GlyRawData(Loop).Name)) && (Util::SameString(Alphas(2), Density))) { ++NumOfConcPts; if (FirstSHMatch) { TempsName = Alphas(3); @@ -1937,7 +1914,7 @@ namespace FluidProperties { } else { if (!Util::SameString(TempsName, Alphas(3))) { ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->GlyRawData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, df->GlyRawData(Loop).Name)); ShowContinueError(state, "All glycol density data for the same glycol must use the same temperature list"); ShowContinueError(state, format("Expected name={}, Entered name={}", TempsName, Alphas(3))); ErrorsFound = true; @@ -1948,26 +1925,26 @@ namespace FluidProperties { if (NumOfConcPts > 0) { // Now allocate the arrays and read the data into the proper place // First, allocate the temperature array and transfer the data from the FluidTemp array - state.dataFluidProps->GlyRawData(Loop).RhoDataPresent = true; + df->GlyRawData(Loop).RhoDataPresent = true; for (int TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) { if (Util::SameString(TempsName, FluidTemps(TempLoop).Name)) { - state.dataFluidProps->GlyRawData(Loop).NumRhoTempPts = FluidTemps(TempLoop).NumOfTemps; - state.dataFluidProps->GlyRawData(Loop).RhoTemps.allocate(state.dataFluidProps->GlyRawData(Loop).NumRhoTempPts); - state.dataFluidProps->GlyRawData(Loop).RhoTemps = FluidTemps(TempLoop).Temps; + df->GlyRawData(Loop).NumRhoTempPts = FluidTemps(TempLoop).NumOfTemps; + df->GlyRawData(Loop).RhoTemps.allocate(df->GlyRawData(Loop).NumRhoTempPts); + df->GlyRawData(Loop).RhoTemps = FluidTemps(TempLoop).Temps; break; // the TempLoop DO loop } if (TempLoop == NumOfFluidTempArrays) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->GlyRawData(Loop).Name)); + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->GlyRawData(Loop).Name)); ShowContinueError(state, "No match for temperature array name found with glycol data"); ErrorsFound = true; } } // Next, allocate the density related arrays - state.dataFluidProps->GlyRawData(Loop).NumRhoConcPts = NumOfConcPts; - state.dataFluidProps->GlyRawData(Loop).RhoConcs.allocate(state.dataFluidProps->GlyRawData(Loop).NumRhoConcPts); - state.dataFluidProps->GlyRawData(Loop).RhoValues.allocate(state.dataFluidProps->GlyRawData(Loop).NumRhoConcPts, - state.dataFluidProps->GlyRawData(Loop).NumRhoTempPts); + df->GlyRawData(Loop).NumRhoConcPts = NumOfConcPts; + df->GlyRawData(Loop).RhoConcs.allocate(df->GlyRawData(Loop).NumRhoConcPts); + df->GlyRawData(Loop).RhoValues.allocate(df->GlyRawData(Loop).NumRhoConcPts, + df->GlyRawData(Loop).NumRhoTempPts); // Finally, get the density and concentration values from the user input NumOfConcPts = 0; @@ -1985,32 +1962,32 @@ namespace FluidProperties { lAlphaFieldBlanks, cAlphaFieldNames, cNumericFieldNames); - if ((Util::SameString(Alphas(1), state.dataFluidProps->GlyRawData(Loop).Name)) && (Util::SameString(Alphas(2), Density))) { + if ((Util::SameString(Alphas(1), df->GlyRawData(Loop).Name)) && (Util::SameString(Alphas(2), Density))) { ++NumOfConcPts; - state.dataFluidProps->GlyRawData(Loop).RhoConcs(NumOfConcPts) = Numbers(1); + df->GlyRawData(Loop).RhoConcs(NumOfConcPts) = Numbers(1); // a little error trapping if (NumOfConcPts == 1) { - if (state.dataFluidProps->GlyRawData(Loop).RhoConcs(NumOfConcPts) < 0.0) { + if (df->GlyRawData(Loop).RhoConcs(NumOfConcPts) < 0.0) { ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->GlyRawData(Loop).Name)); + state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->GlyRawData(Loop).Name)); ShowContinueError(state, "Negative concentrations not allowed in fluid property input data"); ErrorsFound = true; } } else { - if (state.dataFluidProps->GlyRawData(Loop).RhoConcs(NumOfConcPts) <= - state.dataFluidProps->GlyRawData(Loop).RhoConcs(NumOfConcPts - 1)) { + if (df->GlyRawData(Loop).RhoConcs(NumOfConcPts) <= + df->GlyRawData(Loop).RhoConcs(NumOfConcPts - 1)) { ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->GlyRawData(Loop).Name)); + state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->GlyRawData(Loop).Name)); ShowContinueError(state, "Concentrations must be entered in ascending order for fluid property data"); ErrorsFound = true; } } - if ((NumNumbers - 1) == state.dataFluidProps->GlyRawData(Loop).NumRhoTempPts) { - state.dataFluidProps->GlyRawData(Loop).RhoValues( - NumOfConcPts, {1, state.dataFluidProps->GlyRawData(Loop).NumRhoTempPts}) = Numbers({2, NumNumbers}); + if ((NumNumbers - 1) == df->GlyRawData(Loop).NumRhoTempPts) { + df->GlyRawData(Loop).RhoValues( + NumOfConcPts, {1, df->GlyRawData(Loop).NumRhoTempPts}) = Numbers({2, NumNumbers}); } else { ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->GlyRawData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, df->GlyRawData(Loop).Name)); ShowContinueError(state, "Number of density data points not equal to number of temperature points"); ErrorsFound = true; } @@ -2023,7 +2000,7 @@ namespace FluidProperties { TempsName = ""; FirstSHMatch = true; NumOfConcPts = 0; - state.dataFluidProps->GlyRawData(Loop).CondDataPresent = false; + df->GlyRawData(Loop).CondDataPresent = false; CurrentModuleObject = "FluidProperties:Concentration"; for (InData = 1; InData <= NumOfGlyFluidPropArrays; ++InData) { // check temperatures given for conductivity are consistant state.dataInputProcessing->inputProcessor->getObjectItem(state, @@ -2038,7 +2015,7 @@ namespace FluidProperties { lAlphaFieldBlanks, cAlphaFieldNames, cNumericFieldNames); - if ((Util::SameString(Alphas(1), state.dataFluidProps->GlyRawData(Loop).Name)) && (Util::SameString(Alphas(2), Conductivity))) { + if ((Util::SameString(Alphas(1), df->GlyRawData(Loop).Name)) && (Util::SameString(Alphas(2), Conductivity))) { ++NumOfConcPts; if (FirstSHMatch) { TempsName = Alphas(3); @@ -2046,7 +2023,7 @@ namespace FluidProperties { } else { if (!Util::SameString(TempsName, Alphas(3))) { ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->GlyRawData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, df->GlyRawData(Loop).Name)); ShowContinueError(state, "All glycol conductivity data for the same glycol must use the same temperature list"); ShowContinueError(state, format("Expected name={}, Entered name={}", TempsName, Alphas(3))); ErrorsFound = true; @@ -2057,26 +2034,26 @@ namespace FluidProperties { if (NumOfConcPts > 0) { // Now allocate the arrays and read the data into the proper place // First, allocate the temperature array and transfer the data from the FluidTemp array - state.dataFluidProps->GlyRawData(Loop).CondDataPresent = true; + df->GlyRawData(Loop).CondDataPresent = true; for (int TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) { if (Util::SameString(TempsName, FluidTemps(TempLoop).Name)) { - state.dataFluidProps->GlyRawData(Loop).NumCondTempPts = FluidTemps(TempLoop).NumOfTemps; - state.dataFluidProps->GlyRawData(Loop).CondTemps.allocate(state.dataFluidProps->GlyRawData(Loop).NumCondTempPts); - state.dataFluidProps->GlyRawData(Loop).CondTemps = FluidTemps(TempLoop).Temps; + df->GlyRawData(Loop).NumCondTempPts = FluidTemps(TempLoop).NumOfTemps; + df->GlyRawData(Loop).CondTemps.allocate(df->GlyRawData(Loop).NumCondTempPts); + df->GlyRawData(Loop).CondTemps = FluidTemps(TempLoop).Temps; break; // the TempLoop DO loop } if (TempLoop == NumOfFluidTempArrays) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->GlyRawData(Loop).Name)); + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->GlyRawData(Loop).Name)); ShowContinueError(state, "No match for temperature array name found with glycol data"); ErrorsFound = true; } } // Next, allocate the conductivity related arrays - state.dataFluidProps->GlyRawData(Loop).NumCondConcPts = NumOfConcPts; - state.dataFluidProps->GlyRawData(Loop).CondConcs.allocate(state.dataFluidProps->GlyRawData(Loop).NumCondConcPts); - state.dataFluidProps->GlyRawData(Loop).CondValues.allocate(state.dataFluidProps->GlyRawData(Loop).NumCondConcPts, - state.dataFluidProps->GlyRawData(Loop).NumCondTempPts); + df->GlyRawData(Loop).NumCondConcPts = NumOfConcPts; + df->GlyRawData(Loop).CondConcs.allocate(df->GlyRawData(Loop).NumCondConcPts); + df->GlyRawData(Loop).CondValues.allocate(df->GlyRawData(Loop).NumCondConcPts, + df->GlyRawData(Loop).NumCondTempPts); // Finally, get the conductivity and concentration values from the user input NumOfConcPts = 0; @@ -2094,32 +2071,32 @@ namespace FluidProperties { lAlphaFieldBlanks, cAlphaFieldNames, cNumericFieldNames); - if ((Util::SameString(Alphas(1), state.dataFluidProps->GlyRawData(Loop).Name)) && (Util::SameString(Alphas(2), Conductivity))) { + if ((Util::SameString(Alphas(1), df->GlyRawData(Loop).Name)) && (Util::SameString(Alphas(2), Conductivity))) { ++NumOfConcPts; - state.dataFluidProps->GlyRawData(Loop).CondConcs(NumOfConcPts) = Numbers(1); + df->GlyRawData(Loop).CondConcs(NumOfConcPts) = Numbers(1); // a little error trapping if (NumOfConcPts == 1) { - if (state.dataFluidProps->GlyRawData(Loop).CondConcs(NumOfConcPts) < 0.0) { + if (df->GlyRawData(Loop).CondConcs(NumOfConcPts) < 0.0) { ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->GlyRawData(Loop).Name)); + state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->GlyRawData(Loop).Name)); ShowContinueError(state, "Negative concentrations not allowed in fluid property input data"); ErrorsFound = true; } } else { - if (state.dataFluidProps->GlyRawData(Loop).CondConcs(NumOfConcPts) <= - state.dataFluidProps->GlyRawData(Loop).CondConcs(NumOfConcPts - 1)) { + if (df->GlyRawData(Loop).CondConcs(NumOfConcPts) <= + df->GlyRawData(Loop).CondConcs(NumOfConcPts - 1)) { ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->GlyRawData(Loop).Name)); + state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->GlyRawData(Loop).Name)); ShowContinueError(state, "Concentrations must be entered in ascending order for fluid property data"); ErrorsFound = true; } } - if ((NumNumbers - 1) == state.dataFluidProps->GlyRawData(Loop).NumCondTempPts) { - state.dataFluidProps->GlyRawData(Loop).CondValues( - NumOfConcPts, {1, state.dataFluidProps->GlyRawData(Loop).NumCondTempPts}) = Numbers({2, NumNumbers}); + if ((NumNumbers - 1) == df->GlyRawData(Loop).NumCondTempPts) { + df->GlyRawData(Loop).CondValues( + NumOfConcPts, {1, df->GlyRawData(Loop).NumCondTempPts}) = Numbers({2, NumNumbers}); } else { ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->GlyRawData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, df->GlyRawData(Loop).Name)); ShowContinueError(state, "Number of conductivity data points not equal to number of temperature points"); ErrorsFound = true; } @@ -2132,7 +2109,7 @@ namespace FluidProperties { TempsName = ""; FirstSHMatch = true; NumOfConcPts = 0; - state.dataFluidProps->GlyRawData(Loop).ViscDataPresent = false; + df->GlyRawData(Loop).ViscDataPresent = false; CurrentModuleObject = "FluidProperties:Concentration"; for (InData = 1; InData <= NumOfGlyFluidPropArrays; ++InData) { // check temperatures given for viscosity are consistant state.dataInputProcessing->inputProcessor->getObjectItem(state, @@ -2147,7 +2124,7 @@ namespace FluidProperties { lAlphaFieldBlanks, cAlphaFieldNames, cNumericFieldNames); - if ((Util::SameString(Alphas(1), state.dataFluidProps->GlyRawData(Loop).Name)) && (Util::SameString(Alphas(2), Viscosity))) { + if ((Util::SameString(Alphas(1), df->GlyRawData(Loop).Name)) && (Util::SameString(Alphas(2), Viscosity))) { ++NumOfConcPts; if (FirstSHMatch) { TempsName = Alphas(3); @@ -2155,7 +2132,7 @@ namespace FluidProperties { } else { if (!Util::SameString(TempsName, Alphas(3))) { ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->GlyRawData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, df->GlyRawData(Loop).Name)); ShowContinueError(state, "All glycol viscosity data for the same glycol must use the same temperature list"); ShowContinueError(state, format("Expected name={}, Entered name={}", TempsName, Alphas(3))); ErrorsFound = true; @@ -2164,28 +2141,28 @@ namespace FluidProperties { } } if (NumOfConcPts > 0) { - state.dataFluidProps->GlyRawData(Loop).ViscDataPresent = true; + df->GlyRawData(Loop).ViscDataPresent = true; // Now allocate the arrays and read the data into the proper place // First, allocate the temperature array and transfer the data from the FluidTemp array for (int TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) { if (Util::SameString(TempsName, FluidTemps(TempLoop).Name)) { - state.dataFluidProps->GlyRawData(Loop).NumViscTempPts = FluidTemps(TempLoop).NumOfTemps; - state.dataFluidProps->GlyRawData(Loop).ViscTemps.allocate(state.dataFluidProps->GlyRawData(Loop).NumViscTempPts); - state.dataFluidProps->GlyRawData(Loop).ViscTemps = FluidTemps(TempLoop).Temps; + df->GlyRawData(Loop).NumViscTempPts = FluidTemps(TempLoop).NumOfTemps; + df->GlyRawData(Loop).ViscTemps.allocate(df->GlyRawData(Loop).NumViscTempPts); + df->GlyRawData(Loop).ViscTemps = FluidTemps(TempLoop).Temps; break; // the TempLoop DO loop } if (TempLoop == NumOfFluidTempArrays) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->GlyRawData(Loop).Name)); + ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->GlyRawData(Loop).Name)); ShowContinueError(state, "No match for temperature array name found with glycol data"); ErrorsFound = true; } } // Next, allocate the viscosity related arrays - state.dataFluidProps->GlyRawData(Loop).NumViscConcPts = NumOfConcPts; - state.dataFluidProps->GlyRawData(Loop).ViscConcs.allocate(state.dataFluidProps->GlyRawData(Loop).NumViscConcPts); - state.dataFluidProps->GlyRawData(Loop).ViscValues.allocate(state.dataFluidProps->GlyRawData(Loop).NumViscConcPts, - state.dataFluidProps->GlyRawData(Loop).NumViscTempPts); + df->GlyRawData(Loop).NumViscConcPts = NumOfConcPts; + df->GlyRawData(Loop).ViscConcs.allocate(df->GlyRawData(Loop).NumViscConcPts); + df->GlyRawData(Loop).ViscValues.allocate(df->GlyRawData(Loop).NumViscConcPts, + df->GlyRawData(Loop).NumViscTempPts); // Finally, get the viscosity and concentration values from the user input NumOfConcPts = 0; @@ -2203,32 +2180,32 @@ namespace FluidProperties { lAlphaFieldBlanks, cAlphaFieldNames, cNumericFieldNames); - if ((Util::SameString(Alphas(1), state.dataFluidProps->GlyRawData(Loop).Name)) && (Util::SameString(Alphas(2), Viscosity))) { + if ((Util::SameString(Alphas(1), df->GlyRawData(Loop).Name)) && (Util::SameString(Alphas(2), Viscosity))) { ++NumOfConcPts; - state.dataFluidProps->GlyRawData(Loop).ViscConcs(NumOfConcPts) = Numbers(1); + df->GlyRawData(Loop).ViscConcs(NumOfConcPts) = Numbers(1); // a little error trapping if (NumOfConcPts == 1) { - if (state.dataFluidProps->GlyRawData(Loop).ViscConcs(NumOfConcPts) < 0.0) { + if (df->GlyRawData(Loop).ViscConcs(NumOfConcPts) < 0.0) { ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->GlyRawData(Loop).Name)); + state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->GlyRawData(Loop).Name)); ShowContinueError(state, "Negative concentrations not allowed in fluid property input data"); ErrorsFound = true; } } else { - if (state.dataFluidProps->GlyRawData(Loop).ViscConcs(NumOfConcPts) <= - state.dataFluidProps->GlyRawData(Loop).ViscConcs(NumOfConcPts - 1)) { + if (df->GlyRawData(Loop).ViscConcs(NumOfConcPts) <= + df->GlyRawData(Loop).ViscConcs(NumOfConcPts - 1)) { ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->GlyRawData(Loop).Name)); + state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->GlyRawData(Loop).Name)); ShowContinueError(state, "Concentrations must be entered in ascending order for fluid property data"); ErrorsFound = true; } } - if ((NumNumbers - 1) == state.dataFluidProps->GlyRawData(Loop).NumViscTempPts) { - state.dataFluidProps->GlyRawData(Loop).ViscValues( - NumOfConcPts, {1, state.dataFluidProps->GlyRawData(Loop).NumViscTempPts}) = Numbers({2, NumNumbers}); + if ((NumNumbers - 1) == df->GlyRawData(Loop).NumViscTempPts) { + df->GlyRawData(Loop).ViscValues( + NumOfConcPts, {1, df->GlyRawData(Loop).NumViscTempPts}) = Numbers({2, NumNumbers}); } else { ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, state.dataFluidProps->GlyRawData(Loop).Name)); + format("{}{} Name={}", RoutineName, CurrentModuleObject, df->GlyRawData(Loop).Name)); ShowContinueError(state, "Number of viscosity data points not equal to number of temperature points"); ErrorsFound = true; } @@ -2269,40 +2246,39 @@ namespace FluidProperties { NumOfOptionalInput = state.dataInputProcessing->inputProcessor->getNumObjectsFound(state, CurrentModuleObject); int NumOfGlyConcs = NumOfOptionalInput + 1; - state.dataFluidProps->GlycolData.allocate(NumOfGlyConcs); - state.dataFluidProps->GlycolUsed.dimension(NumOfGlyConcs, false); + df->GlycolData.allocate(NumOfGlyConcs); - state.dataFluidProps->GlycolUsed(1) = true; // mark Water as always used + df->GlycolData(1).used = true; // mark Water as always used // First "glycol" is always pure water. Load data from default arrays - state.dataFluidProps->GlycolData(1).Name = "WATER"; - state.dataFluidProps->GlycolData(1).GlycolName = "WATER"; - state.dataFluidProps->GlycolData(1).Num = 1; - state.dataFluidProps->GlycolData(1).Concentration = 1.0; - state.dataFluidProps->GlycolData(1).CpDataPresent = true; - state.dataFluidProps->GlycolData(1).NumCpTempPts = DefaultNumGlyTemps; - state.dataFluidProps->GlycolData(1).RhoDataPresent = true; - state.dataFluidProps->GlycolData(1).NumRhoTempPts = DefaultNumGlyTemps; - state.dataFluidProps->GlycolData(1).CondDataPresent = true; - state.dataFluidProps->GlycolData(1).NumCondTempPts = DefaultNumGlyTemps; - state.dataFluidProps->GlycolData(1).ViscDataPresent = true; - state.dataFluidProps->GlycolData(1).NumViscTempPts = DefaultNumGlyTemps; - state.dataFluidProps->GlycolData(1).CpTemps.allocate(state.dataFluidProps->GlycolData(1).NumCpTempPts); - state.dataFluidProps->GlycolData(1).CpValues.allocate(state.dataFluidProps->GlycolData(1).NumCpTempPts); - state.dataFluidProps->GlycolData(1).RhoTemps.allocate(state.dataFluidProps->GlycolData(1).NumRhoTempPts); - state.dataFluidProps->GlycolData(1).RhoValues.allocate(state.dataFluidProps->GlycolData(1).NumRhoTempPts); - state.dataFluidProps->GlycolData(1).CondTemps.allocate(state.dataFluidProps->GlycolData(1).NumCondTempPts); - state.dataFluidProps->GlycolData(1).CondValues.allocate(state.dataFluidProps->GlycolData(1).NumCondTempPts); - state.dataFluidProps->GlycolData(1).ViscTemps.allocate(state.dataFluidProps->GlycolData(1).NumViscTempPts); - state.dataFluidProps->GlycolData(1).ViscValues.allocate(state.dataFluidProps->GlycolData(1).NumViscTempPts); - state.dataFluidProps->GlycolData(1).CpTemps = DefaultGlycolTemps; - state.dataFluidProps->GlycolData(1).CpValues = DefaultWaterCpData; - state.dataFluidProps->GlycolData(1).RhoTemps = DefaultGlycolTemps; - state.dataFluidProps->GlycolData(1).RhoValues = DefaultWaterRhoData; - state.dataFluidProps->GlycolData(1).CondTemps = DefaultGlycolTemps; - state.dataFluidProps->GlycolData(1).CondValues = DefaultWaterCondData; - state.dataFluidProps->GlycolData(1).ViscTemps = DefaultGlycolTemps; - state.dataFluidProps->GlycolData(1).ViscValues = DefaultWaterViscData; + df->GlycolData(1).Name = "WATER"; + df->GlycolData(1).GlycolName = "WATER"; + df->GlycolData(1).Num = 1; + df->GlycolData(1).Concentration = 1.0; + df->GlycolData(1).CpDataPresent = true; + df->GlycolData(1).NumCpTempPts = DefaultNumGlyTemps; + df->GlycolData(1).RhoDataPresent = true; + df->GlycolData(1).NumRhoTempPts = DefaultNumGlyTemps; + df->GlycolData(1).CondDataPresent = true; + df->GlycolData(1).NumCondTempPts = DefaultNumGlyTemps; + df->GlycolData(1).ViscDataPresent = true; + df->GlycolData(1).NumViscTempPts = DefaultNumGlyTemps; + df->GlycolData(1).CpTemps.allocate(df->GlycolData(1).NumCpTempPts); + df->GlycolData(1).CpValues.allocate(df->GlycolData(1).NumCpTempPts); + df->GlycolData(1).RhoTemps.allocate(df->GlycolData(1).NumRhoTempPts); + df->GlycolData(1).RhoValues.allocate(df->GlycolData(1).NumRhoTempPts); + df->GlycolData(1).CondTemps.allocate(df->GlycolData(1).NumCondTempPts); + df->GlycolData(1).CondValues.allocate(df->GlycolData(1).NumCondTempPts); + df->GlycolData(1).ViscTemps.allocate(df->GlycolData(1).NumViscTempPts); + df->GlycolData(1).ViscValues.allocate(df->GlycolData(1).NumViscTempPts); + df->GlycolData(1).CpTemps = DefaultGlycolTemps; + df->GlycolData(1).CpValues = DefaultWaterCpData; + df->GlycolData(1).RhoTemps = DefaultGlycolTemps; + df->GlycolData(1).RhoValues = DefaultWaterRhoData; + df->GlycolData(1).CondTemps = DefaultGlycolTemps; + df->GlycolData(1).CondValues = DefaultWaterCondData; + df->GlycolData(1).ViscTemps = DefaultGlycolTemps; + df->GlycolData(1).ViscValues = DefaultWaterViscData; NumOfGlyConcs = 1; // Water is always available, everything else must be specified @@ -2323,28 +2299,28 @@ namespace FluidProperties { if (Util::SameString(Alphas(2), EthyleneGlycol)) { GlycolFound = true; ++NumOfGlyConcs; - state.dataFluidProps->GlycolData(NumOfGlyConcs).Name = Alphas(1); - state.dataFluidProps->GlycolData(NumOfGlyConcs).Num = NumOfGlyConcs; + df->GlycolData(NumOfGlyConcs).Name = Alphas(1); + df->GlycolData(NumOfGlyConcs).Num = NumOfGlyConcs; - state.dataFluidProps->GlycolData(NumOfGlyConcs).GlycolName = Alphas(2); + df->GlycolData(NumOfGlyConcs).GlycolName = Alphas(2); } else if (Util::SameString(Alphas(2), PropyleneGlycol)) { GlycolFound = true; ++NumOfGlyConcs; - state.dataFluidProps->GlycolData(NumOfGlyConcs).Name = Alphas(1); - state.dataFluidProps->GlycolData(NumOfGlyConcs).Num = NumOfGlyConcs; - state.dataFluidProps->GlycolData(NumOfGlyConcs).GlycolName = Alphas(2); + df->GlycolData(NumOfGlyConcs).Name = Alphas(1); + df->GlycolData(NumOfGlyConcs).Num = NumOfGlyConcs; + df->GlycolData(NumOfGlyConcs).GlycolName = Alphas(2); } else if (Util::SameString(Alphas(2), "UserDefinedGlycolType")) { - for (InData = 1; InData <= state.dataFluidProps->NumOfGlycols; ++InData) { - if (Util::SameString(Alphas(3), state.dataFluidProps->GlyRawData(InData).Name)) { + for (InData = 1; InData <= df->NumOfGlycols; ++InData) { + if (Util::SameString(Alphas(3), df->GlyRawData(InData).Name)) { GlycolFound = true; break; // DO LOOP through user defined glycols } } if (GlycolFound) { ++NumOfGlyConcs; - state.dataFluidProps->GlycolData(NumOfGlyConcs).Name = Alphas(1); - state.dataFluidProps->GlycolData(NumOfGlyConcs).Num = NumOfGlyConcs; - state.dataFluidProps->GlycolData(NumOfGlyConcs).GlycolName = Alphas(3); + df->GlycolData(NumOfGlyConcs).Name = Alphas(1); + df->GlycolData(NumOfGlyConcs).Num = NumOfGlyConcs; + df->GlycolData(NumOfGlyConcs).GlycolName = Alphas(3); } else { ShowSevereError(state, format("{}{}=\"{}\", invalid reference", RoutineName, CurrentModuleObject, Alphas(1))); ShowContinueError(state, format("... not found in the FluidProperties:Name list: \"{}\".", Alphas(3))); @@ -2357,192 +2333,183 @@ namespace FluidProperties { ErrorsFound = true; } if (!GlycolFound) continue; - state.dataFluidProps->GlycolData(NumOfGlyConcs).Concentration = Numbers(1); + df->GlycolData(NumOfGlyConcs).Concentration = Numbers(1); } // Now initialize the rest of the data for the glycols for (int Loop = 2; Loop <= NumOfGlyConcs; ++Loop) { + auto &glycol = df->GlycolData(Loop); + // Check to see if glycol name is one of the defaults or is listed in the Fluid Name list - if (Util::SameString(state.dataFluidProps->GlycolData(Loop).GlycolName, EthyleneGlycol)) { - state.dataFluidProps->GlycolData(Loop).BaseGlycolIndex = EthyleneGlycolIndex; - } else if (Util::SameString(state.dataFluidProps->GlycolData(Loop).GlycolName, PropyleneGlycol)) { - state.dataFluidProps->GlycolData(Loop).BaseGlycolIndex = PropyleneGlycolIndex; + if (Util::SameString(glycol.GlycolName, EthyleneGlycol)) { + glycol.BaseGlycolIndex = EthyleneGlycolIndex; + } else if (Util::SameString(glycol.GlycolName, PropyleneGlycol)) { + glycol.BaseGlycolIndex = PropyleneGlycolIndex; } else { - for (InData = 1; InData <= state.dataFluidProps->NumOfGlycols; ++InData) { - if (Util::SameString(state.dataFluidProps->GlycolData(Loop).GlycolName, state.dataFluidProps->GlyRawData(InData).Name)) { - state.dataFluidProps->GlycolData(Loop).BaseGlycolIndex = InData; + for (InData = 1; InData <= df->NumOfGlycols; ++InData) { + if (Util::SameString(glycol.GlycolName, df->GlyRawData(InData).Name)) { + glycol.BaseGlycolIndex = InData; break; // DO LOOP through user defined glycols } } } // Set the rest of the parameters... - if ((state.dataFluidProps->GlycolData(Loop).BaseGlycolIndex == EthyleneGlycolIndex) || - (state.dataFluidProps->GlycolData(Loop).BaseGlycolIndex == PropyleneGlycolIndex)) { - - state.dataFluidProps->GlycolData(Loop).CpDataPresent = true; - state.dataFluidProps->GlycolData(Loop).NumCpTempPts = DefaultNumGlyTemps; - state.dataFluidProps->GlycolData(Loop).RhoDataPresent = true; - state.dataFluidProps->GlycolData(Loop).NumRhoTempPts = DefaultNumGlyTemps; - state.dataFluidProps->GlycolData(Loop).CondDataPresent = true; - state.dataFluidProps->GlycolData(Loop).NumCondTempPts = DefaultNumGlyTemps; - state.dataFluidProps->GlycolData(Loop).ViscDataPresent = true; - state.dataFluidProps->GlycolData(Loop).NumViscTempPts = DefaultNumGlyTemps; - state.dataFluidProps->GlycolData(Loop).CpTemps.allocate(state.dataFluidProps->GlycolData(Loop).NumCpTempPts); - state.dataFluidProps->GlycolData(Loop).CpValues.allocate(state.dataFluidProps->GlycolData(Loop).NumCpTempPts); - state.dataFluidProps->GlycolData(Loop).RhoTemps.allocate(state.dataFluidProps->GlycolData(Loop).NumRhoTempPts); - state.dataFluidProps->GlycolData(Loop).RhoValues.allocate(state.dataFluidProps->GlycolData(Loop).NumRhoTempPts); - state.dataFluidProps->GlycolData(Loop).CondTemps.allocate(state.dataFluidProps->GlycolData(Loop).NumCondTempPts); - state.dataFluidProps->GlycolData(Loop).CondValues.allocate(state.dataFluidProps->GlycolData(Loop).NumCondTempPts); - state.dataFluidProps->GlycolData(Loop).ViscTemps.allocate(state.dataFluidProps->GlycolData(Loop).NumViscTempPts); - state.dataFluidProps->GlycolData(Loop).ViscValues.allocate(state.dataFluidProps->GlycolData(Loop).NumViscTempPts); - state.dataFluidProps->GlycolData(Loop).CpTemps = DefaultGlycolTemps; - state.dataFluidProps->GlycolData(Loop).RhoTemps = DefaultGlycolTemps; - state.dataFluidProps->GlycolData(Loop).CondTemps = DefaultGlycolTemps; - state.dataFluidProps->GlycolData(Loop).ViscTemps = DefaultGlycolTemps; + if ((glycol.BaseGlycolIndex == EthyleneGlycolIndex) || + (glycol.BaseGlycolIndex == PropyleneGlycolIndex)) { + + glycol.CpDataPresent = true; + glycol.NumCpTempPts = DefaultNumGlyTemps; + glycol.RhoDataPresent = true; + glycol.NumRhoTempPts = DefaultNumGlyTemps; + glycol.CondDataPresent = true; + glycol.NumCondTempPts = DefaultNumGlyTemps; + glycol.ViscDataPresent = true; + glycol.NumViscTempPts = DefaultNumGlyTemps; + glycol.CpTemps.allocate(glycol.NumCpTempPts); + glycol.CpValues.allocate(glycol.NumCpTempPts); + glycol.RhoTemps.allocate(glycol.NumRhoTempPts); + glycol.RhoValues.allocate(glycol.NumRhoTempPts); + glycol.CondTemps.allocate(glycol.NumCondTempPts); + glycol.CondValues.allocate(glycol.NumCondTempPts); + glycol.ViscTemps.allocate(glycol.NumViscTempPts); + glycol.ViscValues.allocate(glycol.NumViscTempPts); + glycol.CpTemps = DefaultGlycolTemps; + glycol.RhoTemps = DefaultGlycolTemps; + glycol.CondTemps = DefaultGlycolTemps; + glycol.ViscTemps = DefaultGlycolTemps; - if (state.dataFluidProps->GlycolData(Loop).BaseGlycolIndex == EthyleneGlycolIndex) { - InterpDefValuesForGlycolConc(state, - DefaultGlycolConcs, - DefaultEthGlyCpData, - state.dataFluidProps->GlycolData(Loop).Concentration, - state.dataFluidProps->GlycolData(Loop).CpValues); - InterpDefValuesForGlycolConc(state, - DefaultGlycolConcs, - DefaultEthGlyRhoData, - state.dataFluidProps->GlycolData(Loop).Concentration, - state.dataFluidProps->GlycolData(Loop).RhoValues); + if (glycol.BaseGlycolIndex == EthyleneGlycolIndex) { + InterpDefValuesForGlycolConc(state, DefaultGlycolConcs, DefaultEthGlyCpData, glycol.Concentration, glycol.CpValues); + InterpDefValuesForGlycolConc(state, DefaultGlycolConcs, DefaultEthGlyRhoData, glycol.Concentration, glycol.RhoValues); InterpDefValuesForGlycolConc(state, DefaultGlycolConcs, DefaultEthGlyCondData, - state.dataFluidProps->GlycolData(Loop).Concentration, - state.dataFluidProps->GlycolData(Loop).CondValues); + glycol.Concentration, + glycol.CondValues); InterpDefValuesForGlycolConc(state, DefaultGlycolConcs, DefaultEthGlyViscData, - state.dataFluidProps->GlycolData(Loop).Concentration, - state.dataFluidProps->GlycolData(Loop).ViscValues); + glycol.Concentration, + glycol.ViscValues); } else { // == PropyleneGlycolIndex InterpDefValuesForGlycolConc(state, DefaultGlycolConcs, DefaultPropGlyCpData, - state.dataFluidProps->GlycolData(Loop).Concentration, - state.dataFluidProps->GlycolData(Loop).CpValues); + glycol.Concentration, + glycol.CpValues); InterpDefValuesForGlycolConc(state, DefaultGlycolConcs, DefaultPropGlyRhoData, - state.dataFluidProps->GlycolData(Loop).Concentration, - state.dataFluidProps->GlycolData(Loop).RhoValues); + glycol.Concentration, + glycol.RhoValues); InterpDefValuesForGlycolConc(state, DefaultGlycolConcs, DefaultPropGlyCondData, - state.dataFluidProps->GlycolData(Loop).Concentration, - state.dataFluidProps->GlycolData(Loop).CondValues); + glycol.Concentration, + glycol.CondValues); InterpDefValuesForGlycolConc(state, DefaultGlycolConcs, DefaultPropGlyViscData, - state.dataFluidProps->GlycolData(Loop).Concentration, - state.dataFluidProps->GlycolData(Loop).ViscValues); + glycol.Concentration, + glycol.ViscValues); } } else { // User-defined fluid - int Index = state.dataFluidProps->GlycolData(Loop).BaseGlycolIndex; + int Index = glycol.BaseGlycolIndex; // Specific heat data: - if (state.dataFluidProps->GlyRawData(Index).CpDataPresent) { - state.dataFluidProps->GlycolData(Loop).CpDataPresent = true; - state.dataFluidProps->GlycolData(Loop).NumCpTempPts = state.dataFluidProps->GlyRawData(Index).NumCpTempPts; - state.dataFluidProps->GlycolData(Loop).CpTemps.allocate(state.dataFluidProps->GlycolData(Loop).NumCpTempPts); - state.dataFluidProps->GlycolData(Loop).CpValues.allocate(state.dataFluidProps->GlycolData(Loop).NumCpTempPts); - state.dataFluidProps->GlycolData(Loop).CpTemps = state.dataFluidProps->GlyRawData(Index).CpTemps; + if (df->GlyRawData(Index).CpDataPresent) { + glycol.CpDataPresent = true; + glycol.NumCpTempPts = df->GlyRawData(Index).NumCpTempPts; + glycol.CpTemps.allocate(glycol.NumCpTempPts); + glycol.CpValues.allocate(glycol.NumCpTempPts); + glycol.CpTemps = df->GlyRawData(Index).CpTemps; InterpValuesForGlycolConc(state, - state.dataFluidProps->GlyRawData(Index).NumCpConcPts, - state.dataFluidProps->GlyRawData(Index).NumCpTempPts, - state.dataFluidProps->GlyRawData(Index).CpConcs, - state.dataFluidProps->GlyRawData(Index).CpValues, - state.dataFluidProps->GlycolData(Loop).Concentration, - state.dataFluidProps->GlycolData(Loop).CpValues); + df->GlyRawData(Index).NumCpConcPts, + df->GlyRawData(Index).NumCpTempPts, + df->GlyRawData(Index).CpConcs, + df->GlyRawData(Index).CpValues, + glycol.Concentration, + glycol.CpValues); } else { ShowSevereError(state, format("{}Specific heat data not entered for a {}", RoutineName, CurrentModuleObject)); ShowContinueError(state, "ALL data must be entered for user-defined glycols"); - ShowContinueError(state, format("Glycol mixture name = {}", state.dataFluidProps->GlycolData(Loop).Name)); - ShowContinueError(state, format("Glycol fluid name = {}", state.dataFluidProps->GlycolData(Loop).GlycolName)); + ShowContinueError(state, format("Glycol mixture name = {}", glycol.Name)); + ShowContinueError(state, format("Glycol fluid name = {}", glycol.GlycolName)); ErrorsFound = true; } // Density data: - if (state.dataFluidProps->GlyRawData(Index).CpDataPresent) { - state.dataFluidProps->GlycolData(Loop).RhoDataPresent = true; - state.dataFluidProps->GlycolData(Loop).NumRhoTempPts = state.dataFluidProps->GlyRawData(Index).NumRhoTempPts; - state.dataFluidProps->GlycolData(Loop).RhoTemps.allocate(state.dataFluidProps->GlycolData(Loop).NumRhoTempPts); - state.dataFluidProps->GlycolData(Loop).RhoValues.allocate(state.dataFluidProps->GlycolData(Loop).NumRhoTempPts); - state.dataFluidProps->GlycolData(Loop).RhoTemps = state.dataFluidProps->GlyRawData(Index).RhoTemps; + if (df->GlyRawData(Index).CpDataPresent) { + glycol.RhoDataPresent = true; + glycol.NumRhoTempPts = df->GlyRawData(Index).NumRhoTempPts; + glycol.RhoTemps.allocate(glycol.NumRhoTempPts); + glycol.RhoValues.allocate(glycol.NumRhoTempPts); + glycol.RhoTemps = df->GlyRawData(Index).RhoTemps; InterpValuesForGlycolConc(state, - state.dataFluidProps->GlyRawData(Index).NumRhoConcPts, - state.dataFluidProps->GlyRawData(Index).NumRhoTempPts, - state.dataFluidProps->GlyRawData(Index).RhoConcs, - state.dataFluidProps->GlyRawData(Index).RhoValues, - state.dataFluidProps->GlycolData(Loop).Concentration, - state.dataFluidProps->GlycolData(Loop).RhoValues); + df->GlyRawData(Index).NumRhoConcPts, + df->GlyRawData(Index).NumRhoTempPts, + df->GlyRawData(Index).RhoConcs, + df->GlyRawData(Index).RhoValues, + glycol.Concentration, + glycol.RhoValues); } else { ShowSevereError(state, format("{}Density data not entered for a {}", RoutineName, CurrentModuleObject)); ShowContinueError(state, "ALL data must be entered for user-defined glycols"); - ShowContinueError(state, format("Glycol mixture name = {}", state.dataFluidProps->GlycolData(Loop).Name)); - ShowContinueError(state, format("Glycol fluid name = {}", state.dataFluidProps->GlycolData(Loop).GlycolName)); + ShowContinueError(state, format("Glycol mixture name = {}", glycol.Name)); + ShowContinueError(state, format("Glycol fluid name = {}", glycol.GlycolName)); ErrorsFound = true; } // Conductivity data: - if (state.dataFluidProps->GlyRawData(Index).CondDataPresent) { - state.dataFluidProps->GlycolData(Loop).CondDataPresent = true; - state.dataFluidProps->GlycolData(Loop).NumCondTempPts = state.dataFluidProps->GlyRawData(Index).NumCondTempPts; - state.dataFluidProps->GlycolData(Loop).CondTemps.allocate(state.dataFluidProps->GlycolData(Loop).NumCondTempPts); - state.dataFluidProps->GlycolData(Loop).CondValues.allocate(state.dataFluidProps->GlycolData(Loop).NumCondTempPts); - state.dataFluidProps->GlycolData(Loop).CondTemps = state.dataFluidProps->GlyRawData(Index).CondTemps; + if (df->GlyRawData(Index).CondDataPresent) { + glycol.CondDataPresent = true; + glycol.NumCondTempPts = df->GlyRawData(Index).NumCondTempPts; + glycol.CondTemps.allocate(glycol.NumCondTempPts); + glycol.CondValues.allocate(glycol.NumCondTempPts); + glycol.CondTemps = df->GlyRawData(Index).CondTemps; InterpValuesForGlycolConc(state, - state.dataFluidProps->GlyRawData(Index).NumCondConcPts, - state.dataFluidProps->GlyRawData(Index).NumCondTempPts, - state.dataFluidProps->GlyRawData(Index).CondConcs, - state.dataFluidProps->GlyRawData(Index).CondValues, - state.dataFluidProps->GlycolData(Loop).Concentration, - state.dataFluidProps->GlycolData(Loop).CondValues); + df->GlyRawData(Index).NumCondConcPts, + df->GlyRawData(Index).NumCondTempPts, + df->GlyRawData(Index).CondConcs, + df->GlyRawData(Index).CondValues, + glycol.Concentration, + glycol.CondValues); } else { ShowSevereError(state, format("{}Conductivity data not entered for a {}", RoutineName, CurrentModuleObject)); ShowContinueError(state, "ALL data must be entered for user-defined glycols"); - ShowContinueError(state, format("Glycol mixture name = {}", state.dataFluidProps->GlycolData(Loop).Name)); - ShowContinueError(state, format("Glycol fluid name = {}", state.dataFluidProps->GlycolData(Loop).GlycolName)); + ShowContinueError(state, format("Glycol mixture name = {}", glycol.Name)); + ShowContinueError(state, format("Glycol fluid name = {}", glycol.GlycolName)); ErrorsFound = true; } // Viscosity data: - if (state.dataFluidProps->GlyRawData(Index).ViscDataPresent) { - state.dataFluidProps->GlycolData(Loop).ViscDataPresent = true; - state.dataFluidProps->GlycolData(Loop).NumViscTempPts = state.dataFluidProps->GlyRawData(Index).NumViscTempPts; - state.dataFluidProps->GlycolData(Loop).ViscTemps.allocate(state.dataFluidProps->GlycolData(Loop).NumViscTempPts); - state.dataFluidProps->GlycolData(Loop).ViscValues.allocate(state.dataFluidProps->GlycolData(Loop).NumViscTempPts); - state.dataFluidProps->GlycolData(Loop).ViscTemps = state.dataFluidProps->GlyRawData(Index).ViscTemps; + if (df->GlyRawData(Index).ViscDataPresent) { + glycol.ViscDataPresent = true; + glycol.NumViscTempPts = df->GlyRawData(Index).NumViscTempPts; + glycol.ViscTemps.allocate(glycol.NumViscTempPts); + glycol.ViscValues.allocate(glycol.NumViscTempPts); + glycol.ViscTemps = df->GlyRawData(Index).ViscTemps; InterpValuesForGlycolConc(state, - state.dataFluidProps->GlyRawData(Index).NumViscConcPts, - state.dataFluidProps->GlyRawData(Index).NumViscTempPts, - state.dataFluidProps->GlyRawData(Index).ViscConcs, - state.dataFluidProps->GlyRawData(Index).ViscValues, - state.dataFluidProps->GlycolData(Loop).Concentration, - state.dataFluidProps->GlycolData(Loop).ViscValues); + df->GlyRawData(Index).NumViscConcPts, + df->GlyRawData(Index).NumViscTempPts, + df->GlyRawData(Index).ViscConcs, + df->GlyRawData(Index).ViscValues, + glycol.Concentration, + glycol.ViscValues); } else { ShowSevereError(state, format("{}Viscosity data not entered for a {}", RoutineName, CurrentModuleObject)); ShowContinueError(state, "ALL data must be entered for user-defined glycols"); - ShowContinueError(state, format("Glycol mixture name = {}", state.dataFluidProps->GlycolData(Loop).Name)); - ShowContinueError(state, format("Glycol fluid name = {}", state.dataFluidProps->GlycolData(Loop).GlycolName)); + ShowContinueError(state, format("Glycol mixture name = {}", glycol.Name)); + ShowContinueError(state, format("Glycol fluid name = {}", glycol.GlycolName)); ErrorsFound = true; } } } - state.dataFluidProps->NumOfGlycols = NumOfGlyConcs; // Reset number of glycols to actual number - state.dataFluidProps->GlycolErrorTracking.allocate(state.dataFluidProps->NumOfGlycols); - for (std::size_t i = 0; i < state.dataFluidProps->GlycolErrorTracking.size(); ++i) - state.dataFluidProps->GlycolErrorTracking[i].Name = state.dataFluidProps->GlycolData[i].Name; + df->NumOfGlycols = NumOfGlyConcs; // Reset number of glycols to actual number if (!ErrorsFound) InitializeGlycolTempLimits(state, ErrorsFound); // Initialize the Temp limits for the glycols @@ -2561,1956 +2528,18 @@ namespace FluidProperties { ShowFatalError(state, format("{}Previous errors in input cause program termination.", RoutineName)); } - if (state.dataInputProcessing->inputProcessor->getNumSectionsFound("REPORTGLYCOLS") > 0) state.dataFluidProps->DebugReportGlycols = true; + if (state.dataInputProcessing->inputProcessor->getNumSectionsFound("REPORTGLYCOLS") > 0) df->DebugReportGlycols = true; if (state.dataInputProcessing->inputProcessor->getNumSectionsFound("REPORTREFRIGERANTS") > 0) - state.dataFluidProps->DebugReportRefrigerants = true; + df->DebugReportRefrigerants = true; if (state.dataInputProcessing->inputProcessor->getNumSectionsFound("INCREASEGLYCOLERRORLIMIT") > 0) - state.dataFluidProps->GlycolErrorLimitTest += 10; + df->GlycolErrorLimitTest += 10; if (state.dataInputProcessing->inputProcessor->getNumSectionsFound("INCREASEREFRIGERANTERRORLIMIT") > 0) - state.dataFluidProps->RefrigerantErrorLimitTest += 10; + df->RefrigErrorLimitTest += 10; - if (state.dataFluidProps->DebugReportGlycols) ReportAndTestGlycols(state); - if (state.dataFluidProps->DebugReportRefrigerants) ReportAndTestRefrigerants(state); + if (df->DebugReportGlycols) ReportAndTestGlycols(state); + if (df->DebugReportRefrigerants) ReportAndTestRefrigerants(state); } - [[maybe_unused]] static constexpr std::array, DefaultNumSteamSuperheatedPressure> - DefaultSteamSuperheatedEnthalpyDataTable = {{ - {2501000.0, 2503000.0, 2510000.0, 2520000.0, 2529000.0, 2538000.0, 2548000.0, 2557000.0, 2566000.0, 2576000.0, 2585000.0, 2595000.0, - 2604000.0, 2613000.0, 2623000.0, 2632000.0, 2636000.0, 2640000.0, 2643000.0, 2647000.0, 2651000.0, 2655000.0, 2658000.0, 2662000.0, - 2666000.0, 2670000.0, 2673000.0, 2677000.0, 2681000.0, 2685000.0, 2687000.0, 2689000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, - 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, - 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, 2740000.0, 2742000.0, - 2744000.0, 2746000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2768000.0, 2772000.0, 2776000.0, 2780000.0, 2784000.0, - 2788000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2811000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, 2830000.0, - 2834000.0, 2837000.0, 2841000.0, 2851000.0, 2861000.0, 2870000.0, 2880000.0, 2890000.0, 2899000.0, 2909000.0, 2919000.0, 2929000.0, - 2938000.0, 2958000.0, 2978000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0, - 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, - {0.0, 2503000.0, 2510000.0, 2520000.0, 2529000.0, 2538000.0, 2548000.0, 2557000.0, 2566000.0, 2576000.0, 2585000.0, 2595000.0, - 2604000.0, 2613000.0, 2623000.0, 2632000.0, 2636000.0, 2640000.0, 2643000.0, 2647000.0, 2651000.0, 2655000.0, 2658000.0, 2662000.0, - 2666000.0, 2670000.0, 2673000.0, 2677000.0, 2681000.0, 2685000.0, 2687000.0, 2689000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, - 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, - 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, 2740000.0, 2742000.0, - 2744000.0, 2746000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2768000.0, 2772000.0, 2776000.0, 2780000.0, 2784000.0, - 2788000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2811000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, 2830000.0, - 2834000.0, 2837000.0, 2841000.0, 2851000.0, 2861000.0, 2870000.0, 2880000.0, 2890000.0, 2899000.0, 2909000.0, 2919000.0, 2929000.0, - 2938000.0, 2958000.0, 2978000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0, - 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, - {0.0, 0.0, 2510000.0, 2519000.0, 2529000.0, 2538000.0, 2548000.0, 2557000.0, 2566000.0, 2576000.0, 2585000.0, 2594000.0, - 2604000.0, 2613000.0, 2623000.0, 2632000.0, 2636000.0, 2640000.0, 2643000.0, 2647000.0, 2651000.0, 2655000.0, 2658000.0, 2662000.0, - 2666000.0, 2670000.0, 2673000.0, 2677000.0, 2681000.0, 2685000.0, 2687000.0, 2689000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, - 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, - 2721000.0, 2723000.0, 2725000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, 2740000.0, 2742000.0, - 2744000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2768000.0, 2772000.0, 2776000.0, 2780000.0, 2784000.0, - 2788000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2811000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, 2830000.0, - 2834000.0, 2837000.0, 2841000.0, 2851000.0, 2861000.0, 2870000.0, 2880000.0, 2890000.0, 2899000.0, 2909000.0, 2919000.0, 2929000.0, - 2938000.0, 2958000.0, 2978000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0, - 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, - {0.0, 0.0, 0.0, 2519000.0, 2529000.0, 2538000.0, 2547000.0, 2557000.0, 2566000.0, 2576000.0, 2585000.0, 2594000.0, - 2604000.0, 2613000.0, 2623000.0, 2632000.0, 2636000.0, 2639000.0, 2643000.0, 2647000.0, 2651000.0, 2655000.0, 2658000.0, 2662000.0, - 2666000.0, 2670000.0, 2673000.0, 2677000.0, 2681000.0, 2685000.0, 2687000.0, 2689000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, - 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, - 2721000.0, 2723000.0, 2725000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, 2740000.0, 2742000.0, - 2744000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2768000.0, 2772000.0, 2776000.0, 2780000.0, 2784000.0, - 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, 2830000.0, - 2834000.0, 2837000.0, 2841000.0, 2851000.0, 2861000.0, 2870000.0, 2880000.0, 2890000.0, 2899000.0, 2909000.0, 2919000.0, 2929000.0, - 2938000.0, 2958000.0, 2978000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0, - 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, - {0.0, 0.0, 0.0, 0.0, 2528000.0, 2538000.0, 2547000.0, 2557000.0, 2566000.0, 2575000.0, 2585000.0, 2594000.0, - 2604000.0, 2613000.0, 2622000.0, 2632000.0, 2636000.0, 2639000.0, 2643000.0, 2647000.0, 2651000.0, 2654000.0, 2658000.0, 2662000.0, - 2666000.0, 2670000.0, 2673000.0, 2677000.0, 2681000.0, 2685000.0, 2687000.0, 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, - 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, - 2721000.0, 2723000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, 2740000.0, 2742000.0, - 2744000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2764000.0, 2768000.0, 2772000.0, 2776000.0, 2780000.0, 2784000.0, - 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, 2830000.0, - 2834000.0, 2837000.0, 2841000.0, 2851000.0, 2861000.0, 2870000.0, 2880000.0, 2890000.0, 2899000.0, 2909000.0, 2919000.0, 2929000.0, - 2938000.0, 2958000.0, 2978000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0, - 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 2537000.0, 2547000.0, 2556000.0, 2566000.0, 2575000.0, 2585000.0, 2594000.0, - 2603000.0, 2613000.0, 2622000.0, 2632000.0, 2635000.0, 2639000.0, 2643000.0, 2647000.0, 2651000.0, 2654000.0, 2658000.0, 2662000.0, - 2666000.0, 2669000.0, 2673000.0, 2677000.0, 2681000.0, 2685000.0, 2687000.0, 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, - 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, - 2721000.0, 2723000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, 2740000.0, 2742000.0, - 2743000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2764000.0, 2768000.0, 2772000.0, 2776000.0, 2780000.0, 2784000.0, - 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, 2830000.0, - 2834000.0, 2837000.0, 2841000.0, 2851000.0, 2861000.0, 2870000.0, 2880000.0, 2890000.0, 2899000.0, 2909000.0, 2919000.0, 2929000.0, - 2938000.0, 2958000.0, 2978000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0, - 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2547000.0, 2556000.0, 2566000.0, 2575000.0, 2584000.0, 2594000.0, - 2603000.0, 2613000.0, 2622000.0, 2632000.0, 2635000.0, 2639000.0, 2643000.0, 2647000.0, 2650000.0, 2654000.0, 2658000.0, 2662000.0, - 2666000.0, 2669000.0, 2673000.0, 2677000.0, 2681000.0, 2685000.0, 2686000.0, 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, - 2698000.0, 2700000.0, 2702000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, - 2721000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, 2740000.0, 2741000.0, - 2743000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2764000.0, 2768000.0, 2772000.0, 2776000.0, 2780000.0, 2784000.0, - 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, 2830000.0, - 2833000.0, 2837000.0, 2841000.0, 2851000.0, 2861000.0, 2870000.0, 2880000.0, 2890000.0, 2899000.0, 2909000.0, 2919000.0, 2929000.0, - 2938000.0, 2958000.0, 2978000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0, - 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2556000.0, 2565000.0, 2575000.0, 2584000.0, 2594000.0, - 2603000.0, 2612000.0, 2622000.0, 2631000.0, 2635000.0, 2639000.0, 2643000.0, 2646000.0, 2650000.0, 2654000.0, 2658000.0, 2662000.0, - 2665000.0, 2669000.0, 2673000.0, 2677000.0, 2681000.0, 2684000.0, 2686000.0, 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, - 2698000.0, 2700000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, - 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, 2739000.0, 2741000.0, - 2743000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2760000.0, 2764000.0, 2768000.0, 2772000.0, 2776000.0, 2780000.0, 2783000.0, - 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, 2830000.0, - 2833000.0, 2837000.0, 2841000.0, 2851000.0, 2860000.0, 2870000.0, 2880000.0, 2890000.0, 2899000.0, 2909000.0, 2919000.0, 2929000.0, - 2938000.0, 2958000.0, 2978000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0, - 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2565000.0, 2574000.0, 2584000.0, 2593000.0, - 2603000.0, 2612000.0, 2622000.0, 2631000.0, 2635000.0, 2639000.0, 2642000.0, 2646000.0, 2650000.0, 2654000.0, 2658000.0, 2661000.0, - 2665000.0, 2669000.0, 2673000.0, 2677000.0, 2680000.0, 2684000.0, 2686000.0, 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, - 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2718000.0, - 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2737000.0, 2739000.0, 2741000.0, - 2743000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2760000.0, 2764000.0, 2768000.0, 2772000.0, 2776000.0, 2780000.0, 2783000.0, - 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, 2829000.0, - 2833000.0, 2837000.0, 2841000.0, 2851000.0, 2860000.0, 2870000.0, 2880000.0, 2890000.0, 2899000.0, 2909000.0, 2919000.0, 2929000.0, - 2938000.0, 2958000.0, 2978000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0, - 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2574000.0, 2583000.0, 2593000.0, - 2602000.0, 2612000.0, 2621000.0, 2631000.0, 2635000.0, 2638000.0, 2642000.0, 2646000.0, 2650000.0, 2654000.0, 2657000.0, 2661000.0, - 2665000.0, 2669000.0, 2673000.0, 2676000.0, 2680000.0, 2684000.0, 2686000.0, 2688000.0, 2690000.0, 2692000.0, 2693000.0, 2695000.0, - 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2714000.0, 2716000.0, 2718000.0, - 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2733000.0, 2735000.0, 2737000.0, 2739000.0, 2741000.0, - 2743000.0, 2745000.0, 2749000.0, 2753000.0, 2756000.0, 2760000.0, 2764000.0, 2768000.0, 2772000.0, 2776000.0, 2779000.0, 2783000.0, - 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, 2829000.0, - 2833000.0, 2837000.0, 2841000.0, 2851000.0, 2860000.0, 2870000.0, 2880000.0, 2889000.0, 2899000.0, 2909000.0, 2919000.0, 2928000.0, - 2938000.0, 2958000.0, 2978000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0, - 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2582000.0, 2592000.0, - 2602000.0, 2611000.0, 2621000.0, 2630000.0, 2634000.0, 2638000.0, 2642000.0, 2646000.0, 2649000.0, 2653000.0, 2657000.0, 2661000.0, - 2665000.0, 2668000.0, 2672000.0, 2676000.0, 2680000.0, 2684000.0, 2686000.0, 2688000.0, 2689000.0, 2691000.0, 2693000.0, 2695000.0, - 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2708000.0, 2710000.0, 2712000.0, 2714000.0, 2716000.0, 2718000.0, - 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2729000.0, 2731000.0, 2733000.0, 2735000.0, 2737000.0, 2739000.0, 2741000.0, - 2743000.0, 2745000.0, 2749000.0, 2752000.0, 2756000.0, 2760000.0, 2764000.0, 2768000.0, 2772000.0, 2775000.0, 2779000.0, 2783000.0, - 2787000.0, 2791000.0, 2795000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, 2825000.0, 2829000.0, - 2833000.0, 2837000.0, 2841000.0, 2851000.0, 2860000.0, 2870000.0, 2880000.0, 2889000.0, 2899000.0, 2909000.0, 2919000.0, 2928000.0, - 2938000.0, 2958000.0, 2977000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0, - 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2591000.0, - 2601000.0, 2611000.0, 2620000.0, 2630000.0, 2634000.0, 2637000.0, 2641000.0, 2645000.0, 2649000.0, 2653000.0, 2657000.0, 2660000.0, - 2664000.0, 2668000.0, 2672000.0, 2676000.0, 2680000.0, 2683000.0, 2685000.0, 2687000.0, 2689000.0, 2691000.0, 2693000.0, 2695000.0, - 2697000.0, 2699000.0, 2701000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2710000.0, 2712000.0, 2714000.0, 2716000.0, 2718000.0, - 2720000.0, 2722000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2733000.0, 2735000.0, 2737000.0, 2739000.0, 2741000.0, - 2743000.0, 2745000.0, 2748000.0, 2752000.0, 2756000.0, 2760000.0, 2764000.0, 2768000.0, 2771000.0, 2775000.0, 2779000.0, 2783000.0, - 2787000.0, 2791000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, 2821000.0, 2825000.0, 2829000.0, - 2833000.0, 2837000.0, 2841000.0, 2850000.0, 2860000.0, 2870000.0, 2879000.0, 2889000.0, 2899000.0, 2909000.0, 2918000.0, 2928000.0, - 2938000.0, 2958000.0, 2977000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0, - 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 2600000.0, 2610000.0, 2620000.0, 2629000.0, 2633000.0, 2637000.0, 2641000.0, 2645000.0, 2648000.0, 2652000.0, 2656000.0, 2660000.0, - 2664000.0, 2668000.0, 2671000.0, 2675000.0, 2679000.0, 2683000.0, 2685000.0, 2687000.0, 2689000.0, 2691000.0, 2692000.0, 2694000.0, - 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2710000.0, 2712000.0, 2714000.0, 2715000.0, 2717000.0, - 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2733000.0, 2735000.0, 2737000.0, 2738000.0, 2740000.0, - 2742000.0, 2744000.0, 2748000.0, 2752000.0, 2756000.0, 2760000.0, 2763000.0, 2767000.0, 2771000.0, 2775000.0, 2779000.0, 2783000.0, - 2786000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2813000.0, 2817000.0, 2821000.0, 2825000.0, 2829000.0, - 2833000.0, 2837000.0, 2841000.0, 2850000.0, 2860000.0, 2870000.0, 2879000.0, 2889000.0, 2899000.0, 2909000.0, 2918000.0, 2928000.0, - 2938000.0, 2958000.0, 2977000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0, - 3177000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 2609000.0, 2619000.0, 2628000.0, 2632000.0, 2636000.0, 2640000.0, 2644000.0, 2648000.0, 2652000.0, 2655000.0, 2659000.0, - 2663000.0, 2667000.0, 2671000.0, 2675000.0, 2679000.0, 2682000.0, 2684000.0, 2686000.0, 2688000.0, 2690000.0, 2692000.0, 2694000.0, - 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, - 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, 2740000.0, - 2742000.0, 2744000.0, 2748000.0, 2752000.0, 2755000.0, 2759000.0, 2763000.0, 2767000.0, 2771000.0, 2775000.0, 2778000.0, 2782000.0, - 2786000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2805000.0, 2809000.0, 2813000.0, 2817000.0, 2821000.0, 2825000.0, 2829000.0, - 2833000.0, 2836000.0, 2840000.0, 2850000.0, 2860000.0, 2869000.0, 2879000.0, 2889000.0, 2899000.0, 2908000.0, 2918000.0, 2928000.0, - 2938000.0, 2957000.0, 2977000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3076000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0, - 3177000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 2618000.0, 2627000.0, 2631000.0, 2635000.0, 2639000.0, 2643000.0, 2647000.0, 2651000.0, 2655000.0, 2659000.0, - 2662000.0, 2666000.0, 2670000.0, 2674000.0, 2678000.0, 2682000.0, 2684000.0, 2686000.0, 2688000.0, 2689000.0, 2691000.0, 2693000.0, - 2695000.0, 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2716000.0, - 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, 2740000.0, - 2741000.0, 2743000.0, 2747000.0, 2751000.0, 2755000.0, 2759000.0, 2763000.0, 2767000.0, 2770000.0, 2774000.0, 2778000.0, 2782000.0, - 2786000.0, 2790000.0, 2794000.0, 2797000.0, 2801000.0, 2805000.0, 2809000.0, 2813000.0, 2817000.0, 2821000.0, 2825000.0, 2828000.0, - 2832000.0, 2836000.0, 2840000.0, 2850000.0, 2859000.0, 2869000.0, 2879000.0, 2889000.0, 2898000.0, 2908000.0, 2918000.0, 2928000.0, - 2938000.0, 2957000.0, 2977000.0, 2997000.0, 3017000.0, 3036000.0, 3056000.0, 3076000.0, 3096000.0, 3117000.0, 3137000.0, 3157000.0, - 3177000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 2626000.0, 2630000.0, 2634000.0, 2638000.0, 2642000.0, 2646000.0, 2650000.0, 2654000.0, 2658000.0, - 2661000.0, 2665000.0, 2669000.0, 2673000.0, 2677000.0, 2681000.0, 2683000.0, 2685000.0, 2687000.0, 2689000.0, 2691000.0, 2693000.0, - 2695000.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2710000.0, 2712000.0, 2714000.0, 2716000.0, - 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2733000.0, 2735000.0, 2737000.0, 2739000.0, - 2741000.0, 2743000.0, 2747000.0, 2751000.0, 2754000.0, 2758000.0, 2762000.0, 2766000.0, 2770000.0, 2774000.0, 2778000.0, 2782000.0, - 2785000.0, 2789000.0, 2793000.0, 2797000.0, 2801000.0, 2805000.0, 2809000.0, 2813000.0, 2816000.0, 2820000.0, 2824000.0, 2828000.0, - 2832000.0, 2836000.0, 2840000.0, 2849000.0, 2859000.0, 2869000.0, 2879000.0, 2888000.0, 2898000.0, 2908000.0, 2918000.0, 2928000.0, - 2937000.0, 2957000.0, 2977000.0, 2997000.0, 3016000.0, 3036000.0, 3056000.0, 3076000.0, 3096000.0, 3116000.0, 3137000.0, 3157000.0, - 3177000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3489000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 2630000.0, 2633000.0, 2637000.0, 2641000.0, 2645000.0, 2649000.0, 2653000.0, 2657000.0, - 2661000.0, 2665000.0, 2669000.0, 2673000.0, 2677000.0, 2681000.0, 2683000.0, 2684000.0, 2686000.0, 2688000.0, 2690000.0, 2692000.0, - 2694000.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2710000.0, 2712000.0, 2714000.0, 2716000.0, - 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2733000.0, 2735000.0, 2737000.0, 2739000.0, - 2741000.0, 2743000.0, 2747000.0, 2750000.0, 2754000.0, 2758000.0, 2762000.0, 2766000.0, 2770000.0, 2774000.0, 2777000.0, 2781000.0, - 2785000.0, 2789000.0, 2793000.0, 2797000.0, 2801000.0, 2805000.0, 2808000.0, 2812000.0, 2816000.0, 2820000.0, 2824000.0, 2828000.0, - 2832000.0, 2836000.0, 2840000.0, 2849000.0, 2859000.0, 2869000.0, 2879000.0, 2888000.0, 2898000.0, 2908000.0, 2918000.0, 2927000.0, - 2937000.0, 2957000.0, 2977000.0, 2996000.0, 3016000.0, 3036000.0, 3056000.0, 3076000.0, 3096000.0, 3116000.0, 3137000.0, 3157000.0, - 3177000.0, 3197000.0, 3218000.0, 3280000.0, 3384000.0, 3489000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 2633000.0, 2637000.0, 2641000.0, 2645000.0, 2649000.0, 2653000.0, 2657000.0, - 2661000.0, 2665000.0, 2668000.0, 2672000.0, 2676000.0, 2680000.0, 2682000.0, 2684000.0, 2686000.0, 2688000.0, 2690000.0, 2692000.0, - 2694000.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, - 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2733000.0, 2735000.0, 2737000.0, 2738000.0, - 2740000.0, 2742000.0, 2746000.0, 2750000.0, 2754000.0, 2758000.0, 2762000.0, 2766000.0, 2770000.0, 2773000.0, 2777000.0, 2781000.0, - 2785000.0, 2789000.0, 2793000.0, 2797000.0, 2801000.0, 2804000.0, 2808000.0, 2812000.0, 2816000.0, 2820000.0, 2824000.0, 2828000.0, - 2832000.0, 2835000.0, 2839000.0, 2849000.0, 2859000.0, 2869000.0, 2878000.0, 2888000.0, 2898000.0, 2908000.0, 2918000.0, 2927000.0, - 2937000.0, 2957000.0, 2977000.0, 2996000.0, 3016000.0, 3036000.0, 3056000.0, 3076000.0, 3096000.0, 3116000.0, 3136000.0, 3157000.0, - 3177000.0, 3197000.0, 3218000.0, 3280000.0, 3384000.0, 3489000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2636000.0, 2640000.0, 2644000.0, 2648000.0, 2652000.0, 2656000.0, - 2660000.0, 2664000.0, 2668000.0, 2672000.0, 2676000.0, 2680000.0, 2682000.0, 2684000.0, 2686000.0, 2688000.0, 2690000.0, 2691000.0, - 2693000.0, 2695000.0, 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, - 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, - 2740000.0, 2742000.0, 2746000.0, 2750000.0, 2754000.0, 2758000.0, 2762000.0, 2765000.0, 2769000.0, 2773000.0, 2777000.0, 2781000.0, - 2785000.0, 2789000.0, 2793000.0, 2796000.0, 2800000.0, 2804000.0, 2808000.0, 2812000.0, 2816000.0, 2820000.0, 2824000.0, 2828000.0, - 2831000.0, 2835000.0, 2839000.0, 2849000.0, 2859000.0, 2868000.0, 2878000.0, 2888000.0, 2898000.0, 2908000.0, 2917000.0, 2927000.0, - 2937000.0, 2957000.0, 2976000.0, 2996000.0, 3016000.0, 3036000.0, 3056000.0, 3076000.0, 3096000.0, 3116000.0, 3136000.0, 3157000.0, - 3177000.0, 3197000.0, 3218000.0, 3280000.0, 3384000.0, 3489000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2640000.0, 2644000.0, 2648000.0, 2652000.0, 2656000.0, - 2660000.0, 2664000.0, 2667000.0, 2671000.0, 2675000.0, 2679000.0, 2681000.0, 2683000.0, 2685000.0, 2687000.0, 2689000.0, 2691000.0, - 2693000.0, 2695000.0, 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, - 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, - 2740000.0, 2742000.0, 2746000.0, 2750000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2769000.0, 2773000.0, 2777000.0, 2781000.0, - 2785000.0, 2788000.0, 2792000.0, 2796000.0, 2800000.0, 2804000.0, 2808000.0, 2812000.0, 2816000.0, 2820000.0, 2823000.0, 2827000.0, - 2831000.0, 2835000.0, 2839000.0, 2849000.0, 2859000.0, 2868000.0, 2878000.0, 2888000.0, 2898000.0, 2907000.0, 2917000.0, 2927000.0, - 2937000.0, 2957000.0, 2976000.0, 2996000.0, 3016000.0, 3036000.0, 3056000.0, 3076000.0, 3096000.0, 3116000.0, 3136000.0, 3157000.0, - 3177000.0, 3197000.0, 3218000.0, 3280000.0, 3384000.0, 3489000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2643000.0, 2647000.0, 2651000.0, 2655000.0, - 2659000.0, 2663000.0, 2667000.0, 2671000.0, 2675000.0, 2679000.0, 2681000.0, 2683000.0, 2685000.0, 2687000.0, 2689000.0, 2691000.0, - 2693000.0, 2695000.0, 2697000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2710000.0, 2712000.0, 2714000.0, - 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, - 2740000.0, 2741000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2769000.0, 2773000.0, 2777000.0, 2780000.0, - 2784000.0, 2788000.0, 2792000.0, 2796000.0, 2800000.0, 2804000.0, 2808000.0, 2812000.0, 2815000.0, 2819000.0, 2823000.0, 2827000.0, - 2831000.0, 2835000.0, 2839000.0, 2849000.0, 2858000.0, 2868000.0, 2878000.0, 2888000.0, 2897000.0, 2907000.0, 2917000.0, 2927000.0, - 2937000.0, 2956000.0, 2976000.0, 2996000.0, 3016000.0, 3036000.0, 3056000.0, 3076000.0, 3096000.0, 3116000.0, 3136000.0, 3157000.0, - 3177000.0, 3197000.0, 3218000.0, 3280000.0, 3384000.0, 3489000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2646000.0, 2650000.0, 2654000.0, - 2658000.0, 2662000.0, 2666000.0, 2670000.0, 2674000.0, 2678000.0, 2680000.0, 2682000.0, 2684000.0, 2686000.0, 2688000.0, 2690000.0, - 2692000.0, 2694000.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2710000.0, 2712000.0, 2714000.0, - 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2733000.0, 2735000.0, 2737000.0, - 2739000.0, 2741000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2768000.0, 2772000.0, 2776000.0, 2780000.0, - 2784000.0, 2788000.0, 2792000.0, 2796000.0, 2800000.0, 2804000.0, 2807000.0, 2811000.0, 2815000.0, 2819000.0, 2823000.0, 2827000.0, - 2831000.0, 2835000.0, 2839000.0, 2848000.0, 2858000.0, 2868000.0, 2878000.0, 2887000.0, 2897000.0, 2907000.0, 2917000.0, 2927000.0, - 2937000.0, 2956000.0, 2976000.0, 2996000.0, 3016000.0, 3036000.0, 3056000.0, 3076000.0, 3096000.0, 3116000.0, 3136000.0, 3156000.0, - 3177000.0, 3197000.0, 3218000.0, 3280000.0, 3383000.0, 3489000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2650000.0, 2654000.0, - 2658000.0, 2662000.0, 2666000.0, 2670000.0, 2674000.0, 2678000.0, 2680000.0, 2682000.0, 2684000.0, 2686000.0, 2688000.0, 2690000.0, - 2692000.0, 2694000.0, 2696000.0, 2698000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, - 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2733000.0, 2735000.0, 2737000.0, - 2739000.0, 2741000.0, 2745000.0, 2749000.0, 2752000.0, 2756000.0, 2760000.0, 2764000.0, 2768000.0, 2772000.0, 2776000.0, 2780000.0, - 2784000.0, 2788000.0, 2792000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2811000.0, 2815000.0, 2819000.0, 2823000.0, 2827000.0, - 2831000.0, 2834000.0, 2838000.0, 2848000.0, 2858000.0, 2868000.0, 2878000.0, 2887000.0, 2897000.0, 2907000.0, 2917000.0, 2927000.0, - 2936000.0, 2956000.0, 2976000.0, 2996000.0, 3016000.0, 3036000.0, 3056000.0, 3076000.0, 3096000.0, 3116000.0, 3136000.0, 3156000.0, - 3177000.0, 3197000.0, 3218000.0, 3280000.0, 3383000.0, 3489000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2653000.0, - 2657000.0, 2661000.0, 2665000.0, 2669000.0, 2673000.0, 2677000.0, 2679000.0, 2681000.0, 2683000.0, 2685000.0, 2687000.0, 2689000.0, - 2691000.0, 2693000.0, 2695000.0, 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, - 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2732000.0, 2734000.0, 2736000.0, - 2738000.0, 2740000.0, 2744000.0, 2748000.0, 2752000.0, 2756000.0, 2760000.0, 2764000.0, 2768000.0, 2772000.0, 2776000.0, 2779000.0, - 2783000.0, 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2811000.0, 2815000.0, 2819000.0, 2822000.0, 2826000.0, - 2830000.0, 2834000.0, 2838000.0, 2848000.0, 2858000.0, 2867000.0, 2877000.0, 2887000.0, 2897000.0, 2907000.0, 2917000.0, 2926000.0, - 2936000.0, 2956000.0, 2976000.0, 2996000.0, 3016000.0, 3035000.0, 3055000.0, 3076000.0, 3096000.0, 3116000.0, 3136000.0, 3156000.0, - 3177000.0, 3197000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 2656000.0, 2660000.0, 2664000.0, 2668000.0, 2672000.0, 2676000.0, 2678000.0, 2680000.0, 2682000.0, 2684000.0, 2686000.0, 2688000.0, - 2690000.0, 2692000.0, 2694000.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2710000.0, 2712000.0, - 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, - 2738000.0, 2740000.0, 2744000.0, 2748000.0, 2752000.0, 2756000.0, 2760000.0, 2763000.0, 2767000.0, 2771000.0, 2775000.0, 2779000.0, - 2783000.0, 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, - 2830000.0, 2834000.0, 2838000.0, 2848000.0, 2857000.0, 2867000.0, 2877000.0, 2887000.0, 2897000.0, 2907000.0, 2916000.0, 2926000.0, - 2936000.0, 2956000.0, 2976000.0, 2996000.0, 3015000.0, 3035000.0, 3055000.0, 3075000.0, 3095000.0, 3116000.0, 3136000.0, 3156000.0, - 3176000.0, 3197000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 2660000.0, 2664000.0, 2668000.0, 2672000.0, 2676000.0, 2678000.0, 2680000.0, 2682000.0, 2684000.0, 2686000.0, 2688000.0, - 2690000.0, 2692000.0, 2694000.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2710000.0, 2712000.0, - 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2735000.0, - 2737000.0, 2739000.0, 2743000.0, 2747000.0, 2751000.0, 2755000.0, 2759000.0, 2763000.0, 2767000.0, 2771000.0, 2775000.0, 2779000.0, - 2783000.0, 2787000.0, 2791000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, - 2830000.0, 2834000.0, 2838000.0, 2847000.0, 2857000.0, 2867000.0, 2877000.0, 2887000.0, 2896000.0, 2906000.0, 2916000.0, 2926000.0, - 2936000.0, 2956000.0, 2975000.0, 2995000.0, 3015000.0, 3035000.0, 3055000.0, 3075000.0, 3095000.0, 3116000.0, 3136000.0, 3156000.0, - 3176000.0, 3197000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 2663000.0, 2667000.0, 2671000.0, 2675000.0, 2677000.0, 2679000.0, 2681000.0, 2683000.0, 2685000.0, 2687000.0, - 2689000.0, 2691000.0, 2693000.0, 2695000.0, 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, - 2713000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2733000.0, 2735000.0, - 2737000.0, 2739000.0, 2743000.0, 2747000.0, 2751000.0, 2755000.0, 2759000.0, 2763000.0, 2767000.0, 2771000.0, 2774000.0, 2778000.0, - 2782000.0, 2786000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, - 2829000.0, 2833000.0, 2837000.0, 2847000.0, 2857000.0, 2867000.0, 2877000.0, 2886000.0, 2896000.0, 2906000.0, 2916000.0, 2926000.0, - 2936000.0, 2955000.0, 2975000.0, 2995000.0, 3015000.0, 3035000.0, 3055000.0, 3075000.0, 3095000.0, 3115000.0, 3136000.0, 3156000.0, - 3176000.0, 3197000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 2666000.0, 2670000.0, 2674000.0, 2676000.0, 2678000.0, 2680000.0, 2682000.0, 2684000.0, 2686000.0, - 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, - 2713000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, - 2736000.0, 2738000.0, 2742000.0, 2746000.0, 2750000.0, 2754000.0, 2758000.0, 2762000.0, 2766000.0, 2770000.0, 2774000.0, 2778000.0, - 2782000.0, 2786000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2809000.0, 2813000.0, 2817000.0, 2821000.0, 2825000.0, - 2829000.0, 2833000.0, 2837000.0, 2847000.0, 2857000.0, 2866000.0, 2876000.0, 2886000.0, 2896000.0, 2906000.0, 2916000.0, 2926000.0, - 2935000.0, 2955000.0, 2975000.0, 2995000.0, 3015000.0, 3035000.0, 3055000.0, 3075000.0, 3095000.0, 3115000.0, 3136000.0, 3156000.0, - 3176000.0, 3197000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 2669000.0, 2673000.0, 2675000.0, 2677000.0, 2679000.0, 2682000.0, 2684000.0, 2686000.0, - 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2710000.0, - 2712000.0, 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, - 2736000.0, 2738000.0, 2742000.0, 2746000.0, 2750000.0, 2754000.0, 2758000.0, 2762000.0, 2766000.0, 2770000.0, 2774000.0, 2777000.0, - 2781000.0, 2785000.0, 2789000.0, 2793000.0, 2797000.0, 2801000.0, 2805000.0, 2809000.0, 2813000.0, 2817000.0, 2821000.0, 2825000.0, - 2829000.0, 2833000.0, 2837000.0, 2846000.0, 2856000.0, 2866000.0, 2876000.0, 2886000.0, 2896000.0, 2906000.0, 2915000.0, 2925000.0, - 2935000.0, 2955000.0, 2975000.0, 2995000.0, 3015000.0, 3035000.0, 3055000.0, 3075000.0, 3095000.0, 3115000.0, 3135000.0, 3156000.0, - 3176000.0, 3196000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 2672000.0, 2674000.0, 2677000.0, 2679000.0, 2681000.0, 2683000.0, 2685000.0, - 2687000.0, 2689000.0, 2691000.0, 2693000.0, 2695000.0, 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, - 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2733000.0, - 2735000.0, 2737000.0, 2741000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2769000.0, 2773000.0, 2777000.0, - 2781000.0, 2785000.0, 2789000.0, 2793000.0, 2797000.0, 2801000.0, 2805000.0, 2809000.0, 2813000.0, 2817000.0, 2820000.0, 2824000.0, - 2828000.0, 2832000.0, 2836000.0, 2846000.0, 2856000.0, 2866000.0, 2876000.0, 2886000.0, 2895000.0, 2905000.0, 2915000.0, 2925000.0, - 2935000.0, 2955000.0, 2975000.0, 2995000.0, 3015000.0, 3035000.0, 3055000.0, 3075000.0, 3095000.0, 3115000.0, 3135000.0, 3156000.0, - 3176000.0, 3196000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2674000.0, 2676000.0, 2678000.0, 2680000.0, 2682000.0, 2684000.0, - 2686000.0, 2688000.0, 2690000.0, 2693000.0, 2695000.0, 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, - 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2733000.0, - 2735000.0, 2737000.0, 2741000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2769000.0, 2773000.0, 2777000.0, - 2781000.0, 2785000.0, 2789000.0, 2793000.0, 2797000.0, 2801000.0, 2804000.0, 2808000.0, 2812000.0, 2816000.0, 2820000.0, 2824000.0, - 2828000.0, 2832000.0, 2836000.0, 2846000.0, 2856000.0, 2866000.0, 2876000.0, 2885000.0, 2895000.0, 2905000.0, 2915000.0, 2925000.0, - 2935000.0, 2955000.0, 2975000.0, 2994000.0, 3014000.0, 3034000.0, 3054000.0, 3075000.0, 3095000.0, 3115000.0, 3135000.0, 3156000.0, - 3176000.0, 3196000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2676000.0, 2678000.0, 2680000.0, 2682000.0, 2684000.0, - 2686000.0, 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, - 2710000.0, 2712000.0, 2714000.0, 2716000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2733000.0, - 2735000.0, 2737000.0, 2741000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2769000.0, 2773000.0, 2776000.0, - 2780000.0, 2784000.0, 2788000.0, 2792000.0, 2796000.0, 2800000.0, 2804000.0, 2808000.0, 2812000.0, 2816000.0, 2820000.0, 2824000.0, - 2828000.0, 2832000.0, 2836000.0, 2846000.0, 2856000.0, 2866000.0, 2875000.0, 2885000.0, 2895000.0, 2905000.0, 2915000.0, 2925000.0, - 2935000.0, 2955000.0, 2974000.0, 2994000.0, 3014000.0, 3034000.0, 3054000.0, 3074000.0, 3095000.0, 3115000.0, 3135000.0, 3155000.0, - 3176000.0, 3196000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2677000.0, 2679000.0, 2681000.0, 2683000.0, - 2685000.0, 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, - 2710000.0, 2712000.0, 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, - 2734000.0, 2736000.0, 2740000.0, 2744000.0, 2748000.0, 2752000.0, 2756000.0, 2760000.0, 2764000.0, 2768000.0, 2772000.0, 2776000.0, - 2780000.0, 2784000.0, 2788000.0, 2792000.0, 2796000.0, 2800000.0, 2804000.0, 2808000.0, 2812000.0, 2816000.0, 2820000.0, 2824000.0, - 2828000.0, 2832000.0, 2836000.0, 2846000.0, 2855000.0, 2865000.0, 2875000.0, 2885000.0, 2895000.0, 2905000.0, 2915000.0, 2925000.0, - 2935000.0, 2954000.0, 2974000.0, 2994000.0, 3014000.0, 3034000.0, 3054000.0, 3074000.0, 3095000.0, 3115000.0, 3135000.0, 3155000.0, - 3176000.0, 3196000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2679000.0, 2681000.0, 2683000.0, - 2685000.0, 2687000.0, 2689000.0, 2691000.0, 2693000.0, 2695000.0, 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2706000.0, 2708000.0, - 2710000.0, 2712000.0, 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, - 2734000.0, 2736000.0, 2740000.0, 2744000.0, 2748000.0, 2752000.0, 2756000.0, 2760000.0, 2764000.0, 2768000.0, 2772000.0, 2776000.0, - 2780000.0, 2784000.0, 2788000.0, 2792000.0, 2796000.0, 2800000.0, 2804000.0, 2808000.0, 2812000.0, 2816000.0, 2820000.0, 2824000.0, - 2828000.0, 2832000.0, 2835000.0, 2845000.0, 2855000.0, 2865000.0, 2875000.0, 2885000.0, 2895000.0, 2905000.0, 2915000.0, 2925000.0, - 2934000.0, 2954000.0, 2974000.0, 2994000.0, 3014000.0, 3034000.0, 3054000.0, 3074000.0, 3094000.0, 3115000.0, 3135000.0, 3155000.0, - 3176000.0, 3196000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2680000.0, 2682000.0, - 2684000.0, 2687000.0, 2689000.0, 2691000.0, 2693000.0, 2695000.0, 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, - 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2730000.0, 2732000.0, - 2734000.0, 2736000.0, 2740000.0, 2744000.0, 2748000.0, 2752000.0, 2756000.0, 2760000.0, 2764000.0, 2768000.0, 2772000.0, 2776000.0, - 2780000.0, 2784000.0, 2788000.0, 2792000.0, 2796000.0, 2800000.0, 2804000.0, 2807000.0, 2811000.0, 2815000.0, 2819000.0, 2823000.0, - 2827000.0, 2831000.0, 2835000.0, 2845000.0, 2855000.0, 2865000.0, 2875000.0, 2885000.0, 2895000.0, 2905000.0, 2914000.0, 2924000.0, - 2934000.0, 2954000.0, 2974000.0, 2994000.0, 3014000.0, 3034000.0, 3054000.0, 3074000.0, 3094000.0, 3115000.0, 3135000.0, 3155000.0, - 3176000.0, 3196000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2682000.0, - 2684000.0, 2686000.0, 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, 2698000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, - 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, - 2733000.0, 2735000.0, 2739000.0, 2743000.0, 2747000.0, 2751000.0, 2755000.0, 2759000.0, 2763000.0, 2767000.0, 2771000.0, 2775000.0, - 2779000.0, 2783000.0, 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2811000.0, 2815000.0, 2819000.0, 2823000.0, - 2827000.0, 2831000.0, 2835000.0, 2845000.0, 2855000.0, 2865000.0, 2875000.0, 2885000.0, 2894000.0, 2904000.0, 2914000.0, 2924000.0, - 2934000.0, 2954000.0, 2974000.0, 2994000.0, 3014000.0, 3034000.0, 3054000.0, 3074000.0, 3094000.0, 3115000.0, 3135000.0, 3155000.0, - 3176000.0, 3196000.0, 3216000.0, 3280000.0, 3383000.0, 3489000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 2683000.0, 2685000.0, 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, - 2708000.0, 2710000.0, 2712000.0, 2714000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, - 2733000.0, 2735000.0, 2739000.0, 2743000.0, 2747000.0, 2751000.0, 2755000.0, 2759000.0, 2763000.0, 2767000.0, 2771000.0, 2775000.0, - 2779000.0, 2783000.0, 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2811000.0, 2815000.0, 2819000.0, 2823000.0, - 2827000.0, 2831000.0, 2835000.0, 2845000.0, 2855000.0, 2865000.0, 2874000.0, 2884000.0, 2894000.0, 2904000.0, 2914000.0, 2924000.0, - 2934000.0, 2954000.0, 2974000.0, 2994000.0, 3014000.0, 3034000.0, 3054000.0, 3074000.0, 3094000.0, 3114000.0, 3135000.0, 3155000.0, - 3175000.0, 3196000.0, 3216000.0, 3280000.0, 3383000.0, 3489000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 2685000.0, 2687000.0, 2689000.0, 2691000.0, 2693000.0, 2695000.0, 2697000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, - 2708000.0, 2710000.0, 2712000.0, 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, - 2732000.0, 2734000.0, 2738000.0, 2743000.0, 2747000.0, 2751000.0, 2755000.0, 2759000.0, 2763000.0, 2767000.0, 2771000.0, 2775000.0, - 2779000.0, 2783000.0, 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2811000.0, 2815000.0, 2819000.0, 2823000.0, - 2827000.0, 2831000.0, 2835000.0, 2844000.0, 2854000.0, 2864000.0, 2874000.0, 2884000.0, 2894000.0, 2904000.0, 2914000.0, 2924000.0, - 2934000.0, 2954000.0, 2974000.0, 2994000.0, 3014000.0, 3034000.0, 3054000.0, 3074000.0, 3094000.0, 3114000.0, 3135000.0, 3155000.0, - 3175000.0, 3196000.0, 3216000.0, 3280000.0, 3383000.0, 3488000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 2686000.0, 2689000.0, 2691000.0, 2693000.0, 2695000.0, 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, - 2707000.0, 2709000.0, 2711000.0, 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, - 2732000.0, 2734000.0, 2738000.0, 2742000.0, 2746000.0, 2750000.0, 2754000.0, 2758000.0, 2762000.0, 2766000.0, 2770000.0, 2774000.0, - 2778000.0, 2782000.0, 2786000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, - 2826000.0, 2830000.0, 2834000.0, 2844000.0, 2854000.0, 2864000.0, 2874000.0, 2884000.0, 2894000.0, 2904000.0, 2914000.0, 2924000.0, - 2934000.0, 2954000.0, 2974000.0, 2994000.0, 3014000.0, 3034000.0, 3054000.0, 3074000.0, 3094000.0, 3114000.0, 3135000.0, 3155000.0, - 3175000.0, 3196000.0, 3216000.0, 3280000.0, 3382000.0, 3488000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, - 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2730000.0, - 2732000.0, 2734000.0, 2738000.0, 2742000.0, 2746000.0, 2750000.0, 2754000.0, 2758000.0, 2762000.0, 2766000.0, 2770000.0, 2774000.0, - 2778000.0, 2782000.0, 2786000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, - 2826000.0, 2830000.0, 2834000.0, 2844000.0, 2854000.0, 2864000.0, 2874000.0, 2884000.0, 2894000.0, 2904000.0, 2914000.0, 2924000.0, - 2934000.0, 2953000.0, 2973000.0, 2993000.0, 3013000.0, 3033000.0, 3054000.0, 3074000.0, 3094000.0, 3114000.0, 3134000.0, 3155000.0, - 3175000.0, 3196000.0, 3216000.0, 3280000.0, 3382000.0, 3488000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, - 2706000.0, 2708000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, - 2731000.0, 2733000.0, 2737000.0, 2741000.0, 2745000.0, 2749000.0, 2754000.0, 2758000.0, 2762000.0, 2766000.0, 2770000.0, 2774000.0, - 2778000.0, 2782000.0, 2786000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, - 2826000.0, 2830000.0, 2834000.0, 2844000.0, 2854000.0, 2864000.0, 2874000.0, 2884000.0, 2894000.0, 2903000.0, 2913000.0, 2923000.0, - 2933000.0, 2953000.0, 2973000.0, 2993000.0, 3013000.0, 3033000.0, 3053000.0, 3074000.0, 3094000.0, 3114000.0, 3134000.0, 3155000.0, - 3175000.0, 3196000.0, 3216000.0, 3280000.0, 3382000.0, 3488000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 2691000.0, 2693000.0, 2695000.0, 2697000.0, 2700000.0, 2702000.0, 2704000.0, - 2706000.0, 2708000.0, 2710000.0, 2712000.0, 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2727000.0, 2729000.0, - 2731000.0, 2733000.0, 2737000.0, 2741000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2769000.0, 2773000.0, - 2777000.0, 2781000.0, 2785000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, - 2826000.0, 2830000.0, 2834000.0, 2844000.0, 2853000.0, 2863000.0, 2873000.0, 2883000.0, 2893000.0, 2903000.0, 2913000.0, 2923000.0, - 2933000.0, 2953000.0, 2973000.0, 2993000.0, 3013000.0, 3033000.0, 3053000.0, 3073000.0, 3094000.0, 3114000.0, 3134000.0, 3155000.0, - 3175000.0, 3195000.0, 3216000.0, 3280000.0, 3382000.0, 3488000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2693000.0, 2695000.0, 2697000.0, 2699000.0, 2701000.0, 2703000.0, - 2705000.0, 2707000.0, 2709000.0, 2712000.0, 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, - 2730000.0, 2732000.0, 2736000.0, 2740000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2769000.0, 2773000.0, - 2777000.0, 2781000.0, 2785000.0, 2789000.0, 2793000.0, 2797000.0, 2801000.0, 2805000.0, 2809000.0, 2813000.0, 2817000.0, 2821000.0, - 2825000.0, 2829000.0, 2833000.0, 2843000.0, 2853000.0, 2863000.0, 2873000.0, 2883000.0, 2893000.0, 2903000.0, 2913000.0, 2923000.0, - 2933000.0, 2953000.0, 2973000.0, 2993000.0, 3013000.0, 3033000.0, 3053000.0, 3073000.0, 3094000.0, 3114000.0, 3134000.0, 3154000.0, - 3175000.0, 3195000.0, 3216000.0, 3280000.0, 3382000.0, 3488000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2694000.0, 2696000.0, 2698000.0, 2700000.0, 2703000.0, - 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2724000.0, 2726000.0, 2728000.0, - 2730000.0, 2732000.0, 2736000.0, 2740000.0, 2744000.0, 2748000.0, 2752000.0, 2756000.0, 2760000.0, 2765000.0, 2769000.0, 2773000.0, - 2777000.0, 2781000.0, 2785000.0, 2789000.0, 2793000.0, 2797000.0, 2801000.0, 2805000.0, 2809000.0, 2813000.0, 2817000.0, 2821000.0, - 2825000.0, 2829000.0, 2833000.0, 2843000.0, 2853000.0, 2863000.0, 2873000.0, 2883000.0, 2893000.0, 2903000.0, 2913000.0, 2923000.0, - 2933000.0, 2953000.0, 2973000.0, 2993000.0, 3013000.0, 3033000.0, 3053000.0, 3073000.0, 3093000.0, 3114000.0, 3134000.0, 3154000.0, - 3175000.0, 3195000.0, 3216000.0, 3280000.0, 3382000.0, 3488000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0, - 2704000.0, 2706000.0, 2708000.0, 2710000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, - 2729000.0, 2731000.0, 2735000.0, 2740000.0, 2744000.0, 2748000.0, 2752000.0, 2756000.0, 2760000.0, 2764000.0, 2768000.0, 2772000.0, - 2776000.0, 2780000.0, 2784000.0, 2788000.0, 2793000.0, 2797000.0, 2801000.0, 2805000.0, 2809000.0, 2813000.0, 2817000.0, 2821000.0, - 2825000.0, 2829000.0, 2833000.0, 2843000.0, 2853000.0, 2863000.0, 2873000.0, 2883000.0, 2893000.0, 2903000.0, 2913000.0, 2923000.0, - 2933000.0, 2953000.0, 2973000.0, 2993000.0, 3013000.0, 3033000.0, 3053000.0, 3073000.0, 3093000.0, 3114000.0, 3134000.0, 3154000.0, - 3175000.0, 3195000.0, 3216000.0, 3280000.0, 3382000.0, 3488000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2697000.0, 2699000.0, 2701000.0, - 2703000.0, 2706000.0, 2708000.0, 2710000.0, 2712000.0, 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2725000.0, 2727000.0, - 2729000.0, 2731000.0, 2735000.0, 2739000.0, 2743000.0, 2747000.0, 2751000.0, 2756000.0, 2760000.0, 2764000.0, 2768000.0, 2772000.0, - 2776000.0, 2780000.0, 2784000.0, 2788000.0, 2792000.0, 2796000.0, 2800000.0, 2804000.0, 2808000.0, 2812000.0, 2816000.0, 2820000.0, - 2824000.0, 2828000.0, 2832000.0, 2842000.0, 2852000.0, 2862000.0, 2872000.0, 2882000.0, 2892000.0, 2902000.0, 2912000.0, 2922000.0, - 2932000.0, 2952000.0, 2972000.0, 2992000.0, 3013000.0, 3033000.0, 3053000.0, 3073000.0, 3093000.0, 3113000.0, 3134000.0, 3154000.0, - 3175000.0, 3195000.0, 3216000.0, 3280000.0, 3382000.0, 3488000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2699000.0, 2701000.0, - 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0, - 2728000.0, 2730000.0, 2734000.0, 2739000.0, 2743000.0, 2747000.0, 2751000.0, 2755000.0, 2759000.0, 2763000.0, 2767000.0, 2771000.0, - 2776000.0, 2780000.0, 2784000.0, 2788000.0, 2792000.0, 2796000.0, 2800000.0, 2804000.0, 2808000.0, 2812000.0, 2816000.0, 2820000.0, - 2824000.0, 2828000.0, 2832000.0, 2842000.0, 2852000.0, 2862000.0, 2872000.0, 2882000.0, 2892000.0, 2902000.0, 2912000.0, 2922000.0, - 2932000.0, 2952000.0, 2972000.0, 2992000.0, 3012000.0, 3032000.0, 3053000.0, 3073000.0, 3093000.0, 3113000.0, 3134000.0, 3154000.0, - 3174000.0, 3195000.0, 3216000.0, 3280000.0, 3382000.0, 3488000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2700000.0, - 2702000.0, 2704000.0, 2706000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2726000.0, - 2728000.0, 2730000.0, 2734000.0, 2738000.0, 2742000.0, 2746000.0, 2750000.0, 2755000.0, 2759000.0, 2763000.0, 2767000.0, 2771000.0, - 2775000.0, 2779000.0, 2783000.0, 2787000.0, 2791000.0, 2795000.0, 2800000.0, 2804000.0, 2808000.0, 2812000.0, 2816000.0, 2820000.0, - 2824000.0, 2828000.0, 2832000.0, 2842000.0, 2852000.0, 2862000.0, 2872000.0, 2882000.0, 2892000.0, 2902000.0, 2912000.0, 2922000.0, - 2932000.0, 2952000.0, 2972000.0, 2992000.0, 3012000.0, 3032000.0, 3052000.0, 3073000.0, 3093000.0, 3113000.0, 3134000.0, 3154000.0, - 3174000.0, 3195000.0, 3215000.0, 3280000.0, 3382000.0, 3488000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2710000.0, 2712000.0, 2714000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, - 2727000.0, 2729000.0, 2733000.0, 2738000.0, 2742000.0, 2746000.0, 2750000.0, 2754000.0, 2758000.0, 2762000.0, 2766000.0, 2771000.0, - 2775000.0, 2779000.0, 2783000.0, 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2811000.0, 2815000.0, 2819000.0, - 2823000.0, 2827000.0, 2831000.0, 2842000.0, 2852000.0, 2862000.0, 2872000.0, 2882000.0, 2892000.0, 2902000.0, 2912000.0, 2922000.0, - 2932000.0, 2952000.0, 2972000.0, 2992000.0, 3012000.0, 3032000.0, 3052000.0, 3073000.0, 3093000.0, 3113000.0, 3133000.0, 3154000.0, - 3174000.0, 3195000.0, 3215000.0, 3280000.0, 3382000.0, 3488000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2712000.0, 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, - 2726000.0, 2729000.0, 2733000.0, 2737000.0, 2741000.0, 2745000.0, 2749000.0, 2754000.0, 2758000.0, 2762000.0, 2766000.0, 2770000.0, - 2774000.0, 2778000.0, 2782000.0, 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2811000.0, 2815000.0, 2819000.0, - 2823000.0, 2827000.0, 2831000.0, 2841000.0, 2851000.0, 2861000.0, 2871000.0, 2881000.0, 2891000.0, 2901000.0, 2911000.0, 2922000.0, - 2932000.0, 2952000.0, 2972000.0, 2992000.0, 3012000.0, 3032000.0, 3052000.0, 3072000.0, 3093000.0, 3113000.0, 3133000.0, 3154000.0, - 3174000.0, 3195000.0, 3215000.0, 3280000.0, 3382000.0, 3488000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 2704000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2720000.0, 2722000.0, 2724000.0, - 2726000.0, 2728000.0, 2732000.0, 2736000.0, 2741000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2766000.0, 2770000.0, - 2774000.0, 2778000.0, 2782000.0, 2786000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2811000.0, 2815000.0, 2819000.0, - 2823000.0, 2827000.0, 2831000.0, 2841000.0, 2851000.0, 2861000.0, 2871000.0, 2881000.0, 2891000.0, 2901000.0, 2911000.0, 2921000.0, - 2931000.0, 2951000.0, 2971000.0, 2992000.0, 3012000.0, 3032000.0, 3052000.0, 3072000.0, 3093000.0, 3113000.0, 3133000.0, 3154000.0, - 3174000.0, 3195000.0, 3215000.0, 3280000.0, 3382000.0, 3488000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 2706000.0, 2708000.0, 2710000.0, 2712000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, - 2725000.0, 2727000.0, 2732000.0, 2736000.0, 2740000.0, 2744000.0, 2748000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2769000.0, - 2773000.0, 2777000.0, 2782000.0, 2786000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, - 2822000.0, 2826000.0, 2830000.0, 2841000.0, 2851000.0, 2861000.0, 2871000.0, 2881000.0, 2891000.0, 2901000.0, 2911000.0, 2921000.0, - 2931000.0, 2951000.0, 2971000.0, 2991000.0, 3012000.0, 3032000.0, 3052000.0, 3072000.0, 3092000.0, 3113000.0, 3133000.0, 3153000.0, - 3174000.0, 3194000.0, 3215000.0, 3280000.0, 3382000.0, 3488000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 2707000.0, 2710000.0, 2712000.0, 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, - 2725000.0, 2727000.0, 2731000.0, 2735000.0, 2739000.0, 2744000.0, 2748000.0, 2752000.0, 2756000.0, 2760000.0, 2765000.0, 2769000.0, - 2773000.0, 2777000.0, 2781000.0, 2785000.0, 2789000.0, 2793000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, - 2822000.0, 2826000.0, 2830000.0, 2840000.0, 2850000.0, 2860000.0, 2870000.0, 2881000.0, 2891000.0, 2901000.0, 2911000.0, 2921000.0, - 2931000.0, 2951000.0, 2971000.0, 2991000.0, 3011000.0, 3031000.0, 3052000.0, 3072000.0, 3092000.0, 3113000.0, 3133000.0, 3153000.0, - 3174000.0, 3194000.0, 3215000.0, 3280000.0, 3382000.0, 3488000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2718000.0, 2720000.0, 2722000.0, - 2724000.0, 2726000.0, 2730000.0, 2735000.0, 2739000.0, 2743000.0, 2747000.0, 2752000.0, 2756000.0, 2760000.0, 2764000.0, 2768000.0, - 2772000.0, 2776000.0, 2781000.0, 2785000.0, 2789000.0, 2793000.0, 2797000.0, 2801000.0, 2805000.0, 2809000.0, 2813000.0, 2818000.0, - 2822000.0, 2826000.0, 2830000.0, 2840000.0, 2850000.0, 2860000.0, 2870000.0, 2880000.0, 2890000.0, 2900000.0, 2910000.0, 2921000.0, - 2931000.0, 2951000.0, 2971000.0, 2991000.0, 3011000.0, 3031000.0, 3052000.0, 3072000.0, 3092000.0, 3112000.0, 3133000.0, 3153000.0, - 3174000.0, 3194000.0, 3215000.0, 3280000.0, 3381000.0, 3488000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2710000.0, 2712000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, - 2723000.0, 2725000.0, 2730000.0, 2734000.0, 2738000.0, 2743000.0, 2747000.0, 2751000.0, 2755000.0, 2759000.0, 2764000.0, 2768000.0, - 2772000.0, 2776000.0, 2780000.0, 2784000.0, 2788000.0, 2793000.0, 2797000.0, 2801000.0, 2805000.0, 2809000.0, 2813000.0, 2817000.0, - 2821000.0, 2825000.0, 2829000.0, 2839000.0, 2850000.0, 2860000.0, 2870000.0, 2880000.0, 2890000.0, 2900000.0, 2910000.0, 2920000.0, - 2930000.0, 2950000.0, 2971000.0, 2991000.0, 3011000.0, 3031000.0, 3051000.0, 3072000.0, 3092000.0, 3112000.0, 3133000.0, 3153000.0, - 3174000.0, 3194000.0, 3215000.0, 3280000.0, 3381000.0, 3487000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2712000.0, 2714000.0, 2716000.0, 2718000.0, 2720000.0, - 2723000.0, 2725000.0, 2729000.0, 2733000.0, 2738000.0, 2742000.0, 2746000.0, 2750000.0, 2755000.0, 2759000.0, 2763000.0, 2767000.0, - 2771000.0, 2775000.0, 2780000.0, 2784000.0, 2788000.0, 2792000.0, 2796000.0, 2800000.0, 2804000.0, 2808000.0, 2813000.0, 2817000.0, - 2821000.0, 2825000.0, 2829000.0, 2839000.0, 2849000.0, 2859000.0, 2870000.0, 2880000.0, 2890000.0, 2900000.0, 2910000.0, 2920000.0, - 2930000.0, 2950000.0, 2970000.0, 2991000.0, 3011000.0, 3031000.0, 3051000.0, 3071000.0, 3092000.0, 3112000.0, 3132000.0, 3153000.0, - 3173000.0, 3194000.0, 3215000.0, 3280000.0, 3381000.0, 3487000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2713000.0, 2715000.0, 2717000.0, 2720000.0, - 2722000.0, 2724000.0, 2728000.0, 2733000.0, 2737000.0, 2741000.0, 2746000.0, 2750000.0, 2754000.0, 2758000.0, 2762000.0, 2767000.0, - 2771000.0, 2775000.0, 2779000.0, 2783000.0, 2787000.0, 2792000.0, 2796000.0, 2800000.0, 2804000.0, 2808000.0, 2812000.0, 2816000.0, - 2820000.0, 2824000.0, 2829000.0, 2839000.0, 2849000.0, 2859000.0, 2869000.0, 2879000.0, 2889000.0, 2900000.0, 2910000.0, 2920000.0, - 2930000.0, 2950000.0, 2970000.0, 2990000.0, 3011000.0, 3031000.0, 3051000.0, 3071000.0, 3092000.0, 3112000.0, 3132000.0, 3153000.0, - 3173000.0, 3194000.0, 3214000.0, 3280000.0, 3381000.0, 3487000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2715000.0, 2717000.0, 2719000.0, - 2721000.0, 2723000.0, 2728000.0, 2732000.0, 2736000.0, 2741000.0, 2745000.0, 2749000.0, 2753000.0, 2758000.0, 2762000.0, 2766000.0, - 2770000.0, 2774000.0, 2779000.0, 2783000.0, 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2808000.0, 2812000.0, 2816000.0, - 2820000.0, 2824000.0, 2828000.0, 2838000.0, 2849000.0, 2859000.0, 2869000.0, 2879000.0, 2889000.0, 2899000.0, 2909000.0, 2919000.0, - 2930000.0, 2950000.0, 2970000.0, 2990000.0, 3010000.0, 3031000.0, 3051000.0, 3071000.0, 3091000.0, 3112000.0, 3132000.0, 3153000.0, - 3173000.0, 3194000.0, 3214000.0, 3280000.0, 3381000.0, 3487000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2716000.0, 2718000.0, - 2720000.0, 2723000.0, 2727000.0, 2731000.0, 2736000.0, 2740000.0, 2744000.0, 2748000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, - 2770000.0, 2774000.0, 2778000.0, 2782000.0, 2786000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2811000.0, 2815000.0, - 2819000.0, 2824000.0, 2828000.0, 2838000.0, 2848000.0, 2858000.0, 2868000.0, 2879000.0, 2889000.0, 2899000.0, 2909000.0, 2919000.0, - 2929000.0, 2949000.0, 2970000.0, 2990000.0, 3010000.0, 3030000.0, 3051000.0, 3071000.0, 3091000.0, 3112000.0, 3132000.0, 3152000.0, - 3173000.0, 3194000.0, 3214000.0, 3280000.0, 3381000.0, 3487000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2717000.0, - 2720000.0, 2722000.0, 2726000.0, 2731000.0, 2735000.0, 2739000.0, 2744000.0, 2748000.0, 2752000.0, 2756000.0, 2761000.0, 2765000.0, - 2769000.0, 2773000.0, 2777000.0, 2782000.0, 2786000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2807000.0, 2811000.0, 2815000.0, - 2819000.0, 2823000.0, 2827000.0, 2837000.0, 2848000.0, 2858000.0, 2868000.0, 2878000.0, 2888000.0, 2899000.0, 2909000.0, 2919000.0, - 2929000.0, 2949000.0, 2969000.0, 2990000.0, 3010000.0, 3030000.0, 3050000.0, 3071000.0, 3091000.0, 3111000.0, 3132000.0, 3152000.0, - 3173000.0, 3193000.0, 3214000.0, 3280000.0, 3381000.0, 3487000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 2719000.0, 2721000.0, 2725000.0, 2730000.0, 2734000.0, 2738000.0, 2743000.0, 2747000.0, 2751000.0, 2756000.0, 2760000.0, 2764000.0, - 2768000.0, 2773000.0, 2777000.0, 2781000.0, 2785000.0, 2789000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0, - 2819000.0, 2823000.0, 2827000.0, 2837000.0, 2847000.0, 2858000.0, 2868000.0, 2878000.0, 2888000.0, 2898000.0, 2908000.0, 2919000.0, - 2929000.0, 2949000.0, 2969000.0, 2989000.0, 3010000.0, 3030000.0, 3050000.0, 3071000.0, 3091000.0, 3111000.0, 3132000.0, 3152000.0, - 3173000.0, 3193000.0, 3214000.0, 3280000.0, 3381000.0, 3487000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 2720000.0, 2725000.0, 2729000.0, 2733000.0, 2738000.0, 2742000.0, 2746000.0, 2751000.0, 2755000.0, 2759000.0, 2764000.0, - 2768000.0, 2772000.0, 2776000.0, 2781000.0, 2785000.0, 2789000.0, 2793000.0, 2797000.0, 2801000.0, 2806000.0, 2810000.0, 2814000.0, - 2818000.0, 2822000.0, 2826000.0, 2837000.0, 2847000.0, 2857000.0, 2867000.0, 2878000.0, 2888000.0, 2898000.0, 2908000.0, 2918000.0, - 2928000.0, 2949000.0, 2969000.0, 2989000.0, 3009000.0, 3030000.0, 3050000.0, 3070000.0, 3091000.0, 3111000.0, 3132000.0, 3152000.0, - 3173000.0, 3193000.0, 3214000.0, 3280000.0, 3381000.0, 3487000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 2723000.0, 2727000.0, 2732000.0, 2736000.0, 2741000.0, 2745000.0, 2749000.0, 2754000.0, 2758000.0, 2762000.0, - 2767000.0, 2771000.0, 2775000.0, 2779000.0, 2784000.0, 2788000.0, 2792000.0, 2796000.0, 2800000.0, 2805000.0, 2809000.0, 2813000.0, - 2817000.0, 2821000.0, 2825000.0, 2836000.0, 2846000.0, 2856000.0, 2867000.0, 2877000.0, 2887000.0, 2897000.0, 2907000.0, 2918000.0, - 2928000.0, 2948000.0, 2968000.0, 2989000.0, 3009000.0, 3029000.0, 3050000.0, 3070000.0, 3090000.0, 3111000.0, 3131000.0, 3152000.0, - 3172000.0, 3193000.0, 3213000.0, 3280000.0, 3380000.0, 3487000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 2726000.0, 2730000.0, 2735000.0, 2739000.0, 2743000.0, 2748000.0, 2752000.0, 2757000.0, 2761000.0, - 2765000.0, 2769000.0, 2774000.0, 2778000.0, 2782000.0, 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2808000.0, 2812000.0, - 2816000.0, 2820000.0, 2824000.0, 2835000.0, 2845000.0, 2855000.0, 2866000.0, 2876000.0, 2886000.0, 2896000.0, 2907000.0, 2917000.0, - 2927000.0, 2947000.0, 2968000.0, 2988000.0, 3008000.0, 3029000.0, 3049000.0, 3069000.0, 3090000.0, 3110000.0, 3131000.0, 3151000.0, - 3172000.0, 3192000.0, 3213000.0, 3280000.0, 3380000.0, 3487000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 2728000.0, 2733000.0, 2737000.0, 2742000.0, 2746000.0, 2751000.0, 2755000.0, 2759000.0, - 2764000.0, 2768000.0, 2772000.0, 2777000.0, 2781000.0, 2785000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2811000.0, - 2815000.0, 2819000.0, 2823000.0, 2834000.0, 2844000.0, 2854000.0, 2865000.0, 2875000.0, 2885000.0, 2896000.0, 2906000.0, 2916000.0, - 2926000.0, 2947000.0, 2967000.0, 2987000.0, 3008000.0, 3028000.0, 3049000.0, 3069000.0, 3089000.0, 3110000.0, 3130000.0, 3151000.0, - 3172000.0, 3192000.0, 3213000.0, 3280000.0, 3380000.0, 3486000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 2731000.0, 2735000.0, 2740000.0, 2744000.0, 2749000.0, 2753000.0, 2758000.0, - 2762000.0, 2767000.0, 2771000.0, 2775000.0, 2780000.0, 2784000.0, 2788000.0, 2792000.0, 2797000.0, 2801000.0, 2805000.0, 2809000.0, - 2814000.0, 2818000.0, 2822000.0, 2833000.0, 2843000.0, 2853000.0, 2864000.0, 2874000.0, 2885000.0, 2895000.0, 2905000.0, 2915000.0, - 2926000.0, 2946000.0, 2966000.0, 2987000.0, 3007000.0, 3028000.0, 3048000.0, 3069000.0, 3089000.0, 3109000.0, 3130000.0, 3151000.0, - 3171000.0, 3192000.0, 3212000.0, 3280000.0, 3380000.0, 3486000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2733000.0, 2738000.0, 2743000.0, 2747000.0, 2752000.0, 2756000.0, - 2761000.0, 2765000.0, 2769000.0, 2774000.0, 2778000.0, 2782000.0, 2787000.0, 2791000.0, 2795000.0, 2800000.0, 2804000.0, 2808000.0, - 2812000.0, 2817000.0, 2821000.0, 2831000.0, 2842000.0, 2852000.0, 2863000.0, 2873000.0, 2884000.0, 2894000.0, 2904000.0, 2915000.0, - 2925000.0, 2945000.0, 2966000.0, 2986000.0, 3007000.0, 3027000.0, 3048000.0, 3068000.0, 3089000.0, 3109000.0, 3130000.0, 3150000.0, - 3171000.0, 3191000.0, 3212000.0, 3280000.0, 3380000.0, 3486000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2736000.0, 2741000.0, 2745000.0, 2750000.0, 2754000.0, - 2759000.0, 2763000.0, 2768000.0, 2772000.0, 2777000.0, 2781000.0, 2785000.0, 2790000.0, 2794000.0, 2798000.0, 2803000.0, 2807000.0, - 2811000.0, 2815000.0, 2820000.0, 2830000.0, 2841000.0, 2851000.0, 2862000.0, 2872000.0, 2883000.0, 2893000.0, 2903000.0, 2914000.0, - 2924000.0, 2945000.0, 2965000.0, 2986000.0, 3006000.0, 3027000.0, 3047000.0, 3068000.0, 3088000.0, 3109000.0, 3129000.0, 3150000.0, - 3170000.0, 3191000.0, 3212000.0, 3280000.0, 3379000.0, 3486000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2739000.0, 2743000.0, 2748000.0, 2752000.0, - 2757000.0, 2761000.0, 2766000.0, 2770000.0, 2775000.0, 2779000.0, 2784000.0, 2788000.0, 2792000.0, 2797000.0, 2801000.0, 2805000.0, - 2810000.0, 2814000.0, 2818000.0, 2829000.0, 2840000.0, 2850000.0, 2861000.0, 2871000.0, 2882000.0, 2892000.0, 2902000.0, 2913000.0, - 2923000.0, 2944000.0, 2964000.0, 2985000.0, 3005000.0, 3026000.0, 3046000.0, 3067000.0, 3088000.0, 3108000.0, 3129000.0, 3149000.0, - 3170000.0, 3191000.0, 3211000.0, 3280000.0, 3379000.0, 3485000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2741000.0, 2746000.0, 2750000.0, - 2755000.0, 2760000.0, 2764000.0, 2769000.0, 2773000.0, 2778000.0, 2782000.0, 2786000.0, 2791000.0, 2795000.0, 2800000.0, 2804000.0, - 2808000.0, 2813000.0, 2817000.0, 2828000.0, 2838000.0, 2849000.0, 2860000.0, 2870000.0, 2881000.0, 2891000.0, 2901000.0, 2912000.0, - 2922000.0, 2943000.0, 2964000.0, 2984000.0, 3005000.0, 3025000.0, 3046000.0, 3066000.0, 3087000.0, 3108000.0, 3128000.0, 3149000.0, - 3170000.0, 3190000.0, 3211000.0, 3280000.0, 3379000.0, 3485000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2744000.0, 2748000.0, - 2753000.0, 2758000.0, 2762000.0, 2767000.0, 2771000.0, 2776000.0, 2780000.0, 2785000.0, 2789000.0, 2794000.0, 2798000.0, 2802000.0, - 2807000.0, 2811000.0, 2815000.0, 2826000.0, 2837000.0, 2848000.0, 2858000.0, 2869000.0, 2879000.0, 2890000.0, 2900000.0, 2911000.0, - 2921000.0, 2942000.0, 2963000.0, 2983000.0, 3004000.0, 3025000.0, 3045000.0, 3066000.0, 3086000.0, 3107000.0, 3128000.0, 3148000.0, - 3169000.0, 3190000.0, 3211000.0, 3280000.0, 3378000.0, 3485000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2746000.0, - 2751000.0, 2755000.0, 2760000.0, 2765000.0, 2769000.0, 2774000.0, 2778000.0, 2783000.0, 2787000.0, 2792000.0, 2796000.0, 2801000.0, - 2805000.0, 2810000.0, 2814000.0, 2825000.0, 2836000.0, 2846000.0, 2857000.0, 2868000.0, 2878000.0, 2889000.0, 2899000.0, 2910000.0, - 2920000.0, 2941000.0, 2962000.0, 2983000.0, 3003000.0, 3024000.0, 3045000.0, 3065000.0, 3086000.0, 3106000.0, 3127000.0, 3148000.0, - 3169000.0, 3189000.0, 3210000.0, 3280000.0, 3378000.0, 3485000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 2748000.0, 2753000.0, 2758000.0, 2763000.0, 2767000.0, 2772000.0, 2776000.0, 2781000.0, 2786000.0, 2790000.0, 2795000.0, 2799000.0, - 2803000.0, 2808000.0, 2812000.0, 2823000.0, 2834000.0, 2845000.0, 2856000.0, 2866000.0, 2877000.0, 2888000.0, 2898000.0, 2909000.0, - 2919000.0, 2940000.0, 2961000.0, 2982000.0, 3002000.0, 3023000.0, 3044000.0, 3064000.0, 3085000.0, 3106000.0, 3127000.0, 3147000.0, - 3168000.0, 3189000.0, 3210000.0, 3280000.0, 3378000.0, 3484000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 2751000.0, 2755000.0, 2760000.0, 2765000.0, 2770000.0, 2774000.0, 2779000.0, 2784000.0, 2788000.0, 2793000.0, 2797000.0, - 2802000.0, 2806000.0, 2811000.0, 2822000.0, 2833000.0, 2843000.0, 2854000.0, 2865000.0, 2876000.0, 2886000.0, 2897000.0, 2908000.0, - 2918000.0, 2939000.0, 2960000.0, 2981000.0, 3002000.0, 3022000.0, 3043000.0, 3064000.0, 3085000.0, 3105000.0, 3126000.0, 3147000.0, - 3168000.0, 3188000.0, 3209000.0, 3280000.0, 3377000.0, 3484000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 2753000.0, 2758000.0, 2763000.0, 2767000.0, 2772000.0, 2777000.0, 2781000.0, 2786000.0, 2791000.0, 2795000.0, - 2800000.0, 2804000.0, 2809000.0, 2820000.0, 2831000.0, 2842000.0, 2853000.0, 2864000.0, 2874000.0, 2885000.0, 2896000.0, 2906000.0, - 2917000.0, 2938000.0, 2959000.0, 2980000.0, 3001000.0, 3022000.0, 3042000.0, 3063000.0, 3084000.0, 3105000.0, 3125000.0, 3146000.0, - 3167000.0, 3188000.0, 3209000.0, 3280000.0, 3377000.0, 3484000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 2755000.0, 2760000.0, 2765000.0, 2770000.0, 2775000.0, 2779000.0, 2784000.0, 2789000.0, 2793000.0, - 2798000.0, 2802000.0, 2807000.0, 2818000.0, 2829000.0, 2840000.0, 2851000.0, 2862000.0, 2873000.0, 2884000.0, 2894000.0, 2905000.0, - 2916000.0, 2937000.0, 2958000.0, 2979000.0, 3000000.0, 3021000.0, 3042000.0, 3062000.0, 3083000.0, 3104000.0, 3125000.0, 3146000.0, - 3166000.0, 3187000.0, 3208000.0, 3280000.0, 3377000.0, 3484000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 2757000.0, 2762000.0, 2767000.0, 2772000.0, 2777000.0, 2782000.0, 2786000.0, 2791000.0, - 2796000.0, 2800000.0, 2805000.0, 2816000.0, 2827000.0, 2839000.0, 2850000.0, 2861000.0, 2872000.0, 2882000.0, 2893000.0, 2904000.0, - 2915000.0, 2936000.0, 2957000.0, 2978000.0, 2999000.0, 3020000.0, 3041000.0, 3062000.0, 3082000.0, 3103000.0, 3124000.0, 3145000.0, - 3166000.0, 3187000.0, 3208000.0, 3280000.0, 3376000.0, 3483000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 2760000.0, 2765000.0, 2770000.0, 2774000.0, 2779000.0, 2784000.0, 2789000.0, - 2793000.0, 2798000.0, 2803000.0, 2814000.0, 2826000.0, 2837000.0, 2848000.0, 2859000.0, 2870000.0, 2881000.0, 2892000.0, 2902000.0, - 2913000.0, 2935000.0, 2956000.0, 2977000.0, 2998000.0, 3019000.0, 3040000.0, 3061000.0, 3082000.0, 3102000.0, 3123000.0, 3144000.0, - 3165000.0, 3186000.0, 3207000.0, 3280000.0, 3376000.0, 3483000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2762000.0, 2767000.0, 2772000.0, 2777000.0, 2781000.0, 2786000.0, - 2791000.0, 2796000.0, 2800000.0, 2812000.0, 2824000.0, 2835000.0, 2846000.0, 2857000.0, 2868000.0, 2879000.0, 2890000.0, 2901000.0, - 2912000.0, 2933000.0, 2955000.0, 2976000.0, 2997000.0, 3018000.0, 3039000.0, 3060000.0, 3081000.0, 3102000.0, 3123000.0, 3144000.0, - 3164000.0, 3185000.0, 3206000.0, 3280000.0, 3375000.0, 3483000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2764000.0, 2769000.0, 2774000.0, 2779000.0, 2784000.0, - 2789000.0, 2793000.0, 2798000.0, 2810000.0, 2821000.0, 2833000.0, 2844000.0, 2855000.0, 2867000.0, 2878000.0, 2889000.0, 2900000.0, - 2910000.0, 2932000.0, 2953000.0, 2975000.0, 2996000.0, 3017000.0, 3038000.0, 3059000.0, 3080000.0, 3101000.0, 3122000.0, 3143000.0, - 3164000.0, 3185000.0, 3206000.0, 3280000.0, 3375000.0, 3482000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2766000.0, 2771000.0, 2776000.0, 2781000.0, - 2786000.0, 2791000.0, 2796000.0, 2808000.0, 2819000.0, 2831000.0, 2842000.0, 2854000.0, 2865000.0, 2876000.0, 2887000.0, 2898000.0, - 2909000.0, 2931000.0, 2952000.0, 2973000.0, 2995000.0, 3016000.0, 3037000.0, 3058000.0, 3079000.0, 3100000.0, 3121000.0, 3142000.0, - 3163000.0, 3184000.0, 3205000.0, 3280000.0, 3374000.0, 3482000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2768000.0, 2773000.0, 2778000.0, - 2783000.0, 2788000.0, 2793000.0, 2805000.0, 2817000.0, 2829000.0, 2840000.0, 2852000.0, 2863000.0, 2874000.0, 2885000.0, 2896000.0, - 2907000.0, 2929000.0, 2951000.0, 2972000.0, 2994000.0, 3015000.0, 3036000.0, 3057000.0, 3078000.0, 3099000.0, 3120000.0, 3141000.0, - 3162000.0, 3183000.0, 3204000.0, 3280000.0, 3374000.0, 3481000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2770000.0, 2775000.0, - 2780000.0, 2785000.0, 2790000.0, 2802000.0, 2814000.0, 2826000.0, 2838000.0, 2850000.0, 2861000.0, 2872000.0, 2883000.0, 2895000.0, - 2906000.0, 2928000.0, 2949000.0, 2971000.0, 2992000.0, 3014000.0, 3035000.0, 3056000.0, 3077000.0, 3098000.0, 3119000.0, 3140000.0, - 3162000.0, 3183000.0, 3204000.0, 3280000.0, 3373000.0, 3481000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2772000.0, - 2777000.0, 2782000.0, 2787000.0, 2800000.0, 2812000.0, 2824000.0, 2836000.0, 2847000.0, 2859000.0, 2870000.0, 2882000.0, 2893000.0, - 2904000.0, 2926000.0, 2948000.0, 2969000.0, 2991000.0, 3012000.0, 3034000.0, 3055000.0, 3076000.0, 3097000.0, 3118000.0, 3140000.0, - 3161000.0, 3182000.0, 3203000.0, 3280000.0, 3373000.0, 3480000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 2774000.0, 2779000.0, 2784000.0, 2797000.0, 2809000.0, 2821000.0, 2833000.0, 2845000.0, 2857000.0, 2868000.0, 2880000.0, 2891000.0, - 2902000.0, 2924000.0, 2946000.0, 2968000.0, 2990000.0, 3011000.0, 3033000.0, 3054000.0, 3075000.0, 3096000.0, 3118000.0, 3139000.0, - 3160000.0, 3181000.0, 3202000.0, 3280000.0, 3372000.0, 3480000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 2775000.0, 2781000.0, 2794000.0, 2806000.0, 2819000.0, 2831000.0, 2843000.0, 2854000.0, 2866000.0, 2878000.0, 2889000.0, - 2900000.0, 2923000.0, 2945000.0, 2967000.0, 2988000.0, 3010000.0, 3031000.0, 3053000.0, 3074000.0, 3095000.0, 3117000.0, 3138000.0, - 3159000.0, 3180000.0, 3201000.0, 3280000.0, 3372000.0, 3480000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 2777000.0, 2790000.0, 2803000.0, 2816000.0, 2828000.0, 2840000.0, 2852000.0, 2864000.0, 2875000.0, 2887000.0, - 2898000.0, 2921000.0, 2943000.0, 2965000.0, 2987000.0, 3009000.0, 3030000.0, 3052000.0, 3073000.0, 3094000.0, 3116000.0, 3137000.0, - 3158000.0, 3179000.0, 3201000.0, 3280000.0, 3371000.0, 3479000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 2781000.0, 2795000.0, 2808000.0, 2821000.0, 2833000.0, 2846000.0, 2858000.0, 2870000.0, 2881000.0, - 2893000.0, 2916000.0, 2939000.0, 2961000.0, 2983000.0, 3005000.0, 3027000.0, 3048000.0, 3070000.0, 3091000.0, 3113000.0, 3134000.0, - 3156000.0, 3177000.0, 3198000.0, 3280000.0, 3370000.0, 3478000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 2785000.0, 2799000.0, 2813000.0, 2826000.0, 2838000.0, 2851000.0, 2863000.0, 2875000.0, - 2887000.0, 2910000.0, 2933000.0, 2956000.0, 2979000.0, 3001000.0, 3023000.0, 3045000.0, 3067000.0, 3088000.0, 3110000.0, 3132000.0, - 3153000.0, 3175000.0, 3196000.0, 3280000.0, 3368000.0, 3476000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 2789000.0, 2803000.0, 2817000.0, 2830000.0, 2843000.0, 2856000.0, 2868000.0, - 2880000.0, 2904000.0, 2928000.0, 2951000.0, 2974000.0, 2996000.0, 3019000.0, 3041000.0, 3063000.0, 3085000.0, 3107000.0, 3128000.0, - 3150000.0, 3172000.0, 3193000.0, 3280000.0, 3366000.0, 3475000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2792000.0, 2807000.0, 2821000.0, 2834000.0, 2847000.0, 2860000.0, - 2873000.0, 2898000.0, 2922000.0, 2945000.0, 2969000.0, 2992000.0, 3014000.0, 3037000.0, 3059000.0, 3081000.0, 3103000.0, 3125000.0, - 3147000.0, 3169000.0, 3190000.0, 3280000.0, 3364000.0, 3473000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2795000.0, 2810000.0, 2824000.0, 2838000.0, 2851000.0, - 2864000.0, 2890000.0, 2915000.0, 2939000.0, 2963000.0, 2986000.0, 3009000.0, 3032000.0, 3055000.0, 3077000.0, 3099000.0, 3121000.0, - 3143000.0, 3165000.0, 3187000.0, 3280000.0, 3362000.0, 3471000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2797000.0, 2813000.0, 2827000.0, 2841000.0, - 2855000.0, 2882000.0, 2907000.0, 2932000.0, 2956000.0, 2980000.0, 3004000.0, 3027000.0, 3050000.0, 3072000.0, 3095000.0, 3117000.0, - 3140000.0, 3162000.0, 3184000.0, 3280000.0, 3359000.0, 3469000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2799000.0, 2815000.0, 2830000.0, - 2844000.0, 2872000.0, 2899000.0, 2924000.0, 2949000.0, 2974000.0, 2998000.0, 3021000.0, 3044000.0, 3067000.0, 3090000.0, 3113000.0, - 3135000.0, 3158000.0, 3180000.0, 3280000.0, 3357000.0, 3467000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2801000.0, 2817000.0, - 2832000.0, 2862000.0, 2889000.0, 2916000.0, 2941000.0, 2966000.0, 2991000.0, 3015000.0, 3039000.0, 3062000.0, 3085000.0, 3108000.0, - 3131000.0, 3154000.0, 3176000.0, 3280000.0, 3354000.0, 3465000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2802000.0, - 2819000.0, 2850000.0, 2879000.0, 2906000.0, 2933000.0, 2958000.0, 2984000.0, 3008000.0, 3032000.0, 3056000.0, 3080000.0, 3103000.0, - 3126000.0, 3149000.0, 3172000.0, 3280000.0, 3351000.0, 3462000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 2803000.0, 2836000.0, 2867000.0, 2895000.0, 2923000.0, 2950000.0, 2975000.0, 3001000.0, 3025000.0, 3050000.0, 3073000.0, 3097000.0, - 3121000.0, 3144000.0, 3167000.0, 3280000.0, 3348000.0, 3459000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 2803000.0, 2838000.0, 2870000.0, 2900000.0, 2929000.0, 2957000.0, 2983000.0, 3009000.0, 3035000.0, 3060000.0, 3084000.0, - 3108000.0, 3132000.0, 3156000.0, 3280000.0, 3340000.0, 3453000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 2801000.0, 2838000.0, 2872000.0, 2904000.0, 2934000.0, 2963000.0, 2990000.0, 3017000.0, 3043000.0, 3069000.0, - 3094000.0, 3119000.0, 3143000.0, 3280000.0, 3332000.0, 3446000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 2797000.0, 2837000.0, 2873000.0, 2906000.0, 2937000.0, 2967000.0, 2996000.0, 3023000.0, 3050000.0, - 3077000.0, 3103000.0, 3128000.0, 3280000.0, 3322000.0, 3438000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 2790000.0, 2833000.0, 2871000.0, 2906000.0, 2939000.0, 2970000.0, 3000000.0, 3029000.0, - 3057000.0, 3084000.0, 3110000.0, 3280000.0, 3310000.0, 3429000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 2780000.0, 2826000.0, 2867000.0, 2905000.0, 2939000.0, 2972000.0, 3003000.0, - 3033000.0, 3062000.0, 3090000.0, 3280000.0, 3297000.0, 3418000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2767000.0, 2817000.0, - 2861000.0, 2901000.0, 2938000.0, 2972000.0, 3004000.0, 3036000.0, 3066000.0, 3280000.0, 3282000.0, 3406000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2750000.0, - 2806000.0, 2853000.0, 2895000.0, 2934000.0, 2970000.0, 3004000.0, 3037000.0, 3280000.0, 3264000.0, 3392000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2728000.0, - 2790000.0, 2842000.0, 2887000.0, 2929000.0, 2967000.0, 3003000.0, 3280000.0, 3244000.0, 3377000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 2701000.0, 2771000.0, 2828000.0, 2877000.0, 2921000.0, 2961000.0, 3280000.0, 3222000.0, 3359000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 2666000.0, 2747000.0, 2810000.0, 2864000.0, 2911000.0, 3280000.0, 3195000.0, 3339000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2622000.0, 2718000.0, 2789000.0, 2847000.0, 3280000.0, 3165000.0, 3316000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2564000.0, 2683000.0, 2763000.0, 3280000.0, 3130000.0, 3290000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2481000.0, 2641000.0, 3280000.0, 3089000.0, 3260000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2335000.0, 3280000.0, 3040000.0, 3226000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3280000.0, 2821000.0, 3085000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3280000.0, 2671000.0, 2998000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3280000.0, 2512000.0, 2906000.0}, - }}; - - [[maybe_unused]] static constexpr std::array, DefaultNumSteamSuperheatedPressure> - DefaultSteamSuperheatedDensityDataTable = {{ - {4.855e-03, 4.837e-03, 4.767e-03, 4.683e-03, 4.601e-03, 4.522e-03, 4.446e-03, 4.373e-03, 4.302e-03, 4.233e-03, 4.167e-03, 4.102e-03, - 4.039e-03, 3.979e-03, 3.920e-03, 3.863e-03, 3.840e-03, 3.818e-03, 3.796e-03, 3.775e-03, 3.753e-03, 3.732e-03, 3.711e-03, 3.691e-03, - 3.670e-03, 3.650e-03, 3.630e-03, 3.610e-03, 3.591e-03, 3.571e-03, 3.562e-03, 3.552e-03, 3.543e-03, 3.533e-03, 3.524e-03, 3.514e-03, - 3.505e-03, 3.496e-03, 3.487e-03, 3.477e-03, 3.468e-03, 3.459e-03, 3.450e-03, 3.441e-03, 3.432e-03, 3.424e-03, 3.415e-03, 3.406e-03, - 3.397e-03, 3.388e-03, 3.380e-03, 3.371e-03, 3.363e-03, 3.354e-03, 3.346e-03, 3.337e-03, 3.329e-03, 3.321e-03, 3.312e-03, 3.304e-03, - 3.296e-03, 3.288e-03, 3.271e-03, 3.255e-03, 3.239e-03, 3.224e-03, 3.208e-03, 3.193e-03, 3.177e-03, 3.162e-03, 3.147e-03, 3.132e-03, - 3.117e-03, 3.103e-03, 3.088e-03, 3.074e-03, 3.060e-03, 3.046e-03, 3.032e-03, 3.018e-03, 3.004e-03, 2.991e-03, 2.977e-03, 2.964e-03, - 2.951e-03, 2.938e-03, 2.925e-03, 2.893e-03, 2.862e-03, 2.831e-03, 2.801e-03, 2.772e-03, 2.743e-03, 2.715e-03, 2.688e-03, 2.661e-03, - 2.634e-03, 2.583e-03, 2.533e-03, 2.486e-03, 2.440e-03, 2.396e-03, 2.353e-03, 2.312e-03, 2.273e-03, 2.234e-03, 2.197e-03, 2.162e-03, - 2.127e-03, 2.093e-03, 2.061e-03, 3.542e-05, 1.833e-03, 1.714e-03}, - {0.0, 5.196e-03, 5.121e-03, 5.031e-03, 4.943e-03, 4.859e-03, 4.777e-03, 4.698e-03, 4.622e-03, 4.548e-03, 4.476e-03, 4.407e-03, - 4.340e-03, 4.274e-03, 4.211e-03, 4.150e-03, 4.126e-03, 4.102e-03, 4.078e-03, 4.055e-03, 4.032e-03, 4.009e-03, 3.987e-03, 3.965e-03, - 3.943e-03, 3.921e-03, 3.899e-03, 3.878e-03, 3.857e-03, 3.836e-03, 3.826e-03, 3.816e-03, 3.806e-03, 3.795e-03, 3.785e-03, 3.775e-03, - 3.765e-03, 3.755e-03, 3.746e-03, 3.736e-03, 3.726e-03, 3.716e-03, 3.707e-03, 3.697e-03, 3.687e-03, 3.678e-03, 3.668e-03, 3.659e-03, - 3.650e-03, 3.640e-03, 3.631e-03, 3.622e-03, 3.612e-03, 3.603e-03, 3.594e-03, 3.585e-03, 3.576e-03, 3.567e-03, 3.558e-03, 3.549e-03, - 3.541e-03, 3.532e-03, 3.514e-03, 3.497e-03, 3.480e-03, 3.463e-03, 3.446e-03, 3.430e-03, 3.413e-03, 3.397e-03, 3.381e-03, 3.365e-03, - 3.349e-03, 3.333e-03, 3.318e-03, 3.302e-03, 3.287e-03, 3.272e-03, 3.257e-03, 3.242e-03, 3.228e-03, 3.213e-03, 3.198e-03, 3.184e-03, - 3.170e-03, 3.156e-03, 3.142e-03, 3.108e-03, 3.074e-03, 3.041e-03, 3.009e-03, 2.978e-03, 2.947e-03, 2.917e-03, 2.887e-03, 2.858e-03, - 2.830e-03, 2.775e-03, 2.722e-03, 2.671e-03, 2.621e-03, 2.574e-03, 2.528e-03, 2.484e-03, 2.442e-03, 2.400e-03, 2.361e-03, 2.322e-03, - 2.285e-03, 2.249e-03, 2.214e-03, 3.542e-05, 1.969e-03, 1.841e-03}, - {0.0, 0.0, 6.802e-03, 6.681e-03, 6.565e-03, 6.453e-03, 6.344e-03, 6.239e-03, 6.138e-03, 6.040e-03, 5.944e-03, 5.852e-03, - 5.763e-03, 5.676e-03, 5.592e-03, 5.511e-03, 5.479e-03, 5.447e-03, 5.416e-03, 5.385e-03, 5.355e-03, 5.324e-03, 5.295e-03, 5.265e-03, - 5.236e-03, 5.207e-03, 5.178e-03, 5.150e-03, 5.122e-03, 5.095e-03, 5.081e-03, 5.067e-03, 5.054e-03, 5.040e-03, 5.027e-03, 5.014e-03, - 5.000e-03, 4.987e-03, 4.974e-03, 4.961e-03, 4.948e-03, 4.935e-03, 4.922e-03, 4.909e-03, 4.897e-03, 4.884e-03, 4.871e-03, 4.859e-03, - 4.846e-03, 4.834e-03, 4.822e-03, 4.809e-03, 4.797e-03, 4.785e-03, 4.773e-03, 4.761e-03, 4.749e-03, 4.737e-03, 4.725e-03, 4.714e-03, - 4.702e-03, 4.690e-03, 4.667e-03, 4.644e-03, 4.621e-03, 4.599e-03, 4.577e-03, 4.555e-03, 4.533e-03, 4.511e-03, 4.490e-03, 4.468e-03, - 4.447e-03, 4.427e-03, 4.406e-03, 4.385e-03, 4.365e-03, 4.345e-03, 4.325e-03, 4.306e-03, 4.286e-03, 4.267e-03, 4.247e-03, 4.228e-03, - 4.210e-03, 4.191e-03, 4.172e-03, 4.127e-03, 4.082e-03, 4.039e-03, 3.996e-03, 3.954e-03, 3.913e-03, 3.873e-03, 3.834e-03, 3.796e-03, - 3.758e-03, 3.685e-03, 3.614e-03, 3.546e-03, 3.481e-03, 3.418e-03, 3.357e-03, 3.299e-03, 3.242e-03, 3.188e-03, 3.135e-03, 3.084e-03, - 3.034e-03, 2.986e-03, 2.940e-03, 3.542e-05, 2.615e-03, 2.445e-03}, - {0.0, 0.0, 0.0, 9.407e-03, 9.243e-03, 9.084e-03, 8.931e-03, 8.783e-03, 8.640e-03, 8.502e-03, 8.368e-03, 8.238e-03, - 8.113e-03, 7.991e-03, 7.872e-03, 7.757e-03, 7.712e-03, 7.668e-03, 7.624e-03, 7.580e-03, 7.537e-03, 7.495e-03, 7.453e-03, 7.411e-03, - 7.370e-03, 7.330e-03, 7.289e-03, 7.250e-03, 7.210e-03, 7.172e-03, 7.152e-03, 7.133e-03, 7.114e-03, 7.095e-03, 7.076e-03, 7.057e-03, - 7.039e-03, 7.020e-03, 7.002e-03, 6.983e-03, 6.965e-03, 6.947e-03, 6.929e-03, 6.911e-03, 6.893e-03, 6.875e-03, 6.857e-03, 6.840e-03, - 6.822e-03, 6.805e-03, 6.787e-03, 6.770e-03, 6.753e-03, 6.736e-03, 6.719e-03, 6.702e-03, 6.685e-03, 6.668e-03, 6.651e-03, 6.635e-03, - 6.618e-03, 6.602e-03, 6.569e-03, 6.537e-03, 6.505e-03, 6.473e-03, 6.442e-03, 6.411e-03, 6.380e-03, 6.350e-03, 6.320e-03, 6.290e-03, - 6.260e-03, 6.231e-03, 6.202e-03, 6.173e-03, 6.144e-03, 6.116e-03, 6.088e-03, 6.060e-03, 6.033e-03, 6.006e-03, 5.979e-03, 5.952e-03, - 5.925e-03, 5.899e-03, 5.873e-03, 5.809e-03, 5.746e-03, 5.685e-03, 5.625e-03, 5.566e-03, 5.508e-03, 5.452e-03, 5.397e-03, 5.342e-03, - 5.289e-03, 5.186e-03, 5.087e-03, 4.992e-03, 4.900e-03, 4.811e-03, 4.726e-03, 4.643e-03, 4.564e-03, 4.487e-03, 4.412e-03, 4.340e-03, - 4.271e-03, 4.203e-03, 4.138e-03, 3.542e-05, 3.680e-03, 3.442e-03}, - {0.0, 0.0, 0.0, 0.0, 1.284e-02, 1.262e-02, 1.241e-02, 1.220e-02, 1.200e-02, 1.181e-02, 1.162e-02, 1.144e-02, - 1.127e-02, 1.110e-02, 1.093e-02, 1.078e-02, 1.071e-02, 1.065e-02, 1.059e-02, 1.053e-02, 1.047e-02, 1.041e-02, 1.035e-02, 1.029e-02, - 1.024e-02, 1.018e-02, 1.012e-02, 1.007e-02, 1.001e-02, 9.961e-03, 9.934e-03, 9.907e-03, 9.881e-03, 9.855e-03, 9.828e-03, 9.802e-03, - 9.776e-03, 9.750e-03, 9.725e-03, 9.699e-03, 9.674e-03, 9.649e-03, 9.623e-03, 9.598e-03, 9.574e-03, 9.549e-03, 9.524e-03, 9.500e-03, - 9.475e-03, 9.451e-03, 9.427e-03, 9.403e-03, 9.379e-03, 9.355e-03, 9.332e-03, 9.308e-03, 9.285e-03, 9.261e-03, 9.238e-03, 9.215e-03, - 9.192e-03, 9.170e-03, 9.124e-03, 9.079e-03, 9.035e-03, 8.991e-03, 8.947e-03, 8.904e-03, 8.862e-03, 8.819e-03, 8.777e-03, 8.736e-03, - 8.695e-03, 8.654e-03, 8.614e-03, 8.574e-03, 8.534e-03, 8.495e-03, 8.456e-03, 8.417e-03, 8.379e-03, 8.341e-03, 8.304e-03, 8.267e-03, - 8.230e-03, 8.193e-03, 8.157e-03, 8.068e-03, 7.981e-03, 7.896e-03, 7.812e-03, 7.731e-03, 7.651e-03, 7.572e-03, 7.495e-03, 7.420e-03, - 7.346e-03, 7.203e-03, 7.065e-03, 6.933e-03, 6.805e-03, 6.682e-03, 6.563e-03, 6.449e-03, 6.338e-03, 6.231e-03, 6.128e-03, 6.028e-03, - 5.931e-03, 5.838e-03, 5.747e-03, 3.542e-05, 5.111e-03, 4.781e-03}, - {0.0, 0.0, 0.0, 0.0, 0.0, 1.731e-02, 1.702e-02, 1.674e-02, 1.646e-02, 1.620e-02, 1.594e-02, 1.570e-02, - 1.546e-02, 1.522e-02, 1.500e-02, 1.478e-02, 1.469e-02, 1.461e-02, 1.452e-02, 1.444e-02, 1.436e-02, 1.428e-02, 1.420e-02, 1.412e-02, - 1.404e-02, 1.396e-02, 1.389e-02, 1.381e-02, 1.374e-02, 1.366e-02, 1.362e-02, 1.359e-02, 1.355e-02, 1.352e-02, 1.348e-02, 1.344e-02, - 1.341e-02, 1.337e-02, 1.334e-02, 1.330e-02, 1.327e-02, 1.323e-02, 1.320e-02, 1.316e-02, 1.313e-02, 1.310e-02, 1.306e-02, 1.303e-02, - 1.300e-02, 1.296e-02, 1.293e-02, 1.290e-02, 1.286e-02, 1.283e-02, 1.280e-02, 1.277e-02, 1.273e-02, 1.270e-02, 1.267e-02, 1.264e-02, - 1.261e-02, 1.258e-02, 1.251e-02, 1.245e-02, 1.239e-02, 1.233e-02, 1.227e-02, 1.221e-02, 1.215e-02, 1.210e-02, 1.204e-02, 1.198e-02, - 1.192e-02, 1.187e-02, 1.181e-02, 1.176e-02, 1.170e-02, 1.165e-02, 1.160e-02, 1.154e-02, 1.149e-02, 1.144e-02, 1.139e-02, 1.134e-02, - 1.129e-02, 1.124e-02, 1.119e-02, 1.107e-02, 1.095e-02, 1.083e-02, 1.071e-02, 1.060e-02, 1.049e-02, 1.038e-02, 1.028e-02, 1.018e-02, - 1.007e-02, 9.879e-03, 9.690e-03, 9.508e-03, 9.333e-03, 9.164e-03, 9.001e-03, 8.844e-03, 8.692e-03, 8.546e-03, 8.404e-03, 8.267e-03, - 8.134e-03, 8.006e-03, 7.881e-03, 3.542e-05, 7.009e-03, 6.556e-03}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.307e-02, 2.269e-02, 2.232e-02, 2.196e-02, 2.161e-02, 2.128e-02, - 2.095e-02, 2.063e-02, 2.033e-02, 2.003e-02, 1.991e-02, 1.980e-02, 1.968e-02, 1.957e-02, 1.946e-02, 1.935e-02, 1.924e-02, 1.913e-02, - 1.903e-02, 1.892e-02, 1.882e-02, 1.872e-02, 1.862e-02, 1.851e-02, 1.846e-02, 1.842e-02, 1.837e-02, 1.832e-02, 1.827e-02, 1.822e-02, - 1.817e-02, 1.812e-02, 1.808e-02, 1.803e-02, 1.798e-02, 1.793e-02, 1.789e-02, 1.784e-02, 1.779e-02, 1.775e-02, 1.770e-02, 1.766e-02, - 1.761e-02, 1.757e-02, 1.752e-02, 1.748e-02, 1.743e-02, 1.739e-02, 1.734e-02, 1.730e-02, 1.726e-02, 1.721e-02, 1.717e-02, 1.713e-02, - 1.708e-02, 1.704e-02, 1.696e-02, 1.687e-02, 1.679e-02, 1.671e-02, 1.663e-02, 1.655e-02, 1.647e-02, 1.639e-02, 1.631e-02, 1.624e-02, - 1.616e-02, 1.608e-02, 1.601e-02, 1.593e-02, 1.586e-02, 1.579e-02, 1.572e-02, 1.564e-02, 1.557e-02, 1.550e-02, 1.543e-02, 1.536e-02, - 1.530e-02, 1.523e-02, 1.516e-02, 1.499e-02, 1.483e-02, 1.467e-02, 1.452e-02, 1.437e-02, 1.422e-02, 1.407e-02, 1.393e-02, 1.379e-02, - 1.365e-02, 1.339e-02, 1.313e-02, 1.288e-02, 1.265e-02, 1.242e-02, 1.220e-02, 1.198e-02, 1.178e-02, 1.158e-02, 1.139e-02, 1.120e-02, - 1.102e-02, 1.085e-02, 1.068e-02, 3.542e-05, 9.498e-03, 8.884e-03}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3.042e-02, 2.992e-02, 2.943e-02, 2.897e-02, 2.851e-02, - 2.808e-02, 2.765e-02, 2.724e-02, 2.684e-02, 2.669e-02, 2.653e-02, 2.638e-02, 2.623e-02, 2.608e-02, 2.593e-02, 2.579e-02, 2.564e-02, - 2.550e-02, 2.536e-02, 2.522e-02, 2.508e-02, 2.494e-02, 2.481e-02, 2.474e-02, 2.468e-02, 2.461e-02, 2.454e-02, 2.448e-02, 2.441e-02, - 2.435e-02, 2.428e-02, 2.422e-02, 2.416e-02, 2.409e-02, 2.403e-02, 2.397e-02, 2.391e-02, 2.384e-02, 2.378e-02, 2.372e-02, 2.366e-02, - 2.360e-02, 2.354e-02, 2.348e-02, 2.342e-02, 2.336e-02, 2.330e-02, 2.324e-02, 2.318e-02, 2.312e-02, 2.306e-02, 2.301e-02, 2.295e-02, - 2.289e-02, 2.284e-02, 2.272e-02, 2.261e-02, 2.250e-02, 2.239e-02, 2.228e-02, 2.217e-02, 2.207e-02, 2.196e-02, 2.186e-02, 2.175e-02, - 2.165e-02, 2.155e-02, 2.145e-02, 2.135e-02, 2.125e-02, 2.115e-02, 2.106e-02, 2.096e-02, 2.087e-02, 2.077e-02, 2.068e-02, 2.059e-02, - 2.049e-02, 2.040e-02, 2.031e-02, 2.009e-02, 1.987e-02, 1.966e-02, 1.945e-02, 1.925e-02, 1.905e-02, 1.885e-02, 1.866e-02, 1.848e-02, - 1.829e-02, 1.794e-02, 1.759e-02, 1.726e-02, 1.694e-02, 1.664e-02, 1.634e-02, 1.606e-02, 1.578e-02, 1.552e-02, 1.526e-02, 1.501e-02, - 1.477e-02, 1.453e-02, 1.431e-02, 3.542e-05, 1.273e-02, 1.190e-02}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3.967e-02, 3.903e-02, 3.841e-02, 3.781e-02, - 3.723e-02, 3.666e-02, 3.612e-02, 3.559e-02, 3.538e-02, 3.518e-02, 3.497e-02, 3.477e-02, 3.457e-02, 3.438e-02, 3.419e-02, 3.399e-02, - 3.380e-02, 3.362e-02, 3.343e-02, 3.325e-02, 3.307e-02, 3.289e-02, 3.280e-02, 3.271e-02, 3.262e-02, 3.254e-02, 3.245e-02, 3.236e-02, - 3.228e-02, 3.219e-02, 3.211e-02, 3.202e-02, 3.194e-02, 3.186e-02, 3.177e-02, 3.169e-02, 3.161e-02, 3.153e-02, 3.144e-02, 3.136e-02, - 3.128e-02, 3.120e-02, 3.112e-02, 3.104e-02, 3.096e-02, 3.089e-02, 3.081e-02, 3.073e-02, 3.065e-02, 3.058e-02, 3.050e-02, 3.042e-02, - 3.035e-02, 3.027e-02, 3.012e-02, 2.997e-02, 2.983e-02, 2.968e-02, 2.954e-02, 2.939e-02, 2.925e-02, 2.911e-02, 2.897e-02, 2.884e-02, - 2.870e-02, 2.857e-02, 2.843e-02, 2.830e-02, 2.817e-02, 2.804e-02, 2.791e-02, 2.778e-02, 2.766e-02, 2.753e-02, 2.741e-02, 2.729e-02, - 2.716e-02, 2.704e-02, 2.692e-02, 2.663e-02, 2.634e-02, 2.606e-02, 2.579e-02, 2.552e-02, 2.525e-02, 2.499e-02, 2.474e-02, 2.449e-02, - 2.425e-02, 2.377e-02, 2.332e-02, 2.288e-02, 2.246e-02, 2.205e-02, 2.166e-02, 2.128e-02, 2.092e-02, 2.057e-02, 2.022e-02, 1.989e-02, - 1.957e-02, 1.927e-02, 1.897e-02, 3.542e-05, 1.687e-02, 1.578e-02}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 5.124e-02, 5.042e-02, 4.963e-02, - 4.887e-02, 4.812e-02, 4.741e-02, 4.671e-02, 4.644e-02, 4.617e-02, 4.590e-02, 4.564e-02, 4.537e-02, 4.512e-02, 4.486e-02, 4.461e-02, - 4.436e-02, 4.412e-02, 4.387e-02, 4.363e-02, 4.340e-02, 4.316e-02, 4.304e-02, 4.293e-02, 4.281e-02, 4.270e-02, 4.258e-02, 4.247e-02, - 4.236e-02, 4.225e-02, 4.213e-02, 4.202e-02, 4.191e-02, 4.180e-02, 4.169e-02, 4.158e-02, 4.148e-02, 4.137e-02, 4.126e-02, 4.116e-02, - 4.105e-02, 4.094e-02, 4.084e-02, 4.073e-02, 4.063e-02, 4.053e-02, 4.043e-02, 4.032e-02, 4.022e-02, 4.012e-02, 4.002e-02, 3.992e-02, - 3.982e-02, 3.972e-02, 3.952e-02, 3.933e-02, 3.914e-02, 3.895e-02, 3.876e-02, 3.857e-02, 3.838e-02, 3.820e-02, 3.802e-02, 3.784e-02, - 3.766e-02, 3.748e-02, 3.731e-02, 3.713e-02, 3.696e-02, 3.679e-02, 3.662e-02, 3.646e-02, 3.629e-02, 3.613e-02, 3.596e-02, 3.580e-02, - 3.564e-02, 3.548e-02, 3.533e-02, 3.494e-02, 3.456e-02, 3.419e-02, 3.383e-02, 3.348e-02, 3.313e-02, 3.279e-02, 3.246e-02, 3.213e-02, - 3.181e-02, 3.119e-02, 3.059e-02, 3.002e-02, 2.947e-02, 2.893e-02, 2.842e-02, 2.792e-02, 2.744e-02, 2.698e-02, 2.653e-02, 2.610e-02, - 2.568e-02, 2.528e-02, 2.488e-02, 3.542e-05, 2.213e-02, 2.070e-02}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 6.556e-02, 6.453e-02, - 6.353e-02, 6.256e-02, 6.163e-02, 6.072e-02, 6.036e-02, 6.001e-02, 5.966e-02, 5.932e-02, 5.898e-02, 5.864e-02, 5.831e-02, 5.799e-02, - 5.766e-02, 5.734e-02, 5.702e-02, 5.671e-02, 5.640e-02, 5.610e-02, 5.594e-02, 5.579e-02, 5.564e-02, 5.549e-02, 5.535e-02, 5.520e-02, - 5.505e-02, 5.490e-02, 5.476e-02, 5.461e-02, 5.447e-02, 5.433e-02, 5.419e-02, 5.404e-02, 5.390e-02, 5.376e-02, 5.362e-02, 5.349e-02, - 5.335e-02, 5.321e-02, 5.307e-02, 5.294e-02, 5.280e-02, 5.267e-02, 5.254e-02, 5.240e-02, 5.227e-02, 5.214e-02, 5.201e-02, 5.188e-02, - 5.175e-02, 5.162e-02, 5.136e-02, 5.111e-02, 5.086e-02, 5.061e-02, 5.036e-02, 5.012e-02, 4.988e-02, 4.964e-02, 4.940e-02, 4.917e-02, - 4.894e-02, 4.871e-02, 4.848e-02, 4.825e-02, 4.803e-02, 4.781e-02, 4.759e-02, 4.737e-02, 4.716e-02, 4.694e-02, 4.673e-02, 4.652e-02, - 4.632e-02, 4.611e-02, 4.591e-02, 4.540e-02, 4.491e-02, 4.443e-02, 4.396e-02, 4.350e-02, 4.305e-02, 4.261e-02, 4.218e-02, 4.175e-02, - 4.134e-02, 4.053e-02, 3.975e-02, 3.901e-02, 3.829e-02, 3.759e-02, 3.693e-02, 3.628e-02, 3.566e-02, 3.506e-02, 3.448e-02, 3.391e-02, - 3.337e-02, 3.284e-02, 3.233e-02, 3.542e-05, 2.875e-02, 2.689e-02}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 8.315e-02, - 8.185e-02, 8.060e-02, 7.939e-02, 7.821e-02, 7.775e-02, 7.730e-02, 7.685e-02, 7.641e-02, 7.597e-02, 7.553e-02, 7.511e-02, 7.468e-02, - 7.426e-02, 7.385e-02, 7.344e-02, 7.304e-02, 7.264e-02, 7.224e-02, 7.205e-02, 7.185e-02, 7.166e-02, 7.147e-02, 7.128e-02, 7.108e-02, - 7.090e-02, 7.071e-02, 7.052e-02, 7.033e-02, 7.015e-02, 6.996e-02, 6.978e-02, 6.960e-02, 6.942e-02, 6.923e-02, 6.906e-02, 6.888e-02, - 6.870e-02, 6.852e-02, 6.835e-02, 6.817e-02, 6.800e-02, 6.782e-02, 6.765e-02, 6.748e-02, 6.731e-02, 6.714e-02, 6.697e-02, 6.680e-02, - 6.664e-02, 6.647e-02, 6.614e-02, 6.581e-02, 6.549e-02, 6.517e-02, 6.485e-02, 6.454e-02, 6.423e-02, 6.392e-02, 6.361e-02, 6.331e-02, - 6.301e-02, 6.272e-02, 6.242e-02, 6.213e-02, 6.185e-02, 6.156e-02, 6.128e-02, 6.100e-02, 6.072e-02, 6.044e-02, 6.017e-02, 5.990e-02, - 5.963e-02, 5.937e-02, 5.911e-02, 5.846e-02, 5.783e-02, 5.721e-02, 5.660e-02, 5.601e-02, 5.543e-02, 5.486e-02, 5.430e-02, 5.375e-02, - 5.322e-02, 5.218e-02, 5.118e-02, 5.022e-02, 4.929e-02, 4.840e-02, 4.754e-02, 4.671e-02, 4.591e-02, 4.513e-02, 4.438e-02, 4.366e-02, - 4.296e-02, 4.228e-02, 4.162e-02, 3.542e-05, 3.701e-02, 3.462e-02}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.10460, 0.10290, 0.10140, 9.988e-02, 9.929e-02, 9.871e-02, 9.813e-02, 9.757e-02, 9.700e-02, 9.645e-02, 9.590e-02, 9.536e-02, - 9.482e-02, 9.430e-02, 9.377e-02, 9.325e-02, 9.274e-02, 9.224e-02, 9.199e-02, 9.174e-02, 9.149e-02, 9.124e-02, 9.100e-02, 9.075e-02, - 9.051e-02, 9.027e-02, 9.003e-02, 8.979e-02, 8.955e-02, 8.932e-02, 8.908e-02, 8.885e-02, 8.862e-02, 8.839e-02, 8.816e-02, 8.793e-02, - 8.770e-02, 8.747e-02, 8.725e-02, 8.703e-02, 8.680e-02, 8.658e-02, 8.636e-02, 8.614e-02, 8.592e-02, 8.571e-02, 8.549e-02, 8.528e-02, - 8.506e-02, 8.485e-02, 8.443e-02, 8.401e-02, 8.360e-02, 8.319e-02, 8.278e-02, 8.238e-02, 8.198e-02, 8.159e-02, 8.120e-02, 8.081e-02, - 8.043e-02, 8.005e-02, 7.968e-02, 7.931e-02, 7.894e-02, 7.857e-02, 7.821e-02, 7.786e-02, 7.750e-02, 7.715e-02, 7.680e-02, 7.646e-02, - 7.611e-02, 7.578e-02, 7.544e-02, 7.461e-02, 7.380e-02, 7.301e-02, 7.224e-02, 7.148e-02, 7.074e-02, 7.001e-02, 6.930e-02, 6.860e-02, - 6.792e-02, 6.659e-02, 6.532e-02, 6.409e-02, 6.291e-02, 6.177e-02, 6.067e-02, 5.961e-02, 5.859e-02, 5.760e-02, 5.664e-02, 5.572e-02, - 5.482e-02, 5.395e-02, 5.312e-02, 3.542e-05, 4.724e-02, 4.418e-02}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.13040, 0.12840, 0.12650, 0.12580, 0.125, 0.12430, 0.12360, 0.12290, 0.12220, 0.12150, 0.12080, - 0.12010, 0.11940, 0.11870, 0.11810, 0.11740, 0.11680, 0.11650, 0.11620, 0.11580, 0.11550, 0.11520, 0.11490, - 0.11460, 0.11430, 0.114, 0.11370, 0.11340, 0.11310, 0.11280, 0.11250, 0.11220, 0.11190, 0.11160, 0.11130, - 0.111, 0.11080, 0.11050, 0.11020, 0.10990, 0.10960, 0.10930, 0.10910, 0.10880, 0.10850, 0.10820, 0.108, - 0.10770, 0.10740, 0.10690, 0.10640, 0.10580, 0.10530, 0.10480, 0.10430, 0.10380, 0.10330, 0.10280, 0.10230, - 0.10180, 0.10130, 0.10090, 0.10040, 9.993e-02, 9.946e-02, 9.901e-02, 9.855e-02, 9.810e-02, 9.766e-02, 9.722e-02, 9.678e-02, - 9.635e-02, 9.592e-02, 9.549e-02, 9.444e-02, 9.342e-02, 9.242e-02, 9.144e-02, 9.048e-02, 8.954e-02, 8.862e-02, 8.771e-02, 8.683e-02, - 8.597e-02, 8.429e-02, 8.267e-02, 8.112e-02, 7.962e-02, 7.818e-02, 7.678e-02, 7.544e-02, 7.415e-02, 7.289e-02, 7.168e-02, 7.051e-02, - 6.938e-02, 6.828e-02, 6.722e-02, 3.542e-05, 5.978e-02, 5.591e-02}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.16150, 0.159, 0.15810, 0.15710, 0.15620, 0.15530, 0.15440, 0.15350, 0.15260, 0.15180, - 0.15090, 0.15, 0.14920, 0.14840, 0.14760, 0.14670, 0.14630, 0.14590, 0.14550, 0.14520, 0.14480, 0.14440, - 0.144, 0.14360, 0.14320, 0.14280, 0.14250, 0.14210, 0.14170, 0.14130, 0.141, 0.14060, 0.14020, 0.13990, - 0.13950, 0.13910, 0.13880, 0.13840, 0.13810, 0.13770, 0.13730, 0.137, 0.13660, 0.13630, 0.136, 0.13560, - 0.13530, 0.13490, 0.13430, 0.13360, 0.13290, 0.13230, 0.13160, 0.131, 0.13040, 0.12970, 0.12910, 0.12850, - 0.12790, 0.12730, 0.12670, 0.12610, 0.12550, 0.12490, 0.12430, 0.12380, 0.12320, 0.12260, 0.12210, 0.12150, - 0.121, 0.12050, 0.11990, 0.11860, 0.11730, 0.11610, 0.11480, 0.11360, 0.11240, 0.11130, 0.11010, 0.109, - 0.10790, 0.10580, 0.10380, 0.10190, 9.997e-02, 9.816e-02, 9.641e-02, 9.473e-02, 9.310e-02, 9.152e-02, 9.000e-02, 8.853e-02, - 8.711e-02, 8.573e-02, 8.440e-02, 3.542e-05, 7.505e-02, 7.019e-02}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.19840, 0.19720, 0.19610, 0.19490, 0.19370, 0.19260, 0.19150, 0.19040, 0.18930, 0.18820, 0.18720, - 0.18610, 0.18510, 0.184, 0.183, 0.18250, 0.182, 0.18150, 0.181, 0.18050, 0.18, 0.17960, 0.17910, 0.17860, - 0.17810, 0.17760, 0.17720, 0.17670, 0.17620, 0.17580, 0.17530, 0.17480, 0.17440, 0.17390, 0.17350, 0.173, 0.17260, - 0.17210, 0.17170, 0.17120, 0.17080, 0.17040, 0.16990, 0.16950, 0.16910, 0.16870, 0.16820, 0.16740, 0.16660, 0.16570, - 0.16490, 0.16410, 0.16330, 0.16250, 0.16170, 0.16090, 0.16020, 0.15940, 0.15870, 0.15790, 0.15720, 0.15640, 0.15570, - 0.155, 0.15430, 0.15360, 0.15290, 0.15220, 0.15150, 0.15080, 0.15010, 0.14950, 0.14780, 0.14620, 0.14460, 0.14310, - 0.14160, 0.14010, 0.13870, 0.13730, 0.13590, 0.13450, 0.13190, 0.12940, 0.12690, 0.12460, 0.12230, 0.12010, 0.118, - 0.116, 0.11410, 0.11220, 0.11030, 0.10850, 0.10680, 0.10520, 3.542e-05, 9.352e-02, 8.746e-02}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.21510, 0.21380, 0.21250, 0.21130, 0.21, 0.20880, 0.20760, 0.20640, 0.20520, 0.204, 0.20290, 0.20180, 0.20060, 0.19950, - 0.199, 0.19840, 0.19790, 0.19730, 0.19680, 0.19630, 0.19570, 0.19520, 0.19470, 0.19420, 0.19360, 0.19310, 0.19260, 0.19210, 0.19160, - 0.19110, 0.19060, 0.19010, 0.18960, 0.18910, 0.18860, 0.18810, 0.18760, 0.18720, 0.18670, 0.18620, 0.18570, 0.18520, 0.18480, 0.18430, - 0.18380, 0.18340, 0.18250, 0.18150, 0.18060, 0.17980, 0.17890, 0.178, 0.17710, 0.17630, 0.17540, 0.17460, 0.17380, 0.17290, 0.17210, - 0.17130, 0.17050, 0.16970, 0.16890, 0.16820, 0.16740, 0.16660, 0.16590, 0.16510, 0.16440, 0.16360, 0.16290, 0.16110, 0.15940, 0.15770, - 0.156, 0.15430, 0.15270, 0.15110, 0.14960, 0.14810, 0.14660, 0.14370, 0.141, 0.13830, 0.13580, 0.13330, 0.13090, 0.12860, 0.12640, - 0.12430, 0.12220, 0.12020, 0.11830, 0.11640, 0.11460, 3.542e-05, 0.10190, 9.531e-02}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.23290, 0.23150, 0.23010, 0.22870, 0.22740, 0.22610, 0.22480, 0.22350, 0.22220, 0.221, 0.21970, 0.21850, 0.21730, - 0.21670, 0.21610, 0.21550, 0.21490, 0.21430, 0.21370, 0.21310, 0.21260, 0.212, 0.21140, 0.21090, 0.21030, 0.20970, 0.20920, 0.20860, - 0.20810, 0.20750, 0.207, 0.20640, 0.20590, 0.20540, 0.20480, 0.20430, 0.20380, 0.20330, 0.20270, 0.20220, 0.20170, 0.20120, 0.20070, - 0.20020, 0.19970, 0.19870, 0.19770, 0.19670, 0.19570, 0.19480, 0.19380, 0.19290, 0.19190, 0.191, 0.19010, 0.18920, 0.18830, 0.18740, - 0.18650, 0.18560, 0.18480, 0.18390, 0.18310, 0.18220, 0.18140, 0.18060, 0.17980, 0.179, 0.17820, 0.17740, 0.17540, 0.17350, 0.17160, - 0.16980, 0.168, 0.16630, 0.16450, 0.16290, 0.16120, 0.15960, 0.15650, 0.15350, 0.15060, 0.14780, 0.14510, 0.14250, 0.14, 0.13760, - 0.13530, 0.133, 0.13090, 0.12880, 0.12670, 0.12480, 3.542e-05, 0.11090, 0.1037}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.25180, 0.25030, 0.24890, 0.24740, 0.246, 0.24450, 0.24310, 0.24170, 0.24040, 0.239, 0.23770, 0.23640, - 0.23570, 0.23510, 0.23440, 0.23380, 0.23310, 0.23250, 0.23190, 0.23120, 0.23060, 0.23, 0.22940, 0.22880, 0.22810, 0.22750, 0.22690, - 0.22630, 0.22570, 0.22510, 0.22460, 0.224, 0.22340, 0.22280, 0.22220, 0.22160, 0.22110, 0.22050, 0.21990, 0.21940, 0.21880, 0.21830, - 0.21770, 0.21720, 0.21610, 0.215, 0.21390, 0.21290, 0.21180, 0.21080, 0.20970, 0.20870, 0.20770, 0.20670, 0.20570, 0.20480, 0.20380, - 0.20280, 0.20190, 0.201, 0.2, 0.19910, 0.19820, 0.19730, 0.19640, 0.19550, 0.19460, 0.19370, 0.19290, 0.19080, 0.18870, 0.18660, - 0.18470, 0.18270, 0.18080, 0.17890, 0.17710, 0.17530, 0.17360, 0.17020, 0.16690, 0.16370, 0.16070, 0.15780, 0.155, 0.15230, 0.14960, - 0.14710, 0.14470, 0.14230, 0.14, 0.13780, 0.13560, 3.542e-05, 0.12060, 0.1128}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.27210, 0.27050, 0.26890, 0.26730, 0.26580, 0.26420, 0.26270, 0.26120, 0.25970, 0.25830, 0.25680, - 0.25610, 0.25540, 0.25470, 0.254, 0.25330, 0.25260, 0.25190, 0.25130, 0.25060, 0.24990, 0.24920, 0.24860, 0.24790, 0.24720, 0.24660, - 0.24590, 0.24530, 0.24460, 0.244, 0.24330, 0.24270, 0.24210, 0.24140, 0.24080, 0.24020, 0.23960, 0.239, 0.23840, 0.23770, 0.23710, - 0.23650, 0.23590, 0.23480, 0.23360, 0.23240, 0.23130, 0.23010, 0.229, 0.22790, 0.22680, 0.22570, 0.22460, 0.22350, 0.22250, 0.22140, - 0.22040, 0.21930, 0.21830, 0.21730, 0.21630, 0.21530, 0.21430, 0.21330, 0.21240, 0.21140, 0.21050, 0.20950, 0.20720, 0.205, 0.20270, - 0.20060, 0.19850, 0.19640, 0.19440, 0.19240, 0.19040, 0.18850, 0.18480, 0.18130, 0.17790, 0.17460, 0.17140, 0.16830, 0.16540, 0.16250, - 0.15980, 0.15710, 0.15460, 0.15210, 0.14970, 0.14730, 3.542e-05, 0.131, 0.1225}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.29370, 0.29190, 0.29020, 0.28850, 0.28690, 0.28520, 0.28360, 0.282, 0.28040, 0.27880, - 0.278, 0.27730, 0.27650, 0.27570, 0.275, 0.27420, 0.27350, 0.27270, 0.272, 0.27130, 0.27050, 0.26980, 0.26910, 0.26840, 0.26760, - 0.26690, 0.26620, 0.26550, 0.26480, 0.26410, 0.26340, 0.26280, 0.26210, 0.26140, 0.26070, 0.26, 0.25940, 0.25870, 0.258, 0.25740, - 0.25670, 0.25610, 0.25480, 0.25350, 0.25220, 0.251, 0.24980, 0.24850, 0.24730, 0.24610, 0.24490, 0.24370, 0.24260, 0.24140, 0.24030, - 0.23910, 0.238, 0.23690, 0.23580, 0.23470, 0.23360, 0.23260, 0.23150, 0.23050, 0.22940, 0.22840, 0.22740, 0.22490, 0.22240, 0.22, - 0.21770, 0.21540, 0.21310, 0.21090, 0.20880, 0.20660, 0.20460, 0.20060, 0.19670, 0.193, 0.18940, 0.186, 0.18270, 0.17950, 0.17640, - 0.17340, 0.17050, 0.16770, 0.165, 0.16240, 0.15990, 3.542e-05, 0.14210, 0.1329}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.31660, 0.31480, 0.31290, 0.31110, 0.30930, 0.30760, 0.30580, 0.30410, 0.30240, - 0.30150, 0.30070, 0.29990, 0.299, 0.29820, 0.29740, 0.29660, 0.29580, 0.295, 0.29420, 0.29340, 0.29260, 0.29180, 0.291, 0.29020, - 0.28940, 0.28870, 0.28790, 0.28720, 0.28640, 0.28560, 0.28490, 0.28420, 0.28340, 0.28270, 0.282, 0.28120, 0.28050, 0.27980, 0.27910, - 0.27840, 0.27760, 0.27620, 0.27490, 0.27350, 0.27210, 0.27080, 0.26940, 0.26810, 0.26680, 0.26550, 0.26430, 0.263, 0.26170, 0.26050, - 0.25930, 0.258, 0.25680, 0.25560, 0.25450, 0.25330, 0.25210, 0.251, 0.24980, 0.24870, 0.24760, 0.24650, 0.24380, 0.24110, 0.23850, - 0.23590, 0.23350, 0.231, 0.22860, 0.22630, 0.224, 0.22170, 0.21740, 0.21320, 0.20920, 0.20530, 0.20160, 0.198, 0.19450, 0.19120, - 0.18790, 0.18480, 0.18180, 0.17880, 0.176, 0.17330, 3.542e-05, 0.154, 0.1441}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.34110, 0.33910, 0.33710, 0.33520, 0.33320, 0.33130, 0.32940, 0.32760, - 0.32670, 0.32580, 0.32490, 0.324, 0.32310, 0.32220, 0.32130, 0.32040, 0.31950, 0.31870, 0.31780, 0.31690, 0.31610, 0.31520, 0.31440, - 0.31350, 0.31270, 0.31190, 0.31110, 0.31020, 0.30940, 0.30860, 0.30780, 0.307, 0.30620, 0.30540, 0.30460, 0.30380, 0.30310, 0.30230, - 0.30150, 0.30070, 0.29920, 0.29770, 0.29620, 0.29470, 0.29330, 0.29180, 0.29040, 0.289, 0.28760, 0.28620, 0.28480, 0.28350, 0.28210, - 0.28080, 0.27950, 0.27820, 0.27690, 0.27560, 0.27430, 0.27310, 0.27180, 0.27060, 0.26930, 0.26810, 0.26690, 0.264, 0.26110, 0.25830, - 0.25550, 0.25280, 0.25020, 0.24760, 0.245, 0.24260, 0.24010, 0.23540, 0.23090, 0.22650, 0.22230, 0.21830, 0.21440, 0.21060, 0.207, - 0.20350, 0.20010, 0.19680, 0.19360, 0.19060, 0.18760, 3.542e-05, 0.16680, 0.156}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.36710, 0.36490, 0.36280, 0.36070, 0.35860, 0.35660, 0.35460, - 0.35360, 0.35260, 0.35160, 0.35060, 0.34960, 0.34870, 0.34770, 0.34680, 0.34580, 0.34490, 0.34390, 0.343, 0.34210, 0.34110, 0.34020, - 0.33930, 0.33840, 0.33750, 0.33660, 0.33570, 0.33480, 0.334, 0.33310, 0.33220, 0.33130, 0.33050, 0.32960, 0.32880, 0.32790, 0.32710, - 0.32630, 0.32540, 0.32380, 0.32210, 0.32050, 0.31890, 0.31730, 0.31580, 0.31420, 0.31270, 0.31120, 0.30970, 0.30820, 0.30670, 0.30520, - 0.30380, 0.30240, 0.30090, 0.29950, 0.29820, 0.29680, 0.29540, 0.29410, 0.29270, 0.29140, 0.29010, 0.28880, 0.28560, 0.28250, 0.27940, - 0.27640, 0.27350, 0.27060, 0.26780, 0.26510, 0.26240, 0.25980, 0.25460, 0.24970, 0.245, 0.24050, 0.23610, 0.23190, 0.22780, 0.22390, - 0.22010, 0.21640, 0.21290, 0.20940, 0.20610, 0.20290, 3.542e-05, 0.18040, 0.1687}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.39460, 0.39230, 0.39010, 0.38780, 0.38560, 0.38340, - 0.38230, 0.38120, 0.38020, 0.37910, 0.37810, 0.377, 0.376, 0.37490, 0.37390, 0.37290, 0.37190, 0.37080, 0.36980, 0.36880, 0.36780, - 0.36690, 0.36590, 0.36490, 0.36390, 0.363, 0.362, 0.361, 0.36010, 0.35920, 0.35820, 0.35730, 0.35640, 0.35540, 0.35450, 0.35360, - 0.35270, 0.35180, 0.35, 0.34820, 0.34650, 0.34470, 0.343, 0.34130, 0.33970, 0.338, 0.33640, 0.33470, 0.33310, 0.33150, 0.32990, - 0.32840, 0.32680, 0.32530, 0.32380, 0.32230, 0.32080, 0.31930, 0.31780, 0.31640, 0.315, 0.31350, 0.31210, 0.30870, 0.30530, 0.302, - 0.29870, 0.29560, 0.29250, 0.28940, 0.28650, 0.28360, 0.28070, 0.27520, 0.26990, 0.26480, 0.25990, 0.25510, 0.25060, 0.24620, 0.24190, - 0.23780, 0.23390, 0.23, 0.22630, 0.22270, 0.21930, 3.542e-05, 0.19490, 0.1823}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.42390, 0.42140, 0.419, 0.41660, 0.41420, - 0.413, 0.41190, 0.41070, 0.40960, 0.40840, 0.40730, 0.40610, 0.405, 0.40390, 0.40280, 0.40170, 0.40060, 0.39950, 0.39840, 0.39730, - 0.39630, 0.39520, 0.39410, 0.39310, 0.392, 0.391, 0.39, 0.38890, 0.38790, 0.38690, 0.38590, 0.38490, 0.38390, 0.38290, 0.38190, - 0.38090, 0.37990, 0.378, 0.37610, 0.37420, 0.37230, 0.37050, 0.36860, 0.36680, 0.365, 0.36320, 0.36150, 0.35970, 0.358, 0.35630, - 0.35460, 0.35290, 0.35130, 0.34960, 0.348, 0.34640, 0.34480, 0.34320, 0.34160, 0.34010, 0.33860, 0.337, 0.33330, 0.32960, 0.32610, - 0.32260, 0.31910, 0.31580, 0.31250, 0.30930, 0.30620, 0.30310, 0.29710, 0.29140, 0.28590, 0.28060, 0.27540, 0.27050, 0.26580, 0.26120, - 0.25680, 0.25250, 0.24830, 0.24430, 0.24050, 0.23670, 3.542e-05, 0.21040, 0.1968}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.45490, 0.45230, 0.44970, 0.44710, - 0.44580, 0.44450, 0.44330, 0.442, 0.44080, 0.43960, 0.43830, 0.43710, 0.43590, 0.43470, 0.43350, 0.43230, 0.43110, 0.43, 0.42880, - 0.42760, 0.42650, 0.42530, 0.42420, 0.42310, 0.42190, 0.42080, 0.41970, 0.41860, 0.41750, 0.41640, 0.41530, 0.41420, 0.41320, 0.41210, - 0.411, 0.41, 0.40790, 0.40580, 0.40380, 0.40170, 0.39970, 0.39770, 0.39580, 0.39380, 0.39190, 0.39, 0.38810, 0.38620, 0.38440, - 0.38260, 0.38080, 0.379, 0.37720, 0.37540, 0.37370, 0.372, 0.37030, 0.36860, 0.36690, 0.36520, 0.36360, 0.35950, 0.35560, 0.35170, - 0.34790, 0.34420, 0.34060, 0.33710, 0.33360, 0.33020, 0.32690, 0.32050, 0.31430, 0.30830, 0.30260, 0.29710, 0.29180, 0.28660, 0.28170, - 0.27690, 0.27230, 0.26780, 0.26350, 0.25930, 0.25530, 3.542e-05, 0.22690, 0.2122}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.48780, 0.48490, 0.48210, - 0.48080, 0.47940, 0.478, 0.47670, 0.47530, 0.474, 0.47270, 0.47130, 0.47, 0.46870, 0.46740, 0.46620, 0.46490, 0.46360, 0.46230, - 0.46110, 0.45980, 0.45860, 0.45740, 0.45610, 0.45490, 0.45370, 0.45250, 0.45130, 0.45010, 0.44890, 0.44780, 0.44660, 0.44540, 0.44430, - 0.44310, 0.442, 0.43970, 0.43750, 0.43530, 0.43310, 0.43090, 0.42870, 0.42660, 0.42450, 0.42240, 0.42040, 0.41830, 0.41630, 0.41430, - 0.41240, 0.41040, 0.40850, 0.40650, 0.40460, 0.40280, 0.40090, 0.39910, 0.39720, 0.39540, 0.39360, 0.39190, 0.38750, 0.38320, 0.37910, - 0.375, 0.371, 0.36710, 0.36330, 0.35950, 0.35590, 0.35230, 0.34530, 0.33870, 0.33230, 0.32610, 0.32010, 0.31440, 0.30890, 0.30350, - 0.29840, 0.29340, 0.28860, 0.28390, 0.27940, 0.27510, 3.542e-05, 0.24450, 0.2287}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.52250, 0.51950, - 0.518, 0.51650, 0.51510, 0.51360, 0.51210, 0.51070, 0.50920, 0.50780, 0.50640, 0.505, 0.50360, 0.50220, 0.50080, 0.49940, 0.49810, - 0.49670, 0.49540, 0.494, 0.49270, 0.49140, 0.49010, 0.48870, 0.48740, 0.48610, 0.48490, 0.48360, 0.48230, 0.481, 0.47980, 0.47850, - 0.47730, 0.47610, 0.47360, 0.47120, 0.46880, 0.46640, 0.46410, 0.46180, 0.45950, 0.45720, 0.455, 0.45270, 0.45050, 0.44840, 0.44620, - 0.44410, 0.442, 0.43990, 0.43780, 0.43580, 0.43370, 0.43170, 0.42970, 0.42780, 0.42580, 0.42390, 0.422, 0.41730, 0.41270, 0.40820, - 0.40380, 0.39950, 0.39530, 0.39110, 0.38710, 0.38320, 0.37930, 0.37180, 0.36460, 0.35770, 0.35110, 0.34460, 0.33850, 0.33250, 0.32680, - 0.32120, 0.31590, 0.31070, 0.30570, 0.30080, 0.29610, 3.542e-05, 0.26320, 0.2461}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.55930, - 0.55770, 0.55610, 0.55450, 0.55290, 0.55130, 0.54980, 0.54820, 0.54670, 0.54510, 0.54360, 0.54210, 0.54060, 0.53910, 0.53760, 0.53610, - 0.53460, 0.53320, 0.53170, 0.53030, 0.52890, 0.52740, 0.526, 0.52460, 0.52320, 0.52180, 0.52050, 0.51910, 0.51770, 0.51640, 0.515, - 0.51370, 0.51230, 0.50970, 0.50710, 0.50450, 0.50190, 0.49940, 0.49690, 0.49440, 0.492, 0.48960, 0.48720, 0.48480, 0.48240, 0.48010, - 0.47780, 0.47550, 0.47330, 0.47110, 0.46880, 0.46670, 0.46450, 0.46230, 0.46020, 0.45810, 0.456, 0.454, 0.44890, 0.44390, 0.43910, - 0.43440, 0.42970, 0.42520, 0.42080, 0.41640, 0.41220, 0.408, 0.4, 0.39220, 0.38480, 0.37760, 0.37070, 0.36410, 0.35760, 0.35150, - 0.34550, 0.33970, 0.33410, 0.32870, 0.32350, 0.31850, 3.542e-05, 0.28310, 0.2647}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.57850, 0.57680, 0.57510, 0.57350, 0.57180, 0.57020, 0.56860, 0.567, 0.56540, 0.56380, 0.56220, 0.56070, 0.55910, 0.55760, 0.556, - 0.55450, 0.553, 0.55150, 0.55, 0.54850, 0.547, 0.54550, 0.54410, 0.54260, 0.54120, 0.53980, 0.53830, 0.53690, 0.53550, 0.53410, - 0.53270, 0.53130, 0.52860, 0.52590, 0.52320, 0.52050, 0.51790, 0.51530, 0.51270, 0.51020, 0.50770, 0.50520, 0.50270, 0.50030, 0.49790, - 0.49550, 0.49310, 0.49080, 0.48850, 0.48620, 0.48390, 0.48160, 0.47940, 0.47720, 0.475, 0.47290, 0.47070, 0.46550, 0.46030, 0.45530, - 0.45040, 0.44560, 0.44090, 0.43630, 0.43180, 0.42740, 0.423, 0.41470, 0.40660, 0.39890, 0.39150, 0.38430, 0.37740, 0.37080, 0.36440, - 0.35820, 0.35220, 0.34640, 0.34080, 0.33540, 0.33020, 3.542e-05, 0.29350, 0.2744}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.59820, 0.59640, 0.59470, 0.593, 0.59130, 0.58960, 0.588, 0.58630, 0.58470, 0.583, 0.58140, 0.57980, 0.57820, 0.57660, - 0.575, 0.57340, 0.57180, 0.57030, 0.56870, 0.56720, 0.56570, 0.56420, 0.56270, 0.56120, 0.55970, 0.55820, 0.55670, 0.55520, 0.55380, - 0.55230, 0.55090, 0.548, 0.54520, 0.54240, 0.53970, 0.53690, 0.53420, 0.53160, 0.52890, 0.52630, 0.52370, 0.52120, 0.51870, 0.51620, - 0.51370, 0.51120, 0.50880, 0.50640, 0.504, 0.50170, 0.49930, 0.497, 0.49470, 0.49250, 0.49020, 0.488, 0.48250, 0.47720, 0.472, - 0.46690, 0.46190, 0.457, 0.45220, 0.44760, 0.443, 0.43850, 0.42980, 0.42150, 0.41350, 0.40580, 0.39840, 0.39120, 0.38430, 0.37770, - 0.37130, 0.36510, 0.35910, 0.35330, 0.34760, 0.34220, 3.542e-05, 0.30420, 0.2844}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.61840, 0.61660, 0.61480, 0.61310, 0.61130, 0.60960, 0.60790, 0.60620, 0.60450, 0.60280, 0.60110, 0.59940, 0.59780, - 0.59610, 0.59450, 0.59280, 0.59120, 0.58960, 0.588, 0.58640, 0.58490, 0.58330, 0.58170, 0.58020, 0.57860, 0.57710, 0.57560, 0.57410, - 0.57260, 0.57110, 0.56810, 0.56520, 0.56230, 0.55940, 0.55660, 0.55380, 0.551, 0.54830, 0.54560, 0.54290, 0.54020, 0.53760, 0.535, - 0.53240, 0.52990, 0.52740, 0.52490, 0.52240, 0.52, 0.51750, 0.51510, 0.51280, 0.51040, 0.50810, 0.50580, 0.50010, 0.49460, 0.48920, - 0.48390, 0.47870, 0.47360, 0.46870, 0.46390, 0.45910, 0.45450, 0.44550, 0.43680, 0.42850, 0.42050, 0.41290, 0.40540, 0.39830, 0.39140, - 0.38470, 0.37830, 0.37210, 0.36610, 0.36030, 0.35460, 3.542e-05, 0.31520, 0.2948}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.63920, 0.63740, 0.63550, 0.63370, 0.63190, 0.63010, 0.62830, 0.62660, 0.62480, 0.623, 0.62130, 0.61960, - 0.61790, 0.61620, 0.61450, 0.61280, 0.61110, 0.60950, 0.60780, 0.60620, 0.60460, 0.60290, 0.60130, 0.59970, 0.59810, 0.59660, 0.595, - 0.59340, 0.59190, 0.58880, 0.58580, 0.58270, 0.57980, 0.57680, 0.57390, 0.571, 0.56820, 0.56540, 0.56260, 0.55990, 0.55710, 0.55440, - 0.55180, 0.54910, 0.54650, 0.54390, 0.54140, 0.53880, 0.53630, 0.53380, 0.53140, 0.52890, 0.52650, 0.52410, 0.51820, 0.51250, 0.50690, - 0.50140, 0.496, 0.49080, 0.48570, 0.48060, 0.47570, 0.47090, 0.46160, 0.45260, 0.444, 0.43570, 0.42780, 0.42010, 0.41270, 0.40550, - 0.39860, 0.392, 0.38550, 0.37930, 0.37330, 0.36740, 3.542e-05, 0.32660, 0.3054}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.66060, 0.65870, 0.65680, 0.65490, 0.653, 0.65120, 0.64930, 0.64750, 0.64570, 0.64390, 0.64210, - 0.64030, 0.63850, 0.63680, 0.635, 0.63330, 0.63160, 0.62990, 0.62820, 0.62650, 0.62480, 0.62310, 0.62150, 0.61980, 0.61820, 0.61650, - 0.61490, 0.61330, 0.61010, 0.607, 0.60380, 0.60070, 0.59770, 0.59470, 0.59170, 0.58870, 0.58580, 0.58290, 0.58010, 0.57720, 0.57440, - 0.57170, 0.56890, 0.56620, 0.56350, 0.56090, 0.55820, 0.55560, 0.55310, 0.55050, 0.548, 0.54550, 0.543, 0.53690, 0.53090, 0.52510, - 0.51940, 0.51390, 0.50840, 0.50310, 0.49790, 0.49280, 0.48780, 0.47820, 0.46890, 0.46, 0.45140, 0.44310, 0.43510, 0.42750, 0.42010, - 0.41290, 0.406, 0.39930, 0.39290, 0.38660, 0.38060, 3.542e-05, 0.33830, 0.3163}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.68250, 0.68050, 0.67860, 0.67660, 0.67470, 0.67280, 0.67090, 0.669, 0.66710, 0.66530, - 0.66340, 0.66160, 0.65980, 0.658, 0.65620, 0.65440, 0.65260, 0.65080, 0.64910, 0.64730, 0.64560, 0.64390, 0.64210, 0.64040, 0.63870, - 0.63710, 0.63540, 0.63210, 0.62880, 0.62550, 0.62230, 0.61920, 0.616, 0.61290, 0.60990, 0.60690, 0.60390, 0.60090, 0.598, 0.59510, - 0.59220, 0.58930, 0.58650, 0.58370, 0.581, 0.57830, 0.57560, 0.57290, 0.57020, 0.56760, 0.565, 0.56240, 0.55610, 0.54990, 0.54390, - 0.538, 0.53230, 0.52660, 0.52110, 0.51570, 0.51040, 0.50530, 0.49520, 0.48560, 0.47640, 0.46750, 0.45890, 0.45070, 0.44270, 0.435, - 0.42760, 0.42050, 0.41360, 0.40690, 0.40040, 0.39410, 3.542e-05, 0.35030, 0.3276}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.705, 0.703, 0.701, 0.699, 0.697, 0.695, 0.69310, 0.69110, 0.68920, - 0.68730, 0.68530, 0.68350, 0.68160, 0.67970, 0.67780, 0.676, 0.67420, 0.67230, 0.67050, 0.66870, 0.66690, 0.66510, 0.66340, 0.66160, - 0.65990, 0.65810, 0.65470, 0.65130, 0.64790, 0.64460, 0.64130, 0.63810, 0.63480, 0.63170, 0.62850, 0.62540, 0.62230, 0.61930, 0.61630, - 0.61330, 0.61040, 0.60740, 0.60460, 0.60170, 0.59890, 0.59610, 0.59330, 0.59050, 0.58780, 0.58510, 0.58250, 0.57590, 0.56950, 0.56330, - 0.55710, 0.55120, 0.54530, 0.53960, 0.534, 0.52860, 0.52320, 0.51280, 0.50280, 0.49330, 0.484, 0.47520, 0.46660, 0.45840, 0.45050, - 0.44280, 0.43540, 0.42820, 0.42130, 0.41460, 0.40810, 3.542e-05, 0.36270, 0.3391}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.72820, 0.72610, 0.724, 0.72190, 0.71990, 0.71780, 0.71580, 0.71380, - 0.71180, 0.70980, 0.70790, 0.70590, 0.704, 0.702, 0.70010, 0.69820, 0.69630, 0.69440, 0.69250, 0.69070, 0.68880, 0.687, 0.68520, - 0.68340, 0.68160, 0.678, 0.67450, 0.671, 0.66750, 0.66410, 0.66070, 0.65740, 0.65410, 0.65080, 0.64760, 0.64440, 0.64130, 0.63810, - 0.63510, 0.632, 0.629, 0.626, 0.623, 0.62010, 0.61720, 0.61430, 0.61150, 0.60860, 0.60580, 0.60310, 0.59630, 0.58960, 0.58320, - 0.57680, 0.57060, 0.56460, 0.55870, 0.55290, 0.54720, 0.54170, 0.53090, 0.52060, 0.51060, 0.50110, 0.49190, 0.48310, 0.47450, 0.46630, - 0.45840, 0.45070, 0.44330, 0.43610, 0.42920, 0.42240, 3.542e-05, 0.37540, 0.3511}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.75190, 0.74970, 0.74760, 0.74550, 0.74330, 0.74120, 0.73920, - 0.73710, 0.735, 0.733, 0.73090, 0.72890, 0.72690, 0.72490, 0.723, 0.721, 0.719, 0.71710, 0.71520, 0.71320, 0.71130, 0.70940, - 0.70760, 0.70570, 0.702, 0.69830, 0.69470, 0.69110, 0.68760, 0.68410, 0.68060, 0.67720, 0.67380, 0.67050, 0.66720, 0.66390, 0.66060, - 0.65740, 0.65430, 0.65110, 0.648, 0.645, 0.64190, 0.63890, 0.63590, 0.633, 0.63010, 0.62720, 0.62430, 0.61730, 0.61040, 0.60370, - 0.59710, 0.59070, 0.58440, 0.57830, 0.57230, 0.56640, 0.56070, 0.54950, 0.53880, 0.52850, 0.51870, 0.50910, 0.5, 0.49120, 0.48260, - 0.47440, 0.46650, 0.45880, 0.45140, 0.44420, 0.43720, 3.542e-05, 0.38860, 0.3633}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.77630, 0.774, 0.77180, 0.76960, 0.76740, 0.76530, - 0.76310, 0.761, 0.75890, 0.75670, 0.75470, 0.75260, 0.75050, 0.74840, 0.74640, 0.74440, 0.74240, 0.74040, 0.73840, 0.73640, 0.73440, - 0.73250, 0.73050, 0.72670, 0.72290, 0.71910, 0.71540, 0.71170, 0.70810, 0.70450, 0.701, 0.69750, 0.694, 0.69060, 0.68720, 0.68380, - 0.68050, 0.67720, 0.674, 0.67070, 0.66760, 0.66440, 0.66130, 0.65820, 0.65510, 0.65210, 0.64910, 0.64610, 0.63880, 0.63170, 0.62480, - 0.618, 0.61130, 0.60480, 0.59850, 0.59230, 0.58620, 0.58020, 0.56870, 0.55760, 0.547, 0.53670, 0.52690, 0.51740, 0.50820, 0.49940, - 0.49090, 0.48270, 0.47470, 0.46710, 0.45960, 0.45240, 3.542e-05, 0.40210, 0.3759}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.80130, 0.799, 0.79670, 0.79440, 0.79220, - 0.78990, 0.78770, 0.78550, 0.78330, 0.78110, 0.779, 0.77680, 0.77470, 0.77260, 0.77050, 0.76840, 0.76630, 0.76420, 0.76220, 0.76010, - 0.75810, 0.75610, 0.75210, 0.74820, 0.74430, 0.74040, 0.73660, 0.73280, 0.72910, 0.72540, 0.72180, 0.71820, 0.71470, 0.71110, 0.70770, - 0.70420, 0.70080, 0.69740, 0.69410, 0.69080, 0.68750, 0.68430, 0.68110, 0.67790, 0.67480, 0.67170, 0.66860, 0.661, 0.65370, 0.64650, - 0.63940, 0.63250, 0.62580, 0.61920, 0.61280, 0.60650, 0.60030, 0.58840, 0.57690, 0.56590, 0.55530, 0.54510, 0.53530, 0.52580, 0.51670, - 0.50790, 0.49940, 0.49110, 0.48320, 0.47550, 0.468, 3.542e-05, 0.41590, 0.3889}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.82690, 0.82460, 0.82220, 0.81990, - 0.81750, 0.81520, 0.81290, 0.81070, 0.80840, 0.80620, 0.80390, 0.80170, 0.79950, 0.79730, 0.79520, 0.793, 0.79090, 0.78870, 0.78660, - 0.78450, 0.78240, 0.77830, 0.77420, 0.77010, 0.76610, 0.76220, 0.75830, 0.75440, 0.75060, 0.74690, 0.74310, 0.73940, 0.73580, 0.73220, - 0.72860, 0.72510, 0.72160, 0.71810, 0.71470, 0.71130, 0.708, 0.70470, 0.70140, 0.69810, 0.69490, 0.69170, 0.68390, 0.67630, 0.66880, - 0.66150, 0.65440, 0.64740, 0.64060, 0.63390, 0.62740, 0.621, 0.60870, 0.59680, 0.58540, 0.57440, 0.56390, 0.55370, 0.54390, 0.53450, - 0.52530, 0.51650, 0.508, 0.49980, 0.49180, 0.48410, 3.542e-05, 0.43020, 0.4023}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.85320, 0.85080, 0.84840, - 0.846, 0.84360, 0.84120, 0.83880, 0.83650, 0.83410, 0.83180, 0.82950, 0.82730, 0.825, 0.82270, 0.82050, 0.81830, 0.81610, 0.81390, - 0.81170, 0.80950, 0.80520, 0.801, 0.79680, 0.79260, 0.78850, 0.78450, 0.78050, 0.77650, 0.77260, 0.76880, 0.76490, 0.76120, 0.75740, - 0.75370, 0.75010, 0.74650, 0.74290, 0.73930, 0.73580, 0.73240, 0.72890, 0.72550, 0.72210, 0.71880, 0.71550, 0.70740, 0.69950, 0.69180, - 0.68420, 0.67680, 0.66960, 0.66260, 0.65570, 0.64890, 0.64230, 0.62950, 0.61720, 0.60540, 0.59410, 0.58310, 0.57260, 0.56250, 0.55270, - 0.54330, 0.53420, 0.52540, 0.51690, 0.50860, 0.50060, 3.542e-05, 0.44490, 0.416}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.88020, 0.87770, - 0.87520, 0.87270, 0.87030, 0.86780, 0.86540, 0.86290, 0.86050, 0.85820, 0.85580, 0.85340, 0.85110, 0.84880, 0.84650, 0.84420, 0.84190, - 0.83960, 0.83740, 0.83290, 0.82850, 0.82420, 0.81990, 0.81560, 0.81140, 0.80730, 0.80320, 0.79920, 0.79510, 0.79120, 0.78730, 0.78340, - 0.77960, 0.77580, 0.772, 0.76830, 0.76460, 0.761, 0.75740, 0.75390, 0.75030, 0.74680, 0.74340, 0.74, 0.73160, 0.72340, 0.71540, - 0.70760, 0.69990, 0.69240, 0.68510, 0.678, 0.671, 0.66420, 0.65090, 0.63820, 0.626, 0.61430, 0.603, 0.59210, 0.58160, 0.57150, - 0.56170, 0.55230, 0.54320, 0.53440, 0.52590, 0.51760, 3.542e-05, 0.46, 0.4301}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.90790, - 0.90530, 0.90270, 0.90020, 0.89760, 0.89510, 0.89260, 0.89010, 0.88760, 0.88520, 0.88270, 0.88030, 0.87790, 0.87550, 0.87310, 0.87070, - 0.86840, 0.86610, 0.86140, 0.85690, 0.85240, 0.84790, 0.84350, 0.83920, 0.83490, 0.83060, 0.82640, 0.82230, 0.81820, 0.81410, 0.81010, - 0.80610, 0.80220, 0.79830, 0.79450, 0.79070, 0.78690, 0.78320, 0.77950, 0.77590, 0.77220, 0.76870, 0.76510, 0.75640, 0.74790, 0.73970, - 0.73160, 0.72370, 0.71590, 0.70840, 0.701, 0.69380, 0.68670, 0.673, 0.65980, 0.64720, 0.635, 0.62340, 0.61210, 0.60130, 0.59080, - 0.58070, 0.571, 0.56150, 0.55240, 0.54360, 0.53510, 3.542e-05, 0.47550, 0.4446}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.93630, 0.93360, 0.931, 0.92830, 0.92570, 0.92310, 0.92050, 0.91790, 0.91540, 0.91280, 0.91030, 0.90780, 0.90530, 0.90290, 0.90040, - 0.898, 0.89560, 0.89080, 0.886, 0.88140, 0.87680, 0.87220, 0.86770, 0.86320, 0.85880, 0.85450, 0.85020, 0.84590, 0.84170, 0.83760, - 0.83340, 0.82940, 0.82540, 0.82140, 0.81740, 0.81350, 0.80970, 0.80590, 0.80210, 0.79840, 0.79460, 0.791, 0.782, 0.77320, 0.76460, - 0.75620, 0.74810, 0.74010, 0.73220, 0.72460, 0.71710, 0.70980, 0.69560, 0.682, 0.66890, 0.65640, 0.64430, 0.63270, 0.62150, 0.61060, - 0.60020, 0.59010, 0.58040, 0.571, 0.56190, 0.553, 3.542e-05, 0.49140, 0.4594}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.96540, 0.96260, 0.95990, 0.95720, 0.95450, 0.95180, 0.94910, 0.94650, 0.94380, 0.94120, 0.93860, 0.93610, 0.93350, 0.93090, - 0.92840, 0.92590, 0.92090, 0.916, 0.91120, 0.90640, 0.90170, 0.897, 0.89240, 0.88780, 0.88330, 0.87890, 0.87450, 0.87010, 0.86580, - 0.86150, 0.85730, 0.85320, 0.849, 0.845, 0.84090, 0.83690, 0.833, 0.82910, 0.82520, 0.82140, 0.81760, 0.80830, 0.79920, 0.79030, - 0.78160, 0.77310, 0.76490, 0.75680, 0.74890, 0.74110, 0.73360, 0.71890, 0.70480, 0.69130, 0.67830, 0.66580, 0.65380, 0.64220, 0.631, - 0.62020, 0.60980, 0.59970, 0.59, 0.58060, 0.57150, 3.542e-05, 0.50780, 0.4747}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.99520, 0.99240, 0.98950, 0.98670, 0.984, 0.98120, 0.97840, 0.97570, 0.973, 0.97030, 0.96760, 0.965, 0.96230, - 0.95970, 0.95710, 0.952, 0.94690, 0.94190, 0.93690, 0.932, 0.92720, 0.92240, 0.91770, 0.913, 0.90840, 0.90380, 0.89930, 0.89480, - 0.89040, 0.88610, 0.88170, 0.87750, 0.87320, 0.86910, 0.86490, 0.86080, 0.85680, 0.85280, 0.84880, 0.84490, 0.83520, 0.82580, 0.81670, - 0.80770, 0.79890, 0.79040, 0.782, 0.77380, 0.76580, 0.758, 0.74280, 0.72830, 0.71430, 0.70090, 0.68790, 0.67550, 0.66350, 0.652, - 0.64080, 0.63, 0.61960, 0.60960, 0.59980, 0.59040, 3.542e-05, 0.52460, 0.4905}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 1.026, 1.023, 1.02, 1.017, 1.014, 1.011, 1.008, 1.006, 1.003, 1.0, 0.99740, 0.99460, - 0.99190, 0.98920, 0.98390, 0.97860, 0.97340, 0.96830, 0.96320, 0.95820, 0.95320, 0.94830, 0.94350, 0.93870, 0.934, 0.92930, 0.92470, - 0.92010, 0.91560, 0.91110, 0.90670, 0.90230, 0.898, 0.89370, 0.88950, 0.88530, 0.88110, 0.877, 0.873, 0.863, 0.85330, 0.84380, - 0.83450, 0.82540, 0.81660, 0.80790, 0.79940, 0.79120, 0.78310, 0.76740, 0.75230, 0.73790, 0.724, 0.71060, 0.69780, 0.68540, 0.67350, - 0.66190, 0.65080, 0.64010, 0.62970, 0.61960, 0.60990, 3.542e-05, 0.54180, 0.5066}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 1.057, 1.054, 1.051, 1.048, 1.045, 1.042, 1.039, 1.036, 1.034, 1.031, 1.028, - 1.025, 1.022, 1.017, 1.011, 1.006, 1.0, 0.99520, 0.99, 0.98490, 0.97980, 0.97480, 0.96990, 0.965, 0.96010, 0.95530, - 0.95060, 0.94590, 0.94130, 0.93670, 0.93220, 0.92770, 0.92330, 0.91890, 0.91460, 0.91030, 0.906, 0.90180, 0.89150, 0.88140, 0.87160, - 0.862, 0.85260, 0.84350, 0.83450, 0.82580, 0.81720, 0.80880, 0.79260, 0.77710, 0.76210, 0.74780, 0.734, 0.72070, 0.70790, 0.69550, - 0.68360, 0.67210, 0.661, 0.65030, 0.63990, 0.62980, 3.542e-05, 0.55960, 0.5232}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 1.089, 1.086, 1.083, 1.08, 1.077, 1.074, 1.071, 1.068, 1.065, 1.062, - 1.059, 1.056, 1.05, 1.045, 1.039, 1.034, 1.028, 1.023, 1.017, 1.012, 1.007, 1.002, 0.99680, 0.99180, 0.98680, - 0.982, 0.97710, 0.97230, 0.96760, 0.96290, 0.95830, 0.95370, 0.94910, 0.94470, 0.94020, 0.93580, 0.93150, 0.92080, 0.91040, 0.90020, - 0.89030, 0.88060, 0.87110, 0.86190, 0.85280, 0.844, 0.83530, 0.81850, 0.80250, 0.787, 0.77220, 0.75790, 0.74420, 0.731, 0.71820, - 0.70590, 0.694, 0.68260, 0.67150, 0.66070, 0.65030, 3.542e-05, 0.57780, 0.5402}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.122, 1.119, 1.116, 1.113, 1.109, 1.106, 1.103, 1.1, 1.097, - 1.094, 1.091, 1.085, 1.079, 1.073, 1.068, 1.062, 1.056, 1.051, 1.045, 1.04, 1.035, 1.03, 1.024, 1.019, - 1.014, 1.009, 1.004, 0.99930, 0.99440, 0.98960, 0.98490, 0.98020, 0.97560, 0.971, 0.96640, 0.96190, 0.95090, 0.94010, 0.92960, - 0.91930, 0.90930, 0.89950, 0.88990, 0.88060, 0.87140, 0.86250, 0.84510, 0.82850, 0.81260, 0.79730, 0.78250, 0.76830, 0.75470, 0.74150, - 0.72880, 0.71650, 0.70470, 0.69320, 0.68210, 0.67140, 3.542e-05, 0.59640, 0.5576}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.156, 1.152, 1.149, 1.146, 1.143, 1.139, 1.136, 1.133, - 1.13, 1.127, 1.121, 1.115, 1.109, 1.103, 1.097, 1.091, 1.085, 1.08, 1.074, 1.069, 1.063, 1.058, 1.052, - 1.047, 1.042, 1.037, 1.032, 1.027, 1.022, 1.017, 1.012, 1.007, 1.003, 0.99790, 0.99320, 0.98180, 0.97060, 0.95970, - 0.94910, 0.93880, 0.92860, 0.91880, 0.90910, 0.89960, 0.89040, 0.87250, 0.85530, 0.83880, 0.823, 0.80780, 0.79310, 0.779, 0.76540, - 0.75230, 0.73960, 0.72740, 0.71550, 0.70410, 0.693, 3.542e-05, 0.61560, 0.5755}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.19, 1.187, 1.183, 1.18, 1.177, 1.173, 1.17, - 1.167, 1.164, 1.157, 1.151, 1.145, 1.139, 1.133, 1.127, 1.121, 1.115, 1.109, 1.103, 1.098, 1.092, 1.087, - 1.081, 1.076, 1.071, 1.065, 1.06, 1.055, 1.05, 1.045, 1.04, 1.035, 1.03, 1.025, 1.013, 1.002, 0.99070, - 0.97970, 0.969, 0.95860, 0.94840, 0.93840, 0.92860, 0.919, 0.90050, 0.88280, 0.86580, 0.84940, 0.83370, 0.81860, 0.804, 0.78990, - 0.77640, 0.76330, 0.75070, 0.73840, 0.72660, 0.71520, 3.542e-05, 0.63530, 0.5939}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.226, 1.222, 1.219, 1.215, 1.212, 1.208, - 1.205, 1.202, 1.195, 1.188, 1.182, 1.176, 1.169, 1.163, 1.157, 1.151, 1.145, 1.139, 1.133, 1.127, 1.122, - 1.116, 1.111, 1.105, 1.1, 1.094, 1.089, 1.084, 1.079, 1.073, 1.068, 1.063, 1.058, 1.046, 1.034, 1.023, - 1.011, 1.0, 0.98930, 0.97870, 0.96840, 0.95830, 0.94840, 0.92930, 0.911, 0.89340, 0.87650, 0.86030, 0.84470, 0.82960, 0.81510, - 0.80110, 0.78760, 0.77460, 0.76190, 0.74970, 0.73790, 3.542e-05, 0.65550, 0.6128}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.262, 1.258, 1.254, 1.251, 1.247, - 1.244, 1.24, 1.234, 1.227, 1.22, 1.213, 1.207, 1.201, 1.194, 1.188, 1.182, 1.176, 1.17, 1.164, 1.158, - 1.152, 1.146, 1.141, 1.135, 1.129, 1.124, 1.118, 1.113, 1.108, 1.102, 1.097, 1.092, 1.08, 1.067, 1.055, - 1.043, 1.032, 1.021, 1.01, 0.99920, 0.98880, 0.97860, 0.95890, 0.93990, 0.92180, 0.90440, 0.88760, 0.87150, 0.85590, 0.84090, - 0.82650, 0.81260, 0.79910, 0.78610, 0.77350, 0.76130, 3.542e-05, 0.67620, 0.6321}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.299, 1.295, 1.291, 1.288, - 1.284, 1.28, 1.273, 1.266, 1.259, 1.252, 1.246, 1.239, 1.232, 1.226, 1.22, 1.213, 1.207, 1.201, 1.195, - 1.189, 1.183, 1.177, 1.171, 1.165, 1.16, 1.154, 1.149, 1.143, 1.138, 1.132, 1.127, 1.114, 1.101, 1.089, - 1.077, 1.065, 1.053, 1.042, 1.031, 1.02, 1.01, 0.98920, 0.96960, 0.95090, 0.93290, 0.91560, 0.89890, 0.88290, 0.86740, - 0.85250, 0.83810, 0.82420, 0.81080, 0.79780, 0.78520, 3.542e-05, 0.69740, 0.652}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.337, 1.333, 1.329, - 1.325, 1.321, 1.314, 1.307, 1.3, 1.292, 1.285, 1.279, 1.272, 1.265, 1.258, 1.252, 1.245, 1.239, 1.233, - 1.227, 1.22, 1.214, 1.208, 1.202, 1.196, 1.191, 1.185, 1.179, 1.174, 1.168, 1.163, 1.149, 1.136, 1.123, - 1.111, 1.098, 1.086, 1.075, 1.063, 1.052, 1.041, 1.02, 1.0, 0.98080, 0.96220, 0.94430, 0.92710, 0.91060, 0.89460, - 0.87920, 0.86440, 0.85, 0.83620, 0.82280, 0.80980, 3.542e-05, 0.7192, 0.6723}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.375, 1.371, - 1.367, 1.364, 1.356, 1.348, 1.341, 1.334, 1.326, 1.319, 1.312, 1.305, 1.298, 1.292, 1.285, 1.278, 1.272, - 1.265, 1.259, 1.253, 1.246, 1.24, 1.234, 1.228, 1.222, 1.216, 1.211, 1.205, 1.199, 1.185, 1.172, 1.158, - 1.145, 1.133, 1.12, 1.108, 1.097, 1.085, 1.074, 1.052, 1.031, 1.011, 0.99220, 0.97380, 0.956, 0.939, 0.92250, - 0.90660, 0.89130, 0.87650, 0.86220, 0.84840, 0.835, 3.542e-05, 0.7416, 0.6932}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.415, - 1.411, 1.407, 1.399, 1.391, 1.383, 1.376, 1.368, 1.361, 1.354, 1.346, 1.339, 1.332, 1.325, 1.319, 1.312, - 1.305, 1.299, 1.292, 1.286, 1.279, 1.273, 1.267, 1.261, 1.255, 1.249, 1.243, 1.237, 1.222, 1.208, 1.195, - 1.181, 1.168, 1.155, 1.143, 1.131, 1.119, 1.107, 1.085, 1.063, 1.043, 1.023, 1.004, 0.98570, 0.96810, 0.95110, - 0.93470, 0.91890, 0.90360, 0.88890, 0.87460, 0.86080, 3.542e-05, 0.7645, 0.7146}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 1.455, 1.451, 1.443, 1.435, 1.427, 1.419, 1.411, 1.404, 1.396, 1.389, 1.381, 1.374, 1.367, 1.36, 1.353, - 1.346, 1.339, 1.332, 1.326, 1.319, 1.313, 1.306, 1.3, 1.294, 1.287, 1.281, 1.275, 1.26, 1.246, 1.232, - 1.218, 1.204, 1.191, 1.178, 1.166, 1.154, 1.142, 1.118, 1.096, 1.075, 1.055, 1.035, 1.016, 0.99790, 0.98040, - 0.96350, 0.94720, 0.93140, 0.91620, 0.90150, 0.88730, 3.542e-05, 0.7879, 0.7365}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.497, 1.488, 1.48, 1.472, 1.464, 1.456, 1.448, - 1.44, 1.432, 1.425, 1.417, 1.41, 1.402, 1.395, 1.388, 1.381, 1.374, 1.367, 1.36, 1.354, 1.347, 1.34, 1.334, 1.327, - 1.321, 1.315, 1.299, 1.284, 1.27, 1.255, 1.242, 1.228, 1.215, 1.202, 1.189, 1.177, 1.153, 1.13, 1.108, 1.087, 1.067, - 1.047, 1.028, 1.01, 0.993, 0.97620, 0.95990, 0.94420, 0.92910, 0.91440, 3.542e-05, 0.812, 0.759}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.583, 1.574, 1.565, 1.556, 1.548, 1.539, - 1.531, 1.522, 1.514, 1.506, 1.498, 1.49, 1.483, 1.475, 1.468, 1.46, 1.453, 1.445, 1.438, 1.431, 1.424, 1.417, 1.41, - 1.404, 1.397, 1.38, 1.364, 1.349, 1.334, 1.319, 1.304, 1.29, 1.276, 1.263, 1.25, 1.224, 1.2, 1.177, 1.154, 1.133, - 1.112, 1.092, 1.073, 1.054, 1.036, 1.019, 1.002, 0.98630, 0.97070, 3.542e-05, 0.8619, 0.8056}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.673, 1.663, 1.654, 1.644, 1.635, - 1.626, 1.617, 1.609, 1.6, 1.592, 1.583, 1.575, 1.567, 1.559, 1.551, 1.543, 1.535, 1.527, 1.52, 1.512, 1.505, 1.498, - 1.49, 1.483, 1.466, 1.449, 1.432, 1.416, 1.4, 1.385, 1.37, 1.355, 1.341, 1.327, 1.299, 1.273, 1.249, 1.225, 1.202, - 1.18, 1.159, 1.138, 1.119, 1.1, 1.081, 1.063, 1.046, 1.03, 3.542e-05, 0.9143, 0.8546}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.766, 1.756, 1.746, 1.737, - 1.727, 1.717, 1.708, 1.699, 1.69, 1.681, 1.672, 1.663, 1.655, 1.646, 1.638, 1.629, 1.621, 1.613, 1.605, 1.597, 1.589, - 1.582, 1.574, 1.555, 1.537, 1.519, 1.502, 1.485, 1.469, 1.453, 1.437, 1.422, 1.407, 1.378, 1.351, 1.324, 1.299, 1.274, - 1.251, 1.229, 1.207, 1.186, 1.166, 1.146, 1.128, 1.109, 1.092, 3.542e-05, 0.9692, 0.9059}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.864, 1.854, 1.843, - 1.833, 1.823, 1.813, 1.803, 1.793, 1.784, 1.774, 1.765, 1.755, 1.746, 1.737, 1.729, 1.72, 1.711, 1.703, 1.694, 1.686, - 1.678, 1.669, 1.649, 1.63, 1.611, 1.593, 1.575, 1.557, 1.54, 1.524, 1.507, 1.492, 1.461, 1.432, 1.403, 1.377, 1.351, - 1.326, 1.302, 1.279, 1.257, 1.235, 1.215, 1.195, 1.175, 1.157, 3.542e-05, 1.027, 0.9597}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.967, 1.955, 1.944, 1.933, 1.923, 1.912, 1.902, 1.891, 1.881, 1.871, - 1.861, 1.852, 1.842, 1.833, 1.823, 1.814, 1.805, 1.796, 1.787, 1.778, 1.77, 1.748, 1.728, 1.707, 1.688, 1.669, 1.65, 1.632, 1.614, - 1.597, 1.58, 1.548, 1.516, 1.487, 1.458, 1.431, 1.404, 1.379, 1.354, 1.331, 1.308, 1.286, 1.265, 1.245, 1.225, 3.542e-05, 1.087, 1.016}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.074, 2.062, 2.05, 2.038, 2.027, 2.016, 2.005, 1.994, 1.983, - 1.973, 1.962, 1.952, 1.942, 1.932, 1.922, 1.912, 1.903, 1.893, 1.884, 1.875, 1.852, 1.83, 1.809, 1.788, 1.767, 1.748, 1.728, 1.709, - 1.691, 1.673, 1.639, 1.605, 1.574, 1.543, 1.514, 1.486, 1.459, 1.434, 1.409, 1.384, 1.361, 1.339, 1.317, 1.296, 3.542e-05, 1.15, 1.075}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.185, 2.172, 2.16, 2.148, 2.136, 2.124, 2.112, 2.101, - 2.09, 2.079, 2.068, 2.057, 2.046, 2.036, 2.025, 2.015, 2.005, 1.995, 1.985, 1.961, 1.937, 1.915, 1.892, 1.871, 1.85, 1.829, 1.809, - 1.79, 1.771, 1.734, 1.699, 1.665, 1.633, 1.602, 1.572, 1.544, 1.516, 1.49, 1.464, 1.44, 1.416, 1.393, 1.371, 3.542e-05, 1.216, 1.137}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.301, 2.288, 2.275, 2.262, 2.249, 2.237, 2.225, - 2.213, 2.201, 2.189, 2.177, 2.166, 2.155, 2.144, 2.133, 2.122, 2.111, 2.101, 2.075, 2.05, 2.026, 2.002, 1.979, 1.957, 1.935, 1.914, - 1.893, 1.873, 1.834, 1.796, 1.761, 1.727, 1.694, 1.662, 1.632, 1.603, 1.575, 1.548, 1.522, 1.497, 1.473, 1.449, 3.542e-05, 1.286, 1.201}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.422, 2.408, 2.394, 2.381, 2.367, 2.354, - 2.341, 2.329, 2.316, 2.304, 2.292, 2.28, 2.268, 2.256, 2.245, 2.233, 2.222, 2.195, 2.168, 2.142, 2.117, 2.093, 2.069, 2.046, 2.023, - 2.001, 1.98, 1.938, 1.899, 1.861, 1.825, 1.79, 1.757, 1.725, 1.694, 1.664, 1.635, 1.608, 1.581, 1.556, 1.531, 3.542e-05, 1.358, 1.269}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.548, 2.533, 2.519, 2.505, 2.491, - 2.477, 2.463, 2.45, 2.437, 2.424, 2.411, 2.398, 2.386, 2.373, 2.361, 2.349, 2.32, 2.292, 2.264, 2.238, 2.212, 2.186, 2.162, 2.138, - 2.114, 2.091, 2.048, 2.006, 1.965, 1.927, 1.89, 1.855, 1.821, 1.789, 1.757, 1.727, 1.698, 1.67, 1.642, 1.616, 3.542e-05, 1.433, 1.339}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.679, 2.664, 2.648, 2.633, - 2.619, 2.604, 2.59, 2.576, 2.562, 2.548, 2.535, 2.522, 2.508, 2.495, 2.483, 2.452, 2.421, 2.392, 2.364, 2.336, 2.309, 2.283, 2.258, - 2.233, 2.209, 2.162, 2.117, 2.075, 2.034, 1.995, 1.958, 1.922, 1.888, 1.854, 1.822, 1.792, 1.762, 1.733, 1.705, 3.542e-05, 1.512, 1.413}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.816, 2.8, 2.783, - 2.768, 2.752, 2.737, 2.722, 2.707, 2.692, 2.678, 2.664, 2.65, 2.636, 2.622, 2.589, 2.557, 2.526, 2.496, 2.466, 2.438, 2.41, 2.383, - 2.357, 2.331, 2.282, 2.234, 2.189, 2.146, 2.105, 2.066, 2.028, 1.991, 1.956, 1.922, 1.89, 1.858, 1.828, 1.799, 3.542e-05, 1.595, 1.490}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.958, 2.941, - 2.924, 2.907, 2.891, 2.875, 2.859, 2.843, 2.828, 2.813, 2.798, 2.783, 2.769, 2.733, 2.699, 2.666, 2.634, 2.603, 2.572, 2.543, 2.514, - 2.486, 2.459, 2.407, 2.357, 2.309, 2.263, 2.22, 2.178, 2.138, 2.099, 2.062, 2.026, 1.992, 1.959, 1.927, 1.896, 3.542e-05, 1.681, 1.570}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3.106, - 3.088, 3.07, 3.052, 3.035, 3.018, 3.001, 2.985, 2.969, 2.953, 2.937, 2.922, 2.884, 2.848, 2.812, 2.778, 2.745, 2.713, 2.682, 2.651, - 2.622, 2.593, 2.537, 2.484, 2.434, 2.386, 2.34, 2.295, 2.253, 2.212, 2.173, 2.135, 2.099, 2.064, 2.03, 1.997, 3.542e-05, 1.77, 1.654}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 3.26, 3.24, 3.222, 3.203, 3.185, 3.167, 3.15, 3.132, 3.115, 3.099, 3.082, 3.042, 3.003, 2.966, 2.929, 2.894, 2.86, 2.827, 2.794, - 2.763, 2.732, 2.674, 2.618, 2.564, 2.513, 2.465, 2.418, 2.373, 2.33, 2.289, 2.249, 2.21, 2.173, 2.138, 2.103, 3.542e-05, 1.864, 1.741}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 3.419, 3.399, 3.379, 3.36, 3.341, 3.322, 3.304, 3.286, 3.268, 3.25, 3.207, 3.166, 3.126, 3.087, 3.05, 3.014, 2.978, 2.944, - 2.911, 2.878, 2.816, 2.757, 2.7, 2.646, 2.595, 2.546, 2.498, 2.453, 2.409, 2.367, 2.326, 2.287, 2.25, 2.213, 3.542e-05, 1.961, 1.832}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 3.585, 3.564, 3.543, 3.523, 3.503, 3.483, 3.464, 3.445, 3.426, 3.38, 3.336, 3.294, 3.253, 3.213, 3.174, 3.137, 3.1, - 3.065, 3.031, 2.965, 2.902, 2.842, 2.785, 2.731, 2.679, 2.629, 2.581, 2.535, 2.49, 2.448, 2.406, 2.367, 2.328, 3.542e-05, 2.063, 1.926}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 3.758, 3.735, 3.713, 3.692, 3.671, 3.65, 3.63, 3.61, 3.561, 3.514, 3.469, 3.425, 3.383, 3.342, 3.302, 3.264, - 3.226, 3.19, 3.12, 3.054, 2.99, 2.93, 2.873, 2.818, 2.765, 2.714, 2.665, 2.619, 2.574, 2.53, 2.488, 2.448, 3.542e-05, 2.168, 2.025}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 3.937, 3.913, 3.89, 3.867, 3.845, 3.823, 3.802, 3.75, 3.7, 3.652, 3.605, 3.561, 3.517, 3.475, 3.434, - 3.394, 3.356, 3.282, 3.212, 3.145, 3.081, 3.02, 2.962, 2.907, 2.853, 2.802, 2.752, 2.705, 2.659, 2.615, 2.573, 3.542e-05, 2.278, 2.127}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 4.122, 4.097, 4.073, 4.049, 4.026, 4.003, 3.948, 3.895, 3.843, 3.794, 3.746, 3.7, 3.655, 3.612, - 3.57, 3.529, 3.451, 3.376, 3.306, 3.238, 3.174, 3.113, 3.054, 2.998, 2.944, 2.892, 2.842, 2.794, 2.747, 2.702, 3.542e-05, 2.392, 2.234}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 4.315, 4.289, 4.263, 4.238, 4.214, 4.155, 4.098, 4.043, 3.991, 3.94, 3.891, 3.843, 3.797, - 3.753, 3.709, 3.627, 3.548, 3.473, 3.402, 3.335, 3.27, 3.208, 3.148, 3.091, 3.037, 2.984, 2.933, 2.884, 2.837, 3.542e-05, 2.511, 2.344}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 4.515, 4.487, 4.46, 4.434, 4.371, 4.31, 4.252, 4.196, 4.142, 4.09, 4.04, 3.991, - 3.944, 3.898, 3.81, 3.727, 3.648, 3.573, 3.501, 3.433, 3.368, 3.305, 3.245, 3.187, 3.132, 3.079, 3.027, 2.977, 3.542e-05, 2.635, 2.459}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 4.722, 4.693, 4.665, 4.597, 4.532, 4.47, 4.411, 4.353, 4.298, 4.244, 4.193, - 4.143, 4.094, 4.001, 3.913, 3.83, 3.751, 3.675, 3.603, 3.534, 3.468, 3.405, 3.344, 3.286, 3.23, 3.176, 3.123, 3.542e-05, 2.763, 2.579}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 4.936, 4.906, 4.833, 4.764, 4.698, 4.635, 4.574, 4.515, 4.458, 4.403, - 4.35, 4.298, 4.2, 4.107, 4.019, 3.935, 3.856, 3.78, 3.707, 3.638, 3.571, 3.507, 3.446, 3.387, 3.33, 3.275, 3.542e-05, 2.896, 2.703}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 5.159, 5.081, 5.007, 4.936, 4.868, 4.803, 4.741, 4.681, 4.622, - 4.566, 4.512, 4.407, 4.309, 4.216, 4.128, 4.044, 3.964, 3.887, 3.814, 3.744, 3.677, 3.612, 3.55, 3.49, 3.432, 3.542e-05, 3.035, 2.832}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 5.75, 5.662, 5.579, 5.499, 5.423, 5.35, 5.28, 5.212, - 5.147, 5.084, 4.964, 4.851, 4.744, 4.643, 4.547, 4.456, 4.369, 4.286, 4.206, 4.13, 4.056, 3.986, 3.918, 3.853, 3.542e-05, 3.404, 3.176}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 6.395, 6.296, 6.202, 6.112, 6.027, 5.945, 5.866, - 5.79, 5.717, 5.579, 5.449, 5.327, 5.211, 5.102, 4.998, 4.898, 4.804, 4.714, 4.627, 4.544, 4.464, 4.388, 4.314, 3.542e-05, 3.808, 3.552}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 7.098, 6.985, 6.879, 6.779, 6.683, 6.591, - 6.503, 6.418, 6.258, 6.108, 5.968, 5.836, 5.711, 5.593, 5.48, 5.373, 5.27, 5.172, 5.078, 4.988, 4.902, 4.819, 3.542e-05, 4.25, 3.962}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 7.861, 7.734, 7.615, 7.502, 7.395, - 7.292, 7.193, 7.008, 6.835, 6.674, 6.523, 6.38, 6.245, 6.118, 5.996, 5.88, 5.769, 5.663, 5.561, 5.464, 5.37, 3.542e-05, 4.732, 4.410}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 8.69, 8.547, 8.413, 8.286, - 8.166, 8.051, 7.835, 7.636, 7.451, 7.278, 7.115, 6.961, 6.816, 6.678, 6.547, 6.421, 6.302, 6.187, 6.078, 5.972, 3.542e-05, 5.257, 4.897}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 9.588, 9.428, 9.277, - 9.135, 9.0, 8.749, 8.519, 8.305, 8.106, 7.92, 7.745, 7.58, 7.423, 7.275, 7.133, 6.998, 6.87, 6.746, 6.628, 3.542e-05, 5.827, 5.425}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 10.56, 10.38, - 10.21, 10.05, 9.759, 9.491, 9.244, 9.016, 8.803, 8.603, 8.415, 8.238, 8.069, 7.91, 7.758, 7.613, 7.474, 7.341, 3.542e-05, 6.445, 5.998}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 11.62, - 11.41, 11.22, 10.88, 10.56, 10.28, 10.01, 9.769, 9.541, 9.328, 9.126, 8.936, 8.756, 8.584, 8.421, 8.265, 8.116, 3.542e-05, 7.115, 6.618}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 12.75, 12.53, 12.11, 11.75, 11.41, 11.11, 10.83, 10.57, 10.32, 10.1, 9.88, 9.676, 9.483, 9.299, 9.124, 8.957, 3.542e-05, 7.84, 7.288}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 13.99, 13.49, 13.05, 12.67, 12.31, 11.99, 11.69, 11.41, 11.15, 10.91, 10.68, 10.46, 10.25, 10.06, 9.869, 3.542e-05, 8.623, 8.011}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 16.75, 16.12, 15.58, 15.1, 14.66, 14.26, 13.9, 13.56, 13.25, 12.95, 12.67, 12.41, 12.16, 11.93, 3.542e-05, 10.38, 9.628}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 19.97, 19.17, 18.49, 17.89, 17.36, 16.87, 16.43, 16.02, 15.64, 15.28, 14.95, 14.63, 14.34, 3.542e-05, 12.42, 11.5}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 23.71, 22.7, 21.85, 21.1, 20.45, 19.85, 19.31, 18.81, 18.35, 17.93, 17.53, 17.15, 3.542e-05, 14.77, 13.65}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 28.07, 26.78, 25.71, 24.79, 23.97, 23.25, 22.59, 21.99, 21.44, 20.93, 20.45, 3.542e-05, 17.48, 16.12}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 33.16, 31.5, 30.15, 29.0, 28.0, 27.11, 26.31, 25.59, 24.92, 24.31, 3.542e-05, 20.6, 18.94}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 39.13, 36.97, 35.25, 33.82, 32.58, 31.5, 30.53, 29.65, 28.86, 3.542e-05, 24.19, 22.16}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 46.17, 43.33, 41.13, 39.33, 37.8, 36.47, 35.29, 34.24, 3.542e-05, 28.31, 25.84}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 54.54, 50.75, 47.92, 45.65, 43.75, 42.11, 40.68, 3.542e-05, 33.07, 30.03}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 64.64, 59.47, 55.78, 52.9, 50.53, 48.51, 3.542e-05, 38.55, 34.81}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 77.05, 69.8, 64.93, 61.24, 58.27, 3.542e-05, 44.92, 40.28}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 92.76, 82.18, 75.63, 70.87, 3.542e-05, 52.35, 46.54}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 113.6, 97.22, 88.27, 3.542e-05, 61.12, 53.76}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 143.9, 115.8, 3.542e-05, 71.6, 62.15}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 201.8, 3.542e-05, 84.38, 71.99}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3.542e-05, 148.4, 115.1}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3.542e-05, 201.7, 144.2}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3.542e-05, 270.9, 177.8}, - }}; - //***************************************************************************** template @@ -4698,8 +2727,10 @@ namespace FluidProperties { // Most properties requested (e.g., Specific Heat) must be > 0 but the tables may // be set up for symmetry and not be limited to just valid values. - for (int GlycolNum = 1; GlycolNum <= state.dataFluidProps->NumOfGlycols; ++GlycolNum) { - auto &glycol = state.dataFluidProps->GlycolData(GlycolNum); + auto &df = state.dataFluidProps; + + for (int GlycolNum = 1; GlycolNum <= df->NumOfGlycols; ++GlycolNum) { + auto &glycol = df->GlycolData(GlycolNum); if (glycol.CpDataPresent) { // check for lowest non-zero value by referencing temp data for (int IndexNum = 1; IndexNum <= glycol.NumCpTempPts; ++IndexNum) { @@ -4800,9 +2831,10 @@ namespace FluidProperties { // for the refrigerant properties. // Most properties requested (e.g., Specific Heat) must be > 0 but the tables may // be set up for symmetry and not be limited to just valid values. + auto &df = state.dataFluidProps; - for (int RefrigNum = 1; RefrigNum <= state.dataFluidProps->NumOfRefrigerants; ++RefrigNum) { - auto &refrig = state.dataFluidProps->RefrigData(RefrigNum); + for (int RefrigNum = 1; RefrigNum <= df->NumOfRefrigerants; ++RefrigNum) { + auto &refrig = df->RefrigData(RefrigNum); for (int IndexNum = 1; IndexNum <= refrig.NumPsPoints; ++IndexNum) { if (refrig.PsValues(IndexNum) <= 0.0) continue; refrig.PsLowPresIndex = IndexNum; @@ -4941,8 +2973,10 @@ namespace FluidProperties { Real64 Temperature; // Temperature to drive values Real64 ReturnValue; // Values returned from glycol functions - for (int GlycolNum = 1; GlycolNum <= state.dataFluidProps->NumOfGlycols; ++GlycolNum) { - auto &glycol = state.dataFluidProps->GlycolData(GlycolNum); + auto &df = state.dataFluidProps; + + for (int GlycolNum = 1; GlycolNum <= df->NumOfGlycols; ++GlycolNum) { + auto &glycol = df->GlycolData(GlycolNum); int GlycolIndex = 0; // used in routine calls -- value is returned when first 0 // Lay out the basic values: @@ -5047,17 +3081,17 @@ namespace FluidProperties { print(state.files.debug, ",{:.2R}", ReturnValue); for (int Loop = 1; Loop <= glycol.NumCpTempPts - 1; ++Loop) { Temperature = glycol.CpTemps(Loop); - ReturnValue = GetSpecificHeatGlycol(state, glycol.Name, Temperature, GlycolIndex, RoutineName); + ReturnValue = glycol.getSpecificHeat(state, Temperature, RoutineName); print(state.files.debug, ",{:.2R}", ReturnValue); Temperature = glycol.CpTemps(Loop) + (glycol.CpTemps(Loop + 1) - glycol.CpTemps(Loop)) / 2.0; - ReturnValue = GetSpecificHeatGlycol(state, glycol.Name, Temperature, GlycolIndex, RoutineName); + ReturnValue = glycol.getSpecificHeat(state, Temperature, RoutineName); print(state.files.debug, ",{:.2R}", ReturnValue); } Temperature = glycol.CpTemps(glycol.NumCpTempPts); - ReturnValue = GetSpecificHeatGlycol(state, glycol.Name, Temperature, GlycolIndex, RoutineName); + ReturnValue = glycol.getSpecificHeat(state, Temperature, RoutineName); print(state.files.debug, ",{:.2R}", ReturnValue); Temperature = glycol.CpTemps(glycol.NumCpTempPts) + incr; - ReturnValue = GetSpecificHeatGlycol(state, glycol.Name, Temperature, GlycolIndex, RoutineName); + ReturnValue = glycol.getSpecificHeat(state, Temperature, RoutineName); print(state.files.debug, ",{:.2R}\n", ReturnValue); } @@ -5078,17 +3112,17 @@ namespace FluidProperties { print(state.files.debug, ",{:.3R}", ReturnValue); for (int Loop = 1; Loop <= glycol.NumRhoTempPts - 1; ++Loop) { Temperature = glycol.RhoTemps(Loop); - ReturnValue = GetDensityGlycol(state, glycol.Name, Temperature, GlycolIndex, RoutineName); + ReturnValue = glycol.getDensity(state, Temperature, RoutineName); print(state.files.debug, ",{:.3R}", ReturnValue); Temperature = glycol.RhoTemps(Loop) + (glycol.RhoTemps(Loop + 1) - glycol.RhoTemps(Loop)) / 2.0; - ReturnValue = GetDensityGlycol(state, glycol.Name, Temperature, GlycolIndex, RoutineName); + ReturnValue = glycol.getDensity(state, Temperature, RoutineName); print(state.files.debug, ",{:.3R}", ReturnValue); } Temperature = glycol.RhoTemps(glycol.NumRhoTempPts); - ReturnValue = GetDensityGlycol(state, glycol.Name, Temperature, GlycolIndex, RoutineName); + ReturnValue = glycol.getDensity(state, Temperature, RoutineName); print(state.files.debug, ",{:.3R}", ReturnValue); Temperature = glycol.RhoTemps(glycol.NumRhoTempPts) + incr; - ReturnValue = GetDensityGlycol(state, glycol.Name, Temperature, GlycolIndex, RoutineName); + ReturnValue = glycol.getDensity(state, Temperature, RoutineName); print(state.files.debug, ",{:.3R}\n", ReturnValue); } @@ -5105,21 +3139,21 @@ namespace FluidProperties { print(state.files.debug, ",{:.2R}\n", glycol.CondTemps(glycol.NumCondTempPts) + incr); print(state.files.debug, "Conductivity:"); Temperature = glycol.CondTemps(1) - incr; - ReturnValue = GetConductivityGlycol(state, glycol.Name, Temperature, GlycolIndex, RoutineName); + ReturnValue = glycol.getConductivity(state, Temperature, RoutineName); print(state.files.debug, ",{:.3R}", ReturnValue); for (int Loop = 1; Loop <= glycol.NumCondTempPts - 1; ++Loop) { Temperature = glycol.CondTemps(Loop); - ReturnValue = GetConductivityGlycol(state, glycol.Name, Temperature, GlycolIndex, RoutineName); + ReturnValue = glycol.getConductivity(state, Temperature, RoutineName); print(state.files.debug, ",{:.3R}", ReturnValue); Temperature = glycol.CondTemps(Loop) + (glycol.CondTemps(Loop + 1) - glycol.CondTemps(Loop)) / 2.0; - ReturnValue = GetConductivityGlycol(state, glycol.Name, Temperature, GlycolIndex, RoutineName); + ReturnValue = glycol.getConductivity(state, Temperature, RoutineName); print(state.files.debug, ",{:.3R}", ReturnValue); } Temperature = glycol.CondTemps(glycol.NumCondTempPts); - ReturnValue = GetConductivityGlycol(state, glycol.Name, Temperature, GlycolIndex, RoutineName); + ReturnValue = glycol.getConductivity(state, Temperature, RoutineName); print(state.files.debug, ",{:.3R}", ReturnValue); Temperature = glycol.CondTemps(glycol.NumCondTempPts) + incr; - ReturnValue = GetConductivityGlycol(state, glycol.Name, Temperature, GlycolIndex, RoutineName); + ReturnValue = glycol.getConductivity(state, Temperature, RoutineName); print(state.files.debug, ",{:.3R}\n", ReturnValue); } @@ -5136,21 +3170,21 @@ namespace FluidProperties { print(state.files.debug, ",{:.2R}\n", glycol.ViscTemps(glycol.NumViscTempPts) + incr); print(state.files.debug, "Viscosity:"); Temperature = glycol.ViscTemps(1) - incr; - ReturnValue = GetViscosityGlycol(state, glycol.Name, Temperature, GlycolIndex, RoutineName); + ReturnValue = glycol.getViscosity(state, Temperature, RoutineName); print(state.files.debug, ",{:.4R}", ReturnValue); for (int Loop = 1; Loop <= glycol.NumViscTempPts - 1; ++Loop) { Temperature = glycol.ViscTemps(Loop); - ReturnValue = GetViscosityGlycol(state, glycol.Name, Temperature, GlycolIndex, RoutineName); + ReturnValue = glycol.getViscosity(state, Temperature, RoutineName); print(state.files.debug, ",{:.4R}", ReturnValue); Temperature = glycol.ViscTemps(Loop) + (glycol.ViscTemps(Loop + 1) - glycol.ViscTemps(Loop)) / 2.0; - ReturnValue = GetViscosityGlycol(state, glycol.Name, Temperature, GlycolIndex, RoutineName); + ReturnValue = glycol.getViscosity(state, Temperature, RoutineName); print(state.files.debug, ",{:.4R}", ReturnValue); } Temperature = glycol.ViscTemps(glycol.NumViscTempPts); - ReturnValue = GetViscosityGlycol(state, glycol.Name, Temperature, GlycolIndex, RoutineName); + ReturnValue = glycol.getViscosity(state, Temperature, RoutineName); print(state.files.debug, ",{:.4R}", ReturnValue); Temperature = glycol.ViscTemps(glycol.NumViscTempPts) + incr; - ReturnValue = GetViscosityGlycol(state, glycol.Name, Temperature, GlycolIndex, RoutineName); + ReturnValue = glycol.getViscosity(state, Temperature, RoutineName); print(state.files.debug, ",{:.4R}\n", ReturnValue); } } @@ -5182,221 +3216,181 @@ namespace FluidProperties { Real64 Temperature; // Temperature to drive values Real64 ReturnValue; // Values returned from refrigerant functions - for (int RefrigNum = 1; RefrigNum <= state.dataFluidProps->NumOfRefrigerants; ++RefrigNum) { - int RefrigIndex = 0; // used in routine calls -- value is returned when first 0 + auto &df = state.dataFluidProps; + + for (int RefrigNum = 1; RefrigNum <= df->NumOfRefrigerants; ++RefrigNum) { + auto &refrig = df->RefrigData(RefrigNum); // Lay out the basic values: - if (!state.dataFluidProps->RefrigData(RefrigNum).Name.empty()) { - print(state.files.debug, "Refrigerant={}", state.dataFluidProps->RefrigData(RefrigNum).Name); + if (!refrig.Name.empty()) { + print(state.files.debug, "Refrigerant={}", refrig.Name); } - if (state.dataFluidProps->RefrigData(RefrigNum).NumPsPoints > 0) { + if (refrig.NumPsPoints > 0) { print(state.files.debug, "Saturation Pressures Data points:,Low Temperature=,{:.2R},Index=,{},High Temperature=,{:.2R},Index=,{}\n", - state.dataFluidProps->RefrigData(RefrigNum).PsLowTempValue, - state.dataFluidProps->RefrigData(RefrigNum).PsLowTempIndex, - state.dataFluidProps->RefrigData(RefrigNum).PsHighTempValue, - state.dataFluidProps->RefrigData(RefrigNum).PsHighTempIndex); + refrig.PsLowTempValue, + refrig.PsLowTempIndex, + refrig.PsHighTempValue, + refrig.PsHighTempIndex); print(state.files.debug, "Temperatures:"); - for (int Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumPsPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).PsTemps(Loop)); + for (int Loop = 1; Loop <= refrig.NumPsPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", refrig.PsTemps(Loop)); } - print(state.files.debug, - ",{:.2R}\n", - state.dataFluidProps->RefrigData(RefrigNum).PsTemps(state.dataFluidProps->RefrigData(RefrigNum).NumPsPoints)); + print(state.files.debug, ",{:.2R}\n", refrig.PsTemps(refrig.NumPsPoints)); print(state.files.debug, "Saturation Pressure:"); - for (int Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumPsPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).PsValues(Loop)); + for (int Loop = 1; Loop <= refrig.NumPsPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", refrig.PsValues(Loop)); } - print(state.files.debug, - ",{:.2R}\n", - state.dataFluidProps->RefrigData(RefrigNum).PsValues(state.dataFluidProps->RefrigData(RefrigNum).NumPsPoints)); + print(state.files.debug, ",{:.2R}\n", refrig.PsValues(refrig.NumPsPoints)); } - if (state.dataFluidProps->RefrigData(RefrigNum).NumHPoints > 0) { + if (refrig.NumHPoints > 0) { print(state.files.debug, "Enthalpy Saturated Fluid Data points:,Low Temperature=,{:.2R},Index=,{},High Temperature=,{:.2R},Index=,{}\n", - state.dataFluidProps->RefrigData(RefrigNum).HfLowTempValue, - state.dataFluidProps->RefrigData(RefrigNum).HfLowTempIndex, - state.dataFluidProps->RefrigData(RefrigNum).HfHighTempValue, - state.dataFluidProps->RefrigData(RefrigNum).HfHighTempIndex); + refrig.HfLowTempValue, + refrig.HfLowTempIndex, + refrig.HfHighTempValue, + refrig.HfHighTempIndex); print(state.files.debug, "Temperatures:"); - for (int Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumHPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).HTemps(Loop)); + for (int Loop = 1; Loop <= refrig.NumHPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", refrig.HTemps(Loop)); } - print(state.files.debug, - ",{:.2R}\n", - state.dataFluidProps->RefrigData(RefrigNum).HTemps(state.dataFluidProps->RefrigData(RefrigNum).NumHPoints)); + print(state.files.debug, ",{:.2R}\n", refrig.HTemps(refrig.NumHPoints)); print(state.files.debug, "Enthalpy Saturated Fluid:"); - for (int Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumHPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).HfValues(Loop)); + for (int Loop = 1; Loop <= refrig.NumHPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", refrig.HfValues(Loop)); } - print(state.files.debug, - ",{:.2R}\n", - state.dataFluidProps->RefrigData(RefrigNum).HfValues(state.dataFluidProps->RefrigData(RefrigNum).NumHPoints)); + print(state.files.debug, ",{:.2R}\n", refrig.HfValues(refrig.NumHPoints)); print(state.files.debug, "Enthalpy Saturated Fluid/Gas Data points:,Low Temperature=,{:.2R},Index=,{},High Temperature=,{:.2R},Index=,{}\n", - state.dataFluidProps->RefrigData(RefrigNum).HfgLowTempValue, - state.dataFluidProps->RefrigData(RefrigNum).HfgLowTempIndex, - state.dataFluidProps->RefrigData(RefrigNum).HfgHighTempValue, - state.dataFluidProps->RefrigData(RefrigNum).HfgHighTempIndex); + refrig.HfgLowTempValue, + refrig.HfgLowTempIndex, + refrig.HfgHighTempValue, + refrig.HfgHighTempIndex); print(state.files.debug, "Temperatures:"); - for (int Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumHPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).HTemps(Loop)); + for (int Loop = 1; Loop <= refrig.NumHPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", refrig.HTemps(Loop)); } - print(state.files.debug, - ",{:.2R}\n", - state.dataFluidProps->RefrigData(RefrigNum).HTemps(state.dataFluidProps->RefrigData(RefrigNum).NumHPoints)); + print(state.files.debug, ",{:.2R}\n", refrig.HTemps(refrig.NumHPoints)); print(state.files.debug, "Enthalpy Saturated Fluid/Gas:"); - for (int Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumHPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).HfgValues(Loop)); + for (int Loop = 1; Loop <= refrig.NumHPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", refrig.HfgValues(Loop)); } - print(state.files.debug, - ",{:.2R}\n", - state.dataFluidProps->RefrigData(RefrigNum).HfgValues(state.dataFluidProps->RefrigData(RefrigNum).NumHPoints)); + print(state.files.debug, ",{:.2R}\n", refrig.HfgValues(refrig.NumHPoints)); } - if (state.dataFluidProps->RefrigData(RefrigNum).NumCpPoints > 0) { + if (refrig.NumCpPoints > 0) { print(state.files.debug, "Specific Heat Saturated Fluid Data points:,Low Temperature=,{:.2R},Index=,{},High Temperature=,{:.2R},Index=,{}\n", - state.dataFluidProps->RefrigData(RefrigNum).CpfLowTempValue, - state.dataFluidProps->RefrigData(RefrigNum).CpfLowTempIndex, - state.dataFluidProps->RefrigData(RefrigNum).CpfHighTempValue, - state.dataFluidProps->RefrigData(RefrigNum).CpfHighTempIndex); + refrig.CpfLowTempValue, + refrig.CpfLowTempIndex, + refrig.CpfHighTempValue, + refrig.CpfHighTempIndex); print(state.files.debug, "Temperatures:"); - for (int Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumCpPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).CpTemps(Loop)); + for (int Loop = 1; Loop <= refrig.NumCpPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", refrig.CpTemps(Loop)); } - print(state.files.debug, - ",{:.2R}\n", - state.dataFluidProps->RefrigData(RefrigNum).CpTemps(state.dataFluidProps->RefrigData(RefrigNum).NumCpPoints)); + print(state.files.debug, ",{:.2R}\n", refrig.CpTemps(refrig.NumCpPoints)); print(state.files.debug, "Specific Heat Saturated Fluid:"); - for (int Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumCpPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}\n", state.dataFluidProps->RefrigData(RefrigNum).CpfValues(Loop)); + for (int Loop = 1; Loop <= refrig.NumCpPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}\n", refrig.CpfValues(Loop)); } - print(state.files.debug, - ",{:.2R}", - state.dataFluidProps->RefrigData(RefrigNum).CpfValues(state.dataFluidProps->RefrigData(RefrigNum).NumCpPoints)); + print(state.files.debug, ",{:.2R}", refrig.CpfValues(refrig.NumCpPoints)); print(state.files.debug, "Specific Heat Saturated Fluid/Gas Data points:,Low Temperature=,{:.2R},Index=,{},High Temperature=,{:.2R},Index=,{}\n", - state.dataFluidProps->RefrigData(RefrigNum).CpfgLowTempValue, - state.dataFluidProps->RefrigData(RefrigNum).CpfgLowTempIndex, - state.dataFluidProps->RefrigData(RefrigNum).CpfgHighTempValue, - state.dataFluidProps->RefrigData(RefrigNum).CpfgHighTempIndex); + refrig.CpfgLowTempValue, + refrig.CpfgLowTempIndex, + refrig.CpfgHighTempValue, + refrig.CpfgHighTempIndex); print(state.files.debug, "Temperatures:"); - for (int Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumCpPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).CpTemps(Loop)); + for (int Loop = 1; Loop <= refrig.NumCpPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", refrig.CpTemps(Loop)); } - print(state.files.debug, - ",{:.2R}\n", - state.dataFluidProps->RefrigData(RefrigNum).CpTemps(state.dataFluidProps->RefrigData(RefrigNum).NumCpPoints)); + print(state.files.debug, ",{:.2R}\n", refrig.CpTemps(refrig.NumCpPoints)); print(state.files.debug, "Specific Heat Saturated Fluid/Gas:"); - for (int Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumCpPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).CpfgValues(Loop)); + for (int Loop = 1; Loop <= refrig.NumCpPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", refrig.CpfgValues(Loop)); } - print(state.files.debug, - ",{:.2R}\n", - state.dataFluidProps->RefrigData(RefrigNum).CpfgValues(state.dataFluidProps->RefrigData(RefrigNum).NumCpPoints)); + print(state.files.debug, ",{:.2R}\n", refrig.CpfgValues(refrig.NumCpPoints)); } - if (state.dataFluidProps->RefrigData(RefrigNum).NumRhoPoints > 0) { + if (refrig.NumRhoPoints > 0) { print(state.files.debug, "Density Saturated Fluid Data points:,Low Temperature=,{:.2R},Index=,{},High Temperature=,{:.2R},Index=,{}\n", - state.dataFluidProps->RefrigData(RefrigNum).RhofLowTempValue, - state.dataFluidProps->RefrigData(RefrigNum).RhofLowTempIndex, - state.dataFluidProps->RefrigData(RefrigNum).RhofHighTempValue, - state.dataFluidProps->RefrigData(RefrigNum).RhofHighTempIndex); + refrig.RhofLowTempValue, + refrig.RhofLowTempIndex, + refrig.RhofHighTempValue, + refrig.RhofHighTempIndex); print(state.files.debug, "Temperatures:"); - for (int Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumRhoPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).RhoTemps(Loop)); + for (int Loop = 1; Loop <= refrig.NumRhoPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", refrig.RhoTemps(Loop)); } - print(state.files.debug, - ",{:.2R}", - state.dataFluidProps->RefrigData(RefrigNum).RhoTemps(state.dataFluidProps->RefrigData(RefrigNum).NumRhoPoints)); + print(state.files.debug, ",{:.2R}", refrig.RhoTemps(refrig.NumRhoPoints)); print(state.files.debug, "Density Saturated Fluid:"); - for (int Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumRhoPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).RhofValues(Loop)); + for (int Loop = 1; Loop <= refrig.NumRhoPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", refrig.RhofValues(Loop)); } - print(state.files.debug, - ",{:.2R}", - state.dataFluidProps->RefrigData(RefrigNum).RhofValues(state.dataFluidProps->RefrigData(RefrigNum).NumRhoPoints)); + print(state.files.debug, ",{:.2R}", refrig.RhofValues(refrig.NumRhoPoints)); print(state.files.debug, "Density Saturated Fluid/Gas Data points:,Low Temperature=,{:.2R},Index=,{},High Temperature=,{:.2R},Index=,{}\n", - state.dataFluidProps->RefrigData(RefrigNum).RhofgLowTempValue, - state.dataFluidProps->RefrigData(RefrigNum).RhofgLowTempIndex, - state.dataFluidProps->RefrigData(RefrigNum).RhofgHighTempValue, - state.dataFluidProps->RefrigData(RefrigNum).RhofgHighTempIndex); + refrig.RhofgLowTempValue, + refrig.RhofgLowTempIndex, + refrig.RhofgHighTempValue, + refrig.RhofgHighTempIndex); print(state.files.debug, "Temperatures:"); - for (int Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumRhoPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).RhoTemps(Loop)); + for (int Loop = 1; Loop <= refrig.NumRhoPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", refrig.RhoTemps(Loop)); } - print(state.files.debug, - ",{:.2R}\n", - state.dataFluidProps->RefrigData(RefrigNum).RhoTemps(state.dataFluidProps->RefrigData(RefrigNum).NumRhoPoints)); + print(state.files.debug, ",{:.2R}\n", refrig.RhoTemps(refrig.NumRhoPoints)); print(state.files.debug, "Density Saturated Fluid/Gas:"); - for (int Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumRhoPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).RhofgValues(Loop)); + for (int Loop = 1; Loop <= refrig.NumRhoPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", refrig.RhofgValues(Loop)); } - print(state.files.debug, - ",{:.2R}\n", - state.dataFluidProps->RefrigData(RefrigNum).RhofgValues(state.dataFluidProps->RefrigData(RefrigNum).NumRhoPoints)); + print(state.files.debug, ",{:.2R}\n", refrig.RhofgValues(refrig.NumRhoPoints)); } - if (state.dataFluidProps->RefrigData(RefrigNum).NumSuperTempPts > 0 && state.dataFluidProps->RefrigData(RefrigNum).NumSuperPressPts > 0) { - print(state.files.debug, - "Superheated Gas Fluid Data points:,NumTemperaturePoints=,{},NumPressurePoints=,{}\n", - state.dataFluidProps->RefrigData(RefrigNum).NumSuperTempPts, - state.dataFluidProps->RefrigData(RefrigNum).NumSuperPressPts); + if (refrig.NumSuperTempPts > 0 && refrig.NumSuperPressPts > 0) { + print(state.files.debug, "Superheated Gas Fluid Data points:,NumTemperaturePoints=,{},NumPressurePoints=,{}\n", + refrig.NumSuperTempPts, + refrig.NumSuperPressPts); print(state.files.debug, "Superheated Temperatures:"); - for (int Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumSuperTempPts - 1; ++Loop) { - print(state.files.debug, ",{:.3R}", state.dataFluidProps->RefrigData(RefrigNum).SHTemps(Loop)); + for (int Loop = 1; Loop <= refrig.NumSuperTempPts - 1; ++Loop) { + print(state.files.debug, ",{:.3R}", refrig.SHTemps(Loop)); } - print(state.files.debug, - ",{:.3R}\n", - state.dataFluidProps->RefrigData(RefrigNum).SHTemps(state.dataFluidProps->RefrigData(RefrigNum).NumSuperTempPts)); + print(state.files.debug, ",{:.3R}\n", refrig.SHTemps(refrig.NumSuperTempPts)); print(state.files.debug, "Superheated Pressures:"); - for (int Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumSuperPressPts - 1; ++Loop) { - print(state.files.debug, ",{:.3R}", state.dataFluidProps->RefrigData(RefrigNum).SHPress(Loop)); + for (int Loop = 1; Loop <= refrig.NumSuperPressPts - 1; ++Loop) { + print(state.files.debug, ",{:.3R}", refrig.SHPress(Loop)); } - print(state.files.debug, - ",{:.3R}\n", - state.dataFluidProps->RefrigData(RefrigNum).SHPress(state.dataFluidProps->RefrigData(RefrigNum).NumSuperPressPts)); - for (int Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumSuperPressPts; ++Loop) { - print(state.files.debug, "Superheated Pressure:#{}={:.2R}\n", Loop, state.dataFluidProps->RefrigData(RefrigNum).SHPress(Loop)); + print(state.files.debug, ",{:.3R}\n", refrig.SHPress(refrig.NumSuperPressPts)); + for (int Loop = 1; Loop <= refrig.NumSuperPressPts; ++Loop) { + print(state.files.debug, "Superheated Pressure:#{}={:.2R}\n", Loop, refrig.SHPress(Loop)); print(state.files.debug, "Enthalpy Superheated Gas:"); - for (int Loop1 = 1; Loop1 <= state.dataFluidProps->RefrigData(RefrigNum).NumSuperTempPts - 1; ++Loop1) { - print(state.files.debug, ",{:.3R}", state.dataFluidProps->RefrigData(RefrigNum).HshValues(Loop, Loop1)); + for (int Loop1 = 1; Loop1 <= refrig.NumSuperTempPts - 1; ++Loop1) { + print(state.files.debug, ",{:.3R}", refrig.HshValues(Loop, Loop1)); } - print(state.files.debug, - ",{:.3R}\n", - state.dataFluidProps->RefrigData(RefrigNum).HshValues(Loop, state.dataFluidProps->RefrigData(RefrigNum).NumSuperTempPts)); + print(state.files.debug, ",{:.3R}\n", refrig.HshValues(Loop, refrig.NumSuperTempPts)); } - for (int Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumSuperPressPts; ++Loop) { - print(state.files.debug, "Superheated Pressure:#{}={:.2R}\n", Loop, state.dataFluidProps->RefrigData(RefrigNum).SHPress(Loop)); + for (int Loop = 1; Loop <= refrig.NumSuperPressPts; ++Loop) { + print(state.files.debug, "Superheated Pressure:#{}={:.2R}\n", Loop, refrig.SHPress(Loop)); print(state.files.debug, "Density Superheated Gas:"); - for (int Loop1 = 1; Loop1 <= state.dataFluidProps->RefrigData(RefrigNum).NumSuperTempPts - 1; ++Loop1) { - print(state.files.debug, ",{:.3R}", state.dataFluidProps->RefrigData(RefrigNum).RhoshValues(Loop, Loop1)); + for (int Loop1 = 1; Loop1 <= refrig.NumSuperTempPts - 1; ++Loop1) { + print(state.files.debug, ",{:.3R}", refrig.RhoshValues(Loop, Loop1)); } - print(state.files.debug, - ",{:.3R}\n", - state.dataFluidProps->RefrigData(RefrigNum).RhoshValues(Loop, state.dataFluidProps->RefrigData(RefrigNum).NumSuperTempPts)); + print(state.files.debug, ",{:.3R}\n", refrig.RhoshValues(Loop, refrig.NumSuperTempPts)); } - for (int Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumSuperTempPts; ++Loop) { - print(state.files.debug, "Superheated Temperature:#{}={:.2R}\n", Loop, state.dataFluidProps->RefrigData(RefrigNum).SHTemps(Loop)); + for (int Loop = 1; Loop <= refrig.NumSuperTempPts; ++Loop) { + print(state.files.debug, "Superheated Temperature:#{}={:.2R}\n", Loop, refrig.SHTemps(Loop)); print(state.files.debug, "Enthalpy Superheated Gas:"); - for (int Loop1 = 1; Loop1 <= state.dataFluidProps->RefrigData(RefrigNum).NumSuperPressPts - 1; ++Loop1) { - print(state.files.debug, ",{:.3R}", state.dataFluidProps->RefrigData(RefrigNum).HshValues(Loop1, Loop)); + for (int Loop1 = 1; Loop1 <= refrig.NumSuperPressPts - 1; ++Loop1) { + print(state.files.debug, ",{:.3R}", refrig.HshValues(Loop1, Loop)); } - print(state.files.debug, - ",{:.3R}\n", - state.dataFluidProps->RefrigData(RefrigNum).HshValues(state.dataFluidProps->RefrigData(RefrigNum).NumSuperPressPts, Loop)); + print(state.files.debug, ",{:.3R}\n", refrig.HshValues(refrig.NumSuperPressPts, Loop)); } - for (int Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumSuperTempPts; ++Loop) { - print(state.files.debug, "Superheated Temperature:#{}={:.2R}\n", Loop, state.dataFluidProps->RefrigData(RefrigNum).SHTemps(Loop)); + for (int Loop = 1; Loop <= refrig.NumSuperTempPts; ++Loop) { + print(state.files.debug, "Superheated Temperature:#{}={:.2R}\n", Loop, refrig.SHTemps(Loop)); print(state.files.debug, "Density Superheated Gas:"); - for (int Loop1 = 1; Loop1 <= state.dataFluidProps->RefrigData(RefrigNum).NumSuperPressPts - 1; ++Loop1) { - print(state.files.debug, ",{:.3R}", state.dataFluidProps->RefrigData(RefrigNum).RhoshValues(Loop1, Loop)); + for (int Loop1 = 1; Loop1 <= refrig.NumSuperPressPts - 1; ++Loop1) { + print(state.files.debug, ",{:.3R}", refrig.RhoshValues(Loop1, Loop)); } - print( - state.files.debug, - ",{:.3R}\n", - state.dataFluidProps->RefrigData(RefrigNum).RhoshValues(state.dataFluidProps->RefrigData(RefrigNum).NumSuperPressPts, Loop)); + print(state.files.debug, ",{:.3R}\n", refrig.RhoshValues(refrig.NumSuperPressPts, Loop)); } } @@ -5405,184 +3399,127 @@ namespace FluidProperties { // ============================================ // ========= Pressure from Temperatures - print(state.files.debug, "Refrigerant={} **** Results ****\n", state.dataFluidProps->RefrigData(RefrigNum).Name); - if (state.dataFluidProps->RefrigData(RefrigNum).NumPsPoints > 0) { + print(state.files.debug, "Refrigerant={} **** Results ****\n", refrig.Name); + if (refrig.NumPsPoints > 0) { print(state.files.debug, "Pressure Results at Temperatures:"); - print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).PsTemps(1) - incr); - for (int Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumPsPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).PsTemps(Loop)); - Temperature = - state.dataFluidProps->RefrigData(RefrigNum).PsTemps(Loop) + - (state.dataFluidProps->RefrigData(RefrigNum).PsTemps(Loop + 1) - state.dataFluidProps->RefrigData(RefrigNum).PsTemps(Loop)) / - 2.0; + print(state.files.debug, ",{:.2R}", refrig.PsTemps(1) - incr); + for (int Loop = 1; Loop <= refrig.NumPsPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", refrig.PsTemps(Loop)); + Temperature = refrig.PsTemps(Loop) + (refrig.PsTemps(Loop + 1) - refrig.PsTemps(Loop)) / 2.0; print(state.files.debug, ",{:.2R}", Temperature); } - print(state.files.debug, - ",{:.2R}", - state.dataFluidProps->RefrigData(RefrigNum).PsTemps(state.dataFluidProps->RefrigData(RefrigNum).NumPsPoints)); - print(state.files.debug, - ",{:.2R}\n", - state.dataFluidProps->RefrigData(RefrigNum).PsTemps(state.dataFluidProps->RefrigData(RefrigNum).NumPsPoints) + incr); + print(state.files.debug, ",{:.2R}", refrig.PsTemps(refrig.NumPsPoints)); + print(state.files.debug, ",{:.2R}\n", refrig.PsTemps(refrig.NumPsPoints) + incr); print(state.files.debug, "Saturated Pressures:"); - Temperature = state.dataFluidProps->RefrigData(RefrigNum).PsTemps(1) - incr; - ReturnValue = GetSatPressureRefrig(state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, RefrigIndex, RoutineName); + Temperature = refrig.PsTemps(1) - incr; + ReturnValue = refrig.getSatPressure(state, Temperature, RoutineName); print(state.files.debug, ",{:.2R}", ReturnValue); - for (int Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumPsPoints - 1; ++Loop) { - Temperature = state.dataFluidProps->RefrigData(RefrigNum).PsTemps(Loop); - ReturnValue = - GetSatPressureRefrig(state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, RefrigIndex, RoutineName); + for (int Loop = 1; Loop <= refrig.NumPsPoints - 1; ++Loop) { + Temperature = refrig.PsTemps(Loop); + ReturnValue = refrig.getSatPressure(state, Temperature, RoutineName); print(state.files.debug, ",{:.2R}", ReturnValue); - Temperature = - state.dataFluidProps->RefrigData(RefrigNum).PsTemps(Loop) + - (state.dataFluidProps->RefrigData(RefrigNum).PsTemps(Loop + 1) - state.dataFluidProps->RefrigData(RefrigNum).PsTemps(Loop)) / - 2.0; - ReturnValue = - GetSatPressureRefrig(state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, RefrigIndex, RoutineName); + Temperature = refrig.PsTemps(Loop) + (refrig.PsTemps(Loop + 1) - refrig.PsTemps(Loop)) / 2.0; + ReturnValue = refrig.getSatPressure(state, Temperature, RoutineName); print(state.files.debug, ",{:.2R}", ReturnValue); } - Temperature = state.dataFluidProps->RefrigData(RefrigNum).PsTemps(state.dataFluidProps->RefrigData(RefrigNum).NumPsPoints); - ReturnValue = GetSatPressureRefrig(state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, RefrigIndex, RoutineName); + Temperature = refrig.PsTemps(refrig.NumPsPoints); + ReturnValue = refrig.getSatPressure(state, Temperature, RoutineName); print(state.files.debug, ",{:.2R}", ReturnValue); - Temperature = state.dataFluidProps->RefrigData(RefrigNum).PsTemps(state.dataFluidProps->RefrigData(RefrigNum).NumPsPoints) + incr; - ReturnValue = GetSatPressureRefrig(state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, RefrigIndex, RoutineName); + Temperature = refrig.PsTemps(refrig.NumPsPoints) + incr; + ReturnValue = refrig.getSatPressure(state, Temperature, RoutineName); print(state.files.debug, ",{:.2R}\n", ReturnValue); } // ========= Enthalpy from Temperatures - if (state.dataFluidProps->RefrigData(RefrigNum).NumHPoints > 0) { + if (refrig.NumHPoints > 0) { print(state.files.debug, "Enthalpy Results at Temperatures:"); - print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).HTemps(1) - incr); - for (int Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumHPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).HTemps(Loop)); - Temperature = - state.dataFluidProps->RefrigData(RefrigNum).HTemps(Loop) + - (state.dataFluidProps->RefrigData(RefrigNum).HTemps(Loop + 1) - state.dataFluidProps->RefrigData(RefrigNum).HTemps(Loop)) / - 2.0; + print(state.files.debug, ",{:.2R}", refrig.HTemps(1) - incr); + for (int Loop = 1; Loop <= refrig.NumHPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", refrig.HTemps(Loop)); + Temperature = refrig.HTemps(Loop) + (refrig.HTemps(Loop + 1) - refrig.HTemps(Loop)) / 2.0; print(state.files.debug, ",{:.2R}", Temperature); } - print(state.files.debug, - ",{:.2R}", - state.dataFluidProps->RefrigData(RefrigNum).HTemps(state.dataFluidProps->RefrigData(RefrigNum).NumHPoints)); - print(state.files.debug, - ",{:.2R}\n", - state.dataFluidProps->RefrigData(RefrigNum).HTemps(state.dataFluidProps->RefrigData(RefrigNum).NumHPoints) + incr); + print(state.files.debug, ",{:.2R}", refrig.HTemps(refrig.NumHPoints)); + print(state.files.debug, ",{:.2R}\n", refrig.HTemps(refrig.NumHPoints) + incr); print(state.files.debug, "Saturated Enthalpy:"); - Temperature = state.dataFluidProps->RefrigData(RefrigNum).HTemps(1) - incr; - ReturnValue = - GetSatEnthalpyRefrig(state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); + Temperature = refrig.HTemps(1) - incr; + ReturnValue = refrig.getSatEnthalpy(state, Temperature, Quality, RoutineName); print(state.files.debug, ",{:.2R}", ReturnValue); - for (int Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumHPoints - 1; ++Loop) { - Temperature = state.dataFluidProps->RefrigData(RefrigNum).HTemps(Loop); - ReturnValue = - GetSatEnthalpyRefrig(state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); + for (int Loop = 1; Loop <= refrig.NumHPoints - 1; ++Loop) { + Temperature = refrig.HTemps(Loop); + ReturnValue = refrig.getSatEnthalpy(state, Temperature, Quality, RoutineName); print(state.files.debug, ",{:.2R}", ReturnValue); - Temperature = - state.dataFluidProps->RefrigData(RefrigNum).HTemps(Loop) + - (state.dataFluidProps->RefrigData(RefrigNum).HTemps(Loop + 1) - state.dataFluidProps->RefrigData(RefrigNum).HTemps(Loop)) / - 2.0; - ReturnValue = - GetSatEnthalpyRefrig(state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); + Temperature = refrig.HTemps(Loop) + (refrig.HTemps(Loop + 1) - refrig.HTemps(Loop)) / 2.0; + ReturnValue = refrig.getSatEnthalpy(state, Temperature, Quality, RoutineName); print(state.files.debug, ",{:.2R}", ReturnValue); } - Temperature = state.dataFluidProps->RefrigData(RefrigNum).HTemps(state.dataFluidProps->RefrigData(RefrigNum).NumHPoints); - ReturnValue = - GetSatEnthalpyRefrig(state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); + Temperature = refrig.HTemps(refrig.NumHPoints); + ReturnValue = refrig.getSatEnthalpy(state, Temperature, Quality, RoutineName); print(state.files.debug, ",{:.2R}", ReturnValue); - Temperature = state.dataFluidProps->RefrigData(RefrigNum).HTemps(state.dataFluidProps->RefrigData(RefrigNum).NumHPoints) + incr; - ReturnValue = - GetSatEnthalpyRefrig(state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); + Temperature = refrig.HTemps(refrig.NumHPoints) + incr; + ReturnValue = refrig.getSatEnthalpy(state, Temperature, Quality, RoutineName); print(state.files.debug, ",{:.2R}\n", ReturnValue); } // ========= Specific Heat from Temperatures - if (state.dataFluidProps->RefrigData(RefrigNum).NumCpPoints > 0) { + if (refrig.NumCpPoints > 0) { print(state.files.debug, "Specific Heat Results at Temperatures:"); - print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).CpTemps(1) - incr); - for (int Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumCpPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).CpTemps(Loop)); - Temperature = - state.dataFluidProps->RefrigData(RefrigNum).CpTemps(Loop) + - (state.dataFluidProps->RefrigData(RefrigNum).CpTemps(Loop + 1) - state.dataFluidProps->RefrigData(RefrigNum).CpTemps(Loop)) / - 2.0; + print(state.files.debug, ",{:.2R}", refrig.CpTemps(1) - incr); + for (int Loop = 1; Loop <= refrig.NumCpPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", refrig.CpTemps(Loop)); + Temperature = refrig.CpTemps(Loop) + (refrig.CpTemps(Loop + 1) - refrig.CpTemps(Loop)) / 2.0; print(state.files.debug, ",{:.2R}", Temperature); } - print(state.files.debug, - ",{:.2R}", - state.dataFluidProps->RefrigData(RefrigNum).CpTemps(state.dataFluidProps->RefrigData(RefrigNum).NumCpPoints)); - print(state.files.debug, - ",{:.2R}\n", - state.dataFluidProps->RefrigData(RefrigNum).CpTemps(state.dataFluidProps->RefrigData(RefrigNum).NumCpPoints) + incr); + print(state.files.debug, ",{:.2R}", refrig.CpTemps(refrig.NumCpPoints)); + print(state.files.debug, ",{:.2R}\n", refrig.CpTemps(refrig.NumCpPoints) + incr); print(state.files.debug, "Saturated Specific Heat:"); - Temperature = state.dataFluidProps->RefrigData(RefrigNum).CpTemps(1) - incr; - ReturnValue = - GetSatSpecificHeatRefrig(state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); + Temperature = refrig.CpTemps(1) - incr; + ReturnValue = refrig.getSatSpecificHeat(state, Temperature, Quality, RoutineName); print(state.files.debug, ",{:.2R}", ReturnValue); - for (int Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumCpPoints - 1; ++Loop) { - Temperature = state.dataFluidProps->RefrigData(RefrigNum).CpTemps(Loop); - ReturnValue = GetSatSpecificHeatRefrig( - state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); + for (int Loop = 1; Loop <= refrig.NumCpPoints - 1; ++Loop) { + Temperature = refrig.CpTemps(Loop); + ReturnValue = refrig.getSatSpecificHeat(state, Temperature, Quality, RoutineName); print(state.files.debug, ",{:.2R}", ReturnValue); - Temperature = - state.dataFluidProps->RefrigData(RefrigNum).CpTemps(Loop) + - (state.dataFluidProps->RefrigData(RefrigNum).CpTemps(Loop + 1) - state.dataFluidProps->RefrigData(RefrigNum).CpTemps(Loop)) / - 2.0; - ReturnValue = GetSatSpecificHeatRefrig( - state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); + Temperature = refrig.CpTemps(Loop) + (refrig.CpTemps(Loop + 1) - refrig.CpTemps(Loop)) / 2.0; + ReturnValue = refrig.getSatSpecificHeat(state, Temperature, Quality, RoutineName); print(state.files.debug, ",{:.2R}", ReturnValue); } - Temperature = state.dataFluidProps->RefrigData(RefrigNum).CpTemps(state.dataFluidProps->RefrigData(RefrigNum).NumCpPoints); - ReturnValue = - GetSatSpecificHeatRefrig(state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); + Temperature = refrig.CpTemps(refrig.NumCpPoints); + ReturnValue = refrig.getSatSpecificHeat(state, Temperature, Quality, RoutineName); print(state.files.debug, ",{:.2R}", ReturnValue); - Temperature = state.dataFluidProps->RefrigData(RefrigNum).CpTemps(state.dataFluidProps->RefrigData(RefrigNum).NumCpPoints) + incr; - ReturnValue = - GetSatSpecificHeatRefrig(state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); + Temperature = refrig.CpTemps(refrig.NumCpPoints) + incr; + ReturnValue = refrig.getSatSpecificHeat(state, Temperature, Quality, RoutineName); print(state.files.debug, ",{:.2R}\n", ReturnValue); } // ========= Density from Temperatures - if (state.dataFluidProps->RefrigData(RefrigNum).NumRhoPoints > 0) { + if (refrig.NumRhoPoints > 0) { print(state.files.debug, "Density Results at Temperatures:"); - print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).RhoTemps(1) - incr); - for (int Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumRhoPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", state.dataFluidProps->RefrigData(RefrigNum).RhoTemps(Loop)); - Temperature = - state.dataFluidProps->RefrigData(RefrigNum).RhoTemps(Loop) + (state.dataFluidProps->RefrigData(RefrigNum).RhoTemps(Loop + 1) - - state.dataFluidProps->RefrigData(RefrigNum).RhoTemps(Loop)) / - 2.0; + print(state.files.debug, ",{:.2R}", refrig.RhoTemps(1) - incr); + for (int Loop = 1; Loop <= refrig.NumRhoPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", refrig.RhoTemps(Loop)); + Temperature = refrig.RhoTemps(Loop) + (refrig.RhoTemps(Loop + 1) - refrig.RhoTemps(Loop)) / 2.0; print(state.files.debug, ",{:.2R}", Temperature); } - print(state.files.debug, - ",{:.2R}", - state.dataFluidProps->RefrigData(RefrigNum).RhoTemps(state.dataFluidProps->RefrigData(RefrigNum).NumRhoPoints)); - print(state.files.debug, - ",{:.2R}\n", - state.dataFluidProps->RefrigData(RefrigNum).RhoTemps(state.dataFluidProps->RefrigData(RefrigNum).NumRhoPoints) + incr); + print(state.files.debug, ",{:.2R}", refrig.RhoTemps(refrig.NumRhoPoints)); + print(state.files.debug, ",{:.2R}\n", refrig.RhoTemps(refrig.NumRhoPoints) + incr); print(state.files.debug, "Saturated Density:"); - Temperature = state.dataFluidProps->RefrigData(RefrigNum).RhoTemps(1) - incr; - ReturnValue = - GetSatDensityRefrig(state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); + Temperature = refrig.RhoTemps(1) - incr; + ReturnValue = refrig.getSatDensity(state, Temperature, Quality, RoutineName); print(state.files.debug, ",{:.2R}", ReturnValue); - for (int Loop = 1; Loop <= state.dataFluidProps->RefrigData(RefrigNum).NumRhoPoints - 1; ++Loop) { - Temperature = state.dataFluidProps->RefrigData(RefrigNum).RhoTemps(Loop); - ReturnValue = - GetSatDensityRefrig(state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); + for (int Loop = 1; Loop <= refrig.NumRhoPoints - 1; ++Loop) { + Temperature = refrig.RhoTemps(Loop); + ReturnValue = refrig.getSatDensity(state, Temperature, Quality, RoutineName); print(state.files.debug, ",{:.2R}", ReturnValue); - Temperature = - state.dataFluidProps->RefrigData(RefrigNum).RhoTemps(Loop) + (state.dataFluidProps->RefrigData(RefrigNum).RhoTemps(Loop + 1) - - state.dataFluidProps->RefrigData(RefrigNum).RhoTemps(Loop)) / - 2.0; - ReturnValue = - GetSatDensityRefrig(state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); + Temperature = refrig.RhoTemps(Loop) + (refrig.RhoTemps(Loop + 1) - refrig.RhoTemps(Loop)) / 2.0; + ReturnValue = refrig.getSatDensity(state, Temperature, Quality, RoutineName); print(state.files.debug, ",{:.2R}", ReturnValue); } - Temperature = state.dataFluidProps->RefrigData(RefrigNum).RhoTemps(state.dataFluidProps->RefrigData(RefrigNum).NumRhoPoints); - ReturnValue = - GetSatDensityRefrig(state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); + Temperature = refrig.RhoTemps(refrig.NumRhoPoints); + ReturnValue = refrig.getSatDensity(state, Temperature, Quality, RoutineName); print(state.files.debug, ",{:.2R}", ReturnValue); - Temperature = state.dataFluidProps->RefrigData(RefrigNum).RhoTemps(state.dataFluidProps->RefrigData(RefrigNum).NumRhoPoints) + incr; - ReturnValue = - GetSatDensityRefrig(state, state.dataFluidProps->RefrigData(RefrigNum).Name, Temperature, Quality, RefrigIndex, RoutineName); + Temperature = refrig.RhoTemps(refrig.NumRhoPoints) + incr; + ReturnValue = refrig.getSatDensity(state, Temperature, Quality, RoutineName); print(state.files.debug, ",{:.2R}\n", ReturnValue); } } @@ -5590,7 +3527,7 @@ namespace FluidProperties { //***************************************************************************** - Real64 RefrigerantData::getSatPressure(EnergyPlusData &state, + Real64 RefrigProps::getSatPressure(EnergyPlusData &state, Real64 const Temperature, // actual temperature given as input std::string_view const CalledFrom // routine this function was called from (error messages) ) @@ -5608,13 +3545,15 @@ namespace FluidProperties { // and linearly interpolates the corresponding saturation pressure values. // FUNCTION PARAMETER DEFINITIONS: - static constexpr std::string_view routineName = "RefrigerantData::getSatPressure"; + static constexpr std::string_view routineName = "RefrigProps::getSatPressure"; Real64 ReturnValue = 0; bool ErrorFlag = false; // error flag for current call int LoTempIndex = FindArrayIndex(Temperature, this->PsTemps, this->PsLowTempIndex, this->PsHighTempIndex); + auto &df = state.dataFluidProps; + // check for out of data bounds problems if (LoTempIndex == 0) { ReturnValue = this->PsValues(this->PsLowTempIndex); @@ -5631,14 +3570,13 @@ namespace FluidProperties { } if (!state.dataGlobal->WarmupFlag && ErrorFlag) { - auto &refrigError = state.dataFluidProps->RefrigErrorTracking(this->Num); - ++refrigError.SatTempErrCount; + ++this->errors[(int)RefrigError::SatTemp].count; // send warning - if (refrigError.SatTempErrCount <= state.dataFluidProps->RefrigerantErrorLimitTest) { + if (this->errors[(int)RefrigError::SatTemp].count <= df->RefrigErrorLimitTest) { ShowSevereMessage(state, format("{}: Saturation temperature is out of range for refrigerant [{}] supplied data: **", routineName, - refrigError.Name)); + this->Name)); ShowContinueError(state, format("...Called From:{}, supplied data range=[{:.2R},{:.2R}]", CalledFrom, @@ -5650,8 +3588,8 @@ namespace FluidProperties { } ShowRecurringSevereErrorAtEnd(state, format("{}: Saturation temperature is out of range for refrigerant [{}] supplied data: **", - routineName, refrigError.Name), - refrigError.SatTempErrIndex, + routineName, this->Name), + this->errors[(int)RefrigError::SatTemp].index, Temperature, Temperature, _, @@ -5663,7 +3601,7 @@ namespace FluidProperties { } Real64 GetSatPressureRefrig(EnergyPlusData &state, - std::string_view const Refrigerant, // carries in substance name + std::string_view const refrigName, // carries in substance name Real64 const Temperature, // actual temperature given as input int &RefrigIndex, // Index to Refrigerant Properties std::string_view const CalledFrom // routine this function was called from (error messages) @@ -5680,40 +3618,24 @@ namespace FluidProperties { // METHODOLOGY EMPLOYED: // Calls FindArrayIndex to find indices either side of requested temperature // and linearly interpolates the corresponding saturation pressure values. + auto &df = state.dataFluidProps; - // FUNCTION LOCAL VARIABLE DECLARATIONS: - int HiTempIndex; // index value of next highest Temperature from table - int LoTempIndex; // index value of next lowest Temperature from table - Real64 TempInterpRatio; // ratio to interpolate in temperature domain - - int RefrigNum = 0; // index for refrigerant under consideration - if (state.dataFluidProps->NumOfRefrigerants == 0) { - ReportFatalRefrigerantErrors( - state, state.dataFluidProps->NumOfRefrigerants, RefrigNum, true, Refrigerant, "GetSatPressureRefrig", "properties", CalledFrom); - } - - bool ErrorFlag = false; - - if (RefrigIndex > 0) { - RefrigNum = RefrigIndex; - } else { - // Find which refrigerant (index) is being requested - RefrigNum = GetRefrigNum(state, Refrigerant); - if (RefrigNum == 0) { - ReportFatalRefrigerantErrors( - state, state.dataFluidProps->NumOfRefrigerants, RefrigNum, true, Refrigerant, "GetSatPressureRefrig", "properties", CalledFrom); + if (RefrigIndex == 0) { + if ((RefrigIndex = GetRefrigNum(state, refrigName)) == 0) { + ShowSevereError(state, format("Refrigerant \"{}\" not found, called from: {}", refrigName, CalledFrom)); + ShowFatalError(state, "Program terminates due to preceding condition."); + return 0.0; } - RefrigIndex = RefrigNum; } - return state.dataFluidProps->RefrigData(RefrigNum).getSatPressure(state, Temperature, CalledFrom); + return df->RefrigData(RefrigIndex).getSatPressure(state, Temperature, CalledFrom); } //***************************************************************************** - Real64 RefrigerantData::getSatTemperature(EnergyPlusData &state, - Real64 const Pressure, // actual temperature given as input - std::string_view const CalledFrom // routine this function was called from (error messages) + Real64 RefrigProps::getSatTemperature(EnergyPlusData &state, + Real64 const Pressure, // actual temperature given as input + std::string_view const CalledFrom // routine this function was called from (error messages) ) { @@ -5732,39 +3654,39 @@ namespace FluidProperties { Real64 ReturnValue; // FUNCTION PARAMETER DEFINITIONS: - static constexpr std::string_view routineName = "RefrigerantData::getSatTemperature"; + static constexpr std::string_view routineName = "RefrigProps::getSatTemperature"; // FUNCTION LOCAL VARIABLE DECLARATIONS: bool ErrorFlag; // error flag for current call + auto &df = state.dataFluidProps; + // get the array indices int LoPresIndex = FindArrayIndex(Pressure, this->PsValues, this->PsLowPresIndex, this->PsHighPresIndex); - int HiPresIndex = LoPresIndex + 1; // check for out of data bounds problems if (LoPresIndex == 0) { ReturnValue = this->PsTemps(this->PsLowPresIndex); ErrorFlag = true; - } else if (HiPresIndex > this->PsHighPresIndex) { + } else if (LoPresIndex+1 > this->PsHighPresIndex) { ReturnValue = this->PsTemps(this->PsHighPresIndex); ErrorFlag = true; } else { // find interpolation ratio w.r.t temperature - Real64 PresInterpRatio = (Pressure - this->PsValues(LoPresIndex)) / (this->PsValues(HiPresIndex) - this->PsValues(LoPresIndex)); + Real64 PresInterpRatio = (Pressure - this->PsValues(LoPresIndex)) / (this->PsValues(LoPresIndex+1) - this->PsValues(LoPresIndex)); // apply final linear interpolation - ReturnValue = this->PsTemps(LoPresIndex) + PresInterpRatio * (this->PsTemps(HiPresIndex) - this->PsTemps(LoPresIndex)); + ReturnValue = this->PsTemps(LoPresIndex) + PresInterpRatio * (this->PsTemps(LoPresIndex+1) - this->PsTemps(LoPresIndex)); } if (!state.dataGlobal->WarmupFlag && ErrorFlag) { - auto &refrigError = state.dataFluidProps->RefrigErrorTracking(this->Num); - ++refrigError.SatPressErrCount; + ++this->errors[(int)RefrigError::SatPress].count; // send warning - if (refrigError.SatPressErrCount <= state.dataFluidProps->RefrigerantErrorLimitTest) { + if (this->errors[(int)RefrigError::SatPress].count <= df->RefrigErrorLimitTest) { ShowSevereMessage(state, format("{}: Saturation pressure is out of range for refrigerant [{}] supplied data: **", routineName, - refrigError.Name)); + this->Name)); ShowContinueError(state, format("...Called From:{}, supplied data range=[{:.0R},{:.0R}]", CalledFrom, @@ -5775,8 +3697,8 @@ namespace FluidProperties { ShowContinueErrorTimeStamp(state, ""); } ShowRecurringSevereErrorAtEnd(state, - format("{}: Saturation pressure is out of range for refrigerant [{}] supplied data: **", routineName, refrigError.Name), - refrigError.SatPressErrIndex, + format("{}: Saturation pressure is out of range for refrigerant [{}] supplied data: **", routineName, this->Name), + this->errors[(int)RefrigError::SatPress].index, Pressure, Pressure, _, @@ -5787,7 +3709,7 @@ namespace FluidProperties { } Real64 GetSatTemperatureRefrig(EnergyPlusData &state, - std::string_view const Refrigerant, // carries in substance name + std::string_view const refrigName, // carries in substance name Real64 const Pressure, // actual temperature given as input int &RefrigIndex, // Index to Refrigerant Properties std::string_view const CalledFrom // routine this function was called from (error messages) @@ -5804,44 +3726,22 @@ namespace FluidProperties { // METHODOLOGY EMPLOYED: // Calls FindArrayIndex to find indices either side of requested pressure // and linearly interpolates the corresponding saturation temperature values. + auto &df = state.dataFluidProps; - // FUNCTION LOCAL VARIABLE DECLARATIONS: - int HiPresIndex; // index value of next highest Temperature from table - int LoPresIndex; // index value of next lowest Temperature from table - Real64 PresInterpRatio; // ratio to interpolate in temperature domain - - int RefrigNum = 0; // index for refrigerant under consideration - if (state.dataFluidProps->NumOfRefrigerants == 0) { - ReportFatalRefrigerantErrors( - state, state.dataFluidProps->NumOfRefrigerants, RefrigNum, true, Refrigerant, "GetSatTemperatureRefrig", "properties", CalledFrom); - } - - bool ErrorFlag = false; - - if (RefrigIndex > 0) { - RefrigNum = RefrigIndex; - } else { - // Find which refrigerant (index) is being requested - RefrigNum = GetRefrigNum(state, Refrigerant); - if (RefrigNum == 0) { - ReportFatalRefrigerantErrors(state, - state.dataFluidProps->NumOfRefrigerants, - RefrigNum, - true, - Refrigerant, - "GetSatTemperatureRefrig", - "properties", - CalledFrom); + if (RefrigIndex == 0) { + if ((RefrigIndex = GetRefrigNum(state, refrigName)) == 0) { + ShowSevereError(state, format("Refrigerant \"{}\" not found, called from: {}", refrigName, CalledFrom)); + ShowFatalError(state, "Program terminates due to preceding condition."); + return 0.0; } - RefrigIndex = RefrigNum; } - return state.dataFluidProps->RefrigData(RefrigNum).getSatTemperature(state, Pressure, CalledFrom); + return df->RefrigData(RefrigIndex).getSatTemperature(state, Pressure, CalledFrom); } //***************************************************************************** - Real64 RefrigerantData::getSatEnthalpy(EnergyPlusData &state, + Real64 RefrigProps::getSatEnthalpy(EnergyPlusData &state, Real64 const Temperature, // actual temperature given as input Real64 const Quality, // actual quality given as input std::string_view const CalledFrom // routine this function was called from (error messages) @@ -5868,7 +3768,7 @@ namespace FluidProperties { } Real64 GetSatEnthalpyRefrig(EnergyPlusData &state, - std::string_view const Refrigerant, // carries in substance name + std::string_view const refrigName, // carries in substance name Real64 const Temperature, // actual temperature given as input Real64 const Quality, // actual quality given as input int &RefrigIndex, // Index to Refrigerant Properties @@ -5890,40 +3790,22 @@ namespace FluidProperties { // Calls GetInterpolatedSatProp to linearly interpolate between the saturated // liquid and vapour enthalpies according to the given quality. - // FUNCTION PARAMETER DEFINITIONS: - static constexpr std::string_view RoutineName("GetSatEnthalpyRefrig"); - // FUNCTION LOCAL VARIABLE DECLARATIONS: - int RefrigNum = 0; - if (state.dataFluidProps->NumOfRefrigerants == 0) { - ReportFatalRefrigerantErrors( - state, state.dataFluidProps->NumOfRefrigerants, RefrigNum, true, Refrigerant, RoutineName, "properties", CalledFrom); - } - - if ((Quality < 0.0) || (Quality > 1.0)) { - ShowSevereError(state, fmt::format("{}: Refrigerant \"{}\", invalid quality, called from {}", RoutineName, Refrigerant, CalledFrom)); - ShowContinueError(state, format("Saturated refrigerant quality must be between 0 and 1, entered value=[{:.4R}].", Quality)); - ShowFatalError(state, "Program terminates due to preceding condition."); - } - - if (RefrigIndex > 0) { - RefrigNum = RefrigIndex; - } else { - // Find which refrigerant (index) is being requested - RefrigNum = GetRefrigNum(state, Refrigerant); - if (RefrigNum == 0) { - ReportFatalRefrigerantErrors( - state, state.dataFluidProps->NumOfRefrigerants, RefrigNum, true, Refrigerant, RoutineName, "properties", CalledFrom); + auto &df = state.dataFluidProps; + + if (RefrigIndex == 0) { + if ((RefrigIndex = GetRefrigNum(state, refrigName)) == 0) { + ShowSevereError(state, format("Refrigerant \"{}\" not found, called from: {}", refrigName, CalledFrom)); + ShowFatalError(state, "Program terminates due to preceding condition."); + return 0.0; } - RefrigIndex = RefrigNum; } - - return state.dataFluidProps->RefrigData(RefrigNum).getSatEnthalpy(state, Temperature, Quality, CalledFrom); + return df->RefrigData(RefrigIndex).getSatEnthalpy(state, Temperature, Quality, CalledFrom); } //***************************************************************************** - Real64 RefrigerantData::getSatDensity(EnergyPlusData &state, + Real64 RefrigProps::getSatDensity(EnergyPlusData &state, Real64 const Temperature, // actual temperature given as input Real64 const Quality, // actual quality given as input std::string_view const CalledFrom // routine this function was called from (error messages) @@ -5948,7 +3830,9 @@ namespace FluidProperties { Real64 ReturnValue; // FUNCTION PARAMETER DEFINITIONS: - static constexpr std::string_view routineName = "RefrigerantData::getSatDensity"; + static constexpr std::string_view routineName = "RefrigProps::getSatDensity"; + + auto &df = state.dataFluidProps; if ((Quality < 0.0) || (Quality > 1.0)) { ShowSevereError(state, fmt::format("{}Refrigerant \"{}\", invalid quality, called from {}", routineName, this->Name, CalledFrom)); @@ -5997,14 +3881,13 @@ namespace FluidProperties { } if (!state.dataGlobal->WarmupFlag && ErrorFlag) { - auto &refrigError = state.dataFluidProps->RefrigErrorTracking(this->Num); - ++refrigError.SatTempDensityErrCount; + ++this->errors[(int)RefrigError::SatTempDensity].count; // send warning - if (refrigError.SatTempDensityErrCount <= state.dataFluidProps->RefrigerantErrorLimitTest) { + if (this->errors[(int)RefrigError::SatTempDensity].count <= df->RefrigErrorLimitTest) { ShowSevereMessage(state, format("{}: Saturation temperature is out of range for refrigerant [{}] supplied data: **", routineName, - refrigError.Name)); + this->Name)); ShowContinueError(state, format("...Called From:{}, supplied data range=[{:.2R},{:.2R}]", CalledFrom, @@ -6015,8 +3898,8 @@ namespace FluidProperties { ShowContinueErrorTimeStamp(state, ""); } ShowRecurringSevereErrorAtEnd(state, - format("{}: Saturation temperature is out of range for refrigerant [{}] supplied data: **", routineName, refrigError.Name), - refrigError.SatTempDensityErrIndex, + format("{}: Saturation temperature is out of range for refrigerant [{}] supplied data: **", routineName, this->Name), + this->errors[(int)RefrigError::SatTempDensity].index, Temperature, Temperature, _, @@ -6027,7 +3910,7 @@ namespace FluidProperties { } Real64 GetSatDensityRefrig(EnergyPlusData &state, - std::string_view const Refrigerant, // carries in substance name + std::string_view const refrigName, // carries in substance name Real64 const Temperature, // actual temperature given as input Real64 const Quality, // actual quality given as input int &RefrigIndex, // Index to Refrigerant Properties @@ -6049,37 +3932,22 @@ namespace FluidProperties { // Calls GetInterpolatedSatProp to linearly interpolate between the saturated // liquid and vapour densities according to the given quality. - // FUNCTION PARAMETER DEFINITIONS: - static constexpr std::string_view RoutineName("GetSatDensityRefrig: "); - - // error counters and dummy string - - int RefrigNum = 0; - if (state.dataFluidProps->NumOfRefrigerants == 0) { - ReportFatalRefrigerantErrors( - state, state.dataFluidProps->NumOfRefrigerants, RefrigNum, true, Refrigerant, "GetSatDensityRefrig", "properties", CalledFrom); - } - - // Find which refrigerant (index) is being requested and then determine - // where the temperature is within the temperature array - if (RefrigIndex > 0) { - RefrigNum = RefrigIndex; - } else { - // Find which refrigerant (index) is being requested - RefrigNum = GetRefrigNum(state, Refrigerant); - if (RefrigNum == 0) { - ReportFatalRefrigerantErrors( - state, state.dataFluidProps->NumOfRefrigerants, RefrigNum, true, Refrigerant, "GetSatDensityRefrig", "properties", CalledFrom); + auto &df = state.dataFluidProps; + + if (RefrigIndex == 0) { + if ((RefrigIndex = GetRefrigNum(state, refrigName)) == 0) { + ShowSevereError(state, format("Refrigerant \"{}\" not found, called from: {}", refrigName, CalledFrom)); + ShowFatalError(state, "Program terminates due to preceding condition."); + return 0.0; } - RefrigIndex = RefrigNum; } - return state.dataFluidProps->RefrigData(RefrigNum).getSatDensity(state, Temperature, Quality, CalledFrom); + return df->RefrigData(RefrigIndex).getSatDensity(state, Temperature, Quality, CalledFrom); } //***************************************************************************** - Real64 RefrigerantData::getSatSpecificHeat(EnergyPlusData &state, + Real64 RefrigProps::getSatSpecificHeat(EnergyPlusData &state, Real64 const Temperature, // actual temperature given as input Real64 const Quality, // actual quality given as input std::string_view const CalledFrom // routine this function was called from (error messages) @@ -6101,7 +3969,7 @@ namespace FluidProperties { // liquid and vapour specific heats according to the given quality. // FUNCTION PARAMETER DEFINITIONS: - static constexpr std::string_view routineName = "RefrigerantData::getSatSpecificHeat"; + static constexpr std::string_view routineName = "RefrigProps::getSatSpecificHeat"; if ((Quality < 0.0) || (Quality > 1.0)) { ShowSevereError(state, fmt::format("{}: Refrigerant \"{}\", invalid quality, called from {}", routineName, this->Name, CalledFrom)); @@ -6123,7 +3991,7 @@ namespace FluidProperties { } Real64 GetSatSpecificHeatRefrig(EnergyPlusData &state, - std::string_view const Refrigerant, // carries in substance name + std::string_view const refrigName, // carries in substance name Real64 const Temperature, // actual temperature given as input Real64 const Quality, // actual quality given as input int &RefrigIndex, // Index to Refrigerant Properties @@ -6145,41 +4013,22 @@ namespace FluidProperties { // Calls GetInterpolatedSatProp to linearly interpolate between the saturated // liquid and vapour specific heats according to the given quality. - // FUNCTION PARAMETER DEFINITIONS: - static constexpr std::string_view RoutineName("GetSatSpecificHeatRefrig: "); - - int RefrigNum = 0; - if (state.dataFluidProps->NumOfRefrigerants == 0) { - ReportFatalRefrigerantErrors( - state, state.dataFluidProps->NumOfRefrigerants, RefrigNum, true, Refrigerant, "GetSatSpecificHeatRefrig", "properties", CalledFrom); - } - - // Find which refrigerant (index) is being requested and then determine - // where the temperature is within the temperature array - if (RefrigIndex > 0) { - RefrigNum = RefrigIndex; - } else { - // Find which refrigerant (index) is being requested - RefrigNum = GetRefrigNum(state, Refrigerant); - if (RefrigNum == 0) { - ReportFatalRefrigerantErrors(state, - state.dataFluidProps->NumOfRefrigerants, - RefrigNum, - true, - Refrigerant, - "GetSatSpecificHeatRefrig", - "properties", - CalledFrom); + auto &df = state.dataFluidProps; + + if (RefrigIndex == 0) { + if ((RefrigIndex = GetRefrigNum(state, refrigName)) == 0) { + ShowSevereError(state, format("Refrigerant \"{}\" not found, called from: {}", refrigName, CalledFrom)); + ShowFatalError(state, "Program terminates due to preceding condition."); + return 0.0; } - RefrigIndex = RefrigNum; } - return state.dataFluidProps->RefrigData(RefrigNum).getSatSpecificHeat(state, Temperature, Quality, CalledFrom); + return df->RefrigData(RefrigIndex).getSatSpecificHeat(state, Temperature, Quality, CalledFrom); } //***************************************************************************** - Real64 RefrigerantData::getSupHeatEnthalpy(EnergyPlusData &state, + Real64 RefrigProps::getSupHeatEnthalpy(EnergyPlusData &state, Real64 const Temperature, // actual temperature given as input Real64 const Pressure, // actual pressure given as input std::string_view const CalledFrom // routine this function was called from (error messages) @@ -6212,8 +4061,10 @@ namespace FluidProperties { Real64 ReturnValue; // FUNCTION PARAMETER DEFINITIONS: - static constexpr std::string_view routineName = "RefrigerantData::getSupHeatEnthalpy"; + static constexpr std::string_view routineName = "RefrigProps::getSupHeatEnthalpy"; + auto &df = state.dataFluidProps; + Real64 TempInterpRatio; Real64 PressInterpRatio; @@ -6299,20 +4150,19 @@ namespace FluidProperties { // inside the saturation dome. Best thing we can do is return saturation value if ((this->HshValues(LoPressIndex, TempIndex) <= 0.0) && (this->HshValues(HiPressIndex, TempIndex) <= 0.0) && (this->HshValues(LoPressIndex, HiTempIndex) <= 0.0) && (this->HshValues(HiPressIndex, HiTempIndex) <= 0.0)) { - ++state.dataFluidProps->SatErrCountGetSupHeatEnthalpyRefrig; + ++df->SatErrCountGetSupHeatEnthalpyRefrig; // set return value ReturnValue = this->getSatEnthalpy(state, Temperature, 1.0, fmt::format("{}:{}", routineName, CalledFrom)); // send warning if (!state.dataGlobal->WarmupFlag) { - auto &refrigError = state.dataFluidProps->RefrigErrorTracking(this->Num); - refrigError.SatSupEnthalpyErrCount += state.dataFluidProps->SatErrCountGetSupHeatEnthalpyRefrig; + this->errors[(int)RefrigError::SatSupEnthalpy].count += df->SatErrCountGetSupHeatEnthalpyRefrig; // send warning - if (refrigError.SatTempDensityErrCount <= state.dataFluidProps->RefrigerantErrorLimitTest) { + if (this->errors[(int)RefrigError::SatTempDensity].count <= df->RefrigErrorLimitTest) { ShowWarningMessage( state, format("{}: Refrigerant [{}] is saturated at the given conditions, saturated enthalpy at given temperature returned. **", routineName, - refrigError.Name)); + this->Name)); ShowContinueError(state, fmt::format("...Called From:{}", CalledFrom)); ShowContinueError(state, format("Refrigerant temperature = {:.2R}", Temperature)); ShowContinueError(state, format("Refrigerant pressure = {:.0R}", Pressure)); @@ -6320,8 +4170,8 @@ namespace FluidProperties { ShowContinueErrorTimeStamp(state, ""); } ShowRecurringWarningErrorAtEnd(state, - format("{}: Refrigerant [{}] saturated at the given conditions **", routineName, refrigError.Name), - refrigError.SatSupEnthalpyErrIndex, + format("{}: Refrigerant [{}] saturated at the given conditions **", routineName, this->Name), + this->errors[(int)RefrigError::SatSupEnthalpy].index, Temperature, Temperature, _, @@ -6335,13 +4185,12 @@ namespace FluidProperties { // some checks... if (ErrCount > 0) { // send temp range error if flagged - auto &refrigError = state.dataFluidProps->RefrigErrorTracking(this->Num); - refrigError.SatSupEnthalpyTempErrCount += CurTempRangeErrCount; - if (CurTempRangeErrCount > 0 && refrigError.SatSupEnthalpyTempErrCount <= state.dataFluidProps->RefrigerantErrorLimitTest) { + this->errors[(int)RefrigError::SatSupEnthalpy].count += CurTempRangeErrCount; + if (CurTempRangeErrCount > 0 && this->errors[(int)RefrigError::SatSupEnthalpyTemp].count <= df->RefrigErrorLimitTest) { ShowWarningMessage(state, format("{}: Refrigerant [{}] Temperature is out of range for superheated refrigerant enthalpy: values capped **", routineName, - refrigError.Name)); + this->Name)); ShowContinueError(state, fmt::format(" Called From:{}", CalledFrom)); ShowContinueErrorTimeStamp(state, ""); } @@ -6349,8 +4198,8 @@ namespace FluidProperties { ShowRecurringWarningErrorAtEnd(state, format("{}: Refrigerant [{}] Temperature is out of range for superheated refrigerant enthalpy: values capped **", routineName, - refrigError.Name), - refrigError.SatSupEnthalpyTempErrIndex, + this->Name), + this->errors[(int)RefrigError::SatSupEnthalpyTemp].index, Temperature, Temperature, _, @@ -6359,19 +4208,19 @@ namespace FluidProperties { } // send pressure range error if flagged - refrigError.SatSupEnthalpyPresErrCount += CurPresRangeErrCount; - if (CurPresRangeErrCount > 0 && refrigError.SatSupEnthalpyPresErrCount <= state.dataFluidProps->RefrigerantErrorLimitTest) { + this->errors[(int)RefrigError::SatSupEnthalpyPress].count += CurPresRangeErrCount; + if (CurPresRangeErrCount > 0 && this->errors[(int)RefrigError::SatSupEnthalpyPress].count <= df->RefrigErrorLimitTest) { ShowWarningMessage(state, format("{}: Refrigerant [{}] Pressure is out of range for superheated refrigerant enthalpy: values capped **", routineName, - refrigError.Name)); + this->Name)); ShowContinueError(state, fmt::format(" Called From:{}", CalledFrom)); ShowContinueErrorTimeStamp(state, ""); } if (CurPresRangeErrCount > 0) { ShowRecurringWarningErrorAtEnd(state, - format("{}: Refrigerant [{}] Pressure is out of range for superheated refrigerant enthalpy: values capped **", routineName, refrigError.Name), - refrigError.SatSupEnthalpyPresErrIndex, + format("{}: Refrigerant [{}] Pressure is out of range for superheated refrigerant enthalpy: values capped **", routineName, this->Name), + this->errors[(int)RefrigError::SatSupEnthalpyPress].index, Pressure, Pressure, _, @@ -6385,7 +4234,7 @@ namespace FluidProperties { } Real64 GetSupHeatEnthalpyRefrig(EnergyPlusData &state, - std::string_view const Refrigerant, // carries in substance name + std::string_view const refrigName, // carries in substance name Real64 const Temperature, // actual temperature given as input Real64 const Pressure, // actual pressure given as input int &RefrigIndex, // Index to Refrigerant Properties @@ -6416,35 +4265,22 @@ namespace FluidProperties { // is not clearly in the bounds of the superheated data. // FUNCTION PARAMETER DEFINITIONS: - static constexpr std::string_view routineName = "GetSupHeatEnthalpyRefrig"; - - int RefrigNum = 0; - if (state.dataFluidProps->NumOfRefrigerants == 0) { - ReportFatalRefrigerantErrors( - state, state.dataFluidProps->NumOfRefrigerants, RefrigNum, true, Refrigerant, routineName, "properties", CalledFrom); - } - - // Find which refrigerant (index) is being requested and then determine - // where the temperature and pressure are within the temperature and - // pressure arrays, respectively - if (RefrigIndex > 0) { - RefrigNum = RefrigIndex; - } else { - // Find which refrigerant (index) is being requested - RefrigNum = GetRefrigNum(state, Refrigerant); - if (RefrigNum == 0) { - ReportFatalRefrigerantErrors( - state, state.dataFluidProps->NumOfRefrigerants, RefrigNum, true, Refrigerant, routineName, "properties", CalledFrom); + auto &df = state.dataFluidProps; + + if (RefrigIndex == 0) { + if ((RefrigIndex = GetRefrigNum(state, refrigName)) == 0) { + ShowSevereError(state, format("Refrigerant \"{}\" not found, called from: {}", refrigName, CalledFrom)); + ShowFatalError(state, "Program terminates due to preceding condition."); + return 0.0; } - RefrigIndex = RefrigNum; } - - return state.dataFluidProps->RefrigData(RefrigNum).getSupHeatEnthalpy(state, Temperature, Pressure, CalledFrom); + + return df->RefrigData(RefrigIndex).getSupHeatEnthalpy(state, Temperature, Pressure, CalledFrom); } //***************************************************************************** - Real64 RefrigerantData::getSupHeatPressure(EnergyPlusData &state, + Real64 RefrigProps::getSupHeatPressure(EnergyPlusData &state, Real64 const Temperature, // actual temperature given as input Real64 const Enthalpy, // actual enthalpy given as input std::string_view const CalledFrom // routine this function was called from (error messages) @@ -6478,8 +4314,10 @@ namespace FluidProperties { // FUNCTION PARAMETERS: // the enthalpy calculated from the pressure found static constexpr std::string_view routineName = "GetSupHeatPressureRefrig"; - - // SUBROUTINE LOCAL VARIABLE DECLARATIONS: + + auto &df = state.dataFluidProps; + + // SUBROUTINE LOCAL VARIABLE DECLARATIONS: Real64 EnthalpyCheck; // recalculates enthalpy based on calculated pressure Real64 EnthalpyHigh; // Enthalpy value at interpolated pressure and high temperature Real64 EnthalpyLow; // Enthalpy value at interpolated pressure and low temperature @@ -6619,15 +4457,14 @@ namespace FluidProperties { // ** make error checks ** if (ErrCount > 0) { // send near saturation warning if flagged - auto &refrigError = state.dataFluidProps->RefrigErrorTracking(this->Num); - refrigError.SatSupPressureErrCount += CurSatErrCount; + this->errors[(int)RefrigError::SatSupPress].count += CurSatErrCount; // send warning - if (refrigError.SatSupPressureErrCount <= state.dataFluidProps->RefrigerantErrorLimitTest) { + if (this->errors[(int)RefrigError::SatSupPress].count <= df->RefrigErrorLimitTest) { ShowSevereMessage(state, format("{}: Refrigerant [{}] is saturated at the given enthalpy and temperature, saturated enthalpy at given " "temperature returned. **", routineName, - refrigError.Name)); + this->Name)); ShowContinueError(state, fmt::format("...Called From:{}", CalledFrom)); ShowContinueError(state, format("Refrigerant temperature = {:.2R}", Temperature)); ShowContinueError(state, format("Refrigerant Enthalpy = {:.3R}", Enthalpy)); @@ -6636,8 +4473,8 @@ namespace FluidProperties { } if (CurSatErrCount > 0) { ShowRecurringSevereErrorAtEnd(state, - format("{}: Refrigerant [{}] saturated at the given enthalpy and temperature **", routineName, refrigError.Name), - refrigError.SatSupPressureErrIndex, + format("{}: Refrigerant [{}] saturated at the given enthalpy and temperature **", routineName, this->Name), + this->errors[(int)RefrigError::SatSupPress].index, ReturnValue, ReturnValue, _, @@ -6646,19 +4483,19 @@ namespace FluidProperties { } // send temp range error if flagged - refrigError.SatSupPressureTempErrCount += CurTempRangeErrCount; - if (CurTempRangeErrCount > 0 && refrigError.SatSupPressureTempErrCount <= state.dataFluidProps->RefrigerantErrorLimitTest) { + this->errors[(int)RefrigError::SatSupPressTemp].count += CurTempRangeErrCount; + if (CurTempRangeErrCount > 0 && this->errors[(int)RefrigError::SatSupPressTemp].count <= df->RefrigErrorLimitTest) { ShowWarningMessage(state, format("{}: Refrigerant [{}] Temperature is out of range for superheated refrigerant pressure: values capped **", routineName, - refrigError.Name)); + this->Name)); ShowContinueError(state, fmt::format(" Called From:{}", CalledFrom)); ShowContinueErrorTimeStamp(state, ""); } if (CurTempRangeErrCount > 0) { ShowRecurringWarningErrorAtEnd(state, - format("{}: Refrigerant [{}] Temperature is out of range for superheated refrigerant pressure: values capped **", routineName, refrigError.Name), - refrigError.SatSupPressureTempErrIndex, + format("{}: Refrigerant [{}] Temperature is out of range for superheated refrigerant pressure: values capped **", routineName, this->Name), + this->errors[(int)RefrigError::SatSupPressTemp].index, Temperature, Temperature, _, @@ -6667,19 +4504,19 @@ namespace FluidProperties { } // send enthalpy range error if flagged - refrigError.SatSupPressureEnthErrCount += CurEnthalpyRangeErrCount; - if (CurEnthalpyRangeErrCount > 0 && refrigError.SatSupPressureEnthErrCount <= state.dataFluidProps->RefrigerantErrorLimitTest) { + this->errors[(int)RefrigError::SatSupPressEnthalpy].count += CurEnthalpyRangeErrCount; + if (CurEnthalpyRangeErrCount > 0 && this->errors[(int)RefrigError::SatSupPressEnthalpy].count <= df->RefrigErrorLimitTest) { ShowWarningMessage(state, format("{}: Refrigerant [{}] Pressure is out of range for superheated refrigerant enthalpy: values capped **", routineName, - refrigError.Name)); + this->Name)); ShowContinueError(state, fmt::format(" Called From:{}", CalledFrom)); ShowContinueErrorTimeStamp(state, ""); } if (CurEnthalpyRangeErrCount > 0) { ShowRecurringWarningErrorAtEnd(state, - format("{}: Refrigerant [{}] Pressure is out of range for superheated refrigerant pressure: values capped **", routineName, refrigError.Name), - refrigError.SatSupPressureEnthErrIndex, + format("{}: Refrigerant [{}] Pressure is out of range for superheated refrigerant pressure: values capped **", routineName, this->Name), + this->errors[(int)RefrigError::SatSupPressEnthalpy].index, Enthalpy, Enthalpy, _, @@ -6694,7 +4531,7 @@ namespace FluidProperties { Real64 GetSupHeatPressureRefrig(EnergyPlusData &state, - std::string const &Refrigerant, // carries in substance name + std::string const &refrigName, // carries in substance name Real64 const Temperature, // actual temperature given as input Real64 const Enthalpy, // actual enthalpy given as input int &RefrigIndex, // Index to Refrigerant Properties @@ -6722,39 +4559,22 @@ namespace FluidProperties { // and warnings given. For enthlpys lower than the saturated vapour value at the // given temperature result in the saturation pressure being returned (calls to // GetSatEnthalpy and GetSatPressure are made.) + auto &df = state.dataFluidProps; - int RefrigNum = 0; - if (state.dataFluidProps->NumOfRefrigerants == 0) { - ReportFatalRefrigerantErrors( - state, state.dataFluidProps->NumOfRefrigerants, RefrigNum, true, Refrigerant, "GetSupHeatPressureRefrig", "properties", CalledFrom); - } - - // Find which refrigerant (index) is being requested and then determine - // where the temperature is within the temperature array - if (RefrigIndex > 0) { - RefrigNum = RefrigIndex; - } else { - // Find which refrigerant (index) is being requested - RefrigNum = GetRefrigNum(state, Refrigerant); - if (RefrigNum == 0) { - ReportFatalRefrigerantErrors(state, - state.dataFluidProps->NumOfRefrigerants, - RefrigNum, - true, - Refrigerant, - "GetSupHeatPressureRefrig", - "properties", - CalledFrom); + if (RefrigIndex == 0) { + if ((RefrigIndex = GetRefrigNum(state, refrigName)) == 0) { + ShowSevereError(state, format("Refrigerant \"{}\" not found, called from: {}", refrigName, CalledFrom)); + ShowFatalError(state, "Program terminates due to preceding condition."); + return 0.0; } - RefrigIndex = RefrigNum; } - return state.dataFluidProps->RefrigData(RefrigNum).getSupHeatPressure(state, Temperature, Enthalpy, CalledFrom); + return df->RefrigData(RefrigIndex).getSupHeatPressure(state, Temperature, Enthalpy, CalledFrom); } //***************************************************************************** - Real64 RefrigerantData::getSupHeatTemp(EnergyPlusData &state, + Real64 RefrigProps::getSupHeatTemp(EnergyPlusData &state, Real64 const Pressure, // actual pressure given as input Real64 const Enthalpy, // actual enthalpy given as input Real64 TempLow, // lower bound of temperature in the iteration @@ -6787,8 +4607,6 @@ namespace FluidProperties { Real64 RefTSat; // Saturated temperature of the refrigerant. Used to check whether the refrigernat is in the superheat area Real64 Temp; // Temperature of the superheated refrigerant at the given enthalpy and pressure - auto &refrigError = state.dataFluidProps->RefrigErrorTracking(this->Num); - // check temperature data range and attempt to cap if necessary RefTHigh = this->PsHighTempValue; RefTSat = this->getSatTemperature(state, Pressure, fmt::format("{}:{}", routineName, CalledFrom)); @@ -6797,7 +4615,7 @@ namespace FluidProperties { ShowWarningMessage(state, format("{}: Refrigerant [{}] temperature lower bound is out of range for superheated refrigerant: values capped **", routineName, - refrigError.Name)); + this->Name)); ShowContinueError(state, fmt::format(" Called From:{}", CalledFrom)); ShowContinueErrorTimeStamp(state, ""); TempLow = RefTSat; @@ -6806,7 +4624,7 @@ namespace FluidProperties { ShowWarningMessage(state, format("{}: Refrigerant [{}] temperature lower bound is out of range for superheated refrigerant: values capped **", routineName, - refrigError.Name)); + this->Name)); ShowContinueError(state, fmt::format(" Called From:{}", CalledFrom)); ShowContinueErrorTimeStamp(state, ""); TempUp = RefTHigh; @@ -6815,7 +4633,7 @@ namespace FluidProperties { ShowWarningMessage(state, format("{}Refrigerant [{}] temperature lower bound is out of range for superheated refrigerant: values capped **", routineName, - refrigError.Name)); + this->Name)); ShowContinueError(state, fmt::format(" Called From:{}", CalledFrom)); ShowContinueErrorTimeStamp(state, ""); TempLow = RefTSat; @@ -6856,7 +4674,7 @@ namespace FluidProperties { } Real64 GetSupHeatTempRefrig(EnergyPlusData &state, - std::string_view const Refrigerant, // carries in substance name + std::string_view const refrigName, // carries in substance name Real64 const Pressure, // actual pressure given as input Real64 const Enthalpy, // actual enthalpy given as input Real64 TempLow, // lower bound of temperature in the iteration @@ -6875,39 +4693,22 @@ namespace FluidProperties { // METHODOLOGY EMPLOYED: // Perform iterations to identify the temperature by calling GetSupHeatEnthalpyRefrig. - - int RefrigNum = 0; - if (state.dataFluidProps->NumOfRefrigerants == 0) { - ReportFatalRefrigerantErrors( - state, state.dataFluidProps->NumOfRefrigerants, RefrigNum, true, Refrigerant, "GetSupHeatPressureRefrig", "properties", CalledFrom); - } - - // Find which refrigerant (index) is being requested and then determine - // where the temperature is within the temperature array - if (RefrigIndex > 0) { - RefrigNum = RefrigIndex; - } else { - // Find which refrigerant (index) is being requested - RefrigNum = GetRefrigNum(state, Refrigerant); - if (RefrigNum == 0) { - ReportFatalRefrigerantErrors(state, - state.dataFluidProps->NumOfRefrigerants, - RefrigNum, - true, - Refrigerant, - "GetSupHeatPressureRefrig", - "properties", - CalledFrom); + auto &df = state.dataFluidProps; + + if (RefrigIndex == 0) { + if ((RefrigIndex = GetRefrigNum(state, refrigName)) == 0) { + ShowSevereError(state, format("Refrigerant \"{}\" not found, called from: {}", refrigName, CalledFrom)); + ShowFatalError(state, "Program terminates due to preceding condition."); + return 0.0; } - RefrigIndex = RefrigNum; } - return state.dataFluidProps->RefrigData(RefrigNum).getSupHeatTemp(state, Pressure, Enthalpy, TempLow, TempUp, CalledFrom); + return df->RefrigData(RefrigIndex).getSupHeatTemp(state, Pressure, Enthalpy, TempLow, TempUp, CalledFrom); } //***************************************************************************** - Real64 RefrigerantData::getSupHeatDensity(EnergyPlusData &state, + Real64 RefrigProps::getSupHeatDensity(EnergyPlusData &state, Real64 const Temperature, // actual temperature given as input Real64 const Pressure, // actual pressure given as input std::string_view const CalledFrom // routine this function was called from (error messages) @@ -6939,8 +4740,10 @@ namespace FluidProperties { // Return value Real64 ReturnValue; + auto &df = state.dataFluidProps; + // FUNCTION PARAMETERS: - static constexpr std::string_view routineName = "RefrigerantData::getSupHeatDensity"; + static constexpr std::string_view routineName = "RefrigProps::getSupHeatDensity"; // SUBROUTINE LOCAL VARIABLE DECLARATIONS: Real64 TempInterpRatio; // Interpolation ratio w.r.t temperature @@ -7033,28 +4836,26 @@ namespace FluidProperties { // interpolate w.r.t. temperature ReturnValue = TempInterpRatio * DensityHigh + (1.0 - TempInterpRatio) * DensityLow; } else { // All data is at zero: we are completely inside the saturation dome. Best thing we can do is return saturation value - - auto &refrigError = state.dataFluidProps->RefrigErrorTracking(this->Num); - ++state.dataFluidProps->SatErrCountGetSupHeatDensityRefrig; + ++df->SatErrCountGetSupHeatDensityRefrig; // send warning - refrigError.SatSupDensityErrCount += state.dataFluidProps->SatErrCountGetSupHeatDensityRefrig; + this->errors[(int)RefrigError::SatSupDensity].count += df->SatErrCountGetSupHeatDensityRefrig; // send warning - if (refrigError.SatSupDensityErrCount <= state.dataFluidProps->RefrigerantErrorLimitTest) { + if (this->errors[(int)RefrigError::SatSupDensity].count <= df->RefrigErrorLimitTest) { ShowWarningMessage( state, format("{}: Refrigerant [{}] is saturated at the given conditions, saturated density at given temperature returned. **", routineName, - refrigError.Name)); + this->Name)); ShowContinueError(state, fmt::format("...Called From:{}", CalledFrom)); ShowContinueError(state, format("Refrigerant temperature = {:.2R}", Temperature)); ShowContinueError(state, format("Refrigerant pressure = {:.0R}", Pressure)); ShowContinueError(state, format("Returned Density value = {:.3R}", saturated_density)); ShowContinueErrorTimeStamp(state, ""); } - if (state.dataFluidProps->SatErrCountGetSupHeatDensityRefrig > 0) { + if (df->SatErrCountGetSupHeatDensityRefrig > 0) { ShowRecurringWarningErrorAtEnd(state, - format("{}: Refrigerant [{}] saturated at the given conditions **", routineName, refrigError.Name), - refrigError.SatSupEnthalpyErrIndex, + format("{}: Refrigerant [{}] saturated at the given conditions **", routineName, this->Name), + this->errors[(int)RefrigError::SatSupEnthalpy].index, Temperature, Temperature, _, @@ -7068,21 +4869,20 @@ namespace FluidProperties { // some checks... if (ErrCount > 0) { // send temp range error if flagged - auto &refrigError = state.dataFluidProps->RefrigErrorTracking(this->Num); - refrigError.SatSupDensityTempErrCount += CurTempRangeErrCount; - if (CurTempRangeErrCount > 0 && refrigError.SatSupDensityTempErrCount <= state.dataFluidProps->RefrigerantErrorLimitTest) { + this->errors[(int)RefrigError::SatSupDensityTemp].count += CurTempRangeErrCount; + if (CurTempRangeErrCount > 0 && this->errors[(int)RefrigError::SatSupDensityTemp].count <= df->RefrigErrorLimitTest) { ShowWarningMessage( state, format("{}: Refrigerant [{}] Temperature is out of range for superheated refrigerant density: values capped **", routineName, - refrigError.Name)); + this->Name)); ShowContinueError(state, fmt::format(" Called From:{}", CalledFrom)); ShowContinueErrorTimeStamp(state, ""); } if (CurTempRangeErrCount > 0) { ShowRecurringWarningErrorAtEnd(state, - format("{}: Refrigerant [{}] Temperature is out of range for superheated refrigerant density: values capped **", routineName, refrigError.Name), - refrigError.SatSupDensityTempErrIndex, + format("{}: Refrigerant [{}] Temperature is out of range for superheated refrigerant density: values capped **", routineName, this->Name), + this->errors[(int)RefrigError::SatSupDensityTemp].index, Temperature, Temperature, _, @@ -7091,19 +4891,19 @@ namespace FluidProperties { } // send pressure range error if flagged - refrigError.SatSupDensityPresErrCount += CurPresRangeErrCount; - if (CurPresRangeErrCount > 0 && refrigError.SatSupDensityPresErrCount <= state.dataFluidProps->RefrigerantErrorLimitTest) { + this->errors[(int)RefrigError::SatSupDensityPress].count += CurPresRangeErrCount; + if (CurPresRangeErrCount > 0 && this->errors[(int)RefrigError::SatSupDensityPress].count <= df->RefrigErrorLimitTest) { ShowWarningMessage(state, format("{}: Refrigerant [{}] Pressure is out of range for superheated refrigerant density: values capped **", routineName, - refrigError.Name)); + this->Name)); ShowContinueError(state, fmt::format(" Called From:{}", CalledFrom)); ShowContinueErrorTimeStamp(state, ""); } if (CurPresRangeErrCount > 0) { ShowRecurringWarningErrorAtEnd(state, - format("{}: Refrigerant [{}] Pressure is out of range for superheated refrigerant density: values capped **", routineName, refrigError.Name), - refrigError.SatSupDensityPresErrIndex, + format("{}: Refrigerant [{}] Pressure is out of range for superheated refrigerant density: values capped **", routineName, this->Name), + this->errors[(int)RefrigError::SatSupDensityPress].index, Pressure, Pressure, _, @@ -7117,7 +4917,7 @@ namespace FluidProperties { } Real64 GetSupHeatDensityRefrig(EnergyPlusData &state, - std::string_view const Refrigerant, // carries in substance name + std::string_view const refrigName, // carries in substance name Real64 const Temperature, // actual temperature given as input Real64 const Pressure, // actual pressure given as input int &RefrigIndex, // Index to Refrigerant Properties @@ -7147,40 +4947,26 @@ namespace FluidProperties { // have the pressure/temperature capped. Warnings are given if the point // is not clearly in the bounds of the superheated data. - // FUNCTION PARAMETERS: - static constexpr std::string_view RoutineName("GetSupHeatDensityRefrig"); - - int RefrigNum = 0; - if (state.dataFluidProps->NumOfRefrigerants == 0) { - ReportFatalRefrigerantErrors( - state, state.dataFluidProps->NumOfRefrigerants, RefrigNum, true, Refrigerant, RoutineName, "properties", CalledFrom); - } - - // Find which refrigerant (index) is being requested and then determine - // where the temperature and pressure are within the temperature and - // pressure arrays, respectively - if (RefrigIndex > 0) { - RefrigNum = RefrigIndex; - } else { - // Find which refrigerant (index) is being requested - RefrigNum = GetRefrigNum(state, Refrigerant); - if (RefrigNum == 0) { - ReportFatalRefrigerantErrors( - state, state.dataFluidProps->NumOfRefrigerants, RefrigNum, true, Refrigerant, RoutineName, "properties", CalledFrom); + auto &df = state.dataFluidProps; + if (RefrigIndex == 0) { + if ((RefrigIndex = GetRefrigNum(state, refrigName)) == 0) { + ShowSevereError(state, format("Refrigerant \"{}\" not found, called from: {}", refrigName, CalledFrom)); + ShowFatalError(state, "Program terminates due to preceding condition."); + return 0.0; } - RefrigIndex = RefrigNum; } - return state.dataFluidProps->RefrigData(RefrigNum).getSupHeatDensity(state, Temperature, Pressure, CalledFrom); + return df->RefrigData(RefrigIndex).getSupHeatDensity(state, Temperature, Pressure, CalledFrom); } //***************************************************************************** #ifdef EP_cache_GlycolSpecificHeat - Real64 GlycolData::getSpecificHeat(EnergyPlusData &state, + Real64 GlycolProps::getSpecificHeat(EnergyPlusData &state, Real64 const Temperature, // actual temperature given as input std::string_view const CalledFrom // routine this function was called from (error messages) ) { + auto &df = state.dataFluidProps; std::uint64_t constexpr Grid_Shift = 64 - 12 - t_sh_precision_bits; double const t(Temperature + 1000 * this->Num); @@ -7193,7 +4979,7 @@ namespace FluidProperties { DISABLE_WARNING_POP std::uint64_t const hash(T_tag & t_sh_cache_mask); - auto &cTsh(state.dataFluidProps->cached_t_sh[hash]); + auto &cTsh(df->cached_t_sh[hash]); if (cTsh.iT != T_tag) { cTsh.iT = T_tag; @@ -7203,12 +4989,12 @@ namespace FluidProperties { return cTsh.sh; // saturation pressure {Pascals} } - Real64 GlycolData::getSpecificHeat_raw(EnergyPlusData &state, + Real64 GlycolProps::getSpecificHeat_raw(EnergyPlusData &state, Real64 const Temperature, // actual temperature given as input std::string_view const CalledFrom // routine this function was called from (error messages) ) #else - Real64 GlycolData::getSpecificHeat(EnergyPlusData &state, + Real64 GlycolProps::getSpecificHeat(EnergyPlusData &state, Real64 const Temperature, // actual temperature given as input std::string_view const CalledFrom // routine this function was called from (error messages) ) @@ -7234,27 +5020,23 @@ namespace FluidProperties { // all temperature lists are entered in ascending order. // FUNCTION PARAMETERS: - static constexpr std::string_view routineName = "GlycolData::getSpecificHeat"; + static constexpr std::string_view routineName = "GlycolProps::getSpecificHeat"; - auto &glycolError = state.dataFluidProps->GlycolErrorTracking(this->Num); + auto &df = state.dataFluidProps; // If user didn't input data (shouldn't get this far, but just in case...), we can't find a value if (!this->CpDataPresent) { - ReportFatalGlycolErrors(state, - state.dataFluidProps->NumOfGlycols, - this->Num, - this->CpDataPresent, - this->Name, - "GetSpecificHeatGlycol", - "specific heat", - CalledFrom); + ShowSevereError(state, format("{}: specific heat data not found for glycol \"{}\", called from {}", routineName, this->Name, CalledFrom)); + ShowFatalError(state, "Program terminates due to preceding condition."); + return 0.0; } // Now determine the value of specific heat using interpolation if (Temperature < this->CpLowTempValue) { // Temperature too low + if (!state.dataGlobal->WarmupFlag) { - state.dataFluidProps->LowTempLimitErrGetSpecificHeatGlycol_raw = ++glycolError.SpecHeatLowErrCount; - if (state.dataFluidProps->LowTempLimitErrGetSpecificHeatGlycol_raw <= state.dataFluidProps->GlycolErrorLimitTest) { + df->glycolErrorLimits[(int)GlycolError::SpecHeatLow] = ++this->errors[(int)GlycolError::SpecHeatLow].count; + if (df->glycolErrorLimits[(int)GlycolError::SpecHeatLow] <= df->GlycolErrorLimitTest) { ShowWarningMessage(state, format("{}: Temperature is out of range (too low) for fluid [{}] specific heat supplied values **", routineName, @@ -7269,7 +5051,7 @@ namespace FluidProperties { } ShowRecurringWarningErrorAtEnd(state, format("{}: Temperature out of range (too low) for fluid [{}] specific heat **", routineName, this->Name), - glycolError.SpecHeatLowErrIndex, + this->errors[(int)GlycolError::SpecHeatLow].index, Temperature, Temperature, _, @@ -7280,8 +5062,8 @@ namespace FluidProperties { } else if (Temperature > this->CpHighTempValue) { // Temperature too high if (!state.dataGlobal->WarmupFlag) { - state.dataFluidProps->HighTempLimitErrGetSpecificHeatGlycol_raw = ++glycolError.SpecHeatHighErrCount; - if (state.dataFluidProps->HighTempLimitErrGetSpecificHeatGlycol_raw <= state.dataFluidProps->GlycolErrorLimitTest) { + df->glycolErrorLimits[(int)GlycolError::SpecHeatHigh] = ++this->errors[(int)GlycolError::SpecHeatHigh].count; + if (df->glycolErrorLimits[(int)GlycolError::SpecHeatHigh] <= df->GlycolErrorLimitTest) { ShowWarningMessage( state, format("{}: Temperature is out of range (too high) for fluid [{}] specific heat **", routineName, this->Name)); ShowContinueError(state, @@ -7294,7 +5076,7 @@ namespace FluidProperties { } ShowRecurringWarningErrorAtEnd(state, format("{}: Temperature out of range (too high) for fluid [{}] specific heat **", routineName, this->Name), - glycolError.SpecHeatHighErrIndex, + this->errors[(int)GlycolError::SpecHeatHigh].index, Temperature, Temperature, _, @@ -7324,7 +5106,7 @@ namespace FluidProperties { } Real64 GetSpecificHeatGlycol(EnergyPlusData &state, - std::string_view const Glycol, // carries in substance name + std::string_view const glycolName, // carries in substance name Real64 const Temperature, // actual temperature given as input int &GlycolIndex, // Index to Glycol Properties std::string_view const CalledFrom // routine this function was called from (error messages) @@ -7349,40 +5131,22 @@ namespace FluidProperties { // GetFluidPropertiesData: subroutine enforces that temperatures in // all temperature lists are entered in ascending order. - // Return value - Real64 ReturnValue; - - // FUNCTION PARAMETERS: - static constexpr std::string_view routineName = "GetDensityGlycol"; - - // FUNCTION LOCAL VARIABLE DECLARATIONS: - bool LowErrorThisTime = false; - bool HighErrorThisTime = false; - - // If no glycols, no fluid properties can be evaluated - int GlycolNum = 0; - if (state.dataFluidProps->NumOfGlycols == 0) - ReportFatalGlycolErrors( - state, state.dataFluidProps->NumOfGlycols, GlycolNum, true, Glycol, "GetSpecificHeatGlycol", "specific heat", CalledFrom); - - // If glycol index has not yet been found for this fluid, find its value now - if (GlycolIndex > 0) { - GlycolNum = GlycolIndex; - } else { // Find which glycol (index) is being requested - GlycolNum = GetGlycolNum(state, Glycol); - if (GlycolNum == 0) { - ReportFatalGlycolErrors( - state, state.dataFluidProps->NumOfGlycols, GlycolNum, true, Glycol, "GetSpecificHeatGlycol", "specific heat", CalledFrom); + auto &df = state.dataFluidProps; + + if (GlycolIndex == 0) { + if ((GlycolIndex = GetGlycolNum(state, glycolName)) == 0) { + ShowSevereError(state, format("Glycol \"{}\" not found, called from: {}", glycolName, CalledFrom)); + ShowFatalError(state, "Program terminates due to preceding condition."); + return 0.0; } - GlycolIndex = GlycolNum; } - return state.dataFluidProps->GlycolData(GlycolIndex).getSpecificHeat(state, Temperature, CalledFrom); + return df->GlycolData(GlycolIndex).getSpecificHeat(state, Temperature, CalledFrom); } //***************************************************************************** - Real64 GlycolData::getDensity(EnergyPlusData &state, + Real64 GlycolProps::getDensity(EnergyPlusData &state, Real64 const Temperature, // actual temperature given as input std::string_view const CalledFrom // routine this function was called from (error messages) ) @@ -7410,30 +5174,26 @@ namespace FluidProperties { Real64 ReturnValue; // FUNCTION PARAMETERS: - static constexpr std::string_view routineName = "GetDensityGlycol"; + static constexpr std::string_view routineName = "GlycolProps::getDensity"; + auto &df = state.dataFluidProps; + // FUNCTION LOCAL VARIABLE DECLARATIONS: - bool LowErrorThisTime = false; - bool HighErrorThisTime = false; + GlycolError error = GlycolError::Invalid; // If user didn't input data (shouldn't get this far, but just in case...), we can't find a value if (!this->RhoDataPresent) { - ReportFatalGlycolErrors(state, - state.dataFluidProps->NumOfGlycols, - this->Num, - this->RhoDataPresent, - this->Name, - "GetDensityGlycol", - "density", - CalledFrom); + ShowSevereError(state, format("{}: density data not found for glycol \"{}\", called from {}", routineName, this->Name, CalledFrom)); + ShowFatalError(state, "Program terminates due to preceding condition."); + return 0.0; } // Now determine the value of specific heat using interpolation if (Temperature < this->RhoLowTempValue) { // Temperature too low - LowErrorThisTime = true; + error = GlycolError::DensityLow; ReturnValue = this->RhoValues(this->RhoLowTempIndex); } else if (Temperature > this->RhoHighTempValue) { // Temperature too high - HighErrorThisTime = true; + error = GlycolError::DensityHigh; ReturnValue = this->RhoValues(this->RhoHighTempIndex); } else { // Temperature somewhere between the lowest and highest value int LoTempIndex = FindArrayIndex(Temperature, this->RhoTemps, 1, this->NumRhoTempPts); @@ -7443,21 +5203,13 @@ namespace FluidProperties { // Error handling if (!state.dataGlobal->WarmupFlag) { - auto &glycolError = state.dataFluidProps->GlycolErrorTracking(this->Num); - if (LowErrorThisTime) { - ++glycolError.DensityLowErrCount; - state.dataFluidProps->LowTempLimitErrGetDensityGlycol = glycolError.DensityLowErrCount; - } - if (HighErrorThisTime) { - ++glycolError.DensityHighErrCount; - state.dataFluidProps->HighTempLimitErrGetDensityGlycol = glycolError.DensityHighErrCount; + if (error != GlycolError::Invalid) { + df->glycolErrorLimits[(int)error] = this->errors[(int)error].count; } - if ((LowErrorThisTime) && (state.dataFluidProps->LowTempLimitErrGetDensityGlycol <= state.dataFluidProps->GlycolErrorLimitTest)) { - ShowWarningMessage(state, - format("{}Temperature is out of range (too low) for fluid [{}] density **", - routineName, - this->Name)); + if ((error == GlycolError::DensityLow) && + (df->glycolErrorLimits[(int)error] <= df->GlycolErrorLimitTest)) { + ShowWarningMessage(state, format("{}: Temperature is out of range (too low) for fluid [{}] density **", routineName, this->Name)); ShowContinueError(state, format("..Called From:{},Temperature=[{:.2R}], supplied data range=[{:.2R},{:.2R}]", CalledFrom, @@ -7466,10 +5218,10 @@ namespace FluidProperties { this->RhoHighTempValue)); ShowContinueErrorTimeStamp(state, ""); } - if (LowErrorThisTime) { + if (error == GlycolError::DensityLow) { ShowRecurringWarningErrorAtEnd(state, format("{}: Temperature out of range (too low) for fluid [{}] density **", routineName, this->Name), - glycolError.DensityLowErrIndex, + this->errors[(int)GlycolError::DensityLow].index, Temperature, Temperature, _, @@ -7477,11 +5229,9 @@ namespace FluidProperties { "{C}"); } - if ((HighErrorThisTime) && (state.dataFluidProps->HighTempLimitErrGetDensityGlycol <= state.dataFluidProps->GlycolErrorLimitTest)) { - ShowWarningMessage(state, - format("{}: Temperature is out of range (too high) for fluid [{}] density **", - routineName, - this->Name)); + if ((error == GlycolError::DensityHigh) && + (df->glycolErrorLimits[(int)error] <= df->GlycolErrorLimitTest)) { + ShowWarningMessage(state, format("{}: Temperature is out of range (too high) for fluid [{}] density **", routineName, this->Name)); ShowContinueError(state, format("..Called From:{},Temperature=[{:.2R}], supplied data range=[{:.2R},{:.2R}]", CalledFrom, @@ -7490,10 +5240,10 @@ namespace FluidProperties { this->RhoHighTempValue)); ShowContinueErrorTimeStamp(state, ""); } - if (HighErrorThisTime) { + if (error == GlycolError::DensityHigh) { ShowRecurringWarningErrorAtEnd(state, format("{}: Temperature out of range (too high) for fluid [{}] density **", routineName, this->Name), - glycolError.DensityHighErrIndex, + this->errors[(int)GlycolError::DensityHigh].index, Temperature, Temperature, _, @@ -7506,7 +5256,7 @@ namespace FluidProperties { } Real64 GetDensityGlycol(EnergyPlusData &state, - std::string_view const Glycol, // carries in substance name + std::string_view const glycolName, // carries in substance name Real64 const Temperature, // actual temperature given as input int &GlycolIndex, // Index to Glycol Properties std::string_view const CalledFrom // routine this function was called from (error messages) @@ -7531,39 +5281,22 @@ namespace FluidProperties { // GetFluidPropertiesData: subroutine enforces that temperatures in // all temperature lists are entered in ascending order. - // Return value - Real64 ReturnValue; - - // FUNCTION PARAMETERS: - static constexpr std::string_view RoutineName = "GetConductivityGlycol"; - - // FUNCTION LOCAL VARIABLE DECLARATIONS: - bool LowErrorThisTime = false; - bool HighErrorThisTime = false; - - // If no glycols, no fluid properties can be evaluated - int GlycolNum = 0; - if (state.dataFluidProps->NumOfGlycols == 0) - ReportFatalGlycolErrors(state, state.dataFluidProps->NumOfGlycols, GlycolNum, true, Glycol, "GetDensityGlycol", "density", CalledFrom); - - // If glycol index has not yet been found for this fluid, find its value now - if (GlycolIndex > 0) { - GlycolNum = GlycolIndex; - } else { // Find which refrigerant (index) is being requested - GlycolNum = GetGlycolNum(state, Glycol); - if (GlycolNum == 0) { - ReportFatalGlycolErrors( - state, state.dataFluidProps->NumOfGlycols, GlycolNum, true, Glycol, "GetDensityGlycol", "density", CalledFrom); + auto &df = state.dataFluidProps; + + if (GlycolIndex == 0) { + if ((GlycolIndex = GetGlycolNum(state, glycolName)) == 0) { + ShowSevereError(state, format("Glycol \"{}\" not found, called from: {}", glycolName, CalledFrom)); + ShowFatalError(state, "Program terminates due to preceding condition."); + return 0.0; } - GlycolIndex = GlycolNum; } - return state.dataFluidProps->GlycolData(GlycolIndex).getDensity(state, Temperature, CalledFrom); + return df->GlycolData(GlycolIndex).getDensity(state, Temperature, CalledFrom); } //***************************************************************************** - Real64 GlycolData::getConductivity(EnergyPlusData &state, + Real64 GlycolProps::getConductivity(EnergyPlusData &state, Real64 const Temperature, // actual temperature given as input std::string_view const CalledFrom // routine this function was called from (error messages) ) @@ -7591,30 +5324,26 @@ namespace FluidProperties { Real64 ReturnValue; // FUNCTION PARAMETERS: - static constexpr std::string_view routineName = "GlycolData::getConductivity"; + static constexpr std::string_view routineName = "GlycolProps::getConductivity"; // FUNCTION LOCAL VARIABLE DECLARATIONS: - bool LowErrorThisTime = false; - bool HighErrorThisTime = false; + GlycolError error = GlycolError::Invalid; + auto &df = state.dataFluidProps; + // If user didn't input data (shouldn't get this far, but just in case...), we can't find a value if (!this->CondDataPresent) { - ReportFatalGlycolErrors(state, - state.dataFluidProps->NumOfGlycols, - this->Num, - this->CondDataPresent, - this->Name, - "GetConductivityGlycol", - "conductivity", - CalledFrom); + ShowSevereError(state, format("{}: conductivity data not found for glycol \"{}\", called from {}", routineName, this->Name, CalledFrom)); + ShowFatalError(state, "Program terminates due to preceding condition."); + return 0.0; } // Now determine the value of specific heat using interpolation if (Temperature < this->CondLowTempValue) { // Temperature too low - LowErrorThisTime = true; + error = GlycolError::ConductivityLow; ReturnValue = this->CondValues(this->CondLowTempIndex); } else if (Temperature > this->CondHighTempValue) { // Temperature too high - HighErrorThisTime = true; + error = GlycolError::ConductivityHigh; ReturnValue = this->CondValues(this->CondHighTempIndex); } else { // Temperature somewhere between the lowest and highest value int LoTempIndex = FindArrayIndex(Temperature, this->CondTemps, 1, this->NumCondTempPts); @@ -7623,34 +5352,24 @@ namespace FluidProperties { } // Error handling - if (!state.dataGlobal->WarmupFlag) { - auto &glycolError = state.dataFluidProps->GlycolErrorTracking(this->Num); - if (LowErrorThisTime) { - ++glycolError.ConductivityLowErrCount; - state.dataFluidProps->LowTempLimitErrGetConductivityGlycol = glycolError.ConductivityLowErrCount; - } - if (HighErrorThisTime) { - ++glycolError.ConductivityHighErrCount; - state.dataFluidProps->HighTempLimitErrGetConductivityGlycol = glycolError.ConductivityHighErrCount; - } + if (!state.dataGlobal->WarmupFlag && error != GlycolError::Invalid) { + df->glycolErrorLimits[(int)error] = this->errors[(int)error].count; + + if (error == GlycolError::ConductivityLow) { + if (df->glycolErrorLimits[(int)error] <= df->GlycolErrorLimitTest) { + ShowWarningMessage(state, format("{}: Temperature is out of range (too low) for fluid [{}] conductivity **", routineName, this->Name)); + ShowContinueError(state, + format("..Called From:{},Temperature=[{:.2R}], supplied data range=[{:.2R},{:.2R}]", + CalledFrom, + Temperature, + this->CondLowTempValue, + this->CondHighTempValue)); + ShowContinueErrorTimeStamp(state, ""); + } - if ((LowErrorThisTime) && (state.dataFluidProps->LowTempLimitErrGetConductivityGlycol <= state.dataFluidProps->GlycolErrorLimitTest)) { - ShowWarningMessage(state, - format("{}: Temperature is out of range (too low) for fluid [{}] conductivity **", - routineName, - this->Name)); - ShowContinueError(state, - format("..Called From:{},Temperature=[{:.2R}], supplied data range=[{:.2R},{:.2R}]", - CalledFrom, - Temperature, - this->CondLowTempValue, - this->CondHighTempValue)); - ShowContinueErrorTimeStamp(state, ""); - } - if (LowErrorThisTime) { ShowRecurringWarningErrorAtEnd(state, format("{}: Temperature out of range (too low) for fluid [{}] conductivity **", routineName, this->Name), - glycolError.ConductivityLowErrIndex, + this->errors[(int)error].index, Temperature, Temperature, _, @@ -7658,23 +5377,21 @@ namespace FluidProperties { "{C}"); } - if ((HighErrorThisTime) && (state.dataFluidProps->HighTempLimitErrGetConductivityGlycol <= state.dataFluidProps->GlycolErrorLimitTest)) { - ShowWarningMessage(state, - format("{}: Temperature is out of range (too high) for fluid [{}] conductivity **", - routineName, - this->Name)); - ShowContinueError(state, - format("..Called From:{},Temperature=[{:.2R}], supplied data range=[{:.2R},{:.2R}]", - CalledFrom, - Temperature, - this->CondLowTempValue, - this->CondHighTempValue)); - ShowContinueErrorTimeStamp(state, ""); - } - if (HighErrorThisTime) { + else if (error == GlycolError::ConductivityHigh) { + if (df->glycolErrorLimits[(int)error] <= df->GlycolErrorLimitTest) { + ShowWarningMessage(state, format("{}: Temperature is out of range (too high) for fluid [{}] conductivity **", routineName, this->Name)); + ShowContinueError(state, + format("..Called From:{},Temperature=[{:.2R}], supplied data range=[{:.2R},{:.2R}]", + CalledFrom, + Temperature, + this->CondLowTempValue, + this->CondHighTempValue)); + ShowContinueErrorTimeStamp(state, ""); + } + ShowRecurringWarningErrorAtEnd(state, format("{}: Temperature out of range (too high) for fluid [{}] conductivity **", routineName, this->Name), - glycolError.ConductivityHighErrIndex, + this->errors[(int)error].index, Temperature, Temperature, _, @@ -7684,10 +5401,10 @@ namespace FluidProperties { } return ReturnValue; - } + } // GlycolProps::getConductivity() Real64 GetConductivityGlycol(EnergyPlusData &state, - std::string_view const Glycol, // carries in substance name + std::string_view const glycolName, // carries in substance name Real64 const Temperature, // actual temperature given as input int &GlycolIndex, // Index to Glycol Properties std::string_view const CalledFrom // routine this function was called from (error messages) @@ -7711,36 +5428,23 @@ namespace FluidProperties { // REFERENCES: // GetFluidPropertiesData: subroutine enforces that temperatures in // all temperature lists are entered in ascending order. - - // FUNCTION LOCAL VARIABLE DECLARATIONS: - bool LowErrorThisTime = false; - bool HighErrorThisTime = false; - - // If no glycols, no fluid properties can be evaluated - int GlycolNum = 0; - if (state.dataFluidProps->NumOfGlycols == 0) - ReportFatalGlycolErrors( - state, state.dataFluidProps->NumOfGlycols, GlycolNum, true, Glycol, "GetConductivityGlycol", "conductivity", CalledFrom); - - // If glycol index has not yet been found for this fluid, find its value now - if (GlycolIndex > 0) { - GlycolNum = GlycolIndex; - } else { // Find which refrigerant (index) is being requested - GlycolNum = GetGlycolNum(state, Glycol); - if (GlycolNum == 0) { - ReportFatalGlycolErrors( - state, state.dataFluidProps->NumOfGlycols, GlycolNum, true, Glycol, "GetConductivityGlycol", "conductivity", CalledFrom); + auto &df = state.dataFluidProps; + + if (GlycolIndex == 0) { + if ((GlycolIndex = GetGlycolNum(state, glycolName)) == 0) { + ShowSevereError(state, format("Glycol \"{}\" not found, called from: {}", glycolName, CalledFrom)); + ShowFatalError(state, "Program terminates due to preceding condition."); + return 0.0; } - GlycolIndex = GlycolNum; } // If user didn't input data (shouldn't get this far, but just in case...), we can't find a value - return state.dataFluidProps->GlycolData(GlycolIndex).getConductivity(state, Temperature, CalledFrom); + return df->GlycolData(GlycolIndex).getConductivity(state, Temperature, CalledFrom); } //***************************************************************************** - Real64 GlycolData::getViscosity(EnergyPlusData &state, + Real64 GlycolProps::getViscosity(EnergyPlusData &state, Real64 const Temperature, // actual temperature given as input std::string_view const CalledFrom // routine this function was called from (error messages) ) @@ -7768,30 +5472,26 @@ namespace FluidProperties { Real64 ReturnValue; // Value for function // FUNCTION PARAMETERS: - static constexpr std::string_view routineName = "GlycolData::getViscosity"; + static constexpr std::string_view routineName = "GlycolProps::getViscosity"; // FUNCTION LOCAL VARIABLE DECLARATIONS: - bool LowErrorThisTime = false; - bool HighErrorThisTime = false; + GlycolError error = GlycolError::Invalid; + + auto &df = state.dataFluidProps; // If user didn't input data (shouldn't get this far, but just in case...), we can't find a value if (!this->ViscDataPresent) { - ReportFatalGlycolErrors(state, - state.dataFluidProps->NumOfGlycols, - this->Num, - this->ViscDataPresent, - this->Name, - "GetViscosityGlycol", - "viscosity", - CalledFrom); + ShowSevereError(state, format("{}: viscosity data not found for glycol \"{}\", called from {}", routineName, this->Name, CalledFrom)); + ShowFatalError(state, "Program terminates due to preceding condition."); + return 0.0; } // Now determine the value of specific heat using interpolation if (Temperature < this->ViscLowTempValue) { // Temperature too low - LowErrorThisTime = true; + error = GlycolError::ViscosityLow; ReturnValue = this->ViscValues(this->ViscLowTempIndex); } else if (Temperature > this->ViscHighTempValue) { // Temperature too high - HighErrorThisTime = true; + error = GlycolError::ViscosityHigh; ReturnValue = this->ViscValues(this->ViscHighTempIndex); } else { // Temperature somewhere between the lowest and highest value int LoTempIndex = FindArrayIndex(Temperature, this->ViscTemps, 1, this->NumViscTempPts); @@ -7800,58 +5500,46 @@ namespace FluidProperties { } // Error handling - if (!state.dataGlobal->WarmupFlag) { - auto &glycolError = state.dataFluidProps->GlycolErrorTracking(this->Num); - if (LowErrorThisTime) { - ++glycolError.ViscosityLowErrCount; - state.dataFluidProps->LowTempLimitErrGetViscosityGlycol = glycolError.ViscosityLowErrCount; - } - if (HighErrorThisTime) { - ++glycolError.ViscosityHighErrCount; - state.dataFluidProps->HighTempLimitErrGetViscosityGlycol = glycolError.ViscosityHighErrCount; - } + if (!state.dataGlobal->WarmupFlag && error != GlycolError::Invalid) { + df->glycolErrorLimits[(int)error] = ++this->errors[(int)error].count; + + if (error == GlycolError::ViscosityHigh) { + if (df->glycolErrorLimits[(int)error] <= df->GlycolErrorLimitTest) { + ShowWarningMessage(state, format("{}: Temperature is out of range (too low) for fluid [{}] viscosity **", routineName, this->Name)); + ShowContinueError(state, + format("..Called From:{},Temperature=[{:.2R}], supplied data range=[{:.2R},{:.2R}]", + CalledFrom, + Temperature, + this->ViscLowTempValue, + this->ViscHighTempValue)); + ShowContinueErrorTimeStamp(state, ""); + } - if ((LowErrorThisTime) && (state.dataFluidProps->LowTempLimitErrGetViscosityGlycol <= state.dataFluidProps->GlycolErrorLimitTest)) { - ShowWarningMessage(state, - format("{}: Temperature is out of range (too low) for fluid [{}] viscosity **", - routineName, - glycolError.Name)); - ShowContinueError(state, - format("..Called From:{},Temperature=[{:.2R}], supplied data range=[{:.2R},{:.2R}]", - CalledFrom, - Temperature, - this->ViscLowTempValue, - this->ViscHighTempValue)); - ShowContinueErrorTimeStamp(state, ""); - } - if (LowErrorThisTime) { ShowRecurringWarningErrorAtEnd(state, - format("{}: Temperature out of range (too low) for fluid [{}] viscosity **", routineName, glycolError.Name), - glycolError.ViscosityLowErrIndex, + format("{}: Temperature out of range (too low) for fluid [{}] viscosity **", routineName, this->Name), + this->errors[(int)GlycolError::ViscosityLow].index, Temperature, Temperature, _, "{C}", "{C}"); } + + if (error == GlycolError::ViscosityHigh) { + if (df->glycolErrorLimits[(int)error] <= df->GlycolErrorLimitTest) { + ShowWarningMessage(state, format("{}: Temperature is out of range (too high) for fluid [{}] viscosity **", routineName, this->Name)); + ShowContinueError(state, + format("..Called From:{},Temperature=[{:.2R}], supplied data range=[{:.2R},{:.2R}]", + CalledFrom, + Temperature, + this->ViscLowTempValue, + this->ViscHighTempValue)); + ShowContinueErrorTimeStamp(state, ""); + } - if ((HighErrorThisTime) && (state.dataFluidProps->HighTempLimitErrGetViscosityGlycol <= state.dataFluidProps->GlycolErrorLimitTest)) { - ShowWarningMessage(state, - format("{}Temperature is out of range (too high) for fluid [{}] viscosity **", - routineName, - glycolError.Name)); - ShowContinueError(state, - format("..Called From:{},Temperature=[{:.2R}], supplied data range=[{:.2R},{:.2R}]", - CalledFrom, - Temperature, - this->ViscLowTempValue, - this->ViscHighTempValue)); - ShowContinueErrorTimeStamp(state, ""); - } - if (HighErrorThisTime) { ShowRecurringWarningErrorAtEnd(state, - format("{}: Temperature out of range (too high) for fluid [{}] viscosity **", routineName, glycolError.Name), - glycolError.ViscosityHighErrIndex, + format("{}: Temperature out of range (too high) for fluid [{}] viscosity **", routineName, this->Name), + this->errors[(int)GlycolError::ViscosityHigh].index, Temperature, Temperature, _, @@ -7861,10 +5549,10 @@ namespace FluidProperties { } return ReturnValue; - } + } // GlycolProps::getViscosity() Real64 GetViscosityGlycol(EnergyPlusData &state, - std::string_view const Glycol, // carries in substance name + std::string_view const glycolName, // carries in substance name Real64 const Temperature, // actual temperature given as input int &GlycolIndex, // Index to Glycol Properties std::string_view const CalledFrom // routine this function was called from (error messages) @@ -7889,26 +5577,18 @@ namespace FluidProperties { // GetFluidPropertiesData: subroutine enforces that temperatures in // all temperature lists are entered in ascending order. - // If no glycols, no fluid properties can be evaluated - int GlycolNum = 0; - if (state.dataFluidProps->NumOfGlycols == 0) - ReportFatalGlycolErrors( - state, state.dataFluidProps->NumOfGlycols, GlycolNum, true, Glycol, "GetViscosityGlycol", "viscosity", CalledFrom); - - // If glycol index has not yet been found for this fluid, find its value now - if (GlycolIndex > 0) { - GlycolNum = GlycolIndex; - } else { // Find which refrigerant (index) is being requested - GlycolNum = GetGlycolNum(state, Glycol); - if (GlycolNum == 0) { - ReportFatalGlycolErrors( - state, state.dataFluidProps->NumOfGlycols, GlycolNum, true, Glycol, "GetViscosityGlycol", "viscosity", CalledFrom); + auto &df = state.dataFluidProps; + + if (GlycolIndex == 0) { + if ((GlycolIndex = GetGlycolNum(state, glycolName)) == 0) { + ShowSevereError(state, format("Glycol \"{}\" not found, called from: {}", glycolName, CalledFrom)); + ShowFatalError(state, "Program terminates due to preceding condition."); + return 0.0; } - GlycolIndex = GlycolNum; } // Now determine the value of specific heat using interpolation - return state.dataFluidProps->GlycolData(GlycolIndex).getViscosity(state, Temperature, CalledFrom); + return df->GlycolData(GlycolIndex).getViscosity(state, Temperature, CalledFrom); } //***************************************************************************** @@ -7937,18 +5617,27 @@ namespace FluidProperties { // yet for some reason, that must be done. // Check to see if this glycol shows up in the glycol data - int refrigNum = Util::FindItemInList(Util::makeUPPER(name), state.dataFluidProps->RefrigData); + auto &df = state.dataFluidProps; + + if (df->NumOfRefrigerants == 0) { + ShowSevereError(state, "No refrigerants found."); + ShowFatalError(state, "Program terminates due to preceding condition."); + return 0; + } + + int refrigNum = Util::FindItemInList(Util::makeUPPER(name), df->RefrigData); if (refrigNum > 0) { - state.dataFluidProps->RefrigUsed(refrigNum) = true; + df->RefrigData(refrigNum).used = true; } return refrigNum; } - RefrigerantData *GetRefrig(EnergyPlusData &state, std::string_view const name) { + RefrigProps *GetRefrig(EnergyPlusData &state, std::string_view const name) { + auto &df = state.dataFluidProps; int refrigNum = GetRefrigNum(state, name); - return (refrigNum > 0) ? &state.dataFluidProps->RefrigData(refrigNum) : nullptr; + return (refrigNum > 0) ? &df->RefrigData(refrigNum) : nullptr; } //***************************************************************************** @@ -7972,20 +5661,26 @@ namespace FluidProperties { // yet for some reason, that must be done. // Check to see if this glycol shows up in the glycol data - int glycolNum = Util::FindItemInList(Util::makeUPPER(name), - state.dataFluidProps->GlycolData, - state.dataFluidProps->NumOfGlycols); // GlycolData is allocated to NumOfGlyConcs + auto &df = state.dataFluidProps; + if (df->NumOfGlycols == 0) { + ShowSevereError(state, "No glycols found."); + ShowFatalError(state, "Program terminates due to preceding condition."); + return 0; + } + + int glycolNum = Util::FindItemInList(Util::makeUPPER(name), df->GlycolData, df->NumOfGlycols); if (glycolNum > 0) { - state.dataFluidProps->GlycolUsed(glycolNum) = true; + df->GlycolData(glycolNum).used = true; } return glycolNum; } - GlycolData *GetGlycol(EnergyPlusData &state, std::string_view const name) { - int glycolNum = GetGlycolNum(state, name); - return (glycolNum > 0) ? &state.dataFluidProps->GlycolData(glycolNum) : nullptr; + GlycolProps *GetGlycol(EnergyPlusData &state, std::string_view const glycolName) { + auto &df = state.dataFluidProps; + int glycolNum = GetGlycolNum(state, glycolName); + return (glycolNum > 0) ? &df->GlycolData(glycolNum) : nullptr; } //***************************************************************************** @@ -8011,8 +5706,9 @@ namespace FluidProperties { // Check to see if this glycol shows up in the glycol data // ArrayLength = SIZE(GlycolData) - if (Idx > 0 && Idx <= state.dataFluidProps->NumOfGlycols) { - return state.dataFluidProps->GlycolData(Idx).Name; + auto &df = state.dataFluidProps; + if (Idx > 0 && Idx <= df->NumOfGlycols) { + return df->GlycolData(Idx).Name; } else { // return blank - error checking in calling proceedure return ""; } @@ -8154,6 +5850,8 @@ namespace FluidProperties { // Return value Real64 ReturnValue; + auto &df = state.dataFluidProps; + // error counters and dummy string bool ErrorFlag(false); // error flag for current call @@ -8184,9 +5882,9 @@ namespace FluidProperties { } if (ErrorFlag && (CalledFrom != "ReportAndTestRefrigerants")) { - ++state.dataFluidProps->TempRangeErrCountGetInterpolatedSatProp; + ++df->TempRangeErrCountGetInterpolatedSatProp; // send warning - if (state.dataFluidProps->TempRangeErrCountGetInterpolatedSatProp <= state.dataFluidProps->RefrigerantErrorLimitTest) { + if (df->TempRangeErrCountGetInterpolatedSatProp <= df->RefrigErrorLimitTest) { ShowWarningError(state, "GetInterpolatedSatProp: Saturation temperature for interpolation is out of range of data supplied: **"); ShowContinueErrorTimeStamp(state, fmt::format(" Called from:{}", CalledFrom)); ShowContinueError(state, format("Refrigerant temperature = {:.2R}", Temperature)); @@ -8194,7 +5892,7 @@ namespace FluidProperties { } else { ShowRecurringWarningErrorAtEnd(state, "GetInterpolatedSatProp: Refrigerant temperature for interpolation out of range error", - state.dataFluidProps->TempRangeErrIndexGetInterpolatedSatProp, + df->TempRangeErrIndexGetInterpolatedSatProp, Temperature, Temperature, _, @@ -8218,25 +5916,18 @@ namespace FluidProperties { // PURPOSE OF THIS FUNCTION: // This function checks on an input fluid property to make sure it is valid. - - // Return value - int CheckFluidPropertyName; - + auto &df = state.dataFluidProps; + // Item must be either in Refrigerant or Glycol list int Found = 0; - if (state.dataFluidProps->NumOfRefrigerants > 0) { - Found = Util::FindItemInList(NameToCheck, state.dataFluidProps->RefrigData); + if (df->NumOfRefrigerants > 0) { + Found = Util::FindItemInList(NameToCheck, df->RefrigData); } - if (Found == 0) { - if (state.dataFluidProps->NumOfGlycols > 0) { - Found = Util::FindItemInList( - NameToCheck, state.dataFluidProps->GlycolData, state.dataFluidProps->NumOfGlycols); // GlycolData is allocated to NumOfGlyConcs - } + if (Found == 0 && df->NumOfGlycols > 0) { + Found = Util::FindItemInList(NameToCheck, df->GlycolData, df->NumOfGlycols); // GlycolData is allocated to NumOfGlyConcs } - CheckFluidPropertyName = Found; - - return CheckFluidPropertyName; + return Found; } void ReportOrphanFluids(EnergyPlusData &state) @@ -8253,16 +5944,18 @@ namespace FluidProperties { bool NeedOrphanMessage = true; int NumUnusedRefrig = 0; - for (int Item = 1; Item <= state.dataFluidProps->NumOfRefrigerants; ++Item) { - if (state.dataFluidProps->RefrigUsed(Item)) continue; - if (Util::SameString(state.dataFluidProps->RefrigData(Item).Name, Steam)) continue; + auto &df = state.dataFluidProps; + + for (int Item = 1; Item <= df->NumOfRefrigerants; ++Item) { + if (df->RefrigData(Item).used) continue; + if (Util::SameString(df->RefrigData(Item).Name, Steam)) continue; if (NeedOrphanMessage && state.dataGlobal->DisplayUnusedObjects) { ShowWarningError(state, "The following fluid names are \"Unused Fluids\". These fluids are in the idf"); ShowContinueError(state, " file but are never obtained by the simulation and therefore are NOT used."); NeedOrphanMessage = false; } if (state.dataGlobal->DisplayUnusedObjects) { - ShowMessage(state, format("Refrigerant={}", state.dataFluidProps->RefrigData(Item).Name)); + ShowMessage(state, format("Refrigerant={}", df->RefrigData(Item).Name)); } else { ++NumUnusedRefrig; } @@ -8270,18 +5963,18 @@ namespace FluidProperties { int NumUnusedGlycol = 0; - for (int Item = 1; Item <= state.dataFluidProps->NumOfGlycols; ++Item) { - if (state.dataFluidProps->GlycolUsed(Item)) continue; - if (Util::SameString(state.dataFluidProps->GlycolData(Item).Name, Water)) continue; - if (Util::SameString(state.dataFluidProps->GlycolData(Item).Name, EthyleneGlycol)) continue; - if (Util::SameString(state.dataFluidProps->GlycolData(Item).Name, PropyleneGlycol)) continue; + for (int Item = 1; Item <= df->NumOfGlycols; ++Item) { + if (df->GlycolData(Item).used) continue; + if (Util::SameString(df->GlycolData(Item).Name, Water)) continue; + if (Util::SameString(df->GlycolData(Item).Name, EthyleneGlycol)) continue; + if (Util::SameString(df->GlycolData(Item).Name, PropyleneGlycol)) continue; if (NeedOrphanMessage && state.dataGlobal->DisplayUnusedObjects) { ShowWarningError(state, "The following fluid names are \"Unused Fluids\". These fluids are in the idf"); ShowContinueError(state, " file but are never obtained by the simulation and therefore are NOT used."); NeedOrphanMessage = false; } if (state.dataGlobal->DisplayUnusedObjects) { - ShowMessage(state, format("Glycol={}", state.dataFluidProps->GlycolData(Item).Name)); + ShowMessage(state, format("Glycol={}", df->GlycolData(Item).Name)); } else { ++NumUnusedGlycol; } @@ -8294,108 +5987,22 @@ namespace FluidProperties { } } - void ReportFatalGlycolErrors(EnergyPlusData &state, - int const NumGlycols, // Number of Glycols in input/data - int const GlycolNum, // Glycol Index - bool const DataPresent, // data is present for this fluid. - std::string_view const GlycolName, // Name being reported - std::string_view const RoutineName, // Routine name to show - std::string_view const Property, // Property being requested - std::string_view const CalledFrom // original called from (external to fluid properties) - ) - { - - // SUBROUTINE INFORMATION: - // AUTHOR Linda Lawrie - // DATE WRITTEN July 2011 - - // PURPOSE OF THIS SUBROUTINE: - // Consolidate fatal error reporting for glycols. - - // check and see if it might be a refrigerant - int RefrigNo = GetRefrigNum(state, GlycolName); - - if (NumGlycols == 0) { - ShowSevereError( - state, - fmt::format( - "{}: no glycols found -- cannot evaluate fluid {} for \"{}\", called from: {}", RoutineName, Property, GlycolName, CalledFrom)); - } else if (GlycolNum == 0) { - ShowSevereError( - state, fmt::format("{}: data not found in input for requested glycol \"{}\", called from: {}", RoutineName, GlycolName, CalledFrom)); - } else if (!DataPresent) { - ShowSevereError(state, - format("{}: {} data not found in input for requested glycol \"{}{}", - RoutineName, - Property, - GlycolName, - fmt::format("\", called from: {}", CalledFrom))); - } - if (RefrigNo > 0) ShowContinueError(state, "Note: that fluid is listed as a Refrigerant from input."); - - ShowFatalError(state, "Program terminates due to preceding condition."); - } - - void ReportFatalRefrigerantErrors(EnergyPlusData &state, - int const NumRefrigerants, // Number of Refrigerants in input/data - int const RefrigerantNum, // Refrigerant Index - bool const DataPresent, // data is present for this fluid. - std::string_view const RefrigerantName, // Name being reported - std::string_view const RoutineName, // Routine name to show - std::string_view const Property, // Property being requested - std::string_view const CalledFrom // original called from (external to fluid properties) - ) - { - - // SUBROUTINE INFORMATION: - // AUTHOR Linda Lawrie - // DATE WRITTEN July 2011 - - // PURPOSE OF THIS SUBROUTINE: - // Consolidate fatal error reporting for refrigerants. - - // check and see if it might be a refrigerant - int GlycolNo = GetGlycolNum(state, RefrigerantName); - - if (NumRefrigerants == 0) { - ShowSevereError(state, - fmt::format("{}: no refrigerants found -- cannot evaluate fluid {} for \"{}\", called from: {}", - RoutineName, - Property, - RefrigerantName, - CalledFrom)); - } else if (RefrigerantNum == 0) { - ShowSevereError( - state, - fmt::format( - "{}: data not found in input for requested refrigerant \"{}\", called from: {}", RoutineName, RefrigerantName, CalledFrom)); - } else if (!DataPresent) { - ShowSevereError(state, - fmt::format("{}: {} data not found in input for requested refrigerant \"{}\", called from: {}", - RoutineName, - Property, - RefrigerantName, - CalledFrom)); - } - if (GlycolNo > 0) ShowContinueError(state, "Note: that fluid is listed as a Glycol from input."); - - ShowFatalError(state, "Program terminates due to preceding condition."); - } void GetFluidDensityTemperatureLimits(EnergyPlusData &state, int const FluidIndex, Real64 &MinTempLimit, Real64 &MaxTempLimit) { - if (FluidIndex > 0) { - MinTempLimit = state.dataFluidProps->GlycolData(FluidIndex).RhoLowTempValue; - MaxTempLimit = state.dataFluidProps->GlycolData(FluidIndex).RhoHighTempValue; + auto &df = state.dataFluidProps; + MinTempLimit = df->GlycolData(FluidIndex).RhoLowTempValue; + MaxTempLimit = df->GlycolData(FluidIndex).RhoHighTempValue; } } void GetFluidSpecificHeatTemperatureLimits(EnergyPlusData &state, int const FluidIndex, Real64 &MinTempLimit, Real64 &MaxTempLimit) { if (FluidIndex > 0) { - MinTempLimit = state.dataFluidProps->GlycolData(FluidIndex).CpLowTempValue; - MaxTempLimit = state.dataFluidProps->GlycolData(FluidIndex).CpHighTempValue; + auto &df = state.dataFluidProps; + MinTempLimit = df->GlycolData(FluidIndex).CpLowTempValue; + MaxTempLimit = df->GlycolData(FluidIndex).CpHighTempValue; } } @@ -8467,6 +6074,1946 @@ namespace FluidProperties { return FluidProperties::GetSupHeatDensityRefrig(state, this->rName, temperature, pressure, this->rIndex, this->cf); } +#ifdef UNUSED_FLUID_PROPS + static constexpr std::array, DefaultNumSteamSuperheatedPressure> + DefaultSteamSuperheatedEnthalpyDataTable = { + {{2501000.0, 2503000.0, 2510000.0, 2520000.0, 2529000.0, 2538000.0, 2548000.0, 2557000.0, 2566000.0, 2576000.0, 2585000.0, 2595000.0, + 2604000.0, 2613000.0, 2623000.0, 2632000.0, 2636000.0, 2640000.0, 2643000.0, 2647000.0, 2651000.0, 2655000.0, 2658000.0, 2662000.0, + 2666000.0, 2670000.0, 2673000.0, 2677000.0, 2681000.0, 2685000.0, 2687000.0, 2689000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, + 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, + 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, 2740000.0, 2742000.0, + 2744000.0, 2746000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2768000.0, 2772000.0, 2776000.0, 2780000.0, 2784000.0, + 2788000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2811000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, 2830000.0, + 2834000.0, 2837000.0, 2841000.0, 2851000.0, 2861000.0, 2870000.0, 2880000.0, 2890000.0, 2899000.0, 2909000.0, 2919000.0, 2929000.0, + 2938000.0, 2958000.0, 2978000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0, + 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, + {0.0, 2503000.0, 2510000.0, 2520000.0, 2529000.0, 2538000.0, 2548000.0, 2557000.0, 2566000.0, 2576000.0, 2585000.0, 2595000.0, + 2604000.0, 2613000.0, 2623000.0, 2632000.0, 2636000.0, 2640000.0, 2643000.0, 2647000.0, 2651000.0, 2655000.0, 2658000.0, 2662000.0, + 2666000.0, 2670000.0, 2673000.0, 2677000.0, 2681000.0, 2685000.0, 2687000.0, 2689000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, + 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, + 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, 2740000.0, 2742000.0, + 2744000.0, 2746000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2768000.0, 2772000.0, 2776000.0, 2780000.0, 2784000.0, + 2788000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2811000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, 2830000.0, + 2834000.0, 2837000.0, 2841000.0, 2851000.0, 2861000.0, 2870000.0, 2880000.0, 2890000.0, 2899000.0, 2909000.0, 2919000.0, 2929000.0, + 2938000.0, 2958000.0, 2978000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0, + 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, + {0.0, 0.0, 2510000.0, 2519000.0, 2529000.0, 2538000.0, 2548000.0, 2557000.0, 2566000.0, 2576000.0, 2585000.0, 2594000.0, + 2604000.0, 2613000.0, 2623000.0, 2632000.0, 2636000.0, 2640000.0, 2643000.0, 2647000.0, 2651000.0, 2655000.0, 2658000.0, 2662000.0, + 2666000.0, 2670000.0, 2673000.0, 2677000.0, 2681000.0, 2685000.0, 2687000.0, 2689000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, + 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, + 2721000.0, 2723000.0, 2725000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, 2740000.0, 2742000.0, + 2744000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2768000.0, 2772000.0, 2776000.0, 2780000.0, 2784000.0, + 2788000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2811000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, 2830000.0, + 2834000.0, 2837000.0, 2841000.0, 2851000.0, 2861000.0, 2870000.0, 2880000.0, 2890000.0, 2899000.0, 2909000.0, 2919000.0, 2929000.0, + 2938000.0, 2958000.0, 2978000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0, + 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, + {0.0, 0.0, 0.0, 2519000.0, 2529000.0, 2538000.0, 2547000.0, 2557000.0, 2566000.0, 2576000.0, 2585000.0, 2594000.0, + 2604000.0, 2613000.0, 2623000.0, 2632000.0, 2636000.0, 2639000.0, 2643000.0, 2647000.0, 2651000.0, 2655000.0, 2658000.0, 2662000.0, + 2666000.0, 2670000.0, 2673000.0, 2677000.0, 2681000.0, 2685000.0, 2687000.0, 2689000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, + 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, + 2721000.0, 2723000.0, 2725000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, 2740000.0, 2742000.0, + 2744000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2768000.0, 2772000.0, 2776000.0, 2780000.0, 2784000.0, + 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, 2830000.0, + 2834000.0, 2837000.0, 2841000.0, 2851000.0, 2861000.0, 2870000.0, 2880000.0, 2890000.0, 2899000.0, 2909000.0, 2919000.0, 2929000.0, + 2938000.0, 2958000.0, 2978000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0, + 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, + {0.0, 0.0, 0.0, 0.0, 2528000.0, 2538000.0, 2547000.0, 2557000.0, 2566000.0, 2575000.0, 2585000.0, 2594000.0, + 2604000.0, 2613000.0, 2622000.0, 2632000.0, 2636000.0, 2639000.0, 2643000.0, 2647000.0, 2651000.0, 2654000.0, 2658000.0, 2662000.0, + 2666000.0, 2670000.0, 2673000.0, 2677000.0, 2681000.0, 2685000.0, 2687000.0, 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, + 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, + 2721000.0, 2723000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, 2740000.0, 2742000.0, + 2744000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2764000.0, 2768000.0, 2772000.0, 2776000.0, 2780000.0, 2784000.0, + 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, 2830000.0, + 2834000.0, 2837000.0, 2841000.0, 2851000.0, 2861000.0, 2870000.0, 2880000.0, 2890000.0, 2899000.0, 2909000.0, 2919000.0, 2929000.0, + 2938000.0, 2958000.0, 2978000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0, + 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 2537000.0, 2547000.0, 2556000.0, 2566000.0, 2575000.0, 2585000.0, 2594000.0, + 2603000.0, 2613000.0, 2622000.0, 2632000.0, 2635000.0, 2639000.0, 2643000.0, 2647000.0, 2651000.0, 2654000.0, 2658000.0, 2662000.0, + 2666000.0, 2669000.0, 2673000.0, 2677000.0, 2681000.0, 2685000.0, 2687000.0, 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, + 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, + 2721000.0, 2723000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, 2740000.0, 2742000.0, + 2743000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2764000.0, 2768000.0, 2772000.0, 2776000.0, 2780000.0, 2784000.0, + 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, 2830000.0, + 2834000.0, 2837000.0, 2841000.0, 2851000.0, 2861000.0, 2870000.0, 2880000.0, 2890000.0, 2899000.0, 2909000.0, 2919000.0, 2929000.0, + 2938000.0, 2958000.0, 2978000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0, + 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2547000.0, 2556000.0, 2566000.0, 2575000.0, 2584000.0, 2594000.0, + 2603000.0, 2613000.0, 2622000.0, 2632000.0, 2635000.0, 2639000.0, 2643000.0, 2647000.0, 2650000.0, 2654000.0, 2658000.0, 2662000.0, + 2666000.0, 2669000.0, 2673000.0, 2677000.0, 2681000.0, 2685000.0, 2686000.0, 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, + 2698000.0, 2700000.0, 2702000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, + 2721000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, 2740000.0, 2741000.0, + 2743000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2764000.0, 2768000.0, 2772000.0, 2776000.0, 2780000.0, 2784000.0, + 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, 2830000.0, + 2833000.0, 2837000.0, 2841000.0, 2851000.0, 2861000.0, 2870000.0, 2880000.0, 2890000.0, 2899000.0, 2909000.0, 2919000.0, 2929000.0, + 2938000.0, 2958000.0, 2978000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0, + 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2556000.0, 2565000.0, 2575000.0, 2584000.0, 2594000.0, + 2603000.0, 2612000.0, 2622000.0, 2631000.0, 2635000.0, 2639000.0, 2643000.0, 2646000.0, 2650000.0, 2654000.0, 2658000.0, 2662000.0, + 2665000.0, 2669000.0, 2673000.0, 2677000.0, 2681000.0, 2684000.0, 2686000.0, 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, + 2698000.0, 2700000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, + 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, 2739000.0, 2741000.0, + 2743000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2760000.0, 2764000.0, 2768000.0, 2772000.0, 2776000.0, 2780000.0, 2783000.0, + 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, 2830000.0, + 2833000.0, 2837000.0, 2841000.0, 2851000.0, 2860000.0, 2870000.0, 2880000.0, 2890000.0, 2899000.0, 2909000.0, 2919000.0, 2929000.0, + 2938000.0, 2958000.0, 2978000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0, + 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2565000.0, 2574000.0, 2584000.0, 2593000.0, + 2603000.0, 2612000.0, 2622000.0, 2631000.0, 2635000.0, 2639000.0, 2642000.0, 2646000.0, 2650000.0, 2654000.0, 2658000.0, 2661000.0, + 2665000.0, 2669000.0, 2673000.0, 2677000.0, 2680000.0, 2684000.0, 2686000.0, 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, + 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2718000.0, + 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2737000.0, 2739000.0, 2741000.0, + 2743000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2760000.0, 2764000.0, 2768000.0, 2772000.0, 2776000.0, 2780000.0, 2783000.0, + 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, 2829000.0, + 2833000.0, 2837000.0, 2841000.0, 2851000.0, 2860000.0, 2870000.0, 2880000.0, 2890000.0, 2899000.0, 2909000.0, 2919000.0, 2929000.0, + 2938000.0, 2958000.0, 2978000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0, + 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2574000.0, 2583000.0, 2593000.0, + 2602000.0, 2612000.0, 2621000.0, 2631000.0, 2635000.0, 2638000.0, 2642000.0, 2646000.0, 2650000.0, 2654000.0, 2657000.0, 2661000.0, + 2665000.0, 2669000.0, 2673000.0, 2676000.0, 2680000.0, 2684000.0, 2686000.0, 2688000.0, 2690000.0, 2692000.0, 2693000.0, 2695000.0, + 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2714000.0, 2716000.0, 2718000.0, + 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2733000.0, 2735000.0, 2737000.0, 2739000.0, 2741000.0, + 2743000.0, 2745000.0, 2749000.0, 2753000.0, 2756000.0, 2760000.0, 2764000.0, 2768000.0, 2772000.0, 2776000.0, 2779000.0, 2783000.0, + 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, 2829000.0, + 2833000.0, 2837000.0, 2841000.0, 2851000.0, 2860000.0, 2870000.0, 2880000.0, 2889000.0, 2899000.0, 2909000.0, 2919000.0, 2928000.0, + 2938000.0, 2958000.0, 2978000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0, + 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2582000.0, 2592000.0, + 2602000.0, 2611000.0, 2621000.0, 2630000.0, 2634000.0, 2638000.0, 2642000.0, 2646000.0, 2649000.0, 2653000.0, 2657000.0, 2661000.0, + 2665000.0, 2668000.0, 2672000.0, 2676000.0, 2680000.0, 2684000.0, 2686000.0, 2688000.0, 2689000.0, 2691000.0, 2693000.0, 2695000.0, + 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2708000.0, 2710000.0, 2712000.0, 2714000.0, 2716000.0, 2718000.0, + 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2729000.0, 2731000.0, 2733000.0, 2735000.0, 2737000.0, 2739000.0, 2741000.0, + 2743000.0, 2745000.0, 2749000.0, 2752000.0, 2756000.0, 2760000.0, 2764000.0, 2768000.0, 2772000.0, 2775000.0, 2779000.0, 2783000.0, + 2787000.0, 2791000.0, 2795000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, 2825000.0, 2829000.0, + 2833000.0, 2837000.0, 2841000.0, 2851000.0, 2860000.0, 2870000.0, 2880000.0, 2889000.0, 2899000.0, 2909000.0, 2919000.0, 2928000.0, + 2938000.0, 2958000.0, 2977000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0, + 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2591000.0, + 2601000.0, 2611000.0, 2620000.0, 2630000.0, 2634000.0, 2637000.0, 2641000.0, 2645000.0, 2649000.0, 2653000.0, 2657000.0, 2660000.0, + 2664000.0, 2668000.0, 2672000.0, 2676000.0, 2680000.0, 2683000.0, 2685000.0, 2687000.0, 2689000.0, 2691000.0, 2693000.0, 2695000.0, + 2697000.0, 2699000.0, 2701000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2710000.0, 2712000.0, 2714000.0, 2716000.0, 2718000.0, + 2720000.0, 2722000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2733000.0, 2735000.0, 2737000.0, 2739000.0, 2741000.0, + 2743000.0, 2745000.0, 2748000.0, 2752000.0, 2756000.0, 2760000.0, 2764000.0, 2768000.0, 2771000.0, 2775000.0, 2779000.0, 2783000.0, + 2787000.0, 2791000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, 2821000.0, 2825000.0, 2829000.0, + 2833000.0, 2837000.0, 2841000.0, 2850000.0, 2860000.0, 2870000.0, 2879000.0, 2889000.0, 2899000.0, 2909000.0, 2918000.0, 2928000.0, + 2938000.0, 2958000.0, 2977000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0, + 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 2600000.0, 2610000.0, 2620000.0, 2629000.0, 2633000.0, 2637000.0, 2641000.0, 2645000.0, 2648000.0, 2652000.0, 2656000.0, 2660000.0, + 2664000.0, 2668000.0, 2671000.0, 2675000.0, 2679000.0, 2683000.0, 2685000.0, 2687000.0, 2689000.0, 2691000.0, 2692000.0, 2694000.0, + 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2710000.0, 2712000.0, 2714000.0, 2715000.0, 2717000.0, + 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2733000.0, 2735000.0, 2737000.0, 2738000.0, 2740000.0, + 2742000.0, 2744000.0, 2748000.0, 2752000.0, 2756000.0, 2760000.0, 2763000.0, 2767000.0, 2771000.0, 2775000.0, 2779000.0, 2783000.0, + 2786000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2813000.0, 2817000.0, 2821000.0, 2825000.0, 2829000.0, + 2833000.0, 2837000.0, 2841000.0, 2850000.0, 2860000.0, 2870000.0, 2879000.0, 2889000.0, 2899000.0, 2909000.0, 2918000.0, 2928000.0, + 2938000.0, 2958000.0, 2977000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0, + 3177000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 2609000.0, 2619000.0, 2628000.0, 2632000.0, 2636000.0, 2640000.0, 2644000.0, 2648000.0, 2652000.0, 2655000.0, 2659000.0, + 2663000.0, 2667000.0, 2671000.0, 2675000.0, 2679000.0, 2682000.0, 2684000.0, 2686000.0, 2688000.0, 2690000.0, 2692000.0, 2694000.0, + 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, + 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, 2740000.0, + 2742000.0, 2744000.0, 2748000.0, 2752000.0, 2755000.0, 2759000.0, 2763000.0, 2767000.0, 2771000.0, 2775000.0, 2778000.0, 2782000.0, + 2786000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2805000.0, 2809000.0, 2813000.0, 2817000.0, 2821000.0, 2825000.0, 2829000.0, + 2833000.0, 2836000.0, 2840000.0, 2850000.0, 2860000.0, 2869000.0, 2879000.0, 2889000.0, 2899000.0, 2908000.0, 2918000.0, 2928000.0, + 2938000.0, 2957000.0, 2977000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3076000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0, + 3177000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 2618000.0, 2627000.0, 2631000.0, 2635000.0, 2639000.0, 2643000.0, 2647000.0, 2651000.0, 2655000.0, 2659000.0, + 2662000.0, 2666000.0, 2670000.0, 2674000.0, 2678000.0, 2682000.0, 2684000.0, 2686000.0, 2688000.0, 2689000.0, 2691000.0, 2693000.0, + 2695000.0, 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2716000.0, + 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, 2740000.0, + 2741000.0, 2743000.0, 2747000.0, 2751000.0, 2755000.0, 2759000.0, 2763000.0, 2767000.0, 2770000.0, 2774000.0, 2778000.0, 2782000.0, + 2786000.0, 2790000.0, 2794000.0, 2797000.0, 2801000.0, 2805000.0, 2809000.0, 2813000.0, 2817000.0, 2821000.0, 2825000.0, 2828000.0, + 2832000.0, 2836000.0, 2840000.0, 2850000.0, 2859000.0, 2869000.0, 2879000.0, 2889000.0, 2898000.0, 2908000.0, 2918000.0, 2928000.0, + 2938000.0, 2957000.0, 2977000.0, 2997000.0, 3017000.0, 3036000.0, 3056000.0, 3076000.0, 3096000.0, 3117000.0, 3137000.0, 3157000.0, + 3177000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 2626000.0, 2630000.0, 2634000.0, 2638000.0, 2642000.0, 2646000.0, 2650000.0, 2654000.0, 2658000.0, + 2661000.0, 2665000.0, 2669000.0, 2673000.0, 2677000.0, 2681000.0, 2683000.0, 2685000.0, 2687000.0, 2689000.0, 2691000.0, 2693000.0, + 2695000.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2710000.0, 2712000.0, 2714000.0, 2716000.0, + 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2733000.0, 2735000.0, 2737000.0, 2739000.0, + 2741000.0, 2743000.0, 2747000.0, 2751000.0, 2754000.0, 2758000.0, 2762000.0, 2766000.0, 2770000.0, 2774000.0, 2778000.0, 2782000.0, + 2785000.0, 2789000.0, 2793000.0, 2797000.0, 2801000.0, 2805000.0, 2809000.0, 2813000.0, 2816000.0, 2820000.0, 2824000.0, 2828000.0, + 2832000.0, 2836000.0, 2840000.0, 2849000.0, 2859000.0, 2869000.0, 2879000.0, 2888000.0, 2898000.0, 2908000.0, 2918000.0, 2928000.0, + 2937000.0, 2957000.0, 2977000.0, 2997000.0, 3016000.0, 3036000.0, 3056000.0, 3076000.0, 3096000.0, 3116000.0, 3137000.0, 3157000.0, + 3177000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3489000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 2630000.0, 2633000.0, 2637000.0, 2641000.0, 2645000.0, 2649000.0, 2653000.0, 2657000.0, + 2661000.0, 2665000.0, 2669000.0, 2673000.0, 2677000.0, 2681000.0, 2683000.0, 2684000.0, 2686000.0, 2688000.0, 2690000.0, 2692000.0, + 2694000.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2710000.0, 2712000.0, 2714000.0, 2716000.0, + 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2733000.0, 2735000.0, 2737000.0, 2739000.0, + 2741000.0, 2743000.0, 2747000.0, 2750000.0, 2754000.0, 2758000.0, 2762000.0, 2766000.0, 2770000.0, 2774000.0, 2777000.0, 2781000.0, + 2785000.0, 2789000.0, 2793000.0, 2797000.0, 2801000.0, 2805000.0, 2808000.0, 2812000.0, 2816000.0, 2820000.0, 2824000.0, 2828000.0, + 2832000.0, 2836000.0, 2840000.0, 2849000.0, 2859000.0, 2869000.0, 2879000.0, 2888000.0, 2898000.0, 2908000.0, 2918000.0, 2927000.0, + 2937000.0, 2957000.0, 2977000.0, 2996000.0, 3016000.0, 3036000.0, 3056000.0, 3076000.0, 3096000.0, 3116000.0, 3137000.0, 3157000.0, + 3177000.0, 3197000.0, 3218000.0, 3280000.0, 3384000.0, 3489000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 2633000.0, 2637000.0, 2641000.0, 2645000.0, 2649000.0, 2653000.0, 2657000.0, + 2661000.0, 2665000.0, 2668000.0, 2672000.0, 2676000.0, 2680000.0, 2682000.0, 2684000.0, 2686000.0, 2688000.0, 2690000.0, 2692000.0, + 2694000.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, + 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2733000.0, 2735000.0, 2737000.0, 2738000.0, + 2740000.0, 2742000.0, 2746000.0, 2750000.0, 2754000.0, 2758000.0, 2762000.0, 2766000.0, 2770000.0, 2773000.0, 2777000.0, 2781000.0, + 2785000.0, 2789000.0, 2793000.0, 2797000.0, 2801000.0, 2804000.0, 2808000.0, 2812000.0, 2816000.0, 2820000.0, 2824000.0, 2828000.0, + 2832000.0, 2835000.0, 2839000.0, 2849000.0, 2859000.0, 2869000.0, 2878000.0, 2888000.0, 2898000.0, 2908000.0, 2918000.0, 2927000.0, + 2937000.0, 2957000.0, 2977000.0, 2996000.0, 3016000.0, 3036000.0, 3056000.0, 3076000.0, 3096000.0, 3116000.0, 3136000.0, 3157000.0, + 3177000.0, 3197000.0, 3218000.0, 3280000.0, 3384000.0, 3489000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2636000.0, 2640000.0, 2644000.0, 2648000.0, 2652000.0, 2656000.0, + 2660000.0, 2664000.0, 2668000.0, 2672000.0, 2676000.0, 2680000.0, 2682000.0, 2684000.0, 2686000.0, 2688000.0, 2690000.0, 2691000.0, + 2693000.0, 2695000.0, 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, + 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, + 2740000.0, 2742000.0, 2746000.0, 2750000.0, 2754000.0, 2758000.0, 2762000.0, 2765000.0, 2769000.0, 2773000.0, 2777000.0, 2781000.0, + 2785000.0, 2789000.0, 2793000.0, 2796000.0, 2800000.0, 2804000.0, 2808000.0, 2812000.0, 2816000.0, 2820000.0, 2824000.0, 2828000.0, + 2831000.0, 2835000.0, 2839000.0, 2849000.0, 2859000.0, 2868000.0, 2878000.0, 2888000.0, 2898000.0, 2908000.0, 2917000.0, 2927000.0, + 2937000.0, 2957000.0, 2976000.0, 2996000.0, 3016000.0, 3036000.0, 3056000.0, 3076000.0, 3096000.0, 3116000.0, 3136000.0, 3157000.0, + 3177000.0, 3197000.0, 3218000.0, 3280000.0, 3384000.0, 3489000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2640000.0, 2644000.0, 2648000.0, 2652000.0, 2656000.0, + 2660000.0, 2664000.0, 2667000.0, 2671000.0, 2675000.0, 2679000.0, 2681000.0, 2683000.0, 2685000.0, 2687000.0, 2689000.0, 2691000.0, + 2693000.0, 2695000.0, 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, + 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, + 2740000.0, 2742000.0, 2746000.0, 2750000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2769000.0, 2773000.0, 2777000.0, 2781000.0, + 2785000.0, 2788000.0, 2792000.0, 2796000.0, 2800000.0, 2804000.0, 2808000.0, 2812000.0, 2816000.0, 2820000.0, 2823000.0, 2827000.0, + 2831000.0, 2835000.0, 2839000.0, 2849000.0, 2859000.0, 2868000.0, 2878000.0, 2888000.0, 2898000.0, 2907000.0, 2917000.0, 2927000.0, + 2937000.0, 2957000.0, 2976000.0, 2996000.0, 3016000.0, 3036000.0, 3056000.0, 3076000.0, 3096000.0, 3116000.0, 3136000.0, 3157000.0, + 3177000.0, 3197000.0, 3218000.0, 3280000.0, 3384000.0, 3489000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2643000.0, 2647000.0, 2651000.0, 2655000.0, + 2659000.0, 2663000.0, 2667000.0, 2671000.0, 2675000.0, 2679000.0, 2681000.0, 2683000.0, 2685000.0, 2687000.0, 2689000.0, 2691000.0, + 2693000.0, 2695000.0, 2697000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2710000.0, 2712000.0, 2714000.0, + 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, + 2740000.0, 2741000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2769000.0, 2773000.0, 2777000.0, 2780000.0, + 2784000.0, 2788000.0, 2792000.0, 2796000.0, 2800000.0, 2804000.0, 2808000.0, 2812000.0, 2815000.0, 2819000.0, 2823000.0, 2827000.0, + 2831000.0, 2835000.0, 2839000.0, 2849000.0, 2858000.0, 2868000.0, 2878000.0, 2888000.0, 2897000.0, 2907000.0, 2917000.0, 2927000.0, + 2937000.0, 2956000.0, 2976000.0, 2996000.0, 3016000.0, 3036000.0, 3056000.0, 3076000.0, 3096000.0, 3116000.0, 3136000.0, 3157000.0, + 3177000.0, 3197000.0, 3218000.0, 3280000.0, 3384000.0, 3489000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2646000.0, 2650000.0, 2654000.0, + 2658000.0, 2662000.0, 2666000.0, 2670000.0, 2674000.0, 2678000.0, 2680000.0, 2682000.0, 2684000.0, 2686000.0, 2688000.0, 2690000.0, + 2692000.0, 2694000.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2710000.0, 2712000.0, 2714000.0, + 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2733000.0, 2735000.0, 2737000.0, + 2739000.0, 2741000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2768000.0, 2772000.0, 2776000.0, 2780000.0, + 2784000.0, 2788000.0, 2792000.0, 2796000.0, 2800000.0, 2804000.0, 2807000.0, 2811000.0, 2815000.0, 2819000.0, 2823000.0, 2827000.0, + 2831000.0, 2835000.0, 2839000.0, 2848000.0, 2858000.0, 2868000.0, 2878000.0, 2887000.0, 2897000.0, 2907000.0, 2917000.0, 2927000.0, + 2937000.0, 2956000.0, 2976000.0, 2996000.0, 3016000.0, 3036000.0, 3056000.0, 3076000.0, 3096000.0, 3116000.0, 3136000.0, 3156000.0, + 3177000.0, 3197000.0, 3218000.0, 3280000.0, 3383000.0, 3489000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2650000.0, 2654000.0, + 2658000.0, 2662000.0, 2666000.0, 2670000.0, 2674000.0, 2678000.0, 2680000.0, 2682000.0, 2684000.0, 2686000.0, 2688000.0, 2690000.0, + 2692000.0, 2694000.0, 2696000.0, 2698000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, + 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2733000.0, 2735000.0, 2737000.0, + 2739000.0, 2741000.0, 2745000.0, 2749000.0, 2752000.0, 2756000.0, 2760000.0, 2764000.0, 2768000.0, 2772000.0, 2776000.0, 2780000.0, + 2784000.0, 2788000.0, 2792000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2811000.0, 2815000.0, 2819000.0, 2823000.0, 2827000.0, + 2831000.0, 2834000.0, 2838000.0, 2848000.0, 2858000.0, 2868000.0, 2878000.0, 2887000.0, 2897000.0, 2907000.0, 2917000.0, 2927000.0, + 2936000.0, 2956000.0, 2976000.0, 2996000.0, 3016000.0, 3036000.0, 3056000.0, 3076000.0, 3096000.0, 3116000.0, 3136000.0, 3156000.0, + 3177000.0, 3197000.0, 3218000.0, 3280000.0, 3383000.0, 3489000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2653000.0, + 2657000.0, 2661000.0, 2665000.0, 2669000.0, 2673000.0, 2677000.0, 2679000.0, 2681000.0, 2683000.0, 2685000.0, 2687000.0, 2689000.0, + 2691000.0, 2693000.0, 2695000.0, 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, + 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2732000.0, 2734000.0, 2736000.0, + 2738000.0, 2740000.0, 2744000.0, 2748000.0, 2752000.0, 2756000.0, 2760000.0, 2764000.0, 2768000.0, 2772000.0, 2776000.0, 2779000.0, + 2783000.0, 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2811000.0, 2815000.0, 2819000.0, 2822000.0, 2826000.0, + 2830000.0, 2834000.0, 2838000.0, 2848000.0, 2858000.0, 2867000.0, 2877000.0, 2887000.0, 2897000.0, 2907000.0, 2917000.0, 2926000.0, + 2936000.0, 2956000.0, 2976000.0, 2996000.0, 3016000.0, 3035000.0, 3055000.0, 3076000.0, 3096000.0, 3116000.0, 3136000.0, 3156000.0, + 3177000.0, 3197000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 2656000.0, 2660000.0, 2664000.0, 2668000.0, 2672000.0, 2676000.0, 2678000.0, 2680000.0, 2682000.0, 2684000.0, 2686000.0, 2688000.0, + 2690000.0, 2692000.0, 2694000.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2710000.0, 2712000.0, + 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, + 2738000.0, 2740000.0, 2744000.0, 2748000.0, 2752000.0, 2756000.0, 2760000.0, 2763000.0, 2767000.0, 2771000.0, 2775000.0, 2779000.0, + 2783000.0, 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, + 2830000.0, 2834000.0, 2838000.0, 2848000.0, 2857000.0, 2867000.0, 2877000.0, 2887000.0, 2897000.0, 2907000.0, 2916000.0, 2926000.0, + 2936000.0, 2956000.0, 2976000.0, 2996000.0, 3015000.0, 3035000.0, 3055000.0, 3075000.0, 3095000.0, 3116000.0, 3136000.0, 3156000.0, + 3176000.0, 3197000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 2660000.0, 2664000.0, 2668000.0, 2672000.0, 2676000.0, 2678000.0, 2680000.0, 2682000.0, 2684000.0, 2686000.0, 2688000.0, + 2690000.0, 2692000.0, 2694000.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2710000.0, 2712000.0, + 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2735000.0, + 2737000.0, 2739000.0, 2743000.0, 2747000.0, 2751000.0, 2755000.0, 2759000.0, 2763000.0, 2767000.0, 2771000.0, 2775000.0, 2779000.0, + 2783000.0, 2787000.0, 2791000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, + 2830000.0, 2834000.0, 2838000.0, 2847000.0, 2857000.0, 2867000.0, 2877000.0, 2887000.0, 2896000.0, 2906000.0, 2916000.0, 2926000.0, + 2936000.0, 2956000.0, 2975000.0, 2995000.0, 3015000.0, 3035000.0, 3055000.0, 3075000.0, 3095000.0, 3116000.0, 3136000.0, 3156000.0, + 3176000.0, 3197000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 2663000.0, 2667000.0, 2671000.0, 2675000.0, 2677000.0, 2679000.0, 2681000.0, 2683000.0, 2685000.0, 2687000.0, + 2689000.0, 2691000.0, 2693000.0, 2695000.0, 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, + 2713000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2733000.0, 2735000.0, + 2737000.0, 2739000.0, 2743000.0, 2747000.0, 2751000.0, 2755000.0, 2759000.0, 2763000.0, 2767000.0, 2771000.0, 2774000.0, 2778000.0, + 2782000.0, 2786000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, + 2829000.0, 2833000.0, 2837000.0, 2847000.0, 2857000.0, 2867000.0, 2877000.0, 2886000.0, 2896000.0, 2906000.0, 2916000.0, 2926000.0, + 2936000.0, 2955000.0, 2975000.0, 2995000.0, 3015000.0, 3035000.0, 3055000.0, 3075000.0, 3095000.0, 3115000.0, 3136000.0, 3156000.0, + 3176000.0, 3197000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 2666000.0, 2670000.0, 2674000.0, 2676000.0, 2678000.0, 2680000.0, 2682000.0, 2684000.0, 2686000.0, + 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, + 2713000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, + 2736000.0, 2738000.0, 2742000.0, 2746000.0, 2750000.0, 2754000.0, 2758000.0, 2762000.0, 2766000.0, 2770000.0, 2774000.0, 2778000.0, + 2782000.0, 2786000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2809000.0, 2813000.0, 2817000.0, 2821000.0, 2825000.0, + 2829000.0, 2833000.0, 2837000.0, 2847000.0, 2857000.0, 2866000.0, 2876000.0, 2886000.0, 2896000.0, 2906000.0, 2916000.0, 2926000.0, + 2935000.0, 2955000.0, 2975000.0, 2995000.0, 3015000.0, 3035000.0, 3055000.0, 3075000.0, 3095000.0, 3115000.0, 3136000.0, 3156000.0, + 3176000.0, 3197000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 2669000.0, 2673000.0, 2675000.0, 2677000.0, 2679000.0, 2682000.0, 2684000.0, 2686000.0, + 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2710000.0, + 2712000.0, 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, + 2736000.0, 2738000.0, 2742000.0, 2746000.0, 2750000.0, 2754000.0, 2758000.0, 2762000.0, 2766000.0, 2770000.0, 2774000.0, 2777000.0, + 2781000.0, 2785000.0, 2789000.0, 2793000.0, 2797000.0, 2801000.0, 2805000.0, 2809000.0, 2813000.0, 2817000.0, 2821000.0, 2825000.0, + 2829000.0, 2833000.0, 2837000.0, 2846000.0, 2856000.0, 2866000.0, 2876000.0, 2886000.0, 2896000.0, 2906000.0, 2915000.0, 2925000.0, + 2935000.0, 2955000.0, 2975000.0, 2995000.0, 3015000.0, 3035000.0, 3055000.0, 3075000.0, 3095000.0, 3115000.0, 3135000.0, 3156000.0, + 3176000.0, 3196000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 2672000.0, 2674000.0, 2677000.0, 2679000.0, 2681000.0, 2683000.0, 2685000.0, + 2687000.0, 2689000.0, 2691000.0, 2693000.0, 2695000.0, 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, + 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2733000.0, + 2735000.0, 2737000.0, 2741000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2769000.0, 2773000.0, 2777000.0, + 2781000.0, 2785000.0, 2789000.0, 2793000.0, 2797000.0, 2801000.0, 2805000.0, 2809000.0, 2813000.0, 2817000.0, 2820000.0, 2824000.0, + 2828000.0, 2832000.0, 2836000.0, 2846000.0, 2856000.0, 2866000.0, 2876000.0, 2886000.0, 2895000.0, 2905000.0, 2915000.0, 2925000.0, + 2935000.0, 2955000.0, 2975000.0, 2995000.0, 3015000.0, 3035000.0, 3055000.0, 3075000.0, 3095000.0, 3115000.0, 3135000.0, 3156000.0, + 3176000.0, 3196000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2674000.0, 2676000.0, 2678000.0, 2680000.0, 2682000.0, 2684000.0, + 2686000.0, 2688000.0, 2690000.0, 2693000.0, 2695000.0, 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, + 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2733000.0, + 2735000.0, 2737000.0, 2741000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2769000.0, 2773000.0, 2777000.0, + 2781000.0, 2785000.0, 2789000.0, 2793000.0, 2797000.0, 2801000.0, 2804000.0, 2808000.0, 2812000.0, 2816000.0, 2820000.0, 2824000.0, + 2828000.0, 2832000.0, 2836000.0, 2846000.0, 2856000.0, 2866000.0, 2876000.0, 2885000.0, 2895000.0, 2905000.0, 2915000.0, 2925000.0, + 2935000.0, 2955000.0, 2975000.0, 2994000.0, 3014000.0, 3034000.0, 3054000.0, 3075000.0, 3095000.0, 3115000.0, 3135000.0, 3156000.0, + 3176000.0, 3196000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2676000.0, 2678000.0, 2680000.0, 2682000.0, 2684000.0, + 2686000.0, 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, + 2710000.0, 2712000.0, 2714000.0, 2716000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2733000.0, + 2735000.0, 2737000.0, 2741000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2769000.0, 2773000.0, 2776000.0, + 2780000.0, 2784000.0, 2788000.0, 2792000.0, 2796000.0, 2800000.0, 2804000.0, 2808000.0, 2812000.0, 2816000.0, 2820000.0, 2824000.0, + 2828000.0, 2832000.0, 2836000.0, 2846000.0, 2856000.0, 2866000.0, 2875000.0, 2885000.0, 2895000.0, 2905000.0, 2915000.0, 2925000.0, + 2935000.0, 2955000.0, 2974000.0, 2994000.0, 3014000.0, 3034000.0, 3054000.0, 3074000.0, 3095000.0, 3115000.0, 3135000.0, 3155000.0, + 3176000.0, 3196000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2677000.0, 2679000.0, 2681000.0, 2683000.0, + 2685000.0, 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, + 2710000.0, 2712000.0, 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, + 2734000.0, 2736000.0, 2740000.0, 2744000.0, 2748000.0, 2752000.0, 2756000.0, 2760000.0, 2764000.0, 2768000.0, 2772000.0, 2776000.0, + 2780000.0, 2784000.0, 2788000.0, 2792000.0, 2796000.0, 2800000.0, 2804000.0, 2808000.0, 2812000.0, 2816000.0, 2820000.0, 2824000.0, + 2828000.0, 2832000.0, 2836000.0, 2846000.0, 2855000.0, 2865000.0, 2875000.0, 2885000.0, 2895000.0, 2905000.0, 2915000.0, 2925000.0, + 2935000.0, 2954000.0, 2974000.0, 2994000.0, 3014000.0, 3034000.0, 3054000.0, 3074000.0, 3095000.0, 3115000.0, 3135000.0, 3155000.0, + 3176000.0, 3196000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2679000.0, 2681000.0, 2683000.0, + 2685000.0, 2687000.0, 2689000.0, 2691000.0, 2693000.0, 2695000.0, 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2706000.0, 2708000.0, + 2710000.0, 2712000.0, 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, + 2734000.0, 2736000.0, 2740000.0, 2744000.0, 2748000.0, 2752000.0, 2756000.0, 2760000.0, 2764000.0, 2768000.0, 2772000.0, 2776000.0, + 2780000.0, 2784000.0, 2788000.0, 2792000.0, 2796000.0, 2800000.0, 2804000.0, 2808000.0, 2812000.0, 2816000.0, 2820000.0, 2824000.0, + 2828000.0, 2832000.0, 2835000.0, 2845000.0, 2855000.0, 2865000.0, 2875000.0, 2885000.0, 2895000.0, 2905000.0, 2915000.0, 2925000.0, + 2934000.0, 2954000.0, 2974000.0, 2994000.0, 3014000.0, 3034000.0, 3054000.0, 3074000.0, 3094000.0, 3115000.0, 3135000.0, 3155000.0, + 3176000.0, 3196000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2680000.0, 2682000.0, + 2684000.0, 2687000.0, 2689000.0, 2691000.0, 2693000.0, 2695000.0, 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, + 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2730000.0, 2732000.0, + 2734000.0, 2736000.0, 2740000.0, 2744000.0, 2748000.0, 2752000.0, 2756000.0, 2760000.0, 2764000.0, 2768000.0, 2772000.0, 2776000.0, + 2780000.0, 2784000.0, 2788000.0, 2792000.0, 2796000.0, 2800000.0, 2804000.0, 2807000.0, 2811000.0, 2815000.0, 2819000.0, 2823000.0, + 2827000.0, 2831000.0, 2835000.0, 2845000.0, 2855000.0, 2865000.0, 2875000.0, 2885000.0, 2895000.0, 2905000.0, 2914000.0, 2924000.0, + 2934000.0, 2954000.0, 2974000.0, 2994000.0, 3014000.0, 3034000.0, 3054000.0, 3074000.0, 3094000.0, 3115000.0, 3135000.0, 3155000.0, + 3176000.0, 3196000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2682000.0, + 2684000.0, 2686000.0, 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, 2698000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, + 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, + 2733000.0, 2735000.0, 2739000.0, 2743000.0, 2747000.0, 2751000.0, 2755000.0, 2759000.0, 2763000.0, 2767000.0, 2771000.0, 2775000.0, + 2779000.0, 2783000.0, 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2811000.0, 2815000.0, 2819000.0, 2823000.0, + 2827000.0, 2831000.0, 2835000.0, 2845000.0, 2855000.0, 2865000.0, 2875000.0, 2885000.0, 2894000.0, 2904000.0, 2914000.0, 2924000.0, + 2934000.0, 2954000.0, 2974000.0, 2994000.0, 3014000.0, 3034000.0, 3054000.0, 3074000.0, 3094000.0, 3115000.0, 3135000.0, 3155000.0, + 3176000.0, 3196000.0, 3216000.0, 3280000.0, 3383000.0, 3489000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 2683000.0, 2685000.0, 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, + 2708000.0, 2710000.0, 2712000.0, 2714000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, + 2733000.0, 2735000.0, 2739000.0, 2743000.0, 2747000.0, 2751000.0, 2755000.0, 2759000.0, 2763000.0, 2767000.0, 2771000.0, 2775000.0, + 2779000.0, 2783000.0, 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2811000.0, 2815000.0, 2819000.0, 2823000.0, + 2827000.0, 2831000.0, 2835000.0, 2845000.0, 2855000.0, 2865000.0, 2874000.0, 2884000.0, 2894000.0, 2904000.0, 2914000.0, 2924000.0, + 2934000.0, 2954000.0, 2974000.0, 2994000.0, 3014000.0, 3034000.0, 3054000.0, 3074000.0, 3094000.0, 3114000.0, 3135000.0, 3155000.0, + 3175000.0, 3196000.0, 3216000.0, 3280000.0, 3383000.0, 3489000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 2685000.0, 2687000.0, 2689000.0, 2691000.0, 2693000.0, 2695000.0, 2697000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, + 2708000.0, 2710000.0, 2712000.0, 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, + 2732000.0, 2734000.0, 2738000.0, 2743000.0, 2747000.0, 2751000.0, 2755000.0, 2759000.0, 2763000.0, 2767000.0, 2771000.0, 2775000.0, + 2779000.0, 2783000.0, 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2811000.0, 2815000.0, 2819000.0, 2823000.0, + 2827000.0, 2831000.0, 2835000.0, 2844000.0, 2854000.0, 2864000.0, 2874000.0, 2884000.0, 2894000.0, 2904000.0, 2914000.0, 2924000.0, + 2934000.0, 2954000.0, 2974000.0, 2994000.0, 3014000.0, 3034000.0, 3054000.0, 3074000.0, 3094000.0, 3114000.0, 3135000.0, 3155000.0, + 3175000.0, 3196000.0, 3216000.0, 3280000.0, 3383000.0, 3488000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 2686000.0, 2689000.0, 2691000.0, 2693000.0, 2695000.0, 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, + 2707000.0, 2709000.0, 2711000.0, 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, + 2732000.0, 2734000.0, 2738000.0, 2742000.0, 2746000.0, 2750000.0, 2754000.0, 2758000.0, 2762000.0, 2766000.0, 2770000.0, 2774000.0, + 2778000.0, 2782000.0, 2786000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, + 2826000.0, 2830000.0, 2834000.0, 2844000.0, 2854000.0, 2864000.0, 2874000.0, 2884000.0, 2894000.0, 2904000.0, 2914000.0, 2924000.0, + 2934000.0, 2954000.0, 2974000.0, 2994000.0, 3014000.0, 3034000.0, 3054000.0, 3074000.0, 3094000.0, 3114000.0, 3135000.0, 3155000.0, + 3175000.0, 3196000.0, 3216000.0, 3280000.0, 3382000.0, 3488000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, + 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2730000.0, + 2732000.0, 2734000.0, 2738000.0, 2742000.0, 2746000.0, 2750000.0, 2754000.0, 2758000.0, 2762000.0, 2766000.0, 2770000.0, 2774000.0, + 2778000.0, 2782000.0, 2786000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, + 2826000.0, 2830000.0, 2834000.0, 2844000.0, 2854000.0, 2864000.0, 2874000.0, 2884000.0, 2894000.0, 2904000.0, 2914000.0, 2924000.0, + 2934000.0, 2953000.0, 2973000.0, 2993000.0, 3013000.0, 3033000.0, 3054000.0, 3074000.0, 3094000.0, 3114000.0, 3134000.0, 3155000.0, + 3175000.0, 3196000.0, 3216000.0, 3280000.0, 3382000.0, 3488000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, + 2706000.0, 2708000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, + 2731000.0, 2733000.0, 2737000.0, 2741000.0, 2745000.0, 2749000.0, 2754000.0, 2758000.0, 2762000.0, 2766000.0, 2770000.0, 2774000.0, + 2778000.0, 2782000.0, 2786000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, + 2826000.0, 2830000.0, 2834000.0, 2844000.0, 2854000.0, 2864000.0, 2874000.0, 2884000.0, 2894000.0, 2903000.0, 2913000.0, 2923000.0, + 2933000.0, 2953000.0, 2973000.0, 2993000.0, 3013000.0, 3033000.0, 3053000.0, 3074000.0, 3094000.0, 3114000.0, 3134000.0, 3155000.0, + 3175000.0, 3196000.0, 3216000.0, 3280000.0, 3382000.0, 3488000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 2691000.0, 2693000.0, 2695000.0, 2697000.0, 2700000.0, 2702000.0, 2704000.0, + 2706000.0, 2708000.0, 2710000.0, 2712000.0, 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2727000.0, 2729000.0, + 2731000.0, 2733000.0, 2737000.0, 2741000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2769000.0, 2773000.0, + 2777000.0, 2781000.0, 2785000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, + 2826000.0, 2830000.0, 2834000.0, 2844000.0, 2853000.0, 2863000.0, 2873000.0, 2883000.0, 2893000.0, 2903000.0, 2913000.0, 2923000.0, + 2933000.0, 2953000.0, 2973000.0, 2993000.0, 3013000.0, 3033000.0, 3053000.0, 3073000.0, 3094000.0, 3114000.0, 3134000.0, 3155000.0, + 3175000.0, 3195000.0, 3216000.0, 3280000.0, 3382000.0, 3488000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2693000.0, 2695000.0, 2697000.0, 2699000.0, 2701000.0, 2703000.0, + 2705000.0, 2707000.0, 2709000.0, 2712000.0, 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, + 2730000.0, 2732000.0, 2736000.0, 2740000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2769000.0, 2773000.0, + 2777000.0, 2781000.0, 2785000.0, 2789000.0, 2793000.0, 2797000.0, 2801000.0, 2805000.0, 2809000.0, 2813000.0, 2817000.0, 2821000.0, + 2825000.0, 2829000.0, 2833000.0, 2843000.0, 2853000.0, 2863000.0, 2873000.0, 2883000.0, 2893000.0, 2903000.0, 2913000.0, 2923000.0, + 2933000.0, 2953000.0, 2973000.0, 2993000.0, 3013000.0, 3033000.0, 3053000.0, 3073000.0, 3094000.0, 3114000.0, 3134000.0, 3154000.0, + 3175000.0, 3195000.0, 3216000.0, 3280000.0, 3382000.0, 3488000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2694000.0, 2696000.0, 2698000.0, 2700000.0, 2703000.0, + 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2724000.0, 2726000.0, 2728000.0, + 2730000.0, 2732000.0, 2736000.0, 2740000.0, 2744000.0, 2748000.0, 2752000.0, 2756000.0, 2760000.0, 2765000.0, 2769000.0, 2773000.0, + 2777000.0, 2781000.0, 2785000.0, 2789000.0, 2793000.0, 2797000.0, 2801000.0, 2805000.0, 2809000.0, 2813000.0, 2817000.0, 2821000.0, + 2825000.0, 2829000.0, 2833000.0, 2843000.0, 2853000.0, 2863000.0, 2873000.0, 2883000.0, 2893000.0, 2903000.0, 2913000.0, 2923000.0, + 2933000.0, 2953000.0, 2973000.0, 2993000.0, 3013000.0, 3033000.0, 3053000.0, 3073000.0, 3093000.0, 3114000.0, 3134000.0, 3154000.0, + 3175000.0, 3195000.0, 3216000.0, 3280000.0, 3382000.0, 3488000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0, + 2704000.0, 2706000.0, 2708000.0, 2710000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, + 2729000.0, 2731000.0, 2735000.0, 2740000.0, 2744000.0, 2748000.0, 2752000.0, 2756000.0, 2760000.0, 2764000.0, 2768000.0, 2772000.0, + 2776000.0, 2780000.0, 2784000.0, 2788000.0, 2793000.0, 2797000.0, 2801000.0, 2805000.0, 2809000.0, 2813000.0, 2817000.0, 2821000.0, + 2825000.0, 2829000.0, 2833000.0, 2843000.0, 2853000.0, 2863000.0, 2873000.0, 2883000.0, 2893000.0, 2903000.0, 2913000.0, 2923000.0, + 2933000.0, 2953000.0, 2973000.0, 2993000.0, 3013000.0, 3033000.0, 3053000.0, 3073000.0, 3093000.0, 3114000.0, 3134000.0, 3154000.0, + 3175000.0, 3195000.0, 3216000.0, 3280000.0, 3382000.0, 3488000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2697000.0, 2699000.0, 2701000.0, + 2703000.0, 2706000.0, 2708000.0, 2710000.0, 2712000.0, 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2725000.0, 2727000.0, + 2729000.0, 2731000.0, 2735000.0, 2739000.0, 2743000.0, 2747000.0, 2751000.0, 2756000.0, 2760000.0, 2764000.0, 2768000.0, 2772000.0, + 2776000.0, 2780000.0, 2784000.0, 2788000.0, 2792000.0, 2796000.0, 2800000.0, 2804000.0, 2808000.0, 2812000.0, 2816000.0, 2820000.0, + 2824000.0, 2828000.0, 2832000.0, 2842000.0, 2852000.0, 2862000.0, 2872000.0, 2882000.0, 2892000.0, 2902000.0, 2912000.0, 2922000.0, + 2932000.0, 2952000.0, 2972000.0, 2992000.0, 3013000.0, 3033000.0, 3053000.0, 3073000.0, 3093000.0, 3113000.0, 3134000.0, 3154000.0, + 3175000.0, 3195000.0, 3216000.0, 3280000.0, 3382000.0, 3488000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2699000.0, 2701000.0, + 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0, + 2728000.0, 2730000.0, 2734000.0, 2739000.0, 2743000.0, 2747000.0, 2751000.0, 2755000.0, 2759000.0, 2763000.0, 2767000.0, 2771000.0, + 2776000.0, 2780000.0, 2784000.0, 2788000.0, 2792000.0, 2796000.0, 2800000.0, 2804000.0, 2808000.0, 2812000.0, 2816000.0, 2820000.0, + 2824000.0, 2828000.0, 2832000.0, 2842000.0, 2852000.0, 2862000.0, 2872000.0, 2882000.0, 2892000.0, 2902000.0, 2912000.0, 2922000.0, + 2932000.0, 2952000.0, 2972000.0, 2992000.0, 3012000.0, 3032000.0, 3053000.0, 3073000.0, 3093000.0, 3113000.0, 3134000.0, 3154000.0, + 3174000.0, 3195000.0, 3216000.0, 3280000.0, 3382000.0, 3488000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2700000.0, + 2702000.0, 2704000.0, 2706000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2726000.0, + 2728000.0, 2730000.0, 2734000.0, 2738000.0, 2742000.0, 2746000.0, 2750000.0, 2755000.0, 2759000.0, 2763000.0, 2767000.0, 2771000.0, + 2775000.0, 2779000.0, 2783000.0, 2787000.0, 2791000.0, 2795000.0, 2800000.0, 2804000.0, 2808000.0, 2812000.0, 2816000.0, 2820000.0, + 2824000.0, 2828000.0, 2832000.0, 2842000.0, 2852000.0, 2862000.0, 2872000.0, 2882000.0, 2892000.0, 2902000.0, 2912000.0, 2922000.0, + 2932000.0, 2952000.0, 2972000.0, 2992000.0, 3012000.0, 3032000.0, 3052000.0, 3073000.0, 3093000.0, 3113000.0, 3134000.0, 3154000.0, + 3174000.0, 3195000.0, 3215000.0, 3280000.0, 3382000.0, 3488000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2710000.0, 2712000.0, 2714000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, + 2727000.0, 2729000.0, 2733000.0, 2738000.0, 2742000.0, 2746000.0, 2750000.0, 2754000.0, 2758000.0, 2762000.0, 2766000.0, 2771000.0, + 2775000.0, 2779000.0, 2783000.0, 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2811000.0, 2815000.0, 2819000.0, + 2823000.0, 2827000.0, 2831000.0, 2842000.0, 2852000.0, 2862000.0, 2872000.0, 2882000.0, 2892000.0, 2902000.0, 2912000.0, 2922000.0, + 2932000.0, 2952000.0, 2972000.0, 2992000.0, 3012000.0, 3032000.0, 3052000.0, 3073000.0, 3093000.0, 3113000.0, 3133000.0, 3154000.0, + 3174000.0, 3195000.0, 3215000.0, 3280000.0, 3382000.0, 3488000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2712000.0, 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, + 2726000.0, 2729000.0, 2733000.0, 2737000.0, 2741000.0, 2745000.0, 2749000.0, 2754000.0, 2758000.0, 2762000.0, 2766000.0, 2770000.0, + 2774000.0, 2778000.0, 2782000.0, 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2811000.0, 2815000.0, 2819000.0, + 2823000.0, 2827000.0, 2831000.0, 2841000.0, 2851000.0, 2861000.0, 2871000.0, 2881000.0, 2891000.0, 2901000.0, 2911000.0, 2922000.0, + 2932000.0, 2952000.0, 2972000.0, 2992000.0, 3012000.0, 3032000.0, 3052000.0, 3072000.0, 3093000.0, 3113000.0, 3133000.0, 3154000.0, + 3174000.0, 3195000.0, 3215000.0, 3280000.0, 3382000.0, 3488000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 2704000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2720000.0, 2722000.0, 2724000.0, + 2726000.0, 2728000.0, 2732000.0, 2736000.0, 2741000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2766000.0, 2770000.0, + 2774000.0, 2778000.0, 2782000.0, 2786000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2811000.0, 2815000.0, 2819000.0, + 2823000.0, 2827000.0, 2831000.0, 2841000.0, 2851000.0, 2861000.0, 2871000.0, 2881000.0, 2891000.0, 2901000.0, 2911000.0, 2921000.0, + 2931000.0, 2951000.0, 2971000.0, 2992000.0, 3012000.0, 3032000.0, 3052000.0, 3072000.0, 3093000.0, 3113000.0, 3133000.0, 3154000.0, + 3174000.0, 3195000.0, 3215000.0, 3280000.0, 3382000.0, 3488000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 2706000.0, 2708000.0, 2710000.0, 2712000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, + 2725000.0, 2727000.0, 2732000.0, 2736000.0, 2740000.0, 2744000.0, 2748000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2769000.0, + 2773000.0, 2777000.0, 2782000.0, 2786000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, + 2822000.0, 2826000.0, 2830000.0, 2841000.0, 2851000.0, 2861000.0, 2871000.0, 2881000.0, 2891000.0, 2901000.0, 2911000.0, 2921000.0, + 2931000.0, 2951000.0, 2971000.0, 2991000.0, 3012000.0, 3032000.0, 3052000.0, 3072000.0, 3092000.0, 3113000.0, 3133000.0, 3153000.0, + 3174000.0, 3194000.0, 3215000.0, 3280000.0, 3382000.0, 3488000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 2707000.0, 2710000.0, 2712000.0, 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, + 2725000.0, 2727000.0, 2731000.0, 2735000.0, 2739000.0, 2744000.0, 2748000.0, 2752000.0, 2756000.0, 2760000.0, 2765000.0, 2769000.0, + 2773000.0, 2777000.0, 2781000.0, 2785000.0, 2789000.0, 2793000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, + 2822000.0, 2826000.0, 2830000.0, 2840000.0, 2850000.0, 2860000.0, 2870000.0, 2881000.0, 2891000.0, 2901000.0, 2911000.0, 2921000.0, + 2931000.0, 2951000.0, 2971000.0, 2991000.0, 3011000.0, 3031000.0, 3052000.0, 3072000.0, 3092000.0, 3113000.0, 3133000.0, 3153000.0, + 3174000.0, 3194000.0, 3215000.0, 3280000.0, 3382000.0, 3488000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2718000.0, 2720000.0, 2722000.0, + 2724000.0, 2726000.0, 2730000.0, 2735000.0, 2739000.0, 2743000.0, 2747000.0, 2752000.0, 2756000.0, 2760000.0, 2764000.0, 2768000.0, + 2772000.0, 2776000.0, 2781000.0, 2785000.0, 2789000.0, 2793000.0, 2797000.0, 2801000.0, 2805000.0, 2809000.0, 2813000.0, 2818000.0, + 2822000.0, 2826000.0, 2830000.0, 2840000.0, 2850000.0, 2860000.0, 2870000.0, 2880000.0, 2890000.0, 2900000.0, 2910000.0, 2921000.0, + 2931000.0, 2951000.0, 2971000.0, 2991000.0, 3011000.0, 3031000.0, 3052000.0, 3072000.0, 3092000.0, 3112000.0, 3133000.0, 3153000.0, + 3174000.0, 3194000.0, 3215000.0, 3280000.0, 3381000.0, 3488000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2710000.0, 2712000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, + 2723000.0, 2725000.0, 2730000.0, 2734000.0, 2738000.0, 2743000.0, 2747000.0, 2751000.0, 2755000.0, 2759000.0, 2764000.0, 2768000.0, + 2772000.0, 2776000.0, 2780000.0, 2784000.0, 2788000.0, 2793000.0, 2797000.0, 2801000.0, 2805000.0, 2809000.0, 2813000.0, 2817000.0, + 2821000.0, 2825000.0, 2829000.0, 2839000.0, 2850000.0, 2860000.0, 2870000.0, 2880000.0, 2890000.0, 2900000.0, 2910000.0, 2920000.0, + 2930000.0, 2950000.0, 2971000.0, 2991000.0, 3011000.0, 3031000.0, 3051000.0, 3072000.0, 3092000.0, 3112000.0, 3133000.0, 3153000.0, + 3174000.0, 3194000.0, 3215000.0, 3280000.0, 3381000.0, 3487000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2712000.0, 2714000.0, 2716000.0, 2718000.0, 2720000.0, + 2723000.0, 2725000.0, 2729000.0, 2733000.0, 2738000.0, 2742000.0, 2746000.0, 2750000.0, 2755000.0, 2759000.0, 2763000.0, 2767000.0, + 2771000.0, 2775000.0, 2780000.0, 2784000.0, 2788000.0, 2792000.0, 2796000.0, 2800000.0, 2804000.0, 2808000.0, 2813000.0, 2817000.0, + 2821000.0, 2825000.0, 2829000.0, 2839000.0, 2849000.0, 2859000.0, 2870000.0, 2880000.0, 2890000.0, 2900000.0, 2910000.0, 2920000.0, + 2930000.0, 2950000.0, 2970000.0, 2991000.0, 3011000.0, 3031000.0, 3051000.0, 3071000.0, 3092000.0, 3112000.0, 3132000.0, 3153000.0, + 3173000.0, 3194000.0, 3215000.0, 3280000.0, 3381000.0, 3487000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2713000.0, 2715000.0, 2717000.0, 2720000.0, + 2722000.0, 2724000.0, 2728000.0, 2733000.0, 2737000.0, 2741000.0, 2746000.0, 2750000.0, 2754000.0, 2758000.0, 2762000.0, 2767000.0, + 2771000.0, 2775000.0, 2779000.0, 2783000.0, 2787000.0, 2792000.0, 2796000.0, 2800000.0, 2804000.0, 2808000.0, 2812000.0, 2816000.0, + 2820000.0, 2824000.0, 2829000.0, 2839000.0, 2849000.0, 2859000.0, 2869000.0, 2879000.0, 2889000.0, 2900000.0, 2910000.0, 2920000.0, + 2930000.0, 2950000.0, 2970000.0, 2990000.0, 3011000.0, 3031000.0, 3051000.0, 3071000.0, 3092000.0, 3112000.0, 3132000.0, 3153000.0, + 3173000.0, 3194000.0, 3214000.0, 3280000.0, 3381000.0, 3487000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2715000.0, 2717000.0, 2719000.0, + 2721000.0, 2723000.0, 2728000.0, 2732000.0, 2736000.0, 2741000.0, 2745000.0, 2749000.0, 2753000.0, 2758000.0, 2762000.0, 2766000.0, + 2770000.0, 2774000.0, 2779000.0, 2783000.0, 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2808000.0, 2812000.0, 2816000.0, + 2820000.0, 2824000.0, 2828000.0, 2838000.0, 2849000.0, 2859000.0, 2869000.0, 2879000.0, 2889000.0, 2899000.0, 2909000.0, 2919000.0, + 2930000.0, 2950000.0, 2970000.0, 2990000.0, 3010000.0, 3031000.0, 3051000.0, 3071000.0, 3091000.0, 3112000.0, 3132000.0, 3153000.0, + 3173000.0, 3194000.0, 3214000.0, 3280000.0, 3381000.0, 3487000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2716000.0, 2718000.0, + 2720000.0, 2723000.0, 2727000.0, 2731000.0, 2736000.0, 2740000.0, 2744000.0, 2748000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, + 2770000.0, 2774000.0, 2778000.0, 2782000.0, 2786000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2811000.0, 2815000.0, + 2819000.0, 2824000.0, 2828000.0, 2838000.0, 2848000.0, 2858000.0, 2868000.0, 2879000.0, 2889000.0, 2899000.0, 2909000.0, 2919000.0, + 2929000.0, 2949000.0, 2970000.0, 2990000.0, 3010000.0, 3030000.0, 3051000.0, 3071000.0, 3091000.0, 3112000.0, 3132000.0, 3152000.0, + 3173000.0, 3194000.0, 3214000.0, 3280000.0, 3381000.0, 3487000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2717000.0, + 2720000.0, 2722000.0, 2726000.0, 2731000.0, 2735000.0, 2739000.0, 2744000.0, 2748000.0, 2752000.0, 2756000.0, 2761000.0, 2765000.0, + 2769000.0, 2773000.0, 2777000.0, 2782000.0, 2786000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2807000.0, 2811000.0, 2815000.0, + 2819000.0, 2823000.0, 2827000.0, 2837000.0, 2848000.0, 2858000.0, 2868000.0, 2878000.0, 2888000.0, 2899000.0, 2909000.0, 2919000.0, + 2929000.0, 2949000.0, 2969000.0, 2990000.0, 3010000.0, 3030000.0, 3050000.0, 3071000.0, 3091000.0, 3111000.0, 3132000.0, 3152000.0, + 3173000.0, 3193000.0, 3214000.0, 3280000.0, 3381000.0, 3487000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 2719000.0, 2721000.0, 2725000.0, 2730000.0, 2734000.0, 2738000.0, 2743000.0, 2747000.0, 2751000.0, 2756000.0, 2760000.0, 2764000.0, + 2768000.0, 2773000.0, 2777000.0, 2781000.0, 2785000.0, 2789000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0, + 2819000.0, 2823000.0, 2827000.0, 2837000.0, 2847000.0, 2858000.0, 2868000.0, 2878000.0, 2888000.0, 2898000.0, 2908000.0, 2919000.0, + 2929000.0, 2949000.0, 2969000.0, 2989000.0, 3010000.0, 3030000.0, 3050000.0, 3071000.0, 3091000.0, 3111000.0, 3132000.0, 3152000.0, + 3173000.0, 3193000.0, 3214000.0, 3280000.0, 3381000.0, 3487000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 2720000.0, 2725000.0, 2729000.0, 2733000.0, 2738000.0, 2742000.0, 2746000.0, 2751000.0, 2755000.0, 2759000.0, 2764000.0, + 2768000.0, 2772000.0, 2776000.0, 2781000.0, 2785000.0, 2789000.0, 2793000.0, 2797000.0, 2801000.0, 2806000.0, 2810000.0, 2814000.0, + 2818000.0, 2822000.0, 2826000.0, 2837000.0, 2847000.0, 2857000.0, 2867000.0, 2878000.0, 2888000.0, 2898000.0, 2908000.0, 2918000.0, + 2928000.0, 2949000.0, 2969000.0, 2989000.0, 3009000.0, 3030000.0, 3050000.0, 3070000.0, 3091000.0, 3111000.0, 3132000.0, 3152000.0, + 3173000.0, 3193000.0, 3214000.0, 3280000.0, 3381000.0, 3487000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 2723000.0, 2727000.0, 2732000.0, 2736000.0, 2741000.0, 2745000.0, 2749000.0, 2754000.0, 2758000.0, 2762000.0, + 2767000.0, 2771000.0, 2775000.0, 2779000.0, 2784000.0, 2788000.0, 2792000.0, 2796000.0, 2800000.0, 2805000.0, 2809000.0, 2813000.0, + 2817000.0, 2821000.0, 2825000.0, 2836000.0, 2846000.0, 2856000.0, 2867000.0, 2877000.0, 2887000.0, 2897000.0, 2907000.0, 2918000.0, + 2928000.0, 2948000.0, 2968000.0, 2989000.0, 3009000.0, 3029000.0, 3050000.0, 3070000.0, 3090000.0, 3111000.0, 3131000.0, 3152000.0, + 3172000.0, 3193000.0, 3213000.0, 3280000.0, 3380000.0, 3487000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 2726000.0, 2730000.0, 2735000.0, 2739000.0, 2743000.0, 2748000.0, 2752000.0, 2757000.0, 2761000.0, + 2765000.0, 2769000.0, 2774000.0, 2778000.0, 2782000.0, 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2808000.0, 2812000.0, + 2816000.0, 2820000.0, 2824000.0, 2835000.0, 2845000.0, 2855000.0, 2866000.0, 2876000.0, 2886000.0, 2896000.0, 2907000.0, 2917000.0, + 2927000.0, 2947000.0, 2968000.0, 2988000.0, 3008000.0, 3029000.0, 3049000.0, 3069000.0, 3090000.0, 3110000.0, 3131000.0, 3151000.0, + 3172000.0, 3192000.0, 3213000.0, 3280000.0, 3380000.0, 3487000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 2728000.0, 2733000.0, 2737000.0, 2742000.0, 2746000.0, 2751000.0, 2755000.0, 2759000.0, + 2764000.0, 2768000.0, 2772000.0, 2777000.0, 2781000.0, 2785000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2811000.0, + 2815000.0, 2819000.0, 2823000.0, 2834000.0, 2844000.0, 2854000.0, 2865000.0, 2875000.0, 2885000.0, 2896000.0, 2906000.0, 2916000.0, + 2926000.0, 2947000.0, 2967000.0, 2987000.0, 3008000.0, 3028000.0, 3049000.0, 3069000.0, 3089000.0, 3110000.0, 3130000.0, 3151000.0, + 3172000.0, 3192000.0, 3213000.0, 3280000.0, 3380000.0, 3486000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 2731000.0, 2735000.0, 2740000.0, 2744000.0, 2749000.0, 2753000.0, 2758000.0, + 2762000.0, 2767000.0, 2771000.0, 2775000.0, 2780000.0, 2784000.0, 2788000.0, 2792000.0, 2797000.0, 2801000.0, 2805000.0, 2809000.0, + 2814000.0, 2818000.0, 2822000.0, 2833000.0, 2843000.0, 2853000.0, 2864000.0, 2874000.0, 2885000.0, 2895000.0, 2905000.0, 2915000.0, + 2926000.0, 2946000.0, 2966000.0, 2987000.0, 3007000.0, 3028000.0, 3048000.0, 3069000.0, 3089000.0, 3109000.0, 3130000.0, 3151000.0, + 3171000.0, 3192000.0, 3212000.0, 3280000.0, 3380000.0, 3486000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2733000.0, 2738000.0, 2743000.0, 2747000.0, 2752000.0, 2756000.0, + 2761000.0, 2765000.0, 2769000.0, 2774000.0, 2778000.0, 2782000.0, 2787000.0, 2791000.0, 2795000.0, 2800000.0, 2804000.0, 2808000.0, + 2812000.0, 2817000.0, 2821000.0, 2831000.0, 2842000.0, 2852000.0, 2863000.0, 2873000.0, 2884000.0, 2894000.0, 2904000.0, 2915000.0, + 2925000.0, 2945000.0, 2966000.0, 2986000.0, 3007000.0, 3027000.0, 3048000.0, 3068000.0, 3089000.0, 3109000.0, 3130000.0, 3150000.0, + 3171000.0, 3191000.0, 3212000.0, 3280000.0, 3380000.0, 3486000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2736000.0, 2741000.0, 2745000.0, 2750000.0, 2754000.0, + 2759000.0, 2763000.0, 2768000.0, 2772000.0, 2777000.0, 2781000.0, 2785000.0, 2790000.0, 2794000.0, 2798000.0, 2803000.0, 2807000.0, + 2811000.0, 2815000.0, 2820000.0, 2830000.0, 2841000.0, 2851000.0, 2862000.0, 2872000.0, 2883000.0, 2893000.0, 2903000.0, 2914000.0, + 2924000.0, 2945000.0, 2965000.0, 2986000.0, 3006000.0, 3027000.0, 3047000.0, 3068000.0, 3088000.0, 3109000.0, 3129000.0, 3150000.0, + 3170000.0, 3191000.0, 3212000.0, 3280000.0, 3379000.0, 3486000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2739000.0, 2743000.0, 2748000.0, 2752000.0, + 2757000.0, 2761000.0, 2766000.0, 2770000.0, 2775000.0, 2779000.0, 2784000.0, 2788000.0, 2792000.0, 2797000.0, 2801000.0, 2805000.0, + 2810000.0, 2814000.0, 2818000.0, 2829000.0, 2840000.0, 2850000.0, 2861000.0, 2871000.0, 2882000.0, 2892000.0, 2902000.0, 2913000.0, + 2923000.0, 2944000.0, 2964000.0, 2985000.0, 3005000.0, 3026000.0, 3046000.0, 3067000.0, 3088000.0, 3108000.0, 3129000.0, 3149000.0, + 3170000.0, 3191000.0, 3211000.0, 3280000.0, 3379000.0, 3485000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2741000.0, 2746000.0, 2750000.0, + 2755000.0, 2760000.0, 2764000.0, 2769000.0, 2773000.0, 2778000.0, 2782000.0, 2786000.0, 2791000.0, 2795000.0, 2800000.0, 2804000.0, + 2808000.0, 2813000.0, 2817000.0, 2828000.0, 2838000.0, 2849000.0, 2860000.0, 2870000.0, 2881000.0, 2891000.0, 2901000.0, 2912000.0, + 2922000.0, 2943000.0, 2964000.0, 2984000.0, 3005000.0, 3025000.0, 3046000.0, 3066000.0, 3087000.0, 3108000.0, 3128000.0, 3149000.0, + 3170000.0, 3190000.0, 3211000.0, 3280000.0, 3379000.0, 3485000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2744000.0, 2748000.0, + 2753000.0, 2758000.0, 2762000.0, 2767000.0, 2771000.0, 2776000.0, 2780000.0, 2785000.0, 2789000.0, 2794000.0, 2798000.0, 2802000.0, + 2807000.0, 2811000.0, 2815000.0, 2826000.0, 2837000.0, 2848000.0, 2858000.0, 2869000.0, 2879000.0, 2890000.0, 2900000.0, 2911000.0, + 2921000.0, 2942000.0, 2963000.0, 2983000.0, 3004000.0, 3025000.0, 3045000.0, 3066000.0, 3086000.0, 3107000.0, 3128000.0, 3148000.0, + 3169000.0, 3190000.0, 3211000.0, 3280000.0, 3378000.0, 3485000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2746000.0, + 2751000.0, 2755000.0, 2760000.0, 2765000.0, 2769000.0, 2774000.0, 2778000.0, 2783000.0, 2787000.0, 2792000.0, 2796000.0, 2801000.0, + 2805000.0, 2810000.0, 2814000.0, 2825000.0, 2836000.0, 2846000.0, 2857000.0, 2868000.0, 2878000.0, 2889000.0, 2899000.0, 2910000.0, + 2920000.0, 2941000.0, 2962000.0, 2983000.0, 3003000.0, 3024000.0, 3045000.0, 3065000.0, 3086000.0, 3106000.0, 3127000.0, 3148000.0, + 3169000.0, 3189000.0, 3210000.0, 3280000.0, 3378000.0, 3485000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 2748000.0, 2753000.0, 2758000.0, 2763000.0, 2767000.0, 2772000.0, 2776000.0, 2781000.0, 2786000.0, 2790000.0, 2795000.0, 2799000.0, + 2803000.0, 2808000.0, 2812000.0, 2823000.0, 2834000.0, 2845000.0, 2856000.0, 2866000.0, 2877000.0, 2888000.0, 2898000.0, 2909000.0, + 2919000.0, 2940000.0, 2961000.0, 2982000.0, 3002000.0, 3023000.0, 3044000.0, 3064000.0, 3085000.0, 3106000.0, 3127000.0, 3147000.0, + 3168000.0, 3189000.0, 3210000.0, 3280000.0, 3378000.0, 3484000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 2751000.0, 2755000.0, 2760000.0, 2765000.0, 2770000.0, 2774000.0, 2779000.0, 2784000.0, 2788000.0, 2793000.0, 2797000.0, + 2802000.0, 2806000.0, 2811000.0, 2822000.0, 2833000.0, 2843000.0, 2854000.0, 2865000.0, 2876000.0, 2886000.0, 2897000.0, 2908000.0, + 2918000.0, 2939000.0, 2960000.0, 2981000.0, 3002000.0, 3022000.0, 3043000.0, 3064000.0, 3085000.0, 3105000.0, 3126000.0, 3147000.0, + 3168000.0, 3188000.0, 3209000.0, 3280000.0, 3377000.0, 3484000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 2753000.0, 2758000.0, 2763000.0, 2767000.0, 2772000.0, 2777000.0, 2781000.0, 2786000.0, 2791000.0, 2795000.0, + 2800000.0, 2804000.0, 2809000.0, 2820000.0, 2831000.0, 2842000.0, 2853000.0, 2864000.0, 2874000.0, 2885000.0, 2896000.0, 2906000.0, + 2917000.0, 2938000.0, 2959000.0, 2980000.0, 3001000.0, 3022000.0, 3042000.0, 3063000.0, 3084000.0, 3105000.0, 3125000.0, 3146000.0, + 3167000.0, 3188000.0, 3209000.0, 3280000.0, 3377000.0, 3484000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 2755000.0, 2760000.0, 2765000.0, 2770000.0, 2775000.0, 2779000.0, 2784000.0, 2789000.0, 2793000.0, + 2798000.0, 2802000.0, 2807000.0, 2818000.0, 2829000.0, 2840000.0, 2851000.0, 2862000.0, 2873000.0, 2884000.0, 2894000.0, 2905000.0, + 2916000.0, 2937000.0, 2958000.0, 2979000.0, 3000000.0, 3021000.0, 3042000.0, 3062000.0, 3083000.0, 3104000.0, 3125000.0, 3146000.0, + 3166000.0, 3187000.0, 3208000.0, 3280000.0, 3377000.0, 3484000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 2757000.0, 2762000.0, 2767000.0, 2772000.0, 2777000.0, 2782000.0, 2786000.0, 2791000.0, + 2796000.0, 2800000.0, 2805000.0, 2816000.0, 2827000.0, 2839000.0, 2850000.0, 2861000.0, 2872000.0, 2882000.0, 2893000.0, 2904000.0, + 2915000.0, 2936000.0, 2957000.0, 2978000.0, 2999000.0, 3020000.0, 3041000.0, 3062000.0, 3082000.0, 3103000.0, 3124000.0, 3145000.0, + 3166000.0, 3187000.0, 3208000.0, 3280000.0, 3376000.0, 3483000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 2760000.0, 2765000.0, 2770000.0, 2774000.0, 2779000.0, 2784000.0, 2789000.0, + 2793000.0, 2798000.0, 2803000.0, 2814000.0, 2826000.0, 2837000.0, 2848000.0, 2859000.0, 2870000.0, 2881000.0, 2892000.0, 2902000.0, + 2913000.0, 2935000.0, 2956000.0, 2977000.0, 2998000.0, 3019000.0, 3040000.0, 3061000.0, 3082000.0, 3102000.0, 3123000.0, 3144000.0, + 3165000.0, 3186000.0, 3207000.0, 3280000.0, 3376000.0, 3483000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2762000.0, 2767000.0, 2772000.0, 2777000.0, 2781000.0, 2786000.0, + 2791000.0, 2796000.0, 2800000.0, 2812000.0, 2824000.0, 2835000.0, 2846000.0, 2857000.0, 2868000.0, 2879000.0, 2890000.0, 2901000.0, + 2912000.0, 2933000.0, 2955000.0, 2976000.0, 2997000.0, 3018000.0, 3039000.0, 3060000.0, 3081000.0, 3102000.0, 3123000.0, 3144000.0, + 3164000.0, 3185000.0, 3206000.0, 3280000.0, 3375000.0, 3483000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2764000.0, 2769000.0, 2774000.0, 2779000.0, 2784000.0, + 2789000.0, 2793000.0, 2798000.0, 2810000.0, 2821000.0, 2833000.0, 2844000.0, 2855000.0, 2867000.0, 2878000.0, 2889000.0, 2900000.0, + 2910000.0, 2932000.0, 2953000.0, 2975000.0, 2996000.0, 3017000.0, 3038000.0, 3059000.0, 3080000.0, 3101000.0, 3122000.0, 3143000.0, + 3164000.0, 3185000.0, 3206000.0, 3280000.0, 3375000.0, 3482000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2766000.0, 2771000.0, 2776000.0, 2781000.0, + 2786000.0, 2791000.0, 2796000.0, 2808000.0, 2819000.0, 2831000.0, 2842000.0, 2854000.0, 2865000.0, 2876000.0, 2887000.0, 2898000.0, + 2909000.0, 2931000.0, 2952000.0, 2973000.0, 2995000.0, 3016000.0, 3037000.0, 3058000.0, 3079000.0, 3100000.0, 3121000.0, 3142000.0, + 3163000.0, 3184000.0, 3205000.0, 3280000.0, 3374000.0, 3482000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2768000.0, 2773000.0, 2778000.0, + 2783000.0, 2788000.0, 2793000.0, 2805000.0, 2817000.0, 2829000.0, 2840000.0, 2852000.0, 2863000.0, 2874000.0, 2885000.0, 2896000.0, + 2907000.0, 2929000.0, 2951000.0, 2972000.0, 2994000.0, 3015000.0, 3036000.0, 3057000.0, 3078000.0, 3099000.0, 3120000.0, 3141000.0, + 3162000.0, 3183000.0, 3204000.0, 3280000.0, 3374000.0, 3481000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2770000.0, 2775000.0, + 2780000.0, 2785000.0, 2790000.0, 2802000.0, 2814000.0, 2826000.0, 2838000.0, 2850000.0, 2861000.0, 2872000.0, 2883000.0, 2895000.0, + 2906000.0, 2928000.0, 2949000.0, 2971000.0, 2992000.0, 3014000.0, 3035000.0, 3056000.0, 3077000.0, 3098000.0, 3119000.0, 3140000.0, + 3162000.0, 3183000.0, 3204000.0, 3280000.0, 3373000.0, 3481000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2772000.0, + 2777000.0, 2782000.0, 2787000.0, 2800000.0, 2812000.0, 2824000.0, 2836000.0, 2847000.0, 2859000.0, 2870000.0, 2882000.0, 2893000.0, + 2904000.0, 2926000.0, 2948000.0, 2969000.0, 2991000.0, 3012000.0, 3034000.0, 3055000.0, 3076000.0, 3097000.0, 3118000.0, 3140000.0, + 3161000.0, 3182000.0, 3203000.0, 3280000.0, 3373000.0, 3480000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 2774000.0, 2779000.0, 2784000.0, 2797000.0, 2809000.0, 2821000.0, 2833000.0, 2845000.0, 2857000.0, 2868000.0, 2880000.0, 2891000.0, + 2902000.0, 2924000.0, 2946000.0, 2968000.0, 2990000.0, 3011000.0, 3033000.0, 3054000.0, 3075000.0, 3096000.0, 3118000.0, 3139000.0, + 3160000.0, 3181000.0, 3202000.0, 3280000.0, 3372000.0, 3480000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 2775000.0, 2781000.0, 2794000.0, 2806000.0, 2819000.0, 2831000.0, 2843000.0, 2854000.0, 2866000.0, 2878000.0, 2889000.0, + 2900000.0, 2923000.0, 2945000.0, 2967000.0, 2988000.0, 3010000.0, 3031000.0, 3053000.0, 3074000.0, 3095000.0, 3117000.0, 3138000.0, + 3159000.0, 3180000.0, 3201000.0, 3280000.0, 3372000.0, 3480000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 2777000.0, 2790000.0, 2803000.0, 2816000.0, 2828000.0, 2840000.0, 2852000.0, 2864000.0, 2875000.0, 2887000.0, + 2898000.0, 2921000.0, 2943000.0, 2965000.0, 2987000.0, 3009000.0, 3030000.0, 3052000.0, 3073000.0, 3094000.0, 3116000.0, 3137000.0, + 3158000.0, 3179000.0, 3201000.0, 3280000.0, 3371000.0, 3479000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 2781000.0, 2795000.0, 2808000.0, 2821000.0, 2833000.0, 2846000.0, 2858000.0, 2870000.0, 2881000.0, + 2893000.0, 2916000.0, 2939000.0, 2961000.0, 2983000.0, 3005000.0, 3027000.0, 3048000.0, 3070000.0, 3091000.0, 3113000.0, 3134000.0, + 3156000.0, 3177000.0, 3198000.0, 3280000.0, 3370000.0, 3478000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 2785000.0, 2799000.0, 2813000.0, 2826000.0, 2838000.0, 2851000.0, 2863000.0, 2875000.0, + 2887000.0, 2910000.0, 2933000.0, 2956000.0, 2979000.0, 3001000.0, 3023000.0, 3045000.0, 3067000.0, 3088000.0, 3110000.0, 3132000.0, + 3153000.0, 3175000.0, 3196000.0, 3280000.0, 3368000.0, 3476000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 2789000.0, 2803000.0, 2817000.0, 2830000.0, 2843000.0, 2856000.0, 2868000.0, + 2880000.0, 2904000.0, 2928000.0, 2951000.0, 2974000.0, 2996000.0, 3019000.0, 3041000.0, 3063000.0, 3085000.0, 3107000.0, 3128000.0, + 3150000.0, 3172000.0, 3193000.0, 3280000.0, 3366000.0, 3475000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2792000.0, 2807000.0, 2821000.0, 2834000.0, 2847000.0, 2860000.0, + 2873000.0, 2898000.0, 2922000.0, 2945000.0, 2969000.0, 2992000.0, 3014000.0, 3037000.0, 3059000.0, 3081000.0, 3103000.0, 3125000.0, + 3147000.0, 3169000.0, 3190000.0, 3280000.0, 3364000.0, 3473000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2795000.0, 2810000.0, 2824000.0, 2838000.0, 2851000.0, + 2864000.0, 2890000.0, 2915000.0, 2939000.0, 2963000.0, 2986000.0, 3009000.0, 3032000.0, 3055000.0, 3077000.0, 3099000.0, 3121000.0, + 3143000.0, 3165000.0, 3187000.0, 3280000.0, 3362000.0, 3471000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2797000.0, 2813000.0, 2827000.0, 2841000.0, + 2855000.0, 2882000.0, 2907000.0, 2932000.0, 2956000.0, 2980000.0, 3004000.0, 3027000.0, 3050000.0, 3072000.0, 3095000.0, 3117000.0, + 3140000.0, 3162000.0, 3184000.0, 3280000.0, 3359000.0, 3469000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2799000.0, 2815000.0, 2830000.0, + 2844000.0, 2872000.0, 2899000.0, 2924000.0, 2949000.0, 2974000.0, 2998000.0, 3021000.0, 3044000.0, 3067000.0, 3090000.0, 3113000.0, + 3135000.0, 3158000.0, 3180000.0, 3280000.0, 3357000.0, 3467000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2801000.0, 2817000.0, + 2832000.0, 2862000.0, 2889000.0, 2916000.0, 2941000.0, 2966000.0, 2991000.0, 3015000.0, 3039000.0, 3062000.0, 3085000.0, 3108000.0, + 3131000.0, 3154000.0, 3176000.0, 3280000.0, 3354000.0, 3465000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2802000.0, + 2819000.0, 2850000.0, 2879000.0, 2906000.0, 2933000.0, 2958000.0, 2984000.0, 3008000.0, 3032000.0, 3056000.0, 3080000.0, 3103000.0, + 3126000.0, 3149000.0, 3172000.0, 3280000.0, 3351000.0, 3462000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 2803000.0, 2836000.0, 2867000.0, 2895000.0, 2923000.0, 2950000.0, 2975000.0, 3001000.0, 3025000.0, 3050000.0, 3073000.0, 3097000.0, + 3121000.0, 3144000.0, 3167000.0, 3280000.0, 3348000.0, 3459000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 2803000.0, 2838000.0, 2870000.0, 2900000.0, 2929000.0, 2957000.0, 2983000.0, 3009000.0, 3035000.0, 3060000.0, 3084000.0, + 3108000.0, 3132000.0, 3156000.0, 3280000.0, 3340000.0, 3453000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 2801000.0, 2838000.0, 2872000.0, 2904000.0, 2934000.0, 2963000.0, 2990000.0, 3017000.0, 3043000.0, 3069000.0, + 3094000.0, 3119000.0, 3143000.0, 3280000.0, 3332000.0, 3446000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 2797000.0, 2837000.0, 2873000.0, 2906000.0, 2937000.0, 2967000.0, 2996000.0, 3023000.0, 3050000.0, + 3077000.0, 3103000.0, 3128000.0, 3280000.0, 3322000.0, 3438000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 2790000.0, 2833000.0, 2871000.0, 2906000.0, 2939000.0, 2970000.0, 3000000.0, 3029000.0, + 3057000.0, 3084000.0, 3110000.0, 3280000.0, 3310000.0, 3429000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 2780000.0, 2826000.0, 2867000.0, 2905000.0, 2939000.0, 2972000.0, 3003000.0, + 3033000.0, 3062000.0, 3090000.0, 3280000.0, 3297000.0, 3418000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2767000.0, 2817000.0, + 2861000.0, 2901000.0, 2938000.0, 2972000.0, 3004000.0, 3036000.0, 3066000.0, 3280000.0, 3282000.0, 3406000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2750000.0, + 2806000.0, 2853000.0, 2895000.0, 2934000.0, 2970000.0, 3004000.0, 3037000.0, 3280000.0, 3264000.0, 3392000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2728000.0, + 2790000.0, 2842000.0, 2887000.0, 2929000.0, 2967000.0, 3003000.0, 3280000.0, 3244000.0, 3377000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 2701000.0, 2771000.0, 2828000.0, 2877000.0, 2921000.0, 2961000.0, 3280000.0, 3222000.0, 3359000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 2666000.0, 2747000.0, 2810000.0, 2864000.0, 2911000.0, 3280000.0, 3195000.0, 3339000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2622000.0, 2718000.0, 2789000.0, 2847000.0, 3280000.0, 3165000.0, 3316000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2564000.0, 2683000.0, 2763000.0, 3280000.0, 3130000.0, 3290000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2481000.0, 2641000.0, 3280000.0, 3089000.0, 3260000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2335000.0, 3280000.0, 3040000.0, 3226000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3280000.0, 2821000.0, 3085000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3280000.0, 2671000.0, 2998000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3280000.0, 2512000.0, 2906000.0}} + }; + + static constexpr std::array, DefaultNumSteamSuperheatedPressure> + DefaultSteamSuperheatedDensityDataTable = { + {{4.855e-03, 4.837e-03, 4.767e-03, 4.683e-03, 4.601e-03, 4.522e-03, 4.446e-03, 4.373e-03, 4.302e-03, 4.233e-03, 4.167e-03, 4.102e-03, + 4.039e-03, 3.979e-03, 3.920e-03, 3.863e-03, 3.840e-03, 3.818e-03, 3.796e-03, 3.775e-03, 3.753e-03, 3.732e-03, 3.711e-03, 3.691e-03, + 3.670e-03, 3.650e-03, 3.630e-03, 3.610e-03, 3.591e-03, 3.571e-03, 3.562e-03, 3.552e-03, 3.543e-03, 3.533e-03, 3.524e-03, 3.514e-03, + 3.505e-03, 3.496e-03, 3.487e-03, 3.477e-03, 3.468e-03, 3.459e-03, 3.450e-03, 3.441e-03, 3.432e-03, 3.424e-03, 3.415e-03, 3.406e-03, + 3.397e-03, 3.388e-03, 3.380e-03, 3.371e-03, 3.363e-03, 3.354e-03, 3.346e-03, 3.337e-03, 3.329e-03, 3.321e-03, 3.312e-03, 3.304e-03, + 3.296e-03, 3.288e-03, 3.271e-03, 3.255e-03, 3.239e-03, 3.224e-03, 3.208e-03, 3.193e-03, 3.177e-03, 3.162e-03, 3.147e-03, 3.132e-03, + 3.117e-03, 3.103e-03, 3.088e-03, 3.074e-03, 3.060e-03, 3.046e-03, 3.032e-03, 3.018e-03, 3.004e-03, 2.991e-03, 2.977e-03, 2.964e-03, + 2.951e-03, 2.938e-03, 2.925e-03, 2.893e-03, 2.862e-03, 2.831e-03, 2.801e-03, 2.772e-03, 2.743e-03, 2.715e-03, 2.688e-03, 2.661e-03, + 2.634e-03, 2.583e-03, 2.533e-03, 2.486e-03, 2.440e-03, 2.396e-03, 2.353e-03, 2.312e-03, 2.273e-03, 2.234e-03, 2.197e-03, 2.162e-03, + 2.127e-03, 2.093e-03, 2.061e-03, 3.542e-05, 1.833e-03, 1.714e-03}, + {0.0, 5.196e-03, 5.121e-03, 5.031e-03, 4.943e-03, 4.859e-03, 4.777e-03, 4.698e-03, 4.622e-03, 4.548e-03, 4.476e-03, 4.407e-03, + 4.340e-03, 4.274e-03, 4.211e-03, 4.150e-03, 4.126e-03, 4.102e-03, 4.078e-03, 4.055e-03, 4.032e-03, 4.009e-03, 3.987e-03, 3.965e-03, + 3.943e-03, 3.921e-03, 3.899e-03, 3.878e-03, 3.857e-03, 3.836e-03, 3.826e-03, 3.816e-03, 3.806e-03, 3.795e-03, 3.785e-03, 3.775e-03, + 3.765e-03, 3.755e-03, 3.746e-03, 3.736e-03, 3.726e-03, 3.716e-03, 3.707e-03, 3.697e-03, 3.687e-03, 3.678e-03, 3.668e-03, 3.659e-03, + 3.650e-03, 3.640e-03, 3.631e-03, 3.622e-03, 3.612e-03, 3.603e-03, 3.594e-03, 3.585e-03, 3.576e-03, 3.567e-03, 3.558e-03, 3.549e-03, + 3.541e-03, 3.532e-03, 3.514e-03, 3.497e-03, 3.480e-03, 3.463e-03, 3.446e-03, 3.430e-03, 3.413e-03, 3.397e-03, 3.381e-03, 3.365e-03, + 3.349e-03, 3.333e-03, 3.318e-03, 3.302e-03, 3.287e-03, 3.272e-03, 3.257e-03, 3.242e-03, 3.228e-03, 3.213e-03, 3.198e-03, 3.184e-03, + 3.170e-03, 3.156e-03, 3.142e-03, 3.108e-03, 3.074e-03, 3.041e-03, 3.009e-03, 2.978e-03, 2.947e-03, 2.917e-03, 2.887e-03, 2.858e-03, + 2.830e-03, 2.775e-03, 2.722e-03, 2.671e-03, 2.621e-03, 2.574e-03, 2.528e-03, 2.484e-03, 2.442e-03, 2.400e-03, 2.361e-03, 2.322e-03, + 2.285e-03, 2.249e-03, 2.214e-03, 3.542e-05, 1.969e-03, 1.841e-03}, + {0.0, 0.0, 6.802e-03, 6.681e-03, 6.565e-03, 6.453e-03, 6.344e-03, 6.239e-03, 6.138e-03, 6.040e-03, 5.944e-03, 5.852e-03, + 5.763e-03, 5.676e-03, 5.592e-03, 5.511e-03, 5.479e-03, 5.447e-03, 5.416e-03, 5.385e-03, 5.355e-03, 5.324e-03, 5.295e-03, 5.265e-03, + 5.236e-03, 5.207e-03, 5.178e-03, 5.150e-03, 5.122e-03, 5.095e-03, 5.081e-03, 5.067e-03, 5.054e-03, 5.040e-03, 5.027e-03, 5.014e-03, + 5.000e-03, 4.987e-03, 4.974e-03, 4.961e-03, 4.948e-03, 4.935e-03, 4.922e-03, 4.909e-03, 4.897e-03, 4.884e-03, 4.871e-03, 4.859e-03, + 4.846e-03, 4.834e-03, 4.822e-03, 4.809e-03, 4.797e-03, 4.785e-03, 4.773e-03, 4.761e-03, 4.749e-03, 4.737e-03, 4.725e-03, 4.714e-03, + 4.702e-03, 4.690e-03, 4.667e-03, 4.644e-03, 4.621e-03, 4.599e-03, 4.577e-03, 4.555e-03, 4.533e-03, 4.511e-03, 4.490e-03, 4.468e-03, + 4.447e-03, 4.427e-03, 4.406e-03, 4.385e-03, 4.365e-03, 4.345e-03, 4.325e-03, 4.306e-03, 4.286e-03, 4.267e-03, 4.247e-03, 4.228e-03, + 4.210e-03, 4.191e-03, 4.172e-03, 4.127e-03, 4.082e-03, 4.039e-03, 3.996e-03, 3.954e-03, 3.913e-03, 3.873e-03, 3.834e-03, 3.796e-03, + 3.758e-03, 3.685e-03, 3.614e-03, 3.546e-03, 3.481e-03, 3.418e-03, 3.357e-03, 3.299e-03, 3.242e-03, 3.188e-03, 3.135e-03, 3.084e-03, + 3.034e-03, 2.986e-03, 2.940e-03, 3.542e-05, 2.615e-03, 2.445e-03}, + {0.0, 0.0, 0.0, 9.407e-03, 9.243e-03, 9.084e-03, 8.931e-03, 8.783e-03, 8.640e-03, 8.502e-03, 8.368e-03, 8.238e-03, + 8.113e-03, 7.991e-03, 7.872e-03, 7.757e-03, 7.712e-03, 7.668e-03, 7.624e-03, 7.580e-03, 7.537e-03, 7.495e-03, 7.453e-03, 7.411e-03, + 7.370e-03, 7.330e-03, 7.289e-03, 7.250e-03, 7.210e-03, 7.172e-03, 7.152e-03, 7.133e-03, 7.114e-03, 7.095e-03, 7.076e-03, 7.057e-03, + 7.039e-03, 7.020e-03, 7.002e-03, 6.983e-03, 6.965e-03, 6.947e-03, 6.929e-03, 6.911e-03, 6.893e-03, 6.875e-03, 6.857e-03, 6.840e-03, + 6.822e-03, 6.805e-03, 6.787e-03, 6.770e-03, 6.753e-03, 6.736e-03, 6.719e-03, 6.702e-03, 6.685e-03, 6.668e-03, 6.651e-03, 6.635e-03, + 6.618e-03, 6.602e-03, 6.569e-03, 6.537e-03, 6.505e-03, 6.473e-03, 6.442e-03, 6.411e-03, 6.380e-03, 6.350e-03, 6.320e-03, 6.290e-03, + 6.260e-03, 6.231e-03, 6.202e-03, 6.173e-03, 6.144e-03, 6.116e-03, 6.088e-03, 6.060e-03, 6.033e-03, 6.006e-03, 5.979e-03, 5.952e-03, + 5.925e-03, 5.899e-03, 5.873e-03, 5.809e-03, 5.746e-03, 5.685e-03, 5.625e-03, 5.566e-03, 5.508e-03, 5.452e-03, 5.397e-03, 5.342e-03, + 5.289e-03, 5.186e-03, 5.087e-03, 4.992e-03, 4.900e-03, 4.811e-03, 4.726e-03, 4.643e-03, 4.564e-03, 4.487e-03, 4.412e-03, 4.340e-03, + 4.271e-03, 4.203e-03, 4.138e-03, 3.542e-05, 3.680e-03, 3.442e-03}, + {0.0, 0.0, 0.0, 0.0, 1.284e-02, 1.262e-02, 1.241e-02, 1.220e-02, 1.200e-02, 1.181e-02, 1.162e-02, 1.144e-02, + 1.127e-02, 1.110e-02, 1.093e-02, 1.078e-02, 1.071e-02, 1.065e-02, 1.059e-02, 1.053e-02, 1.047e-02, 1.041e-02, 1.035e-02, 1.029e-02, + 1.024e-02, 1.018e-02, 1.012e-02, 1.007e-02, 1.001e-02, 9.961e-03, 9.934e-03, 9.907e-03, 9.881e-03, 9.855e-03, 9.828e-03, 9.802e-03, + 9.776e-03, 9.750e-03, 9.725e-03, 9.699e-03, 9.674e-03, 9.649e-03, 9.623e-03, 9.598e-03, 9.574e-03, 9.549e-03, 9.524e-03, 9.500e-03, + 9.475e-03, 9.451e-03, 9.427e-03, 9.403e-03, 9.379e-03, 9.355e-03, 9.332e-03, 9.308e-03, 9.285e-03, 9.261e-03, 9.238e-03, 9.215e-03, + 9.192e-03, 9.170e-03, 9.124e-03, 9.079e-03, 9.035e-03, 8.991e-03, 8.947e-03, 8.904e-03, 8.862e-03, 8.819e-03, 8.777e-03, 8.736e-03, + 8.695e-03, 8.654e-03, 8.614e-03, 8.574e-03, 8.534e-03, 8.495e-03, 8.456e-03, 8.417e-03, 8.379e-03, 8.341e-03, 8.304e-03, 8.267e-03, + 8.230e-03, 8.193e-03, 8.157e-03, 8.068e-03, 7.981e-03, 7.896e-03, 7.812e-03, 7.731e-03, 7.651e-03, 7.572e-03, 7.495e-03, 7.420e-03, + 7.346e-03, 7.203e-03, 7.065e-03, 6.933e-03, 6.805e-03, 6.682e-03, 6.563e-03, 6.449e-03, 6.338e-03, 6.231e-03, 6.128e-03, 6.028e-03, + 5.931e-03, 5.838e-03, 5.747e-03, 3.542e-05, 5.111e-03, 4.781e-03}, + {0.0, 0.0, 0.0, 0.0, 0.0, 1.731e-02, 1.702e-02, 1.674e-02, 1.646e-02, 1.620e-02, 1.594e-02, 1.570e-02, + 1.546e-02, 1.522e-02, 1.500e-02, 1.478e-02, 1.469e-02, 1.461e-02, 1.452e-02, 1.444e-02, 1.436e-02, 1.428e-02, 1.420e-02, 1.412e-02, + 1.404e-02, 1.396e-02, 1.389e-02, 1.381e-02, 1.374e-02, 1.366e-02, 1.362e-02, 1.359e-02, 1.355e-02, 1.352e-02, 1.348e-02, 1.344e-02, + 1.341e-02, 1.337e-02, 1.334e-02, 1.330e-02, 1.327e-02, 1.323e-02, 1.320e-02, 1.316e-02, 1.313e-02, 1.310e-02, 1.306e-02, 1.303e-02, + 1.300e-02, 1.296e-02, 1.293e-02, 1.290e-02, 1.286e-02, 1.283e-02, 1.280e-02, 1.277e-02, 1.273e-02, 1.270e-02, 1.267e-02, 1.264e-02, + 1.261e-02, 1.258e-02, 1.251e-02, 1.245e-02, 1.239e-02, 1.233e-02, 1.227e-02, 1.221e-02, 1.215e-02, 1.210e-02, 1.204e-02, 1.198e-02, + 1.192e-02, 1.187e-02, 1.181e-02, 1.176e-02, 1.170e-02, 1.165e-02, 1.160e-02, 1.154e-02, 1.149e-02, 1.144e-02, 1.139e-02, 1.134e-02, + 1.129e-02, 1.124e-02, 1.119e-02, 1.107e-02, 1.095e-02, 1.083e-02, 1.071e-02, 1.060e-02, 1.049e-02, 1.038e-02, 1.028e-02, 1.018e-02, + 1.007e-02, 9.879e-03, 9.690e-03, 9.508e-03, 9.333e-03, 9.164e-03, 9.001e-03, 8.844e-03, 8.692e-03, 8.546e-03, 8.404e-03, 8.267e-03, + 8.134e-03, 8.006e-03, 7.881e-03, 3.542e-05, 7.009e-03, 6.556e-03}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.307e-02, 2.269e-02, 2.232e-02, 2.196e-02, 2.161e-02, 2.128e-02, + 2.095e-02, 2.063e-02, 2.033e-02, 2.003e-02, 1.991e-02, 1.980e-02, 1.968e-02, 1.957e-02, 1.946e-02, 1.935e-02, 1.924e-02, 1.913e-02, + 1.903e-02, 1.892e-02, 1.882e-02, 1.872e-02, 1.862e-02, 1.851e-02, 1.846e-02, 1.842e-02, 1.837e-02, 1.832e-02, 1.827e-02, 1.822e-02, + 1.817e-02, 1.812e-02, 1.808e-02, 1.803e-02, 1.798e-02, 1.793e-02, 1.789e-02, 1.784e-02, 1.779e-02, 1.775e-02, 1.770e-02, 1.766e-02, + 1.761e-02, 1.757e-02, 1.752e-02, 1.748e-02, 1.743e-02, 1.739e-02, 1.734e-02, 1.730e-02, 1.726e-02, 1.721e-02, 1.717e-02, 1.713e-02, + 1.708e-02, 1.704e-02, 1.696e-02, 1.687e-02, 1.679e-02, 1.671e-02, 1.663e-02, 1.655e-02, 1.647e-02, 1.639e-02, 1.631e-02, 1.624e-02, + 1.616e-02, 1.608e-02, 1.601e-02, 1.593e-02, 1.586e-02, 1.579e-02, 1.572e-02, 1.564e-02, 1.557e-02, 1.550e-02, 1.543e-02, 1.536e-02, + 1.530e-02, 1.523e-02, 1.516e-02, 1.499e-02, 1.483e-02, 1.467e-02, 1.452e-02, 1.437e-02, 1.422e-02, 1.407e-02, 1.393e-02, 1.379e-02, + 1.365e-02, 1.339e-02, 1.313e-02, 1.288e-02, 1.265e-02, 1.242e-02, 1.220e-02, 1.198e-02, 1.178e-02, 1.158e-02, 1.139e-02, 1.120e-02, + 1.102e-02, 1.085e-02, 1.068e-02, 3.542e-05, 9.498e-03, 8.884e-03}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3.042e-02, 2.992e-02, 2.943e-02, 2.897e-02, 2.851e-02, + 2.808e-02, 2.765e-02, 2.724e-02, 2.684e-02, 2.669e-02, 2.653e-02, 2.638e-02, 2.623e-02, 2.608e-02, 2.593e-02, 2.579e-02, 2.564e-02, + 2.550e-02, 2.536e-02, 2.522e-02, 2.508e-02, 2.494e-02, 2.481e-02, 2.474e-02, 2.468e-02, 2.461e-02, 2.454e-02, 2.448e-02, 2.441e-02, + 2.435e-02, 2.428e-02, 2.422e-02, 2.416e-02, 2.409e-02, 2.403e-02, 2.397e-02, 2.391e-02, 2.384e-02, 2.378e-02, 2.372e-02, 2.366e-02, + 2.360e-02, 2.354e-02, 2.348e-02, 2.342e-02, 2.336e-02, 2.330e-02, 2.324e-02, 2.318e-02, 2.312e-02, 2.306e-02, 2.301e-02, 2.295e-02, + 2.289e-02, 2.284e-02, 2.272e-02, 2.261e-02, 2.250e-02, 2.239e-02, 2.228e-02, 2.217e-02, 2.207e-02, 2.196e-02, 2.186e-02, 2.175e-02, + 2.165e-02, 2.155e-02, 2.145e-02, 2.135e-02, 2.125e-02, 2.115e-02, 2.106e-02, 2.096e-02, 2.087e-02, 2.077e-02, 2.068e-02, 2.059e-02, + 2.049e-02, 2.040e-02, 2.031e-02, 2.009e-02, 1.987e-02, 1.966e-02, 1.945e-02, 1.925e-02, 1.905e-02, 1.885e-02, 1.866e-02, 1.848e-02, + 1.829e-02, 1.794e-02, 1.759e-02, 1.726e-02, 1.694e-02, 1.664e-02, 1.634e-02, 1.606e-02, 1.578e-02, 1.552e-02, 1.526e-02, 1.501e-02, + 1.477e-02, 1.453e-02, 1.431e-02, 3.542e-05, 1.273e-02, 1.190e-02}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3.967e-02, 3.903e-02, 3.841e-02, 3.781e-02, + 3.723e-02, 3.666e-02, 3.612e-02, 3.559e-02, 3.538e-02, 3.518e-02, 3.497e-02, 3.477e-02, 3.457e-02, 3.438e-02, 3.419e-02, 3.399e-02, + 3.380e-02, 3.362e-02, 3.343e-02, 3.325e-02, 3.307e-02, 3.289e-02, 3.280e-02, 3.271e-02, 3.262e-02, 3.254e-02, 3.245e-02, 3.236e-02, + 3.228e-02, 3.219e-02, 3.211e-02, 3.202e-02, 3.194e-02, 3.186e-02, 3.177e-02, 3.169e-02, 3.161e-02, 3.153e-02, 3.144e-02, 3.136e-02, + 3.128e-02, 3.120e-02, 3.112e-02, 3.104e-02, 3.096e-02, 3.089e-02, 3.081e-02, 3.073e-02, 3.065e-02, 3.058e-02, 3.050e-02, 3.042e-02, + 3.035e-02, 3.027e-02, 3.012e-02, 2.997e-02, 2.983e-02, 2.968e-02, 2.954e-02, 2.939e-02, 2.925e-02, 2.911e-02, 2.897e-02, 2.884e-02, + 2.870e-02, 2.857e-02, 2.843e-02, 2.830e-02, 2.817e-02, 2.804e-02, 2.791e-02, 2.778e-02, 2.766e-02, 2.753e-02, 2.741e-02, 2.729e-02, + 2.716e-02, 2.704e-02, 2.692e-02, 2.663e-02, 2.634e-02, 2.606e-02, 2.579e-02, 2.552e-02, 2.525e-02, 2.499e-02, 2.474e-02, 2.449e-02, + 2.425e-02, 2.377e-02, 2.332e-02, 2.288e-02, 2.246e-02, 2.205e-02, 2.166e-02, 2.128e-02, 2.092e-02, 2.057e-02, 2.022e-02, 1.989e-02, + 1.957e-02, 1.927e-02, 1.897e-02, 3.542e-05, 1.687e-02, 1.578e-02}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 5.124e-02, 5.042e-02, 4.963e-02, + 4.887e-02, 4.812e-02, 4.741e-02, 4.671e-02, 4.644e-02, 4.617e-02, 4.590e-02, 4.564e-02, 4.537e-02, 4.512e-02, 4.486e-02, 4.461e-02, + 4.436e-02, 4.412e-02, 4.387e-02, 4.363e-02, 4.340e-02, 4.316e-02, 4.304e-02, 4.293e-02, 4.281e-02, 4.270e-02, 4.258e-02, 4.247e-02, + 4.236e-02, 4.225e-02, 4.213e-02, 4.202e-02, 4.191e-02, 4.180e-02, 4.169e-02, 4.158e-02, 4.148e-02, 4.137e-02, 4.126e-02, 4.116e-02, + 4.105e-02, 4.094e-02, 4.084e-02, 4.073e-02, 4.063e-02, 4.053e-02, 4.043e-02, 4.032e-02, 4.022e-02, 4.012e-02, 4.002e-02, 3.992e-02, + 3.982e-02, 3.972e-02, 3.952e-02, 3.933e-02, 3.914e-02, 3.895e-02, 3.876e-02, 3.857e-02, 3.838e-02, 3.820e-02, 3.802e-02, 3.784e-02, + 3.766e-02, 3.748e-02, 3.731e-02, 3.713e-02, 3.696e-02, 3.679e-02, 3.662e-02, 3.646e-02, 3.629e-02, 3.613e-02, 3.596e-02, 3.580e-02, + 3.564e-02, 3.548e-02, 3.533e-02, 3.494e-02, 3.456e-02, 3.419e-02, 3.383e-02, 3.348e-02, 3.313e-02, 3.279e-02, 3.246e-02, 3.213e-02, + 3.181e-02, 3.119e-02, 3.059e-02, 3.002e-02, 2.947e-02, 2.893e-02, 2.842e-02, 2.792e-02, 2.744e-02, 2.698e-02, 2.653e-02, 2.610e-02, + 2.568e-02, 2.528e-02, 2.488e-02, 3.542e-05, 2.213e-02, 2.070e-02}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 6.556e-02, 6.453e-02, + 6.353e-02, 6.256e-02, 6.163e-02, 6.072e-02, 6.036e-02, 6.001e-02, 5.966e-02, 5.932e-02, 5.898e-02, 5.864e-02, 5.831e-02, 5.799e-02, + 5.766e-02, 5.734e-02, 5.702e-02, 5.671e-02, 5.640e-02, 5.610e-02, 5.594e-02, 5.579e-02, 5.564e-02, 5.549e-02, 5.535e-02, 5.520e-02, + 5.505e-02, 5.490e-02, 5.476e-02, 5.461e-02, 5.447e-02, 5.433e-02, 5.419e-02, 5.404e-02, 5.390e-02, 5.376e-02, 5.362e-02, 5.349e-02, + 5.335e-02, 5.321e-02, 5.307e-02, 5.294e-02, 5.280e-02, 5.267e-02, 5.254e-02, 5.240e-02, 5.227e-02, 5.214e-02, 5.201e-02, 5.188e-02, + 5.175e-02, 5.162e-02, 5.136e-02, 5.111e-02, 5.086e-02, 5.061e-02, 5.036e-02, 5.012e-02, 4.988e-02, 4.964e-02, 4.940e-02, 4.917e-02, + 4.894e-02, 4.871e-02, 4.848e-02, 4.825e-02, 4.803e-02, 4.781e-02, 4.759e-02, 4.737e-02, 4.716e-02, 4.694e-02, 4.673e-02, 4.652e-02, + 4.632e-02, 4.611e-02, 4.591e-02, 4.540e-02, 4.491e-02, 4.443e-02, 4.396e-02, 4.350e-02, 4.305e-02, 4.261e-02, 4.218e-02, 4.175e-02, + 4.134e-02, 4.053e-02, 3.975e-02, 3.901e-02, 3.829e-02, 3.759e-02, 3.693e-02, 3.628e-02, 3.566e-02, 3.506e-02, 3.448e-02, 3.391e-02, + 3.337e-02, 3.284e-02, 3.233e-02, 3.542e-05, 2.875e-02, 2.689e-02}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 8.315e-02, + 8.185e-02, 8.060e-02, 7.939e-02, 7.821e-02, 7.775e-02, 7.730e-02, 7.685e-02, 7.641e-02, 7.597e-02, 7.553e-02, 7.511e-02, 7.468e-02, + 7.426e-02, 7.385e-02, 7.344e-02, 7.304e-02, 7.264e-02, 7.224e-02, 7.205e-02, 7.185e-02, 7.166e-02, 7.147e-02, 7.128e-02, 7.108e-02, + 7.090e-02, 7.071e-02, 7.052e-02, 7.033e-02, 7.015e-02, 6.996e-02, 6.978e-02, 6.960e-02, 6.942e-02, 6.923e-02, 6.906e-02, 6.888e-02, + 6.870e-02, 6.852e-02, 6.835e-02, 6.817e-02, 6.800e-02, 6.782e-02, 6.765e-02, 6.748e-02, 6.731e-02, 6.714e-02, 6.697e-02, 6.680e-02, + 6.664e-02, 6.647e-02, 6.614e-02, 6.581e-02, 6.549e-02, 6.517e-02, 6.485e-02, 6.454e-02, 6.423e-02, 6.392e-02, 6.361e-02, 6.331e-02, + 6.301e-02, 6.272e-02, 6.242e-02, 6.213e-02, 6.185e-02, 6.156e-02, 6.128e-02, 6.100e-02, 6.072e-02, 6.044e-02, 6.017e-02, 5.990e-02, + 5.963e-02, 5.937e-02, 5.911e-02, 5.846e-02, 5.783e-02, 5.721e-02, 5.660e-02, 5.601e-02, 5.543e-02, 5.486e-02, 5.430e-02, 5.375e-02, + 5.322e-02, 5.218e-02, 5.118e-02, 5.022e-02, 4.929e-02, 4.840e-02, 4.754e-02, 4.671e-02, 4.591e-02, 4.513e-02, 4.438e-02, 4.366e-02, + 4.296e-02, 4.228e-02, 4.162e-02, 3.542e-05, 3.701e-02, 3.462e-02}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.10460, 0.10290, 0.10140, 9.988e-02, 9.929e-02, 9.871e-02, 9.813e-02, 9.757e-02, 9.700e-02, 9.645e-02, 9.590e-02, 9.536e-02, + 9.482e-02, 9.430e-02, 9.377e-02, 9.325e-02, 9.274e-02, 9.224e-02, 9.199e-02, 9.174e-02, 9.149e-02, 9.124e-02, 9.100e-02, 9.075e-02, + 9.051e-02, 9.027e-02, 9.003e-02, 8.979e-02, 8.955e-02, 8.932e-02, 8.908e-02, 8.885e-02, 8.862e-02, 8.839e-02, 8.816e-02, 8.793e-02, + 8.770e-02, 8.747e-02, 8.725e-02, 8.703e-02, 8.680e-02, 8.658e-02, 8.636e-02, 8.614e-02, 8.592e-02, 8.571e-02, 8.549e-02, 8.528e-02, + 8.506e-02, 8.485e-02, 8.443e-02, 8.401e-02, 8.360e-02, 8.319e-02, 8.278e-02, 8.238e-02, 8.198e-02, 8.159e-02, 8.120e-02, 8.081e-02, + 8.043e-02, 8.005e-02, 7.968e-02, 7.931e-02, 7.894e-02, 7.857e-02, 7.821e-02, 7.786e-02, 7.750e-02, 7.715e-02, 7.680e-02, 7.646e-02, + 7.611e-02, 7.578e-02, 7.544e-02, 7.461e-02, 7.380e-02, 7.301e-02, 7.224e-02, 7.148e-02, 7.074e-02, 7.001e-02, 6.930e-02, 6.860e-02, + 6.792e-02, 6.659e-02, 6.532e-02, 6.409e-02, 6.291e-02, 6.177e-02, 6.067e-02, 5.961e-02, 5.859e-02, 5.760e-02, 5.664e-02, 5.572e-02, + 5.482e-02, 5.395e-02, 5.312e-02, 3.542e-05, 4.724e-02, 4.418e-02}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.13040, 0.12840, 0.12650, 0.12580, 0.125, 0.12430, 0.12360, 0.12290, 0.12220, 0.12150, 0.12080, + 0.12010, 0.11940, 0.11870, 0.11810, 0.11740, 0.11680, 0.11650, 0.11620, 0.11580, 0.11550, 0.11520, 0.11490, + 0.11460, 0.11430, 0.114, 0.11370, 0.11340, 0.11310, 0.11280, 0.11250, 0.11220, 0.11190, 0.11160, 0.11130, + 0.111, 0.11080, 0.11050, 0.11020, 0.10990, 0.10960, 0.10930, 0.10910, 0.10880, 0.10850, 0.10820, 0.108, + 0.10770, 0.10740, 0.10690, 0.10640, 0.10580, 0.10530, 0.10480, 0.10430, 0.10380, 0.10330, 0.10280, 0.10230, + 0.10180, 0.10130, 0.10090, 0.10040, 9.993e-02, 9.946e-02, 9.901e-02, 9.855e-02, 9.810e-02, 9.766e-02, 9.722e-02, 9.678e-02, + 9.635e-02, 9.592e-02, 9.549e-02, 9.444e-02, 9.342e-02, 9.242e-02, 9.144e-02, 9.048e-02, 8.954e-02, 8.862e-02, 8.771e-02, 8.683e-02, + 8.597e-02, 8.429e-02, 8.267e-02, 8.112e-02, 7.962e-02, 7.818e-02, 7.678e-02, 7.544e-02, 7.415e-02, 7.289e-02, 7.168e-02, 7.051e-02, + 6.938e-02, 6.828e-02, 6.722e-02, 3.542e-05, 5.978e-02, 5.591e-02}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.16150, 0.159, 0.15810, 0.15710, 0.15620, 0.15530, 0.15440, 0.15350, 0.15260, 0.15180, + 0.15090, 0.15, 0.14920, 0.14840, 0.14760, 0.14670, 0.14630, 0.14590, 0.14550, 0.14520, 0.14480, 0.14440, + 0.144, 0.14360, 0.14320, 0.14280, 0.14250, 0.14210, 0.14170, 0.14130, 0.141, 0.14060, 0.14020, 0.13990, + 0.13950, 0.13910, 0.13880, 0.13840, 0.13810, 0.13770, 0.13730, 0.137, 0.13660, 0.13630, 0.136, 0.13560, + 0.13530, 0.13490, 0.13430, 0.13360, 0.13290, 0.13230, 0.13160, 0.131, 0.13040, 0.12970, 0.12910, 0.12850, + 0.12790, 0.12730, 0.12670, 0.12610, 0.12550, 0.12490, 0.12430, 0.12380, 0.12320, 0.12260, 0.12210, 0.12150, + 0.121, 0.12050, 0.11990, 0.11860, 0.11730, 0.11610, 0.11480, 0.11360, 0.11240, 0.11130, 0.11010, 0.109, + 0.10790, 0.10580, 0.10380, 0.10190, 9.997e-02, 9.816e-02, 9.641e-02, 9.473e-02, 9.310e-02, 9.152e-02, 9.000e-02, 8.853e-02, + 8.711e-02, 8.573e-02, 8.440e-02, 3.542e-05, 7.505e-02, 7.019e-02}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.19840, 0.19720, 0.19610, 0.19490, 0.19370, 0.19260, 0.19150, 0.19040, 0.18930, 0.18820, 0.18720, + 0.18610, 0.18510, 0.184, 0.183, 0.18250, 0.182, 0.18150, 0.181, 0.18050, 0.18, 0.17960, 0.17910, 0.17860, + 0.17810, 0.17760, 0.17720, 0.17670, 0.17620, 0.17580, 0.17530, 0.17480, 0.17440, 0.17390, 0.17350, 0.173, 0.17260, + 0.17210, 0.17170, 0.17120, 0.17080, 0.17040, 0.16990, 0.16950, 0.16910, 0.16870, 0.16820, 0.16740, 0.16660, 0.16570, + 0.16490, 0.16410, 0.16330, 0.16250, 0.16170, 0.16090, 0.16020, 0.15940, 0.15870, 0.15790, 0.15720, 0.15640, 0.15570, + 0.155, 0.15430, 0.15360, 0.15290, 0.15220, 0.15150, 0.15080, 0.15010, 0.14950, 0.14780, 0.14620, 0.14460, 0.14310, + 0.14160, 0.14010, 0.13870, 0.13730, 0.13590, 0.13450, 0.13190, 0.12940, 0.12690, 0.12460, 0.12230, 0.12010, 0.118, + 0.116, 0.11410, 0.11220, 0.11030, 0.10850, 0.10680, 0.10520, 3.542e-05, 9.352e-02, 8.746e-02}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.21510, 0.21380, 0.21250, 0.21130, 0.21, 0.20880, 0.20760, 0.20640, 0.20520, 0.204, 0.20290, 0.20180, 0.20060, 0.19950, + 0.199, 0.19840, 0.19790, 0.19730, 0.19680, 0.19630, 0.19570, 0.19520, 0.19470, 0.19420, 0.19360, 0.19310, 0.19260, 0.19210, 0.19160, + 0.19110, 0.19060, 0.19010, 0.18960, 0.18910, 0.18860, 0.18810, 0.18760, 0.18720, 0.18670, 0.18620, 0.18570, 0.18520, 0.18480, 0.18430, + 0.18380, 0.18340, 0.18250, 0.18150, 0.18060, 0.17980, 0.17890, 0.178, 0.17710, 0.17630, 0.17540, 0.17460, 0.17380, 0.17290, 0.17210, + 0.17130, 0.17050, 0.16970, 0.16890, 0.16820, 0.16740, 0.16660, 0.16590, 0.16510, 0.16440, 0.16360, 0.16290, 0.16110, 0.15940, 0.15770, + 0.156, 0.15430, 0.15270, 0.15110, 0.14960, 0.14810, 0.14660, 0.14370, 0.141, 0.13830, 0.13580, 0.13330, 0.13090, 0.12860, 0.12640, + 0.12430, 0.12220, 0.12020, 0.11830, 0.11640, 0.11460, 3.542e-05, 0.10190, 9.531e-02}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.23290, 0.23150, 0.23010, 0.22870, 0.22740, 0.22610, 0.22480, 0.22350, 0.22220, 0.221, 0.21970, 0.21850, 0.21730, + 0.21670, 0.21610, 0.21550, 0.21490, 0.21430, 0.21370, 0.21310, 0.21260, 0.212, 0.21140, 0.21090, 0.21030, 0.20970, 0.20920, 0.20860, + 0.20810, 0.20750, 0.207, 0.20640, 0.20590, 0.20540, 0.20480, 0.20430, 0.20380, 0.20330, 0.20270, 0.20220, 0.20170, 0.20120, 0.20070, + 0.20020, 0.19970, 0.19870, 0.19770, 0.19670, 0.19570, 0.19480, 0.19380, 0.19290, 0.19190, 0.191, 0.19010, 0.18920, 0.18830, 0.18740, + 0.18650, 0.18560, 0.18480, 0.18390, 0.18310, 0.18220, 0.18140, 0.18060, 0.17980, 0.179, 0.17820, 0.17740, 0.17540, 0.17350, 0.17160, + 0.16980, 0.168, 0.16630, 0.16450, 0.16290, 0.16120, 0.15960, 0.15650, 0.15350, 0.15060, 0.14780, 0.14510, 0.14250, 0.14, 0.13760, + 0.13530, 0.133, 0.13090, 0.12880, 0.12670, 0.12480, 3.542e-05, 0.11090, 0.1037}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.25180, 0.25030, 0.24890, 0.24740, 0.246, 0.24450, 0.24310, 0.24170, 0.24040, 0.239, 0.23770, 0.23640, + 0.23570, 0.23510, 0.23440, 0.23380, 0.23310, 0.23250, 0.23190, 0.23120, 0.23060, 0.23, 0.22940, 0.22880, 0.22810, 0.22750, 0.22690, + 0.22630, 0.22570, 0.22510, 0.22460, 0.224, 0.22340, 0.22280, 0.22220, 0.22160, 0.22110, 0.22050, 0.21990, 0.21940, 0.21880, 0.21830, + 0.21770, 0.21720, 0.21610, 0.215, 0.21390, 0.21290, 0.21180, 0.21080, 0.20970, 0.20870, 0.20770, 0.20670, 0.20570, 0.20480, 0.20380, + 0.20280, 0.20190, 0.201, 0.2, 0.19910, 0.19820, 0.19730, 0.19640, 0.19550, 0.19460, 0.19370, 0.19290, 0.19080, 0.18870, 0.18660, + 0.18470, 0.18270, 0.18080, 0.17890, 0.17710, 0.17530, 0.17360, 0.17020, 0.16690, 0.16370, 0.16070, 0.15780, 0.155, 0.15230, 0.14960, + 0.14710, 0.14470, 0.14230, 0.14, 0.13780, 0.13560, 3.542e-05, 0.12060, 0.1128}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.27210, 0.27050, 0.26890, 0.26730, 0.26580, 0.26420, 0.26270, 0.26120, 0.25970, 0.25830, 0.25680, + 0.25610, 0.25540, 0.25470, 0.254, 0.25330, 0.25260, 0.25190, 0.25130, 0.25060, 0.24990, 0.24920, 0.24860, 0.24790, 0.24720, 0.24660, + 0.24590, 0.24530, 0.24460, 0.244, 0.24330, 0.24270, 0.24210, 0.24140, 0.24080, 0.24020, 0.23960, 0.239, 0.23840, 0.23770, 0.23710, + 0.23650, 0.23590, 0.23480, 0.23360, 0.23240, 0.23130, 0.23010, 0.229, 0.22790, 0.22680, 0.22570, 0.22460, 0.22350, 0.22250, 0.22140, + 0.22040, 0.21930, 0.21830, 0.21730, 0.21630, 0.21530, 0.21430, 0.21330, 0.21240, 0.21140, 0.21050, 0.20950, 0.20720, 0.205, 0.20270, + 0.20060, 0.19850, 0.19640, 0.19440, 0.19240, 0.19040, 0.18850, 0.18480, 0.18130, 0.17790, 0.17460, 0.17140, 0.16830, 0.16540, 0.16250, + 0.15980, 0.15710, 0.15460, 0.15210, 0.14970, 0.14730, 3.542e-05, 0.131, 0.1225}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.29370, 0.29190, 0.29020, 0.28850, 0.28690, 0.28520, 0.28360, 0.282, 0.28040, 0.27880, + 0.278, 0.27730, 0.27650, 0.27570, 0.275, 0.27420, 0.27350, 0.27270, 0.272, 0.27130, 0.27050, 0.26980, 0.26910, 0.26840, 0.26760, + 0.26690, 0.26620, 0.26550, 0.26480, 0.26410, 0.26340, 0.26280, 0.26210, 0.26140, 0.26070, 0.26, 0.25940, 0.25870, 0.258, 0.25740, + 0.25670, 0.25610, 0.25480, 0.25350, 0.25220, 0.251, 0.24980, 0.24850, 0.24730, 0.24610, 0.24490, 0.24370, 0.24260, 0.24140, 0.24030, + 0.23910, 0.238, 0.23690, 0.23580, 0.23470, 0.23360, 0.23260, 0.23150, 0.23050, 0.22940, 0.22840, 0.22740, 0.22490, 0.22240, 0.22, + 0.21770, 0.21540, 0.21310, 0.21090, 0.20880, 0.20660, 0.20460, 0.20060, 0.19670, 0.193, 0.18940, 0.186, 0.18270, 0.17950, 0.17640, + 0.17340, 0.17050, 0.16770, 0.165, 0.16240, 0.15990, 3.542e-05, 0.14210, 0.1329}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.31660, 0.31480, 0.31290, 0.31110, 0.30930, 0.30760, 0.30580, 0.30410, 0.30240, + 0.30150, 0.30070, 0.29990, 0.299, 0.29820, 0.29740, 0.29660, 0.29580, 0.295, 0.29420, 0.29340, 0.29260, 0.29180, 0.291, 0.29020, + 0.28940, 0.28870, 0.28790, 0.28720, 0.28640, 0.28560, 0.28490, 0.28420, 0.28340, 0.28270, 0.282, 0.28120, 0.28050, 0.27980, 0.27910, + 0.27840, 0.27760, 0.27620, 0.27490, 0.27350, 0.27210, 0.27080, 0.26940, 0.26810, 0.26680, 0.26550, 0.26430, 0.263, 0.26170, 0.26050, + 0.25930, 0.258, 0.25680, 0.25560, 0.25450, 0.25330, 0.25210, 0.251, 0.24980, 0.24870, 0.24760, 0.24650, 0.24380, 0.24110, 0.23850, + 0.23590, 0.23350, 0.231, 0.22860, 0.22630, 0.224, 0.22170, 0.21740, 0.21320, 0.20920, 0.20530, 0.20160, 0.198, 0.19450, 0.19120, + 0.18790, 0.18480, 0.18180, 0.17880, 0.176, 0.17330, 3.542e-05, 0.154, 0.1441}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.34110, 0.33910, 0.33710, 0.33520, 0.33320, 0.33130, 0.32940, 0.32760, + 0.32670, 0.32580, 0.32490, 0.324, 0.32310, 0.32220, 0.32130, 0.32040, 0.31950, 0.31870, 0.31780, 0.31690, 0.31610, 0.31520, 0.31440, + 0.31350, 0.31270, 0.31190, 0.31110, 0.31020, 0.30940, 0.30860, 0.30780, 0.307, 0.30620, 0.30540, 0.30460, 0.30380, 0.30310, 0.30230, + 0.30150, 0.30070, 0.29920, 0.29770, 0.29620, 0.29470, 0.29330, 0.29180, 0.29040, 0.289, 0.28760, 0.28620, 0.28480, 0.28350, 0.28210, + 0.28080, 0.27950, 0.27820, 0.27690, 0.27560, 0.27430, 0.27310, 0.27180, 0.27060, 0.26930, 0.26810, 0.26690, 0.264, 0.26110, 0.25830, + 0.25550, 0.25280, 0.25020, 0.24760, 0.245, 0.24260, 0.24010, 0.23540, 0.23090, 0.22650, 0.22230, 0.21830, 0.21440, 0.21060, 0.207, + 0.20350, 0.20010, 0.19680, 0.19360, 0.19060, 0.18760, 3.542e-05, 0.16680, 0.156}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.36710, 0.36490, 0.36280, 0.36070, 0.35860, 0.35660, 0.35460, + 0.35360, 0.35260, 0.35160, 0.35060, 0.34960, 0.34870, 0.34770, 0.34680, 0.34580, 0.34490, 0.34390, 0.343, 0.34210, 0.34110, 0.34020, + 0.33930, 0.33840, 0.33750, 0.33660, 0.33570, 0.33480, 0.334, 0.33310, 0.33220, 0.33130, 0.33050, 0.32960, 0.32880, 0.32790, 0.32710, + 0.32630, 0.32540, 0.32380, 0.32210, 0.32050, 0.31890, 0.31730, 0.31580, 0.31420, 0.31270, 0.31120, 0.30970, 0.30820, 0.30670, 0.30520, + 0.30380, 0.30240, 0.30090, 0.29950, 0.29820, 0.29680, 0.29540, 0.29410, 0.29270, 0.29140, 0.29010, 0.28880, 0.28560, 0.28250, 0.27940, + 0.27640, 0.27350, 0.27060, 0.26780, 0.26510, 0.26240, 0.25980, 0.25460, 0.24970, 0.245, 0.24050, 0.23610, 0.23190, 0.22780, 0.22390, + 0.22010, 0.21640, 0.21290, 0.20940, 0.20610, 0.20290, 3.542e-05, 0.18040, 0.1687}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.39460, 0.39230, 0.39010, 0.38780, 0.38560, 0.38340, + 0.38230, 0.38120, 0.38020, 0.37910, 0.37810, 0.377, 0.376, 0.37490, 0.37390, 0.37290, 0.37190, 0.37080, 0.36980, 0.36880, 0.36780, + 0.36690, 0.36590, 0.36490, 0.36390, 0.363, 0.362, 0.361, 0.36010, 0.35920, 0.35820, 0.35730, 0.35640, 0.35540, 0.35450, 0.35360, + 0.35270, 0.35180, 0.35, 0.34820, 0.34650, 0.34470, 0.343, 0.34130, 0.33970, 0.338, 0.33640, 0.33470, 0.33310, 0.33150, 0.32990, + 0.32840, 0.32680, 0.32530, 0.32380, 0.32230, 0.32080, 0.31930, 0.31780, 0.31640, 0.315, 0.31350, 0.31210, 0.30870, 0.30530, 0.302, + 0.29870, 0.29560, 0.29250, 0.28940, 0.28650, 0.28360, 0.28070, 0.27520, 0.26990, 0.26480, 0.25990, 0.25510, 0.25060, 0.24620, 0.24190, + 0.23780, 0.23390, 0.23, 0.22630, 0.22270, 0.21930, 3.542e-05, 0.19490, 0.1823}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.42390, 0.42140, 0.419, 0.41660, 0.41420, + 0.413, 0.41190, 0.41070, 0.40960, 0.40840, 0.40730, 0.40610, 0.405, 0.40390, 0.40280, 0.40170, 0.40060, 0.39950, 0.39840, 0.39730, + 0.39630, 0.39520, 0.39410, 0.39310, 0.392, 0.391, 0.39, 0.38890, 0.38790, 0.38690, 0.38590, 0.38490, 0.38390, 0.38290, 0.38190, + 0.38090, 0.37990, 0.378, 0.37610, 0.37420, 0.37230, 0.37050, 0.36860, 0.36680, 0.365, 0.36320, 0.36150, 0.35970, 0.358, 0.35630, + 0.35460, 0.35290, 0.35130, 0.34960, 0.348, 0.34640, 0.34480, 0.34320, 0.34160, 0.34010, 0.33860, 0.337, 0.33330, 0.32960, 0.32610, + 0.32260, 0.31910, 0.31580, 0.31250, 0.30930, 0.30620, 0.30310, 0.29710, 0.29140, 0.28590, 0.28060, 0.27540, 0.27050, 0.26580, 0.26120, + 0.25680, 0.25250, 0.24830, 0.24430, 0.24050, 0.23670, 3.542e-05, 0.21040, 0.1968}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.45490, 0.45230, 0.44970, 0.44710, + 0.44580, 0.44450, 0.44330, 0.442, 0.44080, 0.43960, 0.43830, 0.43710, 0.43590, 0.43470, 0.43350, 0.43230, 0.43110, 0.43, 0.42880, + 0.42760, 0.42650, 0.42530, 0.42420, 0.42310, 0.42190, 0.42080, 0.41970, 0.41860, 0.41750, 0.41640, 0.41530, 0.41420, 0.41320, 0.41210, + 0.411, 0.41, 0.40790, 0.40580, 0.40380, 0.40170, 0.39970, 0.39770, 0.39580, 0.39380, 0.39190, 0.39, 0.38810, 0.38620, 0.38440, + 0.38260, 0.38080, 0.379, 0.37720, 0.37540, 0.37370, 0.372, 0.37030, 0.36860, 0.36690, 0.36520, 0.36360, 0.35950, 0.35560, 0.35170, + 0.34790, 0.34420, 0.34060, 0.33710, 0.33360, 0.33020, 0.32690, 0.32050, 0.31430, 0.30830, 0.30260, 0.29710, 0.29180, 0.28660, 0.28170, + 0.27690, 0.27230, 0.26780, 0.26350, 0.25930, 0.25530, 3.542e-05, 0.22690, 0.2122}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.48780, 0.48490, 0.48210, + 0.48080, 0.47940, 0.478, 0.47670, 0.47530, 0.474, 0.47270, 0.47130, 0.47, 0.46870, 0.46740, 0.46620, 0.46490, 0.46360, 0.46230, + 0.46110, 0.45980, 0.45860, 0.45740, 0.45610, 0.45490, 0.45370, 0.45250, 0.45130, 0.45010, 0.44890, 0.44780, 0.44660, 0.44540, 0.44430, + 0.44310, 0.442, 0.43970, 0.43750, 0.43530, 0.43310, 0.43090, 0.42870, 0.42660, 0.42450, 0.42240, 0.42040, 0.41830, 0.41630, 0.41430, + 0.41240, 0.41040, 0.40850, 0.40650, 0.40460, 0.40280, 0.40090, 0.39910, 0.39720, 0.39540, 0.39360, 0.39190, 0.38750, 0.38320, 0.37910, + 0.375, 0.371, 0.36710, 0.36330, 0.35950, 0.35590, 0.35230, 0.34530, 0.33870, 0.33230, 0.32610, 0.32010, 0.31440, 0.30890, 0.30350, + 0.29840, 0.29340, 0.28860, 0.28390, 0.27940, 0.27510, 3.542e-05, 0.24450, 0.2287}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.52250, 0.51950, + 0.518, 0.51650, 0.51510, 0.51360, 0.51210, 0.51070, 0.50920, 0.50780, 0.50640, 0.505, 0.50360, 0.50220, 0.50080, 0.49940, 0.49810, + 0.49670, 0.49540, 0.494, 0.49270, 0.49140, 0.49010, 0.48870, 0.48740, 0.48610, 0.48490, 0.48360, 0.48230, 0.481, 0.47980, 0.47850, + 0.47730, 0.47610, 0.47360, 0.47120, 0.46880, 0.46640, 0.46410, 0.46180, 0.45950, 0.45720, 0.455, 0.45270, 0.45050, 0.44840, 0.44620, + 0.44410, 0.442, 0.43990, 0.43780, 0.43580, 0.43370, 0.43170, 0.42970, 0.42780, 0.42580, 0.42390, 0.422, 0.41730, 0.41270, 0.40820, + 0.40380, 0.39950, 0.39530, 0.39110, 0.38710, 0.38320, 0.37930, 0.37180, 0.36460, 0.35770, 0.35110, 0.34460, 0.33850, 0.33250, 0.32680, + 0.32120, 0.31590, 0.31070, 0.30570, 0.30080, 0.29610, 3.542e-05, 0.26320, 0.2461}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.55930, + 0.55770, 0.55610, 0.55450, 0.55290, 0.55130, 0.54980, 0.54820, 0.54670, 0.54510, 0.54360, 0.54210, 0.54060, 0.53910, 0.53760, 0.53610, + 0.53460, 0.53320, 0.53170, 0.53030, 0.52890, 0.52740, 0.526, 0.52460, 0.52320, 0.52180, 0.52050, 0.51910, 0.51770, 0.51640, 0.515, + 0.51370, 0.51230, 0.50970, 0.50710, 0.50450, 0.50190, 0.49940, 0.49690, 0.49440, 0.492, 0.48960, 0.48720, 0.48480, 0.48240, 0.48010, + 0.47780, 0.47550, 0.47330, 0.47110, 0.46880, 0.46670, 0.46450, 0.46230, 0.46020, 0.45810, 0.456, 0.454, 0.44890, 0.44390, 0.43910, + 0.43440, 0.42970, 0.42520, 0.42080, 0.41640, 0.41220, 0.408, 0.4, 0.39220, 0.38480, 0.37760, 0.37070, 0.36410, 0.35760, 0.35150, + 0.34550, 0.33970, 0.33410, 0.32870, 0.32350, 0.31850, 3.542e-05, 0.28310, 0.2647}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.57850, 0.57680, 0.57510, 0.57350, 0.57180, 0.57020, 0.56860, 0.567, 0.56540, 0.56380, 0.56220, 0.56070, 0.55910, 0.55760, 0.556, + 0.55450, 0.553, 0.55150, 0.55, 0.54850, 0.547, 0.54550, 0.54410, 0.54260, 0.54120, 0.53980, 0.53830, 0.53690, 0.53550, 0.53410, + 0.53270, 0.53130, 0.52860, 0.52590, 0.52320, 0.52050, 0.51790, 0.51530, 0.51270, 0.51020, 0.50770, 0.50520, 0.50270, 0.50030, 0.49790, + 0.49550, 0.49310, 0.49080, 0.48850, 0.48620, 0.48390, 0.48160, 0.47940, 0.47720, 0.475, 0.47290, 0.47070, 0.46550, 0.46030, 0.45530, + 0.45040, 0.44560, 0.44090, 0.43630, 0.43180, 0.42740, 0.423, 0.41470, 0.40660, 0.39890, 0.39150, 0.38430, 0.37740, 0.37080, 0.36440, + 0.35820, 0.35220, 0.34640, 0.34080, 0.33540, 0.33020, 3.542e-05, 0.29350, 0.2744}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.59820, 0.59640, 0.59470, 0.593, 0.59130, 0.58960, 0.588, 0.58630, 0.58470, 0.583, 0.58140, 0.57980, 0.57820, 0.57660, + 0.575, 0.57340, 0.57180, 0.57030, 0.56870, 0.56720, 0.56570, 0.56420, 0.56270, 0.56120, 0.55970, 0.55820, 0.55670, 0.55520, 0.55380, + 0.55230, 0.55090, 0.548, 0.54520, 0.54240, 0.53970, 0.53690, 0.53420, 0.53160, 0.52890, 0.52630, 0.52370, 0.52120, 0.51870, 0.51620, + 0.51370, 0.51120, 0.50880, 0.50640, 0.504, 0.50170, 0.49930, 0.497, 0.49470, 0.49250, 0.49020, 0.488, 0.48250, 0.47720, 0.472, + 0.46690, 0.46190, 0.457, 0.45220, 0.44760, 0.443, 0.43850, 0.42980, 0.42150, 0.41350, 0.40580, 0.39840, 0.39120, 0.38430, 0.37770, + 0.37130, 0.36510, 0.35910, 0.35330, 0.34760, 0.34220, 3.542e-05, 0.30420, 0.2844}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.61840, 0.61660, 0.61480, 0.61310, 0.61130, 0.60960, 0.60790, 0.60620, 0.60450, 0.60280, 0.60110, 0.59940, 0.59780, + 0.59610, 0.59450, 0.59280, 0.59120, 0.58960, 0.588, 0.58640, 0.58490, 0.58330, 0.58170, 0.58020, 0.57860, 0.57710, 0.57560, 0.57410, + 0.57260, 0.57110, 0.56810, 0.56520, 0.56230, 0.55940, 0.55660, 0.55380, 0.551, 0.54830, 0.54560, 0.54290, 0.54020, 0.53760, 0.535, + 0.53240, 0.52990, 0.52740, 0.52490, 0.52240, 0.52, 0.51750, 0.51510, 0.51280, 0.51040, 0.50810, 0.50580, 0.50010, 0.49460, 0.48920, + 0.48390, 0.47870, 0.47360, 0.46870, 0.46390, 0.45910, 0.45450, 0.44550, 0.43680, 0.42850, 0.42050, 0.41290, 0.40540, 0.39830, 0.39140, + 0.38470, 0.37830, 0.37210, 0.36610, 0.36030, 0.35460, 3.542e-05, 0.31520, 0.2948}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.63920, 0.63740, 0.63550, 0.63370, 0.63190, 0.63010, 0.62830, 0.62660, 0.62480, 0.623, 0.62130, 0.61960, + 0.61790, 0.61620, 0.61450, 0.61280, 0.61110, 0.60950, 0.60780, 0.60620, 0.60460, 0.60290, 0.60130, 0.59970, 0.59810, 0.59660, 0.595, + 0.59340, 0.59190, 0.58880, 0.58580, 0.58270, 0.57980, 0.57680, 0.57390, 0.571, 0.56820, 0.56540, 0.56260, 0.55990, 0.55710, 0.55440, + 0.55180, 0.54910, 0.54650, 0.54390, 0.54140, 0.53880, 0.53630, 0.53380, 0.53140, 0.52890, 0.52650, 0.52410, 0.51820, 0.51250, 0.50690, + 0.50140, 0.496, 0.49080, 0.48570, 0.48060, 0.47570, 0.47090, 0.46160, 0.45260, 0.444, 0.43570, 0.42780, 0.42010, 0.41270, 0.40550, + 0.39860, 0.392, 0.38550, 0.37930, 0.37330, 0.36740, 3.542e-05, 0.32660, 0.3054}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.66060, 0.65870, 0.65680, 0.65490, 0.653, 0.65120, 0.64930, 0.64750, 0.64570, 0.64390, 0.64210, + 0.64030, 0.63850, 0.63680, 0.635, 0.63330, 0.63160, 0.62990, 0.62820, 0.62650, 0.62480, 0.62310, 0.62150, 0.61980, 0.61820, 0.61650, + 0.61490, 0.61330, 0.61010, 0.607, 0.60380, 0.60070, 0.59770, 0.59470, 0.59170, 0.58870, 0.58580, 0.58290, 0.58010, 0.57720, 0.57440, + 0.57170, 0.56890, 0.56620, 0.56350, 0.56090, 0.55820, 0.55560, 0.55310, 0.55050, 0.548, 0.54550, 0.543, 0.53690, 0.53090, 0.52510, + 0.51940, 0.51390, 0.50840, 0.50310, 0.49790, 0.49280, 0.48780, 0.47820, 0.46890, 0.46, 0.45140, 0.44310, 0.43510, 0.42750, 0.42010, + 0.41290, 0.406, 0.39930, 0.39290, 0.38660, 0.38060, 3.542e-05, 0.33830, 0.3163}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.68250, 0.68050, 0.67860, 0.67660, 0.67470, 0.67280, 0.67090, 0.669, 0.66710, 0.66530, + 0.66340, 0.66160, 0.65980, 0.658, 0.65620, 0.65440, 0.65260, 0.65080, 0.64910, 0.64730, 0.64560, 0.64390, 0.64210, 0.64040, 0.63870, + 0.63710, 0.63540, 0.63210, 0.62880, 0.62550, 0.62230, 0.61920, 0.616, 0.61290, 0.60990, 0.60690, 0.60390, 0.60090, 0.598, 0.59510, + 0.59220, 0.58930, 0.58650, 0.58370, 0.581, 0.57830, 0.57560, 0.57290, 0.57020, 0.56760, 0.565, 0.56240, 0.55610, 0.54990, 0.54390, + 0.538, 0.53230, 0.52660, 0.52110, 0.51570, 0.51040, 0.50530, 0.49520, 0.48560, 0.47640, 0.46750, 0.45890, 0.45070, 0.44270, 0.435, + 0.42760, 0.42050, 0.41360, 0.40690, 0.40040, 0.39410, 3.542e-05, 0.35030, 0.3276}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.705, 0.703, 0.701, 0.699, 0.697, 0.695, 0.69310, 0.69110, 0.68920, + 0.68730, 0.68530, 0.68350, 0.68160, 0.67970, 0.67780, 0.676, 0.67420, 0.67230, 0.67050, 0.66870, 0.66690, 0.66510, 0.66340, 0.66160, + 0.65990, 0.65810, 0.65470, 0.65130, 0.64790, 0.64460, 0.64130, 0.63810, 0.63480, 0.63170, 0.62850, 0.62540, 0.62230, 0.61930, 0.61630, + 0.61330, 0.61040, 0.60740, 0.60460, 0.60170, 0.59890, 0.59610, 0.59330, 0.59050, 0.58780, 0.58510, 0.58250, 0.57590, 0.56950, 0.56330, + 0.55710, 0.55120, 0.54530, 0.53960, 0.534, 0.52860, 0.52320, 0.51280, 0.50280, 0.49330, 0.484, 0.47520, 0.46660, 0.45840, 0.45050, + 0.44280, 0.43540, 0.42820, 0.42130, 0.41460, 0.40810, 3.542e-05, 0.36270, 0.3391}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.72820, 0.72610, 0.724, 0.72190, 0.71990, 0.71780, 0.71580, 0.71380, + 0.71180, 0.70980, 0.70790, 0.70590, 0.704, 0.702, 0.70010, 0.69820, 0.69630, 0.69440, 0.69250, 0.69070, 0.68880, 0.687, 0.68520, + 0.68340, 0.68160, 0.678, 0.67450, 0.671, 0.66750, 0.66410, 0.66070, 0.65740, 0.65410, 0.65080, 0.64760, 0.64440, 0.64130, 0.63810, + 0.63510, 0.632, 0.629, 0.626, 0.623, 0.62010, 0.61720, 0.61430, 0.61150, 0.60860, 0.60580, 0.60310, 0.59630, 0.58960, 0.58320, + 0.57680, 0.57060, 0.56460, 0.55870, 0.55290, 0.54720, 0.54170, 0.53090, 0.52060, 0.51060, 0.50110, 0.49190, 0.48310, 0.47450, 0.46630, + 0.45840, 0.45070, 0.44330, 0.43610, 0.42920, 0.42240, 3.542e-05, 0.37540, 0.3511}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.75190, 0.74970, 0.74760, 0.74550, 0.74330, 0.74120, 0.73920, + 0.73710, 0.735, 0.733, 0.73090, 0.72890, 0.72690, 0.72490, 0.723, 0.721, 0.719, 0.71710, 0.71520, 0.71320, 0.71130, 0.70940, + 0.70760, 0.70570, 0.702, 0.69830, 0.69470, 0.69110, 0.68760, 0.68410, 0.68060, 0.67720, 0.67380, 0.67050, 0.66720, 0.66390, 0.66060, + 0.65740, 0.65430, 0.65110, 0.648, 0.645, 0.64190, 0.63890, 0.63590, 0.633, 0.63010, 0.62720, 0.62430, 0.61730, 0.61040, 0.60370, + 0.59710, 0.59070, 0.58440, 0.57830, 0.57230, 0.56640, 0.56070, 0.54950, 0.53880, 0.52850, 0.51870, 0.50910, 0.5, 0.49120, 0.48260, + 0.47440, 0.46650, 0.45880, 0.45140, 0.44420, 0.43720, 3.542e-05, 0.38860, 0.3633}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.77630, 0.774, 0.77180, 0.76960, 0.76740, 0.76530, + 0.76310, 0.761, 0.75890, 0.75670, 0.75470, 0.75260, 0.75050, 0.74840, 0.74640, 0.74440, 0.74240, 0.74040, 0.73840, 0.73640, 0.73440, + 0.73250, 0.73050, 0.72670, 0.72290, 0.71910, 0.71540, 0.71170, 0.70810, 0.70450, 0.701, 0.69750, 0.694, 0.69060, 0.68720, 0.68380, + 0.68050, 0.67720, 0.674, 0.67070, 0.66760, 0.66440, 0.66130, 0.65820, 0.65510, 0.65210, 0.64910, 0.64610, 0.63880, 0.63170, 0.62480, + 0.618, 0.61130, 0.60480, 0.59850, 0.59230, 0.58620, 0.58020, 0.56870, 0.55760, 0.547, 0.53670, 0.52690, 0.51740, 0.50820, 0.49940, + 0.49090, 0.48270, 0.47470, 0.46710, 0.45960, 0.45240, 3.542e-05, 0.40210, 0.3759}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.80130, 0.799, 0.79670, 0.79440, 0.79220, + 0.78990, 0.78770, 0.78550, 0.78330, 0.78110, 0.779, 0.77680, 0.77470, 0.77260, 0.77050, 0.76840, 0.76630, 0.76420, 0.76220, 0.76010, + 0.75810, 0.75610, 0.75210, 0.74820, 0.74430, 0.74040, 0.73660, 0.73280, 0.72910, 0.72540, 0.72180, 0.71820, 0.71470, 0.71110, 0.70770, + 0.70420, 0.70080, 0.69740, 0.69410, 0.69080, 0.68750, 0.68430, 0.68110, 0.67790, 0.67480, 0.67170, 0.66860, 0.661, 0.65370, 0.64650, + 0.63940, 0.63250, 0.62580, 0.61920, 0.61280, 0.60650, 0.60030, 0.58840, 0.57690, 0.56590, 0.55530, 0.54510, 0.53530, 0.52580, 0.51670, + 0.50790, 0.49940, 0.49110, 0.48320, 0.47550, 0.468, 3.542e-05, 0.41590, 0.3889}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.82690, 0.82460, 0.82220, 0.81990, + 0.81750, 0.81520, 0.81290, 0.81070, 0.80840, 0.80620, 0.80390, 0.80170, 0.79950, 0.79730, 0.79520, 0.793, 0.79090, 0.78870, 0.78660, + 0.78450, 0.78240, 0.77830, 0.77420, 0.77010, 0.76610, 0.76220, 0.75830, 0.75440, 0.75060, 0.74690, 0.74310, 0.73940, 0.73580, 0.73220, + 0.72860, 0.72510, 0.72160, 0.71810, 0.71470, 0.71130, 0.708, 0.70470, 0.70140, 0.69810, 0.69490, 0.69170, 0.68390, 0.67630, 0.66880, + 0.66150, 0.65440, 0.64740, 0.64060, 0.63390, 0.62740, 0.621, 0.60870, 0.59680, 0.58540, 0.57440, 0.56390, 0.55370, 0.54390, 0.53450, + 0.52530, 0.51650, 0.508, 0.49980, 0.49180, 0.48410, 3.542e-05, 0.43020, 0.4023}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.85320, 0.85080, 0.84840, + 0.846, 0.84360, 0.84120, 0.83880, 0.83650, 0.83410, 0.83180, 0.82950, 0.82730, 0.825, 0.82270, 0.82050, 0.81830, 0.81610, 0.81390, + 0.81170, 0.80950, 0.80520, 0.801, 0.79680, 0.79260, 0.78850, 0.78450, 0.78050, 0.77650, 0.77260, 0.76880, 0.76490, 0.76120, 0.75740, + 0.75370, 0.75010, 0.74650, 0.74290, 0.73930, 0.73580, 0.73240, 0.72890, 0.72550, 0.72210, 0.71880, 0.71550, 0.70740, 0.69950, 0.69180, + 0.68420, 0.67680, 0.66960, 0.66260, 0.65570, 0.64890, 0.64230, 0.62950, 0.61720, 0.60540, 0.59410, 0.58310, 0.57260, 0.56250, 0.55270, + 0.54330, 0.53420, 0.52540, 0.51690, 0.50860, 0.50060, 3.542e-05, 0.44490, 0.416}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.88020, 0.87770, + 0.87520, 0.87270, 0.87030, 0.86780, 0.86540, 0.86290, 0.86050, 0.85820, 0.85580, 0.85340, 0.85110, 0.84880, 0.84650, 0.84420, 0.84190, + 0.83960, 0.83740, 0.83290, 0.82850, 0.82420, 0.81990, 0.81560, 0.81140, 0.80730, 0.80320, 0.79920, 0.79510, 0.79120, 0.78730, 0.78340, + 0.77960, 0.77580, 0.772, 0.76830, 0.76460, 0.761, 0.75740, 0.75390, 0.75030, 0.74680, 0.74340, 0.74, 0.73160, 0.72340, 0.71540, + 0.70760, 0.69990, 0.69240, 0.68510, 0.678, 0.671, 0.66420, 0.65090, 0.63820, 0.626, 0.61430, 0.603, 0.59210, 0.58160, 0.57150, + 0.56170, 0.55230, 0.54320, 0.53440, 0.52590, 0.51760, 3.542e-05, 0.46, 0.4301}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.90790, + 0.90530, 0.90270, 0.90020, 0.89760, 0.89510, 0.89260, 0.89010, 0.88760, 0.88520, 0.88270, 0.88030, 0.87790, 0.87550, 0.87310, 0.87070, + 0.86840, 0.86610, 0.86140, 0.85690, 0.85240, 0.84790, 0.84350, 0.83920, 0.83490, 0.83060, 0.82640, 0.82230, 0.81820, 0.81410, 0.81010, + 0.80610, 0.80220, 0.79830, 0.79450, 0.79070, 0.78690, 0.78320, 0.77950, 0.77590, 0.77220, 0.76870, 0.76510, 0.75640, 0.74790, 0.73970, + 0.73160, 0.72370, 0.71590, 0.70840, 0.701, 0.69380, 0.68670, 0.673, 0.65980, 0.64720, 0.635, 0.62340, 0.61210, 0.60130, 0.59080, + 0.58070, 0.571, 0.56150, 0.55240, 0.54360, 0.53510, 3.542e-05, 0.47550, 0.4446}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.93630, 0.93360, 0.931, 0.92830, 0.92570, 0.92310, 0.92050, 0.91790, 0.91540, 0.91280, 0.91030, 0.90780, 0.90530, 0.90290, 0.90040, + 0.898, 0.89560, 0.89080, 0.886, 0.88140, 0.87680, 0.87220, 0.86770, 0.86320, 0.85880, 0.85450, 0.85020, 0.84590, 0.84170, 0.83760, + 0.83340, 0.82940, 0.82540, 0.82140, 0.81740, 0.81350, 0.80970, 0.80590, 0.80210, 0.79840, 0.79460, 0.791, 0.782, 0.77320, 0.76460, + 0.75620, 0.74810, 0.74010, 0.73220, 0.72460, 0.71710, 0.70980, 0.69560, 0.682, 0.66890, 0.65640, 0.64430, 0.63270, 0.62150, 0.61060, + 0.60020, 0.59010, 0.58040, 0.571, 0.56190, 0.553, 3.542e-05, 0.49140, 0.4594}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.96540, 0.96260, 0.95990, 0.95720, 0.95450, 0.95180, 0.94910, 0.94650, 0.94380, 0.94120, 0.93860, 0.93610, 0.93350, 0.93090, + 0.92840, 0.92590, 0.92090, 0.916, 0.91120, 0.90640, 0.90170, 0.897, 0.89240, 0.88780, 0.88330, 0.87890, 0.87450, 0.87010, 0.86580, + 0.86150, 0.85730, 0.85320, 0.849, 0.845, 0.84090, 0.83690, 0.833, 0.82910, 0.82520, 0.82140, 0.81760, 0.80830, 0.79920, 0.79030, + 0.78160, 0.77310, 0.76490, 0.75680, 0.74890, 0.74110, 0.73360, 0.71890, 0.70480, 0.69130, 0.67830, 0.66580, 0.65380, 0.64220, 0.631, + 0.62020, 0.60980, 0.59970, 0.59, 0.58060, 0.57150, 3.542e-05, 0.50780, 0.4747}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.99520, 0.99240, 0.98950, 0.98670, 0.984, 0.98120, 0.97840, 0.97570, 0.973, 0.97030, 0.96760, 0.965, 0.96230, + 0.95970, 0.95710, 0.952, 0.94690, 0.94190, 0.93690, 0.932, 0.92720, 0.92240, 0.91770, 0.913, 0.90840, 0.90380, 0.89930, 0.89480, + 0.89040, 0.88610, 0.88170, 0.87750, 0.87320, 0.86910, 0.86490, 0.86080, 0.85680, 0.85280, 0.84880, 0.84490, 0.83520, 0.82580, 0.81670, + 0.80770, 0.79890, 0.79040, 0.782, 0.77380, 0.76580, 0.758, 0.74280, 0.72830, 0.71430, 0.70090, 0.68790, 0.67550, 0.66350, 0.652, + 0.64080, 0.63, 0.61960, 0.60960, 0.59980, 0.59040, 3.542e-05, 0.52460, 0.4905}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 1.026, 1.023, 1.02, 1.017, 1.014, 1.011, 1.008, 1.006, 1.003, 1.0, 0.99740, 0.99460, + 0.99190, 0.98920, 0.98390, 0.97860, 0.97340, 0.96830, 0.96320, 0.95820, 0.95320, 0.94830, 0.94350, 0.93870, 0.934, 0.92930, 0.92470, + 0.92010, 0.91560, 0.91110, 0.90670, 0.90230, 0.898, 0.89370, 0.88950, 0.88530, 0.88110, 0.877, 0.873, 0.863, 0.85330, 0.84380, + 0.83450, 0.82540, 0.81660, 0.80790, 0.79940, 0.79120, 0.78310, 0.76740, 0.75230, 0.73790, 0.724, 0.71060, 0.69780, 0.68540, 0.67350, + 0.66190, 0.65080, 0.64010, 0.62970, 0.61960, 0.60990, 3.542e-05, 0.54180, 0.5066}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 1.057, 1.054, 1.051, 1.048, 1.045, 1.042, 1.039, 1.036, 1.034, 1.031, 1.028, + 1.025, 1.022, 1.017, 1.011, 1.006, 1.0, 0.99520, 0.99, 0.98490, 0.97980, 0.97480, 0.96990, 0.965, 0.96010, 0.95530, + 0.95060, 0.94590, 0.94130, 0.93670, 0.93220, 0.92770, 0.92330, 0.91890, 0.91460, 0.91030, 0.906, 0.90180, 0.89150, 0.88140, 0.87160, + 0.862, 0.85260, 0.84350, 0.83450, 0.82580, 0.81720, 0.80880, 0.79260, 0.77710, 0.76210, 0.74780, 0.734, 0.72070, 0.70790, 0.69550, + 0.68360, 0.67210, 0.661, 0.65030, 0.63990, 0.62980, 3.542e-05, 0.55960, 0.5232}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 1.089, 1.086, 1.083, 1.08, 1.077, 1.074, 1.071, 1.068, 1.065, 1.062, + 1.059, 1.056, 1.05, 1.045, 1.039, 1.034, 1.028, 1.023, 1.017, 1.012, 1.007, 1.002, 0.99680, 0.99180, 0.98680, + 0.982, 0.97710, 0.97230, 0.96760, 0.96290, 0.95830, 0.95370, 0.94910, 0.94470, 0.94020, 0.93580, 0.93150, 0.92080, 0.91040, 0.90020, + 0.89030, 0.88060, 0.87110, 0.86190, 0.85280, 0.844, 0.83530, 0.81850, 0.80250, 0.787, 0.77220, 0.75790, 0.74420, 0.731, 0.71820, + 0.70590, 0.694, 0.68260, 0.67150, 0.66070, 0.65030, 3.542e-05, 0.57780, 0.5402}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.122, 1.119, 1.116, 1.113, 1.109, 1.106, 1.103, 1.1, 1.097, + 1.094, 1.091, 1.085, 1.079, 1.073, 1.068, 1.062, 1.056, 1.051, 1.045, 1.04, 1.035, 1.03, 1.024, 1.019, + 1.014, 1.009, 1.004, 0.99930, 0.99440, 0.98960, 0.98490, 0.98020, 0.97560, 0.971, 0.96640, 0.96190, 0.95090, 0.94010, 0.92960, + 0.91930, 0.90930, 0.89950, 0.88990, 0.88060, 0.87140, 0.86250, 0.84510, 0.82850, 0.81260, 0.79730, 0.78250, 0.76830, 0.75470, 0.74150, + 0.72880, 0.71650, 0.70470, 0.69320, 0.68210, 0.67140, 3.542e-05, 0.59640, 0.5576}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.156, 1.152, 1.149, 1.146, 1.143, 1.139, 1.136, 1.133, + 1.13, 1.127, 1.121, 1.115, 1.109, 1.103, 1.097, 1.091, 1.085, 1.08, 1.074, 1.069, 1.063, 1.058, 1.052, + 1.047, 1.042, 1.037, 1.032, 1.027, 1.022, 1.017, 1.012, 1.007, 1.003, 0.99790, 0.99320, 0.98180, 0.97060, 0.95970, + 0.94910, 0.93880, 0.92860, 0.91880, 0.90910, 0.89960, 0.89040, 0.87250, 0.85530, 0.83880, 0.823, 0.80780, 0.79310, 0.779, 0.76540, + 0.75230, 0.73960, 0.72740, 0.71550, 0.70410, 0.693, 3.542e-05, 0.61560, 0.5755}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.19, 1.187, 1.183, 1.18, 1.177, 1.173, 1.17, + 1.167, 1.164, 1.157, 1.151, 1.145, 1.139, 1.133, 1.127, 1.121, 1.115, 1.109, 1.103, 1.098, 1.092, 1.087, + 1.081, 1.076, 1.071, 1.065, 1.06, 1.055, 1.05, 1.045, 1.04, 1.035, 1.03, 1.025, 1.013, 1.002, 0.99070, + 0.97970, 0.969, 0.95860, 0.94840, 0.93840, 0.92860, 0.919, 0.90050, 0.88280, 0.86580, 0.84940, 0.83370, 0.81860, 0.804, 0.78990, + 0.77640, 0.76330, 0.75070, 0.73840, 0.72660, 0.71520, 3.542e-05, 0.63530, 0.5939}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.226, 1.222, 1.219, 1.215, 1.212, 1.208, + 1.205, 1.202, 1.195, 1.188, 1.182, 1.176, 1.169, 1.163, 1.157, 1.151, 1.145, 1.139, 1.133, 1.127, 1.122, + 1.116, 1.111, 1.105, 1.1, 1.094, 1.089, 1.084, 1.079, 1.073, 1.068, 1.063, 1.058, 1.046, 1.034, 1.023, + 1.011, 1.0, 0.98930, 0.97870, 0.96840, 0.95830, 0.94840, 0.92930, 0.911, 0.89340, 0.87650, 0.86030, 0.84470, 0.82960, 0.81510, + 0.80110, 0.78760, 0.77460, 0.76190, 0.74970, 0.73790, 3.542e-05, 0.65550, 0.6128}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.262, 1.258, 1.254, 1.251, 1.247, + 1.244, 1.24, 1.234, 1.227, 1.22, 1.213, 1.207, 1.201, 1.194, 1.188, 1.182, 1.176, 1.17, 1.164, 1.158, + 1.152, 1.146, 1.141, 1.135, 1.129, 1.124, 1.118, 1.113, 1.108, 1.102, 1.097, 1.092, 1.08, 1.067, 1.055, + 1.043, 1.032, 1.021, 1.01, 0.99920, 0.98880, 0.97860, 0.95890, 0.93990, 0.92180, 0.90440, 0.88760, 0.87150, 0.85590, 0.84090, + 0.82650, 0.81260, 0.79910, 0.78610, 0.77350, 0.76130, 3.542e-05, 0.67620, 0.6321}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.299, 1.295, 1.291, 1.288, + 1.284, 1.28, 1.273, 1.266, 1.259, 1.252, 1.246, 1.239, 1.232, 1.226, 1.22, 1.213, 1.207, 1.201, 1.195, + 1.189, 1.183, 1.177, 1.171, 1.165, 1.16, 1.154, 1.149, 1.143, 1.138, 1.132, 1.127, 1.114, 1.101, 1.089, + 1.077, 1.065, 1.053, 1.042, 1.031, 1.02, 1.01, 0.98920, 0.96960, 0.95090, 0.93290, 0.91560, 0.89890, 0.88290, 0.86740, + 0.85250, 0.83810, 0.82420, 0.81080, 0.79780, 0.78520, 3.542e-05, 0.69740, 0.652}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.337, 1.333, 1.329, + 1.325, 1.321, 1.314, 1.307, 1.3, 1.292, 1.285, 1.279, 1.272, 1.265, 1.258, 1.252, 1.245, 1.239, 1.233, + 1.227, 1.22, 1.214, 1.208, 1.202, 1.196, 1.191, 1.185, 1.179, 1.174, 1.168, 1.163, 1.149, 1.136, 1.123, + 1.111, 1.098, 1.086, 1.075, 1.063, 1.052, 1.041, 1.02, 1.0, 0.98080, 0.96220, 0.94430, 0.92710, 0.91060, 0.89460, + 0.87920, 0.86440, 0.85, 0.83620, 0.82280, 0.80980, 3.542e-05, 0.7192, 0.6723}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.375, 1.371, + 1.367, 1.364, 1.356, 1.348, 1.341, 1.334, 1.326, 1.319, 1.312, 1.305, 1.298, 1.292, 1.285, 1.278, 1.272, + 1.265, 1.259, 1.253, 1.246, 1.24, 1.234, 1.228, 1.222, 1.216, 1.211, 1.205, 1.199, 1.185, 1.172, 1.158, + 1.145, 1.133, 1.12, 1.108, 1.097, 1.085, 1.074, 1.052, 1.031, 1.011, 0.99220, 0.97380, 0.956, 0.939, 0.92250, + 0.90660, 0.89130, 0.87650, 0.86220, 0.84840, 0.835, 3.542e-05, 0.7416, 0.6932}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.415, + 1.411, 1.407, 1.399, 1.391, 1.383, 1.376, 1.368, 1.361, 1.354, 1.346, 1.339, 1.332, 1.325, 1.319, 1.312, + 1.305, 1.299, 1.292, 1.286, 1.279, 1.273, 1.267, 1.261, 1.255, 1.249, 1.243, 1.237, 1.222, 1.208, 1.195, + 1.181, 1.168, 1.155, 1.143, 1.131, 1.119, 1.107, 1.085, 1.063, 1.043, 1.023, 1.004, 0.98570, 0.96810, 0.95110, + 0.93470, 0.91890, 0.90360, 0.88890, 0.87460, 0.86080, 3.542e-05, 0.7645, 0.7146}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 1.455, 1.451, 1.443, 1.435, 1.427, 1.419, 1.411, 1.404, 1.396, 1.389, 1.381, 1.374, 1.367, 1.36, 1.353, + 1.346, 1.339, 1.332, 1.326, 1.319, 1.313, 1.306, 1.3, 1.294, 1.287, 1.281, 1.275, 1.26, 1.246, 1.232, + 1.218, 1.204, 1.191, 1.178, 1.166, 1.154, 1.142, 1.118, 1.096, 1.075, 1.055, 1.035, 1.016, 0.99790, 0.98040, + 0.96350, 0.94720, 0.93140, 0.91620, 0.90150, 0.88730, 3.542e-05, 0.7879, 0.7365}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.497, 1.488, 1.48, 1.472, 1.464, 1.456, 1.448, + 1.44, 1.432, 1.425, 1.417, 1.41, 1.402, 1.395, 1.388, 1.381, 1.374, 1.367, 1.36, 1.354, 1.347, 1.34, 1.334, 1.327, + 1.321, 1.315, 1.299, 1.284, 1.27, 1.255, 1.242, 1.228, 1.215, 1.202, 1.189, 1.177, 1.153, 1.13, 1.108, 1.087, 1.067, + 1.047, 1.028, 1.01, 0.993, 0.97620, 0.95990, 0.94420, 0.92910, 0.91440, 3.542e-05, 0.812, 0.759}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.583, 1.574, 1.565, 1.556, 1.548, 1.539, + 1.531, 1.522, 1.514, 1.506, 1.498, 1.49, 1.483, 1.475, 1.468, 1.46, 1.453, 1.445, 1.438, 1.431, 1.424, 1.417, 1.41, + 1.404, 1.397, 1.38, 1.364, 1.349, 1.334, 1.319, 1.304, 1.29, 1.276, 1.263, 1.25, 1.224, 1.2, 1.177, 1.154, 1.133, + 1.112, 1.092, 1.073, 1.054, 1.036, 1.019, 1.002, 0.98630, 0.97070, 3.542e-05, 0.8619, 0.8056}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.673, 1.663, 1.654, 1.644, 1.635, + 1.626, 1.617, 1.609, 1.6, 1.592, 1.583, 1.575, 1.567, 1.559, 1.551, 1.543, 1.535, 1.527, 1.52, 1.512, 1.505, 1.498, + 1.49, 1.483, 1.466, 1.449, 1.432, 1.416, 1.4, 1.385, 1.37, 1.355, 1.341, 1.327, 1.299, 1.273, 1.249, 1.225, 1.202, + 1.18, 1.159, 1.138, 1.119, 1.1, 1.081, 1.063, 1.046, 1.03, 3.542e-05, 0.9143, 0.8546}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.766, 1.756, 1.746, 1.737, + 1.727, 1.717, 1.708, 1.699, 1.69, 1.681, 1.672, 1.663, 1.655, 1.646, 1.638, 1.629, 1.621, 1.613, 1.605, 1.597, 1.589, + 1.582, 1.574, 1.555, 1.537, 1.519, 1.502, 1.485, 1.469, 1.453, 1.437, 1.422, 1.407, 1.378, 1.351, 1.324, 1.299, 1.274, + 1.251, 1.229, 1.207, 1.186, 1.166, 1.146, 1.128, 1.109, 1.092, 3.542e-05, 0.9692, 0.9059}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.864, 1.854, 1.843, + 1.833, 1.823, 1.813, 1.803, 1.793, 1.784, 1.774, 1.765, 1.755, 1.746, 1.737, 1.729, 1.72, 1.711, 1.703, 1.694, 1.686, + 1.678, 1.669, 1.649, 1.63, 1.611, 1.593, 1.575, 1.557, 1.54, 1.524, 1.507, 1.492, 1.461, 1.432, 1.403, 1.377, 1.351, + 1.326, 1.302, 1.279, 1.257, 1.235, 1.215, 1.195, 1.175, 1.157, 3.542e-05, 1.027, 0.9597}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.967, 1.955, 1.944, 1.933, 1.923, 1.912, 1.902, 1.891, 1.881, 1.871, + 1.861, 1.852, 1.842, 1.833, 1.823, 1.814, 1.805, 1.796, 1.787, 1.778, 1.77, 1.748, 1.728, 1.707, 1.688, 1.669, 1.65, 1.632, 1.614, + 1.597, 1.58, 1.548, 1.516, 1.487, 1.458, 1.431, 1.404, 1.379, 1.354, 1.331, 1.308, 1.286, 1.265, 1.245, 1.225, 3.542e-05, 1.087, 1.016}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.074, 2.062, 2.05, 2.038, 2.027, 2.016, 2.005, 1.994, 1.983, + 1.973, 1.962, 1.952, 1.942, 1.932, 1.922, 1.912, 1.903, 1.893, 1.884, 1.875, 1.852, 1.83, 1.809, 1.788, 1.767, 1.748, 1.728, 1.709, + 1.691, 1.673, 1.639, 1.605, 1.574, 1.543, 1.514, 1.486, 1.459, 1.434, 1.409, 1.384, 1.361, 1.339, 1.317, 1.296, 3.542e-05, 1.15, 1.075}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.185, 2.172, 2.16, 2.148, 2.136, 2.124, 2.112, 2.101, + 2.09, 2.079, 2.068, 2.057, 2.046, 2.036, 2.025, 2.015, 2.005, 1.995, 1.985, 1.961, 1.937, 1.915, 1.892, 1.871, 1.85, 1.829, 1.809, + 1.79, 1.771, 1.734, 1.699, 1.665, 1.633, 1.602, 1.572, 1.544, 1.516, 1.49, 1.464, 1.44, 1.416, 1.393, 1.371, 3.542e-05, 1.216, 1.137}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.301, 2.288, 2.275, 2.262, 2.249, 2.237, 2.225, + 2.213, 2.201, 2.189, 2.177, 2.166, 2.155, 2.144, 2.133, 2.122, 2.111, 2.101, 2.075, 2.05, 2.026, 2.002, 1.979, 1.957, 1.935, 1.914, + 1.893, 1.873, 1.834, 1.796, 1.761, 1.727, 1.694, 1.662, 1.632, 1.603, 1.575, 1.548, 1.522, 1.497, 1.473, 1.449, 3.542e-05, 1.286, 1.201}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.422, 2.408, 2.394, 2.381, 2.367, 2.354, + 2.341, 2.329, 2.316, 2.304, 2.292, 2.28, 2.268, 2.256, 2.245, 2.233, 2.222, 2.195, 2.168, 2.142, 2.117, 2.093, 2.069, 2.046, 2.023, + 2.001, 1.98, 1.938, 1.899, 1.861, 1.825, 1.79, 1.757, 1.725, 1.694, 1.664, 1.635, 1.608, 1.581, 1.556, 1.531, 3.542e-05, 1.358, 1.269}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.548, 2.533, 2.519, 2.505, 2.491, + 2.477, 2.463, 2.45, 2.437, 2.424, 2.411, 2.398, 2.386, 2.373, 2.361, 2.349, 2.32, 2.292, 2.264, 2.238, 2.212, 2.186, 2.162, 2.138, + 2.114, 2.091, 2.048, 2.006, 1.965, 1.927, 1.89, 1.855, 1.821, 1.789, 1.757, 1.727, 1.698, 1.67, 1.642, 1.616, 3.542e-05, 1.433, 1.339}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.679, 2.664, 2.648, 2.633, + 2.619, 2.604, 2.59, 2.576, 2.562, 2.548, 2.535, 2.522, 2.508, 2.495, 2.483, 2.452, 2.421, 2.392, 2.364, 2.336, 2.309, 2.283, 2.258, + 2.233, 2.209, 2.162, 2.117, 2.075, 2.034, 1.995, 1.958, 1.922, 1.888, 1.854, 1.822, 1.792, 1.762, 1.733, 1.705, 3.542e-05, 1.512, 1.413}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.816, 2.8, 2.783, + 2.768, 2.752, 2.737, 2.722, 2.707, 2.692, 2.678, 2.664, 2.65, 2.636, 2.622, 2.589, 2.557, 2.526, 2.496, 2.466, 2.438, 2.41, 2.383, + 2.357, 2.331, 2.282, 2.234, 2.189, 2.146, 2.105, 2.066, 2.028, 1.991, 1.956, 1.922, 1.89, 1.858, 1.828, 1.799, 3.542e-05, 1.595, 1.490}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.958, 2.941, + 2.924, 2.907, 2.891, 2.875, 2.859, 2.843, 2.828, 2.813, 2.798, 2.783, 2.769, 2.733, 2.699, 2.666, 2.634, 2.603, 2.572, 2.543, 2.514, + 2.486, 2.459, 2.407, 2.357, 2.309, 2.263, 2.22, 2.178, 2.138, 2.099, 2.062, 2.026, 1.992, 1.959, 1.927, 1.896, 3.542e-05, 1.681, 1.570}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3.106, + 3.088, 3.07, 3.052, 3.035, 3.018, 3.001, 2.985, 2.969, 2.953, 2.937, 2.922, 2.884, 2.848, 2.812, 2.778, 2.745, 2.713, 2.682, 2.651, + 2.622, 2.593, 2.537, 2.484, 2.434, 2.386, 2.34, 2.295, 2.253, 2.212, 2.173, 2.135, 2.099, 2.064, 2.03, 1.997, 3.542e-05, 1.77, 1.654}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 3.26, 3.24, 3.222, 3.203, 3.185, 3.167, 3.15, 3.132, 3.115, 3.099, 3.082, 3.042, 3.003, 2.966, 2.929, 2.894, 2.86, 2.827, 2.794, + 2.763, 2.732, 2.674, 2.618, 2.564, 2.513, 2.465, 2.418, 2.373, 2.33, 2.289, 2.249, 2.21, 2.173, 2.138, 2.103, 3.542e-05, 1.864, 1.741}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 3.419, 3.399, 3.379, 3.36, 3.341, 3.322, 3.304, 3.286, 3.268, 3.25, 3.207, 3.166, 3.126, 3.087, 3.05, 3.014, 2.978, 2.944, + 2.911, 2.878, 2.816, 2.757, 2.7, 2.646, 2.595, 2.546, 2.498, 2.453, 2.409, 2.367, 2.326, 2.287, 2.25, 2.213, 3.542e-05, 1.961, 1.832}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 3.585, 3.564, 3.543, 3.523, 3.503, 3.483, 3.464, 3.445, 3.426, 3.38, 3.336, 3.294, 3.253, 3.213, 3.174, 3.137, 3.1, + 3.065, 3.031, 2.965, 2.902, 2.842, 2.785, 2.731, 2.679, 2.629, 2.581, 2.535, 2.49, 2.448, 2.406, 2.367, 2.328, 3.542e-05, 2.063, 1.926}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 3.758, 3.735, 3.713, 3.692, 3.671, 3.65, 3.63, 3.61, 3.561, 3.514, 3.469, 3.425, 3.383, 3.342, 3.302, 3.264, + 3.226, 3.19, 3.12, 3.054, 2.99, 2.93, 2.873, 2.818, 2.765, 2.714, 2.665, 2.619, 2.574, 2.53, 2.488, 2.448, 3.542e-05, 2.168, 2.025}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 3.937, 3.913, 3.89, 3.867, 3.845, 3.823, 3.802, 3.75, 3.7, 3.652, 3.605, 3.561, 3.517, 3.475, 3.434, + 3.394, 3.356, 3.282, 3.212, 3.145, 3.081, 3.02, 2.962, 2.907, 2.853, 2.802, 2.752, 2.705, 2.659, 2.615, 2.573, 3.542e-05, 2.278, 2.127}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 4.122, 4.097, 4.073, 4.049, 4.026, 4.003, 3.948, 3.895, 3.843, 3.794, 3.746, 3.7, 3.655, 3.612, + 3.57, 3.529, 3.451, 3.376, 3.306, 3.238, 3.174, 3.113, 3.054, 2.998, 2.944, 2.892, 2.842, 2.794, 2.747, 2.702, 3.542e-05, 2.392, 2.234}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 4.315, 4.289, 4.263, 4.238, 4.214, 4.155, 4.098, 4.043, 3.991, 3.94, 3.891, 3.843, 3.797, + 3.753, 3.709, 3.627, 3.548, 3.473, 3.402, 3.335, 3.27, 3.208, 3.148, 3.091, 3.037, 2.984, 2.933, 2.884, 2.837, 3.542e-05, 2.511, 2.344}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 4.515, 4.487, 4.46, 4.434, 4.371, 4.31, 4.252, 4.196, 4.142, 4.09, 4.04, 3.991, + 3.944, 3.898, 3.81, 3.727, 3.648, 3.573, 3.501, 3.433, 3.368, 3.305, 3.245, 3.187, 3.132, 3.079, 3.027, 2.977, 3.542e-05, 2.635, 2.459}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 4.722, 4.693, 4.665, 4.597, 4.532, 4.47, 4.411, 4.353, 4.298, 4.244, 4.193, + 4.143, 4.094, 4.001, 3.913, 3.83, 3.751, 3.675, 3.603, 3.534, 3.468, 3.405, 3.344, 3.286, 3.23, 3.176, 3.123, 3.542e-05, 2.763, 2.579}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 4.936, 4.906, 4.833, 4.764, 4.698, 4.635, 4.574, 4.515, 4.458, 4.403, + 4.35, 4.298, 4.2, 4.107, 4.019, 3.935, 3.856, 3.78, 3.707, 3.638, 3.571, 3.507, 3.446, 3.387, 3.33, 3.275, 3.542e-05, 2.896, 2.703}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 5.159, 5.081, 5.007, 4.936, 4.868, 4.803, 4.741, 4.681, 4.622, + 4.566, 4.512, 4.407, 4.309, 4.216, 4.128, 4.044, 3.964, 3.887, 3.814, 3.744, 3.677, 3.612, 3.55, 3.49, 3.432, 3.542e-05, 3.035, 2.832}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 5.75, 5.662, 5.579, 5.499, 5.423, 5.35, 5.28, 5.212, + 5.147, 5.084, 4.964, 4.851, 4.744, 4.643, 4.547, 4.456, 4.369, 4.286, 4.206, 4.13, 4.056, 3.986, 3.918, 3.853, 3.542e-05, 3.404, 3.176}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 6.395, 6.296, 6.202, 6.112, 6.027, 5.945, 5.866, + 5.79, 5.717, 5.579, 5.449, 5.327, 5.211, 5.102, 4.998, 4.898, 4.804, 4.714, 4.627, 4.544, 4.464, 4.388, 4.314, 3.542e-05, 3.808, 3.552}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 7.098, 6.985, 6.879, 6.779, 6.683, 6.591, + 6.503, 6.418, 6.258, 6.108, 5.968, 5.836, 5.711, 5.593, 5.48, 5.373, 5.27, 5.172, 5.078, 4.988, 4.902, 4.819, 3.542e-05, 4.25, 3.962}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 7.861, 7.734, 7.615, 7.502, 7.395, + 7.292, 7.193, 7.008, 6.835, 6.674, 6.523, 6.38, 6.245, 6.118, 5.996, 5.88, 5.769, 5.663, 5.561, 5.464, 5.37, 3.542e-05, 4.732, 4.410}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 8.69, 8.547, 8.413, 8.286, + 8.166, 8.051, 7.835, 7.636, 7.451, 7.278, 7.115, 6.961, 6.816, 6.678, 6.547, 6.421, 6.302, 6.187, 6.078, 5.972, 3.542e-05, 5.257, 4.897}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 9.588, 9.428, 9.277, + 9.135, 9.0, 8.749, 8.519, 8.305, 8.106, 7.92, 7.745, 7.58, 7.423, 7.275, 7.133, 6.998, 6.87, 6.746, 6.628, 3.542e-05, 5.827, 5.425}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 10.56, 10.38, + 10.21, 10.05, 9.759, 9.491, 9.244, 9.016, 8.803, 8.603, 8.415, 8.238, 8.069, 7.91, 7.758, 7.613, 7.474, 7.341, 3.542e-05, 6.445, 5.998}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 11.62, + 11.41, 11.22, 10.88, 10.56, 10.28, 10.01, 9.769, 9.541, 9.328, 9.126, 8.936, 8.756, 8.584, 8.421, 8.265, 8.116, 3.542e-05, 7.115, 6.618}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 12.75, 12.53, 12.11, 11.75, 11.41, 11.11, 10.83, 10.57, 10.32, 10.1, 9.88, 9.676, 9.483, 9.299, 9.124, 8.957, 3.542e-05, 7.84, 7.288}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 13.99, 13.49, 13.05, 12.67, 12.31, 11.99, 11.69, 11.41, 11.15, 10.91, 10.68, 10.46, 10.25, 10.06, 9.869, 3.542e-05, 8.623, 8.011}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 16.75, 16.12, 15.58, 15.1, 14.66, 14.26, 13.9, 13.56, 13.25, 12.95, 12.67, 12.41, 12.16, 11.93, 3.542e-05, 10.38, 9.628}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 19.97, 19.17, 18.49, 17.89, 17.36, 16.87, 16.43, 16.02, 15.64, 15.28, 14.95, 14.63, 14.34, 3.542e-05, 12.42, 11.5}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 23.71, 22.7, 21.85, 21.1, 20.45, 19.85, 19.31, 18.81, 18.35, 17.93, 17.53, 17.15, 3.542e-05, 14.77, 13.65}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 28.07, 26.78, 25.71, 24.79, 23.97, 23.25, 22.59, 21.99, 21.44, 20.93, 20.45, 3.542e-05, 17.48, 16.12}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 33.16, 31.5, 30.15, 29.0, 28.0, 27.11, 26.31, 25.59, 24.92, 24.31, 3.542e-05, 20.6, 18.94}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 39.13, 36.97, 35.25, 33.82, 32.58, 31.5, 30.53, 29.65, 28.86, 3.542e-05, 24.19, 22.16}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 46.17, 43.33, 41.13, 39.33, 37.8, 36.47, 35.29, 34.24, 3.542e-05, 28.31, 25.84}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 54.54, 50.75, 47.92, 45.65, 43.75, 42.11, 40.68, 3.542e-05, 33.07, 30.03}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 64.64, 59.47, 55.78, 52.9, 50.53, 48.51, 3.542e-05, 38.55, 34.81}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 77.05, 69.8, 64.93, 61.24, 58.27, 3.542e-05, 44.92, 40.28}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 92.76, 82.18, 75.63, 70.87, 3.542e-05, 52.35, 46.54}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 113.6, 97.22, 88.27, 3.542e-05, 61.12, 53.76}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 143.9, 115.8, 3.542e-05, 71.6, 62.15}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 201.8, 3.542e-05, 84.38, 71.99}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3.542e-05, 148.4, 115.1}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3.542e-05, 201.7, 144.2}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3.542e-05, 270.9, 177.8}} + }; +#endif // UNUSED_FLUID_PROPS + } // namespace Fluid } // namespace EnergyPlus diff --git a/src/EnergyPlus/FluidProperties.hh b/src/EnergyPlus/FluidProperties.hh index 3d76c7bbe8f..7e5fd99334a 100644 --- a/src/EnergyPlus/FluidProperties.hh +++ b/src/EnergyPlus/FluidProperties.hh @@ -99,11 +99,30 @@ namespace FluidProperties { std::uint64_t constexpr t_sh_cache_mask = (t_sh_cache_size - 1); #endif - struct RefrigerantData + enum class RefrigError + { + Invalid = -1, + SatTemp, + SatPress, + SatTempDensity, + SatSupEnthalpy, + SatSupEnthalpyTemp, + SatSupEnthalpyPress, + SatSupPress, + SatSupPressTemp, + SatSupPressEnthalpy, + SatSupDensity, + SatSupDensityTemp, + SatSupDensityPress, + Num + }; + + struct RefrigProps { // Members std::string Name; // Name of the refrigerant int Num = 0; + bool used = false; int NumPsPoints = 0; // Number of saturation pressure Real64 PsLowTempValue = 0.0; // Low Temperature Value for Ps (>0.0) @@ -163,6 +182,8 @@ namespace FluidProperties { Array2D HshValues; // Enthalpy of superheated gas at HshTemps, HshPress Array2D RhoshValues; // Density of superheated gas at HshTemps, HshPress + std::array errors; + Real64 getQuality(EnergyPlusData &state, Real64 Temperature, // actual temperature given as input Real64 Enthalpy, // actual enthalpy given as input @@ -214,7 +235,21 @@ namespace FluidProperties { std::string_view CalledFrom); // routine this function was called from (error messages) }; - struct GlycolRawData + enum class GlycolError + { + Invalid = -1, + SpecHeatLow, + SpecHeatHigh, + DensityLow, + DensityHigh, + ConductivityLow, + ConductivityHigh, + ViscosityLow, + ViscosityHigh, + Num + }; + + struct GlycolRawProps { // Members std::string Name; // Name of the glycol @@ -249,11 +284,12 @@ namespace FluidProperties { Array2D ViscValues; // viscosity values }; - struct GlycolData + struct GlycolProps { // Members std::string Name; // Name of the glycol mixture (used by other parts of code) int Num = 0; + bool used = false; std::string GlycolName; // Name of non-water fluid that is part of this mixture // (refers to ethylene glycol, propylene glycol, or user fluid) @@ -297,6 +333,8 @@ namespace FluidProperties { Array1D ViscTemps; // Temperatures for viscosity of glycol Array1D ViscValues; // viscosity values (mPa-s) + std::array errors; + #ifdef EP_cache_GlycolSpecificHeat Real64 getSpecificHeat_raw(EnergyPlusData &state, Real64 Temperature, // actual temperature given as input @@ -320,58 +358,6 @@ namespace FluidProperties { std::string_view CalledFrom); // routine this function was called from (error messages) }; - struct RefrigErrors - { - // Members - std::string Name; - int SatTempErrIndex = 0; // Index for Sat Temperature Error (Recurring errors) - int SatTempErrCount = 0; // Count for Sat Temperature Error (Recurring errors) - int SatPressErrIndex = 0; // Index for Sat Pressure Error (Recurring errors) - int SatPressErrCount = 0; // Count for Sat Pressure Error (Recurring errors) - int SatTempDensityErrIndex = 0; // Index for Sat Temperature (Density) Error (Recurring errors) - int SatTempDensityErrCount = 0; // Count for Sat Temperature (Density) Error (Recurring errors) - int SatSupEnthalpyErrIndex = 0; // Index for Sat Temperature (Density) Error (Recurring errors) - int SatSupEnthalpyErrCount = 0; // Count for Sat Temperature (Density) Error (Recurring errors) - int SatSupEnthalpyTempErrIndex = 0; // Index for Sat Temperature (Density) Error (Recurring errors) - int SatSupEnthalpyTempErrCount = 0; // Count for Sat Temperature (Density) Error (Recurring errors) - int SatSupEnthalpyPresErrIndex = 0; // Index for Sat Temperature (Density) Error (Recurring errors) - int SatSupEnthalpyPresErrCount = 0; // Count for Sat Temperature (Density) Error (Recurring errors) - int SatSupPressureErrIndex = 0; // Index for Sat Temperature (Density) Error (Recurring errors) - int SatSupPressureErrCount = 0; // Count for Sat Temperature (Density) Error (Recurring errors) - int SatSupPressureTempErrIndex = 0; // Index for Sat Temperature (Density) Error (Recurring errors) - int SatSupPressureTempErrCount = 0; // Count for Sat Temperature (Density) Error (Recurring errors) - int SatSupPressureEnthErrIndex = 0; // Index for Sat Temperature (Density) Error (Recurring errors) - int SatSupPressureEnthErrCount = 0; // Count for Sat Temperature (Density) Error (Recurring errors) - int SatSupDensityErrIndex = 0; // Index for Sat Temperature (Density) Error (Recurring errors) - int SatSupDensityErrCount = 0; // Count for Sat Temperature (Density) Error (Recurring errors) - int SatSupDensityTempErrIndex = 0; // Index for Sat Temperature (Density) Error (Recurring errors) - int SatSupDensityTempErrCount = 0; // Count for Sat Temperature (Density) Error (Recurring errors) - int SatSupDensityPresErrIndex = 0; // Index for Sat Temperature (Density) Error (Recurring errors) - int SatSupDensityPresErrCount = 0; // Count for Sat Temperature (Density) Error (Recurring errors) - }; - - struct GlycolErrors - { - // Members - std::string Name; // Which glycol this error structure is for - int SpecHeatLowErrIndex = 0; // Index for Specific Heat Low Error (Recurring errors) - int SpecHeatHighErrIndex = 0; // Index for Specific Heat High Error (Recurring errors) - int SpecHeatLowErrCount = 0; // Count for Specific Heat Low Error (Recurring errors) - int SpecHeatHighErrCount = 0; // Count for Specific Heat High Error (Recurring errors) - int DensityHighErrCount = 0; // Index for Density Low Error (Recurring errors) - int DensityLowErrIndex = 0; // Index for Density High Error (Recurring errors) - int DensityHighErrIndex = 0; // Count for Density Low Error (Recurring errors) - int DensityLowErrCount = 0; // Count for Density High Error (Recurring errors) - int ConductivityLowErrIndex = 0; // Index for Conductivity Low Error (Recurring errors) - int ConductivityHighErrIndex = 0; // Index for Conductivity High Error (Recurring errors) - int ConductivityLowErrCount = 0; // Count for Conductivity Low Error (Recurring errors) - int ConductivityHighErrCount = 0; // Count for Conductivity High Error (Recurring errors) - int ViscosityLowErrIndex = 0; // Index for Viscosity Low Error (Recurring errors) - int ViscosityHighErrIndex = 0; // Index for Viscosity High Error (Recurring errors) - int ViscosityLowErrCount = 0; // Count for Viscosity Low Error (Recurring errors) - int ViscosityHighErrCount = 0; // Count for Viscosity High Error (Recurring errors) - }; - struct cached_tsh { // Members @@ -567,10 +553,10 @@ namespace FluidProperties { } int GetRefrigNum(EnergyPlusData &state, std::string_view name); - RefrigerantData *GetRefrig(EnergyPlusData &state, std::string_view name); + RefrigProps *GetRefrig(EnergyPlusData &state, std::string_view name); int GetGlycolNum(EnergyPlusData &state, std::string_view name); - GlycolData *GetGlycol(EnergyPlusData &state, std::string_view name); + GlycolProps *GetGlycol(EnergyPlusData &state, std::string_view name); std::string GetGlycolNameByIndex(EnergyPlusData &state, int Idx); // carries in substance index @@ -600,26 +586,6 @@ namespace FluidProperties { void ReportOrphanFluids(EnergyPlusData &state); - void ReportFatalGlycolErrors(EnergyPlusData &state, - int NumGlycols, // Number of Glycols in input/data - int GlycolNum, // Glycol Index - bool DataPresent, // data is present for this fluid. - std::string_view GlycolName, // Name being reported - std::string_view RoutineName, // Routine name to show - std::string_view Property, // Property being requested - std::string_view CalledFrom // original called from (external to fluid properties) - ); - - void ReportFatalRefrigerantErrors(EnergyPlusData &state, - int NumRefrigerants, // Number of Refrigerants in input/data - int RefrigerantNum, // Refrigerant Index - bool DataPresent, // data is present for this fluid. - std::string_view RefrigerantName, // Name being reported - std::string_view RoutineName, // Routine name to show - std::string_view Property, // Property being requested - std::string_view CalledFrom // original called from (external to fluid properties) - ); - void GetFluidDensityTemperatureLimits(EnergyPlusData &state, int FluidIndex, Real64 &MinTempLimit, Real64 &MaxTempLimit); void GetFluidSpecificHeatTemperatureLimits(EnergyPlusData &state, int FluidIndex, Real64 &MinTempLimit, Real64 &MaxTempLimit); @@ -664,26 +630,16 @@ struct FluidData : BaseGlobalStruct bool DebugReportGlycols = false; bool DebugReportRefrigerants = false; int GlycolErrorLimitTest = 1; // how many times error is printed with details before recurring called - int RefrigerantErrorLimitTest = 1; // how many times error is printed with details before recurring called - Array1D_bool RefrigUsed; - Array1D_bool GlycolUsed; + int RefrigErrorLimitTest = 1; // how many times error is printed with details before recurring called - Array1D RefrigData; - Array1D RefrigErrorTracking; - Array1D GlyRawData; - Array1D GlycolData; - Array1D GlycolErrorTracking; + Array1D RefrigData; + Array1D GlyRawData; + Array1D GlycolData; + std::array glycolErrorLimits = {0, 0, 0, 0, 0, 0, 0, 0}; + int SatErrCountGetSupHeatEnthalpyRefrig = 0; int SatErrCountGetSupHeatDensityRefrig = 0; - int HighTempLimitErrGetSpecificHeatGlycol_raw = 0; - int LowTempLimitErrGetSpecificHeatGlycol_raw = 0; - int HighTempLimitErrGetDensityGlycol = 0; - int LowTempLimitErrGetDensityGlycol = 0; - int HighTempLimitErrGetConductivityGlycol = 0; - int LowTempLimitErrGetConductivityGlycol = 0; - int HighTempLimitErrGetViscosityGlycol = 0; - int LowTempLimitErrGetViscosityGlycol = 0; int TempLoRangeErrIndexGetQualityRefrig = 0; int TempHiRangeErrIndexGetQualityRefrig = 0; int TempRangeErrCountGetInterpolatedSatProp = 0; diff --git a/src/EnergyPlus/HVACVariableRefrigerantFlow.hh b/src/EnergyPlus/HVACVariableRefrigerantFlow.hh index 0c964296861..b1448855c2b 100644 --- a/src/EnergyPlus/HVACVariableRefrigerantFlow.hh +++ b/src/EnergyPlus/HVACVariableRefrigerantFlow.hh @@ -361,7 +361,7 @@ namespace HVACVariableRefrigerantFlow { Real64 OUEvapHeatRate; // Outdoor Unit Evaporator Heat Extract Rate, excluding piping loss [W] Real64 OUFanPower; // Outdoor unit fan power at real conditions[W] std::string refrigName; // Name of refrigerant, must match name in FluidName (see fluidpropertiesrefdata.idf) - FluidProperties::RefrigerantData *refrig; + FluidProperties::RefrigProps *refrig; Real64 RatedEvapCapacity; // Rated Evaporative Capacity [W] Real64 RatedHeatCapacity; // Rated Heating Capacity [W] Real64 RatedCompPower; // Rated Compressor Power [W] diff --git a/src/EnergyPlus/UtilityRoutines.hh b/src/EnergyPlus/UtilityRoutines.hh index 6017ba557b2..3bfc0caf4f1 100644 --- a/src/EnergyPlus/UtilityRoutines.hh +++ b/src/EnergyPlus/UtilityRoutines.hh @@ -220,6 +220,12 @@ void SummarizeErrors(EnergyPlusData &state); void ShowRecurringErrors(EnergyPlusData &state); +struct ErrorCountIndex +{ + int index = 0; + int count = 0; +}; + struct ErrorObjectHeader { std::string_view routineName; From ce283a328081cdc0539fa7c1afd7b7efccb61cd3 Mon Sep 17 00:00:00 2001 From: Rick Strand Date: Fri, 19 Jul 2024 16:45:15 -0500 Subject: [PATCH 41/68] 10299 Correction of Unit Test enum Correction of enum comparisons to eliminate errors in energyplus_tests --- tst/EnergyPlus/unit/SolarShading.unit.cc | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tst/EnergyPlus/unit/SolarShading.unit.cc b/tst/EnergyPlus/unit/SolarShading.unit.cc index 123369cd2d7..c4bc0c9044b 100644 --- a/tst/EnergyPlus/unit/SolarShading.unit.cc +++ b/tst/EnergyPlus/unit/SolarShading.unit.cc @@ -5984,7 +5984,7 @@ TEST_F(EnergyPlusFixture, SolarShadingTest_GetShadowingInputTest1) EXPECT_EQ(expectedOverlaps, state->dataSolarShading->MaxHCS); EXPECT_FALSE(state->dataSysVars->SutherlandHodgman); EXPECT_FALSE(state->dataSysVars->SlaterBarsky); - EXPECT_EQ(state->dataSysVars->shadingMethod, ShadingMethod::PolygonClipping); + EXPECT_ENUM_EQ(state->dataSysVars->shadingMethod, ShadingMethod::PolygonClipping); } TEST_F(EnergyPlusFixture, SolarShadingTest_GetShadowingInputTest2) @@ -6017,7 +6017,7 @@ TEST_F(EnergyPlusFixture, SolarShadingTest_GetShadowingInputTest2) EXPECT_EQ(expectedOverlaps, state->dataSolarShading->MaxHCS); EXPECT_TRUE(state->dataSysVars->SutherlandHodgman); EXPECT_FALSE(state->dataSysVars->SlaterBarsky); - EXPECT_EQ(state->dataSysVars->shadingMethod, ShadingMethod::PolygonClipping); + EXPECT_ENUM_EQ(state->dataSysVars->shadingMethod, ShadingMethod::PolygonClipping); } TEST_F(EnergyPlusFixture, SolarShadingTest_GetShadowingInputTest3) @@ -6050,7 +6050,7 @@ TEST_F(EnergyPlusFixture, SolarShadingTest_GetShadowingInputTest3) EXPECT_EQ(expectedOverlaps, state->dataSolarShading->MaxHCS); EXPECT_TRUE(state->dataSysVars->SutherlandHodgman); EXPECT_TRUE(state->dataSysVars->SlaterBarsky); - EXPECT_EQ(state->dataSysVars->shadingMethod, ShadingMethod::PolygonClipping); + EXPECT_ENUM_EQ(state->dataSysVars->shadingMethod, ShadingMethod::PolygonClipping); } TEST_F(EnergyPlusFixture, SolarShadingTest_GetShadowingInputTest4) @@ -6083,7 +6083,7 @@ TEST_F(EnergyPlusFixture, SolarShadingTest_GetShadowingInputTest4) EXPECT_EQ(expectedOverlaps, state->dataSolarShading->MaxHCS); EXPECT_FALSE(state->dataSysVars->SutherlandHodgman); EXPECT_FALSE(state->dataSysVars->SlaterBarsky); - EXPECT_EQ(state->dataSysVars->shadingMethod, ShadingMethod::PixelCounting); + EXPECT_ENUM_EQ(state->dataSysVars->shadingMethod, ShadingMethod::PixelCounting); } TEST_F(EnergyPlusFixture, SolarShadingTest_GetShadowingInputTest5) @@ -6116,7 +6116,7 @@ TEST_F(EnergyPlusFixture, SolarShadingTest_GetShadowingInputTest5) EXPECT_EQ(expectedOverlaps, state->dataSolarShading->MaxHCS); EXPECT_TRUE(state->dataSysVars->SutherlandHodgman); EXPECT_FALSE(state->dataSysVars->SlaterBarsky); - EXPECT_EQ(state->dataSysVars->shadingMethod, ShadingMethod::PixelCounting); + EXPECT_ENUM_EQ(state->dataSysVars->shadingMethod, ShadingMethod::PixelCounting); } TEST_F(EnergyPlusFixture, SolarShadingTest_GetShadowingInputTest6) @@ -6150,7 +6150,7 @@ TEST_F(EnergyPlusFixture, SolarShadingTest_GetShadowingInputTest6) EXPECT_EQ(expectedOverlaps, state->dataSolarShading->MaxHCS); EXPECT_TRUE(state->dataSysVars->SutherlandHodgman); EXPECT_TRUE(state->dataSysVars->SlaterBarsky); - EXPECT_EQ(state->dataSysVars->shadingMethod, ShadingMethod::PixelCounting); + EXPECT_ENUM_EQ(state->dataSysVars->shadingMethod, ShadingMethod::PixelCounting); std::string const error_string = delimited_string({" ** Warning ** ShadowCalculation: suspect Shading Calculation Update Frequency", " ** ~~~ ** Value entered=[56], Shadowing Calculations will be inaccurate."}); EXPECT_TRUE(compare_err_stream(error_string, true)); From a242572180f8674f4715360116312d43bff8b636 Mon Sep 17 00:00:00 2001 From: amirroth Date: Sat, 20 Jul 2024 07:00:07 -0400 Subject: [PATCH 42/68] GetInput cleanup --- src/EnergyPlus/Data/EnergyPlusData.cc-e | 831 ---- src/EnergyPlus/Data/EnergyPlusData.hh-e | 586 --- src/EnergyPlus/FluidProperties.cc | 4212 +++++++---------- src/EnergyPlus/FluidProperties.hh | 153 +- src/EnergyPlus/NodeInputManager.cc | 2 +- src/EnergyPlus/OutdoorAirUnit.cc | 2 +- src/EnergyPlus/PoweredInductionUnits.cc | 2 +- src/EnergyPlus/SteamBaseboardRadiator.cc | 2 +- src/EnergyPlus/SteamCoils.cc | 2 +- src/EnergyPlus/VentilatedSlab.cc | 2 +- .../unit/Fixtures/EnergyPlusFixture.cc | 1 - .../unit/HVACVariableRefrigerantFlow.unit.cc | 8 +- tst/EnergyPlus/unit/PlantUtilities.unit.cc | 8 +- tst/EnergyPlus/unit/SetPointManager.unit.cc | 8 +- tst/EnergyPlus/unit/UnitarySystem.unit.cc | 1 - tst/EnergyPlus/unit/WaterCoils.unit.cc | 9 - tst/EnergyPlus/unit/WaterThermalTanks.unit.cc | 2 +- .../unit/WaterToAirHeatPump.unit.cc | 117 +- 18 files changed, 1739 insertions(+), 4209 deletions(-) delete mode 100644 src/EnergyPlus/Data/EnergyPlusData.cc-e delete mode 100644 src/EnergyPlus/Data/EnergyPlusData.hh-e diff --git a/src/EnergyPlus/Data/EnergyPlusData.cc-e b/src/EnergyPlus/Data/EnergyPlusData.cc-e deleted file mode 100644 index 4c015de9731..00000000000 --- a/src/EnergyPlus/Data/EnergyPlusData.cc-e +++ /dev/null @@ -1,831 +0,0 @@ -// EnergyPlus, Copyright (c) 1996-2024, The Board of Trustees of the University of Illinois, -// The Regents of the University of California, through Lawrence Berkeley National Laboratory -// (subject to receipt of any required approvals from the U.S. Dept. of Energy), Oak Ridge -// National Laboratory, managed by UT-Battelle, Alliance for Sustainable Energy, LLC, and other -// contributors. All rights reserved. -// -// NOTICE: This Software was developed under funding from the U.S. Department of Energy and the -// U.S. Government consequently retains certain rights. As such, the U.S. Government has been -// granted for itself and others acting on its behalf a paid-up, nonexclusive, irrevocable, -// worldwide license in the Software to reproduce, distribute copies to the public, prepare -// derivative works, and perform publicly and display publicly, and to permit others to do so. -// -// Redistribution and use in source and binary forms, with or without modification, are permitted -// provided that the following conditions are met: -// -// (1) Redistributions of source code must retain the above copyright notice, this list of -// conditions and the following disclaimer. -// -// (2) Redistributions in binary form must reproduce the above copyright notice, this list of -// conditions and the following disclaimer in the documentation and/or other materials -// provided with the distribution. -// -// (3) Neither the name of the University of California, Lawrence Berkeley National Laboratory, -// the University of Illinois, U.S. Dept. of Energy nor the names of its contributors may be -// used to endorse or promote products derived from this software without specific prior -// written permission. -// -// (4) Use of EnergyPlus(TM) Name. If Licensee (i) distributes the software in stand-alone form -// without changes from the version obtained under this License, or (ii) Licensee makes a -// reference solely to the software portion of its product, Licensee must refer to the -// software as "EnergyPlus version X" software, where "X" is the version number Licensee -// obtained under this License and may not use a different name for the software. Except as -// specifically required in this Section (4), Licensee shall not use in a company name, a -// product name, in advertising, publicity, or other promotional activities any name, trade -// name, trademark, logo, or other designation of "EnergyPlus", "E+", "e+" or confusingly -// similar designation, without the U.S. Department of Energy's prior written consent. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY -// AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR -// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -// POSSIBILITY OF SUCH DAMAGE. - -#include -#include - -#include - -namespace EnergyPlus { - -EnergyPlusData::EnergyPlusData() -{ - this->dataAirLoop = std::make_unique(); - this->dataAirLoopHVACDOAS = std::make_unique(); - this->dataAirSystemsData = std::make_unique(); - this->afn = std::make_unique(*this); - this->dataBSDFWindow = std::make_unique(); - this->dataBaseSizerFanHeatInputs = std::make_unique(); - this->dataBaseSizerScalableInputs = std::make_unique(); - this->dataBaseboardElectric = std::make_unique(); - this->dataBaseboardRadiator = std::make_unique(); - this->dataBoilerSteam = std::make_unique(); - this->dataBoilers = std::make_unique(); - this->dataBranchAirLoopPlant = std::make_unique(); - this->dataBranchInputManager = std::make_unique(); - this->dataBranchNodeConnections = std::make_unique(); - this->dataCHPElectGen = std::make_unique(); - this->dataCTElectricGenerator = std::make_unique(); - this->dataChilledCeilingPanelSimple = std::make_unique(); - this->dataChillerAbsorber = std::make_unique(); - this->dataChillerElectricEIR = std::make_unique(); - this->dataChillerExhaustAbsorption = std::make_unique(); - this->dataChillerGasAbsorption = std::make_unique(); - this->dataChillerIndirectAbsorption = std::make_unique(); - this->dataChillerReformulatedEIR = std::make_unique(); - this->dataChillerElectricASHRAE205 = std::make_unique(); - this->dataCoilCooingDX = std::make_unique(); - this->dataCondenserLoopTowers = std::make_unique(); - this->dataConstruction = std::make_unique(); - this->dataContaminantBalance = std::make_unique(); - this->dataConvect = std::make_unique(); - this->dataConvergeParams = std::make_unique(); - this->dataCoolTower = std::make_unique(); - this->dataCostEstimateManager = std::make_unique(); - this->dataCrossVentMgr = std::make_unique(); - this->dataCurveManager = std::make_unique(); - this->dataDXCoils = std::make_unique(); - this->dataDXFEarClipping = std::make_unique(); - this->dataDaylightingDevices = std::make_unique(); - this->dataDaylightingDevicesData = std::make_unique(); - this->dataDayltg = std::make_unique(); - this->dataDefineEquipment = std::make_unique(); - this->dataDemandManager = std::make_unique(); - this->dataDesiccantDehumidifiers = std::make_unique(); - this->dataDispVentMgr = std::make_unique(); - this->dataDualDuct = std::make_unique(); - this->dataEIRFuelFiredHeatPump = std::make_unique(); - this->dataEIRPlantLoopHeatPump = std::make_unique(); - this->dataEMSMgr = std::make_unique(); - this->dataEarthTube = std::make_unique(); - this->dataEcoRoofMgr = std::make_unique(); - this->dataEconLifeCycleCost = std::make_unique(); - this->dataEconTariff = std::make_unique(); - this->dataElectBaseboardRad = std::make_unique(); - this->dataElectPwrSvcMgr = std::make_unique(); - this->dataEnvrn = std::make_unique(); - this->dataErrTracking = std::make_unique(); - this->dataEvapCoolers = std::make_unique(); - this->dataEvapFluidCoolers = std::make_unique(); - this->dataExteriorEnergyUse = std::make_unique(); - this->dataExternalInterface = std::make_unique(); - this->dataFanCoilUnits = std::make_unique(); - this->dataFans = std::make_unique(); - this->dataFaultsMgr = std::make_unique(); - this->dataFluidCoolers = std::make_unique(); - this->dataFluidProperties = std::make_unique(); - this->dataFourPipeBeam = std::make_unique(); - this->dataFuelCellElectGen = std::make_unique(); - this->dataFurnaces = std::make_unique(); - this->dataGeneral = std::make_unique(); - this->dataGeneralRoutines = std::make_unique(); - this->dataGenerator = std::make_unique(); - this->dataGeneratorFuelSupply = std::make_unique(); - this->dataGlobal = std::make_unique(); - this->dataGlobalNames = std::make_unique(); - this->dataGrndTempModelMgr = std::make_unique(); - this->dataGroundHeatExchanger = std::make_unique(); - this->dataHPWaterToWaterClg = std::make_unique(); - this->dataHPWaterToWaterHtg = std::make_unique(); - this->dataHPWaterToWaterSimple = std::make_unique(); - this->dataHVACAssistedCC = std::make_unique(); - this->dataHVACControllers = std::make_unique(); - this->dataHVACCooledBeam = std::make_unique(); - this->dataHVACCtrl = std::make_unique(); - this->dataHVACDXHeatPumpSys = std::make_unique(); - this->dataHVACDuct = std::make_unique(); - this->dataHVACGlobal = std::make_unique(); - this->dataHVACInterfaceMgr = std::make_unique(); - this->dataHVACMgr = std::make_unique(); - this->dataHVACMultiSpdHP = std::make_unique(); - this->dataHVACSingleDuctInduc = std::make_unique(); - this->dataHVACSizingSimMgr = std::make_unique(); - this->dataHVACStandAloneERV = std::make_unique(); - this->dataHVACUnitaryBypassVAV = std::make_unique(); - this->dataHVACVarRefFlow = std::make_unique(); - this->dataHWBaseboardRad = std::make_unique(); - this->dataHeatBal = std::make_unique(); - this->dataHeatBalAirMgr = std::make_unique(); - this->dataHeatBalFanSys = std::make_unique(); - this->dataHeatBalFiniteDiffMgr = std::make_unique(); - this->dataHeatBalHAMTMgr = std::make_unique(); - this->dataHeatBalIntHeatGains = std::make_unique(); - this->dataHeatBalIntRadExchg = std::make_unique(); - this->dataHeatBalMgr = std::make_unique(); - this->dataHeatBalSurf = std::make_unique(); - this->dataHeatBalSurfMgr = std::make_unique(); - this->dataHeatRecovery = std::make_unique(); - this->dataHeatingCoils = std::make_unique(); - this->dataHighTempRadSys = std::make_unique(); - this->dataHumidifiers = std::make_unique(); - this->dataHybridModel = std::make_unique(); - this->dataHybridUnitaryAC = std::make_unique(); - this->dataHysteresisPhaseChange = std::make_unique(); - this->dataICEngElectGen = std::make_unique(); - this->dataIndoorGreen = std::make_unique(); - this->dataInputProcessing = std::make_unique(); - this->dataIPShortCut = std::make_unique(); - this->dataIceThermalStorage = std::make_unique(); - this->dataIntegratedHP = std::make_unique(); - this->dataInternalHeatGains = std::make_unique(); - this->dataLoopNodes = std::make_unique(); - this->dataLowTempRadSys = std::make_unique(); - this->dataMaterial = std::make_unique(); - this->dataMatrixDataManager = std::make_unique(); - this->dataMircoturbElectGen = std::make_unique(); - this->dataMixedAir = std::make_unique(); - this->dataMixerComponent = std::make_unique(); - this->dataMoistureBalEMPD = std::make_unique(); - this->dataMstBal = std::make_unique(); - this->dataMstBalEMPD = std::make_unique(); - this->dataMundtSimMgr = std::make_unique(); - this->dataNodeInputMgr = std::make_unique(); - this->dataOutAirNodeMgr = std::make_unique(); - this->dataOutRptPredefined = std::make_unique(); - this->dataOutRptTab = std::make_unique(); - this->dataOutdoorAirUnit = std::make_unique(); - this->dataOutput = std::make_unique(); - this->dataOutputProcessor = std::make_unique(); - this->dataOutputReportTabularAnnual = std::make_unique(); - this->dataOutputReports = std::make_unique(); - this->dataOutsideEnergySrcs = std::make_unique(); - this->dataPackagedThermalStorageCoil = std::make_unique(); - this->dataPhotovoltaic = std::make_unique(); - this->dataPhotovoltaicState = std::make_unique(); - this->dataPhotovoltaicThermalCollector = std::make_unique(); - this->dataPipeHT = std::make_unique(); - this->dataPipes = std::make_unique(); - this->dataPlantCentralGSHP = std::make_unique(); - this->dataPlantChillers = std::make_unique(); - this->dataPlantCompTempSrc = std::make_unique(); - this->dataPlantCondLoopOp = std::make_unique(); - this->dataPlantHXFluidToFluid = std::make_unique(); - this->dataPlantLoadProfile = std::make_unique(); - this->dataPlantMgr = std::make_unique(); - this->dataPlantPipingSysMgr = std::make_unique(); - this->dataPlantPressureSys = std::make_unique(); - this->dataPlantUtilities = std::make_unique(); - this->dataPlantValves = std::make_unique(); - this->dataPlnt = std::make_unique(); - this->dataPluginManager = std::make_unique(); - this->dataPollution = std::make_unique(); - this->dataPondGHE = std::make_unique(); - this->dataPowerInductionUnits = std::make_unique(); - this->dataPsychrometrics = std::make_unique(); - this->dataPsychCache = std::make_unique(); - this->dataPumps = std::make_unique(); - this->dataPurchasedAirMgr = std::make_unique(); - this->dataRefrigCase = std::make_unique(); - this->dataReportFlag = std::make_unique(); - this->dataResultsFramework = std::make_unique(); - this->dataRetAirPathMrg = std::make_unique(); - this->dataExhAirSystemMrg = std::make_unique(); - this->dataExhCtrlSystemMrg = std::make_unique(); - this->dataRoomAir = std::make_unique(); - this->dataRoomAirModelTempPattern = std::make_unique(); - this->dataRoomAirflowNetModel = std::make_unique(); - this->dataRootFinder = std::make_unique(); - this->dataRptCoilSelection = std::make_unique(); - this->dataRuntimeLang = std::make_unique(); - this->dataRuntimeLangProcessor = std::make_unique(); - this->dataSQLiteProcedures = std::make_unique(); - this->dataScheduleMgr = std::make_unique(); - this->dataSetPointManager = std::make_unique(); - this->dataShadowComb = std::make_unique(); - this->dataSimAirServingZones = std::make_unique(); - this->dataSimulationManager = std::make_unique(); - this->dataSingleDuct = std::make_unique(); - this->dataSize = std::make_unique(); - this->dataSizingManager = std::make_unique(); - this->dataSolarCollectors = std::make_unique(); - this->dataSolarReflectionManager = std::make_unique(); - this->dataSolarShading = std::make_unique(); - this->dataSplitterComponent = std::make_unique(); - this->dataSteamBaseboardRadiator = std::make_unique(); - this->dataSteamCoils = std::make_unique(); - this->dataStrGlobals = std::make_unique(); - this->dataSurfColor = std::make_unique(); - this->dataSurfLists = std::make_unique(); - this->dataSurface = std::make_unique(); - this->dataSurfaceGeometry = std::make_unique(); - this->dataSurfaceGroundHeatExchangers = std::make_unique(); - this->dataSwimmingPools = std::make_unique(); - this->dataSysAirFlowSizer = std::make_unique(); - this->dataSysRpts = std::make_unique(); - this->dataSysVars = std::make_unique(); - this->dataAvail = std::make_unique(); - this->dataTARCOGCommon = std::make_unique(); - this->dataTARCOGOutputs = std::make_unique(); - this->dataThermalChimneys = std::make_unique(); - this->dataThermalComforts = std::make_unique(); - this->dataThermalISO15099Calc = std::make_unique(); - this->dataTARCOGGasses90 = std::make_unique(); - this->dataTARCOGMain = std::make_unique(); - this->dataTarcogShading = std::make_unique(); - this->dataTimingsData = std::make_unique(); - this->dataTranspiredCollector = std::make_unique(); - this->dataUFADManager = std::make_unique(); - this->dataUnitHeaters = std::make_unique(); - this->dataUnitVentilators = std::make_unique(); - this->dataUnitarySystems = std::make_unique(); - this->dataUserDefinedComponents = std::make_unique(); - this->dataUtilityRoutines = std::make_unique(); - this->dataVariableSpeedCoils = std::make_unique(); - this->dataVectors = std::make_unique(); - this->dataVentilatedSlab = std::make_unique(); - this->dataViewFactor = std::make_unique(); - this->dataWaterCoils = std::make_unique(); - this->dataWaterData = std::make_unique(); - this->dataWaterManager = std::make_unique(); - this->dataWaterThermalTanks = std::make_unique(); - this->dataWaterToAirHeatPump = std::make_unique(); - this->dataWaterToAirHeatPumpSimple = std::make_unique(); - this->dataWaterUse = std::make_unique(); - this->dataWeather = std::make_unique(); - this->dataWindTurbine = std::make_unique(); - this->dataWindowAC = std::make_unique(); - this->dataWindowComplexManager = std::make_unique(); - this->dataWindowEquivLayer = std::make_unique(); - this->dataWindowEquivalentLayer = std::make_unique(); - this->dataWindowManager = std::make_unique(); - this->dataWindowManagerExterior = std::make_unique(); - this->dataZoneAirLoopEquipmentManager = std::make_unique(); - this->dataZoneContaminantPredictorCorrector = std::make_unique(); - this->dataZoneCtrls = std::make_unique(); - this->dataZoneDehumidifier = std::make_unique(); - this->dataZoneEnergyDemand = std::make_unique(); - this->dataZoneEquip = std::make_unique(); - this->dataZoneEquipmentManager = std::make_unique(); - this->dataZonePlenum = std::make_unique(); - this->dataZoneTempPredictorCorrector = std::make_unique(); -} - -EnergyPlusData::~EnergyPlusData() = default; - -void EnergyPlusData::clear_state() -{ - this->ready = true; - this->init_state_called = false; - this->dataAirLoop->clear_state(); - this->dataAirLoopHVACDOAS->clear_state(); - this->dataAirSystemsData->clear_state(); - this->afn->clear_state(); - this->dataBSDFWindow->clear_state(); - this->dataBaseSizerFanHeatInputs->clear_state(); - this->dataBaseSizerScalableInputs->clear_state(); - this->dataBaseboardElectric->clear_state(); - this->dataBaseboardRadiator->clear_state(); - this->dataBoilerSteam->clear_state(); - this->dataBoilers->clear_state(); - this->dataBranchAirLoopPlant->clear_state(); - this->dataBranchInputManager->clear_state(); - this->dataBranchNodeConnections->clear_state(); - this->dataCHPElectGen->clear_state(); - this->dataCTElectricGenerator->clear_state(); - this->dataChilledCeilingPanelSimple->clear_state(); - this->dataChillerAbsorber->clear_state(); - this->dataChillerElectricEIR->clear_state(); - this->dataChillerExhaustAbsorption->clear_state(); - this->dataChillerGasAbsorption->clear_state(); - this->dataChillerIndirectAbsorption->clear_state(); - this->dataChillerReformulatedEIR->clear_state(); - this->dataChillerElectricASHRAE205->clear_state(); - this->dataCoilCooingDX->clear_state(); - this->dataCondenserLoopTowers->clear_state(); - this->dataConstruction->clear_state(); - this->dataContaminantBalance->clear_state(); - this->dataConvect->clear_state(); - this->dataConvergeParams->clear_state(); - this->dataCoolTower->clear_state(); - this->dataCostEstimateManager->clear_state(); - this->dataCrossVentMgr->clear_state(); - this->dataCurveManager->clear_state(); - this->dataDXCoils->clear_state(); - this->dataDXFEarClipping->clear_state(); - this->dataDaylightingDevices->clear_state(); - this->dataDaylightingDevicesData->clear_state(); - this->dataDayltg->clear_state(); - this->dataDefineEquipment->clear_state(); - this->dataDemandManager->clear_state(); - this->dataDesiccantDehumidifiers->clear_state(); - this->dataDispVentMgr->clear_state(); - this->dataDualDuct->clear_state(); - this->dataEIRFuelFiredHeatPump->clear_state(); - this->dataEIRPlantLoopHeatPump->clear_state(); - this->dataEMSMgr->clear_state(); - this->dataEarthTube->clear_state(); - this->dataEcoRoofMgr->clear_state(); - this->dataEconLifeCycleCost->clear_state(); - this->dataEconTariff->clear_state(); - this->dataElectBaseboardRad->clear_state(); - this->dataElectPwrSvcMgr->clear_state(); - this->dataEnvrn->clear_state(); - this->dataErrTracking->clear_state(); - this->dataEvapCoolers->clear_state(); - this->dataEvapFluidCoolers->clear_state(); - this->dataExteriorEnergyUse->clear_state(); - this->dataExternalInterface->clear_state(); - this->dataFanCoilUnits->clear_state(); - this->dataFans->clear_state(); - this->dataFaultsMgr->clear_state(); - this->dataFluidCoolers->clear_state(); - this->dataFluidProperties->clear_state(); - this->dataFourPipeBeam->clear_state(); - this->dataFuelCellElectGen->clear_state(); - this->dataFurnaces->clear_state(); - this->dataGeneral->clear_state(); - this->dataGeneralRoutines->clear_state(); - this->dataGenerator->clear_state(); - this->dataGeneratorFuelSupply->clear_state(); - this->dataGlobal->clear_state(); - this->dataGlobalNames->clear_state(); - this->dataGrndTempModelMgr->clear_state(); - this->dataGroundHeatExchanger->clear_state(); - this->dataHPWaterToWaterClg->clear_state(); - this->dataHPWaterToWaterHtg->clear_state(); - this->dataHPWaterToWaterSimple->clear_state(); - this->dataHVACAssistedCC->clear_state(); - this->dataHVACControllers->clear_state(); - this->dataHVACCooledBeam->clear_state(); - this->dataHVACCtrl->clear_state(); - this->dataHVACDXHeatPumpSys->clear_state(); - this->dataHVACDuct->clear_state(); - this->dataHVACGlobal->clear_state(); - this->dataHVACInterfaceMgr->clear_state(); - this->dataHVACMgr->clear_state(); - this->dataHVACMultiSpdHP->clear_state(); - this->dataHVACSingleDuctInduc->clear_state(); - this->dataHVACSizingSimMgr->clear_state(); - this->dataHVACStandAloneERV->clear_state(); - this->dataHVACUnitaryBypassVAV->clear_state(); - this->dataHVACVarRefFlow->clear_state(); - this->dataHWBaseboardRad->clear_state(); - this->dataHeatBal->clear_state(); - this->dataHeatBalAirMgr->clear_state(); - this->dataHeatBalFanSys->clear_state(); - this->dataHeatBalFiniteDiffMgr->clear_state(); - this->dataHeatBalHAMTMgr->clear_state(); - this->dataHeatBalIntHeatGains->clear_state(); - this->dataHeatBalIntRadExchg->clear_state(); - this->dataHeatBalMgr->clear_state(); - this->dataHeatBalSurf->clear_state(); - this->dataHeatBalSurfMgr->clear_state(); - this->dataHeatRecovery->clear_state(); - this->dataHeatingCoils->clear_state(); - this->dataHighTempRadSys->clear_state(); - this->dataHumidifiers->clear_state(); - this->dataHybridModel->clear_state(); - this->dataHybridUnitaryAC->clear_state(); - this->dataHysteresisPhaseChange->clear_state(); - this->dataICEngElectGen->clear_state(); - this->dataIPShortCut->clear_state(); - this->dataIceThermalStorage->clear_state(); - this->dataIndoorGreen->clear_state(); - this->dataInputProcessing->clear_state(); - this->dataIntegratedHP->clear_state(); - this->dataInternalHeatGains->clear_state(); - this->dataLoopNodes->clear_state(); - this->dataLowTempRadSys->clear_state(); - this->dataMaterial->clear_state(); - this->dataMatrixDataManager->clear_state(); - this->dataMircoturbElectGen->clear_state(); - this->dataMixedAir->clear_state(); - this->dataMixerComponent->clear_state(); - this->dataMoistureBalEMPD->clear_state(); - this->dataMstBal->clear_state(); - this->dataMstBalEMPD->clear_state(); - this->dataMundtSimMgr->clear_state(); - this->dataNodeInputMgr->clear_state(); - this->dataOutAirNodeMgr->clear_state(); - this->dataOutRptPredefined->clear_state(); - this->dataOutRptTab->clear_state(); - this->dataOutdoorAirUnit->clear_state(); - this->dataOutput->clear_state(); - this->dataOutputProcessor->clear_state(); - this->dataOutputReportTabularAnnual->clear_state(); - this->dataOutputReports->clear_state(); - this->dataOutsideEnergySrcs->clear_state(); - this->dataPackagedThermalStorageCoil->clear_state(); - this->dataPhotovoltaic->clear_state(); - this->dataPhotovoltaicState->clear_state(); - this->dataPhotovoltaicThermalCollector->clear_state(); - this->dataPipeHT->clear_state(); - this->dataPipes->clear_state(); - this->dataPlantCentralGSHP->clear_state(); - this->dataPlantChillers->clear_state(); - this->dataPlantCompTempSrc->clear_state(); - this->dataPlantCondLoopOp->clear_state(); - this->dataPlantHXFluidToFluid->clear_state(); - this->dataPlantLoadProfile->clear_state(); - this->dataPlantMgr->clear_state(); - this->dataPlantPipingSysMgr->clear_state(); - this->dataPlantPressureSys->clear_state(); - this->dataPlantUtilities->clear_state(); - this->dataPlantValves->clear_state(); - this->dataPlnt->clear_state(); - this->dataPluginManager->clear_state(); - this->dataPollution->clear_state(); - this->dataPondGHE->clear_state(); - this->dataPowerInductionUnits->clear_state(); - this->dataPsychrometrics->clear_state(); - this->dataPsychCache->clear_state(); - this->dataPumps->clear_state(); - this->dataPurchasedAirMgr->clear_state(); - this->dataRefrigCase->clear_state(); - this->dataReportFlag->clear_state(); - this->dataResultsFramework->clear_state(); - this->dataRetAirPathMrg->clear_state(); - this->dataExhAirSystemMrg->clear_state(); - this->dataExhCtrlSystemMrg->clear_state(); - this->dataRoomAir->clear_state(); - this->dataRoomAirModelTempPattern->clear_state(); - this->dataRoomAirflowNetModel->clear_state(); - this->dataRootFinder->clear_state(); - this->dataRptCoilSelection->clear_state(); - this->dataRuntimeLang->clear_state(); - this->dataRuntimeLangProcessor->clear_state(); - this->dataSQLiteProcedures->clear_state(); - this->dataScheduleMgr->clear_state(); - this->dataSetPointManager->clear_state(); - this->dataShadowComb->clear_state(); - this->dataSimAirServingZones->clear_state(); - this->dataSimulationManager->clear_state(); - this->dataSingleDuct->clear_state(); - this->dataSize->clear_state(); - this->dataSizingManager->clear_state(); - this->dataSolarCollectors->clear_state(); - this->dataSolarReflectionManager->clear_state(); - this->dataSolarShading->clear_state(); - this->dataSplitterComponent->clear_state(); - this->dataSteamBaseboardRadiator->clear_state(); - this->dataSteamCoils->clear_state(); - this->dataStrGlobals->clear_state(); - this->dataSurfColor->clear_state(); - this->dataSurfLists->clear_state(); - this->dataSurface->clear_state(); - this->dataSurfaceGeometry->clear_state(); - this->dataSurfaceGroundHeatExchangers->clear_state(); - this->dataSwimmingPools->clear_state(); - this->dataSysAirFlowSizer->clear_state(); - this->dataSysRpts->clear_state(); - this->dataSysVars->clear_state(); - this->dataAvail->clear_state(); - this->dataTARCOGCommon->clear_state(); - this->dataTARCOGOutputs->clear_state(); - this->dataThermalChimneys->clear_state(); - this->dataThermalComforts->clear_state(); - this->dataThermalISO15099Calc->clear_state(); - this->dataTARCOGGasses90->clear_state(); - this->dataTARCOGMain->clear_state(); - this->dataTarcogShading->clear_state(); - this->dataTimingsData->clear_state(); - this->dataTranspiredCollector->clear_state(); - this->dataUFADManager->clear_state(); - this->dataUnitHeaters->clear_state(); - this->dataUnitVentilators->clear_state(); - this->dataUnitarySystems->clear_state(); - this->dataUserDefinedComponents->clear_state(); - this->dataUtilityRoutines->clear_state(); - this->dataVariableSpeedCoils->clear_state(); - this->dataVectors->clear_state(); - this->dataVentilatedSlab->clear_state(); - this->dataViewFactor->clear_state(); - this->dataWaterCoils->clear_state(); - this->dataWaterData->clear_state(); - this->dataWaterManager->clear_state(); - this->dataWaterThermalTanks->clear_state(); - this->dataWaterToAirHeatPump->clear_state(); - this->dataWaterToAirHeatPumpSimple->clear_state(); - this->dataWaterUse->clear_state(); - this->dataWeather->clear_state(); - this->dataWindTurbine->clear_state(); - this->dataWindowAC->clear_state(); - this->dataWindowComplexManager->clear_state(); - this->dataWindowEquivLayer->clear_state(); - this->dataWindowEquivalentLayer->clear_state(); - this->dataWindowManager->clear_state(); - this->dataWindowManagerExterior->clear_state(); - this->dataZoneAirLoopEquipmentManager->clear_state(); - this->dataZoneContaminantPredictorCorrector->clear_state(); - this->dataZoneCtrls->clear_state(); - this->dataZoneDehumidifier->clear_state(); - this->dataZoneEnergyDemand->clear_state(); - this->dataZoneEquip->clear_state(); - this->dataZoneEquipmentManager->clear_state(); - this->dataZonePlenum->clear_state(); - this->dataZoneTempPredictorCorrector->clear_state(); - - this->files.debug.close(); - this->files.err_stream.reset(); - this->files.eso.close(); - this->files.mtr.close(); - this->files.mtr.close(); - this->files.shade.close(); - this->files.ssz.close(); - this->files.zsz.close(); -} - -void EnergyPlusData::init_state(EnergyPlusData &state) -{ - if (this->init_state_called) return; - this->init_state_called = true; - // The order in which we do this matters. We're going to try to - // do this in "topological" order meaning the first to go are the - // objects that do not reference any other objects, like fluids, - // schedules, curves, etc. - this->dataSimulationManager->init_state(state); // GetProjectData - this->dataFluidProperties->init_state(state); // GetFluidPropertiesData - this->dataPsychrometrics->init_state(state); // InitializePsychRoutines - - this->dataAirLoop->init_state(state); - this->dataAirLoopHVACDOAS->init_state(state); - this->dataAirSystemsData->init_state(state); - this->afn->init_state(state); - this->dataBSDFWindow->init_state(state); - this->dataBaseSizerFanHeatInputs->init_state(state); - this->dataBaseSizerScalableInputs->init_state(state); - this->dataBaseboardElectric->init_state(state); - this->dataBaseboardRadiator->init_state(state); - this->dataBoilerSteam->init_state(state); - this->dataBoilers->init_state(state); - this->dataBranchAirLoopPlant->init_state(state); - this->dataBranchInputManager->init_state(state); - this->dataBranchNodeConnections->init_state(state); - this->dataCHPElectGen->init_state(state); - this->dataCTElectricGenerator->init_state(state); - this->dataChilledCeilingPanelSimple->init_state(state); - this->dataChillerAbsorber->init_state(state); - this->dataChillerElectricEIR->init_state(state); - this->dataChillerExhaustAbsorption->init_state(state); - this->dataChillerGasAbsorption->init_state(state); - this->dataChillerIndirectAbsorption->init_state(state); - this->dataChillerReformulatedEIR->init_state(state); - this->dataChillerElectricASHRAE205->init_state(state); - this->dataCoilCooingDX->init_state(state); - this->dataCondenserLoopTowers->init_state(state); - this->dataConstruction->init_state(state); - this->dataContaminantBalance->init_state(state); - this->dataConvect->init_state(state); - this->dataConvergeParams->init_state(state); - this->dataCoolTower->init_state(state); - this->dataCostEstimateManager->init_state(state); - this->dataCrossVentMgr->init_state(state); - this->dataCurveManager->init_state(state); - this->dataDXCoils->init_state(state); - this->dataDXFEarClipping->init_state(state); - this->dataDaylightingDevices->init_state(state); - this->dataDaylightingDevicesData->init_state(state); - this->dataDayltg->init_state(state); - this->dataDefineEquipment->init_state(state); - this->dataDemandManager->init_state(state); - this->dataDesiccantDehumidifiers->init_state(state); - this->dataDispVentMgr->init_state(state); - this->dataDualDuct->init_state(state); - this->dataEIRFuelFiredHeatPump->init_state(state); - this->dataEIRPlantLoopHeatPump->init_state(state); - this->dataEMSMgr->init_state(state); - this->dataEarthTube->init_state(state); - this->dataEcoRoofMgr->init_state(state); - this->dataEconLifeCycleCost->init_state(state); - this->dataEconTariff->init_state(state); - this->dataElectBaseboardRad->init_state(state); - this->dataElectPwrSvcMgr->init_state(state); - this->dataEnvrn->init_state(state); - this->dataErrTracking->init_state(state); - this->dataEvapCoolers->init_state(state); - this->dataEvapFluidCoolers->init_state(state); - this->dataExteriorEnergyUse->init_state(state); - this->dataExternalInterface->init_state(state); - this->dataFanCoilUnits->init_state(state); - this->dataFans->init_state(state); - this->dataFaultsMgr->init_state(state); - this->dataFluidCoolers->init_state(state); - this->dataFourPipeBeam->init_state(state); - this->dataFuelCellElectGen->init_state(state); - this->dataFurnaces->init_state(state); - this->dataGeneral->init_state(state); - this->dataGeneralRoutines->init_state(state); - this->dataGenerator->init_state(state); - this->dataGeneratorFuelSupply->init_state(state); - this->dataGlobal->init_state(state); - this->dataGlobalNames->init_state(state); - this->dataGrndTempModelMgr->init_state(state); - this->dataGroundHeatExchanger->init_state(state); - this->dataHPWaterToWaterClg->init_state(state); - this->dataHPWaterToWaterHtg->init_state(state); - this->dataHPWaterToWaterSimple->init_state(state); - this->dataHVACAssistedCC->init_state(state); - this->dataHVACControllers->init_state(state); - this->dataHVACCooledBeam->init_state(state); - this->dataHVACCtrl->init_state(state); - this->dataHVACDXHeatPumpSys->init_state(state); - this->dataHVACDuct->init_state(state); - this->dataHVACGlobal->init_state(state); - this->dataHVACInterfaceMgr->init_state(state); - this->dataHVACMgr->init_state(state); - this->dataHVACMultiSpdHP->init_state(state); - this->dataHVACSingleDuctInduc->init_state(state); - this->dataHVACSizingSimMgr->init_state(state); - this->dataHVACStandAloneERV->init_state(state); - this->dataHVACUnitaryBypassVAV->init_state(state); - this->dataHVACVarRefFlow->init_state(state); - this->dataHWBaseboardRad->init_state(state); - this->dataHeatBal->init_state(state); - this->dataHeatBalAirMgr->init_state(state); - this->dataHeatBalFanSys->init_state(state); - this->dataHeatBalFiniteDiffMgr->init_state(state); - this->dataHeatBalHAMTMgr->init_state(state); - this->dataHeatBalIntHeatGains->init_state(state); - this->dataHeatBalIntRadExchg->init_state(state); - this->dataHeatBalMgr->init_state(state); - this->dataHeatBalSurf->init_state(state); - this->dataHeatBalSurfMgr->init_state(state); - this->dataHeatRecovery->init_state(state); - this->dataHeatingCoils->init_state(state); - this->dataHighTempRadSys->init_state(state); - this->dataHumidifiers->init_state(state); - this->dataHybridModel->init_state(state); - this->dataHybridUnitaryAC->init_state(state); - this->dataHysteresisPhaseChange->init_state(state); - this->dataICEngElectGen->init_state(state); - this->dataIPShortCut->init_state(state); - this->dataIceThermalStorage->init_state(state); - this->dataIndoorGreen->init_state(state); - this->dataInputProcessing->init_state(state); - this->dataIntegratedHP->init_state(state); - this->dataInternalHeatGains->init_state(state); - this->dataLoopNodes->init_state(state); - this->dataLowTempRadSys->init_state(state); - this->dataMaterial->init_state(state); - this->dataMatrixDataManager->init_state(state); - this->dataMircoturbElectGen->init_state(state); - this->dataMixedAir->init_state(state); - this->dataMixerComponent->init_state(state); - this->dataMoistureBalEMPD->init_state(state); - this->dataMstBal->init_state(state); - this->dataMstBalEMPD->init_state(state); - this->dataMundtSimMgr->init_state(state); - this->dataNodeInputMgr->init_state(state); - this->dataOutAirNodeMgr->init_state(state); - this->dataOutRptPredefined->init_state(state); - this->dataOutRptTab->init_state(state); - this->dataOutdoorAirUnit->init_state(state); - this->dataOutput->init_state(state); - this->dataOutputProcessor->init_state(state); - this->dataOutputReportTabularAnnual->init_state(state); - this->dataOutputReports->init_state(state); - this->dataOutsideEnergySrcs->init_state(state); - this->dataPackagedThermalStorageCoil->init_state(state); - this->dataPhotovoltaic->init_state(state); - this->dataPhotovoltaicState->init_state(state); - this->dataPhotovoltaicThermalCollector->init_state(state); - this->dataPipeHT->init_state(state); - this->dataPipes->init_state(state); - this->dataPlantCentralGSHP->init_state(state); - this->dataPlantChillers->init_state(state); - this->dataPlantCompTempSrc->init_state(state); - this->dataPlantCondLoopOp->init_state(state); - this->dataPlantHXFluidToFluid->init_state(state); - this->dataPlantLoadProfile->init_state(state); - this->dataPlantMgr->init_state(state); - this->dataPlantPipingSysMgr->init_state(state); - this->dataPlantPressureSys->init_state(state); - this->dataPlantUtilities->init_state(state); - this->dataPlantValves->init_state(state); - this->dataPlnt->init_state(state); - this->dataPluginManager->init_state(state); - this->dataPollution->init_state(state); - this->dataPondGHE->init_state(state); - this->dataPowerInductionUnits->init_state(state); - this->dataPsychCache->init_state(state); - this->dataPumps->init_state(state); - this->dataPurchasedAirMgr->init_state(state); - this->dataRefrigCase->init_state(state); - this->dataReportFlag->init_state(state); - this->dataResultsFramework->init_state(state); - this->dataRetAirPathMrg->init_state(state); - this->dataExhAirSystemMrg->init_state(state); - this->dataExhCtrlSystemMrg->init_state(state); - this->dataRoomAir->init_state(state); - this->dataRoomAirModelTempPattern->init_state(state); - this->dataRoomAirflowNetModel->init_state(state); - this->dataRootFinder->init_state(state); - this->dataRptCoilSelection->init_state(state); - this->dataRuntimeLang->init_state(state); - this->dataRuntimeLangProcessor->init_state(state); - this->dataSQLiteProcedures->init_state(state); - this->dataScheduleMgr->init_state(state); - this->dataSetPointManager->init_state(state); - this->dataShadowComb->init_state(state); - this->dataSimAirServingZones->init_state(state); - this->dataSingleDuct->init_state(state); - this->dataSize->init_state(state); - this->dataSizingManager->init_state(state); - this->dataSolarCollectors->init_state(state); - this->dataSolarReflectionManager->init_state(state); - this->dataSolarShading->init_state(state); - this->dataSplitterComponent->init_state(state); - this->dataSteamBaseboardRadiator->init_state(state); - this->dataSteamCoils->init_state(state); - this->dataStrGlobals->init_state(state); - this->dataSurfColor->init_state(state); - this->dataSurfLists->init_state(state); - this->dataSurface->init_state(state); - this->dataSurfaceGeometry->init_state(state); - this->dataSurfaceGroundHeatExchangers->init_state(state); - this->dataSwimmingPools->init_state(state); - this->dataSysAirFlowSizer->init_state(state); - this->dataSysRpts->init_state(state); - this->dataSysVars->init_state(state); - this->dataAvail->init_state(state); - this->dataTARCOGCommon->init_state(state); - this->dataTARCOGOutputs->init_state(state); - this->dataThermalChimneys->init_state(state); - this->dataThermalComforts->init_state(state); - this->dataThermalISO15099Calc->init_state(state); - this->dataTARCOGGasses90->init_state(state); - this->dataTARCOGMain->init_state(state); - this->dataTarcogShading->init_state(state); - this->dataTimingsData->init_state(state); - this->dataTranspiredCollector->init_state(state); - this->dataUFADManager->init_state(state); - this->dataUnitHeaters->init_state(state); - this->dataUnitVentilators->init_state(state); - this->dataUnitarySystems->init_state(state); - this->dataUserDefinedComponents->init_state(state); - this->dataUtilityRoutines->init_state(state); - this->dataVariableSpeedCoils->init_state(state); - this->dataVectors->init_state(state); - this->dataVentilatedSlab->init_state(state); - this->dataViewFactor->init_state(state); - this->dataWaterCoils->init_state(state); - this->dataWaterData->init_state(state); - this->dataWaterManager->init_state(state); - this->dataWaterThermalTanks->init_state(state); - this->dataWaterToAirHeatPump->init_state(state); - this->dataWaterToAirHeatPumpSimple->init_state(state); - this->dataWaterUse->init_state(state); - this->dataWeather->init_state(state); - this->dataWindTurbine->init_state(state); - this->dataWindowAC->init_state(state); - this->dataWindowComplexManager->init_state(state); - this->dataWindowEquivLayer->init_state(state); - this->dataWindowEquivalentLayer->init_state(state); - this->dataWindowManager->init_state(state); - this->dataWindowManagerExterior->init_state(state); - this->dataZoneAirLoopEquipmentManager->init_state(state); - this->dataZoneContaminantPredictorCorrector->init_state(state); - this->dataZoneCtrls->init_state(state); - this->dataZoneDehumidifier->init_state(state); - this->dataZoneEnergyDemand->init_state(state); - this->dataZoneEquip->init_state(state); - this->dataZoneEquipmentManager->init_state(state); - this->dataZonePlenum->init_state(state); - this->dataZoneTempPredictorCorrector->init_state(state); -} - -} // namespace EnergyPlus diff --git a/src/EnergyPlus/Data/EnergyPlusData.hh-e b/src/EnergyPlus/Data/EnergyPlusData.hh-e deleted file mode 100644 index 02946596aa4..00000000000 --- a/src/EnergyPlus/Data/EnergyPlusData.hh-e +++ /dev/null @@ -1,586 +0,0 @@ -// EnergyPlus, Copyright (c) 1996-2024, The Board of Trustees of the University of Illinois, -// The Regents of the University of California, through Lawrence Berkeley National Laboratory -// (subject to receipt of any required approvals from the U.S. Dept. of Energy), Oak Ridge -// National Laboratory, managed by UT-Battelle, Alliance for Sustainable Energy, LLC, and other -// contributors. All rights reserved. -// -// NOTICE: This Software was developed under funding from the U.S. Department of Energy and the -// U.S. Government consequently retains certain rights. As such, the U.S. Government has been -// granted for itself and others acting on its behalf a paid-up, nonexclusive, irrevocable, -// worldwide license in the Software to reproduce, distribute copies to the public, prepare -// derivative works, and perform publicly and display publicly, and to permit others to do so. -// -// Redistribution and use in source and binary forms, with or without modification, are permitted -// provided that the following conditions are met: -// -// (1) Redistributions of source code must retain the above copyright notice, this list of -// conditions and the following disclaimer. -// -// (2) Redistributions in binary form must reproduce the above copyright notice, this list of -// conditions and the following disclaimer in the documentation and/or other materials -// provided with the distribution. -// -// (3) Neither the name of the University of California, Lawrence Berkeley National Laboratory, -// the University of Illinois, U.S. Dept. of Energy nor the names of its contributors may be -// used to endorse or promote products derived from this software without specific prior -// written permission. -// -// (4) Use of EnergyPlus(TM) Name. If Licensee (i) distributes the software in stand-alone form -// without changes from the version obtained under this License, or (ii) Licensee makes a -// reference solely to the software portion of its product, Licensee must refer to the -// software as "EnergyPlus version X" software, where "X" is the version number Licensee -// obtained under this License and may not use a different name for the software. Except as -// specifically required in this Section (4), Licensee shall not use in a company name, a -// product name, in advertising, publicity, or other promotional activities any name, trade -// name, trademark, logo, or other designation of "EnergyPlus", "E+", "e+" or confusingly -// similar designation, without the U.S. Department of Energy's prior written consent. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY -// AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR -// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR -// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -// POSSIBILITY OF SUCH DAMAGE. - -#ifndef EnergyPlusData_hh_INCLUDED -#define EnergyPlusData_hh_INCLUDED - -// C++ Headers -#include -#include -#include - -// EnergyPlus Headers -#include -#include -#include - -namespace EnergyPlus { - -// forward declare all structs -struct AirLoopHVACDOASData; -struct AirSystemsData; -namespace AirflowNetwork { - struct Solver; -} // namespace AirflowNetwork -struct BSDFWindowData; -struct BaseSizerWithFanHeatInputsData; -struct BaseSizerWithScalableInputsData; -struct BaseboardElectricData; -struct BaseboardRadiatorData; -struct BoilerSteamData; -struct BoilersData; -struct BranchInputManagerData; -struct BranchNodeConnectionsData; -struct CTElectricGeneratorData; -struct ChilledCeilingPanelSimpleData; -struct ChillerAbsorberData; -struct ChillerElectricEIRData; -struct ChillerExhaustAbsorptionData; -struct ChillerGasAbsorptionData; -struct ChillerIndirectAbsoprtionData; -struct ChillerReformulatedEIRData; -struct ChillerElectricASHRAE205Data; -struct CoilCoolingDXData; -struct CondenserLoopTowersData; -struct ConstructionData; -struct ContaminantBalanceData; -struct ConvectionCoefficientsData; -struct ConvergParamsData; -struct CoolTowerData; -struct CostEstimateManagerData; -struct CrossVentMgrData; -struct CurveManagerData; -struct DXCoilsData; -struct DXFEarClippingData; -struct DataAirLoopData; -struct DataBranchAirLoopPlantData; -struct DataDaylightingDevicesData; -struct DataGlobal; -struct DataInputProcessing; -struct DataPlantData; -struct DataStringGlobalsData; -struct DataTimingsData; -struct DataWaterData; -struct DataZoneControlsData; -struct DataZoneEnergyDemandsData; -struct DataZoneEquipmentData; -struct DaylightingDevicesData; -struct DaylightingData; -struct DefineEquipData; -struct DemandManagerData; -struct DesiccantDehumidifiersData; -struct DisplacementVentMgrData; -struct DualDuctData; -struct EIRFuelFiredHeatPumpsData; -struct EIRPlantLoopHeatPumpsData; -struct EMSManagerData; -struct EarthTubeData; -struct EcoRoofManagerData; -struct EconomicLifeCycleCostData; -struct EconomicTariffData; -struct ElectPwrSvcMgrData; -struct ElectricBaseboardRadiatorData; -struct EnvironmentData; -struct ErrorTrackingData; -struct EvaporativeCoolersData; -struct EvaporativeFluidCoolersData; -struct ExteriorEnergyUseData; -struct ExternalInterfaceData; -struct FanCoilUnitsData; -struct FansData; -struct FaultsManagerData; -struct FluidCoolersData; -struct FluidData; -struct FourPipeBeamData; -struct FuelCellElectricGeneratorData; -struct FurnacesData; -struct GeneralData; -struct GeneralRoutinesData; -struct GeneratorFuelSupplyData; -struct GeneratorsData; -struct GlobalNamesData; -struct GroundHeatExchangerData; -struct GroundTemperatureManagerData; -struct HVACControllersData; -struct HVACCooledBeamData; -struct HVACCtrlData; -struct HVACDXHeatPumpSystemData; -struct HVACDuctData; -struct HVACGlobalsData; -struct HVACHXAssistedCoolingCoilData; -struct HVACInterfaceManagerData; -struct HVACManagerData; -struct HVACMultiSpeedHeatPumpData; -struct HVACSingleDuctInducData; -struct HVACSizingSimMgrData; -struct HVACStandAloneERVData; -struct HVACUnitaryBypassVAVData; -struct HVACVarRefFlowData; -struct HWBaseboardRadiatorData; -struct HeatBalFanSysData; -struct HeatBalFiniteDiffMgr; -struct HeatBalHAMTMgrData; -struct HeatBalInternalHeatGainsData; -struct HeatBalSurfData; -struct HeatBalSurfMgr; -struct HeatBalanceAirMgrData; -struct HeatBalanceData; -struct HeatBalanceIntRadExchgData; -struct HeatBalanceMgrData; -struct HeatPumpWaterToWaterCOOLINGData; -struct HeatPumpWaterToWaterHEATINGData; -struct HeatPumpWaterToWaterSimpleData; -struct HeatRecoveryData; -struct HeatingCoilsData; -struct HighTempRadiantSystemData; -struct HumidifiersData; -struct HybridModelData; -struct HybridUnitaryAirConditionersData; -struct HysteresisPhaseChangeData; -struct ICEngineElectricGeneratorData; -struct IPShortCutsData; -struct IceThermalStorageData; -struct IndoorGreenData; -struct IntegratedHeatPumpGlobalData; -struct InternalHeatGainsData; -struct LoopNodeData; -struct LowTempRadiantSystemData; -struct MaterialData; -struct MatrixDataManagerData; -struct MicroCHPElectricGeneratorData; -struct MicroturbineElectricGeneratorData; -struct MixedAirData; -struct MixerComponentData; -struct MoistureBalanceData; -struct MoistureBalanceEMPDData; -struct MoistureBalanceEMPDManagerData; -struct MundtSimMgrData; -struct NodeInputManagerData; -struct OutAirNodeManagerData; -struct OutdoorAirUnitData; -struct OutputProcessorData; -struct OutputReportPredefinedData; -struct OutputReportTabularAnnualData; -struct OutputReportTabularData; -struct OutputReportsData; -struct OutputsData; -struct OutsideEnergySourcesData; -struct PackagedThermalStorageCoilData; -struct PhotovoltaicStateData; -struct PhotovoltaicThermalCollectorsData; -struct PhotovoltaicsData; -struct PipeHeatTransferData; -struct PipesData; -struct PlantCentralGSHPData; -struct PlantChillersData; -struct PlantCompTempSrcData; -struct PlantCondLoopOperationData; -struct PlantHeatExchangerFluidToFluidData; -struct PlantLoadProfileData; -struct PlantMgrData; -struct PlantPipingSysMgrData; -struct PlantPressureSysData; -struct PlantUtilitiesData; -struct PlantValvesData; -struct PluginManagerData; -struct PollutionData; -struct PondGroundHeatExchangerData; -struct PoweredInductionUnitsData; -struct PsychrometricsData; -struct PsychrometricCacheData; -struct PumpsData; -struct PurchasedAirManagerData; -struct RefrigeratedCaseData; -struct ReportCoilSelectionData; -struct ReportFlagData; -struct ResultsFrameworkData; -struct ReturnAirPathMgr; -struct ExhaustAirSystemMgr; -struct ExhaustControlSystemMgr; -struct RoomAirModelAirflowNetworkData; -struct RoomAirModelData; -struct RoomAirModelUserTempPatternData; -struct RootFindingData; -struct RuntimeLanguageData; -struct RuntimeLanguageProcessorData; -struct SQLiteProceduresData; -struct ScheduleManagerData; -struct SetPointManagerData; -struct ShadowCombData; -struct SimAirServingZonesData; -struct SimulationManagerData; -struct SingleDuctData; -struct SizingData; -struct SizingManagerData; -struct SolarCollectorsData; -struct SolarReflectionManagerData; -struct SolarShadingData; -struct SplitterComponentData; -struct SteamBaseboardRadiatorData; -struct SteamCoilsData; -struct SurfaceColorData; -struct SurfaceGeometryData; -struct SurfaceGroundHeatExchangersData; -struct SurfaceListsData; -struct SurfacesData; -struct SwimmingPoolsData; -struct SystemAirFlowSizerData; -struct SystemAvailabilityManagerData; -struct SystemReportsData; -struct SystemVarsData; -struct TARCOGCommonData; -struct TARCOGOutputData; -struct ThermalChimneysData; -struct ThermalComfortsData; -struct ThermalISO15099CalcData; -struct TARCOGGasses90Data; -struct TARCOGMainData; -struct TarcogShadingData; -struct TranspiredCollectorData; -struct UFADManagerData; -struct UnitHeatersData; -struct UnitVentilatorsData; -struct UnitarySystemsData; -struct UserDefinedComponentsData; -struct UtilityRoutinesData; -struct VariableSpeedCoilsData; -struct VectorsData; -struct VentilatedSlabData; -struct ViewFactorInfoData; -struct WaterCoilsData; -struct WaterManagerData; -struct WaterThermalTanksData; -struct WaterToAirHeatPumpData; -struct WaterToAirHeatPumpSimpleData; -struct WaterUseData; -struct WeatherManagerData; -struct WindTurbineData; -struct WindowACData; -struct WindowComplexManagerData; -struct WindowEquivLayerData; -struct WindowEquivalentLayerData; -struct WindowManagerData; -struct WindowManagerExteriorData; -struct ZoneAirLoopEquipmentManagerData; -struct ZoneContaminantPredictorCorrectorData; -struct ZoneDehumidifierData; -struct ZoneEquipmentManagerData; -struct ZonePlenumData; -struct ZoneTempPredictorCorrectorData; - -struct EnergyPlusData : BaseGlobalStruct -{ - bool ready = true; - - IOFiles files; - - // module globals - std::unique_ptr dataAirLoopHVACDOAS; - std::unique_ptr dataAirSystemsData; - std::unique_ptr afn; - std::unique_ptr dataBSDFWindow; - std::unique_ptr dataBaseSizerFanHeatInputs; - std::unique_ptr dataBaseSizerScalableInputs; - std::unique_ptr dataBaseboardElectric; - std::unique_ptr dataBaseboardRadiator; - std::unique_ptr dataBoilerSteam; - std::unique_ptr dataBoilers; - std::unique_ptr dataBranchInputManager; - std::unique_ptr dataBranchNodeConnections; - std::unique_ptr dataCTElectricGenerator; - std::unique_ptr dataChilledCeilingPanelSimple; - std::unique_ptr dataChillerAbsorber; - std::unique_ptr dataChillerElectricEIR; - std::unique_ptr dataChillerExhaustAbsorption; - std::unique_ptr dataChillerGasAbsorption; - std::unique_ptr dataChillerIndirectAbsorption; - std::unique_ptr dataChillerReformulatedEIR; - std::unique_ptr dataChillerElectricASHRAE205; - std::unique_ptr dataCoilCooingDX; - std::unique_ptr dataCondenserLoopTowers; - std::unique_ptr dataConstruction; - std::unique_ptr dataContaminantBalance; - std::unique_ptr dataConvect; - std::unique_ptr dataConvergeParams; - std::unique_ptr dataCoolTower; - std::unique_ptr dataCostEstimateManager; - std::unique_ptr dataCrossVentMgr; - std::unique_ptr dataCurveManager; - std::unique_ptr dataDXCoils; - std::unique_ptr dataDXFEarClipping; - std::unique_ptr dataAirLoop; - std::unique_ptr dataBranchAirLoopPlant; - std::unique_ptr dataDaylightingDevicesData; - std::unique_ptr dataGlobal; - std::unique_ptr dataInputProcessing; - std::unique_ptr dataPlnt; - std::unique_ptr dataStrGlobals; - std::unique_ptr dataTimingsData; - std::unique_ptr dataWaterData; - std::unique_ptr dataZoneCtrls; - std::unique_ptr dataZoneEnergyDemand; - std::unique_ptr dataZoneEquip; - std::unique_ptr dataDaylightingDevices; - std::unique_ptr dataDayltg; - std::unique_ptr dataDefineEquipment; - std::unique_ptr dataDemandManager; - std::unique_ptr dataDesiccantDehumidifiers; - std::unique_ptr dataDispVentMgr; - std::unique_ptr dataDualDuct; - std::unique_ptr dataEIRFuelFiredHeatPump; - std::unique_ptr dataEIRPlantLoopHeatPump; - std::unique_ptr dataEMSMgr; - std::unique_ptr dataEarthTube; - std::unique_ptr dataEcoRoofMgr; - std::unique_ptr dataEconLifeCycleCost; - std::unique_ptr dataEconTariff; - std::unique_ptr dataElectPwrSvcMgr; - std::unique_ptr dataElectBaseboardRad; - std::unique_ptr dataEnvrn; - std::unique_ptr dataErrTracking; - std::unique_ptr dataEvapCoolers; - std::unique_ptr dataEvapFluidCoolers; - std::unique_ptr dataExteriorEnergyUse; - std::unique_ptr dataExternalInterface; - std::unique_ptr dataFanCoilUnits; - std::unique_ptr dataFans; - std::unique_ptr dataFaultsMgr; - std::unique_ptr dataFluidCoolers; - std::unique_ptr dataFluidProperties; - std::unique_ptr dataFourPipeBeam; - std::unique_ptr dataFuelCellElectGen; - std::unique_ptr dataFurnaces; - std::unique_ptr dataGeneral; - std::unique_ptr dataGeneralRoutines; - std::unique_ptr dataGeneratorFuelSupply; - std::unique_ptr dataGenerator; - std::unique_ptr dataGlobalNames; - std::unique_ptr dataGroundHeatExchanger; - std::unique_ptr dataGrndTempModelMgr; - std::unique_ptr dataHVACControllers; - std::unique_ptr dataHVACCooledBeam; - std::unique_ptr dataHVACCtrl; - std::unique_ptr dataHVACDXHeatPumpSys; - std::unique_ptr dataHVACDuct; - std::unique_ptr dataHVACGlobal; - std::unique_ptr dataHVACAssistedCC; - std::unique_ptr dataHVACInterfaceMgr; - std::unique_ptr dataHVACMgr; - std::unique_ptr dataHVACMultiSpdHP; - std::unique_ptr dataHVACSingleDuctInduc; - std::unique_ptr dataHVACSizingSimMgr; - std::unique_ptr dataHVACStandAloneERV; - std::unique_ptr dataHVACUnitaryBypassVAV; - std::unique_ptr dataHVACVarRefFlow; - std::unique_ptr dataHWBaseboardRad; - std::unique_ptr dataHeatBalFanSys; - std::unique_ptr dataHeatBalFiniteDiffMgr; - std::unique_ptr dataHeatBalHAMTMgr; - std::unique_ptr dataHeatBalIntHeatGains; - std::unique_ptr dataHeatBalSurf; - std::unique_ptr dataHeatBalSurfMgr; - std::unique_ptr dataHeatBalAirMgr; - std::unique_ptr dataHeatBal; - std::unique_ptr dataHeatBalIntRadExchg; - std::unique_ptr dataHeatBalMgr; - std::unique_ptr dataHPWaterToWaterClg; - std::unique_ptr dataHPWaterToWaterHtg; - std::unique_ptr dataHPWaterToWaterSimple; - std::unique_ptr dataHeatRecovery; - std::unique_ptr dataHeatingCoils; - std::unique_ptr dataHighTempRadSys; - std::unique_ptr dataHumidifiers; - std::unique_ptr dataHybridModel; - std::unique_ptr dataHybridUnitaryAC; - std::unique_ptr dataHysteresisPhaseChange; - std::unique_ptr dataICEngElectGen; - std::unique_ptr dataIPShortCut; - std::unique_ptr dataIceThermalStorage; - std::unique_ptr dataIndoorGreen; - std::unique_ptr dataIntegratedHP; - std::unique_ptr dataInternalHeatGains; - std::unique_ptr dataLoopNodes; - std::unique_ptr dataLowTempRadSys; - std::unique_ptr dataMaterial; - std::unique_ptr dataMatrixDataManager; - std::unique_ptr dataCHPElectGen; - std::unique_ptr dataMircoturbElectGen; - std::unique_ptr dataMixedAir; - std::unique_ptr dataMixerComponent; - std::unique_ptr dataMstBal; - std::unique_ptr dataMstBalEMPD; - std::unique_ptr dataMoistureBalEMPD; - std::unique_ptr dataMundtSimMgr; - std::unique_ptr dataNodeInputMgr; - std::unique_ptr dataOutAirNodeMgr; - std::unique_ptr dataOutdoorAirUnit; - std::unique_ptr dataOutputProcessor; - std::unique_ptr dataOutRptPredefined; - std::unique_ptr dataOutputReportTabularAnnual; - std::unique_ptr dataOutRptTab; - std::unique_ptr dataOutputReports; - std::unique_ptr dataOutput; - std::unique_ptr dataOutsideEnergySrcs; - std::unique_ptr dataPackagedThermalStorageCoil; - std::unique_ptr dataPhotovoltaicState; - std::unique_ptr dataPhotovoltaicThermalCollector; - std::unique_ptr dataPhotovoltaic; - std::unique_ptr dataPipeHT; - std::unique_ptr dataPipes; - std::unique_ptr dataPlantCentralGSHP; - std::unique_ptr dataPlantChillers; - std::unique_ptr dataPlantCompTempSrc; - std::unique_ptr dataPlantCondLoopOp; - std::unique_ptr dataPlantHXFluidToFluid; - std::unique_ptr dataPlantLoadProfile; - std::unique_ptr dataPlantMgr; - std::unique_ptr dataPlantPipingSysMgr; - std::unique_ptr dataPlantPressureSys; - std::unique_ptr dataPlantUtilities; - std::unique_ptr dataPlantValves; - std::unique_ptr dataPluginManager; - std::unique_ptr dataPollution; - std::unique_ptr dataPondGHE; - std::unique_ptr dataPowerInductionUnits; - std::unique_ptr dataPsychrometrics; - std::unique_ptr dataPsychCache; - std::unique_ptr dataPumps; - std::unique_ptr dataPurchasedAirMgr; - std::unique_ptr dataRefrigCase; - std::unique_ptr dataRptCoilSelection; - std::unique_ptr dataReportFlag; - std::unique_ptr dataResultsFramework; - std::unique_ptr dataRetAirPathMrg; - std::unique_ptr dataExhAirSystemMrg; - std::unique_ptr dataExhCtrlSystemMrg; - std::unique_ptr dataRoomAirflowNetModel; - std::unique_ptr dataRoomAir; - std::unique_ptr dataRoomAirModelTempPattern; - std::unique_ptr dataRootFinder; - std::unique_ptr dataRuntimeLang; - std::unique_ptr dataRuntimeLangProcessor; - std::unique_ptr dataSQLiteProcedures; - std::unique_ptr dataScheduleMgr; - std::unique_ptr dataSetPointManager; - std::unique_ptr dataShadowComb; - std::unique_ptr dataSimAirServingZones; - std::unique_ptr dataSimulationManager; - std::unique_ptr dataSingleDuct; - std::unique_ptr dataSize; - std::unique_ptr dataSizingManager; - std::unique_ptr dataSolarCollectors; - std::unique_ptr dataSolarReflectionManager; - std::unique_ptr dataSolarShading; - std::unique_ptr dataSplitterComponent; - std::unique_ptr dataSteamBaseboardRadiator; - std::unique_ptr dataSteamCoils; - std::unique_ptr dataSurfColor; - std::unique_ptr dataSurfaceGeometry; - std::unique_ptr dataSurfaceGroundHeatExchangers; - std::unique_ptr dataSurfLists; - std::unique_ptr dataSurface; - std::unique_ptr dataSwimmingPools; - std::unique_ptr dataSysAirFlowSizer; - std::unique_ptr dataAvail; - std::unique_ptr dataSysRpts; - std::unique_ptr dataSysVars; - std::unique_ptr dataTARCOGCommon; - std::unique_ptr dataTARCOGOutputs; - std::unique_ptr dataThermalChimneys; - std::unique_ptr dataThermalComforts; - std::unique_ptr dataThermalISO15099Calc; - std::unique_ptr dataTARCOGGasses90; - std::unique_ptr dataTARCOGMain; - std::unique_ptr dataTarcogShading; - std::unique_ptr dataTranspiredCollector; - std::unique_ptr dataUFADManager; - std::unique_ptr dataUnitHeaters; - std::unique_ptr dataUnitVentilators; - std::unique_ptr dataUnitarySystems; - std::unique_ptr dataUserDefinedComponents; - std::unique_ptr dataUtilityRoutines; - std::unique_ptr dataVariableSpeedCoils; - std::unique_ptr dataVectors; - std::unique_ptr dataVentilatedSlab; - std::unique_ptr dataViewFactor; - std::unique_ptr dataWaterCoils; - std::unique_ptr dataWaterManager; - std::unique_ptr dataWaterThermalTanks; - std::unique_ptr dataWaterToAirHeatPump; - std::unique_ptr dataWaterToAirHeatPumpSimple; - std::unique_ptr dataWaterUse; - std::unique_ptr dataWeather; - std::unique_ptr dataWindTurbine; - std::unique_ptr dataWindowAC; - std::unique_ptr dataWindowComplexManager; - std::unique_ptr dataWindowEquivLayer; - std::unique_ptr dataWindowEquivalentLayer; - std::unique_ptr dataWindowManager; - std::unique_ptr dataWindowManagerExterior; - std::unique_ptr dataZoneAirLoopEquipmentManager; - std::unique_ptr dataZoneContaminantPredictorCorrector; - std::unique_ptr dataZoneDehumidifier; - std::unique_ptr dataZoneEquipmentManager; - std::unique_ptr dataZonePlenum; - std::unique_ptr dataZoneTempPredictorCorrector; - - EnergyPlusData(); - ~EnergyPlusData(); - - // Cannot safely copy or delete this until we eradicate all remaining - // calls to IOFiles::getSingleton and IOFiles::setSingleton - EnergyPlusData(const EnergyPlusData &) = delete; - EnergyPlusData(EnergyPlusData &&) = delete; - - void init_state([[maybe_unused]] EnergyPlusData &state) override; - bool init_state_called = false; - - void clear_state() override; -}; - -} // namespace EnergyPlus -#endif diff --git a/src/EnergyPlus/FluidProperties.cc b/src/EnergyPlus/FluidProperties.cc index 870bb5e0567..41b39fbb56f 100644 --- a/src/EnergyPlus/FluidProperties.cc +++ b/src/EnergyPlus/FluidProperties.cc @@ -102,6 +102,12 @@ namespace FluidProperties { // supplying the same data for concentrations of 0.0 and 1.0 only. // Temperature data has to be supplied in ascending order only. + constexpr int DefaultNumGlyTemps(33); // Temperature dimension of default glycol data + constexpr int DefaultNumGlyConcs(10); // Concentration dimension of default glycol data + constexpr int DefaultNumSteamTemps(111); // Temperature dimension of default steam data. + constexpr int DefaultNumSteamSuperheatedTemps(114); // Temperature dimension of default steam data. + constexpr int DefaultNumSteamSuperheatedPressure(114); // Temperature dimension of default steam data. + static constexpr std::array DefaultGlycolTemps = { -35.0, -30.0, -25.0, -20.0, -15.0, -10.0, -5.0, 0.0, 5.0, 10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0}; // 33 total temperature @@ -523,31 +529,23 @@ namespace FluidProperties { // Standard EnergyPlus methodology. Derived type portions are // allocated as necessary as the data is read into the program. - // Using/Aliasing - using namespace std::placeholders; // For use with 'std::bind' in Array initializers - // SUBROUTINE PARAMETER DEFINITIONS: Real64 constexpr PressToler(1.0); // Some reasonable value for comparisons - static constexpr std::string_view RoutineName("GetFluidPropertiesData: "); + static constexpr std::string_view routineName = "GetFluidPropertiesData"; // SUBROUTINE LOCAL VARIABLE DECLARATIONS: Array1D_string Alphas; // Reads string value from input file - Array1D_string cAlphaFieldNames; // field names for alpha fields - Array1D_string cNumericFieldNames; // field names for numeric fields + Array1D_string cAlphaFields; // field names for alpha fields + Array1D_string cNumericFields; // field names for numeric fields int NumAlphas; // States which alpha value to read from a "Number" line Array1D Numbers; // brings in data from IP Array1D_bool lAlphaFieldBlanks; // logical for blank alpha fields Array1D_bool lNumericFieldBlanks; // logical for blank numeric fields int NumNumbers; // States which number value to read from a "Numbers" line int Status; // Either 1 "object found" or -1 "not found" (also used as temp) - int InData; - std::string TempsName; - bool FirstSHMatch; + bool ErrorsFound(false); std::string CurrentModuleObject; // for ease in renaming. - Real64 pTemp; - int j; - int FluidNum; // SUBROUTINE LOCAL DATA: @@ -561,40 +559,31 @@ namespace FluidProperties { auto &df = state.dataFluidProps; - df->NumOfRefrigerants = 0; - df->NumOfGlycols = 0; - + // This is here because of a unit test in HVACVRF:2358 + for (int i = 1; i <= df->refrigs.isize(); ++i) delete df->refrigs(i); + df->refrigs.clear(); + for (int i = 1; i <= df->glycolsRaw.isize(); ++i) delete df->glycolsRaw(i); + df->glycolsRaw.clear(); + for (int i = 1; i <= df->glycols.isize(); ++i) delete df->glycols(i); + df->glycols.clear(); + // For default "glycol" fluids of Water, Ethylene Glycol, and Propylene Glycol - Array2D DefaultSteamSuperheatedEnthalpyData(DefaultNumSteamSuperheatedPressure, DefaultNumSteamSuperheatedTemps); + // Where are these things initialized? + Array2D DefaultSteamSuperheatedEnthalpyData(DefaultNumSteamSuperheatedPressure, DefaultNumSteamSuperheatedTemps); Array2D DefaultSteamSuperheatedDensityData(DefaultNumSteamSuperheatedPressure, DefaultNumSteamSuperheatedTemps); struct FluidTempData { // Members std::string Name; // Name of the temperature list - int NumOfTemps = 0; // Number of temperatures in a particular arry + int NumOfTemps = 0; // Number of temperatures in a particular arry Array1D Temps; // Temperature values (degrees C) }; - struct PressureSequence - { - // Members - Real64 Pressure = 0.0; - int InPtr = 0; - }; - - struct FluidData - { - // Members - std::string Name; - bool IsGlycol = false; - }; - // Object Data Array1D FluidTemps; - Array1D PressurePtr; - Array1D FluidNames; + int MaxAlphas = 0; int MaxNumbers = 0; @@ -635,32 +624,33 @@ namespace FluidProperties { } Alphas.allocate(MaxAlphas); - cAlphaFieldNames.allocate(MaxAlphas); + cAlphaFields.allocate(MaxAlphas); lAlphaFieldBlanks.allocate(MaxAlphas); Alphas = ""; - cAlphaFieldNames = ""; + cAlphaFields = ""; lAlphaFieldBlanks = false; Numbers.allocate(MaxNumbers); - cNumericFieldNames.allocate(MaxNumbers); + cNumericFields.allocate(MaxNumbers); lNumericFieldBlanks.allocate(MaxNumbers); Numbers = 0.0; - cNumericFieldNames = ""; + cNumericFields = ""; lNumericFieldBlanks = false; + // First things first, add refrigerant placeholder for Steam. + auto *steam = new RefrigProps; + steam->Name = "STEAM"; + df->refrigs.push_back(steam); + steam->Num = df->refrigs.isize(); + // Check to see if there is any FluidName input. If not, this is okay as // long as the user only desires to simulate loops with water. More than // one FluidName input is not allowed. CurrentModuleObject = "FluidProperties:Name"; int NumOfOptionalInput = state.dataInputProcessing->inputProcessor->getNumObjectsFound(state, CurrentModuleObject); - FluidNames.allocate(NumOfOptionalInput); - - // Get a count on the number of refrigerants and the number of glycols entered - // so that the main derived types can be allocated - FluidNum = 0; for (int Loop = 1; Loop <= NumOfOptionalInput; ++Loop) { state.dataInputProcessing->inputProcessor->getObjectItem(state, CurrentModuleObject, @@ -672,93 +662,73 @@ namespace FluidProperties { Status, lNumericFieldBlanks, lAlphaFieldBlanks, - cAlphaFieldNames, - cNumericFieldNames); - ++FluidNum; - FluidNames(FluidNum).Name = Alphas(1); - if (Util::SameString(Alphas(2), Refrig)) { - ++df->NumOfRefrigerants; - FluidNames(FluidNum).IsGlycol = false; - } else if (Util::SameString(Alphas(2), Glycol)) { - ++df->NumOfGlycols; - FluidNames(FluidNum).IsGlycol = true; + cAlphaFields, + cNumericFields); + + if (Alphas(2) == "REFRIGERANT") { + if (GetRefrigNum(state, Alphas(1)) == 0) { + auto *refrig = new RefrigProps; + refrig->Name = Alphas(1); + df->refrigs.push_back(refrig); + refrig->Num = df->refrigs.isize(); + } + } else if (Alphas(2) == "GLYCOL") { + if (GetGlycolNum(state, Alphas(1)) == 0) { + auto *glycol = new GlycolProps; + glycol->Name = Alphas(1); + df->glycols.push_back(glycol); + glycol->Num = df->glycols.isize(); + } } else { - ShowSevereError(state, format("{}{}=\"{}\", invalid type", RoutineName, CurrentModuleObject, Alphas(1))); - ShowContinueError(state, format("...entered value=\"{}, Only REFRIGERANT or GLYCOL allowed as {}", Alphas(2), cAlphaFieldNames(2))); + ShowSevereError(state, format("{}: {}=\"{}\", invalid type", routineName, CurrentModuleObject, Alphas(1))); + ShowContinueError(state, format("...entered value=\"{}, Only REFRIGERANT or GLYCOL allowed as {}", Alphas(2), cAlphaFields(2))); ErrorsFound = true; } } if (ErrorsFound) { - ShowFatalError(state, format("{} Previous errors in input cause program termination.", RoutineName)); - } - - if (df->NumOfRefrigerants + 1 > 0) { - df->RefrigData.allocate(df->NumOfRefrigerants + 1); - } - if (df->NumOfGlycols > 0) { - df->GlyRawData.allocate(df->NumOfGlycols); - } - - // Take the fluid names and assign them to the appropriate derived type - df->NumOfRefrigerants = 1; - df->NumOfGlycols = 0; - df->RefrigData(1).Name = "STEAM"; // Steam is a refrigerant? In which universe? - df->RefrigData(1).Num = 1; - df->RefrigData(1).used = 1; - - for (int Loop = 1; Loop <= FluidNum; ++Loop) { - if (!FluidNames(Loop).IsGlycol) { - ++df->NumOfRefrigerants; - df->RefrigData(df->NumOfRefrigerants).Name = FluidNames(Loop).Name; - df->RefrigData(df->NumOfRefrigerants).Num = df->NumOfRefrigerants; - } else if (FluidNames(Loop).IsGlycol) { - ++df->NumOfGlycols; - df->GlyRawData(df->NumOfGlycols).Name = FluidNames(Loop).Name; - df->GlyRawData(df->NumOfGlycols).Num = df->NumOfGlycols; - } + ShowFatalError(state, format("{}: Previous errors in input cause program termination.", routineName)); } - FluidNames.deallocate(); - - df->RefrigData(1).NumPsPoints = DefaultNumSteamTemps; - df->RefrigData(1).PsTemps.allocate(DefaultNumSteamTemps); - df->RefrigData(1).PsValues.allocate(DefaultNumSteamTemps); - df->RefrigData(1).NumHPoints = DefaultNumSteamTemps; - df->RefrigData(1).HTemps.allocate(DefaultNumSteamTemps); - df->RefrigData(1).HfValues.allocate(DefaultNumSteamTemps); - df->RefrigData(1).HfgValues.allocate(DefaultNumSteamTemps); - df->RefrigData(1).NumCpPoints = DefaultNumSteamTemps; - df->RefrigData(1).CpTemps.allocate(DefaultNumSteamTemps); - df->RefrigData(1).CpfValues.allocate(DefaultNumSteamTemps); - df->RefrigData(1).CpfgValues.allocate(DefaultNumSteamTemps); - df->RefrigData(1).NumRhoPoints = DefaultNumSteamTemps; - df->RefrigData(1).RhoTemps.allocate(DefaultNumSteamTemps); - df->RefrigData(1).RhofValues.allocate(DefaultNumSteamTemps); - df->RefrigData(1).RhofgValues.allocate(DefaultNumSteamTemps); - - df->RefrigData(1).PsTemps = DefaultSteamTemps; - df->RefrigData(1).PsValues = DefaultSteamPressData; - df->RefrigData(1).HTemps = DefaultSteamTemps; - df->RefrigData(1).HfValues = DefaultSteamEnthalpyFluidData; - df->RefrigData(1).HfgValues = DefaultSteamEnthalpyGasFluidData; - df->RefrigData(1).CpTemps = DefaultSteamTemps; - df->RefrigData(1).CpfValues = DefaultSteamCpFluidData; - df->RefrigData(1).CpfgValues = DefaultSteamCpGasFluidData; - df->RefrigData(1).RhoTemps = DefaultSteamTemps; - df->RefrigData(1).RhofValues = DefaultSteamDensityFluidData; - df->RefrigData(1).RhofgValues = DefaultSteamDensityGasFluidData; - - df->RefrigData(1).NumSuperTempPts = DefaultNumSteamSuperheatedTemps; - df->RefrigData(1).NumSuperPressPts = DefaultNumSteamSuperheatedPressure; - df->RefrigData(1).SHTemps.allocate(df->RefrigData(1).NumSuperTempPts); - df->RefrigData(1).SHPress.allocate(df->RefrigData(1).NumSuperPressPts); - df->RefrigData(1).HshValues.allocate(df->RefrigData(1).NumSuperPressPts, df->RefrigData(1).NumSuperTempPts); - df->RefrigData(1).RhoshValues.allocate(df->RefrigData(1).NumSuperPressPts, df->RefrigData(1).NumSuperTempPts); - df->RefrigData(1).SHTemps = DefaultSteamSuperheatedTemps; - df->RefrigData(1).SHPress = DefaultSteamSuperheatedPressData; - df->RefrigData(1).HshValues = DefaultSteamSuperheatedEnthalpyData; - df->RefrigData(1).RhoshValues = DefaultSteamSuperheatedDensityData; + // Initialize Steam + steam->NumPsPoints = DefaultNumSteamTemps; + steam->PsTemps.allocate(DefaultNumSteamTemps); + steam->PsValues.allocate(DefaultNumSteamTemps); + steam->NumHPoints = DefaultNumSteamTemps; + steam->HTemps.allocate(DefaultNumSteamTemps); + steam->HfValues.allocate(DefaultNumSteamTemps); + steam->HfgValues.allocate(DefaultNumSteamTemps); + steam->NumCpPoints = DefaultNumSteamTemps; + steam->CpTemps.allocate(DefaultNumSteamTemps); + steam->CpfValues.allocate(DefaultNumSteamTemps); + steam->CpfgValues.allocate(DefaultNumSteamTemps); + steam->NumRhoPoints = DefaultNumSteamTemps; + steam->RhoTemps.allocate(DefaultNumSteamTemps); + steam->RhofValues.allocate(DefaultNumSteamTemps); + steam->RhofgValues.allocate(DefaultNumSteamTemps); + + steam->PsTemps = DefaultSteamTemps; + steam->PsValues = DefaultSteamPressData; + steam->HTemps = DefaultSteamTemps; + steam->HfValues = DefaultSteamEnthalpyFluidData; + steam->HfgValues = DefaultSteamEnthalpyGasFluidData; + steam->CpTemps = DefaultSteamTemps; + steam->CpfValues = DefaultSteamCpFluidData; + steam->CpfgValues = DefaultSteamCpGasFluidData; + steam->RhoTemps = DefaultSteamTemps; + steam->RhofValues = DefaultSteamDensityFluidData; + steam->RhofgValues = DefaultSteamDensityGasFluidData; + + steam->NumSupTempPoints = DefaultNumSteamSuperheatedTemps; + steam->NumSupPressPoints = DefaultNumSteamSuperheatedPressure; + steam->SupTemps.allocate(steam->NumSupTempPoints); + steam->SupPress.allocate(steam->NumSupPressPoints); + steam->HshValues.allocate(steam->NumSupPressPoints, steam->NumSupTempPoints); + steam->RhoshValues.allocate(steam->NumSupPressPoints, steam->NumSupTempPoints); + steam->SupTemps = DefaultSteamSuperheatedTemps; + steam->SupPress = DefaultSteamSuperheatedPressData; + steam->HshValues = DefaultSteamSuperheatedEnthalpyData; + steam->RhoshValues = DefaultSteamSuperheatedDensityData; // Read in all of the temperature arrays in the input file FluidTemps.allocate(NumOfFluidTempArrays); @@ -766,7 +736,8 @@ namespace FluidProperties { CurrentModuleObject = "FluidProperties:Temperatures"; for (int Loop = 1; Loop <= NumOfFluidTempArrays; ++Loop) { - + auto &tempArray = FluidTemps(Loop); + state.dataInputProcessing->inputProcessor->getObjectItem(state, CurrentModuleObject, Loop, @@ -777,1442 +748,747 @@ namespace FluidProperties { Status, lNumericFieldBlanks, lAlphaFieldBlanks, - cAlphaFieldNames, - cNumericFieldNames); + cAlphaFields, + cNumericFields); - FluidTemps(Loop).Name = Alphas(1); - FluidTemps(Loop).NumOfTemps = NumNumbers; + tempArray.Name = Alphas(1); + tempArray.NumOfTemps = NumNumbers; - FluidTemps(Loop).Temps.allocate(FluidTemps(Loop).NumOfTemps); - FluidTemps(Loop).Temps = Numbers({1, NumNumbers}); + tempArray.Temps.allocate(tempArray.NumOfTemps); + tempArray.Temps = Numbers({1, NumNumbers}); - for (int TempLoop = 2; TempLoop <= FluidTemps(Loop).NumOfTemps; ++TempLoop) { - if (FluidTemps(Loop).Temps(TempLoop) <= FluidTemps(Loop).Temps(TempLoop - 1)) { + for (int TempLoop = 2; TempLoop <= tempArray.NumOfTemps; ++TempLoop) { + if (tempArray.Temps(TempLoop) <= tempArray.Temps(TempLoop - 1)) { ShowSevereError( state, - format("{}{} name={}, lists must have data in ascending order", RoutineName, CurrentModuleObject, FluidTemps(Loop).Name)); + format("{}: {} name={}, lists must have data in ascending order", routineName, CurrentModuleObject, tempArray.Name)); ShowContinueError(state, format("First out of order occurrence at Temperature #({}) {{{:.R3}}} >= Temp({}) {{{:.R3}}}", TempLoop - 1, - FluidTemps(Loop).Temps(TempLoop - 1), + tempArray.Temps(TempLoop - 1), TempLoop, - FluidTemps(Loop).Temps(TempLoop))); + tempArray.Temps(TempLoop))); ErrorsFound = true; break; } } } - // *************** REFRIGERANTS *************** - // Go through each refrigerant found in the fluid names statement and read in the data - // Note that every valid fluid must have ALL of the necessary data or a fatal error will - // be produced. - for (int Loop = 2; Loop <= df->NumOfRefrigerants; ++Loop) { - - // For each property, cycle through all the valid input until the proper match is found. - - // ********** SATURATED DATA SECTION ********** - - // Get: ***** Saturation Pressure temperatures and data (fluidgas only) ***** - // This section added by S.J.Rees May 2002. - CurrentModuleObject = "FluidProperties:Saturated"; - TempsName = ""; - for (InData = 1; InData <= NumOfSatFluidPropArrays; ++InData) { - - state.dataInputProcessing->inputProcessor->getObjectItem(state, - CurrentModuleObject, - InData, - Alphas, - NumAlphas, - Numbers, - NumNumbers, - Status, - lNumericFieldBlanks, - lAlphaFieldBlanks, - cAlphaFieldNames, - cNumericFieldNames); - - if ((Util::SameString(Alphas(1), df->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), Pressure)) && - (Util::SameString(Alphas(3), GasFluid))) { - - for (int TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) { - - if (Util::SameString(Alphas(4), FluidTemps(TempLoop).Name)) { - TempsName = FluidTemps(TempLoop).Name; - // At this point, we have found the correct input line and found a match - // for the temperature array. It's time to load up the local derived type. - df->RefrigData(Loop).NumPsPoints = FluidTemps(TempLoop).NumOfTemps; - df->RefrigData(Loop).PsTemps.allocate(df->RefrigData(Loop).NumPsPoints); - df->RefrigData(Loop).PsValues.allocate(df->RefrigData(Loop).NumPsPoints); - - // Make sure the number of points in the two arrays (temps and values) are the same - if (NumNumbers != df->RefrigData(Loop).NumPsPoints) { - ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); - ShowContinueError(state, - format("Temperature Name={}, Temperature array and fluid saturation pressure array must have the " - "same number of points", - TempsName)); - ShowContinueError(state, - format("Temperature # points={} whereas {} # pressure points={}", - NumNumbers, - df->RefrigData(Loop).Name, - df->RefrigData(Loop).NumPsPoints)); - ErrorsFound = true; - break; // the TempLoop DO Loop - } - - // Same number of points so assign the values - df->RefrigData(Loop).PsTemps = FluidTemps(TempLoop).Temps; - df->RefrigData(Loop).PsValues = Numbers({1, NumNumbers}); - - break; // the TempLoop DO loop - } - - // If it made it all the way to the last temperature array and didn't find a match, then no match was found - if (TempLoop == NumOfFluidTempArrays) { - ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); - ShowContinueError(state, "Found saturated fluid gas/fluid pressure input but no matching temperature array"); - ShowContinueError(state, format("Entered Temperature Name={}", TempsName)); - ErrorsFound = true; - } - - } // ...end of FluidTemps DO loop - - break; // the InData DO loop - } - - // If it made it all the way to the last input occurrence and didn't find a match, - // then no sat press data found - if (InData == NumOfSatFluidPropArrays) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); - ShowContinueError(state, - format(R"(No Gas/Fluid Saturation Pressure found. Need properties with {}="Pressure" and {}="FluidGas".)", - cAlphaFieldNames(2), - cAlphaFieldNames(3))); - ErrorsFound = true; - } - - } // ...end of DO loop through all of the input syntax trying to find saturation pressure for this refrigerant - - // Get: ***** ENTHALPY of SATURATED LIQUID ***** - CurrentModuleObject = "FluidProperties:Saturated"; - TempsName = ""; - for (InData = 1; InData <= NumOfSatFluidPropArrays; ++InData) { - - state.dataInputProcessing->inputProcessor->getObjectItem(state, - CurrentModuleObject, - InData, - Alphas, - NumAlphas, - Numbers, - NumNumbers, - Status, - lNumericFieldBlanks, - lAlphaFieldBlanks, - cAlphaFieldNames, - cNumericFieldNames); - - if ((Util::SameString(Alphas(1), df->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), Enthalpy)) && - (Util::SameString(Alphas(3), Fluid))) { - - for (int TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) { - - if (Util::SameString(Alphas(4), FluidTemps(TempLoop).Name)) { - TempsName = FluidTemps(TempLoop).Name; - // At this point, we have found the correct input line and found a match - // for the temperature array. It's time to load up the local derived type. - df->RefrigData(Loop).NumHPoints = FluidTemps(TempLoop).NumOfTemps; - df->RefrigData(Loop).HTemps.allocate(df->RefrigData(Loop).NumHPoints); - df->RefrigData(Loop).HfValues.allocate(df->RefrigData(Loop).NumHPoints); - - // Make sure the number of points in the two arrays (temps and values) are the same - if (NumNumbers != df->RefrigData(Loop).NumHPoints) { - ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); - ShowSevereError(state, - format("Temperature Name={}, Temperature array and saturated fluid enthalpy array must have the same " - "number of points", - TempsName)); - ShowContinueError(state, - format("Temperature # points={} whereas {} # points={}", - NumNumbers, - df->RefrigData(Loop).Name, - df->RefrigData(Loop).NumHPoints)); - ErrorsFound = true; - break; // the TempLoop DO Loop - } - - // Same number of points so assign the values - df->RefrigData(Loop).HTemps = FluidTemps(TempLoop).Temps; - df->RefrigData(Loop).HfValues = Numbers({1, NumNumbers}); - - break; // the TempLoop DO loop - } - - // If it made it all the way to the last temperature array and didn't find a match, then no match was found - if (TempLoop == NumOfFluidTempArrays) { - ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); - ShowContinueError(state, "Found saturated fluid enthalpy input but no matching temperature array"); - ShowContinueError(state, format("Entered Temperature Name={}", TempsName)); - ErrorsFound = true; - } - - } // ...end of FluidTemps DO loop - - break; // the InData DO loop - } - - // If it made it all the way to the last input occurrence and didn't find a match, then no sat fluid enthalpy data found - if (InData == NumOfSatFluidPropArrays) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); - ShowContinueError(state, - format(R"(No Saturated Fluid Enthalpy found. Need properties to be entered with {}="Enthalpy" and {}="Fluid".)", - cAlphaFieldNames(2), - cAlphaFieldNames(3))); - ErrorsFound = true; - } - - } // ...end of DO loop through all of the input syntax trying to find saturated fluid enthalpy for this refrigerant - - // Get: ***** ENTHALPY of SATURATED LIQUID/VAPOR ***** (difference between Hf and Hg, i.e. Hfg) - CurrentModuleObject = "FluidProperties:Saturated"; - for (InData = 1; InData <= NumOfSatFluidPropArrays; ++InData) { - - state.dataInputProcessing->inputProcessor->getObjectItem(state, - CurrentModuleObject, - InData, - Alphas, - NumAlphas, - Numbers, - NumNumbers, - Status, - lNumericFieldBlanks, - lAlphaFieldBlanks, - cAlphaFieldNames, - cNumericFieldNames); - - if ((Util::SameString(Alphas(1), df->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), Enthalpy)) && - (Util::SameString(Alphas(3), GasFluid))) { - - for (int TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) { - - if (Util::SameString(Alphas(4), FluidTemps(TempLoop).Name)) { - if (!Util::SameString(FluidTemps(TempLoop).Name, TempsName)) { - ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); - ShowContinueError(state, "Temperatures for enthalpy fluid and gas/fluid points are not the same"); - ShowContinueError(state, format("Name={} => {} /= {}", Alphas(4), FluidTemps(TempLoop).Name, TempsName)); - ErrorsFound = true; - break; - } - // At this point, we have found the correct input line and found a match - // for the temperature array. It's time to load up the local derived type. - df->RefrigData(Loop).HfgValues.allocate(df->RefrigData(Loop).NumHPoints); - - // Make sure the number of points in the two arrays (temps and values) are the same - if (NumNumbers != df->RefrigData(Loop).NumHPoints) { - ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); - ShowContinueError(state, - format("Temperature Name={}, Temperature array and saturated gas/fluid enthalpy array must have " - "the same number of points", - TempsName)); - ShowContinueError(state, - format("Temperature # points={} whereas {} # points={}", - NumNumbers, - df->RefrigData(Loop).Name, - df->RefrigData(Loop).NumHPoints)); - ErrorsFound = true; - break; // the TempLoop DO Loop - } - - // Same number of points so assign the values - df->RefrigData(Loop).HfgValues = Numbers({1, NumNumbers}); - - break; // the TempLoop DO loop - } - - // If it made it all the way to the last temperature array and didn't find a match, then no match was found - if (TempLoop == NumOfFluidTempArrays) { - ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); - ShowContinueError(state, "Found saturated gas/fluid enthalpy input but no matching temperature array"); - ShowContinueError(state, format("Entered Temperature Name={}", TempsName)); - ErrorsFound = true; - } - - } // ...end of FluidTemps DO loop - - break; // the InData DO loop - } - - // If it made it all the way to the last input occurrence and didn't find a match, then no sat f/g enthalpy data found - if (InData == NumOfSatFluidPropArrays) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); - ShowContinueError( - state, - format(R"(No Saturated Gas/Fluid Enthalpy found. Need properties to be entered with {}="Enthalpy" and {}="FluidGas".)", - cAlphaFieldNames(2), - cAlphaFieldNames(3))); - ErrorsFound = true; - } - - } // ...end of DO loop through all of the input syntax trying to find saturated gas/fluid enthalpy for this refrigerant - - // Get: ***** SPECIFIC HEAT of SATURATED LIQUID ***** - CurrentModuleObject = "FluidProperties:Saturated"; - TempsName = ""; - for (InData = 1; InData <= NumOfSatFluidPropArrays; ++InData) { - - state.dataInputProcessing->inputProcessor->getObjectItem(state, - CurrentModuleObject, - InData, - Alphas, - NumAlphas, - Numbers, - NumNumbers, - Status, - lNumericFieldBlanks, - lAlphaFieldBlanks, - cAlphaFieldNames, - cNumericFieldNames); - - if ((Util::SameString(Alphas(1), df->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), SpecificHeat)) && - (Util::SameString(Alphas(3), Fluid))) { - - for (int TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) { - - if (Util::SameString(Alphas(4), FluidTemps(TempLoop).Name)) { - TempsName = FluidTemps(TempLoop).Name; - // At this point, we have found the correct input line and found a match - // for the temperature array. It's time to load up the local derived type. - df->RefrigData(Loop).NumCpPoints = FluidTemps(TempLoop).NumOfTemps; - df->RefrigData(Loop).CpTemps.allocate(df->RefrigData(Loop).NumCpPoints); - df->RefrigData(Loop).CpfValues.allocate(df->RefrigData(Loop).NumCpPoints); - - // Make sure the number of points in the two arrays (temps and values) are the same - if (NumNumbers != df->RefrigData(Loop).NumCpPoints) { - ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); - ShowSevereError( - state, - format("Temperature Name={}, Temperature array and saturated fluid Cp array must have the same number of points", - TempsName)); - ShowContinueError(state, - format("Temperature # points={} whereas {} # Cp points={}", - NumNumbers, - df->RefrigData(Loop).Name, - df->RefrigData(Loop).NumCpPoints)); - ErrorsFound = true; - break; // the TempLoop DO Loop - } - - // Same number of points so assign the values - df->RefrigData(Loop).CpTemps = FluidTemps(TempLoop).Temps; - df->RefrigData(Loop).CpfValues = Numbers({1, NumNumbers}); - - break; // the TempLoop DO loop - } - - // If it made it all the way to the last temperature array and didn't find a match, then no match was found - if (TempLoop == NumOfFluidTempArrays) { - ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); - ShowContinueError(state, "Found saturated fluid specific heat (Cp) input but no matching temperature array"); - ShowContinueError(state, format("Entered Temperature Name={}", TempsName)); - ErrorsFound = true; - } - - } // ...end of FluidTemps DO loop - - break; // the InData DO loop - } + // For each property, cycle through all the valid input until the proper match is found. + + // ********** SATURATED DATA SECTION ********** + + // Get: ***** Saturation Pressure temperatures and data (fluidgas only) ***** + // This section added by S.J.Rees May 2002. + CurrentModuleObject = "FluidProperties:Saturated"; + for (int InData = 1; InData <= NumOfSatFluidPropArrays; ++InData) { - // If it made it all the way to the last input occurrence and didn't find a match, then no sat fluid Cp data found - if (InData == NumOfSatFluidPropArrays) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); - ShowContinueError( - state, - format(R"(No Saturated Fluid Specific Heat found. Need properties to be entered with {}="SpecificHeat" and {}="Fluid".)", - cAlphaFieldNames(2), - cAlphaFieldNames(3))); - ErrorsFound = true; - } + state.dataInputProcessing->inputProcessor->getObjectItem(state, + CurrentModuleObject, + InData, + Alphas, + NumAlphas, + Numbers, + NumNumbers, + Status, + lNumericFieldBlanks, + lAlphaFieldBlanks, + cAlphaFields, + cNumericFields); - } // ...end of DO loop through all of the input syntax trying to find saturated fluid Cp for this refrigerant - - // Get: ***** SPECIFIC HEAT of SATURATED LIQUID/VAPOR ***** (difference between Cpf and Cpg, i.e. Cpfg) - CurrentModuleObject = "FluidProperties:Saturated"; - for (InData = 1; InData <= NumOfSatFluidPropArrays; ++InData) { - - state.dataInputProcessing->inputProcessor->getObjectItem(state, - CurrentModuleObject, - InData, - Alphas, - NumAlphas, - Numbers, - NumNumbers, - Status, - lNumericFieldBlanks, - lAlphaFieldBlanks, - cAlphaFieldNames, - cNumericFieldNames); - - if ((Util::SameString(Alphas(1), df->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), SpecificHeat)) && - (Util::SameString(Alphas(3), GasFluid))) { - - for (int TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) { - - if (Util::SameString(Alphas(4), FluidTemps(TempLoop).Name)) { - if (!Util::SameString(FluidTemps(TempLoop).Name, TempsName)) { - ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); - ShowContinueError(state, "Temperatures for specific heat fluid and gas/fluid points are not the same"); - ShowContinueError(state, format("Name={} => {} /= {}", Alphas(4), FluidTemps(TempLoop).Name, TempsName)); - ErrorsFound = true; - break; - } - // At this point, we have found the correct input line and found a match - // for the temperature array. It's time to load up the local derived type. - df->RefrigData(Loop).CpfgValues.allocate(df->RefrigData(Loop).NumCpPoints); - - // Make sure the number of points in the two arrays (temps and values) are the same - if (NumNumbers != df->RefrigData(Loop).NumCpPoints) { - ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); - ShowContinueError( - state, - format( - "Temperature Name={}, Temperature array and saturated gas/fluid Cp array must have the same number of points", - TempsName)); - ShowContinueError(state, - format("Temperature # points={} whereas {} # Cp points={}", - NumNumbers, - df->RefrigData(Loop).Name, - df->RefrigData(Loop).NumCpPoints)); - ErrorsFound = true; - break; // the TempLoop DO Loop - } - - // Same number of points so assign the values - df->RefrigData(Loop).CpfgValues = Numbers({1, NumNumbers}); - - break; // the TempLoop DO loop - } - - // If it made it all the way to the last temperature array and didn't find a match, then no match was found - if (TempLoop == NumOfFluidTempArrays) { - ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); - ShowContinueError(state, "Found saturated gas/fluid specific heat (Cp) input but no matching temperature array"); - ShowContinueError(state, format("Entered Temperature Name={}", TempsName)); - ErrorsFound = true; - } - - } // ...end of FluidTemps DO loop - - break; // the InData DO loop - } + ErrorObjectHeader eoh{routineName, CurrentModuleObject, Alphas(1)}; + + auto *refrig = GetRefrig(state, Alphas(1)); + if (refrig == nullptr) { + ShowSevereItemNotFound(state, eoh, cAlphaFields(1), Alphas(1)); + ErrorsFound = true; + continue; + } - // If it made it all the way to the last input occurrence and didn't find a match, then no sat f/g Cp data found - if (InData == NumOfSatFluidPropArrays) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); - ShowContinueError( - state, - format( - R"(No Saturated Gas/Fluid Specific Heat found. Need properties to be entered with {}="SpecificHeat" and {}="FluidGas".)", - cAlphaFieldNames(2), - cAlphaFieldNames(3))); - ErrorsFound = true; - } + if (refrig->satTempArrayName != "" && refrig->satTempArrayName != Alphas(4)) { + ShowSevereCustomMessage(state, eoh, "Saturated temperature arrays are not the same for different properties"); + ErrorsFound = true; + continue; + } + refrig->satTempArrayName = Alphas(4); - } // ...end of DO loop through all of the input syntax trying to find saturated gas/fluid Cp for this refrigerant - - // Get: ***** DENSITY of SATURATED LIQUID ***** - CurrentModuleObject = "FluidProperties:Saturated"; - TempsName = ""; - for (InData = 1; InData <= NumOfSatFluidPropArrays; ++InData) { - - state.dataInputProcessing->inputProcessor->getObjectItem(state, - CurrentModuleObject, - InData, - Alphas, - NumAlphas, - Numbers, - NumNumbers, - Status, - lNumericFieldBlanks, - lAlphaFieldBlanks, - cAlphaFieldNames, - cNumericFieldNames); - - if ((Util::SameString(Alphas(1), df->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), Density)) && - (Util::SameString(Alphas(3), Fluid))) { - - for (int TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) { - - if (Util::SameString(Alphas(4), FluidTemps(TempLoop).Name)) { - TempsName = FluidTemps(TempLoop).Name; - // At this point, we have found the correct input line and found a match - // for the temperature array. It's time to load up the local derived type. - df->RefrigData(Loop).NumRhoPoints = FluidTemps(TempLoop).NumOfTemps; - df->RefrigData(Loop).RhoTemps.allocate(df->RefrigData(Loop).NumRhoPoints); - df->RefrigData(Loop).RhofValues.allocate(df->RefrigData(Loop).NumRhoPoints); - - // Make sure the number of points in the two arrays (temps and values) are the same - if (NumNumbers != df->RefrigData(Loop).NumRhoPoints) { - ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); - ShowContinueError(state, - format("Temperature Name={}, Temperature array and saturated fluid density array must have the " - "same number of points", - TempsName)); - ShowContinueError(state, - format("Temperature # points={} whereas {} # Density points={}", - NumNumbers, - df->RefrigData(Loop).Name, - df->RefrigData(Loop).NumRhoPoints)); - ErrorsFound = true; - break; // the TempLoop DO Loop - } - - // Same number of points so assign the values - df->RefrigData(Loop).RhoTemps = FluidTemps(TempLoop).Temps; - df->RefrigData(Loop).RhofValues = Numbers({1, NumNumbers}); - - break; // the TempLoop DO loop - } - - // If it made it all the way to the last temperature array and didn't find a match, then no match was found - if (TempLoop == NumOfFluidTempArrays) { - ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); - ShowContinueError(state, "Found saturated fluid density input but no matching temperature array"); - ShowContinueError(state, format("Entered Temperature Name={}", TempsName)); - ErrorsFound = true; - } - - } // ...end of FluidTemps DO loop - - break; // the InData DO loop - } + int tempArrayNum = Util::FindItemInList(Alphas(4), FluidTemps); + if (tempArrayNum == 0) { + ShowSevereItemNotFound(state, eoh, cAlphaFields(4), Alphas(4)); + ErrorsFound = true; + continue; + } - // If it made it all the way to the last input occurrence and didn't find a match, then no sat fluid density data found - if (InData == NumOfSatFluidPropArrays) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); - ShowContinueError(state, - format(R"(No Saturated Fluid Density found. Need properties to be entered with {}="Density" and {}="Fluid".)", - cAlphaFieldNames(2), - cAlphaFieldNames(3))); - ErrorsFound = true; + auto &tempArray = FluidTemps(tempArrayNum); + + // Make sure the number of points in the two arrays (temps and values) are the same + if (NumNumbers != tempArray.NumOfTemps) { + ShowSevereError(state, format("{}: {} Name={}", routineName, CurrentModuleObject, refrig->Name)); + ShowContinueError(state, + format("Temperature Name={}, Temperature array and fluid saturation pressure array must have the " + "same number of points", + tempArray.Name)); + ShowContinueError(state, format("Temperature # points={} whereas {} # {} points={}", tempArray.NumOfTemps, refrig->Name, Alphas(2), NumNumbers)); + ErrorsFound = true; + break; // the TempLoop DO Loop + } + + if (Alphas(2) == "PRESSURE" && Alphas(3) == "FLUIDGAS") { + refrig->NumPsPoints = tempArray.NumOfTemps; + refrig->PsTemps.allocate(refrig->NumPsPoints); + refrig->PsValues.allocate(refrig->NumPsPoints); + refrig->PsTemps = tempArray.Temps; + refrig->PsValues = Numbers({1, NumNumbers}); + + } else if (Alphas(2) == "ENTHALPY" && Alphas(3) == "FLUID") { + refrig->NumHPoints = tempArray.NumOfTemps; + refrig->HTemps.allocate(refrig->NumHPoints); + refrig->HfValues.allocate(refrig->NumHPoints); + refrig->HTemps = tempArray.Temps; + refrig->HfValues = Numbers({1, NumNumbers}); + + } else if (Alphas(2) == "ENTHALPY" && Alphas(3) == "FLUIDGAS") { + refrig->NumHPoints = tempArray.NumOfTemps; + refrig->HfgValues.allocate(refrig->NumHPoints); + refrig->HfgValues = Numbers({1, NumNumbers}); + + } else if (Alphas(2) == "SPECIFICHEAT" && Alphas(3) == "FLUID") { + refrig->NumCpPoints = tempArray.NumOfTemps; + refrig->CpTemps.allocate(refrig->NumCpPoints); + refrig->CpfValues.allocate(refrig->NumCpPoints); + refrig->CpTemps = tempArray.Temps; + refrig->CpfValues = Numbers({1, NumNumbers}); + + } else if (Alphas(2) == "SPECIFICHEAT" && Alphas(3) == "FLUIDGAS") { + refrig->NumCpPoints = tempArray.NumOfTemps; + refrig->CpfgValues.allocate(refrig->NumCpPoints); + refrig->CpfgValues = Numbers({1, NumNumbers}); + + } else if (Alphas(2) == "DENSITY" && Alphas(3) == "FLUID") { + refrig->NumRhoPoints = tempArray.NumOfTemps; + refrig->RhoTemps.allocate(refrig->NumRhoPoints); + refrig->RhofValues.allocate(refrig->NumRhoPoints); + refrig->RhoTemps = tempArray.Temps; + refrig->RhofValues = Numbers({1, NumNumbers}); + + } else if (Alphas(2) == "DENSITY" && Alphas(3) == "FLUIDGAS") { + refrig->NumRhoPoints = tempArray.NumOfTemps; + refrig->RhofgValues.allocate(refrig->NumRhoPoints); + refrig->RhofgValues = Numbers({1, NumNumbers}); + + } else if (Alphas(3) == "FLUID") { + if (Alphas(2) != "ENTHALPY" && Alphas(2) != "SPECIFICHEAT" && Alphas(2) != "DENSITY") { + ShowWarningError(state, format("{}: {} Name={}", routineName, CurrentModuleObject, refrig->Name)); + ShowContinueError(state, format(R"({}="FLUID", but {}="{}" is not valid.)", cAlphaFields(3), cAlphaFields(2), Alphas(2))); + ShowContinueError(state, format(R"(Valid choices are "Enthalpy", "SpecificHeat", "Density".)")); + ShowContinueError(state, "This fluid property will not be processed nor available for the simulation."); } - - } // ...end of DO loop through all of the input syntax trying to find saturated fluid enthalpy for this refrigerant - - // Get: ***** DENSITY of SATURATED LIQUID/VAPOR ***** (difference between Rhof and Rhog, i.e. Rhofg) - CurrentModuleObject = "FluidProperties:Saturated"; - for (InData = 1; InData <= NumOfSatFluidPropArrays; ++InData) { - - state.dataInputProcessing->inputProcessor->getObjectItem(state, - CurrentModuleObject, - InData, - Alphas, - NumAlphas, - Numbers, - NumNumbers, - Status, - lNumericFieldBlanks, - lAlphaFieldBlanks, - cAlphaFieldNames, - cNumericFieldNames); - - if ((Util::SameString(Alphas(1), df->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), Density)) && - (Util::SameString(Alphas(3), GasFluid))) { - - for (int TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) { - - if (Util::SameString(Alphas(4), FluidTemps(TempLoop).Name)) { - if (!Util::SameString(FluidTemps(TempLoop).Name, TempsName)) { - ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); - ShowContinueError(state, "Temperatures for density fluid and gas/fluid points are not the same"); - ShowContinueError(state, format("Name={} => {} /= {}", Alphas(4), FluidTemps(TempLoop).Name, TempsName)); - ErrorsFound = true; - break; - } - // At this point, we have found the correct input line and found a match - // for the temperature array. It's time to load up the local derived type. - df->RefrigData(Loop).RhofgValues.allocate(df->RefrigData(Loop).NumRhoPoints); - - // Make sure the number of points in the two arrays (temps and values) are the same - if (NumNumbers != df->RefrigData(Loop).NumRhoPoints) { - ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); - ShowContinueError(state, - format("Temperature Name={}, Temperature array and saturated gas/fluid density array must have the " - "same number of points", - TempsName)); - ShowContinueError(state, - format("Temperature # points={} whereas {} # density points={}", - NumNumbers, - df->RefrigData(Loop).Name, - df->RefrigData(Loop).NumRhoPoints)); - ErrorsFound = true; - break; // the TempLoop DO Loop - } - - // Same number of points so assign the values - df->RefrigData(Loop).RhofgValues = Numbers({1, NumNumbers}); - - break; // the TempLoop DO loop - } - - // If it made it all the way to the last temperature array and didn't find a match, then no match was found - if (TempLoop == NumOfFluidTempArrays) { - ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); - ShowContinueError(state, "Found saturated gas/fluid density input but no matching temperature array"); - ShowContinueError(state, format("Entered Temperature Name={}", TempsName)); - ErrorsFound = true; - } - - } // ...end of FluidTemps DO loop - - break; // the InData DO loop + + } else if (Alphas(3) == "FLUIDGAS") { + if (Alphas(2) != "PRESSURE" && Alphas(2) != "ENTHALPY" && Alphas(2) != "SPECIFICHEAT" && Alphas(2) != "DENSITY") { + ShowWarningError(state, format("{}: {} Name={}", routineName, CurrentModuleObject, refrig->Name)); + ShowContinueError(state, format(R"({}="FluidGas", but {}="{}" is not valid.)", cAlphaFields(3), cAlphaFields(2), Alphas(2))); + ShowContinueError(state, format(R"(Valid choices are "Pressure", "Enthalpy", "SpecificHeat", "Density".)")); + ShowContinueError(state, "This fluid property will not be processed nor available for the simulation."); } + } else { + ShowWarningError(state, format("{}: {} Name={}", routineName, CurrentModuleObject, refrig->Name)); + ShowContinueError(state, format("{}=\"{}\" is not valid.", cAlphaFields(3), Alphas(3))); + ShowContinueError(state, format(R"(Valid choices are "Fluid", "GasFluid".)")); + ShowContinueError(state, "This fluid property will not be processed nor available for the simulation."); + } + } // for (inData) + - // If it made it all the way to the last input occurrence and didn't find a match, then no sat f/g density data found - if (InData == NumOfSatFluidPropArrays) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); - ShowSevereError( - state, - format(R"(No Saturated Gas/Fluid Density found. Need properties to be entered with {}="Density" and {}="FluidGas".)", - cAlphaFieldNames(2), - cAlphaFieldNames(3))); - ErrorsFound = true; - } + for (auto const *refrig : df->refrigs) { - } // ...end of DO loop through all of the input syntax trying to find saturated gas/fluid density for this refrigerant - - // Check: TEMPERATURES for saturated density (must all be the same) - // IF (RefrigData(Loop)%NumCpPoints /= RefrigData(Loop)%NumCpPoints) THEN - //!!! Error -- can never happen, does this mean NumCp vs. NumRho? - // CALL ShowFatalError(state, 'GetFluidPropertiesData: Number of specific heat fluid and gas/fluid points are not the same') - // ELSE - // DO TempLoop = 1, RefrigData(Loop)%NumCpPoints - //!!! Error -- something else that can never happen - // IF (ABS(RefrigData(Loop)%CpTemps(TempLoop)-RefrigData(Loop)%CpTemps(TempLoop)) > TempToler) THEN - // CALL ShowSevereError(state, 'GetFluidPropertiesData: Temperatures for specific heat fluid and '// & - // 'gas/fluid points are not the same') - // CALL ShowContinueError(state, 'Error occurs in Refrigerant Data Name='//TRIM(RefrigData(Loop)%Name)) - // WRITE(String1,*) TempLoop - // String1=ADJUSTL(String1) - // String2=TrimSigDigits(RefrigData(Loop)%CpTemps(TempLoop),3) - // String2=ADJUSTL(String2) - // String4=TrimSigDigits(RefrigData(Loop)%CpTemps(TempLoop),3) - // String4=ADJUSTL(String4) - // CALL ShowContinueError(state, 'First Occurrence at CpTemp('//TRIM(String1)//') {'//TRIM(String2)//'} /= - // {'//TRIM(String4)//'}') ErrorsFound=.TRUE. EXIT - // ENDIF - // END DO - // END IF - - // Error check on entering saturated data - int iTemp = 0; - CurrentModuleObject = "FluidProperties:Saturated"; - for (InData = 1; InData <= NumOfSatFluidPropArrays; ++InData) { - - state.dataInputProcessing->inputProcessor->getObjectItem(state, - CurrentModuleObject, - InData, - Alphas, - NumAlphas, - Numbers, - NumNumbers, - Status, - lNumericFieldBlanks, - lAlphaFieldBlanks, - cAlphaFieldNames, - cNumericFieldNames); - if (Util::SameString(Alphas(3), Fluid)) { - if (!Util::SameString(Alphas(2), Enthalpy) && !Util::SameString(Alphas(2), SpecificHeat) && - !Util::SameString(Alphas(2), Density)) { - if (iTemp == 0) { - ShowWarningError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); - ShowContinueError( - state, format(R"({}="{}", but {}="{}" is not valid.)", cAlphaFieldNames(3), Fluid, cAlphaFieldNames(2), Alphas(2))); - ShowContinueError(state, format(R"(Valid choices are "{}", "{}", "{}".)", Enthalpy, SpecificHeat, Density)); - ShowContinueError(state, - "This fluid property will not be processed " - "mor available for the simulation."); - } - ++iTemp; - } - } else if (Util::SameString(Alphas(3), GasFluid)) { - if (!Util::SameString(Alphas(2), Pressure) && !Util::SameString(Alphas(2), Enthalpy) && - !Util::SameString(Alphas(2), SpecificHeat) && !Util::SameString(Alphas(2), Density)) { - if (iTemp == 0) { - ShowWarningError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); - ShowContinueError( - state, format(R"({}="{}", but {}="{}" is not valid.)", cAlphaFieldNames(3), Fluid, cAlphaFieldNames(2), Alphas(2))); - ShowContinueError(state, - format(R"(Valid choices are "{}", "{}", "{}", "{}".)", Pressure, Enthalpy, SpecificHeat, Density)); - ShowContinueError(state, "This fluid property will not be processed nor available for the simulation."); - } - ++iTemp; - } - } else { - if (iTemp == 0) { - ShowWarningError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); - ShowContinueError(state, format("{}=\"{}\" is not valid.", cAlphaFieldNames(3), Alphas(3))); - ShowContinueError(state, format(R"(Valid choices are "{}", "{}".)", Fluid, GasFluid)); - ShowContinueError(state, - "This fluid property will not be processed nor " - "available for the simulation."); - } - ++iTemp; - } + ErrorObjectHeader eoh{routineName, CurrentModuleObject, refrig->Name}; + if (refrig->PsValues.size() == 0) { + ShowSevereCustomMessage(state, eoh, + format(R"(No Gas/Fluid Saturation Pressure found. Need properties with {}="Pressure" and {}="FluidGas".)", + cAlphaFields(2), + cAlphaFields(3))); + ErrorsFound = true; } - if (iTemp > 1) { - ShowWarningError(state, format("{}{} has {} similar errors to the previous.", RoutineName, CurrentModuleObject, iTemp - 1)); - } - - // ********** SUPERHEATED DATA SECTION ********** - // Get: ***** ENTHALPY of SUPERHEATED GAS ***** - // First find the number of pressure value syntax lines have been entered and - // make sure that all of the pressure input is linked to the same temperature list - CurrentModuleObject = "FluidProperties:Superheated"; - TempsName = ""; - FirstSHMatch = true; - int NumOfPressPts = 0; - for (InData = 1; InData <= NumOfSHFluidPropArrays; ++InData) { - state.dataInputProcessing->inputProcessor->getObjectItem(state, - CurrentModuleObject, - InData, - Alphas, - NumAlphas, - Numbers, - NumNumbers, - Status, - lNumericFieldBlanks, - lAlphaFieldBlanks, - cAlphaFieldNames, - cNumericFieldNames); - - if ((Util::SameString(Alphas(1), df->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), Enthalpy))) { - ++NumOfPressPts; - if (FirstSHMatch) { - TempsName = Alphas(3); - FirstSHMatch = false; - } else { - if (!Util::SameString(TempsName, Alphas(3))) { - ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); - ShowContinueError(state, "All superheated data for the same property must use the same temperature list"); - ShowContinueError(state, format("Expected name={}, Entered name={}", TempsName, Alphas(3))); - ErrorsFound = true; - } - } - } + if (refrig->HfValues.size() == 0) { + ShowSevereCustomMessage(state, eoh, + format(R"(No Saturated Fluid Enthalpy found. Need properties with {}="Enthalpy" and {}="Fluid".)", + cAlphaFields(2), + cAlphaFields(3))); + ErrorsFound = true; } - if (NumOfPressPts == 0) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); - ShowContinueError(state, "No pressure data found for superheated enthalpy"); + + if (refrig->HfgValues.size() == 0) { + ShowSevereCustomMessage(state, eoh, + format(R"(No Saturated Gas/Fluid Enthalpy found. Need properties with {}="Enthalpy" and {}="FluidGas".)", + cAlphaFields(2), + cAlphaFields(3))); ErrorsFound = true; } - // Now allocate the arrays and read the data into the proper place - // First, allocate the temperature array and transfer the data from the FluidTemp array - for (int TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) { - if (Util::SameString(TempsName, FluidTemps(TempLoop).Name)) { - df->RefrigData(Loop).NumSuperTempPts = FluidTemps(TempLoop).NumOfTemps; - df->RefrigData(Loop).SHTemps.allocate(df->RefrigData(Loop).NumSuperTempPts); - df->RefrigData(Loop).SHTemps = FluidTemps(TempLoop).Temps; - break; // the TempLoop DO loop - } - if (TempLoop == NumOfFluidTempArrays) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); - ShowContinueError(state, "No match for temperature array name found with superheated enthalpy data"); - ShowContinueError(state, format("Entered Temperature Name={}", TempsName)); - ErrorsFound = true; - } + if (refrig->CpfValues.size() == 0) { + ShowSevereCustomMessage(state, eoh, + format(R"(No Saturated Fluid Specific Heat found. Need properties with {}="SpecificHeat" and {}="Fluid".)", + cAlphaFields(2), + cAlphaFields(3))); + ErrorsFound = true; } - // Next, allocate the pressure related arrays - df->RefrigData(Loop).NumSuperPressPts = NumOfPressPts; - df->RefrigData(Loop).SHPress.allocate(df->RefrigData(Loop).NumSuperPressPts); - df->RefrigData(Loop).HshValues.allocate(df->RefrigData(Loop).NumSuperPressPts, - df->RefrigData(Loop).NumSuperTempPts); - - // Finally, get the pressure and enthalpy values from the user input - CurrentModuleObject = "FluidProperties:Superheated"; - NumOfPressPts = 0; - PressurePtr.allocate(NumOfSHFluidPropArrays); - for (InData = 1; InData <= NumOfSHFluidPropArrays; ++InData) { - state.dataInputProcessing->inputProcessor->getObjectItem(state, - CurrentModuleObject, - InData, - Alphas, - NumAlphas, - Numbers, - NumNumbers, - Status, - lNumericFieldBlanks, - lAlphaFieldBlanks, - cAlphaFieldNames, - cNumericFieldNames); - - if ((Util::SameString(Alphas(1), df->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), Enthalpy))) { - ++NumOfPressPts; - if (Numbers(1) <= 0.0) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); - ShowContinueError(state, format("Negative pressures not allowed in fluid property input data, Value =[{:.3R}].", Numbers(1))); - ErrorsFound = true; - } - PressurePtr(NumOfPressPts).Pressure = Numbers(1); - PressurePtr(NumOfPressPts).InPtr = InData; - } + if (refrig->CpfgValues.size() == 0) { + ShowSevereCustomMessage(state, eoh, + format(R"(No Saturated Gas/Fluid Specific Heat found. Need properties with {}="SpecificHeat" and {}="FluidGas".)", + cAlphaFields(2), + cAlphaFields(3))); + ErrorsFound = true; } - // Sort Pressure list - // insertionSort - for (InData = 2; InData <= NumOfPressPts; ++InData) { - pTemp = PressurePtr(InData).Pressure; - iTemp = PressurePtr(InData).InPtr; - j = InData - 1; - while (j >= 1 && PressurePtr(j).Pressure > pTemp) { - PressurePtr(j + 1).Pressure = PressurePtr(j).Pressure; - PressurePtr(j + 1).InPtr = PressurePtr(j).InPtr; - --j; - if (j == 0) break; - } - PressurePtr(j + 1).Pressure = pTemp; - PressurePtr(j + 1).InPtr = iTemp; - } - - for (InData = 1; InData <= NumOfPressPts; ++InData) { - state.dataInputProcessing->inputProcessor->getObjectItem(state, - CurrentModuleObject, - PressurePtr(InData).InPtr, - Alphas, - NumAlphas, - Numbers, - NumNumbers, - Status, - lNumericFieldBlanks, - lAlphaFieldBlanks, - cAlphaFieldNames, - cNumericFieldNames); - df->RefrigData(Loop).SHPress(InData) = Numbers(1); - // a little error trapping - if (InData > 1) { - if (df->RefrigData(Loop).SHPress(InData) <= df->RefrigData(Loop).SHPress(InData - 1)) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); - ShowContinueError(state, "Pressures must be entered in ascending order for fluid property data"); - ShowContinueError(state, - format("First Occurrence at Pressure({}) {{{:.3R}}} >= Pressure({}) {{{:.3R}}}", - InData - 1, - df->RefrigData(Loop).SHPress(InData - 1), - InData, - df->RefrigData(Loop).SHPress(InData))); - ErrorsFound = true; - break; - } - } - if ((NumNumbers - 1) == df->RefrigData(Loop).NumSuperTempPts) { - df->RefrigData(Loop).HshValues(InData, {1, df->RefrigData(Loop).NumSuperTempPts}) = - Numbers({2, NumNumbers}); - } else { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); - ShowContinueError(state, "Number of superheated enthalpy data points not equal to number of temperature points"); - ErrorsFound = true; - } + if (refrig->RhofValues.size() == 0) { + ShowSevereCustomMessage(state, eoh, + format(R"(No Saturated Fluid Density found. Need properties with {}="Density" and {}="Fluid".)", + cAlphaFields(2), + cAlphaFields(3))); + ErrorsFound = true; } - PressurePtr.deallocate(); - - // Get: ***** DENSITY of SUPERHEATED GAS ***** - // First find the number of pressure value syntax lines have been entered and - // make sure that all of the pressure input is linked to the same temperature list - // Then allocate the arrays and read the data into the proper place - df->RefrigData(Loop).RhoshValues.allocate(df->RefrigData(Loop).NumSuperPressPts, - df->RefrigData(Loop).NumSuperTempPts); - CurrentModuleObject = "FluidProperties:Superheated"; - NumOfPressPts = 0; - PressurePtr.allocate(NumOfSHFluidPropArrays); - for (InData = 1; InData <= NumOfSHFluidPropArrays; ++InData) { - state.dataInputProcessing->inputProcessor->getObjectItem(state, - CurrentModuleObject, - InData, - Alphas, - NumAlphas, - Numbers, - NumNumbers, - Status, - lNumericFieldBlanks, - lAlphaFieldBlanks, - cAlphaFieldNames, - cNumericFieldNames); - if ((Util::SameString(Alphas(1), df->RefrigData(Loop).Name)) && (Util::SameString(Alphas(2), Density))) { - ++NumOfPressPts; - if (Numbers(1) <= 0.0) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); - ShowContinueError(state, format("Negative pressures not allowed in fluid property input data, Value =[{:.3R}].", Numbers(1))); - ErrorsFound = true; - } - PressurePtr(NumOfPressPts).Pressure = Numbers(1); - PressurePtr(NumOfPressPts).InPtr = InData; - } + if (refrig->RhofgValues.size() == 0) { + ShowSevereCustomMessage(state, eoh, + format(R"(No Saturated Gas/Fluid Density found. Need properties with {}="Density" and {}="FluidGas".)", + cAlphaFields(2), + cAlphaFields(3))); + ErrorsFound = true; } + } // for (refrigNum) + - // Sort Pressure list - // insertionSort - for (InData = 2; InData <= NumOfPressPts; ++InData) { - pTemp = PressurePtr(InData).Pressure; - iTemp = PressurePtr(InData).InPtr; - j = InData - 1; - while (j >= 1 && PressurePtr(j).Pressure > pTemp) { - PressurePtr(j + 1).Pressure = PressurePtr(j).Pressure; - PressurePtr(j + 1).InPtr = PressurePtr(j).InPtr; - --j; - if (j == 0) break; - } - PressurePtr(j + 1).Pressure = pTemp; - PressurePtr(j + 1).InPtr = iTemp; - } - - for (InData = 1; InData <= NumOfPressPts; ++InData) { - state.dataInputProcessing->inputProcessor->getObjectItem(state, - CurrentModuleObject, - PressurePtr(InData).InPtr, - Alphas, - NumAlphas, - Numbers, - NumNumbers, - Status, - lNumericFieldBlanks, - lAlphaFieldBlanks, - cAlphaFieldNames, - cNumericFieldNames); - if (std::abs(Numbers(1) - df->RefrigData(Loop).SHPress(InData)) > PressToler) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); - ShowContinueError(state, "All superheated data for the same refrigerant must use the same pressure data"); - ErrorsFound = true; - } - if (!Util::SameString(TempsName, Alphas(3))) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); - ShowContinueError(state, "All superheated data for the same property must use the same temperature list"); - ErrorsFound = true; - } - if ((NumNumbers - 1) == df->RefrigData(Loop).NumSuperTempPts) { - df->RefrigData(Loop).RhoshValues(InData, {1, df->RefrigData(Loop).NumSuperTempPts}) = - Numbers({2, NumNumbers}); - } else { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); - ShowContinueError(state, "Number of superheated density data points not equal to number of temperature points"); - ErrorsFound = true; - } + // Check: TEMPERATURES for saturated density (must all be the same) + // IF (RefrigData(Loop)%NumCpPoints /= RefrigData(Loop)%NumCpPoints) THEN + //!!! Error -- can never happen, does this mean NumCp vs. NumRho? + // CALL ShowFatalError(state, 'GetFluidPropertiesData: Number of specific heat fluid and gas/fluid points are not the same') + // ELSE + // DO TempLoop = 1, RefrigData(Loop)%NumCpPoints + //!!! Error -- something else that can never happen + // IF (ABS(RefrigData(Loop)%CpTemps(TempLoop)-RefrigData(Loop)%CpTemps(TempLoop)) > TempToler) THEN + // CALL ShowSevereError(state, 'GetFluidPropertiesData: Temperatures for specific heat fluid and '// & + // 'gas/fluid points are not the same') + // CALL ShowContinueError(state, 'Error occurs in Refrigerant Data Name='//TRIM(RefrigData(Loop)%Name)) + // WRITE(String1,*) TempLoop + // String1=ADJUSTL(String1) + // String2=TrimSigDigits(RefrigData(Loop)%CpTemps(TempLoop),3) + // String2=ADJUSTL(String2) + // String4=TrimSigDigits(RefrigData(Loop)%CpTemps(TempLoop),3) + // String4=ADJUSTL(String4) + // CALL ShowContinueError(state, 'First Occurrence at CpTemp('//TRIM(String1)//') {'//TRIM(String2)//'} /= + // {'//TRIM(String4)//'}') ErrorsFound=.TRUE. EXIT + // ENDIF + // END DO + // END IF + + // ********** SUPERHEATED DATA SECTION ********** + // Get: ***** ENTHALPY of SUPERHEATED GAS ***** + // First find the number of pressure value syntax lines have been entered and + // make sure that all of the pressure input is linked to the same temperature list + + // Need to do a setup pass to find the number of pressure points + CurrentModuleObject = "FluidProperties:Superheated"; + for (int InData = 1; InData <= NumOfSHFluidPropArrays; ++InData) { + state.dataInputProcessing->inputProcessor->getObjectItem(state, + CurrentModuleObject, + InData, + Alphas, + NumAlphas, + Numbers, + NumNumbers, + Status, + lNumericFieldBlanks, + lAlphaFieldBlanks, + cAlphaFields, + cNumericFields); + + ErrorObjectHeader eoh{routineName, CurrentModuleObject, Alphas(1)}; + + auto *refrig = GetRefrig(state, Alphas(1)); + if (refrig == nullptr) { + ShowSevereItemNotFound(state, eoh, cAlphaFields(1), Alphas(1)); + ErrorsFound = true; + continue; + } + + if (refrig->supTempArrayName != "" && refrig->supTempArrayName != Alphas(3)) { + ShowSevereCustomMessage(state, eoh, "Saturated temperature arrays are not the same for different properties"); + ErrorsFound = true; + continue; } - PressurePtr.deallocate(); - - // Error check on entering superheated data - iTemp = 0; - CurrentModuleObject = "FluidProperties:Superheated"; - for (InData = 1; InData <= NumOfSHFluidPropArrays; ++InData) { - - state.dataInputProcessing->inputProcessor->getObjectItem(state, - CurrentModuleObject, - InData, - Alphas, - NumAlphas, - Numbers, - NumNumbers, - Status, - lNumericFieldBlanks, - lAlphaFieldBlanks, - cAlphaFieldNames, - cNumericFieldNames); - if (!Util::SameString(Alphas(2), Enthalpy) && !Util::SameString(Alphas(2), Density)) { - if (iTemp == 0) { - ShowWarningError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); - ShowContinueError(state, format("{}=\"{}\" is not valid.", cAlphaFieldNames(2), Alphas(2))); - ShowContinueError(state, format(R"(Valid choices are "{}", "{}".)", Enthalpy, Density)); - ShowContinueError(state, format("Pressure value of this item=[{:.2R}].", Numbers(1))); - ShowContinueError(state, "This fluid property will not be processed nor available for the simulation."); - } - ++iTemp; - } + refrig->supTempArrayName = Alphas(3); + + if (Alphas(2) != "ENTHALPY") + continue; + + int supTempArrayNum = Util::FindItemInList(refrig->supTempArrayName, FluidTemps); + if (supTempArrayNum == 0) { + ShowSevereItemNotFound(state, eoh, cAlphaFields(3), Alphas(3)); + ErrorsFound = true; + continue; } - if (iTemp > 1) { - ShowWarningError(state, format("{}{} has {} similar errors to the previous.", RoutineName, CurrentModuleObject, iTemp - 1)); + auto &supTempArray = FluidTemps(supTempArrayNum); + refrig->NumSupTempPoints = supTempArray.NumOfTemps; + refrig->SupTemps.allocate(refrig->NumSupTempPoints); + refrig->SupTemps = supTempArray.Temps; + + if (Numbers(1) <= 0.0) { + ShowSevereError(state, format("{}: {} Name={}", routineName, CurrentModuleObject, refrig->Name)); + ShowContinueError(state, format("Negative pressures not allowed in fluid property input data, Value =[{:.3R}].", Numbers(1))); + ErrorsFound = true; + continue; } + + refrig->SupPress.push_back(Numbers(1)); + ++refrig->NumSupPressPoints; + } + + // Sort and allocate pressure point arrays + for (auto *refrig : df->refrigs) { + if (refrig->Name == "STEAM") continue; + + std::sort(refrig->SupPress.begin(), refrig->SupPress.end()); + + refrig->HshValues.allocate(refrig->NumSupPressPoints, refrig->NumSupTempPoints); + refrig->RhoshValues.allocate(refrig->NumSupPressPoints, refrig->NumSupTempPoints); + } + + // Finally, get the pressure and enthalpy values from the user input + CurrentModuleObject = "FluidProperties:Superheated"; + for (int InData = 1; InData <= NumOfSHFluidPropArrays; ++InData) { + state.dataInputProcessing->inputProcessor->getObjectItem(state, + CurrentModuleObject, + InData, + Alphas, + NumAlphas, + Numbers, + NumNumbers, + Status, + lNumericFieldBlanks, + lAlphaFieldBlanks, + cAlphaFields, + cNumericFields); - if (NumOfPressPts == 0) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); - ShowSevereError(state, "No pressure data found for superheated density"); + + ErrorObjectHeader eoh{routineName, CurrentModuleObject, Alphas(1)}; + + auto *refrig = GetRefrig(state, Alphas(1)); + if (refrig == nullptr) { + ShowSevereItemNotFound(state, eoh, cAlphaFields(1), Alphas(1)); ErrorsFound = true; + continue; } - if (NumOfPressPts != df->RefrigData(Loop).NumSuperPressPts) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->RefrigData(Loop).Name)); - ShowSevereError(state, "Number of pressure points for superheated data different for enthalpy and density"); + + if ((NumNumbers - 1) != refrig->NumSupTempPoints) { + ShowSevereCustomMessage(state, eoh, + format("Number of superheated {} points ({}) not equal to number of temperature points ({})", + Alphas(2), NumNumbers - 1, refrig->NumSupTempPoints)); ErrorsFound = true; + continue; } + + // Find which pressure point this temperature series belongs to + auto pressFound = std::find(refrig->SupPress.begin(), refrig->SupPress.end(), Numbers(1)); + assert(pressFound != refrig->SupPress.end()); + int pressNum = (pressFound - refrig->SupPress.begin()) + 1; + + if (Alphas(2) == "ENTHALPY") { + refrig->HshValues(pressNum, {1, refrig->NumSupTempPoints}) = Numbers({2, NumNumbers}); + } else if (Alphas(2) == "DENSITY") { + refrig->RhoshValues(pressNum, {1, refrig->NumSupTempPoints}) = Numbers({2, NumNumbers}); + } else { + ShowWarningInvalidKey(state, eoh, cAlphaFields(2), Alphas(2), "", + format("Valid options are (\"Enthalpy\", \"Density\"). Fluid will not be available for simulation.")); + ErrorsFound = true; + continue; + } + } // for (InData) - } // ...end of DO loop through all of the refrigerants - - // *************** GLYCOLS *************** + + // *************** RAW GLYCOLS *************** // Go through each glycol found in the fluid names statement and read in the data // Note that every valid fluid must have ALL of the necessary data or a fatal error will // be produced. + + // Propylene and ethylene are available by default + auto *ethylene = new GlycolRawProps; + ethylene->Name = "ETHYLENEGLYCOL"; + df->glycolsRaw.push_back(ethylene); + ethylene->Num = df->glycolsRaw.isize(); + + // Specific Heat + ethylene->CpDataPresent = true; // Flag set when specific heat data is available + ethylene->NumCpTempPoints = DefaultNumGlyTemps; // Number of temperature points for specific heat + ethylene->NumCpConcPoints = DefaultNumGlyConcs; // Number of concentration points for specific heat + + // No ObjexxFCL templates for assigning std::array to Array1S, Probably want to covert these Array1D and 2D to std::vector eventually anyway + ethylene->CpTemps.allocate(ethylene->NumCpTempPoints); // Temperatures for specific heat of glycol + for (int i = 1; i <= ethylene->NumCpTempPoints; ++i) + ethylene->CpTemps(i) = DefaultGlycolTemps[i-1]; + + ethylene->CpConcs.allocate(ethylene->NumCpConcPoints); // Concentration for specific heat of glycol + for (int i = 1; i <= ethylene->NumCpConcPoints; ++i) + ethylene->CpConcs(i) = DefaultGlycolConcs[i-1]; + + ethylene->CpValues.allocate(ethylene->NumCpConcPoints, ethylene->NumCpTempPoints); // Specific heat data values + for (int i = 1; i <= ethylene->NumCpConcPoints; ++i) + for (int j = 1; j <= ethylene->NumCpTempPoints; ++j) + ethylene->CpValues(i, j) = DefaultEthGlyCpData[i-1][j-1]; + + // Density + ethylene->RhoDataPresent = true; + ethylene->NumRhoTempPoints = DefaultNumGlyTemps; + ethylene->NumRhoConcPoints = DefaultNumGlyConcs; + + ethylene->RhoTemps.allocate(ethylene->NumRhoTempPoints); // Temperatures for density of glycol + for (int i = 1; i <= ethylene->NumRhoTempPoints; ++i) + ethylene->RhoTemps(i) = DefaultGlycolTemps[i-1]; + + ethylene->RhoConcs.allocate(ethylene->NumRhoConcPoints); // Concentration for density of glycol + for (int i = 1; i <= ethylene->NumRhoConcPoints; ++i) + ethylene->RhoConcs(i) = DefaultGlycolConcs[i-1]; + + ethylene->RhoValues.allocate(ethylene->NumRhoConcPoints, ethylene->NumRhoTempPoints); // Density data values + for (int i = 1; i <= ethylene->NumRhoConcPoints; ++i) + for (int j = 1; j <= ethylene->NumRhoTempPoints; ++j) + ethylene->RhoValues(i, j) = DefaultEthGlyRhoData[i-1][j-1]; + + // Conductivity + ethylene->CondDataPresent = true; + ethylene->NumCondTempPoints = DefaultNumGlyTemps; + ethylene->NumCondConcPoints = DefaultNumGlyConcs; + + ethylene->CondTemps.allocate(ethylene->NumCondTempPoints); // Temperatures for density of glycol + for (int i = 1; i <= ethylene->NumCondTempPoints; ++i) + ethylene->CondTemps(i) = DefaultGlycolTemps[i-1]; + + ethylene->CondConcs.allocate(ethylene->NumCondConcPoints); // Concentration for density of glycol + for (int i = 1; i <= ethylene->NumCondConcPoints; ++i) + ethylene->CondConcs(i) = DefaultGlycolConcs[i-1]; + + ethylene->CondValues.allocate(ethylene->NumCondConcPoints, ethylene->NumCondTempPoints); // Density data values + for (int i = 1; i <= ethylene->NumCondConcPoints; ++i) + for (int j = 1; j <= ethylene->NumCondTempPoints; ++j) + ethylene->CondValues(i, j) = DefaultEthGlyCondData[i-1][j-1]; + + // Viscosity + ethylene->ViscDataPresent = true; + ethylene->NumViscTempPoints = DefaultNumGlyTemps; + ethylene->NumViscConcPoints = DefaultNumGlyConcs; + + ethylene->ViscTemps.allocate(ethylene->NumViscTempPoints); // Temperatures for density of glycol + for (int i = 1; i <= ethylene->NumViscTempPoints; ++i) + ethylene->ViscTemps(i) = DefaultGlycolTemps[i-1]; + + ethylene->ViscConcs.allocate(ethylene->NumViscConcPoints); // Concentration for density of glycol + for (int i = 1; i <= ethylene->NumViscConcPoints; ++i) + ethylene->ViscConcs(i) = DefaultGlycolConcs[i-1]; + + ethylene->ViscValues.allocate(ethylene->NumViscConcPoints, ethylene->NumViscTempPoints); // Density data values + for (int i = 1; i <= ethylene->NumViscConcPoints; ++i) + for (int j = 1; j <= ethylene->NumViscTempPoints; ++j) + ethylene->ViscValues(i, j) = DefaultEthGlyViscData[i-1][j-1]; + + // Propylene + auto *propylene = new GlycolRawProps; + propylene->Name = "PROPYLENEGLYCOL"; + df->glycolsRaw.push_back(propylene); + propylene->Num = df->glycolsRaw.isize(); + + // Specific Heat + propylene->CpDataPresent = true; // Flag set when specific heat data is available + propylene->NumCpTempPoints = DefaultNumGlyTemps; // Number of temperature points for specific heat + propylene->NumCpConcPoints = DefaultNumGlyConcs; // Number of concentration points for specific heat + + // No ObjexxFCL templates for assigning std::array to Array1S, Probably want to covert these Array1D and 2D to std::vector eventually anyway + propylene->CpTemps.allocate(propylene->NumCpTempPoints); // Temperatures for specific heat of glycol + for (int i = 1; i <= propylene->NumCpTempPoints; ++i) + propylene->CpTemps(i) = DefaultGlycolTemps[i-1]; + + propylene->CpConcs.allocate(propylene->NumCpConcPoints); // Concentration for specific heat of glycol + for (int i = 1; i <= propylene->NumCpConcPoints; ++i) + propylene->CpConcs(i) = DefaultGlycolConcs[i-1]; + + propylene->CpValues.allocate(propylene->NumCpConcPoints, propylene->NumCpTempPoints); // Specific heat data values + for (int i = 1; i <= propylene->NumCpConcPoints; ++i) + for (int j = 1; j <= propylene->NumCpTempPoints; ++j) + propylene->CpValues(i, j) = DefaultPropGlyCpData[i-1][j-1]; + + // Density + propylene->RhoDataPresent = true; + propylene->NumRhoTempPoints = DefaultNumGlyTemps; + propylene->NumRhoConcPoints = DefaultNumGlyConcs; + + propylene->RhoTemps.allocate(propylene->NumRhoTempPoints); // Temperatures for density of glycol + for (int i = 1; i <= propylene->NumRhoTempPoints; ++i) + propylene->RhoTemps(i) = DefaultGlycolTemps[i-1]; + + propylene->RhoConcs.allocate(propylene->NumRhoConcPoints); // Concentration for density of glycol + for (int i = 1; i <= propylene->NumRhoConcPoints; ++i) + propylene->RhoConcs(i) = DefaultGlycolConcs[i-1]; + + propylene->RhoValues.allocate(propylene->NumRhoConcPoints, propylene->NumRhoTempPoints); // Density data values + for (int i = 1; i <= propylene->NumRhoConcPoints; ++i) + for (int j = 1; j <= propylene->NumRhoTempPoints; ++j) + propylene->RhoValues(i, j) = DefaultPropGlyRhoData[i-1][j-1]; + + // Conductivity + propylene->CondDataPresent = true; + propylene->NumCondTempPoints = DefaultNumGlyTemps; + propylene->NumCondConcPoints = DefaultNumGlyConcs; + + propylene->CondTemps.allocate(propylene->NumCondTempPoints); // Temperatures for density of glycol + for (int i = 1; i <= propylene->NumCondTempPoints; ++i) + propylene->CondTemps(i) = DefaultGlycolTemps[i-1]; + + propylene->CondConcs.allocate(propylene->NumCondConcPoints); // Concentration for density of glycol + for (int i = 1; i <= propylene->NumCondConcPoints; ++i) + propylene->CondConcs(i) = DefaultGlycolConcs[i-1]; + + propylene->CondValues.allocate(propylene->NumCondConcPoints, propylene->NumCondTempPoints); // Density data values + for (int i = 1; i <= propylene->NumCondConcPoints; ++i) + for (int j = 1; j <= propylene->NumCondTempPoints; ++j) + propylene->CondValues(i, j) = DefaultPropGlyCondData[i-1][j-1]; + + // Viscosity + propylene->ViscDataPresent = true; + propylene->NumViscTempPoints = DefaultNumGlyTemps; + propylene->NumViscConcPoints = DefaultNumGlyConcs; + + propylene->ViscTemps.allocate(propylene->NumViscTempPoints); // Temperatures for density of glycol + for (int i = 1; i <= propylene->NumViscTempPoints; ++i) + propylene->ViscTemps(i) = DefaultGlycolTemps[i-1]; + + propylene->ViscConcs.allocate(propylene->NumViscConcPoints); // Concentration for density of glycol + for (int i = 1; i <= propylene->NumViscConcPoints; ++i) + propylene->ViscConcs(i) = DefaultGlycolConcs[i-1]; + + propylene->ViscValues.allocate(propylene->NumViscConcPoints, propylene->NumViscTempPoints); // Density data values + for (int i = 1; i <= propylene->NumViscConcPoints; ++i) + for (int j = 1; j <= propylene->NumViscTempPoints; ++j) + propylene->ViscValues(i, j) = DefaultPropGlyViscData[i-1][j-1]; + + CurrentModuleObject = "FluidProperties:Concentration"; - for (int Loop = 1; Loop <= df->NumOfGlycols; ++Loop) { - - // Get: ***** SPECIFIC HEAT of GLYCOLS ***** - // First find the number of concentration value syntax lines have been entered and - // make sure that all of the concentration input is linked to the same temperature list - TempsName = ""; - FirstSHMatch = true; - int NumOfConcPts = 0; - df->GlyRawData(Loop).CpDataPresent = false; - for (InData = 1; InData <= NumOfGlyFluidPropArrays; ++InData) { // check temperatures given for specific heat are consistant - state.dataInputProcessing->inputProcessor->getObjectItem(state, - CurrentModuleObject, - InData, - Alphas, - NumAlphas, - Numbers, - NumNumbers, - Status, - lNumericFieldBlanks, - lAlphaFieldBlanks, - cAlphaFieldNames, - cNumericFieldNames); - if ((Util::SameString(Alphas(1), df->GlyRawData(Loop).Name)) && (Util::SameString(Alphas(2), SpecificHeat))) { - ++NumOfConcPts; - if (FirstSHMatch) { - TempsName = Alphas(3); - FirstSHMatch = false; - } else { - if (!Util::SameString(TempsName, Alphas(3))) { - ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, df->GlyRawData(Loop).Name)); - ShowContinueError(state, "All glycol specific heat data for the same glycol must use the same temperature list"); - ShowContinueError(state, format("Expected name={}, Entered name={}", TempsName, Alphas(3))); - ErrorsFound = true; - } - } - } + for (int InData = 1; InData <= NumOfGlyFluidPropArrays; ++InData) { // check temperatures given for specific heat are consistant + state.dataInputProcessing->inputProcessor->getObjectItem(state, + CurrentModuleObject, + InData, + Alphas, + NumAlphas, + Numbers, + NumNumbers, + Status, + lNumericFieldBlanks, + lAlphaFieldBlanks, + cAlphaFields, + cNumericFields); + + if (Alphas(1) == "WATER") continue; // Is this the right thing to do? + + ErrorObjectHeader eoh{routineName, CurrentModuleObject, Alphas(1)}; + + auto *glycolRaw = GetGlycolRaw(state, Alphas(1)); + if (glycolRaw == nullptr) { + ShowSevereItemNotFound(state, eoh, cAlphaFields(1), Alphas(1)); + ErrorsFound = true; + continue; } - if (NumOfConcPts > 0) { - // Now allocate the arrays and read the data into the proper place - // First, allocate the temperature array and transfer the data from the FluidTemp array - df->GlyRawData(Loop).CpDataPresent = true; - for (int TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) { - if (Util::SameString(TempsName, FluidTemps(TempLoop).Name)) { - df->GlyRawData(Loop).NumCpTempPts = FluidTemps(TempLoop).NumOfTemps; - df->GlyRawData(Loop).CpTemps.allocate(df->GlyRawData(Loop).NumCpTempPts); - df->GlyRawData(Loop).CpTemps = FluidTemps(TempLoop).Temps; - break; // the TempLoop DO loop - } - if (TempLoop == NumOfFluidTempArrays) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->GlyRawData(Loop).Name)); - ShowContinueError(state, "No match for temperature array name found with glycol data"); - ErrorsFound = true; - } - } - // Next, allocate the specific heat related arrays - df->GlyRawData(Loop).NumCpConcPts = NumOfConcPts; - df->GlyRawData(Loop).CpConcs.allocate(df->GlyRawData(Loop).NumCpConcPts); - df->GlyRawData(Loop).CpValues.allocate(df->GlyRawData(Loop).NumCpConcPts, - df->GlyRawData(Loop).NumCpTempPts); - - // Finally, get the specific heat and concentration values from the user input - CurrentModuleObject = "FluidProperties:Concentration"; - NumOfConcPts = 0; - for (InData = 1; InData <= NumOfGlyFluidPropArrays; ++InData) { - state.dataInputProcessing->inputProcessor->getObjectItem(state, - CurrentModuleObject, - InData, - Alphas, - NumAlphas, - Numbers, - NumNumbers, - Status, - lNumericFieldBlanks, - lAlphaFieldBlanks, - cAlphaFieldNames, - cNumericFieldNames); - if ((Util::SameString(Alphas(1), df->GlyRawData(Loop).Name)) && (Util::SameString(Alphas(2), SpecificHeat))) { - ++NumOfConcPts; - df->GlyRawData(Loop).CpConcs(NumOfConcPts) = Numbers(1); - // a little error trapping - if (NumOfConcPts == 1) { - if (df->GlyRawData(Loop).CpConcs(NumOfConcPts) < 0.0) { - ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->GlyRawData(Loop).Name)); - ShowContinueError(state, "Negative concentrations not allowed in fluid property input data"); - ErrorsFound = true; - } - } else { - if (df->GlyRawData(Loop).CpConcs(NumOfConcPts) <= - df->GlyRawData(Loop).CpConcs(NumOfConcPts - 1)) { - ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->GlyRawData(Loop).Name)); - ShowContinueError(state, "Concentrations must be entered in ascending order for fluid property data"); - ErrorsFound = true; - } - } - if ((NumNumbers - 1) == df->GlyRawData(Loop).NumCpTempPts) { - df->GlyRawData(Loop).CpValues(NumOfConcPts, {1, df->GlyRawData(Loop).NumCpTempPts}) = - Numbers({2, NumNumbers}); - } else { - ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, df->GlyRawData(Loop).Name)); - ShowContinueError(state, "Number of specific heat data points not equal to number of temperature points"); - ErrorsFound = true; - } - } - } + if (Util::FindItemInList(Alphas(3), FluidTemps) == 0) { + ShowSevereItemNotFound(state, eoh, cAlphaFields(3), Alphas(3)); + ErrorsFound = true; + continue; } - // Get: ***** DENSITY of GLYCOLS ***** - // First find the number of concentration value syntax lines have been entered and - // make sure that all of the concentration input is linked to the same temperature list - TempsName = ""; - FirstSHMatch = true; - NumOfConcPts = 0; - df->GlyRawData(Loop).RhoDataPresent = false; - CurrentModuleObject = "FluidProperties:Concentration"; - for (InData = 1; InData <= NumOfGlyFluidPropArrays; ++InData) { // check temperatures given for density are consistant - state.dataInputProcessing->inputProcessor->getObjectItem(state, - CurrentModuleObject, - InData, - Alphas, - NumAlphas, - Numbers, - NumNumbers, - Status, - lNumericFieldBlanks, - lAlphaFieldBlanks, - cAlphaFieldNames, - cNumericFieldNames); - if ((Util::SameString(Alphas(1), df->GlyRawData(Loop).Name)) && (Util::SameString(Alphas(2), Density))) { - ++NumOfConcPts; - if (FirstSHMatch) { - TempsName = Alphas(3); - FirstSHMatch = false; - } else { - if (!Util::SameString(TempsName, Alphas(3))) { - ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, df->GlyRawData(Loop).Name)); - ShowContinueError(state, "All glycol density data for the same glycol must use the same temperature list"); - ShowContinueError(state, format("Expected name={}, Entered name={}", TempsName, Alphas(3))); - ErrorsFound = true; - } - } - } + + if (Numbers(1) < 0.0) { + ShowSevereCustomMessage(state, eoh, "Negative concentrations not allowed in fluid property input data"); + ErrorsFound = true; + continue; } - if (NumOfConcPts > 0) { - // Now allocate the arrays and read the data into the proper place - // First, allocate the temperature array and transfer the data from the FluidTemp array - df->GlyRawData(Loop).RhoDataPresent = true; - for (int TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) { - if (Util::SameString(TempsName, FluidTemps(TempLoop).Name)) { - df->GlyRawData(Loop).NumRhoTempPts = FluidTemps(TempLoop).NumOfTemps; - df->GlyRawData(Loop).RhoTemps.allocate(df->GlyRawData(Loop).NumRhoTempPts); - df->GlyRawData(Loop).RhoTemps = FluidTemps(TempLoop).Temps; - break; // the TempLoop DO loop - } - if (TempLoop == NumOfFluidTempArrays) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->GlyRawData(Loop).Name)); - ShowContinueError(state, "No match for temperature array name found with glycol data"); - ErrorsFound = true; - } + + // Can temperatue and pressure points be different for different properties? Why is this allowed? + if (Alphas(2) == "SPECIFICHEAT") { + if (glycolRaw->CpTempArrayName != "" && glycolRaw->CpTempArrayName != Alphas(3)) { + ShowSevereCustomMessage(state, eoh, + format("All specific heat data for the same glycol must use the same temperature list" + "Expected name={}, Entered name={}", glycolRaw->CpTempArrayName, Alphas(3))); + ErrorsFound = true; + continue; } - - // Next, allocate the density related arrays - df->GlyRawData(Loop).NumRhoConcPts = NumOfConcPts; - df->GlyRawData(Loop).RhoConcs.allocate(df->GlyRawData(Loop).NumRhoConcPts); - df->GlyRawData(Loop).RhoValues.allocate(df->GlyRawData(Loop).NumRhoConcPts, - df->GlyRawData(Loop).NumRhoTempPts); - - // Finally, get the density and concentration values from the user input - NumOfConcPts = 0; - CurrentModuleObject = "FluidProperties:Concentration"; - for (InData = 1; InData <= NumOfGlyFluidPropArrays; ++InData) { - state.dataInputProcessing->inputProcessor->getObjectItem(state, - CurrentModuleObject, - InData, - Alphas, - NumAlphas, - Numbers, - NumNumbers, - Status, - lNumericFieldBlanks, - lAlphaFieldBlanks, - cAlphaFieldNames, - cNumericFieldNames); - if ((Util::SameString(Alphas(1), df->GlyRawData(Loop).Name)) && (Util::SameString(Alphas(2), Density))) { - ++NumOfConcPts; - df->GlyRawData(Loop).RhoConcs(NumOfConcPts) = Numbers(1); - // a little error trapping - if (NumOfConcPts == 1) { - if (df->GlyRawData(Loop).RhoConcs(NumOfConcPts) < 0.0) { - ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->GlyRawData(Loop).Name)); - ShowContinueError(state, "Negative concentrations not allowed in fluid property input data"); - ErrorsFound = true; - } - } else { - if (df->GlyRawData(Loop).RhoConcs(NumOfConcPts) <= - df->GlyRawData(Loop).RhoConcs(NumOfConcPts - 1)) { - ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->GlyRawData(Loop).Name)); - ShowContinueError(state, "Concentrations must be entered in ascending order for fluid property data"); - ErrorsFound = true; - } - } - if ((NumNumbers - 1) == df->GlyRawData(Loop).NumRhoTempPts) { - df->GlyRawData(Loop).RhoValues( - NumOfConcPts, {1, df->GlyRawData(Loop).NumRhoTempPts}) = Numbers({2, NumNumbers}); - } else { - ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, df->GlyRawData(Loop).Name)); - ShowContinueError(state, "Number of density data points not equal to number of temperature points"); - ErrorsFound = true; - } - } + glycolRaw->CpTempArrayName = Alphas(3); + + glycolRaw->CpConcs.push_back(Numbers(1)); + ++glycolRaw->NumCpConcPoints; + + } else if (Alphas(2) == "DENSITY") { + if (glycolRaw->RhoTempArrayName != "" && glycolRaw->RhoTempArrayName != Alphas(3)) { + ShowSevereCustomMessage(state, eoh, + format("All density data for the same glycol must use the same temperature list" + "Expected name={}, Entered name={}", glycolRaw->RhoTempArrayName, Alphas(3))); + ErrorsFound = true; + continue; } - } - // Get: ***** CONDUCTIVITY of GLYCOLS ***** - // First find the number of concentration value syntax lines have been entered and - // make sure that all of the concentration input is linked to the same temperature list - TempsName = ""; - FirstSHMatch = true; - NumOfConcPts = 0; - df->GlyRawData(Loop).CondDataPresent = false; - CurrentModuleObject = "FluidProperties:Concentration"; - for (InData = 1; InData <= NumOfGlyFluidPropArrays; ++InData) { // check temperatures given for conductivity are consistant - state.dataInputProcessing->inputProcessor->getObjectItem(state, - CurrentModuleObject, - InData, - Alphas, - NumAlphas, - Numbers, - NumNumbers, - Status, - lNumericFieldBlanks, - lAlphaFieldBlanks, - cAlphaFieldNames, - cNumericFieldNames); - if ((Util::SameString(Alphas(1), df->GlyRawData(Loop).Name)) && (Util::SameString(Alphas(2), Conductivity))) { - ++NumOfConcPts; - if (FirstSHMatch) { - TempsName = Alphas(3); - FirstSHMatch = false; - } else { - if (!Util::SameString(TempsName, Alphas(3))) { - ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, df->GlyRawData(Loop).Name)); - ShowContinueError(state, "All glycol conductivity data for the same glycol must use the same temperature list"); - ShowContinueError(state, format("Expected name={}, Entered name={}", TempsName, Alphas(3))); - ErrorsFound = true; - } - } + glycolRaw->CpTempArrayName = Alphas(3); + + glycolRaw->RhoConcs.push_back(Numbers(1)); + ++glycolRaw->NumRhoConcPoints; + + } else if (Alphas(2) == "CONDUCTIVITY") { + if (glycolRaw->CondTempArrayName != "" && glycolRaw->CondTempArrayName != Alphas(3)) { + ShowSevereCustomMessage(state, eoh, + format("All conductivity data for the same glycol must use the same temperature list" + "Expected name={}, Entered name={}", glycolRaw->CondTempArrayName, Alphas(3))); + ErrorsFound = true; + continue; } - } - if (NumOfConcPts > 0) { - // Now allocate the arrays and read the data into the proper place - // First, allocate the temperature array and transfer the data from the FluidTemp array - df->GlyRawData(Loop).CondDataPresent = true; - for (int TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) { - if (Util::SameString(TempsName, FluidTemps(TempLoop).Name)) { - df->GlyRawData(Loop).NumCondTempPts = FluidTemps(TempLoop).NumOfTemps; - df->GlyRawData(Loop).CondTemps.allocate(df->GlyRawData(Loop).NumCondTempPts); - df->GlyRawData(Loop).CondTemps = FluidTemps(TempLoop).Temps; - break; // the TempLoop DO loop - } - if (TempLoop == NumOfFluidTempArrays) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->GlyRawData(Loop).Name)); - ShowContinueError(state, "No match for temperature array name found with glycol data"); - ErrorsFound = true; - } + glycolRaw->CondTempArrayName = Alphas(3); + + glycolRaw->CondConcs.push_back(Numbers(1)); + ++glycolRaw->NumCondConcPoints; + + } else if (Alphas(2) == "VISCOSITY") { + if (glycolRaw->ViscTempArrayName != "" && glycolRaw->ViscTempArrayName != Alphas(3)) { + ShowSevereCustomMessage(state, eoh, + format("All conductivity data for the same glycol must use the same temperature list" + "Expected name={}, Entered name={}", glycolRaw->ViscTempArrayName, Alphas(3))); + ErrorsFound = true; + continue; } + glycolRaw->ViscTempArrayName = Alphas(3); + + glycolRaw->ViscConcs.push_back(Numbers(1)); + ++glycolRaw->NumViscConcPoints; - // Next, allocate the conductivity related arrays - df->GlyRawData(Loop).NumCondConcPts = NumOfConcPts; - df->GlyRawData(Loop).CondConcs.allocate(df->GlyRawData(Loop).NumCondConcPts); - df->GlyRawData(Loop).CondValues.allocate(df->GlyRawData(Loop).NumCondConcPts, - df->GlyRawData(Loop).NumCondTempPts); - - // Finally, get the conductivity and concentration values from the user input - NumOfConcPts = 0; - CurrentModuleObject = "FluidProperties:Concentration"; - for (InData = 1; InData <= NumOfGlyFluidPropArrays; ++InData) { - state.dataInputProcessing->inputProcessor->getObjectItem(state, - CurrentModuleObject, - InData, - Alphas, - NumAlphas, - Numbers, - NumNumbers, - Status, - lNumericFieldBlanks, - lAlphaFieldBlanks, - cAlphaFieldNames, - cNumericFieldNames); - if ((Util::SameString(Alphas(1), df->GlyRawData(Loop).Name)) && (Util::SameString(Alphas(2), Conductivity))) { - ++NumOfConcPts; - df->GlyRawData(Loop).CondConcs(NumOfConcPts) = Numbers(1); - // a little error trapping - if (NumOfConcPts == 1) { - if (df->GlyRawData(Loop).CondConcs(NumOfConcPts) < 0.0) { - ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->GlyRawData(Loop).Name)); - ShowContinueError(state, "Negative concentrations not allowed in fluid property input data"); - ErrorsFound = true; - } - } else { - if (df->GlyRawData(Loop).CondConcs(NumOfConcPts) <= - df->GlyRawData(Loop).CondConcs(NumOfConcPts - 1)) { - ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->GlyRawData(Loop).Name)); - ShowContinueError(state, "Concentrations must be entered in ascending order for fluid property data"); - ErrorsFound = true; - } - } - if ((NumNumbers - 1) == df->GlyRawData(Loop).NumCondTempPts) { - df->GlyRawData(Loop).CondValues( - NumOfConcPts, {1, df->GlyRawData(Loop).NumCondTempPts}) = Numbers({2, NumNumbers}); - } else { - ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, df->GlyRawData(Loop).Name)); - ShowContinueError(state, "Number of conductivity data points not equal to number of temperature points"); - ErrorsFound = true; - } - } - } - } - // Get: ***** VISCOSITY of GLYCOLS ***** - // First find the number of concentration value syntax lines have been entered and - // make sure that all of the concentration input is linked to the same temperature list - TempsName = ""; - FirstSHMatch = true; - NumOfConcPts = 0; - df->GlyRawData(Loop).ViscDataPresent = false; - CurrentModuleObject = "FluidProperties:Concentration"; - for (InData = 1; InData <= NumOfGlyFluidPropArrays; ++InData) { // check temperatures given for viscosity are consistant - state.dataInputProcessing->inputProcessor->getObjectItem(state, - CurrentModuleObject, - InData, - Alphas, - NumAlphas, - Numbers, - NumNumbers, - Status, - lNumericFieldBlanks, - lAlphaFieldBlanks, - cAlphaFieldNames, - cNumericFieldNames); - if ((Util::SameString(Alphas(1), df->GlyRawData(Loop).Name)) && (Util::SameString(Alphas(2), Viscosity))) { - ++NumOfConcPts; - if (FirstSHMatch) { - TempsName = Alphas(3); - FirstSHMatch = false; - } else { - if (!Util::SameString(TempsName, Alphas(3))) { - ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, df->GlyRawData(Loop).Name)); - ShowContinueError(state, "All glycol viscosity data for the same glycol must use the same temperature list"); - ShowContinueError(state, format("Expected name={}, Entered name={}", TempsName, Alphas(3))); - ErrorsFound = true; - } - } - } + } else { + ShowSevereInvalidKey(state, eoh, cAlphaFields(2), Alphas(2), + "Valid options are (\"Specific Heat\", \"Density\", \"Conductivity\", \"Viscosity\")"); + ErrorsFound = true; } - if (NumOfConcPts > 0) { - df->GlyRawData(Loop).ViscDataPresent = true; - // Now allocate the arrays and read the data into the proper place - // First, allocate the temperature array and transfer the data from the FluidTemp array - for (int TempLoop = 1; TempLoop <= NumOfFluidTempArrays; ++TempLoop) { - if (Util::SameString(TempsName, FluidTemps(TempLoop).Name)) { - df->GlyRawData(Loop).NumViscTempPts = FluidTemps(TempLoop).NumOfTemps; - df->GlyRawData(Loop).ViscTemps.allocate(df->GlyRawData(Loop).NumViscTempPts); - df->GlyRawData(Loop).ViscTemps = FluidTemps(TempLoop).Temps; - break; // the TempLoop DO loop - } - if (TempLoop == NumOfFluidTempArrays) { - ShowSevereError(state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->GlyRawData(Loop).Name)); - ShowContinueError(state, "No match for temperature array name found with glycol data"); - ErrorsFound = true; - } - } + } - // Next, allocate the viscosity related arrays - df->GlyRawData(Loop).NumViscConcPts = NumOfConcPts; - df->GlyRawData(Loop).ViscConcs.allocate(df->GlyRawData(Loop).NumViscConcPts); - df->GlyRawData(Loop).ViscValues.allocate(df->GlyRawData(Loop).NumViscConcPts, - df->GlyRawData(Loop).NumViscTempPts); - - // Finally, get the viscosity and concentration values from the user input - NumOfConcPts = 0; - CurrentModuleObject = "FluidProperties:Concentration"; - for (InData = 1; InData <= NumOfGlyFluidPropArrays; ++InData) { - state.dataInputProcessing->inputProcessor->getObjectItem(state, - CurrentModuleObject, - InData, - Alphas, - NumAlphas, - Numbers, - NumNumbers, - Status, - lNumericFieldBlanks, - lAlphaFieldBlanks, - cAlphaFieldNames, - cNumericFieldNames); - if ((Util::SameString(Alphas(1), df->GlyRawData(Loop).Name)) && (Util::SameString(Alphas(2), Viscosity))) { - ++NumOfConcPts; - df->GlyRawData(Loop).ViscConcs(NumOfConcPts) = Numbers(1); - // a little error trapping - if (NumOfConcPts == 1) { - if (df->GlyRawData(Loop).ViscConcs(NumOfConcPts) < 0.0) { - ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->GlyRawData(Loop).Name)); - ShowContinueError(state, "Negative concentrations not allowed in fluid property input data"); - ErrorsFound = true; - } - } else { - if (df->GlyRawData(Loop).ViscConcs(NumOfConcPts) <= - df->GlyRawData(Loop).ViscConcs(NumOfConcPts - 1)) { - ShowSevereError( - state, format("{}{} Name={}", RoutineName, CurrentModuleObject, df->GlyRawData(Loop).Name)); - ShowContinueError(state, "Concentrations must be entered in ascending order for fluid property data"); - ErrorsFound = true; - } - } - if ((NumNumbers - 1) == df->GlyRawData(Loop).NumViscTempPts) { - df->GlyRawData(Loop).ViscValues( - NumOfConcPts, {1, df->GlyRawData(Loop).NumViscTempPts}) = Numbers({2, NumNumbers}); - } else { - ShowSevereError(state, - format("{}{} Name={}", RoutineName, CurrentModuleObject, df->GlyRawData(Loop).Name)); - ShowContinueError(state, "Number of viscosity data points not equal to number of temperature points"); - ErrorsFound = true; - } - } + // Allocate and sort temp point/conc point arrays + for (auto *glycolRaw : df->glycolsRaw) { + + if (glycolRaw->Name == "ETHYLENEGLYCOL" || glycolRaw->Name == "PROPYLENEGLYCOL") continue; + + int cpTempArrayNum = Util::FindItemInList(glycolRaw->CpTempArrayName, FluidTemps); + auto &cpTempArray = FluidTemps(cpTempArrayNum); + glycolRaw->NumCpTempPoints = cpTempArray.NumOfTemps; + glycolRaw->CpTemps.allocate(glycolRaw->NumCpTempPoints); + glycolRaw->CpTemps = cpTempArray.Temps; + + glycolRaw->CpValues.allocate(glycolRaw->NumCpConcPoints, glycolRaw->NumCpTempPoints); + std::sort(glycolRaw->CpConcs.begin(), glycolRaw->CpConcs.end()); + + int rhoTempArrayNum = Util::FindItemInList(glycolRaw->RhoTempArrayName, FluidTemps); + auto &rhoTempArray = FluidTemps(rhoTempArrayNum); + glycolRaw->NumRhoTempPoints = rhoTempArray.NumOfTemps; + glycolRaw->RhoTemps.allocate(glycolRaw->NumRhoTempPoints); + glycolRaw->RhoTemps = rhoTempArray.Temps; + + glycolRaw->RhoValues.allocate(glycolRaw->NumRhoConcPoints, glycolRaw->NumRhoTempPoints); + std::sort(glycolRaw->RhoConcs.begin(), glycolRaw->RhoConcs.end()); + + int condTempArrayNum = Util::FindItemInList(glycolRaw->CondTempArrayName, FluidTemps); + auto &condTempArray = FluidTemps(condTempArrayNum); + glycolRaw->NumCondTempPoints = condTempArray.NumOfTemps; + glycolRaw->CondTemps.allocate(glycolRaw->NumCondTempPoints); + glycolRaw->CondTemps = condTempArray.Temps; + + glycolRaw->CondValues.allocate(glycolRaw->NumCondConcPoints, glycolRaw->NumCondTempPoints); + std::sort(glycolRaw->CondConcs.begin(), glycolRaw->CondConcs.end()); + + int viscTempArrayNum = Util::FindItemInList(glycolRaw->ViscTempArrayName, FluidTemps); + auto &viscTempArray = FluidTemps(viscTempArrayNum); + glycolRaw->NumViscTempPoints = viscTempArray.NumOfTemps; + glycolRaw->ViscTemps.allocate(glycolRaw->NumViscTempPoints); + glycolRaw->ViscTemps = viscTempArray.Temps; + + glycolRaw->ViscValues.allocate(glycolRaw->NumViscConcPoints, glycolRaw->NumViscTempPoints); + std::sort(glycolRaw->ViscConcs.begin(), glycolRaw->ViscConcs.end()); + } + + // Finally, get the specific heat and concentration values from the user input + CurrentModuleObject = "FluidProperties:Concentration"; + for (int InData = 1; InData <= NumOfGlyFluidPropArrays; ++InData) { + state.dataInputProcessing->inputProcessor->getObjectItem(state, + CurrentModuleObject, + InData, + Alphas, + NumAlphas, + Numbers, + NumNumbers, + Status, + lNumericFieldBlanks, + lAlphaFieldBlanks, + cAlphaFields, + cNumericFields); + + if (Alphas(1) == "WATER") continue; // Is this the right thing to do? + + ErrorObjectHeader eoh{routineName, CurrentModuleObject, Alphas(1)}; + auto *glycolRaw = GetGlycolRaw(state, Alphas(1)); + assert(glycolRaw != nullptr); // We've already tested for this, can just assert now + + if (Alphas(2) == "SPECIFICHEAT") { + if ((NumNumbers - 1) != glycolRaw->NumCpTempPoints) { + ShowSevereCustomMessage(state, eoh, + format("Number of specific heat points ({}) not equal to number of temperature points ({})", + NumNumbers - 1, glycolRaw->NumCpTempPoints)); + ErrorsFound = true; + continue; + } + auto concFound = std::find(glycolRaw->CpConcs.begin(), glycolRaw->CpConcs.end(), Numbers(1)); + assert(concFound != glycolRaw->CpConcs.end()); + int concNum = (concFound - glycolRaw->CpConcs.begin()) + 1; + glycolRaw->CpValues(concNum, {1, glycolRaw->NumCpTempPoints}) = Numbers({2, NumNumbers}); + + } else if (Alphas(2) == "DENSITY") { + if ((NumNumbers - 1) != glycolRaw->NumRhoTempPoints) { + ShowSevereCustomMessage(state, eoh, + format("Number of density points ({}) not equal to number of temperature points ({})", + NumNumbers - 1, glycolRaw->NumRhoTempPoints)); + ErrorsFound = true; + continue; + } + auto concFound = std::find(glycolRaw->RhoConcs.begin(), glycolRaw->RhoConcs.end(), Numbers(1)); + assert(concFound != glycolRaw->RhoConcs.end()); + int concNum = (concFound - glycolRaw->RhoConcs.begin()) + 1; + glycolRaw->RhoValues(concNum, {1, glycolRaw->NumRhoTempPoints}) = Numbers({2, NumNumbers}); + + } else if (Alphas(2) == "CONDUCTIVITY") { + if ((NumNumbers - 1) != glycolRaw->NumCondTempPoints) { + ShowSevereCustomMessage(state, eoh, + format("Number of conductivity points ({}) not equal to number of temperature points ({})", + NumNumbers - 1, glycolRaw->NumCondTempPoints)); + ErrorsFound = true; + continue; } + auto concFound = std::find(glycolRaw->CondConcs.begin(), glycolRaw->CondConcs.end(), Numbers(1)); + assert(concFound != glycolRaw->CondConcs.end()); + int concNum = (concFound - glycolRaw->CondConcs.begin()) + 1; + glycolRaw->CondValues(concNum, {1, glycolRaw->NumCondTempPoints}) = Numbers({2, NumNumbers}); + + } else if (Alphas(2) == "VISCOSITY") { + if ((NumNumbers - 1) != glycolRaw->NumViscTempPoints) { + ShowSevereCustomMessage(state, eoh, + format("Number of viscosity points ({}) not equal to number of temperature points ({})", + NumNumbers - 1, glycolRaw->NumViscTempPoints)); + ErrorsFound = true; + continue; + } + auto concFound = std::find(glycolRaw->ViscConcs.begin(), glycolRaw->ViscConcs.end(), Numbers(1)); + assert(concFound != glycolRaw->ViscConcs.end()); + int concNum = (concFound - glycolRaw->ViscConcs.begin()) + 1; + glycolRaw->ViscValues(concNum, {1, glycolRaw->NumViscTempPoints}) = Numbers({2, NumNumbers}); } - } // glycol loop + } // for (InData) // Get: ***** GLYCOL CONCENTRATIONS ***** // Read in the GlycolConcentrations input and then set the property data accordingly @@ -2245,42 +1521,54 @@ namespace FluidProperties { CurrentModuleObject = "FluidProperties:GlycolConcentration"; NumOfOptionalInput = state.dataInputProcessing->inputProcessor->getNumObjectsFound(state, CurrentModuleObject); - int NumOfGlyConcs = NumOfOptionalInput + 1; - df->GlycolData.allocate(NumOfGlyConcs); - - df->GlycolData(1).used = true; // mark Water as always used - - // First "glycol" is always pure water. Load data from default arrays - df->GlycolData(1).Name = "WATER"; - df->GlycolData(1).GlycolName = "WATER"; - df->GlycolData(1).Num = 1; - df->GlycolData(1).Concentration = 1.0; - df->GlycolData(1).CpDataPresent = true; - df->GlycolData(1).NumCpTempPts = DefaultNumGlyTemps; - df->GlycolData(1).RhoDataPresent = true; - df->GlycolData(1).NumRhoTempPts = DefaultNumGlyTemps; - df->GlycolData(1).CondDataPresent = true; - df->GlycolData(1).NumCondTempPts = DefaultNumGlyTemps; - df->GlycolData(1).ViscDataPresent = true; - df->GlycolData(1).NumViscTempPts = DefaultNumGlyTemps; - df->GlycolData(1).CpTemps.allocate(df->GlycolData(1).NumCpTempPts); - df->GlycolData(1).CpValues.allocate(df->GlycolData(1).NumCpTempPts); - df->GlycolData(1).RhoTemps.allocate(df->GlycolData(1).NumRhoTempPts); - df->GlycolData(1).RhoValues.allocate(df->GlycolData(1).NumRhoTempPts); - df->GlycolData(1).CondTemps.allocate(df->GlycolData(1).NumCondTempPts); - df->GlycolData(1).CondValues.allocate(df->GlycolData(1).NumCondTempPts); - df->GlycolData(1).ViscTemps.allocate(df->GlycolData(1).NumViscTempPts); - df->GlycolData(1).ViscValues.allocate(df->GlycolData(1).NumViscTempPts); - df->GlycolData(1).CpTemps = DefaultGlycolTemps; - df->GlycolData(1).CpValues = DefaultWaterCpData; - df->GlycolData(1).RhoTemps = DefaultGlycolTemps; - df->GlycolData(1).RhoValues = DefaultWaterRhoData; - df->GlycolData(1).CondTemps = DefaultGlycolTemps; - df->GlycolData(1).CondValues = DefaultWaterCondData; - df->GlycolData(1).ViscTemps = DefaultGlycolTemps; - df->GlycolData(1).ViscValues = DefaultWaterViscData; - - NumOfGlyConcs = 1; // Water is always available, everything else must be specified + auto *water = new GlycolProps; + water->Name = "WATER"; + water->GlycolName = ""; + water->used = true; // mark Water as always used + + df->glycols.push_back(water); + water->Num = df->glycols.isize(); + + water->Concentration = 1.0; + water->CpDataPresent = true; + water->NumCpTempPoints = DefaultNumGlyTemps; + water->RhoDataPresent = true; + water->NumRhoTempPoints = DefaultNumGlyTemps; + water->CondDataPresent = true; + water->NumCondTempPoints = DefaultNumGlyTemps; + water->ViscDataPresent = true; + water->NumViscTempPoints = DefaultNumGlyTemps; + water->CpTemps.allocate(water->NumCpTempPoints); + water->CpValues.allocate(water->NumCpTempPoints); + water->RhoTemps.allocate(water->NumRhoTempPoints); + water->RhoValues.allocate(water->NumRhoTempPoints); + water->CondTemps.allocate(water->NumCondTempPoints); + water->CondValues.allocate(water->NumCondTempPoints); + water->CondTempRatios.allocate(water->NumCondTempPoints); + water->ViscTemps.allocate(water->NumViscTempPoints); + water->ViscValues.allocate(water->NumViscTempPoints); + water->CpTemps = DefaultGlycolTemps; + water->CpValues = DefaultWaterCpData; + water->RhoTemps = DefaultGlycolTemps; + water->RhoValues = DefaultWaterRhoData; + water->CondTemps = DefaultGlycolTemps; + water->CondValues = DefaultWaterCondData; + water->ViscTemps = DefaultGlycolTemps; + water->ViscValues = DefaultWaterViscData; + + // This is a speed optimization. Maybe. + water->CpTempRatios.allocate(water->NumCpTempPoints); + for (int i = 1; i < water->NumCpTempPoints; ++i) + water->CpTempRatios(i) = (water->CpValues(i+1) - water->CpValues(i)) / (water->CpTemps(i+1) - water->CpTemps(i)); + water->RhoTempRatios.allocate(water->NumRhoTempPoints); + for (int i = 1; i < water->NumRhoTempPoints; ++i) + water->RhoTempRatios(i) = (water->RhoValues(i+1) - water->RhoValues(i)) / (water->RhoTemps(i+1) - water->RhoTemps(i)); + water->CondTempRatios.allocate(water->NumCondTempPoints); + for (int i = 1; i < water->NumCondTempPoints; ++i) + water->CondTempRatios(i) = (water->CondValues(i+1) - water->CondValues(i)) / (water->CondTemps(i+1) - water->CondTemps(i)); + water->ViscTempRatios.allocate(water->NumViscTempPoints); + for (int i = 1; i < water->NumCondTempPoints; ++i) + water->ViscTempRatios(i) = (water->ViscValues(i+1) - water->ViscValues(i)) / (water->ViscTemps(i+1) - water->ViscTemps(i)); for (int Loop = 1; Loop <= NumOfOptionalInput; ++Loop) { state.dataInputProcessing->inputProcessor->getObjectItem(state, @@ -2293,224 +1581,125 @@ namespace FluidProperties { Status, lNumericFieldBlanks, lAlphaFieldBlanks, - cAlphaFieldNames, - cNumericFieldNames); - bool GlycolFound = false; - if (Util::SameString(Alphas(2), EthyleneGlycol)) { - GlycolFound = true; - ++NumOfGlyConcs; - df->GlycolData(NumOfGlyConcs).Name = Alphas(1); - df->GlycolData(NumOfGlyConcs).Num = NumOfGlyConcs; - - df->GlycolData(NumOfGlyConcs).GlycolName = Alphas(2); - } else if (Util::SameString(Alphas(2), PropyleneGlycol)) { - GlycolFound = true; - ++NumOfGlyConcs; - df->GlycolData(NumOfGlyConcs).Name = Alphas(1); - df->GlycolData(NumOfGlyConcs).Num = NumOfGlyConcs; - df->GlycolData(NumOfGlyConcs).GlycolName = Alphas(2); - } else if (Util::SameString(Alphas(2), "UserDefinedGlycolType")) { - for (InData = 1; InData <= df->NumOfGlycols; ++InData) { - if (Util::SameString(Alphas(3), df->GlyRawData(InData).Name)) { - GlycolFound = true; - break; // DO LOOP through user defined glycols - } - } - if (GlycolFound) { - ++NumOfGlyConcs; - df->GlycolData(NumOfGlyConcs).Name = Alphas(1); - df->GlycolData(NumOfGlyConcs).Num = NumOfGlyConcs; - df->GlycolData(NumOfGlyConcs).GlycolName = Alphas(3); - } else { - ShowSevereError(state, format("{}{}=\"{}\", invalid reference", RoutineName, CurrentModuleObject, Alphas(1))); - ShowContinueError(state, format("... not found in the FluidProperties:Name list: \"{}\".", Alphas(3))); - ErrorsFound = true; - } - } else { - ShowSevereError(state, format("{}{}=\"{}\", invalid field", RoutineName, CurrentModuleObject, Alphas(1))); - ShowContinueError(state, format("...{}=\"{}\".", cAlphaFieldNames(2), Alphas(2))); - ShowContinueError(state, "... Legal values are PropyleneGlycol, EthyleneGlycol or UserDefinedGlycolType."); - ErrorsFound = true; - } - if (!GlycolFound) continue; - df->GlycolData(NumOfGlyConcs).Concentration = Numbers(1); - } - - // Now initialize the rest of the data for the glycols - for (int Loop = 2; Loop <= NumOfGlyConcs; ++Loop) { - auto &glycol = df->GlycolData(Loop); - - // Check to see if glycol name is one of the defaults or is listed in the Fluid Name list - if (Util::SameString(glycol.GlycolName, EthyleneGlycol)) { - glycol.BaseGlycolIndex = EthyleneGlycolIndex; - } else if (Util::SameString(glycol.GlycolName, PropyleneGlycol)) { - glycol.BaseGlycolIndex = PropyleneGlycolIndex; - } else { - for (InData = 1; InData <= df->NumOfGlycols; ++InData) { - if (Util::SameString(glycol.GlycolName, df->GlyRawData(InData).Name)) { - glycol.BaseGlycolIndex = InData; - break; // DO LOOP through user defined glycols - } - } - } + cAlphaFields, + cNumericFields); - // Set the rest of the parameters... - if ((glycol.BaseGlycolIndex == EthyleneGlycolIndex) || - (glycol.BaseGlycolIndex == PropyleneGlycolIndex)) { - - glycol.CpDataPresent = true; - glycol.NumCpTempPts = DefaultNumGlyTemps; - glycol.RhoDataPresent = true; - glycol.NumRhoTempPts = DefaultNumGlyTemps; - glycol.CondDataPresent = true; - glycol.NumCondTempPts = DefaultNumGlyTemps; - glycol.ViscDataPresent = true; - glycol.NumViscTempPts = DefaultNumGlyTemps; - glycol.CpTemps.allocate(glycol.NumCpTempPts); - glycol.CpValues.allocate(glycol.NumCpTempPts); - glycol.RhoTemps.allocate(glycol.NumRhoTempPts); - glycol.RhoValues.allocate(glycol.NumRhoTempPts); - glycol.CondTemps.allocate(glycol.NumCondTempPts); - glycol.CondValues.allocate(glycol.NumCondTempPts); - glycol.ViscTemps.allocate(glycol.NumViscTempPts); - glycol.ViscValues.allocate(glycol.NumViscTempPts); - glycol.CpTemps = DefaultGlycolTemps; - glycol.RhoTemps = DefaultGlycolTemps; - glycol.CondTemps = DefaultGlycolTemps; - glycol.ViscTemps = DefaultGlycolTemps; - - if (glycol.BaseGlycolIndex == EthyleneGlycolIndex) { - InterpDefValuesForGlycolConc(state, DefaultGlycolConcs, DefaultEthGlyCpData, glycol.Concentration, glycol.CpValues); - InterpDefValuesForGlycolConc(state, DefaultGlycolConcs, DefaultEthGlyRhoData, glycol.Concentration, glycol.RhoValues); - InterpDefValuesForGlycolConc(state, - DefaultGlycolConcs, - DefaultEthGlyCondData, - glycol.Concentration, - glycol.CondValues); - InterpDefValuesForGlycolConc(state, - DefaultGlycolConcs, - DefaultEthGlyViscData, - glycol.Concentration, - glycol.ViscValues); - } else { // == PropyleneGlycolIndex - InterpDefValuesForGlycolConc(state, - DefaultGlycolConcs, - DefaultPropGlyCpData, - glycol.Concentration, - glycol.CpValues); - InterpDefValuesForGlycolConc(state, - DefaultGlycolConcs, - DefaultPropGlyRhoData, - glycol.Concentration, - glycol.RhoValues); - InterpDefValuesForGlycolConc(state, - DefaultGlycolConcs, - DefaultPropGlyCondData, - glycol.Concentration, - glycol.CondValues); - InterpDefValuesForGlycolConc(state, - DefaultGlycolConcs, - DefaultPropGlyViscData, - glycol.Concentration, - glycol.ViscValues); - } + ErrorObjectHeader eoh{routineName, CurrentModuleObject, Alphas(1)}; - } else { // User-defined fluid - - int Index = glycol.BaseGlycolIndex; - - // Specific heat data: - if (df->GlyRawData(Index).CpDataPresent) { - glycol.CpDataPresent = true; - glycol.NumCpTempPts = df->GlyRawData(Index).NumCpTempPts; - glycol.CpTemps.allocate(glycol.NumCpTempPts); - glycol.CpValues.allocate(glycol.NumCpTempPts); - glycol.CpTemps = df->GlyRawData(Index).CpTemps; - InterpValuesForGlycolConc(state, - df->GlyRawData(Index).NumCpConcPts, - df->GlyRawData(Index).NumCpTempPts, - df->GlyRawData(Index).CpConcs, - df->GlyRawData(Index).CpValues, - glycol.Concentration, - glycol.CpValues); - } else { - ShowSevereError(state, format("{}Specific heat data not entered for a {}", RoutineName, CurrentModuleObject)); - ShowContinueError(state, "ALL data must be entered for user-defined glycols"); - ShowContinueError(state, format("Glycol mixture name = {}", glycol.Name)); - ShowContinueError(state, format("Glycol fluid name = {}", glycol.GlycolName)); - ErrorsFound = true; - } + auto *glycol = GetGlycol(state, Alphas(1)); + if (glycol == nullptr) { // It appears that FluidProperties:Name is not necessary + glycol = new GlycolProps; + glycol->Name = Alphas(1); + df->glycols.push_back(glycol); + glycol->Num = df->glycols.isize(); + } - // Density data: - if (df->GlyRawData(Index).CpDataPresent) { - glycol.RhoDataPresent = true; - glycol.NumRhoTempPts = df->GlyRawData(Index).NumRhoTempPts; - glycol.RhoTemps.allocate(glycol.NumRhoTempPts); - glycol.RhoValues.allocate(glycol.NumRhoTempPts); - glycol.RhoTemps = df->GlyRawData(Index).RhoTemps; - InterpValuesForGlycolConc(state, - df->GlyRawData(Index).NumRhoConcPts, - df->GlyRawData(Index).NumRhoTempPts, - df->GlyRawData(Index).RhoConcs, - df->GlyRawData(Index).RhoValues, - glycol.Concentration, - glycol.RhoValues); - } else { - ShowSevereError(state, format("{}Density data not entered for a {}", RoutineName, CurrentModuleObject)); - ShowContinueError(state, "ALL data must be entered for user-defined glycols"); - ShowContinueError(state, format("Glycol mixture name = {}", glycol.Name)); - ShowContinueError(state, format("Glycol fluid name = {}", glycol.GlycolName)); + GlycolRawProps *glycolRaw = nullptr; + + if (Alphas(2) == "ETHYLENEGLYCOL" || Alphas(2) == "PROPYLENEGLYCOL") { + glycol->GlycolName = Alphas(2); + glycolRaw = GetGlycolRaw(state, Alphas(2)); + assert(glycolRaw != nullptr); + } else if (Alphas(2) == "USERDEFINEDGLYCOLTYPE") { // Why can't this just be the name of the user-defined glycol? + glycol->GlycolName = Alphas(3); + glycolRaw = GetGlycolRaw(state, Alphas(3)); + if (glycolRaw == nullptr) { + ShowSevereItemNotFound(state, eoh, cAlphaFields(3), Alphas(3)); ErrorsFound = true; + continue; } + } else { + ShowSevereInvalidKey(state, eoh, cAlphaFields(2), Alphas(2)); + ErrorsFound = true; + continue; + } - // Conductivity data: - if (df->GlyRawData(Index).CondDataPresent) { - glycol.CondDataPresent = true; - glycol.NumCondTempPts = df->GlyRawData(Index).NumCondTempPts; - glycol.CondTemps.allocate(glycol.NumCondTempPts); - glycol.CondValues.allocate(glycol.NumCondTempPts); - glycol.CondTemps = df->GlyRawData(Index).CondTemps; - InterpValuesForGlycolConc(state, - df->GlyRawData(Index).NumCondConcPts, - df->GlyRawData(Index).NumCondTempPts, - df->GlyRawData(Index).CondConcs, - df->GlyRawData(Index).CondValues, - glycol.Concentration, - glycol.CondValues); - } else { - ShowSevereError(state, format("{}Conductivity data not entered for a {}", RoutineName, CurrentModuleObject)); - ShowContinueError(state, "ALL data must be entered for user-defined glycols"); - ShowContinueError(state, format("Glycol mixture name = {}", glycol.Name)); - ShowContinueError(state, format("Glycol fluid name = {}", glycol.GlycolName)); - ErrorsFound = true; - } + // We're good to go + glycol->Concentration = Numbers(1); - // Viscosity data: - if (df->GlyRawData(Index).ViscDataPresent) { - glycol.ViscDataPresent = true; - glycol.NumViscTempPts = df->GlyRawData(Index).NumViscTempPts; - glycol.ViscTemps.allocate(glycol.NumViscTempPts); - glycol.ViscValues.allocate(glycol.NumViscTempPts); - glycol.ViscTemps = df->GlyRawData(Index).ViscTemps; - InterpValuesForGlycolConc(state, - df->GlyRawData(Index).NumViscConcPts, - df->GlyRawData(Index).NumViscTempPts, - df->GlyRawData(Index).ViscConcs, - df->GlyRawData(Index).ViscValues, - glycol.Concentration, - glycol.ViscValues); - } else { - ShowSevereError(state, format("{}Viscosity data not entered for a {}", RoutineName, CurrentModuleObject)); - ShowContinueError(state, "ALL data must be entered for user-defined glycols"); - ShowContinueError(state, format("Glycol mixture name = {}", glycol.Name)); - ShowContinueError(state, format("Glycol fluid name = {}", glycol.GlycolName)); - ErrorsFound = true; - } + glycol->CpDataPresent = glycolRaw->CpDataPresent; + if (!glycol->CpDataPresent) { + ShowSevereError(state, format("{}: Specific heat data not entered for a {}", routineName, CurrentModuleObject)); + ShowContinueError(state, "ALL data must be entered for user-defined glycols"); + ShowContinueError(state, format("Glycol mixture name = {}", glycol->Name)); + ShowContinueError(state, format("Glycol fluid name = {}", glycol->GlycolName)); + ErrorsFound = true; + continue; + } + + glycol->NumCpTempPoints = glycolRaw->NumCpTempPoints; + glycol->CpTemps.allocate(glycol->NumCpTempPoints); + glycol->CpTemps({1, glycol->NumCpTempPoints}) = glycolRaw->CpTemps({1, glycolRaw->NumCpTempPoints}); + glycol->CpValues.allocate(glycol->NumCpTempPoints); + InterpValuesForGlycolConc(state, glycolRaw->NumCpConcPoints, glycolRaw->NumCpTempPoints, glycolRaw->CpConcs, glycolRaw->CpValues, + glycol->Concentration, glycol->CpValues); + + glycol->RhoDataPresent = glycolRaw->RhoDataPresent; + if (!glycol->RhoDataPresent) { + ShowSevereError(state, format("{}: density data not entered for a {}", routineName, CurrentModuleObject)); + ShowContinueError(state, "ALL data must be entered for user-defined glycols"); + ShowContinueError(state, format("Glycol mixture name = {}", glycol->Name)); + ShowContinueError(state, format("Glycol fluid name = {}", glycol->GlycolName)); + ErrorsFound = true; + continue; + } + + glycol->NumRhoTempPoints = glycolRaw->NumRhoTempPoints; + glycol->RhoTemps.allocate(glycol->NumRhoTempPoints); + glycol->RhoTemps({1, glycol->NumRhoTempPoints}) = glycolRaw->RhoTemps({1, glycolRaw->NumRhoTempPoints}); + glycol->RhoValues.allocate(glycol->NumRhoTempPoints); + InterpValuesForGlycolConc(state, glycolRaw->NumRhoConcPoints, glycolRaw->NumRhoTempPoints, glycolRaw->RhoConcs, glycolRaw->RhoValues, + glycol->Concentration, glycol->RhoValues); + + glycol->CondDataPresent = glycolRaw->CondDataPresent; + if (!glycol->CondDataPresent) { + ShowSevereError(state, format("{}: conductivity data not entered for a {}", routineName, CurrentModuleObject)); + ShowContinueError(state, "ALL data must be entered for user-defined glycols"); + ShowContinueError(state, format("Glycol mixture name = {}", glycol->Name)); + ShowContinueError(state, format("Glycol fluid name = {}", glycol->GlycolName)); + ErrorsFound = true; + continue; + } + + glycol->NumCondTempPoints = glycolRaw->NumCondTempPoints; + glycol->CondTemps.allocate(glycol->NumCondTempPoints); + glycol->CondTemps({1, glycol->NumCondTempPoints}) = glycolRaw->CondTemps({1, glycolRaw->NumCondTempPoints}); + glycol->CondValues.allocate(glycol->NumCondTempPoints); + InterpValuesForGlycolConc(state, glycolRaw->NumCondConcPoints, glycolRaw->NumCondTempPoints, glycolRaw->CondConcs, glycolRaw->CondValues, + glycol->Concentration, glycol->CondValues); + + glycol->ViscDataPresent = glycolRaw->ViscDataPresent; + if (!glycol->ViscDataPresent) { + ShowSevereError(state, format("{}: viscosity data not entered for a {}", routineName, CurrentModuleObject)); + ShowContinueError(state, "ALL data must be entered for user-defined glycols"); + ShowContinueError(state, format("Glycol mixture name = {}", glycol->Name)); + ShowContinueError(state, format("Glycol fluid name = {}", glycol->GlycolName)); + ErrorsFound = true; + continue; } - } - - df->NumOfGlycols = NumOfGlyConcs; // Reset number of glycols to actual number - + + glycol->NumViscTempPoints = glycolRaw->NumViscTempPoints; + glycol->ViscTemps.allocate(glycol->NumViscTempPoints); + glycol->ViscTemps({1, glycol->NumViscTempPoints}) = glycolRaw->ViscTemps({1, glycolRaw->NumViscTempPoints}); + glycol->ViscValues.allocate(glycol->NumViscTempPoints); + InterpValuesForGlycolConc(state, glycolRaw->NumViscConcPoints, glycolRaw->NumViscTempPoints, glycolRaw->ViscConcs, glycolRaw->ViscValues, + glycol->Concentration, glycol->ViscValues); + + // This is a speed optimization. Maybe. + glycol->CpTempRatios.allocate(glycol->NumCpTempPoints); + for (int i = 1; i < glycol->NumCpTempPoints; ++i) + glycol->CpTempRatios(i) = (glycol->CpValues(i+1) - glycol->CpValues(i)) / (glycol->CpTemps(i+1) - glycol->CpTemps(i)); + glycol->RhoTempRatios.allocate(glycol->NumRhoTempPoints); + for (int i = 1; i < glycol->NumRhoTempPoints; ++i) + glycol->RhoTempRatios(i) = (glycol->RhoValues(i+1) - glycol->RhoValues(i)) / (glycol->RhoTemps(i+1) - glycol->RhoTemps(i)); + glycol->CondTempRatios.allocate(glycol->NumCondTempPoints); + for (int i = 1; i < glycol->NumCondTempPoints; ++i) + glycol->CondTempRatios(i) = (glycol->CondValues(i+1) - glycol->CondValues(i)) / (glycol->CondTemps(i+1) - glycol->CondTemps(i)); + glycol->ViscTempRatios.allocate(glycol->NumViscTempPoints); + for (int i = 1; i < glycol->NumCondTempPoints; ++i) + glycol->ViscTempRatios(i) = (glycol->ViscValues(i+1) - glycol->ViscValues(i)) / (glycol->ViscTemps(i+1) - glycol->ViscTemps(i)); + } // for (Loop) + if (!ErrorsFound) InitializeGlycolTempLimits(state, ErrorsFound); // Initialize the Temp limits for the glycols if (!ErrorsFound) InitializeRefrigerantLimits(state, ErrorsFound); // Initialize the limits for the refrigerants @@ -2518,14 +1707,14 @@ namespace FluidProperties { FluidTemps.deallocate(); Alphas.deallocate(); - cAlphaFieldNames.deallocate(); + cAlphaFields.deallocate(); lAlphaFieldBlanks.deallocate(); Numbers.deallocate(); - cNumericFieldNames.deallocate(); + cNumericFields.deallocate(); lNumericFieldBlanks.deallocate(); if (ErrorsFound) { - ShowFatalError(state, format("{}Previous errors in input cause program termination.", RoutineName)); + ShowFatalError(state, format("{}: Previous errors in input cause program termination.", routineName)); } if (state.dataInputProcessing->inputProcessor->getNumSectionsFound("REPORTGLYCOLS") > 0) df->DebugReportGlycols = true; @@ -2542,87 +1731,6 @@ namespace FluidProperties { //***************************************************************************** - template - void InterpDefValuesForGlycolConc( - EnergyPlusData &state, - const std::array &RawConcData, // concentrations for raw data - const std::array, NumOfConcs> &RawPropData, // raw property data (concentration, temperature) - Real64 Concentration, // concentration of actual fluid mix - Array1D &InterpData // interpolated output data at proper concentration - ) - { - - // SUBROUTINE INFORMATION: - // AUTHOR Rick Strand - // DATE WRITTEN June 2004 - - // PURPOSE OF THIS SUBROUTINE: - // The purpose of this subroutine is to find the values for the property - // data at a particular concentration from default data that is at "generic" - // concentrations. This is then returned to the main get routine and - // then used later in the program to find values at various temperatures. - // The ultimate purpose of this is to avoid double interpolation during - // the simulation. Since concentration does not change during the simulation, - // there is no reason to do a double interpolation every time a property - // value is needed. - - // METHODOLOGY EMPLOYED: - // Fairly straight forward--find the two concentrations between which - // the actual concentration falls and then interpolate the property - // data using standard linear interpolation. Note that data is stored - // in the format: std::array[Concentration][Temperature] - - // SUBROUTINE PARAMETER DEFINITIONS: - constexpr Real64 ConcToler(0.0001); // Some reasonable value for comparisons - static constexpr std::string_view RoutineName("InterpDefValuesForGlycolConc: "); - - // SUBROUTINE LOCAL VARIABLE DECLARATIONS: - size_t HiIndex; // index on the high side of the concentration - Real64 InterpFrac; // intermediate value for interpolations - size_t LoopC; // loop counter for concentration - size_t LoopT; // loop counter for temperature - - // First, find where the actual concentration falls between the concentration data. - // Then, interpolate if necessary. - if (Concentration < RawConcData[0]) { // Concentration too low - ShowWarningError(state, - format("{}Glycol concentration out of range for data (too low), concentration = {:.3R}", RoutineName, Concentration)); - ShowContinueError(state, "Check your data or the definition of your glycols in the GlycolConcentrations input"); - ShowContinueError(state, "Property data set to data for lowest concentration entered"); - InterpData = RawPropData[0][0]; - } else if (Concentration > RawConcData[NumOfConcs - 1]) { // Concentration too high - ShowWarningError(state, - format("{}Glycol concentration out of range for data (too high), concentration = {:.3R}", RoutineName, Concentration)); - ShowContinueError(state, "Check your data or the definition of your glycols in the GlycolConcentrations input"); - ShowContinueError(state, "Property data set to data for highest concentration entered"); - InterpData = RawPropData[NumOfConcs - 1][0]; - } else { // Concentration somewhere between lowest and highest point--interpolate - HiIndex = NumOfConcs - 1; // Default to highest concentration - 1, since std::arrays start at 0 - for (LoopC = 1; LoopC < NumOfConcs - 1; ++LoopC) { - if (Concentration <= RawConcData[LoopC]) { - HiIndex = LoopC; - break; // LoopC DO loop - } - } - if (std::abs(RawConcData[HiIndex] - RawConcData[HiIndex - 1]) >= ConcToler) { - InterpFrac = (RawConcData[HiIndex] - Concentration) / (RawConcData[HiIndex] - RawConcData[HiIndex - 1]); - for (LoopT = 0; LoopT < NumOfTemps; ++LoopT) { - if ((RawPropData[HiIndex][LoopT] < ConcToler) || (RawPropData[HiIndex - 1][LoopT] < ConcToler)) { - // One of the two values is zero--so we cannot interpolate for this point (assign to zero) - InterpData(LoopT + 1) = 0.0; - } else { - InterpData(LoopT + 1) = - RawPropData[HiIndex][LoopT] - (InterpFrac * (RawPropData[HiIndex][LoopT] - RawPropData[HiIndex - 1][LoopT])); - } - } - } else { // user has input data for concentrations that are too close or repeated, this must be fixed - ShowFatalError(state, format("{}concentration values too close or data repeated, check your fluid property input data", RoutineName)); - } - } - } - - //***************************************************************************** - void InterpValuesForGlycolConc(EnergyPlusData &state, int const NumOfConcs, // number of concentrations (dimension of raw data) int const NumOfTemps, // number of temperatures (dimension of raw data) @@ -2662,7 +1770,7 @@ namespace FluidProperties { // SUBROUTINE PARAMETER DEFINITIONS: constexpr Real64 ConcToler(0.0001); // Some reasonable value for comparisons - static constexpr std::string_view RoutineName("InterpValuesForGlycolConc: "); + static constexpr std::string_view routineName = "InterpValuesForGlycolConc"; // SUBROUTINE LOCAL VARIABLE DECLARATIONS: int HiIndex; // index on the high side of the concentration @@ -2674,13 +1782,13 @@ namespace FluidProperties { // Then, interpolate if necessary. if (Concentration < RawConcData(1)) { // Concentration too low ShowWarningError(state, - format("{}Glycol concentration out of range for data (too low), concentration = {:.3R}", RoutineName, Concentration)); + format("{}: Glycol concentration out of range for data (too low), concentration = {:.3R}", routineName, Concentration)); ShowContinueError(state, "Check your data or the definition of your glycols in the GlycolConcentrations input"); ShowContinueError(state, "Property data set to data for lowest concentration entered"); InterpData = RawPropData(1, _); } else if (Concentration > RawConcData(NumOfConcs)) { // Concentration too high ShowWarningError(state, - format("{}Glycol concentration out of range for data (too high), concentration = {:.3R}", RoutineName, Concentration)); + format("{}: Glycol concentration out of range for data (too high), concentration = {:.3R}", routineName, Concentration)); ShowContinueError(state, "Check your data or the definition of your glycols in the GlycolConcentrations input"); ShowContinueError(state, "Property data set to data for highest concentration entered"); InterpData = RawPropData(NumOfConcs, _); @@ -2708,7 +1816,7 @@ namespace FluidProperties { } } } else { // user has input data for concentrations that are too close or repeated, this must be fixed - ShowFatalError(state, format("{}concentration values too close or data repeated, check your fluid property input data", RoutineName)); + ShowFatalError(state, format("{}: concentration values too close or data repeated, check your fluid property input data", routineName)); } } } @@ -2729,89 +1837,88 @@ namespace FluidProperties { auto &df = state.dataFluidProps; - for (int GlycolNum = 1; GlycolNum <= df->NumOfGlycols; ++GlycolNum) { - auto &glycol = df->GlycolData(GlycolNum); - if (glycol.CpDataPresent) { + for (auto *glycol : df->glycols) { + if (glycol->CpDataPresent) { // check for lowest non-zero value by referencing temp data - for (int IndexNum = 1; IndexNum <= glycol.NumCpTempPts; ++IndexNum) { - if (glycol.CpValues(IndexNum) <= 0.0) continue; - glycol.CpLowTempIndex = IndexNum; - glycol.CpLowTempValue = glycol.CpTemps(IndexNum); + for (int IndexNum = 1; IndexNum <= glycol->NumCpTempPoints; ++IndexNum) { + if (glycol->CpValues(IndexNum) <= 0.0) continue; + glycol->CpLowTempIndex = IndexNum; + glycol->CpLowTempValue = glycol->CpTemps(IndexNum); break; } // check for highest non-zero value by referencing temp data - for (int IndexNum = glycol.NumCpTempPts; IndexNum >= 1; --IndexNum) { - if (glycol.CpValues(IndexNum) <= 0.0) continue; - glycol.CpHighTempIndex = IndexNum; - glycol.CpHighTempValue = glycol.CpTemps(IndexNum); + for (int IndexNum = glycol->NumCpTempPoints; IndexNum >= 1; --IndexNum) { + if (glycol->CpValues(IndexNum) <= 0.0) continue; + glycol->CpHighTempIndex = IndexNum; + glycol->CpHighTempValue = glycol->CpTemps(IndexNum); break; } } - if (glycol.RhoDataPresent) { + if (glycol->RhoDataPresent) { // check for lowest non-zero value by referencing temp data - for (int IndexNum = 1; IndexNum <= glycol.NumRhoTempPts; ++IndexNum) { - if (glycol.RhoValues(IndexNum) <= 0.0) continue; - glycol.RhoLowTempIndex = IndexNum; - glycol.RhoLowTempValue = glycol.RhoTemps(IndexNum); + for (int IndexNum = 1; IndexNum <= glycol->NumRhoTempPoints; ++IndexNum) { + if (glycol->RhoValues(IndexNum) <= 0.0) continue; + glycol->RhoLowTempIndex = IndexNum; + glycol->RhoLowTempValue = glycol->RhoTemps(IndexNum); break; } // check for highest non-zero value by referencing temp data - for (int IndexNum = glycol.NumRhoTempPts; IndexNum >= 1; --IndexNum) { - if (glycol.RhoValues(IndexNum) <= 0.0) continue; - glycol.RhoHighTempIndex = IndexNum; - glycol.RhoHighTempValue = glycol.RhoTemps(IndexNum); + for (int IndexNum = glycol->NumRhoTempPoints; IndexNum >= 1; --IndexNum) { + if (glycol->RhoValues(IndexNum) <= 0.0) continue; + glycol->RhoHighTempIndex = IndexNum; + glycol->RhoHighTempValue = glycol->RhoTemps(IndexNum); break; } } - if (glycol.CondDataPresent) { + if (glycol->CondDataPresent) { // check for lowest non-zero value by referencing temp data - for (int IndexNum = 1; IndexNum <= glycol.NumCondTempPts; ++IndexNum) { - if (glycol.CondValues(IndexNum) <= 0.0) continue; - glycol.CondLowTempIndex = IndexNum; - glycol.CondLowTempValue = glycol.CondTemps(IndexNum); + for (int IndexNum = 1; IndexNum <= glycol->NumCondTempPoints; ++IndexNum) { + if (glycol->CondValues(IndexNum) <= 0.0) continue; + glycol->CondLowTempIndex = IndexNum; + glycol->CondLowTempValue = glycol->CondTemps(IndexNum); break; } // check for highest non-zero value by referencing temp data - for (int IndexNum = glycol.NumCondTempPts; IndexNum >= 1; --IndexNum) { - if (glycol.CondValues(IndexNum) <= 0.0) continue; - glycol.CondHighTempIndex = IndexNum; - glycol.CondHighTempValue = glycol.CondTemps(IndexNum); + for (int IndexNum = glycol->NumCondTempPoints; IndexNum >= 1; --IndexNum) { + if (glycol->CondValues(IndexNum) <= 0.0) continue; + glycol->CondHighTempIndex = IndexNum; + glycol->CondHighTempValue = glycol->CondTemps(IndexNum); break; } } - if (glycol.ViscDataPresent) { + if (glycol->ViscDataPresent) { // check for lowest non-zero value by referencing temp data - for (int IndexNum = 1; IndexNum <= glycol.NumViscTempPts; ++IndexNum) { - if (glycol.ViscValues(IndexNum) <= 0.0) continue; - glycol.ViscLowTempIndex = IndexNum; - glycol.ViscLowTempValue = glycol.ViscTemps(IndexNum); + for (int IndexNum = 1; IndexNum <= glycol->NumViscTempPoints; ++IndexNum) { + if (glycol->ViscValues(IndexNum) <= 0.0) continue; + glycol->ViscLowTempIndex = IndexNum; + glycol->ViscLowTempValue = glycol->ViscTemps(IndexNum); break; } // check for highest non-zero value by referencing temp data - for (int IndexNum = glycol.NumViscTempPts; IndexNum >= 1; --IndexNum) { - if (glycol.ViscValues(IndexNum) <= 0.0) continue; - glycol.ViscHighTempIndex = IndexNum; - glycol.ViscHighTempValue = glycol.ViscTemps(IndexNum); + for (int IndexNum = glycol->NumViscTempPoints; IndexNum >= 1; --IndexNum) { + if (glycol->ViscValues(IndexNum) <= 0.0) continue; + glycol->ViscHighTempIndex = IndexNum; + glycol->ViscHighTempValue = glycol->ViscTemps(IndexNum); break; } } bool Failure = false; // Check to see that all are set to non-zero - if (glycol.CpDataPresent) { - Failure = glycol.CpLowTempIndex == 0 || glycol.CpHighTempIndex == 0; + if (glycol->CpDataPresent) { + Failure = glycol->CpLowTempIndex == 0 || glycol->CpHighTempIndex == 0; } - if (glycol.RhoDataPresent) { - Failure = glycol.RhoLowTempIndex == 0 || glycol.RhoHighTempIndex == 0; + if (glycol->RhoDataPresent) { + Failure = glycol->RhoLowTempIndex == 0 || glycol->RhoHighTempIndex == 0; } - if (glycol.CondDataPresent) { - Failure = glycol.CondLowTempIndex == 0 || glycol.CondHighTempIndex == 0; + if (glycol->CondDataPresent) { + Failure = glycol->CondLowTempIndex == 0 || glycol->CondHighTempIndex == 0; } - if (glycol.ViscDataPresent) { - Failure = glycol.ViscLowTempIndex == 0 || glycol.ViscHighTempIndex == 0; + if (glycol->ViscDataPresent) { + Failure = glycol->ViscLowTempIndex == 0 || glycol->ViscHighTempIndex == 0; } if (Failure) { ShowSevereError(state, - format("InitializeGlycolTempLimits: Required values for Glycol={} are all zeroes for some data types.", glycol.Name)); + format("InitializeGlycolTempLimits: Required values for Glycol={} are all zeroes for some data types.", glycol->Name)); ErrorsFound = true; } } @@ -2833,116 +1940,115 @@ namespace FluidProperties { // be set up for symmetry and not be limited to just valid values. auto &df = state.dataFluidProps; - for (int RefrigNum = 1; RefrigNum <= df->NumOfRefrigerants; ++RefrigNum) { - auto &refrig = df->RefrigData(RefrigNum); - for (int IndexNum = 1; IndexNum <= refrig.NumPsPoints; ++IndexNum) { - if (refrig.PsValues(IndexNum) <= 0.0) continue; - refrig.PsLowPresIndex = IndexNum; - refrig.PsLowPresValue = refrig.PsValues(IndexNum); - refrig.PsLowTempValue = refrig.PsTemps(IndexNum); - refrig.PsLowTempIndex = IndexNum; + for (auto *refrig : df->refrigs) { + for (int IndexNum = 1; IndexNum <= refrig->NumPsPoints; ++IndexNum) { + if (refrig->PsValues(IndexNum) <= 0.0) continue; + refrig->PsLowPresIndex = IndexNum; + refrig->PsLowPresValue = refrig->PsValues(IndexNum); + refrig->PsLowTempValue = refrig->PsTemps(IndexNum); + refrig->PsLowTempIndex = IndexNum; break; } - for (int IndexNum = refrig.NumPsPoints; IndexNum >= 1; --IndexNum) { - if (refrig.PsValues(IndexNum) <= 0.0) continue; - refrig.PsHighPresIndex = IndexNum; - refrig.PsHighPresValue = refrig.PsValues(IndexNum); - refrig.PsHighTempValue = refrig.PsTemps(IndexNum); - refrig.PsHighTempIndex = IndexNum; + for (int IndexNum = refrig->NumPsPoints; IndexNum >= 1; --IndexNum) { + if (refrig->PsValues(IndexNum) <= 0.0) continue; + refrig->PsHighPresIndex = IndexNum; + refrig->PsHighPresValue = refrig->PsValues(IndexNum); + refrig->PsHighTempValue = refrig->PsTemps(IndexNum); + refrig->PsHighTempIndex = IndexNum; break; } - for (int IndexNum = 1; IndexNum <= refrig.NumHPoints; ++IndexNum) { - if (refrig.HfValues(IndexNum) <= 0.0) continue; - refrig.HfLowTempValue = refrig.HfValues(IndexNum); - refrig.HfLowTempIndex = IndexNum; + for (int IndexNum = 1; IndexNum <= refrig->NumHPoints; ++IndexNum) { + if (refrig->HfValues(IndexNum) <= 0.0) continue; + refrig->HfLowTempValue = refrig->HfValues(IndexNum); + refrig->HfLowTempIndex = IndexNum; break; } - for (int IndexNum = refrig.NumHPoints; IndexNum >= 1; --IndexNum) { - if (refrig.HfValues(IndexNum) <= 0.0) continue; - refrig.HfHighTempValue = refrig.HfValues(IndexNum); - refrig.HfHighTempIndex = IndexNum; + for (int IndexNum = refrig->NumHPoints; IndexNum >= 1; --IndexNum) { + if (refrig->HfValues(IndexNum) <= 0.0) continue; + refrig->HfHighTempValue = refrig->HfValues(IndexNum); + refrig->HfHighTempIndex = IndexNum; break; } - for (int IndexNum = 1; IndexNum <= refrig.NumHPoints; ++IndexNum) { - if (refrig.HfgValues(IndexNum) <= 0.0) continue; - refrig.HfgLowTempValue = refrig.HfgValues(IndexNum); - refrig.HfgLowTempIndex = IndexNum; + for (int IndexNum = 1; IndexNum <= refrig->NumHPoints; ++IndexNum) { + if (refrig->HfgValues(IndexNum) <= 0.0) continue; + refrig->HfgLowTempValue = refrig->HfgValues(IndexNum); + refrig->HfgLowTempIndex = IndexNum; break; } - for (int IndexNum = refrig.NumHPoints; IndexNum >= 1; --IndexNum) { - if (refrig.HfgValues(IndexNum) <= 0.0) continue; - refrig.HfgHighTempValue = refrig.HfgValues(IndexNum); - refrig.HfgHighTempIndex = IndexNum; + for (int IndexNum = refrig->NumHPoints; IndexNum >= 1; --IndexNum) { + if (refrig->HfgValues(IndexNum) <= 0.0) continue; + refrig->HfgHighTempValue = refrig->HfgValues(IndexNum); + refrig->HfgHighTempIndex = IndexNum; break; } - for (int IndexNum = 1; IndexNum <= refrig.NumCpPoints; ++IndexNum) { - if (refrig.CpfValues(IndexNum) <= 0.0) continue; - refrig.CpfLowTempValue = refrig.CpfValues(IndexNum); - refrig.CpfLowTempIndex = IndexNum; + for (int IndexNum = 1; IndexNum <= refrig->NumCpPoints; ++IndexNum) { + if (refrig->CpfValues(IndexNum) <= 0.0) continue; + refrig->CpfLowTempValue = refrig->CpfValues(IndexNum); + refrig->CpfLowTempIndex = IndexNum; break; } - for (int IndexNum = refrig.NumCpPoints; IndexNum >= 1; --IndexNum) { - if (refrig.CpfValues(IndexNum) <= 0.0) continue; - refrig.CpfHighTempValue = refrig.CpfValues(IndexNum); - refrig.CpfHighTempIndex = IndexNum; + for (int IndexNum = refrig->NumCpPoints; IndexNum >= 1; --IndexNum) { + if (refrig->CpfValues(IndexNum) <= 0.0) continue; + refrig->CpfHighTempValue = refrig->CpfValues(IndexNum); + refrig->CpfHighTempIndex = IndexNum; break; } - for (int IndexNum = 1; IndexNum <= refrig.NumCpPoints; ++IndexNum) { - if (refrig.CpfgValues(IndexNum) <= 0.0) continue; - refrig.CpfgLowTempValue = refrig.CpfgValues(IndexNum); - refrig.CpfgLowTempIndex = IndexNum; + for (int IndexNum = 1; IndexNum <= refrig->NumCpPoints; ++IndexNum) { + if (refrig->CpfgValues(IndexNum) <= 0.0) continue; + refrig->CpfgLowTempValue = refrig->CpfgValues(IndexNum); + refrig->CpfgLowTempIndex = IndexNum; break; } - for (int IndexNum = refrig.NumCpPoints; IndexNum >= 1; --IndexNum) { - if (refrig.CpfgValues(IndexNum) <= 0.0) continue; - refrig.CpfgHighTempValue = refrig.CpfgValues(IndexNum); - refrig.CpfgHighTempIndex = IndexNum; + for (int IndexNum = refrig->NumCpPoints; IndexNum >= 1; --IndexNum) { + if (refrig->CpfgValues(IndexNum) <= 0.0) continue; + refrig->CpfgHighTempValue = refrig->CpfgValues(IndexNum); + refrig->CpfgHighTempIndex = IndexNum; break; } - for (int IndexNum = 1; IndexNum <= refrig.NumRhoPoints; ++IndexNum) { - if (refrig.RhofValues(IndexNum) <= 0.0) continue; - refrig.RhofLowTempValue = refrig.RhofValues(IndexNum); - refrig.RhofLowTempIndex = IndexNum; + for (int IndexNum = 1; IndexNum <= refrig->NumRhoPoints; ++IndexNum) { + if (refrig->RhofValues(IndexNum) <= 0.0) continue; + refrig->RhofLowTempValue = refrig->RhofValues(IndexNum); + refrig->RhofLowTempIndex = IndexNum; break; } - for (int IndexNum = refrig.NumRhoPoints; IndexNum >= 1; --IndexNum) { - if (refrig.RhofValues(IndexNum) <= 0.0) continue; - refrig.RhofHighTempValue = refrig.RhofValues(IndexNum); - refrig.RhofHighTempIndex = IndexNum; + for (int IndexNum = refrig->NumRhoPoints; IndexNum >= 1; --IndexNum) { + if (refrig->RhofValues(IndexNum) <= 0.0) continue; + refrig->RhofHighTempValue = refrig->RhofValues(IndexNum); + refrig->RhofHighTempIndex = IndexNum; break; } - for (int IndexNum = 1; IndexNum <= refrig.NumRhoPoints; ++IndexNum) { - if (refrig.RhofgValues(IndexNum) <= 0.0) continue; - refrig.RhofgLowTempValue = refrig.RhofgValues(IndexNum); - refrig.RhofgLowTempIndex = IndexNum; + for (int IndexNum = 1; IndexNum <= refrig->NumRhoPoints; ++IndexNum) { + if (refrig->RhofgValues(IndexNum) <= 0.0) continue; + refrig->RhofgLowTempValue = refrig->RhofgValues(IndexNum); + refrig->RhofgLowTempIndex = IndexNum; break; } - for (int IndexNum = refrig.NumRhoPoints; IndexNum >= 1; --IndexNum) { - if (refrig.RhofgValues(IndexNum) <= 0.0) continue; - refrig.RhofgHighTempValue = refrig.RhofgValues(IndexNum); - refrig.RhofgHighTempIndex = IndexNum; + for (int IndexNum = refrig->NumRhoPoints; IndexNum >= 1; --IndexNum) { + if (refrig->RhofgValues(IndexNum) <= 0.0) continue; + refrig->RhofgHighTempValue = refrig->RhofgValues(IndexNum); + refrig->RhofgHighTempIndex = IndexNum; break; } bool Failure = false; // Check to see that all are set to non-zero - if (refrig.NumPsPoints > 0) { - Failure = refrig.PsLowPresIndex == 0 || refrig.PsLowTempIndex == 0 || refrig.PsHighPresIndex == 0 || refrig.PsHighTempIndex == 0; + if (refrig->NumPsPoints > 0) { + Failure = refrig->PsLowPresIndex == 0 || refrig->PsLowTempIndex == 0 || refrig->PsHighPresIndex == 0 || refrig->PsHighTempIndex == 0; } - if (refrig.NumHPoints > 0) { - Failure = refrig.HfLowTempIndex == 0 || refrig.HfgLowTempIndex == 0 || refrig.HfHighTempIndex == 0 || refrig.HfgHighTempIndex == 0; + if (refrig->NumHPoints > 0) { + Failure = refrig->HfLowTempIndex == 0 || refrig->HfgLowTempIndex == 0 || refrig->HfHighTempIndex == 0 || refrig->HfgHighTempIndex == 0; } - if (refrig.NumCpPoints > 0) { + if (refrig->NumCpPoints > 0) { Failure = - refrig.CpfLowTempIndex == 0 || refrig.CpfgLowTempIndex == 0 || refrig.CpfHighTempIndex == 0 || refrig.CpfgHighTempIndex == 0; + refrig->CpfLowTempIndex == 0 || refrig->CpfgLowTempIndex == 0 || refrig->CpfHighTempIndex == 0 || refrig->CpfgHighTempIndex == 0; } - if (refrig.NumRhoPoints > 0) { + if (refrig->NumRhoPoints > 0) { Failure = - refrig.RhofLowTempIndex == 0 || refrig.RhofgLowTempIndex == 0 || refrig.RhofHighTempIndex == 0 || refrig.RhofgHighTempIndex == 0; + refrig->RhofLowTempIndex == 0 || refrig->RhofgLowTempIndex == 0 || refrig->RhofHighTempIndex == 0 || refrig->RhofgHighTempIndex == 0; } if (Failure) { ShowSevereError( state, - format("InitializeRefrigerantLimits: Required values for Refrigerant={} are all zeroes for some data types.", refrig.Name)); + format("InitializeRefrigerantLimits: Required values for Refrigerant={} are all zeroes for some data types.", refrig->Name)); ErrorsFound = true; } } @@ -2967,7 +2073,7 @@ namespace FluidProperties { // SUBROUTINE PARAMETER DEFINITIONS: constexpr Real64 incr(10.0); - static constexpr std::string_view RoutineName("ReportAndTestGlycols"); + static constexpr std::string_view routineName = "ReportAndTestGlycols"; // SUBROUTINE LOCAL VARIABLE DECLARATIONS: Real64 Temperature; // Temperature to drive values @@ -2975,216 +2081,215 @@ namespace FluidProperties { auto &df = state.dataFluidProps; - for (int GlycolNum = 1; GlycolNum <= df->NumOfGlycols; ++GlycolNum) { - auto &glycol = df->GlycolData(GlycolNum); + for (auto *glycol : df->glycols) { int GlycolIndex = 0; // used in routine calls -- value is returned when first 0 // Lay out the basic values: - if (!glycol.GlycolName.empty()) { - print(state.files.debug, "Glycol={}, Mixture fluid={}\n", glycol.Name, glycol.GlycolName); + if (!glycol->GlycolName.empty()) { + print(state.files.debug, "Glycol={}, Mixture fluid={}\n", glycol->Name, glycol->GlycolName); } else { - print(state.files.debug, "Glycol={}\n", glycol.Name); + print(state.files.debug, "Glycol={}\n", glycol->Name); } - print(state.files.debug, "Concentration:,{:.2R}\n", glycol.Concentration); - if (glycol.CpDataPresent) { + print(state.files.debug, "Concentration:,{:.2R}\n", glycol->Concentration); + if (glycol->CpDataPresent) { print(state.files.debug, "Specific Heat Data points:,Low Temperature=,{:.2R},Index=,{},High Temperature=,{:.2R},Index=,{}\n", - glycol.CpLowTempValue, - glycol.CpLowTempIndex, - glycol.CpHighTempValue, - glycol.CpHighTempIndex); + glycol->CpLowTempValue, + glycol->CpLowTempIndex, + glycol->CpHighTempValue, + glycol->CpHighTempIndex); print(state.files.debug, "{}", "Temperatures:"); - for (int Loop = 1; Loop <= glycol.NumCpTempPts - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", glycol.CpTemps(Loop)); + for (int Loop = 1; Loop <= glycol->NumCpTempPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", glycol->CpTemps(Loop)); } - print(state.files.debug, ",{}\n", glycol.CpTemps(glycol.NumCpTempPts)); + print(state.files.debug, ",{}\n", glycol->CpTemps(glycol->NumCpTempPoints)); print(state.files.debug, "{}", "Specific Heat:"); - for (int Loop = 1; Loop <= glycol.NumCpTempPts - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", glycol.CpValues(Loop)); + for (int Loop = 1; Loop <= glycol->NumCpTempPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", glycol->CpValues(Loop)); } - print(state.files.debug, ",{}\n", glycol.CpValues(glycol.NumCpTempPts)); + print(state.files.debug, ",{}\n", glycol->CpValues(glycol->NumCpTempPoints)); } - if (glycol.RhoDataPresent) { + if (glycol->RhoDataPresent) { print(state.files.debug, "Density Data points:,Low Temperature=,{:.2R},Index=,{},High Temperature=,{:.2R},Index=,{}\n", - glycol.RhoLowTempValue, - glycol.RhoLowTempIndex, - glycol.RhoHighTempValue, - glycol.RhoHighTempIndex); + glycol->RhoLowTempValue, + glycol->RhoLowTempIndex, + glycol->RhoHighTempValue, + glycol->RhoHighTempIndex); print(state.files.debug, "{}", "Temperatures:"); - for (int Loop = 1; Loop <= glycol.NumRhoTempPts - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", glycol.RhoTemps(Loop)); + for (int Loop = 1; Loop <= glycol->NumRhoTempPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", glycol->RhoTemps(Loop)); } - print(state.files.debug, ",{}\n", glycol.RhoTemps(glycol.NumRhoTempPts)); + print(state.files.debug, ",{}\n", glycol->RhoTemps(glycol->NumRhoTempPoints)); print(state.files.debug, "{}", "Density:"); - for (int Loop = 1; Loop <= glycol.NumRhoTempPts - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", glycol.RhoValues(Loop)); + for (int Loop = 1; Loop <= glycol->NumRhoTempPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", glycol->RhoValues(Loop)); } - print(state.files.debug, ",{}\n", glycol.RhoTemps(glycol.NumRhoTempPts)); + print(state.files.debug, ",{}\n", glycol->RhoTemps(glycol->NumRhoTempPoints)); } - if (glycol.CondDataPresent) { + if (glycol->CondDataPresent) { print(state.files.debug, "Conductivity Data points:,Low Temperature=,{:.2R},Index=,{},High Temperature=,{:.2R},Index=,{}\n", - glycol.CondLowTempValue, - glycol.CondLowTempIndex, - glycol.CondHighTempValue, - glycol.CondHighTempIndex); + glycol->CondLowTempValue, + glycol->CondLowTempIndex, + glycol->CondHighTempValue, + glycol->CondHighTempIndex); print(state.files.debug, "{}", "Temperatures:"); - for (int Loop = 1; Loop <= glycol.NumCondTempPts - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", glycol.CondTemps(Loop)); + for (int Loop = 1; Loop <= glycol->NumCondTempPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", glycol->CondTemps(Loop)); } - print(state.files.debug, ",{}\n", glycol.CondTemps(glycol.NumCondTempPts)); + print(state.files.debug, ",{}\n", glycol->CondTemps(glycol->NumCondTempPoints)); print(state.files.debug, "{}", "Conductivity:"); - for (int Loop = 1; Loop <= glycol.NumCondTempPts - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", glycol.CondValues(Loop)); + for (int Loop = 1; Loop <= glycol->NumCondTempPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", glycol->CondValues(Loop)); } - print(state.files.debug, ",{}\n", glycol.CondValues(glycol.NumCondTempPts)); + print(state.files.debug, ",{}\n", glycol->CondValues(glycol->NumCondTempPoints)); } - if (glycol.ViscDataPresent) { + if (glycol->ViscDataPresent) { print(state.files.debug, "Viscosity Data points:,Low Temperature=,{:.2R},Index=,{},High Temperature=,{:.2R},Index=,{}\n", - glycol.ViscLowTempValue, - glycol.ViscLowTempIndex, - glycol.ViscHighTempValue, - glycol.ViscHighTempIndex); + glycol->ViscLowTempValue, + glycol->ViscLowTempIndex, + glycol->ViscHighTempValue, + glycol->ViscHighTempIndex); print(state.files.debug, "{}", "Temperatures:"); - for (int Loop = 1; Loop <= glycol.NumViscTempPts - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", glycol.ViscTemps(Loop)); + for (int Loop = 1; Loop <= glycol->NumViscTempPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", glycol->ViscTemps(Loop)); } - print(state.files.debug, ",{}\n", glycol.ViscTemps(glycol.NumViscTempPts)); + print(state.files.debug, ",{}\n", glycol->ViscTemps(glycol->NumViscTempPoints)); print(state.files.debug, "{}", "Viscosity:"); - for (int Loop = 1; Loop <= glycol.NumViscTempPts - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", glycol.ViscValues(Loop)); + for (int Loop = 1; Loop <= glycol->NumViscTempPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", glycol->ViscValues(Loop)); } - print(state.files.debug, ",{}\n", glycol.ViscValues(glycol.NumViscTempPts)); + print(state.files.debug, ",{}\n", glycol->ViscValues(glycol->NumViscTempPoints)); } // ============================================ // Glycol Results, using out of bounds to out of bounds values in calling // ============================================ // ========= Specific Heat from Temperatures - print(state.files.debug, "Glycol={} **** Results ****\n", glycol.Name); - if (glycol.CpDataPresent) { + print(state.files.debug, "Glycol={} **** Results ****\n", glycol->Name); + if (glycol->CpDataPresent) { print(state.files.debug, "Specific Heat Results at Temperatures:"); - print(state.files.debug, ",{:.2R}", glycol.CpTemps(1) - incr); + print(state.files.debug, ",{:.2R}", glycol->CpTemps(1) - incr); - for (int Loop = 1; Loop <= glycol.NumCpTempPts - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", glycol.CpTemps(Loop)); - Temperature = glycol.CpTemps(Loop) + (glycol.CpTemps(Loop + 1) - glycol.CpTemps(Loop)) / 2.0; + for (int Loop = 1; Loop <= glycol->NumCpTempPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", glycol->CpTemps(Loop)); + Temperature = glycol->CpTemps(Loop) + (glycol->CpTemps(Loop + 1) - glycol->CpTemps(Loop)) / 2.0; print(state.files.debug, ",{:.2R}", Temperature); } - print(state.files.debug, ",{:.2R}", glycol.CpTemps(glycol.NumCpTempPts)); - print(state.files.debug, ",{:.2R}\n", glycol.CpTemps(glycol.NumCpTempPts) + incr); + print(state.files.debug, ",{:.2R}", glycol->CpTemps(glycol->NumCpTempPoints)); + print(state.files.debug, ",{:.2R}\n", glycol->CpTemps(glycol->NumCpTempPoints) + incr); print(state.files.debug, "Specific Heat:"); - Temperature = glycol.CpTemps(1) - incr; - ReturnValue = GetSpecificHeatGlycol(state, glycol.Name, Temperature, GlycolIndex, RoutineName); + Temperature = glycol->CpTemps(1) - incr; + ReturnValue = GetSpecificHeatGlycol(state, glycol->Name, Temperature, GlycolIndex, routineName); print(state.files.debug, ",{:.2R}", ReturnValue); - for (int Loop = 1; Loop <= glycol.NumCpTempPts - 1; ++Loop) { - Temperature = glycol.CpTemps(Loop); - ReturnValue = glycol.getSpecificHeat(state, Temperature, RoutineName); + for (int Loop = 1; Loop <= glycol->NumCpTempPoints - 1; ++Loop) { + Temperature = glycol->CpTemps(Loop); + ReturnValue = glycol->getSpecificHeat(state, Temperature, routineName); print(state.files.debug, ",{:.2R}", ReturnValue); - Temperature = glycol.CpTemps(Loop) + (glycol.CpTemps(Loop + 1) - glycol.CpTemps(Loop)) / 2.0; - ReturnValue = glycol.getSpecificHeat(state, Temperature, RoutineName); + Temperature = glycol->CpTemps(Loop) + (glycol->CpTemps(Loop + 1) - glycol->CpTemps(Loop)) / 2.0; + ReturnValue = glycol->getSpecificHeat(state, Temperature, routineName); print(state.files.debug, ",{:.2R}", ReturnValue); } - Temperature = glycol.CpTemps(glycol.NumCpTempPts); - ReturnValue = glycol.getSpecificHeat(state, Temperature, RoutineName); + Temperature = glycol->CpTemps(glycol->NumCpTempPoints); + ReturnValue = glycol->getSpecificHeat(state, Temperature, routineName); print(state.files.debug, ",{:.2R}", ReturnValue); - Temperature = glycol.CpTemps(glycol.NumCpTempPts) + incr; - ReturnValue = glycol.getSpecificHeat(state, Temperature, RoutineName); + Temperature = glycol->CpTemps(glycol->NumCpTempPoints) + incr; + ReturnValue = glycol->getSpecificHeat(state, Temperature, routineName); print(state.files.debug, ",{:.2R}\n", ReturnValue); } // ========= Density from Temperatures - if (glycol.RhoDataPresent) { + if (glycol->RhoDataPresent) { print(state.files.debug, "Density Results at Temperatures:"); - print(state.files.debug, ",{:.2R}", glycol.RhoTemps(1) - incr); - for (int Loop = 1; Loop <= glycol.NumRhoTempPts - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", glycol.RhoTemps(Loop)); - Temperature = glycol.RhoTemps(Loop) + (glycol.RhoTemps(Loop + 1) - glycol.RhoTemps(Loop)) / 2.0; + print(state.files.debug, ",{:.2R}", glycol->RhoTemps(1) - incr); + for (int Loop = 1; Loop <= glycol->NumRhoTempPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", glycol->RhoTemps(Loop)); + Temperature = glycol->RhoTemps(Loop) + (glycol->RhoTemps(Loop + 1) - glycol->RhoTemps(Loop)) / 2.0; print(state.files.debug, ",{:.2R}", Temperature); } - print(state.files.debug, ",{}", glycol.RhoTemps(glycol.NumRhoTempPts)); - print(state.files.debug, ",{:.2R}\n", glycol.RhoTemps(glycol.NumRhoTempPts) + incr); + print(state.files.debug, ",{}", glycol->RhoTemps(glycol->NumRhoTempPoints)); + print(state.files.debug, ",{:.2R}\n", glycol->RhoTemps(glycol->NumRhoTempPoints) + incr); print(state.files.debug, "Density:"); - Temperature = glycol.RhoTemps(1) - incr; - ReturnValue = GetDensityGlycol(state, glycol.Name, Temperature, GlycolIndex, RoutineName); + Temperature = glycol->RhoTemps(1) - incr; + ReturnValue = GetDensityGlycol(state, glycol->Name, Temperature, GlycolIndex, routineName); print(state.files.debug, ",{:.3R}", ReturnValue); - for (int Loop = 1; Loop <= glycol.NumRhoTempPts - 1; ++Loop) { - Temperature = glycol.RhoTemps(Loop); - ReturnValue = glycol.getDensity(state, Temperature, RoutineName); + for (int Loop = 1; Loop <= glycol->NumRhoTempPoints - 1; ++Loop) { + Temperature = glycol->RhoTemps(Loop); + ReturnValue = glycol->getDensity(state, Temperature, routineName); print(state.files.debug, ",{:.3R}", ReturnValue); - Temperature = glycol.RhoTemps(Loop) + (glycol.RhoTemps(Loop + 1) - glycol.RhoTemps(Loop)) / 2.0; - ReturnValue = glycol.getDensity(state, Temperature, RoutineName); + Temperature = glycol->RhoTemps(Loop) + (glycol->RhoTemps(Loop + 1) - glycol->RhoTemps(Loop)) / 2.0; + ReturnValue = glycol->getDensity(state, Temperature, routineName); print(state.files.debug, ",{:.3R}", ReturnValue); } - Temperature = glycol.RhoTemps(glycol.NumRhoTempPts); - ReturnValue = glycol.getDensity(state, Temperature, RoutineName); + Temperature = glycol->RhoTemps(glycol->NumRhoTempPoints); + ReturnValue = glycol->getDensity(state, Temperature, routineName); print(state.files.debug, ",{:.3R}", ReturnValue); - Temperature = glycol.RhoTemps(glycol.NumRhoTempPts) + incr; - ReturnValue = glycol.getDensity(state, Temperature, RoutineName); + Temperature = glycol->RhoTemps(glycol->NumRhoTempPoints) + incr; + ReturnValue = glycol->getDensity(state, Temperature, routineName); print(state.files.debug, ",{:.3R}\n", ReturnValue); } // ========= Conductivity from Temperatures - if (glycol.CondDataPresent) { + if (glycol->CondDataPresent) { print(state.files.debug, "Conductivity Results at Temperatures:"); - print(state.files.debug, ",{:.2R}", glycol.CondTemps(1) - incr); - for (int Loop = 1; Loop <= glycol.NumCondTempPts - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", glycol.CondTemps(Loop)); - Temperature = glycol.CondTemps(Loop) + (glycol.CondTemps(Loop + 1) - glycol.CondTemps(Loop)) / 2.0; + print(state.files.debug, ",{:.2R}", glycol->CondTemps(1) - incr); + for (int Loop = 1; Loop <= glycol->NumCondTempPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", glycol->CondTemps(Loop)); + Temperature = glycol->CondTemps(Loop) + (glycol->CondTemps(Loop + 1) - glycol->CondTemps(Loop)) / 2.0; print(state.files.debug, ",{:.2R}", Temperature); } - print(state.files.debug, ",{:.2R}", glycol.CondTemps(glycol.NumCondTempPts)); - print(state.files.debug, ",{:.2R}\n", glycol.CondTemps(glycol.NumCondTempPts) + incr); + print(state.files.debug, ",{:.2R}", glycol->CondTemps(glycol->NumCondTempPoints)); + print(state.files.debug, ",{:.2R}\n", glycol->CondTemps(glycol->NumCondTempPoints) + incr); print(state.files.debug, "Conductivity:"); - Temperature = glycol.CondTemps(1) - incr; - ReturnValue = glycol.getConductivity(state, Temperature, RoutineName); + Temperature = glycol->CondTemps(1) - incr; + ReturnValue = glycol->getConductivity(state, Temperature, routineName); print(state.files.debug, ",{:.3R}", ReturnValue); - for (int Loop = 1; Loop <= glycol.NumCondTempPts - 1; ++Loop) { - Temperature = glycol.CondTemps(Loop); - ReturnValue = glycol.getConductivity(state, Temperature, RoutineName); + for (int Loop = 1; Loop <= glycol->NumCondTempPoints - 1; ++Loop) { + Temperature = glycol->CondTemps(Loop); + ReturnValue = glycol->getConductivity(state, Temperature, routineName); print(state.files.debug, ",{:.3R}", ReturnValue); - Temperature = glycol.CondTemps(Loop) + (glycol.CondTemps(Loop + 1) - glycol.CondTemps(Loop)) / 2.0; - ReturnValue = glycol.getConductivity(state, Temperature, RoutineName); + Temperature = glycol->CondTemps(Loop) + (glycol->CondTemps(Loop + 1) - glycol->CondTemps(Loop)) / 2.0; + ReturnValue = glycol->getConductivity(state, Temperature, routineName); print(state.files.debug, ",{:.3R}", ReturnValue); } - Temperature = glycol.CondTemps(glycol.NumCondTempPts); - ReturnValue = glycol.getConductivity(state, Temperature, RoutineName); + Temperature = glycol->CondTemps(glycol->NumCondTempPoints); + ReturnValue = glycol->getConductivity(state, Temperature, routineName); print(state.files.debug, ",{:.3R}", ReturnValue); - Temperature = glycol.CondTemps(glycol.NumCondTempPts) + incr; - ReturnValue = glycol.getConductivity(state, Temperature, RoutineName); + Temperature = glycol->CondTemps(glycol->NumCondTempPoints) + incr; + ReturnValue = glycol->getConductivity(state, Temperature, routineName); print(state.files.debug, ",{:.3R}\n", ReturnValue); } // ========= Viscosity from Temperatures - if (glycol.ViscDataPresent) { + if (glycol->ViscDataPresent) { print(state.files.debug, "Viscosity Results at Temperatures:"); - print(state.files.debug, ",{:.2R}", glycol.ViscTemps(1) - incr); - for (int Loop = 1; Loop <= glycol.NumViscTempPts - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", glycol.ViscTemps(Loop)); - Temperature = glycol.ViscTemps(Loop) + (glycol.ViscTemps(Loop + 1) - glycol.ViscTemps(Loop)) / 2.0; + print(state.files.debug, ",{:.2R}", glycol->ViscTemps(1) - incr); + for (int Loop = 1; Loop <= glycol->NumViscTempPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", glycol->ViscTemps(Loop)); + Temperature = glycol->ViscTemps(Loop) + (glycol->ViscTemps(Loop + 1) - glycol->ViscTemps(Loop)) / 2.0; print(state.files.debug, ",{:.2R}", Temperature); } - print(state.files.debug, ",{:.2R}", glycol.ViscTemps(glycol.NumViscTempPts)); - print(state.files.debug, ",{:.2R}\n", glycol.ViscTemps(glycol.NumViscTempPts) + incr); + print(state.files.debug, ",{:.2R}", glycol->ViscTemps(glycol->NumViscTempPoints)); + print(state.files.debug, ",{:.2R}\n", glycol->ViscTemps(glycol->NumViscTempPoints) + incr); print(state.files.debug, "Viscosity:"); - Temperature = glycol.ViscTemps(1) - incr; - ReturnValue = glycol.getViscosity(state, Temperature, RoutineName); + Temperature = glycol->ViscTemps(1) - incr; + ReturnValue = glycol->getViscosity(state, Temperature, routineName); print(state.files.debug, ",{:.4R}", ReturnValue); - for (int Loop = 1; Loop <= glycol.NumViscTempPts - 1; ++Loop) { - Temperature = glycol.ViscTemps(Loop); - ReturnValue = glycol.getViscosity(state, Temperature, RoutineName); + for (int Loop = 1; Loop <= glycol->NumViscTempPoints - 1; ++Loop) { + Temperature = glycol->ViscTemps(Loop); + ReturnValue = glycol->getViscosity(state, Temperature, routineName); print(state.files.debug, ",{:.4R}", ReturnValue); - Temperature = glycol.ViscTemps(Loop) + (glycol.ViscTemps(Loop + 1) - glycol.ViscTemps(Loop)) / 2.0; - ReturnValue = glycol.getViscosity(state, Temperature, RoutineName); + Temperature = glycol->ViscTemps(Loop) + (glycol->ViscTemps(Loop + 1) - glycol->ViscTemps(Loop)) / 2.0; + ReturnValue = glycol->getViscosity(state, Temperature, routineName); print(state.files.debug, ",{:.4R}", ReturnValue); } - Temperature = glycol.ViscTemps(glycol.NumViscTempPts); - ReturnValue = glycol.getViscosity(state, Temperature, RoutineName); + Temperature = glycol->ViscTemps(glycol->NumViscTempPoints); + ReturnValue = glycol->getViscosity(state, Temperature, routineName); print(state.files.debug, ",{:.4R}", ReturnValue); - Temperature = glycol.ViscTemps(glycol.NumViscTempPts) + incr; - ReturnValue = glycol.getViscosity(state, Temperature, RoutineName); + Temperature = glycol->ViscTemps(glycol->NumViscTempPoints) + incr; + ReturnValue = glycol->getViscosity(state, Temperature, routineName); print(state.files.debug, ",{:.4R}\n", ReturnValue); } } @@ -3210,7 +2315,7 @@ namespace FluidProperties { // SUBROUTINE PARAMETER DEFINITIONS: constexpr Real64 incr(10.0); constexpr Real64 Quality(1.0); - static constexpr std::string_view RoutineName("ReportAndTestRefrigerants"); + static constexpr std::string_view routineName = "ReportAndTestRefrigerants"; // SUBROUTINE LOCAL VARIABLE DECLARATIONS: Real64 Temperature; // Temperature to drive values @@ -3218,179 +2323,178 @@ namespace FluidProperties { auto &df = state.dataFluidProps; - for (int RefrigNum = 1; RefrigNum <= df->NumOfRefrigerants; ++RefrigNum) { - auto &refrig = df->RefrigData(RefrigNum); + for (auto *refrig : df->refrigs) { // Lay out the basic values: - if (!refrig.Name.empty()) { - print(state.files.debug, "Refrigerant={}", refrig.Name); + if (!refrig->Name.empty()) { + print(state.files.debug, "Refrigerant={}", refrig->Name); } - if (refrig.NumPsPoints > 0) { + if (refrig->NumPsPoints > 0) { print(state.files.debug, "Saturation Pressures Data points:,Low Temperature=,{:.2R},Index=,{},High Temperature=,{:.2R},Index=,{}\n", - refrig.PsLowTempValue, - refrig.PsLowTempIndex, - refrig.PsHighTempValue, - refrig.PsHighTempIndex); + refrig->PsLowTempValue, + refrig->PsLowTempIndex, + refrig->PsHighTempValue, + refrig->PsHighTempIndex); print(state.files.debug, "Temperatures:"); - for (int Loop = 1; Loop <= refrig.NumPsPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", refrig.PsTemps(Loop)); + for (int Loop = 1; Loop <= refrig->NumPsPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", refrig->PsTemps(Loop)); } - print(state.files.debug, ",{:.2R}\n", refrig.PsTemps(refrig.NumPsPoints)); + print(state.files.debug, ",{:.2R}\n", refrig->PsTemps(refrig->NumPsPoints)); print(state.files.debug, "Saturation Pressure:"); - for (int Loop = 1; Loop <= refrig.NumPsPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", refrig.PsValues(Loop)); + for (int Loop = 1; Loop <= refrig->NumPsPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", refrig->PsValues(Loop)); } - print(state.files.debug, ",{:.2R}\n", refrig.PsValues(refrig.NumPsPoints)); + print(state.files.debug, ",{:.2R}\n", refrig->PsValues(refrig->NumPsPoints)); } - if (refrig.NumHPoints > 0) { + if (refrig->NumHPoints > 0) { print(state.files.debug, "Enthalpy Saturated Fluid Data points:,Low Temperature=,{:.2R},Index=,{},High Temperature=,{:.2R},Index=,{}\n", - refrig.HfLowTempValue, - refrig.HfLowTempIndex, - refrig.HfHighTempValue, - refrig.HfHighTempIndex); + refrig->HfLowTempValue, + refrig->HfLowTempIndex, + refrig->HfHighTempValue, + refrig->HfHighTempIndex); print(state.files.debug, "Temperatures:"); - for (int Loop = 1; Loop <= refrig.NumHPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", refrig.HTemps(Loop)); + for (int Loop = 1; Loop <= refrig->NumHPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", refrig->HTemps(Loop)); } - print(state.files.debug, ",{:.2R}\n", refrig.HTemps(refrig.NumHPoints)); + print(state.files.debug, ",{:.2R}\n", refrig->HTemps(refrig->NumHPoints)); print(state.files.debug, "Enthalpy Saturated Fluid:"); - for (int Loop = 1; Loop <= refrig.NumHPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", refrig.HfValues(Loop)); + for (int Loop = 1; Loop <= refrig->NumHPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", refrig->HfValues(Loop)); } - print(state.files.debug, ",{:.2R}\n", refrig.HfValues(refrig.NumHPoints)); + print(state.files.debug, ",{:.2R}\n", refrig->HfValues(refrig->NumHPoints)); print(state.files.debug, "Enthalpy Saturated Fluid/Gas Data points:,Low Temperature=,{:.2R},Index=,{},High Temperature=,{:.2R},Index=,{}\n", - refrig.HfgLowTempValue, - refrig.HfgLowTempIndex, - refrig.HfgHighTempValue, - refrig.HfgHighTempIndex); + refrig->HfgLowTempValue, + refrig->HfgLowTempIndex, + refrig->HfgHighTempValue, + refrig->HfgHighTempIndex); print(state.files.debug, "Temperatures:"); - for (int Loop = 1; Loop <= refrig.NumHPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", refrig.HTemps(Loop)); + for (int Loop = 1; Loop <= refrig->NumHPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", refrig->HTemps(Loop)); } - print(state.files.debug, ",{:.2R}\n", refrig.HTemps(refrig.NumHPoints)); + print(state.files.debug, ",{:.2R}\n", refrig->HTemps(refrig->NumHPoints)); print(state.files.debug, "Enthalpy Saturated Fluid/Gas:"); - for (int Loop = 1; Loop <= refrig.NumHPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", refrig.HfgValues(Loop)); + for (int Loop = 1; Loop <= refrig->NumHPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", refrig->HfgValues(Loop)); } - print(state.files.debug, ",{:.2R}\n", refrig.HfgValues(refrig.NumHPoints)); + print(state.files.debug, ",{:.2R}\n", refrig->HfgValues(refrig->NumHPoints)); } - if (refrig.NumCpPoints > 0) { + if (refrig->NumCpPoints > 0) { print(state.files.debug, "Specific Heat Saturated Fluid Data points:,Low Temperature=,{:.2R},Index=,{},High Temperature=,{:.2R},Index=,{}\n", - refrig.CpfLowTempValue, - refrig.CpfLowTempIndex, - refrig.CpfHighTempValue, - refrig.CpfHighTempIndex); + refrig->CpfLowTempValue, + refrig->CpfLowTempIndex, + refrig->CpfHighTempValue, + refrig->CpfHighTempIndex); print(state.files.debug, "Temperatures:"); - for (int Loop = 1; Loop <= refrig.NumCpPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", refrig.CpTemps(Loop)); + for (int Loop = 1; Loop <= refrig->NumCpPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", refrig->CpTemps(Loop)); } - print(state.files.debug, ",{:.2R}\n", refrig.CpTemps(refrig.NumCpPoints)); + print(state.files.debug, ",{:.2R}\n", refrig->CpTemps(refrig->NumCpPoints)); print(state.files.debug, "Specific Heat Saturated Fluid:"); - for (int Loop = 1; Loop <= refrig.NumCpPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}\n", refrig.CpfValues(Loop)); + for (int Loop = 1; Loop <= refrig->NumCpPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}\n", refrig->CpfValues(Loop)); } - print(state.files.debug, ",{:.2R}", refrig.CpfValues(refrig.NumCpPoints)); + print(state.files.debug, ",{:.2R}", refrig->CpfValues(refrig->NumCpPoints)); print(state.files.debug, "Specific Heat Saturated Fluid/Gas Data points:,Low Temperature=,{:.2R},Index=,{},High Temperature=,{:.2R},Index=,{}\n", - refrig.CpfgLowTempValue, - refrig.CpfgLowTempIndex, - refrig.CpfgHighTempValue, - refrig.CpfgHighTempIndex); + refrig->CpfgLowTempValue, + refrig->CpfgLowTempIndex, + refrig->CpfgHighTempValue, + refrig->CpfgHighTempIndex); print(state.files.debug, "Temperatures:"); - for (int Loop = 1; Loop <= refrig.NumCpPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", refrig.CpTemps(Loop)); + for (int Loop = 1; Loop <= refrig->NumCpPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", refrig->CpTemps(Loop)); } - print(state.files.debug, ",{:.2R}\n", refrig.CpTemps(refrig.NumCpPoints)); + print(state.files.debug, ",{:.2R}\n", refrig->CpTemps(refrig->NumCpPoints)); print(state.files.debug, "Specific Heat Saturated Fluid/Gas:"); - for (int Loop = 1; Loop <= refrig.NumCpPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", refrig.CpfgValues(Loop)); + for (int Loop = 1; Loop <= refrig->NumCpPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", refrig->CpfgValues(Loop)); } - print(state.files.debug, ",{:.2R}\n", refrig.CpfgValues(refrig.NumCpPoints)); + print(state.files.debug, ",{:.2R}\n", refrig->CpfgValues(refrig->NumCpPoints)); } - if (refrig.NumRhoPoints > 0) { + if (refrig->NumRhoPoints > 0) { print(state.files.debug, "Density Saturated Fluid Data points:,Low Temperature=,{:.2R},Index=,{},High Temperature=,{:.2R},Index=,{}\n", - refrig.RhofLowTempValue, - refrig.RhofLowTempIndex, - refrig.RhofHighTempValue, - refrig.RhofHighTempIndex); + refrig->RhofLowTempValue, + refrig->RhofLowTempIndex, + refrig->RhofHighTempValue, + refrig->RhofHighTempIndex); print(state.files.debug, "Temperatures:"); - for (int Loop = 1; Loop <= refrig.NumRhoPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", refrig.RhoTemps(Loop)); + for (int Loop = 1; Loop <= refrig->NumRhoPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", refrig->RhoTemps(Loop)); } - print(state.files.debug, ",{:.2R}", refrig.RhoTemps(refrig.NumRhoPoints)); + print(state.files.debug, ",{:.2R}", refrig->RhoTemps(refrig->NumRhoPoints)); print(state.files.debug, "Density Saturated Fluid:"); - for (int Loop = 1; Loop <= refrig.NumRhoPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", refrig.RhofValues(Loop)); + for (int Loop = 1; Loop <= refrig->NumRhoPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", refrig->RhofValues(Loop)); } - print(state.files.debug, ",{:.2R}", refrig.RhofValues(refrig.NumRhoPoints)); + print(state.files.debug, ",{:.2R}", refrig->RhofValues(refrig->NumRhoPoints)); print(state.files.debug, "Density Saturated Fluid/Gas Data points:,Low Temperature=,{:.2R},Index=,{},High Temperature=,{:.2R},Index=,{}\n", - refrig.RhofgLowTempValue, - refrig.RhofgLowTempIndex, - refrig.RhofgHighTempValue, - refrig.RhofgHighTempIndex); + refrig->RhofgLowTempValue, + refrig->RhofgLowTempIndex, + refrig->RhofgHighTempValue, + refrig->RhofgHighTempIndex); print(state.files.debug, "Temperatures:"); - for (int Loop = 1; Loop <= refrig.NumRhoPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", refrig.RhoTemps(Loop)); + for (int Loop = 1; Loop <= refrig->NumRhoPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", refrig->RhoTemps(Loop)); } - print(state.files.debug, ",{:.2R}\n", refrig.RhoTemps(refrig.NumRhoPoints)); + print(state.files.debug, ",{:.2R}\n", refrig->RhoTemps(refrig->NumRhoPoints)); print(state.files.debug, "Density Saturated Fluid/Gas:"); - for (int Loop = 1; Loop <= refrig.NumRhoPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", refrig.RhofgValues(Loop)); + for (int Loop = 1; Loop <= refrig->NumRhoPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", refrig->RhofgValues(Loop)); } - print(state.files.debug, ",{:.2R}\n", refrig.RhofgValues(refrig.NumRhoPoints)); + print(state.files.debug, ",{:.2R}\n", refrig->RhofgValues(refrig->NumRhoPoints)); } - if (refrig.NumSuperTempPts > 0 && refrig.NumSuperPressPts > 0) { + if (refrig->NumSupTempPoints > 0 && refrig->NumSupPressPoints > 0) { print(state.files.debug, "Superheated Gas Fluid Data points:,NumTemperaturePoints=,{},NumPressurePoints=,{}\n", - refrig.NumSuperTempPts, - refrig.NumSuperPressPts); + refrig->NumSupTempPoints, + refrig->NumSupPressPoints); print(state.files.debug, "Superheated Temperatures:"); - for (int Loop = 1; Loop <= refrig.NumSuperTempPts - 1; ++Loop) { - print(state.files.debug, ",{:.3R}", refrig.SHTemps(Loop)); + for (int Loop = 1; Loop <= refrig->NumSupTempPoints - 1; ++Loop) { + print(state.files.debug, ",{:.3R}", refrig->SupTemps(Loop)); } - print(state.files.debug, ",{:.3R}\n", refrig.SHTemps(refrig.NumSuperTempPts)); + print(state.files.debug, ",{:.3R}\n", refrig->SupTemps(refrig->NumSupTempPoints)); print(state.files.debug, "Superheated Pressures:"); - for (int Loop = 1; Loop <= refrig.NumSuperPressPts - 1; ++Loop) { - print(state.files.debug, ",{:.3R}", refrig.SHPress(Loop)); + for (int Loop = 1; Loop <= refrig->NumSupPressPoints - 1; ++Loop) { + print(state.files.debug, ",{:.3R}", refrig->SupPress(Loop)); } - print(state.files.debug, ",{:.3R}\n", refrig.SHPress(refrig.NumSuperPressPts)); - for (int Loop = 1; Loop <= refrig.NumSuperPressPts; ++Loop) { - print(state.files.debug, "Superheated Pressure:#{}={:.2R}\n", Loop, refrig.SHPress(Loop)); + print(state.files.debug, ",{:.3R}\n", refrig->SupPress(refrig->NumSupPressPoints)); + for (int Loop = 1; Loop <= refrig->NumSupPressPoints; ++Loop) { + print(state.files.debug, "Superheated Pressure:#{}={:.2R}\n", Loop, refrig->SupPress(Loop)); print(state.files.debug, "Enthalpy Superheated Gas:"); - for (int Loop1 = 1; Loop1 <= refrig.NumSuperTempPts - 1; ++Loop1) { - print(state.files.debug, ",{:.3R}", refrig.HshValues(Loop, Loop1)); + for (int Loop1 = 1; Loop1 <= refrig->NumSupTempPoints - 1; ++Loop1) { + print(state.files.debug, ",{:.3R}", refrig->HshValues(Loop, Loop1)); } - print(state.files.debug, ",{:.3R}\n", refrig.HshValues(Loop, refrig.NumSuperTempPts)); + print(state.files.debug, ",{:.3R}\n", refrig->HshValues(Loop, refrig->NumSupTempPoints)); } - for (int Loop = 1; Loop <= refrig.NumSuperPressPts; ++Loop) { - print(state.files.debug, "Superheated Pressure:#{}={:.2R}\n", Loop, refrig.SHPress(Loop)); + for (int Loop = 1; Loop <= refrig->NumSupPressPoints; ++Loop) { + print(state.files.debug, "Superheated Pressure:#{}={:.2R}\n", Loop, refrig->SupPress(Loop)); print(state.files.debug, "Density Superheated Gas:"); - for (int Loop1 = 1; Loop1 <= refrig.NumSuperTempPts - 1; ++Loop1) { - print(state.files.debug, ",{:.3R}", refrig.RhoshValues(Loop, Loop1)); + for (int Loop1 = 1; Loop1 <= refrig->NumSupTempPoints - 1; ++Loop1) { + print(state.files.debug, ",{:.3R}", refrig->RhoshValues(Loop, Loop1)); } - print(state.files.debug, ",{:.3R}\n", refrig.RhoshValues(Loop, refrig.NumSuperTempPts)); + print(state.files.debug, ",{:.3R}\n", refrig->RhoshValues(Loop, refrig->NumSupTempPoints)); } - for (int Loop = 1; Loop <= refrig.NumSuperTempPts; ++Loop) { - print(state.files.debug, "Superheated Temperature:#{}={:.2R}\n", Loop, refrig.SHTemps(Loop)); + for (int Loop = 1; Loop <= refrig->NumSupTempPoints; ++Loop) { + print(state.files.debug, "Superheated Temperature:#{}={:.2R}\n", Loop, refrig->SupTemps(Loop)); print(state.files.debug, "Enthalpy Superheated Gas:"); - for (int Loop1 = 1; Loop1 <= refrig.NumSuperPressPts - 1; ++Loop1) { - print(state.files.debug, ",{:.3R}", refrig.HshValues(Loop1, Loop)); + for (int Loop1 = 1; Loop1 <= refrig->NumSupPressPoints - 1; ++Loop1) { + print(state.files.debug, ",{:.3R}", refrig->HshValues(Loop1, Loop)); } - print(state.files.debug, ",{:.3R}\n", refrig.HshValues(refrig.NumSuperPressPts, Loop)); + print(state.files.debug, ",{:.3R}\n", refrig->HshValues(refrig->NumSupPressPoints, Loop)); } - for (int Loop = 1; Loop <= refrig.NumSuperTempPts; ++Loop) { - print(state.files.debug, "Superheated Temperature:#{}={:.2R}\n", Loop, refrig.SHTemps(Loop)); + for (int Loop = 1; Loop <= refrig->NumSupTempPoints; ++Loop) { + print(state.files.debug, "Superheated Temperature:#{}={:.2R}\n", Loop, refrig->SupTemps(Loop)); print(state.files.debug, "Density Superheated Gas:"); - for (int Loop1 = 1; Loop1 <= refrig.NumSuperPressPts - 1; ++Loop1) { - print(state.files.debug, ",{:.3R}", refrig.RhoshValues(Loop1, Loop)); + for (int Loop1 = 1; Loop1 <= refrig->NumSupPressPoints - 1; ++Loop1) { + print(state.files.debug, ",{:.3R}", refrig->RhoshValues(Loop1, Loop)); } - print(state.files.debug, ",{:.3R}\n", refrig.RhoshValues(refrig.NumSuperPressPts, Loop)); + print(state.files.debug, ",{:.3R}\n", refrig->RhoshValues(refrig->NumSupPressPoints, Loop)); } } @@ -3399,127 +2503,127 @@ namespace FluidProperties { // ============================================ // ========= Pressure from Temperatures - print(state.files.debug, "Refrigerant={} **** Results ****\n", refrig.Name); - if (refrig.NumPsPoints > 0) { + print(state.files.debug, "Refrigerant={} **** Results ****\n", refrig->Name); + if (refrig->NumPsPoints > 0) { print(state.files.debug, "Pressure Results at Temperatures:"); - print(state.files.debug, ",{:.2R}", refrig.PsTemps(1) - incr); - for (int Loop = 1; Loop <= refrig.NumPsPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", refrig.PsTemps(Loop)); - Temperature = refrig.PsTemps(Loop) + (refrig.PsTemps(Loop + 1) - refrig.PsTemps(Loop)) / 2.0; + print(state.files.debug, ",{:.2R}", refrig->PsTemps(1) - incr); + for (int Loop = 1; Loop <= refrig->NumPsPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", refrig->PsTemps(Loop)); + Temperature = refrig->PsTemps(Loop) + (refrig->PsTemps(Loop + 1) - refrig->PsTemps(Loop)) / 2.0; print(state.files.debug, ",{:.2R}", Temperature); } - print(state.files.debug, ",{:.2R}", refrig.PsTemps(refrig.NumPsPoints)); - print(state.files.debug, ",{:.2R}\n", refrig.PsTemps(refrig.NumPsPoints) + incr); + print(state.files.debug, ",{:.2R}", refrig->PsTemps(refrig->NumPsPoints)); + print(state.files.debug, ",{:.2R}\n", refrig->PsTemps(refrig->NumPsPoints) + incr); print(state.files.debug, "Saturated Pressures:"); - Temperature = refrig.PsTemps(1) - incr; - ReturnValue = refrig.getSatPressure(state, Temperature, RoutineName); + Temperature = refrig->PsTemps(1) - incr; + ReturnValue = refrig->getSatPressure(state, Temperature, routineName); print(state.files.debug, ",{:.2R}", ReturnValue); - for (int Loop = 1; Loop <= refrig.NumPsPoints - 1; ++Loop) { - Temperature = refrig.PsTemps(Loop); - ReturnValue = refrig.getSatPressure(state, Temperature, RoutineName); + for (int Loop = 1; Loop <= refrig->NumPsPoints - 1; ++Loop) { + Temperature = refrig->PsTemps(Loop); + ReturnValue = refrig->getSatPressure(state, Temperature, routineName); print(state.files.debug, ",{:.2R}", ReturnValue); - Temperature = refrig.PsTemps(Loop) + (refrig.PsTemps(Loop + 1) - refrig.PsTemps(Loop)) / 2.0; - ReturnValue = refrig.getSatPressure(state, Temperature, RoutineName); + Temperature = refrig->PsTemps(Loop) + (refrig->PsTemps(Loop + 1) - refrig->PsTemps(Loop)) / 2.0; + ReturnValue = refrig->getSatPressure(state, Temperature, routineName); print(state.files.debug, ",{:.2R}", ReturnValue); } - Temperature = refrig.PsTemps(refrig.NumPsPoints); - ReturnValue = refrig.getSatPressure(state, Temperature, RoutineName); + Temperature = refrig->PsTemps(refrig->NumPsPoints); + ReturnValue = refrig->getSatPressure(state, Temperature, routineName); print(state.files.debug, ",{:.2R}", ReturnValue); - Temperature = refrig.PsTemps(refrig.NumPsPoints) + incr; - ReturnValue = refrig.getSatPressure(state, Temperature, RoutineName); + Temperature = refrig->PsTemps(refrig->NumPsPoints) + incr; + ReturnValue = refrig->getSatPressure(state, Temperature, routineName); print(state.files.debug, ",{:.2R}\n", ReturnValue); } // ========= Enthalpy from Temperatures - if (refrig.NumHPoints > 0) { + if (refrig->NumHPoints > 0) { print(state.files.debug, "Enthalpy Results at Temperatures:"); - print(state.files.debug, ",{:.2R}", refrig.HTemps(1) - incr); - for (int Loop = 1; Loop <= refrig.NumHPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", refrig.HTemps(Loop)); - Temperature = refrig.HTemps(Loop) + (refrig.HTemps(Loop + 1) - refrig.HTemps(Loop)) / 2.0; + print(state.files.debug, ",{:.2R}", refrig->HTemps(1) - incr); + for (int Loop = 1; Loop <= refrig->NumHPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", refrig->HTemps(Loop)); + Temperature = refrig->HTemps(Loop) + (refrig->HTemps(Loop + 1) - refrig->HTemps(Loop)) / 2.0; print(state.files.debug, ",{:.2R}", Temperature); } - print(state.files.debug, ",{:.2R}", refrig.HTemps(refrig.NumHPoints)); - print(state.files.debug, ",{:.2R}\n", refrig.HTemps(refrig.NumHPoints) + incr); + print(state.files.debug, ",{:.2R}", refrig->HTemps(refrig->NumHPoints)); + print(state.files.debug, ",{:.2R}\n", refrig->HTemps(refrig->NumHPoints) + incr); print(state.files.debug, "Saturated Enthalpy:"); - Temperature = refrig.HTemps(1) - incr; - ReturnValue = refrig.getSatEnthalpy(state, Temperature, Quality, RoutineName); + Temperature = refrig->HTemps(1) - incr; + ReturnValue = refrig->getSatEnthalpy(state, Temperature, Quality, routineName); print(state.files.debug, ",{:.2R}", ReturnValue); - for (int Loop = 1; Loop <= refrig.NumHPoints - 1; ++Loop) { - Temperature = refrig.HTemps(Loop); - ReturnValue = refrig.getSatEnthalpy(state, Temperature, Quality, RoutineName); + for (int Loop = 1; Loop <= refrig->NumHPoints - 1; ++Loop) { + Temperature = refrig->HTemps(Loop); + ReturnValue = refrig->getSatEnthalpy(state, Temperature, Quality, routineName); print(state.files.debug, ",{:.2R}", ReturnValue); - Temperature = refrig.HTemps(Loop) + (refrig.HTemps(Loop + 1) - refrig.HTemps(Loop)) / 2.0; - ReturnValue = refrig.getSatEnthalpy(state, Temperature, Quality, RoutineName); + Temperature = refrig->HTemps(Loop) + (refrig->HTemps(Loop + 1) - refrig->HTemps(Loop)) / 2.0; + ReturnValue = refrig->getSatEnthalpy(state, Temperature, Quality, routineName); print(state.files.debug, ",{:.2R}", ReturnValue); } - Temperature = refrig.HTemps(refrig.NumHPoints); - ReturnValue = refrig.getSatEnthalpy(state, Temperature, Quality, RoutineName); + Temperature = refrig->HTemps(refrig->NumHPoints); + ReturnValue = refrig->getSatEnthalpy(state, Temperature, Quality, routineName); print(state.files.debug, ",{:.2R}", ReturnValue); - Temperature = refrig.HTemps(refrig.NumHPoints) + incr; - ReturnValue = refrig.getSatEnthalpy(state, Temperature, Quality, RoutineName); + Temperature = refrig->HTemps(refrig->NumHPoints) + incr; + ReturnValue = refrig->getSatEnthalpy(state, Temperature, Quality, routineName); print(state.files.debug, ",{:.2R}\n", ReturnValue); } // ========= Specific Heat from Temperatures - if (refrig.NumCpPoints > 0) { + if (refrig->NumCpPoints > 0) { print(state.files.debug, "Specific Heat Results at Temperatures:"); - print(state.files.debug, ",{:.2R}", refrig.CpTemps(1) - incr); - for (int Loop = 1; Loop <= refrig.NumCpPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", refrig.CpTemps(Loop)); - Temperature = refrig.CpTemps(Loop) + (refrig.CpTemps(Loop + 1) - refrig.CpTemps(Loop)) / 2.0; + print(state.files.debug, ",{:.2R}", refrig->CpTemps(1) - incr); + for (int Loop = 1; Loop <= refrig->NumCpPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", refrig->CpTemps(Loop)); + Temperature = refrig->CpTemps(Loop) + (refrig->CpTemps(Loop + 1) - refrig->CpTemps(Loop)) / 2.0; print(state.files.debug, ",{:.2R}", Temperature); } - print(state.files.debug, ",{:.2R}", refrig.CpTemps(refrig.NumCpPoints)); - print(state.files.debug, ",{:.2R}\n", refrig.CpTemps(refrig.NumCpPoints) + incr); + print(state.files.debug, ",{:.2R}", refrig->CpTemps(refrig->NumCpPoints)); + print(state.files.debug, ",{:.2R}\n", refrig->CpTemps(refrig->NumCpPoints) + incr); print(state.files.debug, "Saturated Specific Heat:"); - Temperature = refrig.CpTemps(1) - incr; - ReturnValue = refrig.getSatSpecificHeat(state, Temperature, Quality, RoutineName); + Temperature = refrig->CpTemps(1) - incr; + ReturnValue = refrig->getSatSpecificHeat(state, Temperature, Quality, routineName); print(state.files.debug, ",{:.2R}", ReturnValue); - for (int Loop = 1; Loop <= refrig.NumCpPoints - 1; ++Loop) { - Temperature = refrig.CpTemps(Loop); - ReturnValue = refrig.getSatSpecificHeat(state, Temperature, Quality, RoutineName); + for (int Loop = 1; Loop <= refrig->NumCpPoints - 1; ++Loop) { + Temperature = refrig->CpTemps(Loop); + ReturnValue = refrig->getSatSpecificHeat(state, Temperature, Quality, routineName); print(state.files.debug, ",{:.2R}", ReturnValue); - Temperature = refrig.CpTemps(Loop) + (refrig.CpTemps(Loop + 1) - refrig.CpTemps(Loop)) / 2.0; - ReturnValue = refrig.getSatSpecificHeat(state, Temperature, Quality, RoutineName); + Temperature = refrig->CpTemps(Loop) + (refrig->CpTemps(Loop + 1) - refrig->CpTemps(Loop)) / 2.0; + ReturnValue = refrig->getSatSpecificHeat(state, Temperature, Quality, routineName); print(state.files.debug, ",{:.2R}", ReturnValue); } - Temperature = refrig.CpTemps(refrig.NumCpPoints); - ReturnValue = refrig.getSatSpecificHeat(state, Temperature, Quality, RoutineName); + Temperature = refrig->CpTemps(refrig->NumCpPoints); + ReturnValue = refrig->getSatSpecificHeat(state, Temperature, Quality, routineName); print(state.files.debug, ",{:.2R}", ReturnValue); - Temperature = refrig.CpTemps(refrig.NumCpPoints) + incr; - ReturnValue = refrig.getSatSpecificHeat(state, Temperature, Quality, RoutineName); + Temperature = refrig->CpTemps(refrig->NumCpPoints) + incr; + ReturnValue = refrig->getSatSpecificHeat(state, Temperature, Quality, routineName); print(state.files.debug, ",{:.2R}\n", ReturnValue); } // ========= Density from Temperatures - if (refrig.NumRhoPoints > 0) { + if (refrig->NumRhoPoints > 0) { print(state.files.debug, "Density Results at Temperatures:"); - print(state.files.debug, ",{:.2R}", refrig.RhoTemps(1) - incr); - for (int Loop = 1; Loop <= refrig.NumRhoPoints - 1; ++Loop) { - print(state.files.debug, ",{:.2R}", refrig.RhoTemps(Loop)); - Temperature = refrig.RhoTemps(Loop) + (refrig.RhoTemps(Loop + 1) - refrig.RhoTemps(Loop)) / 2.0; + print(state.files.debug, ",{:.2R}", refrig->RhoTemps(1) - incr); + for (int Loop = 1; Loop <= refrig->NumRhoPoints - 1; ++Loop) { + print(state.files.debug, ",{:.2R}", refrig->RhoTemps(Loop)); + Temperature = refrig->RhoTemps(Loop) + (refrig->RhoTemps(Loop + 1) - refrig->RhoTemps(Loop)) / 2.0; print(state.files.debug, ",{:.2R}", Temperature); } - print(state.files.debug, ",{:.2R}", refrig.RhoTemps(refrig.NumRhoPoints)); - print(state.files.debug, ",{:.2R}\n", refrig.RhoTemps(refrig.NumRhoPoints) + incr); + print(state.files.debug, ",{:.2R}", refrig->RhoTemps(refrig->NumRhoPoints)); + print(state.files.debug, ",{:.2R}\n", refrig->RhoTemps(refrig->NumRhoPoints) + incr); print(state.files.debug, "Saturated Density:"); - Temperature = refrig.RhoTemps(1) - incr; - ReturnValue = refrig.getSatDensity(state, Temperature, Quality, RoutineName); + Temperature = refrig->RhoTemps(1) - incr; + ReturnValue = refrig->getSatDensity(state, Temperature, Quality, routineName); print(state.files.debug, ",{:.2R}", ReturnValue); - for (int Loop = 1; Loop <= refrig.NumRhoPoints - 1; ++Loop) { - Temperature = refrig.RhoTemps(Loop); - ReturnValue = refrig.getSatDensity(state, Temperature, Quality, RoutineName); + for (int Loop = 1; Loop <= refrig->NumRhoPoints - 1; ++Loop) { + Temperature = refrig->RhoTemps(Loop); + ReturnValue = refrig->getSatDensity(state, Temperature, Quality, routineName); print(state.files.debug, ",{:.2R}", ReturnValue); - Temperature = refrig.RhoTemps(Loop) + (refrig.RhoTemps(Loop + 1) - refrig.RhoTemps(Loop)) / 2.0; - ReturnValue = refrig.getSatDensity(state, Temperature, Quality, RoutineName); + Temperature = refrig->RhoTemps(Loop) + (refrig->RhoTemps(Loop + 1) - refrig->RhoTemps(Loop)) / 2.0; + ReturnValue = refrig->getSatDensity(state, Temperature, Quality, routineName); print(state.files.debug, ",{:.2R}", ReturnValue); } - Temperature = refrig.RhoTemps(refrig.NumRhoPoints); - ReturnValue = refrig.getSatDensity(state, Temperature, Quality, RoutineName); + Temperature = refrig->RhoTemps(refrig->NumRhoPoints); + ReturnValue = refrig->getSatDensity(state, Temperature, Quality, routineName); print(state.files.debug, ",{:.2R}", ReturnValue); - Temperature = refrig.RhoTemps(refrig.NumRhoPoints) + incr; - ReturnValue = refrig.getSatDensity(state, Temperature, Quality, RoutineName); + Temperature = refrig->RhoTemps(refrig->NumRhoPoints) + incr; + ReturnValue = refrig->getSatDensity(state, Temperature, Quality, routineName); print(state.files.debug, ",{:.2R}\n", ReturnValue); } } @@ -3628,7 +2732,7 @@ namespace FluidProperties { } } - return df->RefrigData(RefrigIndex).getSatPressure(state, Temperature, CalledFrom); + return df->refrigs(RefrigIndex)->getSatPressure(state, Temperature, CalledFrom); } //***************************************************************************** @@ -3736,7 +2840,7 @@ namespace FluidProperties { } } - return df->RefrigData(RefrigIndex).getSatTemperature(state, Pressure, CalledFrom); + return df->refrigs(RefrigIndex)->getSatTemperature(state, Pressure, CalledFrom); } //***************************************************************************** @@ -3800,7 +2904,7 @@ namespace FluidProperties { return 0.0; } } - return df->RefrigData(RefrigIndex).getSatEnthalpy(state, Temperature, Quality, CalledFrom); + return df->refrigs(RefrigIndex)->getSatEnthalpy(state, Temperature, Quality, CalledFrom); } //***************************************************************************** @@ -3942,7 +3046,7 @@ namespace FluidProperties { } } - return df->RefrigData(RefrigIndex).getSatDensity(state, Temperature, Quality, CalledFrom); + return df->refrigs(RefrigIndex)->getSatDensity(state, Temperature, Quality, CalledFrom); } //***************************************************************************** @@ -4023,7 +3127,7 @@ namespace FluidProperties { } } - return df->RefrigData(RefrigIndex).getSatSpecificHeat(state, Temperature, Quality, CalledFrom); + return df->refrigs(RefrigIndex)->getSatSpecificHeat(state, Temperature, Quality, CalledFrom); } //***************************************************************************** @@ -4077,14 +3181,14 @@ namespace FluidProperties { int CurPresRangeErrCount = 0; // low index value of Temperature from table - int TempIndex = FindArrayIndex(Temperature, this->SHTemps, 1, this->NumSuperTempPts); + int TempIndex = FindArrayIndex(Temperature, this->SupTemps, 1, this->NumSupTempPoints); // low index value of Pressure from table - int LoPressIndex = FindArrayIndex(Pressure, this->SHPress, 1, this->NumSuperPressPts); + int LoPressIndex = FindArrayIndex(Pressure, this->SupPress, 1, this->NumSupPressPoints); // check temperature data range and attempt to cap if necessary - if ((TempIndex > 0) && (TempIndex < this->NumSuperTempPts)) { // in range + if ((TempIndex > 0) && (TempIndex < this->NumSupTempPoints)) { // in range HiTempIndex = TempIndex + 1; - TempInterpRatio = (Temperature - this->SHTemps(TempIndex)) / (this->SHTemps(HiTempIndex) - this->SHTemps(TempIndex)); + TempInterpRatio = (Temperature - this->SupTemps(TempIndex)) / (this->SupTemps(HiTempIndex) - this->SupTemps(TempIndex)); } else if (TempIndex < 1) { ++CurTempRangeErrCount; ++ErrCount; @@ -4100,9 +3204,9 @@ namespace FluidProperties { } // check pressure data range and attempt to cap if necessary - if ((LoPressIndex > 0) && (LoPressIndex < this->NumSuperPressPts)) { // in range + if ((LoPressIndex > 0) && (LoPressIndex < this->NumSupPressPoints)) { // in range HiPressIndex = LoPressIndex + 1; - PressInterpRatio = (Pressure - this->SHPress(LoPressIndex)) / (this->SHPress(HiPressIndex) - this->SHPress(LoPressIndex)); + PressInterpRatio = (Pressure - this->SupPress(LoPressIndex)) / (this->SupPress(HiPressIndex) - this->SupPress(LoPressIndex)); } else if (LoPressIndex < 1) { ++CurPresRangeErrCount; ++ErrCount; @@ -4181,54 +3285,49 @@ namespace FluidProperties { return ReturnValue; } - if (!state.dataGlobal->WarmupFlag) { - // some checks... - if (ErrCount > 0) { - // send temp range error if flagged - this->errors[(int)RefrigError::SatSupEnthalpy].count += CurTempRangeErrCount; - if (CurTempRangeErrCount > 0 && this->errors[(int)RefrigError::SatSupEnthalpyTemp].count <= df->RefrigErrorLimitTest) { + if (ErrCount > 0 && !state.dataGlobal->WarmupFlag) { + // send temp range error if flagged + this->errors[(int)RefrigError::SatSupEnthalpy].count += CurTempRangeErrCount; + if (CurTempRangeErrCount > 0) { + if (this->errors[(int)RefrigError::SatSupEnthalpyTemp].count <= df->RefrigErrorLimitTest) { ShowWarningMessage(state, - format("{}: Refrigerant [{}] Temperature is out of range for superheated refrigerant enthalpy: values capped **", - routineName, - this->Name)); + format("{}: Refrigerant [{}] Temperature is out of range for superheated enthalpy: values capped **", + routineName, this->Name)); ShowContinueError(state, fmt::format(" Called From:{}", CalledFrom)); ShowContinueErrorTimeStamp(state, ""); } - if (CurTempRangeErrCount > 0) { - ShowRecurringWarningErrorAtEnd(state, - format("{}: Refrigerant [{}] Temperature is out of range for superheated refrigerant enthalpy: values capped **", - routineName, - this->Name), - this->errors[(int)RefrigError::SatSupEnthalpyTemp].index, - Temperature, - Temperature, - _, - "{C}", - "{C}"); - } + ShowRecurringWarningErrorAtEnd(state, + format("{}: Refrigerant [{}] Temperature is out of range for superheated enthalpy: values capped **", + routineName, this->Name), + this->errors[(int)RefrigError::SatSupEnthalpyTemp].index, + Temperature, + Temperature, + _, + "{C}", + "{C}"); + } - // send pressure range error if flagged - this->errors[(int)RefrigError::SatSupEnthalpyPress].count += CurPresRangeErrCount; - if (CurPresRangeErrCount > 0 && this->errors[(int)RefrigError::SatSupEnthalpyPress].count <= df->RefrigErrorLimitTest) { + // send pressure range error if flagged + this->errors[(int)RefrigError::SatSupEnthalpyPress].count += CurPresRangeErrCount; + if (CurPresRangeErrCount > 0) { + if (this->errors[(int)RefrigError::SatSupEnthalpyPress].count <= df->RefrigErrorLimitTest) { ShowWarningMessage(state, - format("{}: Refrigerant [{}] Pressure is out of range for superheated refrigerant enthalpy: values capped **", - routineName, - this->Name)); + format("{}: Refrigerant [{}] Pressure is out of range for superheated enthalpy: values capped **", + routineName, this->Name)); ShowContinueError(state, fmt::format(" Called From:{}", CalledFrom)); ShowContinueErrorTimeStamp(state, ""); } - if (CurPresRangeErrCount > 0) { - ShowRecurringWarningErrorAtEnd(state, - format("{}: Refrigerant [{}] Pressure is out of range for superheated refrigerant enthalpy: values capped **", routineName, this->Name), - this->errors[(int)RefrigError::SatSupEnthalpyPress].index, - Pressure, - Pressure, - _, - "{Pa}", - "{Pa}"); - } - } // end error checking - } + ShowRecurringWarningErrorAtEnd(state, + format("{}: Refrigerant [{}] Pressure is out of range for superheated enthalpy: values capped **", + routineName, this->Name), + this->errors[(int)RefrigError::SatSupEnthalpyPress].index, + Pressure, + Pressure, + _, + "{Pa}", + "{Pa}"); + } + } // end error checking return ReturnValue; } @@ -4275,7 +3374,7 @@ namespace FluidProperties { } } - return df->RefrigData(RefrigIndex).getSupHeatEnthalpy(state, Temperature, Pressure, CalledFrom); + return df->refrigs(RefrigIndex)->getSupHeatEnthalpy(state, Temperature, Pressure, CalledFrom); } //***************************************************************************** @@ -4339,10 +3438,10 @@ namespace FluidProperties { int CurSatErrCount = 0; // Index value of lower temperature from data - int LoTempIndex = FindArrayIndex(Temperature, this->SHTemps, 1, this->NumSuperTempPts); + int LoTempIndex = FindArrayIndex(Temperature, this->SupTemps, 1, this->NumSupTempPoints); // check temperature data range and attempt to cap if necessary - if ((LoTempIndex > 0) && (LoTempIndex < this->NumSuperTempPts)) { // in range + if ((LoTempIndex > 0) && (LoTempIndex < this->NumSupTempPoints)) { // in range HiTempIndex = LoTempIndex + 1; } else if (LoTempIndex < 1) { // below lower bound ++CurTempRangeErrCount; @@ -4354,8 +3453,8 @@ namespace FluidProperties { } // check for lowest non-zero value in lower temp data - int LoTempStart = this->NumSuperPressPts; - for (int Loop = 1; Loop <= this->NumSuperPressPts; ++Loop) { + int LoTempStart = this->NumSupPressPoints; + for (int Loop = 1; Loop <= this->NumSupPressPoints; ++Loop) { if (this->HshValues(Loop, LoTempIndex) > 0.0) { LoTempStart = Loop; break; @@ -4363,15 +3462,15 @@ namespace FluidProperties { } // check for highest non-zero value in lower temp data int LoTempFinish = 1; - for (int Loop = this->NumSuperPressPts; Loop >= 1; --Loop) { + for (int Loop = this->NumSupPressPoints; Loop >= 1; --Loop) { if (this->HshValues(Loop, LoTempIndex) <= 0.0) { LoTempFinish = Loop; // EXIT } } // check for lowest non-zero value in high temp data - int HiTempStart = this->NumSuperPressPts; - for (int Loop = 1; Loop <= this->NumSuperPressPts; ++Loop) { + int HiTempStart = this->NumSupPressPoints; + for (int Loop = 1; Loop <= this->NumSupPressPoints; ++Loop) { if (this->HshValues(Loop, HiTempIndex) > 0.0) { HiTempStart = Loop; break; @@ -4380,7 +3479,7 @@ namespace FluidProperties { // check for highest non-zero value in high temp data int HiTempFinish = 1; - for (int Loop = this->NumSuperPressPts; Loop >= 1; --Loop) { + for (int Loop = this->NumSupPressPoints; Loop >= 1; --Loop) { if (this->HshValues(Loop, HiTempIndex) <= 0.0) { HiTempFinish = Loop; } @@ -4392,7 +3491,7 @@ namespace FluidProperties { int TempFinish = min(LoTempFinish, HiTempFinish); // calculate interpolation ratio w.r.t temperature // This ratio is used to find enthalpies at the given temperature - Real64 TempInterpRatio = (Temperature - this->SHTemps(LoTempIndex)) / (this->SHTemps(HiTempIndex) - this->SHTemps(LoTempIndex)); + Real64 TempInterpRatio = (Temperature - this->SupTemps(LoTempIndex)) / (this->SupTemps(HiTempIndex) - this->SupTemps(LoTempIndex)); // search for array index by bisection int start = TempStart; // set the bounds @@ -4418,10 +3517,10 @@ namespace FluidProperties { ++ErrCount; if (Enthalpy > EnthalpyMax) { // return min pressure - ReturnValue = this->SHPress(HiTempStart); + ReturnValue = this->SupPress(HiTempStart); } else { // return max pressure - ReturnValue = this->SHPress(LoTempFinish); + ReturnValue = this->SupPress(LoTempFinish); } } else { // go ahead and search @@ -4450,81 +3549,76 @@ namespace FluidProperties { // calculate an interpolation ratio EnthInterpRatio = (Enthalpy - EnthalpyLow) / (EnthalpyHigh - EnthalpyLow); // apply this interpolation ratio to find the final pressure - ReturnValue = this->SHPress(LoEnthalpyIndex) + EnthInterpRatio * (this->SHPress(HiEnthalpyIndex) - this->SHPress(LoEnthalpyIndex)); + ReturnValue = this->SupPress(LoEnthalpyIndex) + EnthInterpRatio * (this->SupPress(HiEnthalpyIndex) - this->SupPress(LoEnthalpyIndex)); } - if (!state.dataGlobal->WarmupFlag) { - // ** make error checks ** - if (ErrCount > 0) { - // send near saturation warning if flagged - this->errors[(int)RefrigError::SatSupPress].count += CurSatErrCount; - // send warning + if (ErrCount > 0 && !state.dataGlobal->WarmupFlag) { + // send near saturation warning if flagged + this->errors[(int)RefrigError::SatSupPress].count += CurSatErrCount; + // send warning + if (CurSatErrCount > 0) { if (this->errors[(int)RefrigError::SatSupPress].count <= df->RefrigErrorLimitTest) { ShowSevereMessage(state, format("{}: Refrigerant [{}] is saturated at the given enthalpy and temperature, saturated enthalpy at given " - "temperature returned. **", - routineName, - this->Name)); + "temperature returned. **", routineName, this->Name)); ShowContinueError(state, fmt::format("...Called From:{}", CalledFrom)); ShowContinueError(state, format("Refrigerant temperature = {:.2R}", Temperature)); ShowContinueError(state, format("Refrigerant Enthalpy = {:.3R}", Enthalpy)); ShowContinueError(state, format("Returned Pressure value = {:.0R}", ReturnValue)); ShowContinueErrorTimeStamp(state, ""); } - if (CurSatErrCount > 0) { - ShowRecurringSevereErrorAtEnd(state, - format("{}: Refrigerant [{}] saturated at the given enthalpy and temperature **", routineName, this->Name), - this->errors[(int)RefrigError::SatSupPress].index, - ReturnValue, - ReturnValue, - _, - "{Pa}", - "{Pa}"); - } + ShowRecurringSevereErrorAtEnd(state, + format("{}: Refrigerant [{}] saturated at the given enthalpy and temperature **", routineName, this->Name), + this->errors[(int)RefrigError::SatSupPress].index, + ReturnValue, + ReturnValue, + _, + "{Pa}", + "{Pa}"); + } - // send temp range error if flagged - this->errors[(int)RefrigError::SatSupPressTemp].count += CurTempRangeErrCount; - if (CurTempRangeErrCount > 0 && this->errors[(int)RefrigError::SatSupPressTemp].count <= df->RefrigErrorLimitTest) { + // send temp range error if flagged + this->errors[(int)RefrigError::SatSupPressTemp].count += CurTempRangeErrCount; + if (CurTempRangeErrCount > 0) { + if (this->errors[(int)RefrigError::SatSupPressTemp].count <= df->RefrigErrorLimitTest) { ShowWarningMessage(state, - format("{}: Refrigerant [{}] Temperature is out of range for superheated refrigerant pressure: values capped **", - routineName, - this->Name)); + format("{}: Refrigerant [{}] Temperature is out of range for superheated pressure: values capped **", + routineName, this->Name)); ShowContinueError(state, fmt::format(" Called From:{}", CalledFrom)); ShowContinueErrorTimeStamp(state, ""); } - if (CurTempRangeErrCount > 0) { - ShowRecurringWarningErrorAtEnd(state, - format("{}: Refrigerant [{}] Temperature is out of range for superheated refrigerant pressure: values capped **", routineName, this->Name), - this->errors[(int)RefrigError::SatSupPressTemp].index, - Temperature, - Temperature, - _, - "{C}", - "{C}"); - } + ShowRecurringWarningErrorAtEnd(state, + format("{}: Refrigerant [{}] Temperature is out of range for superheated pressure: values capped **", + routineName, this->Name), + this->errors[(int)RefrigError::SatSupPressTemp].index, + Temperature, + Temperature, + _, + "{C}", + "{C}"); + } - // send enthalpy range error if flagged - this->errors[(int)RefrigError::SatSupPressEnthalpy].count += CurEnthalpyRangeErrCount; - if (CurEnthalpyRangeErrCount > 0 && this->errors[(int)RefrigError::SatSupPressEnthalpy].count <= df->RefrigErrorLimitTest) { + // send enthalpy range error if flagged + this->errors[(int)RefrigError::SatSupPressEnthalpy].count += CurEnthalpyRangeErrCount; + if (CurEnthalpyRangeErrCount > 0) { + if (this->errors[(int)RefrigError::SatSupPressEnthalpy].count <= df->RefrigErrorLimitTest) { ShowWarningMessage(state, - format("{}: Refrigerant [{}] Pressure is out of range for superheated refrigerant enthalpy: values capped **", - routineName, - this->Name)); + format("{}: Refrigerant [{}] Pressure is out of range for superheated enthalpy: values capped **", + routineName, this->Name)); ShowContinueError(state, fmt::format(" Called From:{}", CalledFrom)); ShowContinueErrorTimeStamp(state, ""); } - if (CurEnthalpyRangeErrCount > 0) { - ShowRecurringWarningErrorAtEnd(state, - format("{}: Refrigerant [{}] Pressure is out of range for superheated refrigerant pressure: values capped **", routineName, this->Name), - this->errors[(int)RefrigError::SatSupPressEnthalpy].index, - Enthalpy, - Enthalpy, - _, - "{J}", - "{J}"); - } - } // end error checking - } + ShowRecurringWarningErrorAtEnd(state, + format("{}: Refrigerant [{}] Pressure is out of range for superheated pressure: values capped **", + routineName, this->Name), + this->errors[(int)RefrigError::SatSupPressEnthalpy].index, + Enthalpy, + Enthalpy, + _, + "{J}", + "{J}"); + } + } // end error checking return ReturnValue; } @@ -4569,7 +3663,7 @@ namespace FluidProperties { } } - return df->RefrigData(RefrigIndex).getSupHeatPressure(state, Temperature, Enthalpy, CalledFrom); + return df->refrigs(RefrigIndex)->getSupHeatPressure(state, Temperature, Enthalpy, CalledFrom); } //***************************************************************************** @@ -4591,7 +3685,7 @@ namespace FluidProperties { // enthalpy and pressure. Works only in superheated region. // METHODOLOGY EMPLOYED: - // Perform iterations to identify the temperature by calling GetSupHeatEnthalpyRefrig. + // Perform iterations to identify the temperature by calling GetSupHeatEnthalpyRefrig-> // Return value Real64 ReturnValue; @@ -4692,7 +3786,7 @@ namespace FluidProperties { // enthalpy and pressure. Works only in superheated region. // METHODOLOGY EMPLOYED: - // Perform iterations to identify the temperature by calling GetSupHeatEnthalpyRefrig. + // Perform iterations to identify the temperature by calling GetSupHeatEnthalpyRefrig auto &df = state.dataFluidProps; if (RefrigIndex == 0) { @@ -4703,7 +3797,7 @@ namespace FluidProperties { } } - return df->RefrigData(RefrigIndex).getSupHeatTemp(state, Pressure, Enthalpy, TempLow, TempUp, CalledFrom); + return df->refrigs(RefrigIndex)->getSupHeatTemp(state, Pressure, Enthalpy, TempLow, TempUp, CalledFrom); } //***************************************************************************** @@ -4759,10 +3853,10 @@ namespace FluidProperties { // check temperature data range and attempt to cap if necessary // low index value of Temperature from table - int TempIndex = FindArrayIndex(Temperature, this->SHTemps, 1, this->NumSuperTempPts); - if ((TempIndex > 0) && (TempIndex < this->NumSuperTempPts)) { // in range + int TempIndex = FindArrayIndex(Temperature, this->SupTemps, 1, this->NumSupTempPoints); + if ((TempIndex > 0) && (TempIndex < this->NumSupTempPoints)) { // in range HiTempIndex = TempIndex + 1; - TempInterpRatio = (Temperature - this->SHTemps(TempIndex)) / (this->SHTemps(HiTempIndex) - this->SHTemps(TempIndex)); + TempInterpRatio = (Temperature - this->SupTemps(TempIndex)) / (this->SupTemps(HiTempIndex) - this->SupTemps(TempIndex)); } else if (TempIndex < 1) { ++CurTempRangeErrCount; ++ErrCount; @@ -4779,11 +3873,11 @@ namespace FluidProperties { } // check pressure data range and attempt to cap if necessary - int LoPressIndex = FindArrayIndex(Pressure, this->SHPress, 1, this->NumSuperPressPts); - if ((LoPressIndex > 0) && (LoPressIndex < this->NumSuperPressPts)) { // in range + int LoPressIndex = FindArrayIndex(Pressure, this->SupPress, 1, this->NumSupPressPoints); + if ((LoPressIndex > 0) && (LoPressIndex < this->NumSupPressPoints)) { // in range HiPressIndex = LoPressIndex + 1; - Real64 const SHPress_Lo = this->SHPress(LoPressIndex); - PressInterpRatio = (Pressure - SHPress_Lo) / (this->SHPress(HiPressIndex) - SHPress_Lo); + Real64 const SHPress_Lo = this->SupPress(LoPressIndex); + PressInterpRatio = (Pressure - SHPress_Lo) / (this->SupPress(HiPressIndex) - SHPress_Lo); } else if (LoPressIndex < 1) { ++CurPresRangeErrCount; ++ErrCount; @@ -4865,51 +3959,47 @@ namespace FluidProperties { return saturated_density; } - if (!state.dataGlobal->WarmupFlag) { - // some checks... - if (ErrCount > 0) { - // send temp range error if flagged - this->errors[(int)RefrigError::SatSupDensityTemp].count += CurTempRangeErrCount; - if (CurTempRangeErrCount > 0 && this->errors[(int)RefrigError::SatSupDensityTemp].count <= df->RefrigErrorLimitTest) { - ShowWarningMessage( - state, - format("{}: Refrigerant [{}] Temperature is out of range for superheated refrigerant density: values capped **", - routineName, - this->Name)); + if (ErrCount > 0 && !state.dataGlobal->WarmupFlag) { + // send temp range error if flagged + this->errors[(int)RefrigError::SatSupDensityTemp].count += CurTempRangeErrCount; + if (CurTempRangeErrCount > 0) { + if (this->errors[(int)RefrigError::SatSupDensityTemp].count <= df->RefrigErrorLimitTest) { + ShowWarningMessage(state, format("{}: Refrigerant [{}] Temperature is out of range for superheated density: values capped **", + routineName, this->Name)); ShowContinueError(state, fmt::format(" Called From:{}", CalledFrom)); ShowContinueErrorTimeStamp(state, ""); } - if (CurTempRangeErrCount > 0) { - ShowRecurringWarningErrorAtEnd(state, - format("{}: Refrigerant [{}] Temperature is out of range for superheated refrigerant density: values capped **", routineName, this->Name), - this->errors[(int)RefrigError::SatSupDensityTemp].index, - Temperature, - Temperature, - _, - "{C}", - "{C}"); - } + ShowRecurringWarningErrorAtEnd(state, + format("{}: Refrigerant [{}] Temperature is out of range for superheated density: values capped **", + routineName, this->Name), + this->errors[(int)RefrigError::SatSupDensityTemp].index, + Temperature, + Temperature, + _, + "{C}", + "{C}"); + } - // send pressure range error if flagged - this->errors[(int)RefrigError::SatSupDensityPress].count += CurPresRangeErrCount; - if (CurPresRangeErrCount > 0 && this->errors[(int)RefrigError::SatSupDensityPress].count <= df->RefrigErrorLimitTest) { + // send pressure range error if flagged + this->errors[(int)RefrigError::SatSupDensityPress].count += CurPresRangeErrCount; + if (CurPresRangeErrCount > 0) { + if (this->errors[(int)RefrigError::SatSupDensityPress].count <= df->RefrigErrorLimitTest) { ShowWarningMessage(state, - format("{}: Refrigerant [{}] Pressure is out of range for superheated refrigerant density: values capped **", + format("{}: Refrigerant [{}] Pressure is out of range for superheated density: values capped **", routineName, this->Name)); ShowContinueError(state, fmt::format(" Called From:{}", CalledFrom)); ShowContinueErrorTimeStamp(state, ""); } - if (CurPresRangeErrCount > 0) { - ShowRecurringWarningErrorAtEnd(state, - format("{}: Refrigerant [{}] Pressure is out of range for superheated refrigerant density: values capped **", routineName, this->Name), - this->errors[(int)RefrigError::SatSupDensityPress].index, - Pressure, - Pressure, - _, - "{Pa}", - "{Pa}"); - } + ShowRecurringWarningErrorAtEnd(state, + format("{}: Refrigerant [{}] Pressure is out of range for superheated density: values capped **", + routineName, this->Name), + this->errors[(int)RefrigError::SatSupDensityPress].index, + Pressure, + Pressure, + _, + "{Pa}", + "{Pa}"); } // end error checking } @@ -4956,7 +4046,7 @@ namespace FluidProperties { } } - return df->RefrigData(RefrigIndex).getSupHeatDensity(state, Temperature, Pressure, CalledFrom); + return df->refrigs(RefrigIndex)->getSupHeatDensity(state, Temperature, Pressure, CalledFrom); } //***************************************************************************** @@ -5025,11 +4115,7 @@ namespace FluidProperties { auto &df = state.dataFluidProps; // If user didn't input data (shouldn't get this far, but just in case...), we can't find a value - if (!this->CpDataPresent) { - ShowSevereError(state, format("{}: specific heat data not found for glycol \"{}\", called from {}", routineName, this->Name, CalledFrom)); - ShowFatalError(state, "Program terminates due to preceding condition."); - return 0.0; - } + assert(this->CpDataPresent); // Now determine the value of specific heat using interpolation if (Temperature < this->CpLowTempValue) { // Temperature too low @@ -5101,7 +4187,9 @@ namespace FluidProperties { int mid = ((beg + end) >> 1); // bit shifting is faster than /2 (Temperature > this->CpTemps(mid) ? beg : end) = mid; } // Invariant: glycol_CpTemps[beg] <= Temperature <= glycol_CpTemps[end] - return GetInterpValue_fast(Temperature, this->CpTemps(beg), this->CpTemps(end), this->CpValues(beg), this->CpValues(end)); + + // Is this faster than Interp? + return this->CpValues(end) - (this->CpTemps(end) - Temperature) * this->CpTempRatios(beg); } } @@ -5112,25 +4200,7 @@ namespace FluidProperties { std::string_view const CalledFrom // routine this function was called from (error messages) ) { - - // FUNCTION INFORMATION: - // AUTHOR Rick Strand - // DATE WRITTEN June 2004 - - // PURPOSE OF THIS FUNCTION: - // This subroutine finds specific heats for glycols at different - // temperatures. - - // METHODOLOGY EMPLOYED: - // Linear interpolation is used to find specific heat values for a - // particular glycol (water or some mixture of water and another fluid). - // Warnings are given if the point is not clearly in the bounds of the - // glycol data. The value returned is the appropriate limit value. - - // REFERENCES: - // GetFluidPropertiesData: subroutine enforces that temperatures in - // all temperature lists are entered in ascending order. - + // This is now just a wrapper for the GlycolProps::getSpecificHeat method auto &df = state.dataFluidProps; if (GlycolIndex == 0) { @@ -5141,7 +4211,7 @@ namespace FluidProperties { } } - return df->GlycolData(GlycolIndex).getSpecificHeat(state, Temperature, CalledFrom); + return df->glycols(GlycolIndex)->getSpecificHeat(state, Temperature, CalledFrom); } //***************************************************************************** @@ -5182,11 +4252,7 @@ namespace FluidProperties { GlycolError error = GlycolError::Invalid; // If user didn't input data (shouldn't get this far, but just in case...), we can't find a value - if (!this->RhoDataPresent) { - ShowSevereError(state, format("{}: density data not found for glycol \"{}\", called from {}", routineName, this->Name, CalledFrom)); - ShowFatalError(state, "Program terminates due to preceding condition."); - return 0.0; - } + assert(this->RhoDataPresent); // Now determine the value of specific heat using interpolation if (Temperature < this->RhoLowTempValue) { // Temperature too low @@ -5196,29 +4262,27 @@ namespace FluidProperties { error = GlycolError::DensityHigh; ReturnValue = this->RhoValues(this->RhoHighTempIndex); } else { // Temperature somewhere between the lowest and highest value - int LoTempIndex = FindArrayIndex(Temperature, this->RhoTemps, 1, this->NumRhoTempPts); + int LoTempIndex = FindArrayIndex(Temperature, this->RhoTemps, 1, this->NumRhoTempPoints); Real64 TempInterpRatio = (Temperature - this->RhoTemps(LoTempIndex)) / (this->RhoTemps(LoTempIndex+1) - this->RhoTemps(LoTempIndex)); ReturnValue = this->RhoValues(LoTempIndex) + TempInterpRatio * (this->RhoValues(LoTempIndex+1) - this->RhoValues(LoTempIndex)); } // Error handling - if (!state.dataGlobal->WarmupFlag) { - if (error != GlycolError::Invalid) { - df->glycolErrorLimits[(int)error] = this->errors[(int)error].count; - } + if (error != GlycolError::Invalid && !state.dataGlobal->WarmupFlag) { + df->glycolErrorLimits[(int)error] = this->errors[(int)error].count; - if ((error == GlycolError::DensityLow) && - (df->glycolErrorLimits[(int)error] <= df->GlycolErrorLimitTest)) { - ShowWarningMessage(state, format("{}: Temperature is out of range (too low) for fluid [{}] density **", routineName, this->Name)); - ShowContinueError(state, - format("..Called From:{},Temperature=[{:.2R}], supplied data range=[{:.2R},{:.2R}]", - CalledFrom, - Temperature, - this->RhoLowTempValue, - this->RhoHighTempValue)); - ShowContinueErrorTimeStamp(state, ""); - } if (error == GlycolError::DensityLow) { + if (df->glycolErrorLimits[(int)error] <= df->GlycolErrorLimitTest) { + ShowWarningMessage(state, format("{}: Temperature is out of range (too low) for fluid [{}] density **", routineName, this->Name)); + ShowContinueError(state, + format("..Called From:{},Temperature=[{:.2R}], supplied data range=[{:.2R},{:.2R}]", + CalledFrom, + Temperature, + this->RhoLowTempValue, + this->RhoHighTempValue)); + ShowContinueErrorTimeStamp(state, ""); + } + ShowRecurringWarningErrorAtEnd(state, format("{}: Temperature out of range (too low) for fluid [{}] density **", routineName, this->Name), this->errors[(int)GlycolError::DensityLow].index, @@ -5227,20 +4291,18 @@ namespace FluidProperties { _, "{C}", "{C}"); - } - - if ((error == GlycolError::DensityHigh) && - (df->glycolErrorLimits[(int)error] <= df->GlycolErrorLimitTest)) { - ShowWarningMessage(state, format("{}: Temperature is out of range (too high) for fluid [{}] density **", routineName, this->Name)); - ShowContinueError(state, - format("..Called From:{},Temperature=[{:.2R}], supplied data range=[{:.2R},{:.2R}]", - CalledFrom, - Temperature, - this->RhoLowTempValue, - this->RhoHighTempValue)); - ShowContinueErrorTimeStamp(state, ""); - } - if (error == GlycolError::DensityHigh) { + + } else { // error == GlycolError::DensityHigh + if (df->glycolErrorLimits[(int)error] <= df->GlycolErrorLimitTest) { + ShowWarningMessage(state, format("{}: Temperature is out of range (too high) for fluid [{}] density **", routineName, this->Name)); + ShowContinueError(state, + format("..Called From:{},Temperature=[{:.2R}], supplied data range=[{:.2R},{:.2R}]", + CalledFrom, + Temperature, + this->RhoLowTempValue, + this->RhoHighTempValue)); + ShowContinueErrorTimeStamp(state, ""); + } ShowRecurringWarningErrorAtEnd(state, format("{}: Temperature out of range (too high) for fluid [{}] density **", routineName, this->Name), this->errors[(int)GlycolError::DensityHigh].index, @@ -5262,25 +4324,7 @@ namespace FluidProperties { std::string_view const CalledFrom // routine this function was called from (error messages) ) { - - // FUNCTION INFORMATION: - // AUTHOR Rick Strand - // DATE WRITTEN June 2004 - - // PURPOSE OF THIS FUNCTION: - // This subroutine finds the density for glycols at different - // temperatures. - - // METHODOLOGY EMPLOYED: - // Linear interpolation is used to find density values for a - // particular glycol (water or some mixture of water and another fluid). - // Warnings are given if the point is not clearly in the bounds of the - // glycol data. The value returned is the appropriate limit value. - - // REFERENCES: - // GetFluidPropertiesData: subroutine enforces that temperatures in - // all temperature lists are entered in ascending order. - + // This is now just a wrapper for the GlycolProps::getDensity method auto &df = state.dataFluidProps; if (GlycolIndex == 0) { @@ -5291,7 +4335,7 @@ namespace FluidProperties { } } - return df->GlycolData(GlycolIndex).getDensity(state, Temperature, CalledFrom); + return df->glycols(GlycolIndex)->getDensity(state, Temperature, CalledFrom); } //***************************************************************************** @@ -5346,7 +4390,7 @@ namespace FluidProperties { error = GlycolError::ConductivityHigh; ReturnValue = this->CondValues(this->CondHighTempIndex); } else { // Temperature somewhere between the lowest and highest value - int LoTempIndex = FindArrayIndex(Temperature, this->CondTemps, 1, this->NumCondTempPts); + int LoTempIndex = FindArrayIndex(Temperature, this->CondTemps, 1, this->NumCondTempPoints); Real64 TempInterpRatio = (Temperature - this->CondTemps(LoTempIndex)) / (this->CondTemps(LoTempIndex+1) - this->CondTemps(LoTempIndex)); ReturnValue = this->CondValues(LoTempIndex) + TempInterpRatio * (this->CondValues(LoTempIndex+1) - this->CondValues(LoTempIndex)); } @@ -5410,24 +4454,7 @@ namespace FluidProperties { std::string_view const CalledFrom // routine this function was called from (error messages) ) { - - // FUNCTION INFORMATION: - // AUTHOR Rick Strand - // DATE WRITTEN June 2004 - - // PURPOSE OF THIS FUNCTION: - // This subroutine finds the conductivity for glycols at different - // temperatures. - - // METHODOLOGY EMPLOYED: - // Linear interpolation is used to find conductivity values for a - // particular glycol (water or some mixture of water and another fluid). - // Warnings are given if the point is not clearly in the bounds of the - // glycol data. The value returned is the appropriate limit value. - - // REFERENCES: - // GetFluidPropertiesData: subroutine enforces that temperatures in - // all temperature lists are entered in ascending order. + // This is now just a wrapper for the GlycolProps::getConductivity method auto &df = state.dataFluidProps; if (GlycolIndex == 0) { @@ -5439,7 +4466,7 @@ namespace FluidProperties { } // If user didn't input data (shouldn't get this far, but just in case...), we can't find a value - return df->GlycolData(GlycolIndex).getConductivity(state, Temperature, CalledFrom); + return df->glycols(GlycolIndex)->getConductivity(state, Temperature, CalledFrom); } //***************************************************************************** @@ -5494,7 +4521,7 @@ namespace FluidProperties { error = GlycolError::ViscosityHigh; ReturnValue = this->ViscValues(this->ViscHighTempIndex); } else { // Temperature somewhere between the lowest and highest value - int LoTempIndex = FindArrayIndex(Temperature, this->ViscTemps, 1, this->NumViscTempPts); + int LoTempIndex = FindArrayIndex(Temperature, this->ViscTemps, 1, this->NumViscTempPoints); Real64 TempInterpRatio = (Temperature - this->ViscTemps(LoTempIndex)) / (this->ViscTemps(LoTempIndex+1) - this->ViscTemps(LoTempIndex)); ReturnValue = this->ViscValues(LoTempIndex) + TempInterpRatio * (this->ViscValues(LoTempIndex+1) - this->ViscValues(LoTempIndex)); } @@ -5525,7 +4552,7 @@ namespace FluidProperties { "{C}"); } - if (error == GlycolError::ViscosityHigh) { + else if (error == GlycolError::ViscosityHigh) { if (df->glycolErrorLimits[(int)error] <= df->GlycolErrorLimitTest) { ShowWarningMessage(state, format("{}: Temperature is out of range (too high) for fluid [{}] viscosity **", routineName, this->Name)); ShowContinueError(state, @@ -5558,24 +4585,7 @@ namespace FluidProperties { std::string_view const CalledFrom // routine this function was called from (error messages) ) { - - // FUNCTION INFORMATION: - // AUTHOR Rick Strand - // DATE WRITTEN June 2004 - - // PURPOSE OF THIS FUNCTION: - // This subroutine finds the viscosity for glycols at different - // temperatures. - - // METHODOLOGY EMPLOYED: - // Linear interpolation is used to find viscosity values for a - // particular glycol (water or some mixture of water and another fluid). - // Warnings are given if the point is not clearly in the bounds of the - // glycol data. The value returned is the appropriate limit value. - - // REFERENCES: - // GetFluidPropertiesData: subroutine enforces that temperatures in - // all temperature lists are entered in ascending order. + // This is now just a wrapper for the GlycolProps::getViscosity method auto &df = state.dataFluidProps; @@ -5588,19 +4598,13 @@ namespace FluidProperties { } // Now determine the value of specific heat using interpolation - return df->GlycolData(GlycolIndex).getViscosity(state, Temperature, CalledFrom); + return df->glycols(GlycolIndex)->getViscosity(state, Temperature, CalledFrom); } //***************************************************************************** - void GetInterpValue_error(EnergyPlusData &state) - { - ShowFatalError(state, "GetInterpValue: Temperatures for fluid property data too close together, division by zero"); - } - - int GetRefrigNum(EnergyPlusData &state, std::string_view const name) // carries in substance name + int GetRefrigNum(EnergyPlusData &state, std::string_view const refrigName) // carries in substance name { - // FUNCTION INFORMATION: // AUTHOR Rick Strand // DATE WRITTEN May 2000 @@ -5609,42 +4613,28 @@ namespace FluidProperties { // PURPOSE OF THIS FUNCTION: // This function simply determines the index of the refrigerant named // in the input variable to this routine within the derived type. - - // METHODOLOGY EMPLOYED: - // Just checks to see whether or not the refrigerant name coming in can - // be found in the refrigerant derived type. If so, the function is set - // to the index within the derived type. If the input has not been read - // yet for some reason, that must be done. - - // Check to see if this glycol shows up in the glycol data auto &df = state.dataFluidProps; - if (df->NumOfRefrigerants == 0) { - ShowSevereError(state, "No refrigerants found."); - ShowFatalError(state, "Program terminates due to preceding condition."); - return 0; - } - - int refrigNum = Util::FindItemInList(Util::makeUPPER(name), df->RefrigData); + auto found = std::find_if(df->refrigs.begin(), df->refrigs.end(), + [refrigName](RefrigProps const *refrig) { return refrig->Name == refrigName; }); - if (refrigNum > 0) { - df->RefrigData(refrigNum).used = true; - } + if (found == df->refrigs.end()) return 0; + int refrigNum = (found - df->refrigs.begin()) + 1; + df->refrigs(refrigNum)->used = true; return refrigNum; } - RefrigProps *GetRefrig(EnergyPlusData &state, std::string_view const name) { + RefrigProps *GetRefrig(EnergyPlusData &state, std::string_view const refrigName) { auto &df = state.dataFluidProps; - int refrigNum = GetRefrigNum(state, name); - return (refrigNum > 0) ? &df->RefrigData(refrigNum) : nullptr; + int refrigNum = GetRefrigNum(state, refrigName); + return (refrigNum > 0) ? df->refrigs(refrigNum) : nullptr; } //***************************************************************************** - int GetGlycolNum(EnergyPlusData &state, std::string_view const name) // carries in substance name + int GetGlycolNum(EnergyPlusData &state, std::string_view const glycolName) // carries in substance name { - // FUNCTION INFORMATION: // AUTHOR Rick Strand // DATE WRITTEN May 2000 @@ -5653,36 +4643,43 @@ namespace FluidProperties { // PURPOSE OF THIS FUNCTION: // This function simply determines the index of the glycol named // in the input variable to this routine within the derived type. - - // METHODOLOGY EMPLOYED: - // Just checks to see whether or not the glycol name coming in can - // be found in the glycol derived type. If so, the function is set - // to the index within the derived type. If the input has not been read - // yet for some reason, that must be done. - - // Check to see if this glycol shows up in the glycol data auto &df = state.dataFluidProps; - if (df->NumOfGlycols == 0) { - ShowSevereError(state, "No glycols found."); - ShowFatalError(state, "Program terminates due to preceding condition."); - return 0; - } - int glycolNum = Util::FindItemInList(Util::makeUPPER(name), df->GlycolData, df->NumOfGlycols); + auto found = std::find_if(df->glycols.begin(), df->glycols.end(), + [glycolName](GlycolProps const *glycol) { return glycol->Name == glycolName; }); - if (glycolNum > 0) { - df->GlycolData(glycolNum).used = true; - } + if (found == df->glycols.end()) return 0; + int glycolNum = (found - df->glycols.begin()) + 1; + df->glycols(glycolNum)->used = true; return glycolNum; } GlycolProps *GetGlycol(EnergyPlusData &state, std::string_view const glycolName) { auto &df = state.dataFluidProps; int glycolNum = GetGlycolNum(state, glycolName); - return (glycolNum > 0) ? &df->GlycolData(glycolNum) : nullptr; + return (glycolNum > 0) ? df->glycols(glycolNum) : nullptr; + } + + int GetGlycolRawNum(EnergyPlusData &state, std::string_view const glycolRawName) // carries in substance name + { + auto &df = state.dataFluidProps; + + auto found = std::find_if(df->glycolsRaw.begin(), df->glycolsRaw.end(), + [glycolRawName](GlycolRawProps const *glycolRaw) { return glycolRaw->Name == glycolRawName; }); + + if (found == df->glycolsRaw.end()) return 0; + + int glycolRawNum = (found - df->glycolsRaw.begin()) + 1; + return glycolRawNum; } + GlycolRawProps *GetGlycolRaw(EnergyPlusData &state, std::string_view const glycolRawName) { + auto &df = state.dataFluidProps; + int glycolRawNum = GetGlycolRawNum(state, glycolRawName); + return (glycolRawNum > 0) ? df->glycolsRaw(glycolRawNum) : nullptr; + } + //***************************************************************************** std::string GetGlycolNameByIndex(EnergyPlusData &state, int const Idx) // carries in substance index @@ -5707,8 +4704,8 @@ namespace FluidProperties { // ArrayLength = SIZE(GlycolData) auto &df = state.dataFluidProps; - if (Idx > 0 && Idx <= df->NumOfGlycols) { - return df->GlycolData(Idx).Name; + if (Idx > 0 && Idx <= df->glycols.isize()) { + return df->glycols(Idx)->Name; } else { // return blank - error checking in calling proceedure return ""; } @@ -5906,8 +4903,8 @@ namespace FluidProperties { //***************************************************************************** - int CheckFluidPropertyName(EnergyPlusData &state, - std::string const &NameToCheck) // Name from input(?) to be checked against valid FluidPropertyNames + bool CheckFluidPropertyName(EnergyPlusData &state, + std::string const &name) // Name from input(?) to be checked against valid FluidPropertyNames { // FUNCTION INFORMATION: @@ -5918,16 +4915,13 @@ namespace FluidProperties { // This function checks on an input fluid property to make sure it is valid. auto &df = state.dataFluidProps; - // Item must be either in Refrigerant or Glycol list - int Found = 0; - if (df->NumOfRefrigerants > 0) { - Found = Util::FindItemInList(NameToCheck, df->RefrigData); - } - if (Found == 0 && df->NumOfGlycols > 0) { - Found = Util::FindItemInList(NameToCheck, df->GlycolData, df->NumOfGlycols); // GlycolData is allocated to NumOfGlyConcs - } + auto foundRefrig = std::find_if(df->refrigs.begin(), df->refrigs.end(), [name](RefrigProps const *refrig){ return refrig->Name == name; }); + if (foundRefrig != df->refrigs.end()) return true; + + auto foundGlycol = std::find_if(df->glycols.begin(), df->glycols.end(), [name](GlycolProps const *glycol){ return glycol->Name == name; }); + if (foundGlycol != df->glycols.end()) return true; - return Found; + return false; } void ReportOrphanFluids(EnergyPlusData &state) @@ -5946,16 +4940,16 @@ namespace FluidProperties { auto &df = state.dataFluidProps; - for (int Item = 1; Item <= df->NumOfRefrigerants; ++Item) { - if (df->RefrigData(Item).used) continue; - if (Util::SameString(df->RefrigData(Item).Name, Steam)) continue; + for (auto const *refrig : df->refrigs) { + if (refrig->used) continue; + if (refrig->Name == "STEAM") continue; if (NeedOrphanMessage && state.dataGlobal->DisplayUnusedObjects) { ShowWarningError(state, "The following fluid names are \"Unused Fluids\". These fluids are in the idf"); ShowContinueError(state, " file but are never obtained by the simulation and therefore are NOT used."); NeedOrphanMessage = false; } if (state.dataGlobal->DisplayUnusedObjects) { - ShowMessage(state, format("Refrigerant={}", df->RefrigData(Item).Name)); + ShowMessage(state, format("Refrigerant={}", refrig->Name)); } else { ++NumUnusedRefrig; } @@ -5963,18 +4957,18 @@ namespace FluidProperties { int NumUnusedGlycol = 0; - for (int Item = 1; Item <= df->NumOfGlycols; ++Item) { - if (df->GlycolData(Item).used) continue; - if (Util::SameString(df->GlycolData(Item).Name, Water)) continue; - if (Util::SameString(df->GlycolData(Item).Name, EthyleneGlycol)) continue; - if (Util::SameString(df->GlycolData(Item).Name, PropyleneGlycol)) continue; + for (auto const *glycol : df->glycols) { + if (glycol->used) continue; + if (glycol->Name == "WATER") continue; + if (glycol->Name == "ETHYLENEGLYCOL") continue; + if (glycol->Name == "PROPYLENEGLYCOL") continue; if (NeedOrphanMessage && state.dataGlobal->DisplayUnusedObjects) { ShowWarningError(state, "The following fluid names are \"Unused Fluids\". These fluids are in the idf"); ShowContinueError(state, " file but are never obtained by the simulation and therefore are NOT used."); NeedOrphanMessage = false; } if (state.dataGlobal->DisplayUnusedObjects) { - ShowMessage(state, format("Glycol={}", df->GlycolData(Item).Name)); + ShowMessage(state, format("Glycol={}", glycol->Name)); } else { ++NumUnusedGlycol; } @@ -5992,8 +4986,8 @@ namespace FluidProperties { { if (FluidIndex > 0) { auto &df = state.dataFluidProps; - MinTempLimit = df->GlycolData(FluidIndex).RhoLowTempValue; - MaxTempLimit = df->GlycolData(FluidIndex).RhoHighTempValue; + MinTempLimit = df->glycols(FluidIndex)->RhoLowTempValue; + MaxTempLimit = df->glycols(FluidIndex)->RhoHighTempValue; } } @@ -6001,8 +4995,8 @@ namespace FluidProperties { { if (FluidIndex > 0) { auto &df = state.dataFluidProps; - MinTempLimit = df->GlycolData(FluidIndex).CpLowTempValue; - MaxTempLimit = df->GlycolData(FluidIndex).CpHighTempValue; + MinTempLimit = df->glycols(FluidIndex)->CpLowTempValue; + MaxTempLimit = df->glycols(FluidIndex)->CpHighTempValue; } } diff --git a/src/EnergyPlus/FluidProperties.hh b/src/EnergyPlus/FluidProperties.hh index 7e5fd99334a..5c4862c0d18 100644 --- a/src/EnergyPlus/FluidProperties.hh +++ b/src/EnergyPlus/FluidProperties.hh @@ -69,30 +69,6 @@ struct EnergyPlusData; namespace FluidProperties { - int constexpr EthyleneGlycolIndex = -2; - int constexpr PropyleneGlycolIndex = -1; - - constexpr int DefaultNumGlyTemps(33); // Temperature dimension of default glycol data - constexpr int DefaultNumGlyConcs(10); // Concentration dimension of default glycol data - constexpr int DefaultNumSteamTemps(111); // Temperature dimension of default steam data. - constexpr int DefaultNumSteamSuperheatedTemps(114); // Temperature dimension of default steam data. - constexpr int DefaultNumSteamSuperheatedPressure(114); // Temperature dimension of default steam data. - - constexpr static std::string_view Refrig("REFRIGERANT"); - constexpr static std::string_view Glycol("GLYCOL"); - constexpr static std::string_view Pressure("PRESSURE"); - constexpr static std::string_view Enthalpy("ENTHALPY"); - constexpr static std::string_view Density("DENSITY"); - constexpr static std::string_view SpecificHeat("SPECIFICHEAT"); - constexpr static std::string_view Conductivity("CONDUCTIVITY"); - constexpr static std::string_view Viscosity("VISCOSITY"); - constexpr static std::string_view Fluid("FLUID"); - constexpr static std::string_view GasFluid("FLUIDGAS"); - constexpr static std::string_view Water("Water"); - constexpr static std::string_view Steam("Steam"); - constexpr static std::string_view EthyleneGlycol("EthyleneGlycol"); - constexpr static std::string_view PropyleneGlycol("PropyleneGlycol"); - #ifdef EP_cache_GlycolSpecificHeat int constexpr t_sh_cache_size = 1024 * 1024; int constexpr t_sh_precision_bits = 24; @@ -124,6 +100,9 @@ namespace FluidProperties { int Num = 0; bool used = false; + std::string satTempArrayName; // Array of saturated temperature points, must be same for all properties + std::string supTempArrayName; // Array of superheated temperature points, must be same for all properties + int NumPsPoints = 0; // Number of saturation pressure Real64 PsLowTempValue = 0.0; // Low Temperature Value for Ps (>0.0) Real64 PsHighTempValue = 0.0; // High Temperature Value for Ps (max in tables) @@ -135,7 +114,8 @@ namespace FluidProperties { int PsHighPresIndex = 0; // High Pressure Max Index for Ps (>0.0) Array1D PsTemps; // Temperatures for saturation pressures Array1D PsValues; // Saturation pressures at PsTemps - + Array1D PsTempRatios; // PsTempRatios(i) = (PsValues(i+1) - PsValues(i)) / (PsTemps(i+1) - PsTemps(i)). Speed optimization. + int NumHPoints = 0; // Number of enthalpy points Real64 HfLowTempValue = 0.0; // Low Temperature Value for Hf (>0.0) Real64 HfHighTempValue = 0.0; // High Temperature Value for Hf (max in tables) @@ -148,7 +128,9 @@ namespace FluidProperties { Array1D HTemps; // Temperatures for enthalpy points Array1D HfValues; // Enthalpy of saturated fluid at HTemps Array1D HfgValues; // Enthalpy of saturated fluid/gas at HTemps - + Array1D HfTempRatios; + Array1D HfgTempRatios; + int NumCpPoints = 0; // Number of specific heat of fluid points Real64 CpfLowTempValue = 0.0; // Low Temperature Value for Cpf (>0.0) Real64 CpfHighTempValue = 0.0; // High Temperature Value for Cpf (max in tables) @@ -161,7 +143,9 @@ namespace FluidProperties { Array1D CpTemps; // Temperatures for specific heat points Array1D CpfValues; // Specific heat of saturated fluid at CpTemps Array1D CpfgValues; // Specific heat of saturated fluid/gas at CpTemps - + Array1D CpfTempRatios; + Array1D CpfgTempRatios; + int NumRhoPoints = 0; // Number of density of fluid points Real64 RhofLowTempValue = 0.0; // Low Temperature Value for Rhof (>0.0) Real64 RhofHighTempValue = 0.0; // High Temperature Value for Rhof (max in tables) @@ -174,11 +158,13 @@ namespace FluidProperties { Array1D RhoTemps; // Temperatures for density of fluid points Array1D RhofValues; // Density of saturated fluid at RhoTemps Array1D RhofgValues; // Density of saturated fluid/gas at RhoTemps - - int NumSuperTempPts = 0; // Number of temperature points for superheated enthalpy - int NumSuperPressPts = 0; // Number of pressure points for superheated enthalpy - Array1D SHTemps; // Temperatures for superheated gas - Array1D SHPress; // Pressures for superheated gas + Array1D RhofTempRatios; + Array1D RhofgTempRatios; + + int NumSupTempPoints = 0; // Number of temperature points for superheated enthalpy + int NumSupPressPoints = 0; // Number of pressure points for superheated enthalpy + Array1D SupTemps; // Temperatures for superheated gas + Array1D SupPress; // Pressures for superheated gas Array2D HshValues; // Enthalpy of superheated gas at HshTemps, HshPress Array2D RhoshValues; // Density of superheated gas at HshTemps, HshPress @@ -254,31 +240,35 @@ namespace FluidProperties { // Members std::string Name; // Name of the glycol int Num = 0; - + + std::string CpTempArrayName; bool CpDataPresent = false; // Flag set when specific heat data is available - int NumCpTempPts = 0; // Number of temperature points for specific heat - int NumCpConcPts = 0; // Number of concentration points for specific heat + int NumCpTempPoints = 0; // Number of temperature points for specific heat + int NumCpConcPoints = 0; // Number of concentration points for specific heat Array1D CpTemps; // Temperatures for specific heat of glycol Array1D CpConcs; // Concentration for specific heat of glycol Array2D CpValues; // Specific heat data values + std::string RhoTempArrayName; bool RhoDataPresent = false; // Flag set when density data is available - int NumRhoTempPts = 0; // Number of temperature points for density - int NumRhoConcPts = 0; // Number of concentration points for density + int NumRhoTempPoints = 0; // Number of temperature points for density + int NumRhoConcPoints = 0; // Number of concentration points for density Array1D RhoTemps; // Temperatures for density of glycol Array1D RhoConcs; // Concentration for density of glycol Array2D RhoValues; // Density data values + std::string CondTempArrayName; bool CondDataPresent = false; // Flag set when conductivity data is available - int NumCondTempPts = 0; // Number of temperature points for conductivity - int NumCondConcPts = 0; // Number of concentration points for conductivity + int NumCondTempPoints = 0; // Number of temperature points for conductivity + int NumCondConcPoints = 0; // Number of concentration points for conductivity Array1D CondTemps; // Temperatures for conductivity of glycol Array1D CondConcs; // Concentration for conductivity of glycol Array2D CondValues; // conductivity values + std::string ViscTempArrayName; bool ViscDataPresent = false; // Flag set when viscosity data is available - int NumViscTempPts = 0; // Number of temperature points for viscosity - int NumViscConcPts = 0; // Number of concentration points for viscosity + int NumViscTempPoints = 0; // Number of temperature points for viscosity + int NumViscConcPoints = 0; // Number of concentration points for viscosity Array1D ViscTemps; // Temperatures for viscosity of glycol Array1D ViscConcs; // Concentration for viscosity of glycol Array2D ViscValues; // viscosity values @@ -296,43 +286,47 @@ namespace FluidProperties { int BaseGlycolIndex = 0; // Index in user defined glycol data (>0 = index in raw data, // -1=propylene glycol, -2=ethylene glycol) Real64 Concentration = 0.0; // Concentration (if applicable) - + bool CpDataPresent = false; // Flag set when specific heat data is available Real64 CpLowTempValue = 0.0; // Low Temperature Value for Cp (>0.0) Real64 CpHighTempValue = 0.0; // High Temperature Value for Cp (max in tables) int CpLowTempIndex = 0; // Low Temperature Min Index for Cp (>0.0) int CpHighTempIndex = 0; // High Temperature Max Index for Cp (>0.0) - int NumCpTempPts = 0; // Number of temperature points for specific heat + int NumCpTempPoints = 0; // Number of temperature points for specific heat Array1D CpTemps; // Temperatures for specific heat of glycol Array1D CpValues; // Specific heat data values (J/kg-K) - + Array1D CpTempRatios; // Speed optimization + bool RhoDataPresent = false; // Flag set when density data is available - int NumRhoTempPts = 0.0; // Number of temperature points for density + int NumRhoTempPoints = 0.0; // Number of temperature points for density Real64 RhoLowTempValue = 0.0; // Low Temperature Value for Rho (>0.0) Real64 RhoHighTempValue = 0.0; // High Temperature Value for Rho (max in tables) int RhoLowTempIndex = 0; // Low Temperature Min Index for Rho (>0.0) int RhoHighTempIndex = 0; // High Temperature Max Index for Rho (>0.0) Array1D RhoTemps; // Temperatures for density of glycol Array1D RhoValues; // Density data values (kg/m3) - + Array1D RhoTempRatios; // Speed optimization + bool CondDataPresent = false; // Flag set when conductivity data is available - int NumCondTempPts = 0; // Number of temperature points for conductivity + int NumCondTempPoints = 0; // Number of temperature points for conductivity Real64 CondLowTempValue = 0.0; // Low Temperature Value for Cond (>0.0) Real64 CondHighTempValue = 0.0; // High Temperature Value for Cond (max in tables) int CondLowTempIndex = 0; // Low Temperature Min Index for Cond (>0.0) int CondHighTempIndex = 0; // High Temperature Max Index for Cond (>0.0) Array1D CondTemps; // Temperatures for conductivity of glycol Array1D CondValues; // conductivity values (W/m-K) - + Array1D CondTempRatios; // Speed optimization + bool ViscDataPresent = false; // Flag set when viscosity data is available - int NumViscTempPts = 0; // Number of temperature points for viscosity + int NumViscTempPoints = 0; // Number of temperature points for viscosity Real64 ViscLowTempValue = 0.0; // Low Temperature Value for Visc (>0.0) Real64 ViscHighTempValue = 0.0; // High Temperature Value for Visc (max in tables) int ViscLowTempIndex = 0; // Low Temperature Min Index for Visc (>0.0) int ViscHighTempIndex = 0; // High Temperature Max Index for Visc (>0.0) Array1D ViscTemps; // Temperatures for viscosity of glycol Array1D ViscValues; // viscosity values (mPa-s) - + Array1D ViscTempRatios; + std::array errors; #ifdef EP_cache_GlycolSpecificHeat @@ -506,48 +500,12 @@ namespace FluidProperties { std::string_view CalledFrom // routine this function was called from (error messages) ); - void GetInterpValue_error(EnergyPlusData &state); - - inline Real64 GetInterpValue(EnergyPlusData &state, - Real64 const Tact, // actual temperature at which we want the property of interest + inline Real64 GetInterpValue(Real64 const Tact, // actual temperature at which we want the property of interest Real64 const Tlo, // temperature below Tact for which we have property data Real64 const Thi, // temperature above Tact for which we have property data Real64 const Xlo, // value of property at Tlo Real64 const Xhi // value of property at Thi ) - { - // FUNCTION INFORMATION: - // AUTHOR Rick Strand - // DATE WRITTEN June 2004 - // MODIFIED N/A - // RE-ENGINEERED N/A - - // PURPOSE OF THIS FUNCTION: - // This subroutine does a simple linear interpolation. - - // METHODOLOGY EMPLOYED: - // No mysteries here...just plain-old linear interpolation. - - // REFERENCES: - // Any basic engineering mathematic text. - - // SUBROUTINE PARAMETER DEFINITIONS: - Real64 constexpr TempToler(0.001); // Some reasonable value for comparisons - - if (std::abs(Thi - Tlo) > TempToler) { - return Xhi - (((Thi - Tact) / (Thi - Tlo)) * (Xhi - Xlo)); - } else { - GetInterpValue_error(state); - return 0.0; - } - } - - inline Real64 GetInterpValue_fast(Real64 const Tact, // actual temperature at which we want the property of interest - Real64 const Tlo, // temperature below Tact for which we have property data - Real64 const Thi, // temperature above Tact for which we have property data - Real64 const Xlo, // value of property at Tlo - Real64 const Xhi // value of property at Thi - ) { return Xhi - (((Thi - Tact) / (Thi - Tlo)) * (Xhi - Xlo)); } @@ -555,9 +513,12 @@ namespace FluidProperties { int GetRefrigNum(EnergyPlusData &state, std::string_view name); RefrigProps *GetRefrig(EnergyPlusData &state, std::string_view name); + int GetGlycolRawNum(EnergyPlusData &state, std::string_view name); + GlycolRawProps *GetGlycolRaw(EnergyPlusData &state, std::string_view name); + int GetGlycolNum(EnergyPlusData &state, std::string_view name); GlycolProps *GetGlycol(EnergyPlusData &state, std::string_view name); - + std::string GetGlycolNameByIndex(EnergyPlusData &state, int Idx); // carries in substance index int FindArrayIndex(Real64 Value, // Value to be placed/found within the array of values @@ -581,7 +542,7 @@ namespace FluidProperties { int UpperBound // Valid values upper bound (set by calling program) ); - int CheckFluidPropertyName(EnergyPlusData &state, + bool CheckFluidPropertyName(EnergyPlusData &state, std::string const &NameToCheck); // Name from input(?) to be checked against valid FluidPropertyNames void ReportOrphanFluids(EnergyPlusData &state); @@ -624,17 +585,14 @@ namespace FluidProperties { struct FluidData : BaseGlobalStruct { - - int NumOfRefrigerants = 0; // Total number of refrigerants input by user - int NumOfGlycols = 0; // Total number of glycols input by user bool DebugReportGlycols = false; bool DebugReportRefrigerants = false; int GlycolErrorLimitTest = 1; // how many times error is printed with details before recurring called int RefrigErrorLimitTest = 1; // how many times error is printed with details before recurring called - Array1D RefrigData; - Array1D GlyRawData; - Array1D GlycolData; + Array1D refrigs; + Array1D glycolsRaw; + Array1D glycols; std::array glycolErrorLimits = {0, 0, 0, 0, 0, 0, 0, 0}; @@ -656,6 +614,11 @@ struct FluidData : BaseGlobalStruct void clear_state() override { + + for (int i = 1; i <= refrigs.isize(); ++i) delete refrigs(i); + for (int i = 1; i <= glycolsRaw.isize(); ++i) delete refrigs(i); + for (int i = 1; i <= glycols.isize(); ++i) delete refrigs(i); + new (this) FluidData(); } }; diff --git a/src/EnergyPlus/NodeInputManager.cc b/src/EnergyPlus/NodeInputManager.cc index 5f67b91ad73..51032f8fe45 100644 --- a/src/EnergyPlus/NodeInputManager.cc +++ b/src/EnergyPlus/NodeInputManager.cc @@ -1143,7 +1143,7 @@ void CalcMoreNodeInfo(EnergyPlusData &state) } else if (state.dataLoopNodes->Node(iNode).FluidType == DataLoopNode::NodeFluidType::Water) { if (!((state.dataLoopNodes->Node(iNode).FluidIndex > 0) && - (state.dataLoopNodes->Node(iNode).FluidIndex <= state.dataFluidProps->NumOfGlycols))) { + (state.dataLoopNodes->Node(iNode).FluidIndex <= state.dataFluidProps->glycols.isize()))) { rho = RhoWaterStdInit; rhoStd = RhoWaterStdInit; Cp = CPCW(state.dataLoopNodes->Node(iNode).Temp); diff --git a/src/EnergyPlus/OutdoorAirUnit.cc b/src/EnergyPlus/OutdoorAirUnit.cc index afb905ad6e3..1715d43cb75 100644 --- a/src/EnergyPlus/OutdoorAirUnit.cc +++ b/src/EnergyPlus/OutdoorAirUnit.cc @@ -717,7 +717,7 @@ namespace OutdoorAirUnit { thisOutAirUnit.OAEquip(CompNum).MinVolWaterFlow = 0.0; // below: no extra error needed if steam properties not in input // file because getting the steam coil will have done that. - thisOutAirUnit.OAEquip(CompNum).FluidIndex = FluidProperties::GetRefrigNum(state, "Steam"); + thisOutAirUnit.OAEquip(CompNum).FluidIndex = FluidProperties::GetRefrigNum(state, "STEAM"); break; } case CompType::WaterCoil_DetailedCool: { diff --git a/src/EnergyPlus/PoweredInductionUnits.cc b/src/EnergyPlus/PoweredInductionUnits.cc index a763942ed5e..b293743f045 100644 --- a/src/EnergyPlus/PoweredInductionUnits.cc +++ b/src/EnergyPlus/PoweredInductionUnits.cc @@ -323,7 +323,7 @@ void GetPIUs(EnergyPlusData &state) } case HtgCoilType::SteamAirHeating: { thisPIU.HCoil_PlantType = DataPlant::PlantEquipmentType::CoilSteamAirHeating; - thisPIU.HCoil_FluidIndex = FluidProperties::GetRefrigNum(state, "Steam"); + thisPIU.HCoil_FluidIndex = FluidProperties::GetRefrigNum(state, "STEAM"); if (thisPIU.HCoil_FluidIndex == 0) { ShowSevereError(state, format("{} Steam Properties for {} not found.", RoutineName, thisPIU.Name)); if (SteamMessageNeeded) { diff --git a/src/EnergyPlus/SteamBaseboardRadiator.cc b/src/EnergyPlus/SteamBaseboardRadiator.cc index 089fd60f2db..aa6203b7481 100644 --- a/src/EnergyPlus/SteamBaseboardRadiator.cc +++ b/src/EnergyPlus/SteamBaseboardRadiator.cc @@ -779,7 +779,7 @@ namespace SteamBaseboardRadiator { } if (state.dataSteamBaseboardRadiator->SteamIndex == 0 && BaseboardNum == 1) { - state.dataSteamBaseboardRadiator->SteamIndex = FluidProperties::GetRefrigNum(state, "Steam"); + state.dataSteamBaseboardRadiator->SteamIndex = FluidProperties::GetRefrigNum(state, "STEAM"); if (state.dataSteamBaseboardRadiator->SteamIndex == 0) { ShowSevereError(state, format("{}Steam Properties for {} not found.", RoutineName, state.dataIPShortCut->cAlphaArgs(1))); if (SteamMessageNeeded) ShowContinueError(state, "Steam Fluid Properties should have been included in the input file."); diff --git a/src/EnergyPlus/SteamCoils.cc b/src/EnergyPlus/SteamCoils.cc index 1a08fa67b76..0067af18d0a 100644 --- a/src/EnergyPlus/SteamCoils.cc +++ b/src/EnergyPlus/SteamCoils.cc @@ -370,7 +370,7 @@ namespace SteamCoils { TestCompSet(state, CurrentModuleObject, AlphArray(1), AlphArray(5), AlphArray(6), "Air Nodes"); if (state.dataSteamCoils->SteamIndex == 0 && CoilNum == 1) { - state.dataSteamCoils->SteamIndex = FluidProperties::GetRefrigNum(state, "Steam"); + state.dataSteamCoils->SteamIndex = FluidProperties::GetRefrigNum(state, "STEAM"); if (state.dataSteamCoils->SteamIndex == 0) { ShowSevereError(state, format("{}Steam Properties for {} not found.", RoutineName, AlphArray(1))); ShowContinueError(state, "Steam Fluid Properties should have been included in the input file."); diff --git a/src/EnergyPlus/VentilatedSlab.cc b/src/EnergyPlus/VentilatedSlab.cc index b9527e64936..3b10ee75a21 100644 --- a/src/EnergyPlus/VentilatedSlab.cc +++ b/src/EnergyPlus/VentilatedSlab.cc @@ -1050,7 +1050,7 @@ namespace VentilatedSlab { } case HeatingCoilType::Steam: { ventSlab.heatingCoilType = DataPlant::PlantEquipmentType::CoilSteamAirHeating; - ventSlab.heatingCoil_FluidIndex = FluidProperties::GetRefrigNum(state, "Steam"); + ventSlab.heatingCoil_FluidIndex = FluidProperties::GetRefrigNum(state, "STEAM"); if (ventSlab.heatingCoil_FluidIndex == 0) { ShowSevereError(state, format("{}=\"{}Steam Properties not found.", CurrentModuleObject, ventSlab.Name)); if (SteamMessageNeeded) ShowContinueError(state, "Steam Fluid Properties should have been included in the input file."); diff --git a/tst/EnergyPlus/unit/Fixtures/EnergyPlusFixture.cc b/tst/EnergyPlus/unit/Fixtures/EnergyPlusFixture.cc index ed764ee68ce..f3da433eec1 100644 --- a/tst/EnergyPlus/unit/Fixtures/EnergyPlusFixture.cc +++ b/tst/EnergyPlus/unit/Fixtures/EnergyPlusFixture.cc @@ -360,7 +360,6 @@ bool EnergyPlusFixture::process_idf(std::string_view const idf_snippet, bool use inputProcessor->initializeMaps(); SimulationManager::PostIPProcessing(*state); - FluidProperties::GetFluidPropertiesData(*state); state->init_state(*state); if (state->dataSQLiteProcedures->sqlite) { diff --git a/tst/EnergyPlus/unit/HVACVariableRefrigerantFlow.unit.cc b/tst/EnergyPlus/unit/HVACVariableRefrigerantFlow.unit.cc index 39f05583cc0..f26b98a19f8 100644 --- a/tst/EnergyPlus/unit/HVACVariableRefrigerantFlow.unit.cc +++ b/tst/EnergyPlus/unit/HVACVariableRefrigerantFlow.unit.cc @@ -2356,12 +2356,12 @@ TEST_F(EnergyPlusFixture, VRF_FluidTCtrl_VRFOU_Compressor) Curve::GetCurveInput(*state); // read curves // test consecutive call to fluid properties getInput FluidProperties::GetFluidPropertiesData(*state); // read refrigerant properties - EXPECT_EQ(2, state->dataFluidProps->NumOfRefrigerants); - EXPECT_EQ(1, state->dataFluidProps->NumOfGlycols); + EXPECT_EQ(2, state->dataFluidProps->refrigs.isize()); + EXPECT_EQ(1, state->dataFluidProps->glycols.isize()); FluidProperties::GetFluidPropertiesData(*state); // should never happen but if it does it's safe - EXPECT_EQ(2, state->dataFluidProps->NumOfRefrigerants); - EXPECT_EQ(1, state->dataFluidProps->NumOfGlycols); + EXPECT_EQ(2, state->dataFluidProps->refrigs.isize()); + EXPECT_EQ(1, state->dataFluidProps->glycols.isize()); // set up ZoneEquipConfig data state->dataGlobal->NumOfZones = 1; diff --git a/tst/EnergyPlus/unit/PlantUtilities.unit.cc b/tst/EnergyPlus/unit/PlantUtilities.unit.cc index 985eab7d687..edb6bfccb56 100644 --- a/tst/EnergyPlus/unit/PlantUtilities.unit.cc +++ b/tst/EnergyPlus/unit/PlantUtilities.unit.cc @@ -92,12 +92,12 @@ TEST_F(EnergyPlusFixture, TestRegulateCondenserCompFlowReqOp) { // test consecutive call to fluid properties getInput FluidProperties::GetFluidPropertiesData(*state); - EXPECT_EQ(1, state->dataFluidProps->NumOfRefrigerants); - EXPECT_EQ(1, state->dataFluidProps->NumOfGlycols); + EXPECT_EQ(1, state->dataFluidProps->refrigs.isize()); + EXPECT_EQ(1, state->dataFluidProps->glycols.isize()); FluidProperties::GetFluidPropertiesData(*state); // should never happen but if it does it's safe - EXPECT_EQ(1, state->dataFluidProps->NumOfRefrigerants); - EXPECT_EQ(1, state->dataFluidProps->NumOfGlycols); + EXPECT_EQ(1, state->dataFluidProps->refrigs.isize()); + EXPECT_EQ(1, state->dataFluidProps->glycols.isize()); // This test captures all code paths through the RegulateCondenserCompFlowReqOp function // We only need a single component to check here diff --git a/tst/EnergyPlus/unit/SetPointManager.unit.cc b/tst/EnergyPlus/unit/SetPointManager.unit.cc index 0ba7a3af76f..b2786517313 100644 --- a/tst/EnergyPlus/unit/SetPointManager.unit.cc +++ b/tst/EnergyPlus/unit/SetPointManager.unit.cc @@ -189,10 +189,10 @@ TEST_F(EnergyPlusFixture, SetPointManager_DefineReturnWaterChWSetPointManager_Fl ASSERT_TRUE(process_idf(idf_objects)); - EXPECT_EQ(2, state->dataFluidProps->NumOfGlycols); - const auto &thisGlycol = state->dataFluidProps->GlycolData(2); - EXPECT_EQ("ETHYLENEGLYCOL40PERCENT", thisGlycol.Name); - EXPECT_EQ("ETHYLENEGLYCOL", thisGlycol.GlycolName); + EXPECT_EQ(2, state->dataFluidProps->glycols.isize()); + const auto *glycol = state->dataFluidProps->glycols(2); + EXPECT_EQ("ETHYLENEGLYCOL40PERCENT", glycol->Name); + EXPECT_EQ("ETHYLENEGLYCOL", glycol->GlycolName); // Set up the required plant loop data state->dataPlnt->TotNumLoops = 1; diff --git a/tst/EnergyPlus/unit/UnitarySystem.unit.cc b/tst/EnergyPlus/unit/UnitarySystem.unit.cc index ca3e396a734..741c2a7d0dd 100644 --- a/tst/EnergyPlus/unit/UnitarySystem.unit.cc +++ b/tst/EnergyPlus/unit/UnitarySystem.unit.cc @@ -384,7 +384,6 @@ TEST_F(AirloopUnitarySysTest, MultipleWaterCoolingCoilSizing) state->dataPlnt->PlantLoop(1).LoopSide(DataPlant::LoopSideLocation::Demand).Branch(1).Comp(1).Name = state->dataWaterCoils->WaterCoil(CoilNum).Name; state->dataSize->DataWaterLoopNum = 1; - state->dataFluidProps->NumOfGlycols = 1; createCoilSelectionReportObj(*state); WaterCoils::SizeWaterCoil(*state, CoilNum); diff --git a/tst/EnergyPlus/unit/WaterCoils.unit.cc b/tst/EnergyPlus/unit/WaterCoils.unit.cc index 8a6b6d9f3b3..7dade685a33 100644 --- a/tst/EnergyPlus/unit/WaterCoils.unit.cc +++ b/tst/EnergyPlus/unit/WaterCoils.unit.cc @@ -229,7 +229,6 @@ TEST_F(WaterCoilsTest, WaterCoolingCoilSizing) state->dataSize->PlantSizData(1).DeltaT = 5.0; state->dataSize->FinalSysSizing(1).MassFlowAtCoolPeak = state->dataSize->FinalSysSizing(1).DesMainVolFlow * state->dataEnvrn->StdRhoAir; state->dataSize->DataWaterLoopNum = 1; - state->dataFluidProps->NumOfGlycols = 1; createCoilSelectionReportObj(*state); SizeWaterCoil(*state, CoilNum); @@ -465,7 +464,6 @@ TEST_F(WaterCoilsTest, CoilHeatingWaterUASizing) state->dataSize->CurSysNum = 1; state->dataSize->CurOASysNum = 0; state->dataSize->DataWaterLoopNum = 1; - state->dataFluidProps->NumOfGlycols = 1; state->dataWaterCoils->MyUAAndFlowCalcFlag.allocate(1); state->dataWaterCoils->MyUAAndFlowCalcFlag(1) = true; @@ -622,7 +620,6 @@ TEST_F(WaterCoilsTest, CoilHeatingWaterLowAirFlowUASizing) state->dataSize->CurSysNum = 1; state->dataSize->CurOASysNum = 0; state->dataSize->DataWaterLoopNum = 1; - state->dataFluidProps->NumOfGlycols = 1; state->dataWaterCoils->MyUAAndFlowCalcFlag.allocate(1); state->dataWaterCoils->MyUAAndFlowCalcFlag(1) = true; @@ -783,7 +780,6 @@ TEST_F(WaterCoilsTest, CoilHeatingWaterUASizingLowHwaterInletTemp) state->dataSize->CurOASysNum = 0; state->dataSize->DataWaterLoopNum = 1; - state->dataFluidProps->NumOfGlycols = 1; state->dataWaterCoils->MyUAAndFlowCalcFlag.allocate(1); state->dataWaterCoils->MyUAAndFlowCalcFlag(1) = true; @@ -904,7 +900,6 @@ TEST_F(WaterCoilsTest, CoilCoolingWaterSimpleSizing) state->dataSize->PlantSizData(1).DeltaT = 5.0; state->dataSize->DataWaterLoopNum = 1; - state->dataFluidProps->NumOfGlycols = 1; // run water coil sizing createCoilSelectionReportObj(*state); @@ -1023,7 +1018,6 @@ TEST_F(WaterCoilsTest, CoilCoolingWaterDetailedSizing) state->dataSize->PlantSizData(1).ExitTemp = 5.7; state->dataSize->PlantSizData(1).DeltaT = 5.0; state->dataSize->DataWaterLoopNum = 1; - state->dataFluidProps->NumOfGlycols = 1; // run water coil sizing createCoilSelectionReportObj(*state); @@ -1149,7 +1143,6 @@ TEST_F(WaterCoilsTest, CoilCoolingWaterDetailed_WarningMath) state->dataSize->PlantSizData(1).ExitTemp = 5.7; state->dataSize->PlantSizData(1).DeltaT = 5.0; state->dataSize->DataWaterLoopNum = 1; - state->dataFluidProps->NumOfGlycols = 1; OutputReportPredefined::SetPredefinedTables(*state); @@ -1306,7 +1299,6 @@ TEST_F(WaterCoilsTest, CoilHeatingWaterSimpleSizing) state->dataSize->PlantSizData(1).DeltaT = 10.0; state->dataSize->DataWaterLoopNum = 1; - state->dataFluidProps->NumOfGlycols = 1; // run water coil sizing createCoilSelectionReportObj(*state); @@ -1403,7 +1395,6 @@ TEST_F(WaterCoilsTest, HotWaterHeatingCoilAutoSizeTempTest) state->dataSize->CurOASysNum = 0; state->dataSize->DataWaterLoopNum = 1; - state->dataFluidProps->NumOfGlycols = 1; state->dataWaterCoils->MyUAAndFlowCalcFlag.allocate(1); state->dataWaterCoils->MyUAAndFlowCalcFlag(1) = true; diff --git a/tst/EnergyPlus/unit/WaterThermalTanks.unit.cc b/tst/EnergyPlus/unit/WaterThermalTanks.unit.cc index bb679982bd0..1051cfd24d1 100644 --- a/tst/EnergyPlus/unit/WaterThermalTanks.unit.cc +++ b/tst/EnergyPlus/unit/WaterThermalTanks.unit.cc @@ -771,7 +771,7 @@ TEST_F(EnergyPlusFixture, HPWHEnergyBalance) state->dataWaterThermalTanks->mdotAir = 0.0993699992873531; int GlycolIndex = 0; - const Real64 Cp = FluidProperties::GetSpecificHeatGlycol(*state, FluidProperties::Water, Tank.TankTemp, GlycolIndex, "HPWHEnergyBalance"); + const Real64 Cp = FluidProperties::GetSpecificHeatGlycol(*state, "WATER", Tank.TankTemp, GlycolIndex, "HPWHEnergyBalance"); Tank.CalcHeatPumpWaterHeater(*state, false); diff --git a/tst/EnergyPlus/unit/WaterToAirHeatPump.unit.cc b/tst/EnergyPlus/unit/WaterToAirHeatPump.unit.cc index 006dcb4754e..53008112825 100644 --- a/tst/EnergyPlus/unit/WaterToAirHeatPump.unit.cc +++ b/tst/EnergyPlus/unit/WaterToAirHeatPump.unit.cc @@ -137,63 +137,64 @@ TEST_F(EnergyPlusFixture, WaterToAirHeatPumpTest_SimWaterToAir) ASSERT_TRUE(process_idf(idf_objects)); - state->dataFluidProps->RefrigData.allocate(1); - auto &refrig = state->dataFluidProps->RefrigData(1); - refrig.Name = "R22"; - refrig.Num = 1; - refrig.PsLowTempIndex = 1; - refrig.PsHighTempIndex = 2; - refrig.PsTemps.allocate(2); - refrig.PsTemps(1) = -157.42; - refrig.PsTemps(2) = 96.145; - refrig.PsValues.allocate(2); - refrig.PsValues(1) = 0.3795; - refrig.PsValues(2) = 4990000.0; - - refrig.HfLowTempIndex = 1; - refrig.HfHighTempIndex = 2; - refrig.PsLowPresIndex = 1; - refrig.PsHighPresIndex = 2; - refrig.HTemps.allocate(2); - refrig.HfValues.allocate(2); - refrig.HfgValues.allocate(2); - - refrig.HTemps(1) = -157.42; - refrig.HTemps(2) = 96.145; - refrig.HfValues(1) = 29600.0; - refrig.HfValues(2) = 366900.0; - refrig.HfgValues(1) = 332700.0; - refrig.HfgValues(2) = 366900.0; - refrig.NumSuperTempPts = 2; - refrig.NumSuperPressPts = 2; - refrig.SHTemps.allocate(2); - refrig.SHPress.allocate(2); - refrig.SHTemps(1) = -157.15; - refrig.SHTemps(2) = 152.85; - refrig.SHPress(1) = 0.4043; - refrig.SHPress(2) = 16500000.0; - refrig.HshValues.allocate(2, 2); - refrig.HshValues(1, 1) = 332800.0; - refrig.HshValues(1, 2) = 537000.0; - refrig.HshValues(2, 1) = 332800.0; - refrig.HshValues(2, 2) = 537000.0; - refrig.RhoshValues.allocate(2, 2); - refrig.RhoshValues(1, 1) = 0.00003625; - refrig.RhoshValues(1, 2) = 0.0; - refrig.RhoshValues(2, 1) = 0.00003625; - refrig.RhoshValues(2, 2) = 0.0; - - refrig.RhofLowTempIndex = 1; - refrig.RhofHighTempIndex = 2; - refrig.RhoTemps.allocate(2); - refrig.RhoTemps(1) = -157.42; - refrig.RhoTemps(2) = 96.145; - refrig.RhofValues.allocate(2); - refrig.RhofValues(1) = 1721.0; - refrig.RhofValues(2) = 523.8; - refrig.RhofgValues.allocate(2); - refrig.RhofgValues(1) = 0.341; - refrig.RhofgValues(2) = 523.8; + auto *refrig = new FluidProperties::RefrigProps; + refrig->Name = "R22"; + state->dataFluidProps->refrigs.push_back(refrig); + refrig->Num = state->dataFluidProps->refrigs.isize(); + + refrig->PsLowTempIndex = 1; + refrig->PsHighTempIndex = 2; + refrig->PsTemps.allocate(2); + refrig->PsTemps(1) = -157.42; + refrig->PsTemps(2) = 96.145; + refrig->PsValues.allocate(2); + refrig->PsValues(1) = 0.3795; + refrig->PsValues(2) = 4990000.0; + + refrig->HfLowTempIndex = 1; + refrig->HfHighTempIndex = 2; + refrig->PsLowPresIndex = 1; + refrig->PsHighPresIndex = 2; + refrig->HTemps.allocate(2); + refrig->HfValues.allocate(2); + refrig->HfgValues.allocate(2); + + refrig->HTemps(1) = -157.42; + refrig->HTemps(2) = 96.145; + refrig->HfValues(1) = 29600.0; + refrig->HfValues(2) = 366900.0; + refrig->HfgValues(1) = 332700.0; + refrig->HfgValues(2) = 366900.0; + refrig->NumSupTempPoints = 2; + refrig->NumSupPressPoints = 2; + refrig->SupTemps.allocate(2); + refrig->SupPress.allocate(2); + refrig->SupTemps(1) = -157.15; + refrig->SupTemps(2) = 152.85; + refrig->SupPress(1) = 0.4043; + refrig->SupPress(2) = 16500000.0; + refrig->HshValues.allocate(2, 2); + refrig->HshValues(1, 1) = 332800.0; + refrig->HshValues(1, 2) = 537000.0; + refrig->HshValues(2, 1) = 332800.0; + refrig->HshValues(2, 2) = 537000.0; + refrig->RhoshValues.allocate(2, 2); + refrig->RhoshValues(1, 1) = 0.00003625; + refrig->RhoshValues(1, 2) = 0.0; + refrig->RhoshValues(2, 1) = 0.00003625; + refrig->RhoshValues(2, 2) = 0.0; + + refrig->RhofLowTempIndex = 1; + refrig->RhofHighTempIndex = 2; + refrig->RhoTemps.allocate(2); + refrig->RhoTemps(1) = -157.42; + refrig->RhoTemps(2) = 96.145; + refrig->RhofValues.allocate(2); + refrig->RhofValues(1) = 1721.0; + refrig->RhofValues(2) = 523.8; + refrig->RhofgValues.allocate(2); + refrig->RhofgValues(1) = 0.341; + refrig->RhofgValues(2) = 523.8; GetWatertoAirHPInput(*state); @@ -308,5 +309,5 @@ TEST_F(EnergyPlusFixture, WaterToAirHeatPumpTest_SimWaterToAir) // clean up state->dataWaterToAirHeatPump->WatertoAirHP.deallocate(); - state->dataFluidProps->RefrigData.deallocate(); + delete state->dataFluidProps->refrigs(1); } From bf4b914673ff758d4b73cf6694a98f36cf87f864 Mon Sep 17 00:00:00 2001 From: amirroth Date: Sat, 20 Jul 2024 13:48:27 -0400 Subject: [PATCH 43/68] Fix initialization and API issues --- src/EnergyPlus/FluidProperties.cc | 478 ++++++------------ src/EnergyPlus/FluidProperties.hh | 4 +- src/EnergyPlus/SetPointManager.hh | 2 +- src/EnergyPlus/UtilityRoutines.cc | 100 ++++ src/EnergyPlus/UtilityRoutines.hh | 16 + .../ObjexxFCL/src/ObjexxFCL/Array1S.hh | 12 + 6 files changed, 290 insertions(+), 322 deletions(-) diff --git a/src/EnergyPlus/FluidProperties.cc b/src/EnergyPlus/FluidProperties.cc index 41b39fbb56f..1d9880145a8 100644 --- a/src/EnergyPlus/FluidProperties.cc +++ b/src/EnergyPlus/FluidProperties.cc @@ -673,11 +673,11 @@ namespace FluidProperties { refrig->Num = df->refrigs.isize(); } } else if (Alphas(2) == "GLYCOL") { - if (GetGlycolNum(state, Alphas(1)) == 0) { - auto *glycol = new GlycolProps; - glycol->Name = Alphas(1); - df->glycols.push_back(glycol); - glycol->Num = df->glycols.isize(); + if (GetGlycolRawNum(state, Alphas(1)) == 0) { + auto *glycolRaw = new GlycolRawProps; + glycolRaw->Name = Alphas(1); + df->glycolsRaw.push_back(glycolRaw); + glycolRaw->Num = df->glycolsRaw.isize(); } } else { ShowSevereError(state, format("{}: {}=\"{}\", invalid type", routineName, CurrentModuleObject, Alphas(1))); @@ -1044,8 +1044,10 @@ namespace FluidProperties { continue; } - refrig->SupPress.push_back(Numbers(1)); - ++refrig->NumSupPressPoints; + if (std::find(refrig->SupPress.begin(), refrig->SupPress.end(), Numbers(1)) == refrig->SupPress.end()) { + refrig->SupPress.push_back(Numbers(1)); + ++refrig->NumSupPressPoints; + } } // Sort and allocate pressure point arrays @@ -1116,6 +1118,52 @@ namespace FluidProperties { // be produced. // Propylene and ethylene are available by default + auto *waterRaw = new GlycolRawProps; + waterRaw->Name = "WATER"; + + df->glycolsRaw.push_back(waterRaw); + waterRaw->Num = df->glycolsRaw.isize(); + + waterRaw->CpDataPresent = true; + waterRaw->NumCpConcPoints = 1; + waterRaw->NumCpTempPoints = DefaultNumGlyTemps; + waterRaw->CpTemps.allocate(waterRaw->NumCpTempPoints); + waterRaw->CpTemps = DefaultGlycolTemps; + waterRaw->CpConcs.allocate(waterRaw->NumCpConcPoints); + waterRaw->CpConcs = 0.0; + waterRaw->CpValues.allocate(waterRaw->NumCpConcPoints, waterRaw->NumCpTempPoints); + waterRaw->CpValues(1, {1, waterRaw->NumCpTempPoints}) = DefaultWaterCpData; + + waterRaw->RhoDataPresent = true; + waterRaw->NumRhoConcPoints = 1; + waterRaw->NumRhoTempPoints = DefaultNumGlyTemps; + waterRaw->RhoTemps.allocate(waterRaw->NumRhoTempPoints); + waterRaw->RhoTemps = DefaultGlycolTemps; + waterRaw->RhoConcs.allocate(waterRaw->NumRhoConcPoints); + waterRaw->RhoConcs = 0.0; + waterRaw->RhoValues.allocate(waterRaw->NumRhoConcPoints, waterRaw->NumRhoTempPoints); + waterRaw->RhoValues(1, {1, waterRaw->NumRhoTempPoints}) = DefaultWaterRhoData; + + waterRaw->CondDataPresent = true; + waterRaw->NumCondConcPoints = 1; + waterRaw->NumCondTempPoints = DefaultNumGlyTemps; + waterRaw->CondTemps.allocate(waterRaw->NumCondTempPoints); + waterRaw->CondTemps = DefaultGlycolTemps; + waterRaw->CondConcs.allocate(waterRaw->NumCondConcPoints); + waterRaw->CondConcs = 0.0; + waterRaw->CondValues.allocate(waterRaw->NumCondConcPoints, waterRaw->NumCondTempPoints); + waterRaw->CondValues(1, {1, waterRaw->NumCondTempPoints}) = DefaultWaterCondData; + + waterRaw->ViscDataPresent = true; + waterRaw->NumViscConcPoints = 1; + waterRaw->NumViscTempPoints = DefaultNumGlyTemps; + waterRaw->ViscTemps.allocate(waterRaw->NumViscTempPoints); + waterRaw->ViscTemps = DefaultGlycolTemps; + waterRaw->ViscConcs.allocate(waterRaw->NumViscConcPoints); + waterRaw->ViscConcs = 0.0; + waterRaw->ViscValues.allocate(waterRaw->NumViscConcPoints, waterRaw->NumViscTempPoints); + waterRaw->ViscValues(1, {1, waterRaw->NumViscTempPoints}) = DefaultWaterViscData; + auto *ethylene = new GlycolRawProps; ethylene->Name = "ETHYLENEGLYCOL"; df->glycolsRaw.push_back(ethylene); @@ -1126,19 +1174,15 @@ namespace FluidProperties { ethylene->NumCpTempPoints = DefaultNumGlyTemps; // Number of temperature points for specific heat ethylene->NumCpConcPoints = DefaultNumGlyConcs; // Number of concentration points for specific heat - // No ObjexxFCL templates for assigning std::array to Array1S, Probably want to covert these Array1D and 2D to std::vector eventually anyway ethylene->CpTemps.allocate(ethylene->NumCpTempPoints); // Temperatures for specific heat of glycol - for (int i = 1; i <= ethylene->NumCpTempPoints; ++i) - ethylene->CpTemps(i) = DefaultGlycolTemps[i-1]; + ethylene->CpTemps = DefaultGlycolTemps; ethylene->CpConcs.allocate(ethylene->NumCpConcPoints); // Concentration for specific heat of glycol - for (int i = 1; i <= ethylene->NumCpConcPoints; ++i) - ethylene->CpConcs(i) = DefaultGlycolConcs[i-1]; + ethylene->CpConcs = DefaultGlycolConcs; ethylene->CpValues.allocate(ethylene->NumCpConcPoints, ethylene->NumCpTempPoints); // Specific heat data values for (int i = 1; i <= ethylene->NumCpConcPoints; ++i) - for (int j = 1; j <= ethylene->NumCpTempPoints; ++j) - ethylene->CpValues(i, j) = DefaultEthGlyCpData[i-1][j-1]; + ethylene->CpValues(i, {1, ethylene->NumCpTempPoints}) = DefaultEthGlyCpData[i-1]; // Density ethylene->RhoDataPresent = true; @@ -1146,17 +1190,14 @@ namespace FluidProperties { ethylene->NumRhoConcPoints = DefaultNumGlyConcs; ethylene->RhoTemps.allocate(ethylene->NumRhoTempPoints); // Temperatures for density of glycol - for (int i = 1; i <= ethylene->NumRhoTempPoints; ++i) - ethylene->RhoTemps(i) = DefaultGlycolTemps[i-1]; + ethylene->RhoTemps = DefaultGlycolTemps; ethylene->RhoConcs.allocate(ethylene->NumRhoConcPoints); // Concentration for density of glycol - for (int i = 1; i <= ethylene->NumRhoConcPoints; ++i) - ethylene->RhoConcs(i) = DefaultGlycolConcs[i-1]; + ethylene->RhoConcs = DefaultGlycolConcs; ethylene->RhoValues.allocate(ethylene->NumRhoConcPoints, ethylene->NumRhoTempPoints); // Density data values for (int i = 1; i <= ethylene->NumRhoConcPoints; ++i) - for (int j = 1; j <= ethylene->NumRhoTempPoints; ++j) - ethylene->RhoValues(i, j) = DefaultEthGlyRhoData[i-1][j-1]; + ethylene->RhoValues(i, {1, ethylene->NumRhoTempPoints}) = DefaultEthGlyRhoData[i-1]; // Conductivity ethylene->CondDataPresent = true; @@ -1164,17 +1205,14 @@ namespace FluidProperties { ethylene->NumCondConcPoints = DefaultNumGlyConcs; ethylene->CondTemps.allocate(ethylene->NumCondTempPoints); // Temperatures for density of glycol - for (int i = 1; i <= ethylene->NumCondTempPoints; ++i) - ethylene->CondTemps(i) = DefaultGlycolTemps[i-1]; + ethylene->CondTemps = DefaultGlycolTemps; ethylene->CondConcs.allocate(ethylene->NumCondConcPoints); // Concentration for density of glycol - for (int i = 1; i <= ethylene->NumCondConcPoints; ++i) - ethylene->CondConcs(i) = DefaultGlycolConcs[i-1]; + ethylene->CondConcs = DefaultGlycolConcs; ethylene->CondValues.allocate(ethylene->NumCondConcPoints, ethylene->NumCondTempPoints); // Density data values for (int i = 1; i <= ethylene->NumCondConcPoints; ++i) - for (int j = 1; j <= ethylene->NumCondTempPoints; ++j) - ethylene->CondValues(i, j) = DefaultEthGlyCondData[i-1][j-1]; + ethylene->CondValues(i, {1, ethylene->NumCondTempPoints}) = DefaultEthGlyCondData[i-1]; // Viscosity ethylene->ViscDataPresent = true; @@ -1182,17 +1220,14 @@ namespace FluidProperties { ethylene->NumViscConcPoints = DefaultNumGlyConcs; ethylene->ViscTemps.allocate(ethylene->NumViscTempPoints); // Temperatures for density of glycol - for (int i = 1; i <= ethylene->NumViscTempPoints; ++i) - ethylene->ViscTemps(i) = DefaultGlycolTemps[i-1]; + ethylene->ViscTemps = DefaultGlycolTemps; ethylene->ViscConcs.allocate(ethylene->NumViscConcPoints); // Concentration for density of glycol - for (int i = 1; i <= ethylene->NumViscConcPoints; ++i) - ethylene->ViscConcs(i) = DefaultGlycolConcs[i-1]; + ethylene->ViscConcs = DefaultGlycolConcs; ethylene->ViscValues.allocate(ethylene->NumViscConcPoints, ethylene->NumViscTempPoints); // Density data values for (int i = 1; i <= ethylene->NumViscConcPoints; ++i) - for (int j = 1; j <= ethylene->NumViscTempPoints; ++j) - ethylene->ViscValues(i, j) = DefaultEthGlyViscData[i-1][j-1]; + ethylene->ViscValues(i, {1, ethylene->NumViscTempPoints}) = DefaultEthGlyViscData[i-1]; // Propylene auto *propylene = new GlycolRawProps; @@ -1207,17 +1242,14 @@ namespace FluidProperties { // No ObjexxFCL templates for assigning std::array to Array1S, Probably want to covert these Array1D and 2D to std::vector eventually anyway propylene->CpTemps.allocate(propylene->NumCpTempPoints); // Temperatures for specific heat of glycol - for (int i = 1; i <= propylene->NumCpTempPoints; ++i) - propylene->CpTemps(i) = DefaultGlycolTemps[i-1]; + propylene->CpTemps = DefaultGlycolTemps; propylene->CpConcs.allocate(propylene->NumCpConcPoints); // Concentration for specific heat of glycol - for (int i = 1; i <= propylene->NumCpConcPoints; ++i) - propylene->CpConcs(i) = DefaultGlycolConcs[i-1]; + propylene->CpConcs = DefaultGlycolConcs; propylene->CpValues.allocate(propylene->NumCpConcPoints, propylene->NumCpTempPoints); // Specific heat data values for (int i = 1; i <= propylene->NumCpConcPoints; ++i) - for (int j = 1; j <= propylene->NumCpTempPoints; ++j) - propylene->CpValues(i, j) = DefaultPropGlyCpData[i-1][j-1]; + propylene->CpValues(i, {1, propylene->NumCpTempPoints}) = DefaultPropGlyCpData[i-1]; // Density propylene->RhoDataPresent = true; @@ -1225,17 +1257,14 @@ namespace FluidProperties { propylene->NumRhoConcPoints = DefaultNumGlyConcs; propylene->RhoTemps.allocate(propylene->NumRhoTempPoints); // Temperatures for density of glycol - for (int i = 1; i <= propylene->NumRhoTempPoints; ++i) - propylene->RhoTemps(i) = DefaultGlycolTemps[i-1]; + propylene->RhoTemps = DefaultGlycolTemps; propylene->RhoConcs.allocate(propylene->NumRhoConcPoints); // Concentration for density of glycol - for (int i = 1; i <= propylene->NumRhoConcPoints; ++i) - propylene->RhoConcs(i) = DefaultGlycolConcs[i-1]; + propylene->RhoConcs = DefaultGlycolConcs; propylene->RhoValues.allocate(propylene->NumRhoConcPoints, propylene->NumRhoTempPoints); // Density data values for (int i = 1; i <= propylene->NumRhoConcPoints; ++i) - for (int j = 1; j <= propylene->NumRhoTempPoints; ++j) - propylene->RhoValues(i, j) = DefaultPropGlyRhoData[i-1][j-1]; + propylene->RhoValues(i, {1, propylene->NumRhoTempPoints}) = DefaultPropGlyRhoData[i-1]; // Conductivity propylene->CondDataPresent = true; @@ -1243,17 +1272,14 @@ namespace FluidProperties { propylene->NumCondConcPoints = DefaultNumGlyConcs; propylene->CondTemps.allocate(propylene->NumCondTempPoints); // Temperatures for density of glycol - for (int i = 1; i <= propylene->NumCondTempPoints; ++i) - propylene->CondTemps(i) = DefaultGlycolTemps[i-1]; + propylene->CondTemps = DefaultGlycolTemps; propylene->CondConcs.allocate(propylene->NumCondConcPoints); // Concentration for density of glycol - for (int i = 1; i <= propylene->NumCondConcPoints; ++i) - propylene->CondConcs(i) = DefaultGlycolConcs[i-1]; + propylene->CondConcs = DefaultGlycolConcs; propylene->CondValues.allocate(propylene->NumCondConcPoints, propylene->NumCondTempPoints); // Density data values for (int i = 1; i <= propylene->NumCondConcPoints; ++i) - for (int j = 1; j <= propylene->NumCondTempPoints; ++j) - propylene->CondValues(i, j) = DefaultPropGlyCondData[i-1][j-1]; + propylene->CondValues(i, {1, propylene->NumCondTempPoints}) = DefaultPropGlyCondData[i-1]; // Viscosity propylene->ViscDataPresent = true; @@ -1261,17 +1287,14 @@ namespace FluidProperties { propylene->NumViscConcPoints = DefaultNumGlyConcs; propylene->ViscTemps.allocate(propylene->NumViscTempPoints); // Temperatures for density of glycol - for (int i = 1; i <= propylene->NumViscTempPoints; ++i) - propylene->ViscTemps(i) = DefaultGlycolTemps[i-1]; + propylene->ViscTemps = DefaultGlycolTemps; propylene->ViscConcs.allocate(propylene->NumViscConcPoints); // Concentration for density of glycol - for (int i = 1; i <= propylene->NumViscConcPoints; ++i) - propylene->ViscConcs(i) = DefaultGlycolConcs[i-1]; + propylene->ViscConcs = DefaultGlycolConcs; propylene->ViscValues.allocate(propylene->NumViscConcPoints, propylene->NumViscTempPoints); // Density data values for (int i = 1; i <= propylene->NumViscConcPoints; ++i) - for (int j = 1; j <= propylene->NumViscTempPoints; ++j) - propylene->ViscValues(i, j) = DefaultPropGlyViscData[i-1][j-1]; + propylene->ViscValues(i, {1, propylene->NumViscTempPoints}) = DefaultPropGlyViscData[i-1]; CurrentModuleObject = "FluidProperties:Concentration"; @@ -1322,9 +1345,12 @@ namespace FluidProperties { continue; } glycolRaw->CpTempArrayName = Alphas(3); - - glycolRaw->CpConcs.push_back(Numbers(1)); - ++glycolRaw->NumCpConcPoints; + + if (std::find(glycolRaw->CpConcs.begin(), glycolRaw->CpConcs.end(), Numbers(1)) == glycolRaw->CpConcs.end()) { + glycolRaw->CpConcs.push_back(Numbers(1)); + ++glycolRaw->NumCpConcPoints; + } + glycolRaw->CpDataPresent = true; } else if (Alphas(2) == "DENSITY") { if (glycolRaw->RhoTempArrayName != "" && glycolRaw->RhoTempArrayName != Alphas(3)) { @@ -1334,10 +1360,13 @@ namespace FluidProperties { ErrorsFound = true; continue; } - glycolRaw->CpTempArrayName = Alphas(3); + glycolRaw->RhoTempArrayName = Alphas(3); - glycolRaw->RhoConcs.push_back(Numbers(1)); - ++glycolRaw->NumRhoConcPoints; + if (std::find(glycolRaw->RhoConcs.begin(), glycolRaw->RhoConcs.end(), Numbers(1)) == glycolRaw->RhoConcs.end()) { + glycolRaw->RhoConcs.push_back(Numbers(1)); + ++glycolRaw->NumRhoConcPoints; + } + glycolRaw->RhoDataPresent = true; } else if (Alphas(2) == "CONDUCTIVITY") { if (glycolRaw->CondTempArrayName != "" && glycolRaw->CondTempArrayName != Alphas(3)) { @@ -1349,8 +1378,11 @@ namespace FluidProperties { } glycolRaw->CondTempArrayName = Alphas(3); - glycolRaw->CondConcs.push_back(Numbers(1)); - ++glycolRaw->NumCondConcPoints; + if (std::find(glycolRaw->CondConcs.begin(), glycolRaw->CondConcs.end(), Numbers(1)) == glycolRaw->CondConcs.end()) { + glycolRaw->CondConcs.push_back(Numbers(1)); + ++glycolRaw->NumCondConcPoints; + } + glycolRaw->CondDataPresent = true; } else if (Alphas(2) == "VISCOSITY") { if (glycolRaw->ViscTempArrayName != "" && glycolRaw->ViscTempArrayName != Alphas(3)) { @@ -1362,8 +1394,11 @@ namespace FluidProperties { } glycolRaw->ViscTempArrayName = Alphas(3); - glycolRaw->ViscConcs.push_back(Numbers(1)); - ++glycolRaw->NumViscConcPoints; + if (std::find(glycolRaw->ViscConcs.begin(), glycolRaw->ViscConcs.end(), Numbers(1)) == glycolRaw->ViscConcs.end()) { + glycolRaw->ViscConcs.push_back(Numbers(1)); + ++glycolRaw->NumViscConcPoints; + } + glycolRaw->ViscDataPresent = true; } else { ShowSevereInvalidKey(state, eoh, cAlphaFields(2), Alphas(2), @@ -1375,43 +1410,49 @@ namespace FluidProperties { // Allocate and sort temp point/conc point arrays for (auto *glycolRaw : df->glycolsRaw) { - if (glycolRaw->Name == "ETHYLENEGLYCOL" || glycolRaw->Name == "PROPYLENEGLYCOL") continue; + if (!glycolRaw->CpTempArrayName.empty()) { + int cpTempArrayNum = Util::FindItemInList(glycolRaw->CpTempArrayName, FluidTemps); + auto &cpTempArray = FluidTemps(cpTempArrayNum); + glycolRaw->NumCpTempPoints = cpTempArray.NumOfTemps; + glycolRaw->CpTemps.allocate(glycolRaw->NumCpTempPoints); + glycolRaw->CpTemps = cpTempArray.Temps; - int cpTempArrayNum = Util::FindItemInList(glycolRaw->CpTempArrayName, FluidTemps); - auto &cpTempArray = FluidTemps(cpTempArrayNum); - glycolRaw->NumCpTempPoints = cpTempArray.NumOfTemps; - glycolRaw->CpTemps.allocate(glycolRaw->NumCpTempPoints); - glycolRaw->CpTemps = cpTempArray.Temps; - - glycolRaw->CpValues.allocate(glycolRaw->NumCpConcPoints, glycolRaw->NumCpTempPoints); - std::sort(glycolRaw->CpConcs.begin(), glycolRaw->CpConcs.end()); - - int rhoTempArrayNum = Util::FindItemInList(glycolRaw->RhoTempArrayName, FluidTemps); - auto &rhoTempArray = FluidTemps(rhoTempArrayNum); - glycolRaw->NumRhoTempPoints = rhoTempArray.NumOfTemps; - glycolRaw->RhoTemps.allocate(glycolRaw->NumRhoTempPoints); - glycolRaw->RhoTemps = rhoTempArray.Temps; - - glycolRaw->RhoValues.allocate(glycolRaw->NumRhoConcPoints, glycolRaw->NumRhoTempPoints); - std::sort(glycolRaw->RhoConcs.begin(), glycolRaw->RhoConcs.end()); - - int condTempArrayNum = Util::FindItemInList(glycolRaw->CondTempArrayName, FluidTemps); - auto &condTempArray = FluidTemps(condTempArrayNum); - glycolRaw->NumCondTempPoints = condTempArray.NumOfTemps; - glycolRaw->CondTemps.allocate(glycolRaw->NumCondTempPoints); - glycolRaw->CondTemps = condTempArray.Temps; - - glycolRaw->CondValues.allocate(glycolRaw->NumCondConcPoints, glycolRaw->NumCondTempPoints); - std::sort(glycolRaw->CondConcs.begin(), glycolRaw->CondConcs.end()); - - int viscTempArrayNum = Util::FindItemInList(glycolRaw->ViscTempArrayName, FluidTemps); - auto &viscTempArray = FluidTemps(viscTempArrayNum); - glycolRaw->NumViscTempPoints = viscTempArray.NumOfTemps; - glycolRaw->ViscTemps.allocate(glycolRaw->NumViscTempPoints); - glycolRaw->ViscTemps = viscTempArray.Temps; + glycolRaw->CpValues.allocate(glycolRaw->NumCpConcPoints, glycolRaw->NumCpTempPoints); + std::sort(glycolRaw->CpConcs.begin(), glycolRaw->CpConcs.end()); + } - glycolRaw->ViscValues.allocate(glycolRaw->NumViscConcPoints, glycolRaw->NumViscTempPoints); - std::sort(glycolRaw->ViscConcs.begin(), glycolRaw->ViscConcs.end()); + if (!glycolRaw->RhoTempArrayName.empty()) { + int rhoTempArrayNum = Util::FindItemInList(glycolRaw->RhoTempArrayName, FluidTemps); + auto &rhoTempArray = FluidTemps(rhoTempArrayNum); + glycolRaw->NumRhoTempPoints = rhoTempArray.NumOfTemps; + glycolRaw->RhoTemps.allocate(glycolRaw->NumRhoTempPoints); + glycolRaw->RhoTemps = rhoTempArray.Temps; + + glycolRaw->RhoValues.allocate(glycolRaw->NumRhoConcPoints, glycolRaw->NumRhoTempPoints); + std::sort(glycolRaw->RhoConcs.begin(), glycolRaw->RhoConcs.end()); + } + + if (!glycolRaw->CondTempArrayName.empty()) { + int condTempArrayNum = Util::FindItemInList(glycolRaw->CondTempArrayName, FluidTemps); + auto &condTempArray = FluidTemps(condTempArrayNum); + glycolRaw->NumCondTempPoints = condTempArray.NumOfTemps; + glycolRaw->CondTemps.allocate(glycolRaw->NumCondTempPoints); + glycolRaw->CondTemps = condTempArray.Temps; + + glycolRaw->CondValues.allocate(glycolRaw->NumCondConcPoints, glycolRaw->NumCondTempPoints); + std::sort(glycolRaw->CondConcs.begin(), glycolRaw->CondConcs.end()); + } + + if (!glycolRaw->ViscTempArrayName.empty()) { + int viscTempArrayNum = Util::FindItemInList(glycolRaw->ViscTempArrayName, FluidTemps); + auto &viscTempArray = FluidTemps(viscTempArrayNum); + glycolRaw->NumViscTempPoints = viscTempArray.NumOfTemps; + glycolRaw->ViscTemps.allocate(glycolRaw->NumViscTempPoints); + glycolRaw->ViscTemps = viscTempArray.Temps; + + glycolRaw->ViscValues.allocate(glycolRaw->NumViscConcPoints, glycolRaw->NumViscTempPoints); + std::sort(glycolRaw->ViscConcs.begin(), glycolRaw->ViscConcs.end()); + } } // Finally, get the specific heat and concentration values from the user input @@ -1523,7 +1564,7 @@ namespace FluidProperties { auto *water = new GlycolProps; water->Name = "WATER"; - water->GlycolName = ""; + water->GlycolName = "WATER"; water->used = true; // mark Water as always used df->glycols.push_back(water); @@ -1544,7 +1585,6 @@ namespace FluidProperties { water->RhoValues.allocate(water->NumRhoTempPoints); water->CondTemps.allocate(water->NumCondTempPoints); water->CondValues.allocate(water->NumCondTempPoints); - water->CondTempRatios.allocate(water->NumCondTempPoints); water->ViscTemps.allocate(water->NumViscTempPoints); water->ViscValues.allocate(water->NumViscTempPoints); water->CpTemps = DefaultGlycolTemps; @@ -2695,9 +2735,6 @@ namespace FluidProperties { routineName, this->Name), this->errors[(int)RefrigError::SatTemp].index, Temperature, - Temperature, - _, - "{C}", "{C}"); } @@ -2711,17 +2748,7 @@ namespace FluidProperties { std::string_view const CalledFrom // routine this function was called from (error messages) ) { - - // SUBROUTINE INFORMATION: - // AUTHOR Simon Rees - // DATE WRITTEN 24 May 2002 - - // PURPOSE OF THIS FUNCTION: - // This finds the saturation pressure for given temperature. - - // METHODOLOGY EMPLOYED: - // Calls FindArrayIndex to find indices either side of requested temperature - // and linearly interpolates the corresponding saturation pressure values. + // Wrapper for RefrigProps::getSatPressure() auto &df = state.dataFluidProps; if (RefrigIndex == 0) { @@ -2804,9 +2831,6 @@ namespace FluidProperties { format("{}: Saturation pressure is out of range for refrigerant [{}] supplied data: **", routineName, this->Name), this->errors[(int)RefrigError::SatPress].index, Pressure, - Pressure, - _, - "{Pa}", "{Pa}"); } return ReturnValue; @@ -2819,17 +2843,7 @@ namespace FluidProperties { std::string_view const CalledFrom // routine this function was called from (error messages) ) { - - // SUBROUTINE INFORMATION: - // AUTHOR Simon Rees - // DATE WRITTEN 24 May 2002 - - // PURPOSE OF THIS FUNCTION: - // This finds the saturation temperature for given pressure. - - // METHODOLOGY EMPLOYED: - // Calls FindArrayIndex to find indices either side of requested pressure - // and linearly interpolates the corresponding saturation temperature values. + // Wrapper for RefrigProps::getSatTemperature() auto &df = state.dataFluidProps; if (RefrigIndex == 0) { @@ -2879,22 +2893,7 @@ namespace FluidProperties { std::string_view const CalledFrom // routine this function was called from (error messages) ) { - - // SUBROUTINE INFORMATION: - // AUTHOR Mike Turner - // DATE WRITTEN 10 December 99 - // MODIFIED Rick Strand (April 2000, May 2000) - // Simon Rees (May 2002) - - // PURPOSE OF THIS FUNCTION: - // This finds enthalpy for given temperature and a quality under the vapor dome. - // This fucntion is only called with a valid refrigerant and quality between 0 and 1. - - // METHODOLOGY EMPLOYED: - // Calls GetInterpolatedSatProp to linearly interpolate between the saturated - // liquid and vapour enthalpies according to the given quality. - - // FUNCTION LOCAL VARIABLE DECLARATIONS: + // Wrapper for RefrigProps::getSatEnthalpy() auto &df = state.dataFluidProps; if (RefrigIndex == 0) { @@ -3005,9 +3004,6 @@ namespace FluidProperties { format("{}: Saturation temperature is out of range for refrigerant [{}] supplied data: **", routineName, this->Name), this->errors[(int)RefrigError::SatTempDensity].index, Temperature, - Temperature, - _, - "{C}", "{C}"); } return ReturnValue; @@ -3021,21 +3017,7 @@ namespace FluidProperties { std::string_view const CalledFrom // routine this function was called from (error messages) ) { - - // SUBROUTINE INFORMATION: - // AUTHOR Mike Turner - // DATE WRITTEN 10 December 99 - // MODIFIED Rick Strand (April 2000, May 2000) - // Simon Rees (May 2002); Kenneth Tang (Jan 2004) - - // PURPOSE OF THIS SUBROUTINE: - // This finds density for given temperature and a quality under the vapor dome. - // This function is only called with a valid refrigerant and quality between 0 and 1. - - // METHODOLOGY EMPLOYED: - // Calls GetInterpolatedSatProp to linearly interpolate between the saturated - // liquid and vapour densities according to the given quality. - + // Wrapper for RefrigProps::getSatDensity() auto &df = state.dataFluidProps; if (RefrigIndex == 0) { @@ -3103,20 +3085,7 @@ namespace FluidProperties { ) { - // SUBROUTINE INFORMATION: - // AUTHOR Mike Turner - // DATE WRITTEN 10 December 99 - // MODIFIED Rick Strand (April 2000, May 2000) - // Simon Rees (May 2002) - - // PURPOSE OF THIS SUBROUTINE: - // This finds specific heat for given temperature and a quality under the vapor dome. - // This fucntion is only called with a valid refrigerant and quality between 0 and 1. - - // METHODOLOGY EMPLOYED: - // Calls GetInterpolatedSatProp to linearly interpolate between the saturated - // liquid and vapour specific heats according to the given quality. - + // Wrapper for RefrigProps::getSpecificHeat() auto &df = state.dataFluidProps; if (RefrigIndex == 0) { @@ -3277,9 +3246,6 @@ namespace FluidProperties { format("{}: Refrigerant [{}] saturated at the given conditions **", routineName, this->Name), this->errors[(int)RefrigError::SatSupEnthalpy].index, Temperature, - Temperature, - _, - "{C}", "{C}"); } return ReturnValue; @@ -3301,9 +3267,6 @@ namespace FluidProperties { routineName, this->Name), this->errors[(int)RefrigError::SatSupEnthalpyTemp].index, Temperature, - Temperature, - _, - "{C}", "{C}"); } @@ -3322,9 +3285,6 @@ namespace FluidProperties { routineName, this->Name), this->errors[(int)RefrigError::SatSupEnthalpyPress].index, Pressure, - Pressure, - _, - "{Pa}", "{Pa}"); } } // end error checking @@ -3340,30 +3300,7 @@ namespace FluidProperties { std::string_view const CalledFrom // routine this function was called from (error messages) ) { - - // SUBROUTINE INFORMATION: - // AUTHOR Mike Turner - // DATE WRITTEN 10 December 99 - // MODIFIED Rick Strand (April 2000, May 2000) - // MODIFIED Simon Rees (May 2002) - - // PURPOSE OF THIS SUBROUTINE: - // Performs linear interpolation between pressures and temperatures and - // returns enthalpy values. Works only in superheated region. - - // METHODOLOGY EMPLOYED: - // Double linear interpolation is used with enthalpy values at four - // pressure/temperature input points surrounding the given temperature - // and pressure argument values. - // With enthalpy data it is assumed that zero values in the data are in - // the saturated region. Hence, values near the saturation line are - // approximated using the saturation value instead of the zero data value. - // points completely in the saturation region are given the saturation value - // at the given temperature. Points at the upper limits of pressure/temperature - // have the pressure/temperature capped. Warnings are given if the point - // is not clearly in the bounds of the superheated data. - - // FUNCTION PARAMETER DEFINITIONS: + // Wrapper for RefrigProps::getSupHeatEnthalpy() auto &df = state.dataFluidProps; if (RefrigIndex == 0) { @@ -3412,7 +3349,7 @@ namespace FluidProperties { // FUNCTION PARAMETERS: // the enthalpy calculated from the pressure found - static constexpr std::string_view routineName = "GetSupHeatPressureRefrig"; + static constexpr std::string_view routineName = "RefrigProps::getSupHeatPressure"; auto &df = state.dataFluidProps; @@ -3571,9 +3508,6 @@ namespace FluidProperties { format("{}: Refrigerant [{}] saturated at the given enthalpy and temperature **", routineName, this->Name), this->errors[(int)RefrigError::SatSupPress].index, ReturnValue, - ReturnValue, - _, - "{Pa}", "{Pa}"); } @@ -3592,9 +3526,6 @@ namespace FluidProperties { routineName, this->Name), this->errors[(int)RefrigError::SatSupPressTemp].index, Temperature, - Temperature, - _, - "{C}", "{C}"); } @@ -3613,9 +3544,6 @@ namespace FluidProperties { routineName, this->Name), this->errors[(int)RefrigError::SatSupPressEnthalpy].index, Enthalpy, - Enthalpy, - _, - "{J}", "{J}"); } } // end error checking @@ -3632,27 +3560,7 @@ namespace FluidProperties { std::string_view const CalledFrom // routine this function was called from (error messages) ) { - - // SUBROUTINE INFORMATION: - // AUTHOR Rick Strand - // DATE WRITTEN May 2000 - // MODIFIED Simon Rees (May 2002) - - // PURPOSE OF THIS SUBROUTINE: - // Performs linear interpolation between enthalpy and temperatures and - // returns pressure values. Works only in superheated region. - - // METHODOLOGY EMPLOYED: - // Double linear interpolation is used with pressure values at four - // enthalpy/temperature input points surrounding the given temperature - // and enthalpy argument values. - // All enthalpies have to be calculated at the given temperature before a - // search is made for the data adjacent to the given enthalpy. Linear interpolation - // using the enthalpy data is used to interpolate the correspondng pressures. - // Temperatures and enthalpies outside the bounds of the available data are capped - // and warnings given. For enthlpys lower than the saturated vapour value at the - // given temperature result in the saturation pressure being returned (calls to - // GetSatEnthalpy and GetSatPressure are made.) + // Wrapper for RefrigProps::getSupHeatPressure() auto &df = state.dataFluidProps; if (RefrigIndex == 0) { @@ -3692,7 +3600,7 @@ namespace FluidProperties { // FUNCTION PARAMETERS: // the enthalpy calculated from the pressure found - static constexpr std::string_view routineName = "GetSupHeatTempRefrig"; + static constexpr std::string_view routineName = "RefrigProps::getSupHeatTemp"; // SUBROUTINE LOCAL VARIABLE DECLARATIONS: Real64 EnthalpyHigh; // Enthalpy value at interpolated pressure and high temperature @@ -3777,16 +3685,7 @@ namespace FluidProperties { std::string_view const CalledFrom // routine this function was called from (error messages) ) { - // SUBROUTINE INFORMATION: - // AUTHOR Rongpeng Zhang - // DATE WRITTEN Jan 2016 - - // PURPOSE OF THIS SUBROUTINE: - // Performs iterations to calculate the refrigerant temperature corresponding to the given - // enthalpy and pressure. Works only in superheated region. - - // METHODOLOGY EMPLOYED: - // Perform iterations to identify the temperature by calling GetSupHeatEnthalpyRefrig + // Wrapper for RefrigProps::getSupHeatTemp() auto &df = state.dataFluidProps; if (RefrigIndex == 0) { @@ -3951,9 +3850,6 @@ namespace FluidProperties { format("{}: Refrigerant [{}] saturated at the given conditions **", routineName, this->Name), this->errors[(int)RefrigError::SatSupEnthalpy].index, Temperature, - Temperature, - _, - "{C}", "{C}"); } return saturated_density; @@ -3974,9 +3870,6 @@ namespace FluidProperties { routineName, this->Name), this->errors[(int)RefrigError::SatSupDensityTemp].index, Temperature, - Temperature, - _, - "{C}", "{C}"); } @@ -3996,9 +3889,6 @@ namespace FluidProperties { routineName, this->Name), this->errors[(int)RefrigError::SatSupDensityPress].index, Pressure, - Pressure, - _, - "{Pa}", "{Pa}"); } // end error checking } @@ -4014,29 +3904,7 @@ namespace FluidProperties { std::string_view const CalledFrom // routine this function was called from (error messages) ) { - - // SUBROUTINE INFORMATION: - // AUTHOR Mike Turner - // DATE WRITTEN 10 December 99 - // MODIFIED Rick Strand (April 2000, May 2000) - // MODIFIED Simon Rees (May 2002) - - // PURPOSE OF THIS SUBROUTINE: - // Performs linear interpolation between pressures and temperatures and - // returns Density values. Works only in superheated region. - - // METHODOLOGY EMPLOYED: - // Double linear interpolation is used with Density values at four - // pressure/temperature input points surrounding the given temperature - // and pressure arguments. - // With Density data it is assumed that zero values in the data are in - // the saturated region. Hence, values near the saturation line are - // approximated using the saturation value instead of the zero data value. - // points completely in the saturation region are given the saturation value - // at the given temperature. Points at the upper limits of pressure/temperature - // have the pressure/temperature capped. Warnings are given if the point - // is not clearly in the bounds of the superheated data. - + // Wrapper for RefrigProps::getSupHeatDensity() auto &df = state.dataFluidProps; if (RefrigIndex == 0) { if ((RefrigIndex = GetRefrigNum(state, refrigName)) == 0) { @@ -4139,9 +4007,6 @@ namespace FluidProperties { format("{}: Temperature out of range (too low) for fluid [{}] specific heat **", routineName, this->Name), this->errors[(int)GlycolError::SpecHeatLow].index, Temperature, - Temperature, - _, - "{C}", "{C}"); } return this->CpValues(this->CpLowTempIndex); @@ -4164,9 +4029,6 @@ namespace FluidProperties { format("{}: Temperature out of range (too high) for fluid [{}] specific heat **", routineName, this->Name), this->errors[(int)GlycolError::SpecHeatHigh].index, Temperature, - Temperature, - _, - "{C}", "{C}"); } return this->CpValues(this->CpHighTempIndex); @@ -4189,7 +4051,7 @@ namespace FluidProperties { } // Invariant: glycol_CpTemps[beg] <= Temperature <= glycol_CpTemps[end] // Is this faster than Interp? - return this->CpValues(end) - (this->CpTemps(end) - Temperature) * this->CpTempRatios(beg); + return GetInterpValue(Temperature, this->CpTemps(beg), this->CpTemps(end), this->CpValues(beg), this->CpValues(end)); } } @@ -4200,7 +4062,7 @@ namespace FluidProperties { std::string_view const CalledFrom // routine this function was called from (error messages) ) { - // This is now just a wrapper for the GlycolProps::getSpecificHeat method + // Wrapper for GlycolProps::getSpecificHeat() auto &df = state.dataFluidProps; if (GlycolIndex == 0) { @@ -4287,9 +4149,6 @@ namespace FluidProperties { format("{}: Temperature out of range (too low) for fluid [{}] density **", routineName, this->Name), this->errors[(int)GlycolError::DensityLow].index, Temperature, - Temperature, - _, - "{C}", "{C}"); } else { // error == GlycolError::DensityHigh @@ -4307,9 +4166,6 @@ namespace FluidProperties { format("{}: Temperature out of range (too high) for fluid [{}] density **", routineName, this->Name), this->errors[(int)GlycolError::DensityHigh].index, Temperature, - Temperature, - _, - "{C}", "{C}"); } } @@ -4324,7 +4180,7 @@ namespace FluidProperties { std::string_view const CalledFrom // routine this function was called from (error messages) ) { - // This is now just a wrapper for the GlycolProps::getDensity method + // Wrapper for GlycolProps::getDensity() auto &df = state.dataFluidProps; if (GlycolIndex == 0) { @@ -4415,9 +4271,6 @@ namespace FluidProperties { format("{}: Temperature out of range (too low) for fluid [{}] conductivity **", routineName, this->Name), this->errors[(int)error].index, Temperature, - Temperature, - _, - "{C}", "{C}"); } @@ -4437,9 +4290,6 @@ namespace FluidProperties { format("{}: Temperature out of range (too high) for fluid [{}] conductivity **", routineName, this->Name), this->errors[(int)error].index, Temperature, - Temperature, - _, - "{C}", "{C}"); } } @@ -4454,7 +4304,7 @@ namespace FluidProperties { std::string_view const CalledFrom // routine this function was called from (error messages) ) { - // This is now just a wrapper for the GlycolProps::getConductivity method + // Wrapper for GlycolProps::getConductivity() auto &df = state.dataFluidProps; if (GlycolIndex == 0) { @@ -4546,9 +4396,6 @@ namespace FluidProperties { format("{}: Temperature out of range (too low) for fluid [{}] viscosity **", routineName, this->Name), this->errors[(int)GlycolError::ViscosityLow].index, Temperature, - Temperature, - _, - "{C}", "{C}"); } @@ -4568,9 +4415,6 @@ namespace FluidProperties { format("{}: Temperature out of range (too high) for fluid [{}] viscosity **", routineName, this->Name), this->errors[(int)GlycolError::ViscosityHigh].index, Temperature, - Temperature, - _, - "{C}", "{C}"); } } @@ -4585,8 +4429,7 @@ namespace FluidProperties { std::string_view const CalledFrom // routine this function was called from (error messages) ) { - // This is now just a wrapper for the GlycolProps::getViscosity method - + // Wrapper for GlycolProps::getViscosity() auto &df = state.dataFluidProps; if (GlycolIndex == 0) { @@ -4891,9 +4734,6 @@ namespace FluidProperties { "GetInterpolatedSatProp: Refrigerant temperature for interpolation out of range error", df->TempRangeErrIndexGetInterpolatedSatProp, Temperature, - Temperature, - _, - "{C}", "{C}"); } } diff --git a/src/EnergyPlus/FluidProperties.hh b/src/EnergyPlus/FluidProperties.hh index 5c4862c0d18..37f765807da 100644 --- a/src/EnergyPlus/FluidProperties.hh +++ b/src/EnergyPlus/FluidProperties.hh @@ -616,8 +616,8 @@ struct FluidData : BaseGlobalStruct { for (int i = 1; i <= refrigs.isize(); ++i) delete refrigs(i); - for (int i = 1; i <= glycolsRaw.isize(); ++i) delete refrigs(i); - for (int i = 1; i <= glycols.isize(); ++i) delete refrigs(i); + for (int i = 1; i <= glycolsRaw.isize(); ++i) delete glycolsRaw(i); + for (int i = 1; i <= glycols.isize(); ++i) delete glycols(i); new (this) FluidData(); } diff --git a/src/EnergyPlus/SetPointManager.hh b/src/EnergyPlus/SetPointManager.hh index 9eed4a2af28..d3ddac62ea3 100644 --- a/src/EnergyPlus/SetPointManager.hh +++ b/src/EnergyPlus/SetPointManager.hh @@ -554,7 +554,7 @@ struct SetPointManagerData : BaseGlobalStruct InitSetPointManagersOneTimeFlag2 = true; for (int iSPM = 1; iSPM <= (int)spms.size(); ++iSPM) { - delete spms[iSPM]; + delete spms(iSPM); } spms.deallocate(); spmMap.clear(); diff --git a/src/EnergyPlus/UtilityRoutines.cc b/src/EnergyPlus/UtilityRoutines.cc index dd63a95befb..e81815be352 100644 --- a/src/EnergyPlus/UtilityRoutines.cc +++ b/src/EnergyPlus/UtilityRoutines.cc @@ -1231,6 +1231,56 @@ void ShowRecurringSevereErrorAtEnd(EnergyPlusData &state, state, " ** Severe ** " + Message, MsgIndex, ReportMaxOf, ReportMinOf, ReportSumOf, ReportMaxUnits, ReportMinUnits, ReportSumUnits); } +void ShowRecurringSevereErrorAtEnd(EnergyPlusData &state, + std::string const &Message, // Message automatically written to "error file" at end of simulation + int &MsgIndex, // Recurring message index, if zero, next available index is assigned + Real64 const val, + std::string const &units // optional char string (<=15 length) of units for sum value +) +{ + + // SUBROUTINE INFORMATION: + // AUTHOR Michael J. Witte + // DATE WRITTEN August 2004 + + // PURPOSE OF THIS SUBROUTINE: + // This subroutine stores a recurring ErrorMessage with a Severe designation + // for output at the end of the simulation with automatic tracking of number + // of occurrences and optional tracking of associated min, max, and sum values + + // METHODOLOGY EMPLOYED: + // Calls StoreRecurringErrorMessage utility routine. + + // Using/Aliasing + using namespace DataStringGlobals; + using namespace DataErrorTracking; + + // INTERFACE BLOCK SPECIFICATIONS + // Use for recurring "severe" error messages shown once at end of simulation + // with count of occurrences and optional max, min, sum + + for (int Loop = 1; Loop <= SearchCounts; ++Loop) { + if (has(Message, MessageSearch[Loop])) { + ++state.dataErrTracking->MatchCounts(Loop); + break; + } + } + bool bNewMessageFound = true; + for (int Loop = 1; Loop <= state.dataErrTracking->NumRecurringErrors; ++Loop) { + if (Util::SameString(state.dataErrTracking->RecurringErrors(Loop).Message, " ** Severe ** " + Message)) { + bNewMessageFound = false; + MsgIndex = Loop; + break; + } + } + if (bNewMessageFound) { + MsgIndex = 0; + } + + ++state.dataErrTracking->TotalSevereErrors; + StoreRecurringErrorMessage(state, " ** Severe ** " + Message, MsgIndex, val, val, _, units, units, ""); +} + void ShowRecurringWarningErrorAtEnd(EnergyPlusData &state, std::string const &Message, // Message automatically written to "error file" at end of simulation int &MsgIndex, // Recurring message index, if zero, next available index is assigned @@ -1286,6 +1336,56 @@ void ShowRecurringWarningErrorAtEnd(EnergyPlusData &state, state, " ** Warning ** " + Message, MsgIndex, ReportMaxOf, ReportMinOf, ReportSumOf, ReportMaxUnits, ReportMinUnits, ReportSumUnits); } +void ShowRecurringWarningErrorAtEnd(EnergyPlusData &state, + std::string const &Message, // Message automatically written to "error file" at end of simulation + int &MsgIndex, // Recurring message index, if zero, next available index is assigned + Real64 const val, + std::string const &units // optional char string (<=15 length) of units for sum value +) +{ + + // SUBROUTINE INFORMATION: + // AUTHOR Michael J. Witte + // DATE WRITTEN August 2004 + + // PURPOSE OF THIS SUBROUTINE: + // This subroutine stores a recurring ErrorMessage with a Warning designation + // for output at the end of the simulation with automatic tracking of number + // of occurrences and optional tracking of associated min, max, and sum values + + // METHODOLOGY EMPLOYED: + // Calls StoreRecurringErrorMessage utility routine. + + // Using/Aliasing + using namespace DataStringGlobals; + using namespace DataErrorTracking; + + // INTERFACE BLOCK SPECIFICATIONS + // Use for recurring "warning" error messages shown once at end of simulation + // with count of occurrences and optional max, min, sum + + for (int Loop = 1; Loop <= SearchCounts; ++Loop) { + if (has(Message, MessageSearch[Loop])) { + ++state.dataErrTracking->MatchCounts(Loop); + break; + } + } + bool bNewMessageFound = true; + for (int Loop = 1; Loop <= state.dataErrTracking->NumRecurringErrors; ++Loop) { + if (Util::SameString(state.dataErrTracking->RecurringErrors(Loop).Message, " ** Warning ** " + Message)) { + bNewMessageFound = false; + MsgIndex = Loop; + break; + } + } + if (bNewMessageFound) { + MsgIndex = 0; + } + + ++state.dataErrTracking->TotalWarningErrors; + StoreRecurringErrorMessage(state, " ** Warning ** " + Message, MsgIndex, val, val, _, units, units, ""); +} + void ShowRecurringContinueErrorAtEnd(EnergyPlusData &state, std::string const &Message, // Message automatically written to "error file" at end of simulation int &MsgIndex, // Recurring message index, if zero, next available index is assigned diff --git a/src/EnergyPlus/UtilityRoutines.hh b/src/EnergyPlus/UtilityRoutines.hh index 3bfc0caf4f1..9671a9f6e86 100644 --- a/src/EnergyPlus/UtilityRoutines.hh +++ b/src/EnergyPlus/UtilityRoutines.hh @@ -163,6 +163,14 @@ void ShowWarningMessage(EnergyPlusData &state, OptionalOutputFileRef OutUnit1 = {}, OptionalOutputFileRef OutUnit2 = {}); +void ShowRecurringSevereErrorAtEnd( + EnergyPlusData &state, + std::string const &Message, // Message automatically written to "error file" at end of simulation + int &MsgIndex, // Recurring message index, if zero, next available index is assigned + Real64 const val, // Track and report the max of the values passed to this argument + std::string const &units +); + void ShowRecurringSevereErrorAtEnd( EnergyPlusData &state, std::string const &Message, // Message automatically written to "error file" at end of simulation @@ -175,6 +183,14 @@ void ShowRecurringSevereErrorAtEnd( std::string const &ReportSumUnits = "" // optional char string (<=15 length) of units for sum value ); +void ShowRecurringWarningErrorAtEnd( + EnergyPlusData &state, + std::string const &Message, // Message automatically written to "error file" at end of simulation + int &MsgIndex, // Recurring message index, if zero, next available index is assigned + Real64 const val, + std::string const &units // optional char string (<=15 length) of units for sum value +); + void ShowRecurringWarningErrorAtEnd( EnergyPlusData &state, std::string const &Message, // Message automatically written to "error file" at end of simulation diff --git a/third_party/ObjexxFCL/src/ObjexxFCL/Array1S.hh b/third_party/ObjexxFCL/src/ObjexxFCL/Array1S.hh index 03206ce6f9b..d3b7495963e 100644 --- a/third_party/ObjexxFCL/src/ObjexxFCL/Array1S.hh +++ b/third_party/ObjexxFCL/src/ObjexxFCL/Array1S.hh @@ -213,6 +213,18 @@ public: // Assignment: Array public: // Assignment: Value + template< typename U, Size s, class = typename std::enable_if< std::is_assignable< T&, U >::value >::type > + Array1S & + operator =( std::array< U, s > const & a ) + { + assert( size_ == s ); + auto r( a.begin() ); + for ( int i = 1; i <= u_; ++i, ++r ) { + operator ()( i ) = *r; + } + return *this; + } + // Initializer List Assignment Template template< typename U, class = typename std::enable_if< std::is_assignable< T&, U >::value >::type > Array1S & From 90faf9d6b4904ebc5f51ffd54c00af4cee9e57b3 Mon Sep 17 00:00:00 2001 From: amirroth Date: Sat, 20 Jul 2024 15:52:57 -0400 Subject: [PATCH 44/68] More fixes and performance testing --- src/EnergyPlus/FluidProperties.cc | 186 ++++++++++++++++++------------ src/EnergyPlus/FluidProperties.hh | 22 ++++ 2 files changed, 132 insertions(+), 76 deletions(-) diff --git a/src/EnergyPlus/FluidProperties.cc b/src/EnergyPlus/FluidProperties.cc index 1d9880145a8..01b309eccc8 100644 --- a/src/EnergyPlus/FluidProperties.cc +++ b/src/EnergyPlus/FluidProperties.cc @@ -1118,11 +1118,15 @@ namespace FluidProperties { // be produced. // Propylene and ethylene are available by default - auto *waterRaw = new GlycolRawProps; - waterRaw->Name = "WATER"; - - df->glycolsRaw.push_back(waterRaw); - waterRaw->Num = df->glycolsRaw.isize(); + + auto *waterRaw = GetGlycolRaw(state, "WATER"); + if (waterRaw == nullptr) { + waterRaw = new GlycolRawProps; + waterRaw->Name = "WATER"; + + df->glycolsRaw.push_back(waterRaw); + waterRaw->Num = df->glycolsRaw.isize(); + } waterRaw->CpDataPresent = true; waterRaw->NumCpConcPoints = 1; @@ -1164,11 +1168,14 @@ namespace FluidProperties { waterRaw->ViscValues.allocate(waterRaw->NumViscConcPoints, waterRaw->NumViscTempPoints); waterRaw->ViscValues(1, {1, waterRaw->NumViscTempPoints}) = DefaultWaterViscData; - auto *ethylene = new GlycolRawProps; - ethylene->Name = "ETHYLENEGLYCOL"; - df->glycolsRaw.push_back(ethylene); - ethylene->Num = df->glycolsRaw.isize(); - + auto *ethylene = GetGlycolRaw(state, "ETHYLENEGLYCOL"); + if (ethylene == nullptr) { + ethylene = new GlycolRawProps; + ethylene->Name = "ETHYLENEGLYCOL"; + df->glycolsRaw.push_back(ethylene); + ethylene->Num = df->glycolsRaw.isize(); + } + // Specific Heat ethylene->CpDataPresent = true; // Flag set when specific heat data is available ethylene->NumCpTempPoints = DefaultNumGlyTemps; // Number of temperature points for specific heat @@ -1230,11 +1237,14 @@ namespace FluidProperties { ethylene->ViscValues(i, {1, ethylene->NumViscTempPoints}) = DefaultEthGlyViscData[i-1]; // Propylene - auto *propylene = new GlycolRawProps; - propylene->Name = "PROPYLENEGLYCOL"; - df->glycolsRaw.push_back(propylene); - propylene->Num = df->glycolsRaw.isize(); - + auto *propylene = GetGlycolRaw(state, "PROPYLENEGLYCOL"); + if (propylene == nullptr) { + propylene = new GlycolRawProps; + propylene->Name = "PROPYLENEGLYCOL"; + df->glycolsRaw.push_back(propylene); + propylene->Num = df->glycolsRaw.isize(); + } + // Specific Heat propylene->CpDataPresent = true; // Flag set when specific heat data is available propylene->NumCpTempPoints = DefaultNumGlyTemps; // Number of temperature points for specific heat @@ -1562,14 +1572,16 @@ namespace FluidProperties { CurrentModuleObject = "FluidProperties:GlycolConcentration"; NumOfOptionalInput = state.dataInputProcessing->inputProcessor->getNumObjectsFound(state, CurrentModuleObject); - auto *water = new GlycolProps; - water->Name = "WATER"; - water->GlycolName = "WATER"; - water->used = true; // mark Water as always used - - df->glycols.push_back(water); - water->Num = df->glycols.isize(); - + auto *water = GetGlycol(state, "WATER"); + if (water == nullptr) { + water = new GlycolProps; + water->Name = "WATER"; + water->GlycolName = "WATER"; + water->used = true; // mark Water as always used + + df->glycols.push_back(water); + water->Num = df->glycols.isize(); + } water->Concentration = 1.0; water->CpDataPresent = true; water->NumCpTempPoints = DefaultNumGlyTemps; @@ -1596,6 +1608,7 @@ namespace FluidProperties { water->ViscTemps = DefaultGlycolTemps; water->ViscValues = DefaultWaterViscData; +#ifdef PERFORMANCE_OPT // This is a speed optimization. Maybe. water->CpTempRatios.allocate(water->NumCpTempPoints); for (int i = 1; i < water->NumCpTempPoints; ++i) @@ -1609,6 +1622,7 @@ namespace FluidProperties { water->ViscTempRatios.allocate(water->NumViscTempPoints); for (int i = 1; i < water->NumCondTempPoints; ++i) water->ViscTempRatios(i) = (water->ViscValues(i+1) - water->ViscValues(i)) / (water->ViscTemps(i+1) - water->ViscTemps(i)); +#endif // PERFORMANCE_OPT for (int Loop = 1; Loop <= NumOfOptionalInput; ++Loop) { state.dataInputProcessing->inputProcessor->getObjectItem(state, @@ -1725,6 +1739,7 @@ namespace FluidProperties { InterpValuesForGlycolConc(state, glycolRaw->NumViscConcPoints, glycolRaw->NumViscTempPoints, glycolRaw->ViscConcs, glycolRaw->ViscValues, glycol->Concentration, glycol->ViscValues); +#ifdef PERFORMANCE_OPT // This is a speed optimization. Maybe. glycol->CpTempRatios.allocate(glycol->NumCpTempPoints); for (int i = 1; i < glycol->NumCpTempPoints; ++i) @@ -1738,6 +1753,7 @@ namespace FluidProperties { glycol->ViscTempRatios.allocate(glycol->NumViscTempPoints); for (int i = 1; i < glycol->NumCondTempPoints; ++i) glycol->ViscTempRatios(i) = (glycol->ViscValues(i+1) - glycol->ViscValues(i)) / (glycol->ViscTemps(i+1) - glycol->ViscTemps(i)); +#endif // PERFORMANCE_OPT } // for (Loop) if (!ErrorsFound) InitializeGlycolTempLimits(state, ErrorsFound); // Initialize the Temp limits for the glycols @@ -3948,12 +3964,12 @@ namespace FluidProperties { } Real64 GlycolProps::getSpecificHeat_raw(EnergyPlusData &state, - Real64 const Temperature, // actual temperature given as input + Real64 const Temp, // actual temperature given as input std::string_view const CalledFrom // routine this function was called from (error messages) ) #else Real64 GlycolProps::getSpecificHeat(EnergyPlusData &state, - Real64 const Temperature, // actual temperature given as input + Real64 const Temp, // actual temperature given as input std::string_view const CalledFrom // routine this function was called from (error messages) ) #endif @@ -3986,7 +4002,7 @@ namespace FluidProperties { assert(this->CpDataPresent); // Now determine the value of specific heat using interpolation - if (Temperature < this->CpLowTempValue) { // Temperature too low + if (Temp < this->CpLowTempValue) { // Temperature too low if (!state.dataGlobal->WarmupFlag) { df->glycolErrorLimits[(int)GlycolError::SpecHeatLow] = ++this->errors[(int)GlycolError::SpecHeatLow].count; @@ -3998,7 +4014,7 @@ namespace FluidProperties { ShowContinueError(state, format("..Called From:{},Temperature=[{:.2R}], supplied data range=[{:.2R},{:.2R}]", CalledFrom, - Temperature, + Temp, this->CpLowTempValue, this->CpHighTempValue)); ShowContinueErrorTimeStamp(state, ""); @@ -4006,12 +4022,12 @@ namespace FluidProperties { ShowRecurringWarningErrorAtEnd(state, format("{}: Temperature out of range (too low) for fluid [{}] specific heat **", routineName, this->Name), this->errors[(int)GlycolError::SpecHeatLow].index, - Temperature, + Temp, "{C}"); } return this->CpValues(this->CpLowTempIndex); - } else if (Temperature > this->CpHighTempValue) { // Temperature too high + } else if (Temp > this->CpHighTempValue) { // Temperature too high if (!state.dataGlobal->WarmupFlag) { df->glycolErrorLimits[(int)GlycolError::SpecHeatHigh] = ++this->errors[(int)GlycolError::SpecHeatHigh].count; if (df->glycolErrorLimits[(int)GlycolError::SpecHeatHigh] <= df->GlycolErrorLimitTest) { @@ -4020,7 +4036,7 @@ namespace FluidProperties { ShowContinueError(state, format("..Called From:{},Temperature=[{:.2R}], supplied data range=[{:.2R},{:.2R}]", CalledFrom, - Temperature, + Temp, this->CpLowTempValue, this->CpHighTempValue)); ShowContinueErrorTimeStamp(state, ""); @@ -4028,30 +4044,27 @@ namespace FluidProperties { ShowRecurringWarningErrorAtEnd(state, format("{}: Temperature out of range (too high) for fluid [{}] specific heat **", routineName, this->Name), this->errors[(int)GlycolError::SpecHeatHigh].index, - Temperature, + Temp, "{C}"); } return this->CpValues(this->CpHighTempIndex); } else { // Temperature somewhere between the lowest and highest value - // bracket is temp > low, <= high (for interpolation - // for ( int Loop = glycol_data.CpLowTempIndex + 1; Loop <= glycol_data.CpHighTempIndex; ++Loop ) { //Tuned Replaced by binary search - // below if ( Temperature > glycol_data.CpTemps( Loop ) ) continue; return GetInterpValue( Temperature, glycol_CpTemps( Loop - 1 - //), glycol_CpTemps( Loop ), glycol_CpValues( Loop - 1 ), glycol_CpValues( Loop ) ); break; // DO loop - //} - // assert( std::is_sorted( glycol_CpTemps.begin(), glycol_CpTemps.end() ) ); // Sorted temperature array is assumed: Enable if/when arrays - // have begin()/end() - assert(this->CpTemps.size() <= - static_cast(std::numeric_limits::max())); // Array indexes are int now so this is future protection +#ifdef PERFORMANCE_OPT + if (Temp < this->CpTemps(this->LoCpTempIdxLast) || Temp > this->CpTemps(this->LoCpTempIdxLast+1)) { + this->LoCpTempIdxLast = FindArrayIndex(Temp, this->CpTemps, 1, this->NumCpTempPoints); + } + return this->CpValues(this->LoCpTempIdxLast) + (Temp - this->CpTemps(this->LoCpTempIdxLast)) * this->CpTempRatios(this->LoCpTempIdxLast); +#else // !PERFORMANCE_OPT + assert(this->CpTemps.size() <= static_cast(std::numeric_limits::max())); int beg(1), end(this->CpTemps.isize()); // 1-based indexing assert(end > 0); while (beg + 1 < end) { int mid = ((beg + end) >> 1); // bit shifting is faster than /2 (Temperature > this->CpTemps(mid) ? beg : end) = mid; } // Invariant: glycol_CpTemps[beg] <= Temperature <= glycol_CpTemps[end] - - // Is this faster than Interp? return GetInterpValue(Temperature, this->CpTemps(beg), this->CpTemps(end), this->CpValues(beg), this->CpValues(end)); +#endif // PERFORMANCE_OPT } } @@ -4079,7 +4092,7 @@ namespace FluidProperties { //***************************************************************************** Real64 GlycolProps::getDensity(EnergyPlusData &state, - Real64 const Temperature, // actual temperature given as input + Real64 const Temp, // actual temperature given as input std::string_view const CalledFrom // routine this function was called from (error messages) ) { @@ -4103,7 +4116,7 @@ namespace FluidProperties { // all temperature lists are entered in ascending order. // Return value - Real64 ReturnValue; + Real64 Rho; // FUNCTION PARAMETERS: static constexpr std::string_view routineName = "GlycolProps::getDensity"; @@ -4117,16 +4130,23 @@ namespace FluidProperties { assert(this->RhoDataPresent); // Now determine the value of specific heat using interpolation - if (Temperature < this->RhoLowTempValue) { // Temperature too low + if (Temp < this->RhoLowTempValue) { // Temperature too low error = GlycolError::DensityLow; - ReturnValue = this->RhoValues(this->RhoLowTempIndex); - } else if (Temperature > this->RhoHighTempValue) { // Temperature too high + Rho = this->RhoValues(this->RhoLowTempIndex); + } else if (Temp > this->RhoHighTempValue) { // Temperature too high error = GlycolError::DensityHigh; - ReturnValue = this->RhoValues(this->RhoHighTempIndex); + Rho = this->RhoValues(this->RhoHighTempIndex); } else { // Temperature somewhere between the lowest and highest value +#ifdef PERFORMANCE_OPT + if (Temp < this->RhoTemps(this->LoRhoTempIdxLast) || Temp > this->RhoTemps(this->LoRhoTempIdxLast+1)) { + this->LoRhoTempIdxLast = FindArrayIndex(Temp, this->RhoTemps, 1, this->NumRhoTempPoints); + } + Rho = this->RhoValues(this->LoRhoTempIdxLast) + (Temp - this->RhoTemps(this->LoRhoTempIdxLast)) * this->RhoTempRatios(this->LoRhoTempIdxLast); +#else // !PERFORMANCE_OPT int LoTempIndex = FindArrayIndex(Temperature, this->RhoTemps, 1, this->NumRhoTempPoints); Real64 TempInterpRatio = (Temperature - this->RhoTemps(LoTempIndex)) / (this->RhoTemps(LoTempIndex+1) - this->RhoTemps(LoTempIndex)); ReturnValue = this->RhoValues(LoTempIndex) + TempInterpRatio * (this->RhoValues(LoTempIndex+1) - this->RhoValues(LoTempIndex)); +#endif // PERFORMANCE_OPT } // Error handling @@ -4139,7 +4159,7 @@ namespace FluidProperties { ShowContinueError(state, format("..Called From:{},Temperature=[{:.2R}], supplied data range=[{:.2R},{:.2R}]", CalledFrom, - Temperature, + Temp, this->RhoLowTempValue, this->RhoHighTempValue)); ShowContinueErrorTimeStamp(state, ""); @@ -4148,7 +4168,7 @@ namespace FluidProperties { ShowRecurringWarningErrorAtEnd(state, format("{}: Temperature out of range (too low) for fluid [{}] density **", routineName, this->Name), this->errors[(int)GlycolError::DensityLow].index, - Temperature, + Temp, "{C}"); } else { // error == GlycolError::DensityHigh @@ -4157,7 +4177,7 @@ namespace FluidProperties { ShowContinueError(state, format("..Called From:{},Temperature=[{:.2R}], supplied data range=[{:.2R},{:.2R}]", CalledFrom, - Temperature, + Temp, this->RhoLowTempValue, this->RhoHighTempValue)); ShowContinueErrorTimeStamp(state, ""); @@ -4165,12 +4185,12 @@ namespace FluidProperties { ShowRecurringWarningErrorAtEnd(state, format("{}: Temperature out of range (too high) for fluid [{}] density **", routineName, this->Name), this->errors[(int)GlycolError::DensityHigh].index, - Temperature, + Temp, "{C}"); } } - return ReturnValue; + return Rho; } Real64 GetDensityGlycol(EnergyPlusData &state, @@ -4197,7 +4217,7 @@ namespace FluidProperties { //***************************************************************************** Real64 GlycolProps::getConductivity(EnergyPlusData &state, - Real64 const Temperature, // actual temperature given as input + Real64 const Temp, // actual temperature given as input std::string_view const CalledFrom // routine this function was called from (error messages) ) { @@ -4221,7 +4241,7 @@ namespace FluidProperties { // all temperature lists are entered in ascending order. // Return value - Real64 ReturnValue; + Real64 Cond; // FUNCTION PARAMETERS: static constexpr std::string_view routineName = "GlycolProps::getConductivity"; @@ -4239,16 +4259,23 @@ namespace FluidProperties { } // Now determine the value of specific heat using interpolation - if (Temperature < this->CondLowTempValue) { // Temperature too low + if (Temp < this->CondLowTempValue) { // Temperature too low error = GlycolError::ConductivityLow; - ReturnValue = this->CondValues(this->CondLowTempIndex); - } else if (Temperature > this->CondHighTempValue) { // Temperature too high + Cond = this->CondValues(this->CondLowTempIndex); + } else if (Temp > this->CondHighTempValue) { // Temperature too high error = GlycolError::ConductivityHigh; - ReturnValue = this->CondValues(this->CondHighTempIndex); + Cond = this->CondValues(this->CondHighTempIndex); } else { // Temperature somewhere between the lowest and highest value +#ifdef PERFORMANCE_OPT + if (Temp < this->CondTemps(this->LoCondTempIdxLast) || Temp > this->CondTemps(this->LoCondTempIdxLast+1)) { + this->LoCondTempIdxLast = FindArrayIndex(Temp, this->CondTemps, 1, this->NumCondTempPoints); + } + Cond = this->CondValues(this->LoCondTempIdxLast) + (Temp - this->CondTemps(this->LoCondTempIdxLast)) * this->CondTempRatios(this->LoCondTempIdxLast); +#else // !PERFORMANCE_OPT int LoTempIndex = FindArrayIndex(Temperature, this->CondTemps, 1, this->NumCondTempPoints); Real64 TempInterpRatio = (Temperature - this->CondTemps(LoTempIndex)) / (this->CondTemps(LoTempIndex+1) - this->CondTemps(LoTempIndex)); ReturnValue = this->CondValues(LoTempIndex) + TempInterpRatio * (this->CondValues(LoTempIndex+1) - this->CondValues(LoTempIndex)); +#endif // PERFORMANCE_OPT } // Error handling @@ -4261,7 +4288,7 @@ namespace FluidProperties { ShowContinueError(state, format("..Called From:{},Temperature=[{:.2R}], supplied data range=[{:.2R},{:.2R}]", CalledFrom, - Temperature, + Temp, this->CondLowTempValue, this->CondHighTempValue)); ShowContinueErrorTimeStamp(state, ""); @@ -4270,7 +4297,7 @@ namespace FluidProperties { ShowRecurringWarningErrorAtEnd(state, format("{}: Temperature out of range (too low) for fluid [{}] conductivity **", routineName, this->Name), this->errors[(int)error].index, - Temperature, + Temp, "{C}"); } @@ -4280,7 +4307,7 @@ namespace FluidProperties { ShowContinueError(state, format("..Called From:{},Temperature=[{:.2R}], supplied data range=[{:.2R},{:.2R}]", CalledFrom, - Temperature, + Temp, this->CondLowTempValue, this->CondHighTempValue)); ShowContinueErrorTimeStamp(state, ""); @@ -4289,12 +4316,12 @@ namespace FluidProperties { ShowRecurringWarningErrorAtEnd(state, format("{}: Temperature out of range (too high) for fluid [{}] conductivity **", routineName, this->Name), this->errors[(int)error].index, - Temperature, + Temp, "{C}"); } } - return ReturnValue; + return Cond; } // GlycolProps::getConductivity() Real64 GetConductivityGlycol(EnergyPlusData &state, @@ -4322,7 +4349,7 @@ namespace FluidProperties { //***************************************************************************** Real64 GlycolProps::getViscosity(EnergyPlusData &state, - Real64 const Temperature, // actual temperature given as input + Real64 const Temp, // actual temperature given as input std::string_view const CalledFrom // routine this function was called from (error messages) ) { @@ -4346,7 +4373,7 @@ namespace FluidProperties { // all temperature lists are entered in ascending order. // Return value - Real64 ReturnValue; // Value for function + Real64 Visc; // Value for function // FUNCTION PARAMETERS: static constexpr std::string_view routineName = "GlycolProps::getViscosity"; @@ -4364,16 +4391,23 @@ namespace FluidProperties { } // Now determine the value of specific heat using interpolation - if (Temperature < this->ViscLowTempValue) { // Temperature too low + if (Temp < this->ViscLowTempValue) { // Temperature too low error = GlycolError::ViscosityLow; - ReturnValue = this->ViscValues(this->ViscLowTempIndex); - } else if (Temperature > this->ViscHighTempValue) { // Temperature too high + Visc = this->ViscValues(this->ViscLowTempIndex); + } else if (Temp > this->ViscHighTempValue) { // Temperature too high error = GlycolError::ViscosityHigh; - ReturnValue = this->ViscValues(this->ViscHighTempIndex); + Visc = this->ViscValues(this->ViscHighTempIndex); } else { // Temperature somewhere between the lowest and highest value - int LoTempIndex = FindArrayIndex(Temperature, this->ViscTemps, 1, this->NumViscTempPoints); +#ifdef PERFORMANCE_OPT + if (Temp < this->ViscTemps(this->LoViscTempIdxLast) || Temp > this->ViscTemps(this->LoViscTempIdxLast+1)) { + this->LoViscTempIdxLast = FindArrayIndex(Temp, this->ViscTemps, 1, this->NumViscTempPoints); + } + Visc = this->ViscValues(this->LoViscTempIdxLast) + (Temp - this->ViscTemps(this->LoViscTempIdxLast)) * this->ViscTempRatios(this->LoViscTempIdxLast); +#else // !PERFORMANCE_OPT + int LoTempIndex = FindArrayIndex(Temp, this->ViscTemps, 1, this->NumViscTempPoints); Real64 TempInterpRatio = (Temperature - this->ViscTemps(LoTempIndex)) / (this->ViscTemps(LoTempIndex+1) - this->ViscTemps(LoTempIndex)); ReturnValue = this->ViscValues(LoTempIndex) + TempInterpRatio * (this->ViscValues(LoTempIndex+1) - this->ViscValues(LoTempIndex)); +#endif // PERFORMANCE_OPT } // Error handling @@ -4386,7 +4420,7 @@ namespace FluidProperties { ShowContinueError(state, format("..Called From:{},Temperature=[{:.2R}], supplied data range=[{:.2R},{:.2R}]", CalledFrom, - Temperature, + Temp, this->ViscLowTempValue, this->ViscHighTempValue)); ShowContinueErrorTimeStamp(state, ""); @@ -4395,7 +4429,7 @@ namespace FluidProperties { ShowRecurringWarningErrorAtEnd(state, format("{}: Temperature out of range (too low) for fluid [{}] viscosity **", routineName, this->Name), this->errors[(int)GlycolError::ViscosityLow].index, - Temperature, + Temp, "{C}"); } @@ -4405,7 +4439,7 @@ namespace FluidProperties { ShowContinueError(state, format("..Called From:{},Temperature=[{:.2R}], supplied data range=[{:.2R},{:.2R}]", CalledFrom, - Temperature, + Temp, this->ViscLowTempValue, this->ViscHighTempValue)); ShowContinueErrorTimeStamp(state, ""); @@ -4414,12 +4448,12 @@ namespace FluidProperties { ShowRecurringWarningErrorAtEnd(state, format("{}: Temperature out of range (too high) for fluid [{}] viscosity **", routineName, this->Name), this->errors[(int)GlycolError::ViscosityHigh].index, - Temperature, + Temp, "{C}"); } } - return ReturnValue; + return Visc; } // GlycolProps::getViscosity() Real64 GetViscosityGlycol(EnergyPlusData &state, diff --git a/src/EnergyPlus/FluidProperties.hh b/src/EnergyPlus/FluidProperties.hh index 37f765807da..a20c1254264 100644 --- a/src/EnergyPlus/FluidProperties.hh +++ b/src/EnergyPlus/FluidProperties.hh @@ -69,6 +69,8 @@ struct EnergyPlusData; namespace FluidProperties { +#define PERFORMANCE_OPT + #ifdef EP_cache_GlycolSpecificHeat int constexpr t_sh_cache_size = 1024 * 1024; int constexpr t_sh_precision_bits = 24; @@ -114,7 +116,9 @@ namespace FluidProperties { int PsHighPresIndex = 0; // High Pressure Max Index for Ps (>0.0) Array1D PsTemps; // Temperatures for saturation pressures Array1D PsValues; // Saturation pressures at PsTemps +#ifdef PERFORMANCE_OPT Array1D PsTempRatios; // PsTempRatios(i) = (PsValues(i+1) - PsValues(i)) / (PsTemps(i+1) - PsTemps(i)). Speed optimization. +#endif // PERFORMANCE_OPT int NumHPoints = 0; // Number of enthalpy points Real64 HfLowTempValue = 0.0; // Low Temperature Value for Hf (>0.0) @@ -128,8 +132,10 @@ namespace FluidProperties { Array1D HTemps; // Temperatures for enthalpy points Array1D HfValues; // Enthalpy of saturated fluid at HTemps Array1D HfgValues; // Enthalpy of saturated fluid/gas at HTemps +#ifdef PERFORMANCE_OPT Array1D HfTempRatios; Array1D HfgTempRatios; +#endif // PERFORMANCE_OPT int NumCpPoints = 0; // Number of specific heat of fluid points Real64 CpfLowTempValue = 0.0; // Low Temperature Value for Cpf (>0.0) @@ -143,8 +149,10 @@ namespace FluidProperties { Array1D CpTemps; // Temperatures for specific heat points Array1D CpfValues; // Specific heat of saturated fluid at CpTemps Array1D CpfgValues; // Specific heat of saturated fluid/gas at CpTemps +#ifdef PERFORMANCE_OPT Array1D CpfTempRatios; Array1D CpfgTempRatios; +#endif // PERFORMANCE_OPT int NumRhoPoints = 0; // Number of density of fluid points Real64 RhofLowTempValue = 0.0; // Low Temperature Value for Rhof (>0.0) @@ -158,8 +166,10 @@ namespace FluidProperties { Array1D RhoTemps; // Temperatures for density of fluid points Array1D RhofValues; // Density of saturated fluid at RhoTemps Array1D RhofgValues; // Density of saturated fluid/gas at RhoTemps +#ifdef PERFORMANCE_OPT Array1D RhofTempRatios; Array1D RhofgTempRatios; +#endif // PERFORMANCE_OPT int NumSupTempPoints = 0; // Number of temperature points for superheated enthalpy int NumSupPressPoints = 0; // Number of pressure points for superheated enthalpy @@ -295,7 +305,10 @@ namespace FluidProperties { int NumCpTempPoints = 0; // Number of temperature points for specific heat Array1D CpTemps; // Temperatures for specific heat of glycol Array1D CpValues; // Specific heat data values (J/kg-K) +#ifdef PERFORMANCE_OPT + int LoCpTempIdxLast = 1; Array1D CpTempRatios; // Speed optimization +#endif // PERFORMANCE_OPT bool RhoDataPresent = false; // Flag set when density data is available int NumRhoTempPoints = 0.0; // Number of temperature points for density @@ -305,7 +318,10 @@ namespace FluidProperties { int RhoHighTempIndex = 0; // High Temperature Max Index for Rho (>0.0) Array1D RhoTemps; // Temperatures for density of glycol Array1D RhoValues; // Density data values (kg/m3) +#ifdef PERFORMANCE_OPT + int LoRhoTempIdxLast = 1; Array1D RhoTempRatios; // Speed optimization +#endif // PERFORMANCE_OPT bool CondDataPresent = false; // Flag set when conductivity data is available int NumCondTempPoints = 0; // Number of temperature points for conductivity @@ -315,7 +331,10 @@ namespace FluidProperties { int CondHighTempIndex = 0; // High Temperature Max Index for Cond (>0.0) Array1D CondTemps; // Temperatures for conductivity of glycol Array1D CondValues; // conductivity values (W/m-K) +#ifdef PERFORMANCE_OPT + int LoCondTempIdxLast = 1; Array1D CondTempRatios; // Speed optimization +#endif // PERFORMANCE_OPT bool ViscDataPresent = false; // Flag set when viscosity data is available int NumViscTempPoints = 0; // Number of temperature points for viscosity @@ -325,7 +344,10 @@ namespace FluidProperties { int ViscHighTempIndex = 0; // High Temperature Max Index for Visc (>0.0) Array1D ViscTemps; // Temperatures for viscosity of glycol Array1D ViscValues; // viscosity values (mPa-s) +#ifdef PERFORMANCE_OPT + int LoViscTempIdxLast = 1; Array1D ViscTempRatios; +#endif // PERFORMANCE_OPT std::array errors; From 08e24a17bdf284b0bbad543c76d7e2bea332d7c4 Mon Sep 17 00:00:00 2001 From: amirroth Date: Sat, 20 Jul 2024 17:34:01 -0400 Subject: [PATCH 45/68] Disable performance optimizations --- src/EnergyPlus/FluidProperties.cc | 20 ++++++++++---------- src/EnergyPlus/FluidProperties.hh | 2 +- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/EnergyPlus/FluidProperties.cc b/src/EnergyPlus/FluidProperties.cc index 01b309eccc8..a017ed81bac 100644 --- a/src/EnergyPlus/FluidProperties.cc +++ b/src/EnergyPlus/FluidProperties.cc @@ -4061,9 +4061,9 @@ namespace FluidProperties { assert(end > 0); while (beg + 1 < end) { int mid = ((beg + end) >> 1); // bit shifting is faster than /2 - (Temperature > this->CpTemps(mid) ? beg : end) = mid; + (Temp > this->CpTemps(mid) ? beg : end) = mid; } // Invariant: glycol_CpTemps[beg] <= Temperature <= glycol_CpTemps[end] - return GetInterpValue(Temperature, this->CpTemps(beg), this->CpTemps(end), this->CpValues(beg), this->CpValues(end)); + return GetInterpValue(Temp, this->CpTemps(beg), this->CpTemps(end), this->CpValues(beg), this->CpValues(end)); #endif // PERFORMANCE_OPT } } @@ -4143,9 +4143,9 @@ namespace FluidProperties { } Rho = this->RhoValues(this->LoRhoTempIdxLast) + (Temp - this->RhoTemps(this->LoRhoTempIdxLast)) * this->RhoTempRatios(this->LoRhoTempIdxLast); #else // !PERFORMANCE_OPT - int LoTempIndex = FindArrayIndex(Temperature, this->RhoTemps, 1, this->NumRhoTempPoints); - Real64 TempInterpRatio = (Temperature - this->RhoTemps(LoTempIndex)) / (this->RhoTemps(LoTempIndex+1) - this->RhoTemps(LoTempIndex)); - ReturnValue = this->RhoValues(LoTempIndex) + TempInterpRatio * (this->RhoValues(LoTempIndex+1) - this->RhoValues(LoTempIndex)); + int LoTempIndex = FindArrayIndex(Temp, this->RhoTemps, 1, this->NumRhoTempPoints); + Real64 TempInterpRatio = (Temp - this->RhoTemps(LoTempIndex)) / (this->RhoTemps(LoTempIndex+1) - this->RhoTemps(LoTempIndex)); + Rho = this->RhoValues(LoTempIndex) + TempInterpRatio * (this->RhoValues(LoTempIndex+1) - this->RhoValues(LoTempIndex)); #endif // PERFORMANCE_OPT } @@ -4272,9 +4272,9 @@ namespace FluidProperties { } Cond = this->CondValues(this->LoCondTempIdxLast) + (Temp - this->CondTemps(this->LoCondTempIdxLast)) * this->CondTempRatios(this->LoCondTempIdxLast); #else // !PERFORMANCE_OPT - int LoTempIndex = FindArrayIndex(Temperature, this->CondTemps, 1, this->NumCondTempPoints); - Real64 TempInterpRatio = (Temperature - this->CondTemps(LoTempIndex)) / (this->CondTemps(LoTempIndex+1) - this->CondTemps(LoTempIndex)); - ReturnValue = this->CondValues(LoTempIndex) + TempInterpRatio * (this->CondValues(LoTempIndex+1) - this->CondValues(LoTempIndex)); + int LoTempIndex = FindArrayIndex(Temp, this->CondTemps, 1, this->NumCondTempPoints); + Real64 TempInterpRatio = (Temp - this->CondTemps(LoTempIndex)) / (this->CondTemps(LoTempIndex+1) - this->CondTemps(LoTempIndex)); + Cond = this->CondValues(LoTempIndex) + TempInterpRatio * (this->CondValues(LoTempIndex+1) - this->CondValues(LoTempIndex)); #endif // PERFORMANCE_OPT } @@ -4405,8 +4405,8 @@ namespace FluidProperties { Visc = this->ViscValues(this->LoViscTempIdxLast) + (Temp - this->ViscTemps(this->LoViscTempIdxLast)) * this->ViscTempRatios(this->LoViscTempIdxLast); #else // !PERFORMANCE_OPT int LoTempIndex = FindArrayIndex(Temp, this->ViscTemps, 1, this->NumViscTempPoints); - Real64 TempInterpRatio = (Temperature - this->ViscTemps(LoTempIndex)) / (this->ViscTemps(LoTempIndex+1) - this->ViscTemps(LoTempIndex)); - ReturnValue = this->ViscValues(LoTempIndex) + TempInterpRatio * (this->ViscValues(LoTempIndex+1) - this->ViscValues(LoTempIndex)); + Real64 TempInterpRatio = (Temp - this->ViscTemps(LoTempIndex)) / (this->ViscTemps(LoTempIndex+1) - this->ViscTemps(LoTempIndex)); + Visc = this->ViscValues(LoTempIndex) + TempInterpRatio * (this->ViscValues(LoTempIndex+1) - this->ViscValues(LoTempIndex)); #endif // PERFORMANCE_OPT } diff --git a/src/EnergyPlus/FluidProperties.hh b/src/EnergyPlus/FluidProperties.hh index a20c1254264..c3a42ac9e40 100644 --- a/src/EnergyPlus/FluidProperties.hh +++ b/src/EnergyPlus/FluidProperties.hh @@ -69,7 +69,7 @@ struct EnergyPlusData; namespace FluidProperties { -#define PERFORMANCE_OPT +#undef PERFORMANCE_OPT #ifdef EP_cache_GlycolSpecificHeat int constexpr t_sh_cache_size = 1024 * 1024; From dd7dbee58fffde568ed4c29369d41ec611cb51aa Mon Sep 17 00:00:00 2001 From: "Lerond, Jeremy" Date: Sun, 21 Jul 2024 23:19:33 -0700 Subject: [PATCH 46/68] Allow ZoneHVAC:WindowAirConditioner along AFN simulations. --- src/EnergyPlus/AirflowNetwork/src/Solver.cpp | 14 ++ src/EnergyPlus/WindowAC.cc | 30 ++++ src/EnergyPlus/WindowAC.hh | 2 + .../unit/AirflowNetworkHVAC.unit.cc | 137 ++++++++++++++++++ 4 files changed, 183 insertions(+) diff --git a/src/EnergyPlus/AirflowNetwork/src/Solver.cpp b/src/EnergyPlus/AirflowNetwork/src/Solver.cpp index 8d583fbb388..058ea051962 100644 --- a/src/EnergyPlus/AirflowNetwork/src/Solver.cpp +++ b/src/EnergyPlus/AirflowNetwork/src/Solver.cpp @@ -102,6 +102,7 @@ #include #include #include +#include #include #include @@ -10143,6 +10144,7 @@ namespace AirflowNetwork { using SplitterComponent::GetSplitterNodeNumbers; using SplitterComponent::GetSplitterOutletNumber; using WaterThermalTanks::GetHeatPumpWaterHeaterNodeNumber; + using WindowAC::GetWindowACNodeNumber; using ZoneDehumidifier::GetZoneDehumidifierNodeNumber; // SUBROUTINE PARAMETER DEFINITIONS: @@ -10161,6 +10163,7 @@ namespace AirflowNetwork { bool HPWHFound(false); // Flag for HPWH identification bool StandaloneERVFound(false); // Flag for Standalone ERV (ZoneHVAC:EnergyRecoveryVentilator) identification + bool WindowACFound(false); // Flag for Window AC (ZoneHVAC:WindowAirConditioner) identification // Validate supply and return connections NodeFound.dimension(m_state.dataLoopNodes->NumOfNodes, false); @@ -10273,6 +10276,12 @@ namespace AirflowNetwork { NodeFound(i) = true; StandaloneERVFound = true; } + + // Skip Window AC with no OA + if (GetWindowACNodeNumber(m_state, i)) { + NodeFound(i) = true; + WindowACFound = true; + } } for (int zoneNum = 1; zoneNum <= m_state.dataGlobal->NumOfZones; ++zoneNum) { @@ -10413,6 +10422,11 @@ namespace AirflowNetwork { format(RoutineName) + "A ZoneHVAC:EnergyRecoveryVentilator is simulated along with an AirflowNetwork but is not " "included in the AirflowNetwork."); } + if (WindowACFound) { + ShowWarningError(m_state, + format(RoutineName) + "A ZoneHVAC:WindowAirConditioner is simulated along with an AirflowNetwork but is not " + "included in the AirflowNetwork."); + } NodeFound.deallocate(); // Assign AirLoop Number to every node and linkage diff --git a/src/EnergyPlus/WindowAC.cc b/src/EnergyPlus/WindowAC.cc index 6dad593cbcc..740b9eabd99 100644 --- a/src/EnergyPlus/WindowAC.cc +++ b/src/EnergyPlus/WindowAC.cc @@ -1499,6 +1499,36 @@ namespace WindowAC { } // WindAC(WindACNum)%DXCoilType_Num == CoilDX_CoolingHXAssisted && * } + bool GetWindowACNodeNumber(EnergyPlusData &state, int const NodeNumber) + { + if (state.dataWindowAC->GetWindowACInputFlag) { + GetWindowAC(state); + state.dataWindowAC->GetWindowACInputFlag = false; + } + + bool windowACOutdoorAir = false; + + for (int windowACIndex = 1; windowACIndex <= state.dataWindowAC->NumWindAC; ++windowACIndex) { + auto &windowAC = state.dataWindowAC->WindAC(windowACIndex); + if (windowAC.OutAirVolFlow == 0) { + windowACOutdoorAir = true; + } else { + windowACOutdoorAir = false; + } + int FanInletNodeIndex = 0; + int FanOutletNodeIndex = 0; + FanInletNodeIndex = state.dataFans->fans(windowAC.FanIndex)->inletNodeNum; + FanOutletNodeIndex = state.dataFans->fans(windowAC.FanIndex)->outletNodeNum; + + if (windowACOutdoorAir && + (NodeNumber == windowAC.OutsideAirNode || NodeNumber == windowAC.MixedAirNode || NodeNumber == windowAC.AirReliefNode || + NodeNumber == FanInletNodeIndex || NodeNumber == FanOutletNodeIndex || NodeNumber == windowAC.AirInNode)) { + return true; + } + } + return false; + } + int GetWindowACZoneInletAirNode(EnergyPlusData &state, int const WindACNum) { diff --git a/src/EnergyPlus/WindowAC.hh b/src/EnergyPlus/WindowAC.hh index 1520ddcf6a4..953c6eeee5a 100644 --- a/src/EnergyPlus/WindowAC.hh +++ b/src/EnergyPlus/WindowAC.hh @@ -197,6 +197,8 @@ namespace WindowAC { bool &HXUnitOn // Used to control HX heat recovery as needed ); + bool GetWindowACNodeNumber(EnergyPlusData &state, int const WindACNum); + int GetWindowACZoneInletAirNode(EnergyPlusData &state, int const WindACNum); int GetWindowACOutAirNode(EnergyPlusData &state, int const WindACNum); diff --git a/tst/EnergyPlus/unit/AirflowNetworkHVAC.unit.cc b/tst/EnergyPlus/unit/AirflowNetworkHVAC.unit.cc index 712f22d1fba..e94bc58351d 100644 --- a/tst/EnergyPlus/unit/AirflowNetworkHVAC.unit.cc +++ b/tst/EnergyPlus/unit/AirflowNetworkHVAC.unit.cc @@ -83,6 +83,7 @@ #include #include #include +#include #include #include #include @@ -19767,4 +19768,140 @@ TEST_F(EnergyPlusFixture, AirflowNetwork_ZoneOrderTest) state->afn->AirflowNetworkNodeData(3).EPlusNodeNum = 0; } +TEST_F(EnergyPlusFixture, AirflowNetwork_TestZoneEqpSupportZoneWindowAC) +{ + // Create zone + state->dataGlobal->NumOfZones = 1; + state->dataHeatBal->Zone.allocate(1); + state->dataHeatBal->Zone(1).Name = "ZONE 1"; + + // Create surfaces + state->dataSurface->Surface.allocate(1); + state->dataSurface->Surface(1).Name = "ZN004:ROOF001"; + state->dataSurface->Surface(1).Zone = 1; + state->dataSurface->Surface(1).ZoneName = "ZONE 1"; + state->dataSurface->Surface(1).Azimuth = 0.0; + state->dataSurface->Surface(1).ExtBoundCond = 0; + state->dataSurface->Surface(1).HeatTransSurf = true; + state->dataSurface->Surface(1).Tilt = 180.0; + state->dataSurface->Surface(1).Sides = 4; + state->dataSurface->Surface(1).Name = "ZN004:ROOF002"; + state->dataSurface->Surface(1).Zone = 1; + state->dataSurface->Surface(1).ZoneName = "ZONE 1"; + state->dataSurface->Surface(1).Azimuth = 0.0; + state->dataSurface->Surface(1).ExtBoundCond = 0; + state->dataSurface->Surface(1).HeatTransSurf = true; + state->dataSurface->Surface(1).Tilt = 180.0; + state->dataSurface->Surface(1).Sides = 4; + + state->dataSurface->Surface(1).OriginalClass = DataSurfaces::SurfaceClass::Window; + + // Create air system + state->dataAirSystemsData->PrimaryAirSystems.allocate(1); + state->dataAirSystemsData->PrimaryAirSystems(1).NumBranches = 1; + state->dataAirSystemsData->PrimaryAirSystems(1).Branch.allocate(1); + state->dataAirSystemsData->PrimaryAirSystems(1).Branch(1).TotalComponents = 1; + state->dataAirSystemsData->PrimaryAirSystems(1).Branch(1).Comp.allocate(1); + state->dataAirSystemsData->PrimaryAirSystems(1).Branch(1).Comp(1).TypeOf = "Fan:ConstantVolume"; + + // Create air nodes + state->dataLoopNodes->NumOfNodes = 3; + state->dataLoopNodes->Node.allocate(3); + state->dataLoopNodes->Node(1).FluidType = DataLoopNode::NodeFluidType::Air; + state->dataLoopNodes->Node(2).FluidType = DataLoopNode::NodeFluidType::Air; + state->dataLoopNodes->Node(3).FluidType = DataLoopNode::NodeFluidType::Air; + state->dataLoopNodes->NodeID.allocate(3); + state->dataLoopNodes->NodeID(1) = "ZONE 1 AIR NODE"; + bool errFlag{false}; + BranchNodeConnections::RegisterNodeConnection(*state, + 1, + "ZONE 1 AIR NODE", + DataLoopNode::ConnectionObjectType::FanOnOff, + "Object1", + DataLoopNode::ConnectionType::ZoneNode, + NodeInputManager::CompFluidStream::Primary, + false, + errFlag); + EXPECT_FALSE(errFlag); + + // Connect zone to air node + state->dataZoneEquip->ZoneEquipConfig.allocate(1); + state->dataZoneEquip->ZoneEquipConfig(1).IsControlled = true; + state->dataZoneEquip->ZoneEquipConfig(1).ZoneName = "ZONE 1"; + state->dataZoneEquip->ZoneEquipConfig(1).ZoneNode = 1; + state->dataZoneEquip->ZoneEquipConfig(1).NumInletNodes = 0; + state->dataZoneEquip->ZoneEquipConfig(1).NumReturnNodes = 0; + state->dataZoneEquip->ZoneEquipConfig(1).IsControlled = true; + + // One AirflowNetwork:MultiZone:Zone object + state->afn->AirflowNetworkNumOfZones = 1; + state->afn->MultizoneZoneData.allocate(1); + state->afn->MultizoneZoneData(1).ZoneNum = 1; + state->afn->MultizoneZoneData(1).ZoneName = "ZONE 1"; + + // Assume only one AirflowNetwork:Distribution:Node object is set for the Zone Air Node + state->afn->AirflowNetworkNumOfNodes = 1; + state->afn->AirflowNetworkNodeData.allocate(1); + state->afn->AirflowNetworkNodeData(1).Name = "ZONE 1"; + state->afn->AirflowNetworkNodeData(1).EPlusZoneNum = 1; + + state->afn->SplitterNodeNumbers.allocate(2); + state->afn->SplitterNodeNumbers(1) = 0; + state->afn->SplitterNodeNumbers(2) = 0; + + // Set flag to support zone equipment + state->afn->simulation_control.allow_unsupported_zone_equipment = true; + + // Create Fans + Real64 supplyFlowRate = 0.005; + Real64 exhaustFlowRate = 0.005; + + auto *fan1 = new Fans::FanComponent; + fan1->Name = "SupplyFan"; + + fan1->inletNodeNum = 2; + fan1->outletNodeNum = 3; + fan1->type = HVAC::FanType::OnOff; + fan1->maxAirFlowRate = supplyFlowRate; + + state->dataFans->fans.push_back(fan1); + state->dataFans->fanMap.insert_or_assign(fan1->Name, state->dataFans->fans.size()); + + state->dataLoopNodes->NodeID(2) = "SupplyFanInletNode"; + BranchNodeConnections::RegisterNodeConnection(*state, + 2, + state->dataLoopNodes->NodeID(2), + DataLoopNode::ConnectionObjectType::FanOnOff, + state->dataFans->fans(1)->Name, + DataLoopNode::ConnectionType::Inlet, + NodeInputManager::CompFluidStream::Primary, + false, + errFlag); + state->dataLoopNodes->NodeID(3) = "SupplyFanOutletNode"; + BranchNodeConnections::RegisterNodeConnection(*state, + 3, + state->dataLoopNodes->NodeID(3), + DataLoopNode::ConnectionObjectType::FanOnOff, + state->dataFans->fans(1)->Name, + DataLoopNode::ConnectionType::Outlet, + NodeInputManager::CompFluidStream::Primary, + false, + errFlag); + + // Create Window AC + state->dataWindowAC->WindAC.allocate(1); + state->dataWindowAC->GetWindowACInputFlag = false; + state->dataWindowAC->NumWindAC = 1; + state->dataWindowAC->WindAC(1).OutAirVolFlow = 0.0; + state->dataWindowAC->WindAC(1).FanName = state->dataFans->fans(1)->Name; + state->dataWindowAC->WindAC(1).FanIndex = 1; + + // Check validation and expected warning + state->afn->validate_distribution(); + + EXPECT_TRUE(compare_err_stream(" ** Warning ** AirflowNetwork::Solver::validate_distribution: A ZoneHVAC:WindowAirConditioner is simulated " + "along with an AirflowNetwork but is not included in the AirflowNetwork.\n", + true)); +} + } // namespace EnergyPlus From c688048d23f55f76e73f386e0632122b6ca607d3 Mon Sep 17 00:00:00 2001 From: Rick Strand Date: Mon, 22 Jul 2024 06:38:04 -0500 Subject: [PATCH 47/68] 10299 Move a PixelCounting Check An error message was being skipped because of the movement of the Get part of the old routine. anyScheduledShadingSurface was not set yet so the error message was never produced. This change should fix this problem and eliminate the change in the .err file for SolarShadingTestGPU.idf. --- src/EnergyPlus/SolarShading.cc | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/EnergyPlus/SolarShading.cc b/src/EnergyPlus/SolarShading.cc index 4d2776e0156..e166aed955a 100644 --- a/src/EnergyPlus/SolarShading.cc +++ b/src/EnergyPlus/SolarShading.cc @@ -519,18 +519,6 @@ void GetShadowingInput(EnergyPlusData &state) state.dataSysVars->shadingMethod = ShadingMethod::PolygonClipping; } - if ((state.dataSysVars->shadingMethod == DataSystemVariables::ShadingMethod::PixelCounting) && - state.dataSolarShading->anyScheduledShadingSurface) { - ShowSevereError(state, "The Shading Calculation Method of choice is \"PixelCounting\"; "); - ShowContinueError(state, "and there is at least one shading surface of type "); - ShowContinueError(state, "Shading:Site:Detailed, Shading:Building:Detailed, or Shading:Zone:Detailed, "); - ShowContinueError(state, "that has an active transmittance schedule value greater than zero or may vary."); - ShowContinueError(state, "With \"PixelCounting\" Shading Calculation Method, the shading surfaces will be treated as "); - ShowContinueError(state, "completely opaque (transmittance = 0) during the shading calculation, "); - ShowContinueError(state, "which may result in inaccurate or unexpected results."); - ShowContinueError(state, "It is suggested switching to another Shading Calculation Method, such as \"PolygonClipping\"."); - } - aNum++; if (NumAlphas >= aNum) { if (Util::SameString(state.dataIPShortCut->cAlphaArgs(aNum), "Periodic")) { @@ -738,6 +726,18 @@ void processShadowingInput(EnergyPlusData &state) { // all shadow input processing that needed zones and surfaces to already be read into data (part of fix for Defect #10299) + if ((state.dataSysVars->shadingMethod == DataSystemVariables::ShadingMethod::PixelCounting) && + state.dataSolarShading->anyScheduledShadingSurface) { + ShowSevereError(state, "The Shading Calculation Method of choice is \"PixelCounting\"; "); + ShowContinueError(state, "and there is at least one shading surface of type "); + ShowContinueError(state, "Shading:Site:Detailed, Shading:Building:Detailed, or Shading:Zone:Detailed, "); + ShowContinueError(state, "that has an active transmittance schedule value greater than zero or may vary."); + ShowContinueError(state, "With \"PixelCounting\" Shading Calculation Method, the shading surfaces will be treated as "); + ShowContinueError(state, "completely opaque (transmittance = 0) during the shading calculation, "); + ShowContinueError(state, "which may result in inaccurate or unexpected results."); + ShowContinueError(state, "It is suggested switching to another Shading Calculation Method, such as \"PolygonClipping\"."); + } + if (state.dataSysVars->shadingMethod == DataSystemVariables::ShadingMethod::Imported) { int ExtShadingSchedNum; for (int SurfNum = 1; SurfNum <= state.dataSurface->TotSurfaces; ++SurfNum) { From 096c7e6dddf42e708bcd295fa3439deb17ec81eb Mon Sep 17 00:00:00 2001 From: "Lerond, Jeremy" Date: Mon, 22 Jul 2024 09:06:06 -0700 Subject: [PATCH 48/68] Edit docs. --- .../src/overview/group-airflow-network.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/input-output-reference/src/overview/group-airflow-network.tex b/doc/input-output-reference/src/overview/group-airflow-network.tex index 488041495a6..0445fd9c008 100644 --- a/doc/input-output-reference/src/overview/group-airflow-network.tex +++ b/doc/input-output-reference/src/overview/group-airflow-network.tex @@ -331,7 +331,7 @@ \subsubsection{Inputs}\label{inputs-004} \paragraph{Field: Allow Unsupported Zone Equipment}\label{allow-unsupported-zone-equipment} -This is an optional field. Input is Yes or No. The default is No. Set this input to Yes to have zone equipment that are currently unsupported in the AirflowNetwork model allowed in the simulation. Setting this field to Yes, allows the following equipment to be modeled along an AirflowNetwork model: ZoneHVAC:Dehumidifier, ZoneHVAC:EnergyRecoveryVentilator, WaterHeater:HeatPump:*. The AirflowNetwork model will exclude mass balance in these equipment objects and assume the mass flows are self-balanced in the equipment objects. +This is an optional field. Input is Yes or No. The default is No. Set this input to Yes to have zone equipment that are currently unsupported in the AirflowNetwork model allowed in the simulation. Setting this field to Yes, allows the following equipment to be modeled along an AirflowNetwork model: ZoneHVAC:Dehumidifier, ZoneHVAC:EnergyRecoveryVentilator, WaterHeater:HeatPump:*, and ZoneHVAC:WindowAirConditioner. The AirflowNetwork model will exclude mass balance in these equipment objects and assume the mass flows are self-balanced in the equipment objects. \paragraph{Field: Do Distribution Duct Sizing Calculation}\label{do-distribution-duct-sizing-calculation} From e5809d3edb87f5e7f2df3fbf122af6f49c9d4306 Mon Sep 17 00:00:00 2001 From: Rick Strand Date: Mon, 22 Jul 2024 14:39:47 -0500 Subject: [PATCH 49/68] 10299 Correction of Unit Test Errors A couple of issues were seen in ci results. This commit is an attempt to fix them. --- tst/EnergyPlus/unit/SolarShading.unit.cc | 29 ++++++++++++++++++------ 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/tst/EnergyPlus/unit/SolarShading.unit.cc b/tst/EnergyPlus/unit/SolarShading.unit.cc index c4bc0c9044b..1b1c9949b27 100644 --- a/tst/EnergyPlus/unit/SolarShading.unit.cc +++ b/tst/EnergyPlus/unit/SolarShading.unit.cc @@ -3900,18 +3900,18 @@ TEST_F(EnergyPlusFixture, SolarShadingTest_Warn_Pixel_Count_and_TM_Schedule) SolarShading::processShadowingInput(*state); #ifdef EP_NO_OPENGL - EXPECT_EQ(state->dataErrTracking->TotalWarningErrors, 2); - EXPECT_EQ(state->dataErrTracking->TotalSevereErrors, 0); + EXPECT_EQ(state->dataErrTracking->TotalWarningErrors, 1); + EXPECT_EQ(state->dataErrTracking->TotalSevereErrors, 0; EXPECT_EQ(state->dataErrTracking->LastSevereError, ""); #else if (!Penumbra::Penumbra::is_valid_context()) { EXPECT_EQ(state->dataErrTracking->TotalWarningErrors, 2); - EXPECT_EQ(state->dataErrTracking->TotalSevereErrors, 0); - EXPECT_EQ(state->dataErrTracking->LastSevereError, ""); + EXPECT_EQ(state->dataErrTracking->TotalSevereErrors, 1); + EXPECT_EQ(state->dataErrTracking->LastSevereError, "The Shading Calculation Method of choice is \"PixelCounting\"; "); } else { EXPECT_EQ(state->dataErrTracking->TotalWarningErrors, 1); - EXPECT_EQ(state->dataErrTracking->TotalSevereErrors, 0); - EXPECT_EQ(state->dataErrTracking->LastSevereError, ""); + EXPECT_EQ(state->dataErrTracking->TotalSevereErrors, 1); + EXPECT_EQ(state->dataErrTracking->LastSevereError, "The Shading Calculation Method of choice is \"PixelCounting\"; "); } #endif } @@ -6151,7 +6151,22 @@ TEST_F(EnergyPlusFixture, SolarShadingTest_GetShadowingInputTest6) EXPECT_TRUE(state->dataSysVars->SutherlandHodgman); EXPECT_TRUE(state->dataSysVars->SlaterBarsky); EXPECT_ENUM_EQ(state->dataSysVars->shadingMethod, ShadingMethod::PixelCounting); + +#ifdef EP_NO_OPENGL std::string const error_string = delimited_string({" ** Warning ** ShadowCalculation: suspect Shading Calculation Update Frequency", - " ** ~~~ ** Value entered=[56], Shadowing Calculations will be inaccurate."}); + " ** ~~~ ** Value entered=[56], Shadowing Calculations will be inaccurate.", + " ** Warning ** No GPU found (required for PixelCounting)", + " ** ~~~ ** PolygonClipping will be used instead"}); EXPECT_TRUE(compare_err_stream(error_string, true)); +#else + if (!Penumbra::Penumbra::is_valid_context()) { + std::string const error_string = delimited_string({" ** Warning ** ShadowCalculation: suspect Shading Calculation Update Frequency", + " ** ~~~ ** Value entered=[56], Shadowing Calculations will be inaccurate."}); + EXPECT_TRUE(compare_err_stream(error_string, true)); + } else { + std::string const error_string = delimited_string({" ** Warning ** ShadowCalculation: suspect Shading Calculation Update Frequency", + " ** ~~~ ** Value entered=[56], Shadowing Calculations will be inaccurate."}); + EXPECT_TRUE(compare_err_stream(error_string, true)); + } +#endif } From 4b6a726b497f300ef647d09962d95dc64740f195 Mon Sep 17 00:00:00 2001 From: Julien Marrec Date: Mon, 8 Jul 2024 23:13:53 +0200 Subject: [PATCH 50/68] print args when --debug-cli is passed --- src/EnergyPlus/CommandLineInterface.cc | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/EnergyPlus/CommandLineInterface.cc b/src/EnergyPlus/CommandLineInterface.cc index e54680f8a5b..cba2f718d21 100644 --- a/src/EnergyPlus/CommandLineInterface.cc +++ b/src/EnergyPlus/CommandLineInterface.cc @@ -208,7 +208,26 @@ Built on Platform: {} ->required(false) ->check(CLI::ExistingFile); - bool debugCLI = false; + // Catching it myself, so I can print the arguments vector before it's mutated + bool debugCLI = std::any_of(args.begin(), args.end(), [](const auto &arg) { return arg == "--debug-cli"; }); + if (debugCLI) { + { + fmt::print("ProcessArgs: received args\n"); + int na = 0; + for (const auto &a : args) { + fmt::print("* {}: '{}'\n", na++, a); + } + } + { + fmt::print("\nAfter massaging/expanding of args\n"); + int na = 0; + for (const auto &a : arguments) { + fmt::print("* {}: '{}'\n", na++, a); + } + } + fmt::print("\n"); + } + // bool debugCLI = false; app.add_flag("--debug-cli", debugCLI, "Print the result of the CLI assignments to the console and exit")->group(""); // Empty group to hide it app.footer("Example: energyplus -w weather.epw -r input.idf"); @@ -272,6 +291,9 @@ state.dataStrGlobals->inputFilePath='{}', state.dataGlobal->numThread, state.files.inputWeatherFilePath.filePath.generic_string(), state.dataStrGlobals->inputFilePath.generic_string()); + + fmt::print(stderr, "--debug-cli passed: exiting early\n"); + exit(0); } From 9fc5f17f26e8eb9090510a0057a095a212a76d6e Mon Sep 17 00:00:00 2001 From: Julien Marrec Date: Mon, 8 Jul 2024 23:14:27 +0200 Subject: [PATCH 51/68] WIP, seems to work even with 2 byte unicode chars. I need to tweak readJson too though --- src/EnergyPlus/CommandLineInterface.cc | 4 ++ src/EnergyPlus/FileSystem.cc | 55 +++++++++++++++++++++++-- src/EnergyPlus/SQLiteProcedures.cc | 57 ++++++++++++++++++++++---- 3 files changed, 103 insertions(+), 13 deletions(-) diff --git a/src/EnergyPlus/CommandLineInterface.cc b/src/EnergyPlus/CommandLineInterface.cc index cba2f718d21..3f7eb8920df 100644 --- a/src/EnergyPlus/CommandLineInterface.cc +++ b/src/EnergyPlus/CommandLineInterface.cc @@ -412,7 +412,11 @@ state.dataStrGlobals->inputFilePath='{}', // Helper to construct output file path auto composePath = [&outputFilePrefixFullPath](const std::string &suffix) -> fs::path { + #ifdef _WIN32 + return fs::path(outputFilePrefixFullPath.native() + CLI::widen(suffix)); + #else return fs::path(outputFilePrefixFullPath.string() + suffix); + #endif }; // EnergyPlus files diff --git a/src/EnergyPlus/FileSystem.cc b/src/EnergyPlus/FileSystem.cc index 2566f738473..ac3080e9d91 100644 --- a/src/EnergyPlus/FileSystem.cc +++ b/src/EnergyPlus/FileSystem.cc @@ -98,9 +98,13 @@ namespace FileSystem { // filename. Do we really need that though? // path.make_preferred(); fs::path result = path; + #ifdef _WIN32 + result.make_preferred(); + #else std::string tempPathAsStr = result.make_preferred().string(); std::replace(tempPathAsStr.begin(), tempPathAsStr.end(), DataStringGlobals::altpathChar, DataStringGlobals::pathChar); result = fs::path(tempPathAsStr); + #endif return result; } @@ -113,13 +117,21 @@ namespace FileSystem { fs::path getParentDirectoryPath(fs::path const &path) { // Note: this is needed because "/a/b/c".parent_path() = "/a/b/c/" +#ifdef _WIN32 + auto pathStr = path.native(); + if (!pathStr.empty()) { + while ((pathStr.back() == DataStringGlobals::pathChar) || (pathStr.back() == DataStringGlobals::altpathChar)) { + pathStr.erase(pathStr.size() - 1); + } + } +#else std::string pathStr = path.string(); if (!pathStr.empty()) { while ((pathStr.back() == DataStringGlobals::pathChar) || (pathStr.back() == DataStringGlobals::altpathChar)) { pathStr.erase(pathStr.size() - 1); } } - +#endif // If empty, return "./" instead fs::path parent_path = fs::path(pathStr).parent_path(); if (parent_path.empty()) { @@ -339,11 +351,45 @@ namespace FileSystem { std::string readFile(fs::path const &filePath, std::ios_base::openmode mode) { #ifdef _WIN32 - std::string filePathStr = filePath.string(); - const char *path = filePathStr.c_str(); + if (!fileExists(filePath)) { + throw FatalError("File does not exists"); + } + + auto filePathStr = filePath.native(); + const wchar_t *path = filePathStr.c_str(); + std::wstring_view fopen_mode; + if (mode == std::ios_base::in) { + fopen_mode = L"r"; + } else if (mode == std::ios_base::binary) { + fopen_mode = L"b"; + } else if (mode == (std::ios_base::in | std::ios_base::binary)) { + fopen_mode = L"rb"; + } else { + throw FatalError("ERROR - readFile: Bad openmode argument. Must be std::ios_base::in or std::ios_base::binary"); + } + auto close_file = [](FILE *f) { fclose(f); }; + auto holder = std::unique_ptr(_wfopen(path, fopen_mode.data()), close_file); // (THIS_AUTO_OK) + if (!holder) { + throw FatalError("Could not open file"); + } + + auto f = holder.get(); // (THIS_AUTO_OK) + const std::uintmax_t size = fs::file_size(filePath); + std::string result; + result.resize(size); + + size_t bytes_read = fread(result.data(), 1, size, f); + bool is_eof = feof(f); + bool has_error = ferror(f); + if (is_eof != 0) { + return result; + } + if (has_error != 0 || bytes_read != size) { + throw FatalError("Error reading file"); + } #else const char *path = filePath.c_str(); -#endif + if (!fileExists(filePath)) { throw FatalError(fmt::format("File does not exists: {}", path)); @@ -380,6 +426,7 @@ namespace FileSystem { if (has_error != 0 || bytes_read != size) { throw FatalError(fmt::format("Error reading file: {}", path)); } +#endif return result; } diff --git a/src/EnergyPlus/SQLiteProcedures.cc b/src/EnergyPlus/SQLiteProcedures.cc index 798215cda88..1ec88c7b4d6 100644 --- a/src/EnergyPlus/SQLiteProcedures.cc +++ b/src/EnergyPlus/SQLiteProcedures.cc @@ -46,6 +46,7 @@ // POSSIBILITY OF SUCH DAMAGE. // C++ headers +#include #include #include #include @@ -58,6 +59,7 @@ #include #include #include +#include #include #include #include @@ -66,6 +68,8 @@ #include #include +#include + namespace EnergyPlus { constexpr std::array reportFreqInts = { @@ -2605,18 +2609,39 @@ SQLiteProcedures::SQLiteProcedures(std::shared_ptr const &errorStr fs::path const &errorFilePath) : m_writeOutputToSQLite(writeOutputToSQLite), m_errorStream(errorStream) { + constexpr bool debug = true; + sqlite3 *m_connection = nullptr; if (m_writeOutputToSQLite) { int rc = -1; bool ok = true; + if constexpr (debug) { + // std::cout << "errorStream=" << errorStream << ", dbName=" << dbName << std::endl; + // std::cout << "dbName.string()=" << dbName.string() << std::endl; + // std::cout << "dbName.generic_string()=" << dbName.generic_string() << std::endl; + std::wcout << "dbName.generic_wstring()=" << dbName.generic_wstring() << std::endl; + std::cout << "narrow(dbName.generic_wstring())=" << CLI::narrow(dbName.generic_wstring()) << std::endl; + } + + std::string const dbName_utf8 = [&dbName]() { + if constexpr (std::is_same_v) { + return CLI::narrow(dbName.generic_wstring()); + } else { + return dbName.generic_string(); + } + }(); + // Test if we can write to the sqlite error file - // Does there need to be a seperate sqlite.err file at all? Consider using eplusout.err + // Does there need to be a separate sqlite.err file at all? Consider using eplusout.err if (m_errorStream) { - *m_errorStream << "SQLite3 message, " << errorFilePath.string() << " open for processing!" << std::endl; + *m_errorStream << "SQLite3 message, " << CLI::narrow(errorFilePath.generic_wstring()) << " open for processing!" << std::endl; } else { ok = false; } + if constexpr (debug) { + std::cout << "m_errorStream: " << std::boolalpha << ok << std::endl; + } // Test if we can create a new file named dbName if (ok && dbName != ":memory:") { @@ -2627,17 +2652,27 @@ SQLiteProcedures::SQLiteProcedures(std::shared_ptr const &errorStr ok = false; } } + if constexpr (debug) { + std::cout << "ofstream dbName: " << std::boolalpha << ok << std::endl; + } // Test if we can write to the database // If we can't then there are probably locks on the database if (ok) { // sqlite3_open_v2 could return SQLITE_BUSY at this point. If so, do not proceed to sqlite3_exec. - rc = sqlite3_open_v2(dbName.string().c_str(), &m_connection, SQLITE_OPEN_READWRITE, nullptr); + rc = sqlite3_open_v2(dbName_utf8.c_str(), &m_connection, SQLITE_OPEN_READWRITE, nullptr); if (rc) { *m_errorStream << "SQLite3 message, can't get exclusive lock to open database: " << sqlite3_errmsg(m_connection) << std::endl; ok = false; + if constexpr (debug) { + std::cout << "sqlite3_open_v2: " << std::boolalpha << ok << ' ' << sqlite3_errmsg(m_connection) << std::endl; + } } } + if constexpr (debug) { + std::cout << "sqlite3_open_v2: " << std::boolalpha << ok << std::endl; + } + if (ok) { char *zErrMsg = nullptr; // Set journal_mode OFF to avoid creating the file dbName + "-journal" (when dbName is a regular file) @@ -2652,11 +2687,15 @@ SQLiteProcedures::SQLiteProcedures(std::shared_ptr const &errorStr } else { if (dbName != ":memory:") { // Remove test db - rc = remove(dbName.string().c_str()); - if (rc) { - // File operation failed. SQLite connection is not in an error state. - *m_errorStream << "SQLite3 message, can't remove old database." << std::endl; - ok = false; + // rc = remove(dbName_utf8.c_str()); + if (fs::is_regular_file(dbName)) { + std::error_code ec; + if (!fs::remove(dbName, ec)) { + // File operation failed. SQLite connection is not in an error state. + *m_errorStream << "SQLite3 message, can't remove old database. code=" << ec.value() << ", error: " << ec.message() + << std::endl; + ok = false; + } } } } @@ -2665,7 +2704,7 @@ SQLiteProcedures::SQLiteProcedures(std::shared_ptr const &errorStr if (ok) { // Now open the output db for the duration of the simulation - rc = sqlite3_open_v2(dbName.string().c_str(), &m_connection, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, nullptr); + rc = sqlite3_open_v2(dbName_utf8.c_str(), &m_connection, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, nullptr); m_db = std::shared_ptr(m_connection, sqlite3_close); if (rc) { *m_errorStream << "SQLite3 message, can't open new database: " << sqlite3_errmsg(m_connection) << std::endl; From cd84fa3c8521c1d00a77c32c4aef64479d1e1271 Mon Sep 17 00:00:00 2001 From: Julien Marrec Date: Mon, 8 Jul 2024 20:44:48 +0200 Subject: [PATCH 52/68] Change readFile and readJSON to use ifstream (that handles fs::path) + avoid using path.string() in that file (need to do it for more) --- src/EnergyPlus/FileSystem.cc | 161 +++++++++++------------------------ src/EnergyPlus/FileSystem.hh | 4 + 2 files changed, 55 insertions(+), 110 deletions(-) diff --git a/src/EnergyPlus/FileSystem.cc b/src/EnergyPlus/FileSystem.cc index ac3080e9d91..7b973018fef 100644 --- a/src/EnergyPlus/FileSystem.cc +++ b/src/EnergyPlus/FileSystem.cc @@ -70,6 +70,8 @@ #include #include +#include + namespace EnergyPlus { namespace FileSystem { @@ -98,13 +100,13 @@ namespace FileSystem { // filename. Do we really need that though? // path.make_preferred(); fs::path result = path; - #ifdef _WIN32 +#ifdef _WIN32 result.make_preferred(); - #else +#else std::string tempPathAsStr = result.make_preferred().string(); std::replace(tempPathAsStr.begin(), tempPathAsStr.end(), DataStringGlobals::altpathChar, DataStringGlobals::pathChar); result = fs::path(tempPathAsStr); - #endif +#endif return result; } @@ -118,7 +120,7 @@ namespace FileSystem { { // Note: this is needed because "/a/b/c".parent_path() = "/a/b/c/" #ifdef _WIN32 - auto pathStr = path.native(); + std::wstring pathStr = path.native(); if (!pathStr.empty()) { while ((pathStr.back() == DataStringGlobals::pathChar) || (pathStr.back() == DataStringGlobals::altpathChar)) { pathStr.erase(pathStr.size() - 1); @@ -228,7 +230,7 @@ namespace FileSystem { // just compare to ".EPJSON" instead of "EPJSON"... fs::path getFileExtension(fs::path const &filePath) { - std::string pext = fs::path(filePath).extension().string(); + std::string pext = toString(filePath.extension()); if (!pext.empty()) { // remove '.' pext = std::string(++pext.begin(), pext.end()); @@ -238,15 +240,8 @@ namespace FileSystem { FileTypes getFileType(fs::path const &filePath) { -#ifdef _WIN32 - std::string const filePathStr = fs::path(filePath).extension().string(); - std::string_view extension = filePathStr.c_str(); -#else - std::string_view extension = fs::path(filePath).extension().c_str(); -#endif - - extension.remove_prefix(extension.find_last_of('.') + 1); - std::string stringExtension = std::string(extension); + std::string stringExtension = toString(filePath.extension()); + stringExtension = stringExtension.substr(stringExtension.rfind('.') + 1); return static_cast(getEnumValue(FileTypesExtUC, Util::makeUPPER(stringExtension))); } @@ -269,7 +264,7 @@ namespace FileSystem { // Create a directory if doesn't already exist if (pathExists(directoryPath)) { // path already exists if (!directoryExists(directoryPath)) { - std::cout << "ERROR: " << getAbsolutePath(directoryPath).string() << " already exists and is not a directory." << std::endl; + std::cout << "ERROR: " << toString(getAbsolutePath(directoryPath)) << " already exists and is not a directory." << std::endl; std::exit(EXIT_FAILURE); } } else { // directory does not already exist @@ -350,135 +345,81 @@ namespace FileSystem { std::string readFile(fs::path const &filePath, std::ios_base::openmode mode) { -#ifdef _WIN32 + // Shenanigans would not be needed with fmt 10+ (maybe earlier), because fmt has native fs::path support if (!fileExists(filePath)) { - throw FatalError("File does not exists"); + throw FatalError(fmt::format("File does not exists: {}", toString(filePath))); } - auto filePathStr = filePath.native(); - const wchar_t *path = filePathStr.c_str(); - std::wstring_view fopen_mode; - if (mode == std::ios_base::in) { - fopen_mode = L"r"; - } else if (mode == std::ios_base::binary) { - fopen_mode = L"b"; - } else if (mode == (std::ios_base::in | std::ios_base::binary)) { - fopen_mode = L"rb"; - } else { + // Can only be 'r', 'b' or 'rb' + if ((mode & (std::ios_base::in | std::ios_base::binary)) == 0) { throw FatalError("ERROR - readFile: Bad openmode argument. Must be std::ios_base::in or std::ios_base::binary"); } - auto close_file = [](FILE *f) { fclose(f); }; - auto holder = std::unique_ptr(_wfopen(path, fopen_mode.data()), close_file); // (THIS_AUTO_OK) - if (!holder) { - throw FatalError("Could not open file"); - } - auto f = holder.get(); // (THIS_AUTO_OK) - const std::uintmax_t size = fs::file_size(filePath); - std::string result; - result.resize(size); - - size_t bytes_read = fread(result.data(), 1, size, f); - bool is_eof = feof(f); - bool has_error = ferror(f); - if (is_eof != 0) { - return result; - } - if (has_error != 0 || bytes_read != size) { - throw FatalError("Error reading file"); - } -#else - const char *path = filePath.c_str(); - - - if (!fileExists(filePath)) { - throw FatalError(fmt::format("File does not exists: {}", path)); + const std::uintmax_t file_size = fs::file_size(filePath); + std::ifstream file(filePath, mode); + if (!file.is_open()) { + throw FatalError(fmt::format("Could not open file: {}", toString(filePath))); } - - std::string_view fopen_mode; - if (mode == std::ios_base::in) { - fopen_mode = "r"; - } else if (mode == std::ios_base::binary) { - fopen_mode = "b"; - } else if (mode == (std::ios_base::in | std::ios_base::binary)) { - fopen_mode = "rb"; - } else { - throw FatalError("ERROR - readFile: Bad openmode argument. Must be std::ios_base::in or std::ios_base::binary"); - } - - auto close_file = [](FILE *f) { fclose(f); }; - auto holder = std::unique_ptr(fopen(path, fopen_mode.data()), close_file); // (THIS_AUTO_OK) - if (!holder) { - throw FatalError(fmt::format("Could not open file: {}", path)); - } - - auto f = holder.get(); // (THIS_AUTO_OK) - const std::uintmax_t size = fs::file_size(filePath); - std::string result; - result.resize(size); - - size_t bytes_read = fread(result.data(), 1, size, f); - bool is_eof = feof(f); - bool has_error = ferror(f); - if (is_eof != 0) { - return result; - } - if (has_error != 0 || bytes_read != size) { - throw FatalError(fmt::format("Error reading file: {}", path)); - } -#endif + std::string result(file_size, '\0'); + file.read(result.data(), file_size); return result; } nlohmann::json readJSON(fs::path const &filePath, std::ios_base::openmode mode) { -#ifdef _WIN32 - std::string filePathStr = filePath.string(); - const char *path = filePathStr.c_str(); -#else - const char *path = filePath.c_str(); -#endif + // Shenanigans would not be needed with fmt 10+ (maybe earlier), because fmt has native fs::path support if (!fileExists(filePath)) { - throw FatalError(fmt::format("File does not exists: {}", path)); + throw FatalError(fmt::format("File does not exists: {}", toString(filePath))); } - std::string_view fopen_mode; - if (mode == std::ios_base::in) { - fopen_mode = "r"; - } else if (mode == std::ios_base::binary) { - fopen_mode = "b"; - } else if (mode == (std::ios_base::in | std::ios_base::binary)) { - fopen_mode = "rb"; - } else { + // Can only be 'r', 'b' or 'rb' + if ((mode & (std::ios_base::in | std::ios_base::binary)) == 0) { throw FatalError("ERROR - readFile: Bad openmode argument. Must be std::ios_base::in or std::ios_base::binary"); } - auto close_file = [](FILE *f) { fclose(f); }; - auto holder = std::unique_ptr(fopen(path, fopen_mode.data()), close_file); // (THIS_AUTO_OK) - if (!holder) { - throw FatalError(fmt::format("Could not open file: {}", path)); + std::ifstream file(filePath, mode); + if (!file.is_open()) { + throw FatalError(fmt::format("Could not open file: {}", toString(filePath))); } - auto f = holder.get(); // (THIS_AUTO_OK) FileTypes const ext = getFileType(filePath); switch (ext) { case FileTypes::EpJSON: case FileTypes::JSON: case FileTypes::GLHE: - return nlohmann::json::parse(f, nullptr, true, true); + return nlohmann::json::parse(file, nullptr, true, true); case FileTypes::CBOR: - return nlohmann::json::from_cbor(f); + return nlohmann::json::from_cbor(file); case FileTypes::MsgPack: - return nlohmann::json::from_msgpack(f); + return nlohmann::json::from_msgpack(file); case FileTypes::UBJSON: - return nlohmann::json::from_ubjson(f); + return nlohmann::json::from_ubjson(file); case FileTypes::BSON: - return nlohmann::json::from_bson(f); + return nlohmann::json::from_bson(file); default: throw FatalError("Invalid file extension. Must be epJSON, JSON, or other experimental extensions"); } } + std::string toString(fs::path const &p) + { + return CLI::detail::maybe_narrow(p.c_str()); + // if constexpr (std::is_same_v) { + // return CLI::narrow(p.wstring()); + // } else { + // return p.string(); + // } + } + + std::string toGenericString(fs::path const &p) + { + if constexpr (std::is_same_v) { + return CLI::narrow(p.generic_wstring()); + } else { + return p.generic_string(); + } + } + } // namespace FileSystem } // namespace EnergyPlus diff --git a/src/EnergyPlus/FileSystem.hh b/src/EnergyPlus/FileSystem.hh index 91f5754ece6..2197b4810ec 100644 --- a/src/EnergyPlus/FileSystem.hh +++ b/src/EnergyPlus/FileSystem.hh @@ -320,6 +320,10 @@ namespace FileSystem { } } + std::string toString(fs::path const &p); + + std::string toGenericString(fs::path const &p); + } // namespace FileSystem } // namespace EnergyPlus #endif From 6121f19f87cf0f628dbbb4f3c4708c2fbec0f562 Mon Sep 17 00:00:00 2001 From: Julien Marrec Date: Mon, 8 Jul 2024 21:57:00 +0200 Subject: [PATCH 53/68] Add a specific fmt::formatter for fs::path that will **narrow** from wide string to string on windows. Supports 's' (string()) or 'g' (generic_string())presentations --- src/EnergyPlus/FileSystem.cc | 9 ++++++++ src/EnergyPlus/FileSystem.hh | 40 +++++++++++++++++++++++++++++------- 2 files changed, 42 insertions(+), 7 deletions(-) diff --git a/src/EnergyPlus/FileSystem.cc b/src/EnergyPlus/FileSystem.cc index 7b973018fef..4fa2ca4ac13 100644 --- a/src/EnergyPlus/FileSystem.cc +++ b/src/EnergyPlus/FileSystem.cc @@ -421,5 +421,14 @@ namespace FileSystem { } } + fs::path appendSuffixToPath(fs::path const &outputFilePrefixFullPath, const std::string &suffix) + { + if constexpr (std::is_same_v) { + return {outputFilePrefixFullPath.wstring() + CLI::widen(suffix)}; + } else { + return {outputFilePrefixFullPath.string() + suffix}; + } + } + } // namespace FileSystem } // namespace EnergyPlus diff --git a/src/EnergyPlus/FileSystem.hh b/src/EnergyPlus/FileSystem.hh index 2197b4810ec..fc1c926237f 100644 --- a/src/EnergyPlus/FileSystem.hh +++ b/src/EnergyPlus/FileSystem.hh @@ -70,13 +70,6 @@ namespace fs = std::experimental::filesystem; #include -// Add a custom formatter for fmt -namespace fmt { -template <> struct formatter : formatter -{ -}; -} // namespace fmt - // If we want to allow this kind of stuff // fs::path p = "folder/eplus"; // std::string suffixStr = "out.audit"; @@ -324,6 +317,39 @@ namespace FileSystem { std::string toGenericString(fs::path const &p); + fs::path appendSuffixToPath(fs::path const& outputFilePrefixFullPath, const std::string &suffix); + } // namespace FileSystem } // namespace EnergyPlus + +// Add a custom formatter for fmt +template <> struct fmt::formatter +{ + // Presentation format: 's' - string, 'g' - generic_string. + char presentation = 's'; + + // Parses format specifications of the form ['s' | 'g']. + constexpr auto parse(format_parse_context &ctx) -> decltype(ctx.begin()) + { + // Parse the presentation format and store it in the formatter: + auto it = ctx.begin(), end = ctx.end(); + if (it != end && (*it == 's' || *it == 'g')) { + presentation = *it++; + } + + // Check if reached the end of the range: + if (it != end && *it != '}') { + throw format_error("invalid format"); + }; + + // Return an iterator past the end of the parsed range: + return it; + } + + template auto format(const fs::path &p, FormatContext &ctx) -> decltype(ctx.out()) + { + return format_to(ctx.out(), "{}", presentation == 'g' ? EnergyPlus::FileSystem::toGenericString(p) : EnergyPlus::FileSystem::toString(p)); + } +}; + #endif From 1573494da37d7b773bced05edf16bc4dda2518d8 Mon Sep 17 00:00:00 2001 From: Julien Marrec Date: Mon, 8 Jul 2024 22:13:38 +0200 Subject: [PATCH 54/68] Use the new fmt::formatter (except ExternalInterface) --- src/EnergyPlus/ChillerElectricASHRAE205.cc | 5 +- src/EnergyPlus/CommandLineInterface.cc | 61 +++++++++---------- src/EnergyPlus/CurveManager.cc | 12 ++-- src/EnergyPlus/DataSystemVariables.cc | 8 +-- src/EnergyPlus/DaylightingManager.cc | 2 +- src/EnergyPlus/FileSystem.cc | 8 +-- src/EnergyPlus/HeatBalanceManager.cc | 8 +-- src/EnergyPlus/IOFiles.cc | 4 +- .../InputProcessing/InputProcessor.cc | 2 +- src/EnergyPlus/OutputProcessor.cc | 10 +-- src/EnergyPlus/OutputReportTabular.cc | 2 +- src/EnergyPlus/PluginManager.cc | 43 ++++++------- src/EnergyPlus/PluginManager.hh | 6 +- src/EnergyPlus/SQLiteProcedures.cc | 14 +---- src/EnergyPlus/ScheduleManager.cc | 4 +- src/EnergyPlus/SimulationManager.cc | 6 +- src/EnergyPlus/SolarShading.cc | 5 +- src/EnergyPlus/TARCOGOutput.cc | 7 ++- src/EnergyPlus/UtilityRoutines.cc | 18 +++--- src/EnergyPlus/WeatherManager.cc | 12 ++-- src/EnergyPlus/WindTurbine.cc | 4 +- src/EnergyPlus/ZoneTempPredictorCorrector.cc | 2 +- 22 files changed, 114 insertions(+), 129 deletions(-) diff --git a/src/EnergyPlus/ChillerElectricASHRAE205.cc b/src/EnergyPlus/ChillerElectricASHRAE205.cc index b3413b28b48..77786d58266 100644 --- a/src/EnergyPlus/ChillerElectricASHRAE205.cc +++ b/src/EnergyPlus/ChillerElectricASHRAE205.cc @@ -71,6 +71,7 @@ #include #include #include +#include #include #include #include @@ -146,9 +147,9 @@ void getChillerASHRAE205Input(EnergyPlusData &state) // Since logger context must persist across all calls to libtk205/btwxt, it must be a member thisChiller.LoggerContext = {&state, format("{} \"{}\"", state.dataIPShortCut->cCurrentModuleObject, thisObjectName)}; thisChiller.Representation = std::dynamic_pointer_cast( - RSInstanceFactory::create("RS0001", rep_file_path.string().c_str(), std::make_shared())); + RSInstanceFactory::create("RS0001", FileSystem::toString(rep_file_path).c_str(), std::make_shared())); if (nullptr == thisChiller.Representation) { - ShowSevereError(state, format("{} is not an instance of an ASHRAE205 Chiller.", rep_file_path.string())); + ShowSevereError(state, format("{} is not an instance of an ASHRAE205 Chiller.", rep_file_path)); ErrorsFound = true; } thisChiller.Representation->performance.performance_map_cooling.get_logger()->set_message_context(&thisChiller.LoggerContext); diff --git a/src/EnergyPlus/CommandLineInterface.cc b/src/EnergyPlus/CommandLineInterface.cc index 3f7eb8920df..b3ff583fafc 100644 --- a/src/EnergyPlus/CommandLineInterface.cc +++ b/src/EnergyPlus/CommandLineInterface.cc @@ -261,8 +261,8 @@ Built on Platform: {} R"debug( state.dataGlobal->AnnualSimulation = {}, state.dataGlobal->DDOnlySimulation = {}, -state.dataStrGlobals->outDirPath = '{}', -state.dataStrGlobals->inputIddFilePath= '{}', +state.dataStrGlobals->outDirPath = '{:g}', +state.dataStrGlobals->inputIddFilePath= '{:g}', runEPMacro = {}, prefixOutName = {}, @@ -274,13 +274,13 @@ state.dataGlobal->outputEpJSONConversionOnly={}, suffixType={}, state.dataGlobal->numThread={}, -state.files.inputWeatherFilePath.filePath='{}', -state.dataStrGlobals->inputFilePath='{}', +state.files.inputWeatherFilePath.filePath='{:g}', +state.dataStrGlobals->inputFilePath='{:g}', )debug", state.dataGlobal->AnnualSimulation, state.dataGlobal->DDOnlySimulation, - state.dataStrGlobals->outDirPath.generic_string(), - state.dataStrGlobals->inputIddFilePath.generic_string(), + state.dataStrGlobals->outDirPath, + state.dataStrGlobals->inputIddFilePath, runEPMacro, prefixOutName, @@ -289,8 +289,8 @@ state.dataStrGlobals->inputFilePath='{}', state.dataGlobal->outputEpJSONConversionOnly, suffixType, state.dataGlobal->numThread, - state.files.inputWeatherFilePath.filePath.generic_string(), - state.dataStrGlobals->inputFilePath.generic_string()); + state.files.inputWeatherFilePath.filePath, + state.dataStrGlobals->inputFilePath); fmt::print(stderr, "--debug-cli passed: exiting early\n"); @@ -329,8 +329,7 @@ state.dataStrGlobals->inputFilePath='{}', break; default: DisplayString(state, - fmt::format("ERROR: Input file must have IDF, IMF, or epJSON extension: {}", - state.dataStrGlobals->inputFilePath.generic_string())); + fmt::format("ERROR: Input file must have IDF, IMF, or epJSON extension: {:g}", state.dataStrGlobals->inputFilePath)); if (eplusRunningViaAPI) { return static_cast(ReturnCodes::Failure); } else { @@ -412,11 +411,7 @@ state.dataStrGlobals->inputFilePath='{}', // Helper to construct output file path auto composePath = [&outputFilePrefixFullPath](const std::string &suffix) -> fs::path { - #ifdef _WIN32 - return fs::path(outputFilePrefixFullPath.native() + CLI::widen(suffix)); - #else - return fs::path(outputFilePrefixFullPath.string() + suffix); - #endif + return FileSystem::appendSuffixToPath(outputFilePrefixFullPath, suffix); }; // EnergyPlus files @@ -531,7 +526,7 @@ state.dataStrGlobals->inputFilePath='{}', if (FileSystem::fileExists(state.files.iniFile.filePath)) { EnergyPlus::InputFile iniFile = state.files.iniFile.try_open(); if (!iniFile.good()) { - DisplayString(state, "ERROR: Could not open file " + iniFile.filePath.string() + " for input (read)."); + DisplayString(state, fmt::format("ERROR: Could not open file {} for input (read).", iniFile.filePath)); if (eplusRunningViaAPI) { return static_cast(ReturnCodes::Failure); } else { @@ -558,7 +553,7 @@ state.dataStrGlobals->inputFilePath='{}', // Check if specified files exist if (!FileSystem::fileExists(state.dataStrGlobals->inputFilePath)) { DisplayString( - state, "ERROR: Could not find input data file: " + FileSystem::getAbsolutePath(state.dataStrGlobals->inputFilePath).string() + "."); + state, fmt::format("ERROR: Could not find input data file: {}.", FileSystem::getAbsolutePath(state.dataStrGlobals->inputFilePath))); DisplayString(state, errorFollowUp); if (eplusRunningViaAPI) { return static_cast(ReturnCodes::Failure); @@ -571,7 +566,7 @@ state.dataStrGlobals->inputFilePath='{}', if (!FileSystem::fileExists(state.files.inputWeatherFilePath.filePath)) { DisplayString( state, - "ERROR: Could not find weather file: " + FileSystem::getAbsolutePath(state.files.inputWeatherFilePath.filePath).string() + "."); + fmt::format("ERROR: Could not find weather file: {}.", FileSystem::getAbsolutePath(state.files.inputWeatherFilePath.filePath))); DisplayString(state, errorFollowUp); if (eplusRunningViaAPI) { return static_cast(ReturnCodes::Failure); @@ -587,14 +582,14 @@ state.dataStrGlobals->inputFilePath='{}', if (runEPMacro) { fs::path epMacroPath = (state.dataStrGlobals->exeDirectoryPath / "EPMacro").replace_extension(FileSystem::exeExtension); if (!FileSystem::fileExists(epMacroPath)) { - DisplayString(state, "ERROR: Could not find EPMacro executable: " + FileSystem::getAbsolutePath(epMacroPath).string() + "."); + DisplayString(state, fmt::format("ERROR: Could not find EPMacro executable: {}.", FileSystem::getAbsolutePath(epMacroPath))); if (eplusRunningViaAPI) { return static_cast(ReturnCodes::Failure); } else { exit(EXIT_FAILURE); } } - std::string epMacroCommand = "\"" + epMacroPath.string() + "\""; + std::string epMacroCommand = "\"" + FileSystem::toString(epMacroPath) + "\""; bool inputFilePathdIn = (FileSystem::getAbsolutePath(state.dataStrGlobals->inputFilePath) == FileSystem::getAbsolutePath("in.imf")); if (!inputFilePathdIn) { @@ -615,21 +610,21 @@ state.dataStrGlobals->inputFilePath='{}', (state.dataStrGlobals->exeDirectoryPath / fs::path("ExpandObjects")).replace_extension(FileSystem::exeExtension); if (!FileSystem::fileExists(expandObjectsPath)) { DisplayString(state, - "ERROR: Could not find ExpandObjects executable: " + FileSystem::getAbsolutePath(expandObjectsPath).string() + "."); + fmt::format("ERROR: Could not find ExpandObjects executable: {}.", FileSystem::getAbsolutePath(expandObjectsPath))); if (eplusRunningViaAPI) { return static_cast(ReturnCodes::Failure); } else { exit(EXIT_FAILURE); } } - std::string expandObjectsCommand = "\"" + expandObjectsPath.string() + "\""; + std::string expandObjectsCommand = "\"" + FileSystem::toString(expandObjectsPath) + "\""; bool inputFilePathdIn = (FileSystem::getAbsolutePath(state.dataStrGlobals->inputFilePath) == FileSystem::getAbsolutePath("in.idf")); // check if IDD actually exists since ExpandObjects still requires it if (!FileSystem::fileExists(state.dataStrGlobals->inputIddFilePath)) { DisplayString(state, - "ERROR: Could not find input data dictionary: " + - FileSystem::getAbsolutePath(state.dataStrGlobals->inputIddFilePath).string() + "."); + fmt::format("ERROR: Could not find input data dictionary: {}.", + FileSystem::getAbsolutePath(state.dataStrGlobals->inputIddFilePath))); DisplayString(state, errorFollowUp); if (eplusRunningViaAPI) { return static_cast(ReturnCodes::Failure); @@ -823,7 +818,7 @@ state.dataStrGlobals->inputFilePath='{}', state, "ERROR: Could not find ReadVarsESO executable. When calling through C API, make sure to call setEnergyPlusRootDirectory"); } else { - DisplayString(state, "ERROR: Could not find ReadVarsESO executable: " + FileSystem::getAbsolutePath(readVarsPath).string() + "."); + DisplayString(state, fmt::format("ERROR: Could not find ReadVarsESO executable: {}.", FileSystem::getAbsolutePath(readVarsPath))); } return static_cast(ReturnCodes::Failure); } @@ -836,10 +831,10 @@ state.dataStrGlobals->inputFilePath='{}', if (!rviFileExists) { std::ofstream ofs{RVIfile}; if (!ofs.good()) { - ShowFatalError(state, format("EnergyPlus: Could not open file \"{}\" for output (write).", RVIfile.string())); + ShowFatalError(state, format("EnergyPlus: Could not open file \"{}\" for output (write).", RVIfile)); } else { - ofs << state.files.eso.filePath.string() << '\n'; - ofs << state.files.csv.filePath.string() << '\n'; + ofs << FileSystem::toString(state.files.eso.filePath) << '\n'; + ofs << FileSystem::toString(state.files.csv.filePath) << '\n'; } } @@ -847,17 +842,17 @@ state.dataStrGlobals->inputFilePath='{}', if (!mviFileExists) { std::ofstream ofs{MVIfile}; if (!ofs.good()) { - ShowFatalError(state, format("EnergyPlus: Could not open file \"{}\" for output (write).", RVIfile.string())); + ShowFatalError(state, format("EnergyPlus: Could not open file \"{}\" for output (write).", RVIfile)); } else { - ofs << state.files.mtr.filePath.string() << '\n'; - ofs << state.files.mtr_csv.filePath.string() << '\n'; + ofs << FileSystem::toString(state.files.mtr.filePath) << '\n'; + ofs << FileSystem::toString(state.files.mtr_csv.filePath) << '\n'; } } // We quote the paths in case we have spaces // "/Path/to/ReadVarEso" "/Path/to/folder with spaces/file.rvi" unlimited - std::string const readVarsRviCommand = "\"" + readVarsPath.string() + "\" \"" + RVIfile.string() + "\" unlimited"; - std::string const readVarsMviCommand = "\"" + readVarsPath.string() + "\" \"" + MVIfile.string() + "\" unlimited"; + std::string const readVarsRviCommand = "\"" + FileSystem::toString(readVarsPath) + "\" \"" + FileSystem::toString(RVIfile) + "\" unlimited"; + std::string const readVarsMviCommand = "\"" + FileSystem::toString(readVarsPath) + "\" \"" + FileSystem::toString(MVIfile) + "\" unlimited"; // systemCall will be responsible to handle to above command on Windows versus Unix FileSystem::systemCall(readVarsRviCommand); diff --git a/src/EnergyPlus/CurveManager.cc b/src/EnergyPlus/CurveManager.cc index ea358edc77a..f000fde6243 100644 --- a/src/EnergyPlus/CurveManager.cc +++ b/src/EnergyPlus/CurveManager.cc @@ -2309,12 +2309,12 @@ namespace Curve { fs::path filePath(tmp); if (!indVarInstance.count("external_file_column_number")) { ShowSevereError(state, - format("{}: No column number defined for external file \"{}\"", contextString, filePath.string())); + format("{}: No column number defined for external file \"{}\"", contextString, filePath)); ErrorsFound = true; } if (!indVarInstance.count("external_file_starting_row_number")) { ShowSevereError( - state, format("{}: No starting row number defined for external file \"{}\"", contextString, filePath.string())); + state, format("{}: No starting row number defined for external file \"{}\"", contextString, filePath)); ErrorsFound = true; } @@ -2507,12 +2507,12 @@ namespace Curve { fs::path filePath(tmp); if (!fields.count("external_file_column_number")) { - ShowSevereError(state, format("{}: No column number defined for external file \"{}\"", contextString, filePath.string())); + ShowSevereError(state, format("{}: No column number defined for external file \"{}\"", contextString, filePath)); ErrorsFound = true; } if (!fields.count("external_file_starting_row_number")) { ShowSevereError(state, - format("{}: No starting row number defined for external file \"{}\"", contextString, filePath.string())); + format("{}: No starting row number defined for external file \"{}\"", contextString, filePath)); ErrorsFound = true; } @@ -2682,11 +2682,11 @@ namespace Curve { auto &content = contents[col]; if (col >= numColumns) { ShowFatalError( - state, format("File \"{}\" : Requested column ({}) exceeds the number of columns ({}).", filePath.string(), col + 1, numColumns)); + state, format("File \"{}\" : Requested column ({}) exceeds the number of columns ({}).", filePath, col + 1, numColumns)); } if (row >= numRows) { ShowFatalError( - state, format("File \"{}\" : Requested starting row ({}) exceeds the number of rows ({}).", filePath.string(), row + 1, numRows)); + state, format("File \"{}\" : Requested starting row ({}) exceeds the number of rows ({}).", filePath, row + 1, numRows)); } std::vector array(numRows - row); std::transform(content.begin() + row, content.end(), array.begin(), [](std::string_view str) { diff --git a/src/EnergyPlus/DataSystemVariables.cc b/src/EnergyPlus/DataSystemVariables.cc index 2d13588b361..def6ab83745 100644 --- a/src/EnergyPlus/DataSystemVariables.cc +++ b/src/EnergyPlus/DataSystemVariables.cc @@ -183,7 +183,7 @@ namespace DataSystemVariables { for (std::size_t i = 0; i < numPathsToTest; ++i) { if (FileSystem::fileExists(pathsToCheck[i].first)) { foundFilePath = pathsToCheck[i].first; - print(state.files.audit, "found ({})={}\n", pathsToCheck[i].second, FileSystem::getAbsolutePath(foundFilePath).string()); + print(state.files.audit, "found ({})={}\n", pathsToCheck[i].second, FileSystem::getAbsolutePath(foundFilePath)); return foundFilePath; } else { @@ -198,15 +198,15 @@ namespace DataSystemVariables { if (!found) { pathsChecked.push_back(currentPath); } - print(state.files.audit, "not found ({})={}\n", pathsToCheck[i].second, FileSystem::getAbsolutePath(pathsToCheck[i].first).string()); + print(state.files.audit, "not found ({})={}\n", pathsToCheck[i].second, FileSystem::getAbsolutePath(pathsToCheck[i].first)); } } // If we get here, we didn't find the file - ShowSevereError(state, format("{}\"{}\" not found.", contextString, originalInputFilePath.string())); + ShowSevereError(state, format("{}\"{}\" not found.", contextString, originalInputFilePath)); ShowContinueError(state, " Paths searched:"); for (auto &path : pathsChecked) { - ShowContinueError(state, format(" {}: \"{}\"", path.second, path.first.string())); + ShowContinueError(state, format(" {}: \"{}\"", path.second, path.first)); } return foundFilePath; diff --git a/src/EnergyPlus/DaylightingManager.cc b/src/EnergyPlus/DaylightingManager.cc index a5ac94e669f..c06f9dee700 100644 --- a/src/EnergyPlus/DaylightingManager.cc +++ b/src/EnergyPlus/DaylightingManager.cc @@ -8998,7 +8998,7 @@ void ReportIllumMap(EnergyPlusData &state, int const MapNum) auto openMapFile = [&](const fs::path &filePath) -> InputOutputFile & { auto &outputFile = *illumMap.mapFile; - outputFile.filePath = fs::path(filePath.string() + fmt::to_string(MapNum)); + outputFile.filePath = FileSystem::appendSuffixToPath(filePath, fmt::to_string(MapNum)); outputFile.ensure_open(state, "ReportIllumMap"); return outputFile; }; diff --git a/src/EnergyPlus/FileSystem.cc b/src/EnergyPlus/FileSystem.cc index 4fa2ca4ac13..9f573a96a39 100644 --- a/src/EnergyPlus/FileSystem.cc +++ b/src/EnergyPlus/FileSystem.cc @@ -347,7 +347,7 @@ namespace FileSystem { { // Shenanigans would not be needed with fmt 10+ (maybe earlier), because fmt has native fs::path support if (!fileExists(filePath)) { - throw FatalError(fmt::format("File does not exists: {}", toString(filePath))); + throw FatalError(fmt::format("File does not exists: {}", filePath)); } // Can only be 'r', 'b' or 'rb' @@ -358,7 +358,7 @@ namespace FileSystem { const std::uintmax_t file_size = fs::file_size(filePath); std::ifstream file(filePath, mode); if (!file.is_open()) { - throw FatalError(fmt::format("Could not open file: {}", toString(filePath))); + throw FatalError(fmt::format("Could not open file: {}", filePath)); } std::string result(file_size, '\0'); file.read(result.data(), file_size); @@ -370,7 +370,7 @@ namespace FileSystem { // Shenanigans would not be needed with fmt 10+ (maybe earlier), because fmt has native fs::path support if (!fileExists(filePath)) { - throw FatalError(fmt::format("File does not exists: {}", toString(filePath))); + throw FatalError(fmt::format("File does not exists: {}", filePath)); } // Can only be 'r', 'b' or 'rb' @@ -380,7 +380,7 @@ namespace FileSystem { std::ifstream file(filePath, mode); if (!file.is_open()) { - throw FatalError(fmt::format("Could not open file: {}", toString(filePath))); + throw FatalError(fmt::format("Could not open file: {}", filePath)); } FileTypes const ext = getFileType(filePath); diff --git a/src/EnergyPlus/HeatBalanceManager.cc b/src/EnergyPlus/HeatBalanceManager.cc index 5f791ee9e1a..2cb173bfd80 100644 --- a/src/EnergyPlus/HeatBalanceManager.cc +++ b/src/EnergyPlus/HeatBalanceManager.cc @@ -1924,7 +1924,7 @@ namespace HeatBalanceManager { DisplayString(state, "--Construction not found"); ErrorsFound = true; ShowSevereError(state, format("No match on WINDOW5 data file for Construction={}, or error in data file.", ConstructAlphas(0))); - ShowContinueError(state, format("...Looking on file={}", window5DataFilePath.string())); // TODO: call getAbsolutePath maybe? + ShowContinueError(state, format("...Looking on file={}", window5DataFilePath)); // TODO: call getAbsolutePath maybe? continue; } @@ -3854,9 +3854,9 @@ namespace HeatBalanceManager { if (endcol > 0) { if (int(NextLine.data[endcol - 1]) == DataSystemVariables::iUnicode_end) { ShowSevereError(state, - format("SearchWindow5DataFile: For \"{}\" in {} fiile, appears to be a Unicode or binary file.", + format("SearchWindow5DataFile: For \"{}\" in {} file, appears to be a Unicode or binary file.", DesiredConstructionName, - DesiredFilePath.string())); + DesiredFilePath)); ShowContinueError(state, "...This file cannot be read by this program. Please save as PC or Unix file and try again"); ShowFatalError(state, "Program terminates due to previous condition."); } @@ -3868,7 +3868,7 @@ namespace HeatBalanceManager { if (NextLine.eof) goto Label1000; ++FileLineCount; if (!has_prefixi(NextLine.data, "WINDOW5")) { - ShowSevereError(state, format("HeatBalanceManager: SearchWindow5DataFile: Error in Data File={}", DesiredFilePath.string())); + ShowSevereError(state, format("HeatBalanceManager: SearchWindow5DataFile: Error in Data File={}", DesiredFilePath)); ShowFatalError( state, format("Error reading Window5 Data File: first word of window entry is \"{}\", should be Window5.", NextLine.data.substr(0, 7))); diff --git a/src/EnergyPlus/IOFiles.cc b/src/EnergyPlus/IOFiles.cc index 614a27abcfd..66f0c09f3cc 100644 --- a/src/EnergyPlus/IOFiles.cc +++ b/src/EnergyPlus/IOFiles.cc @@ -68,7 +68,7 @@ InputFile &InputFile::ensure_open(EnergyPlusData &state, const std::string &call open(false, output_to_file); } if (!good()) { - ShowFatalError(state, fmt::format("{}: Could not open file {} for input (read).", caller, filePath.string())); + ShowFatalError(state, fmt::format("{}: Could not open file {} for input (read).", caller, filePath)); } return *this; } @@ -217,7 +217,7 @@ InputOutputFile &InputOutputFile::ensure_open(EnergyPlusData &state, const std:: open(false, output_to_file); } if (!good()) { - ShowFatalError(state, fmt::format("{}: Could not open file {} for output (write).", caller, filePath.string())); + ShowFatalError(state, fmt::format("{}: Could not open file {} for output (write).", caller, filePath)); } return *this; } diff --git a/src/EnergyPlus/InputProcessing/InputProcessor.cc b/src/EnergyPlus/InputProcessing/InputProcessor.cc index 85eaf153d0c..cbbc4776a7c 100644 --- a/src/EnergyPlus/InputProcessing/InputProcessor.cc +++ b/src/EnergyPlus/InputProcessing/InputProcessor.cc @@ -259,7 +259,7 @@ void cleanEPJSON(json &epjson) void InputProcessor::processInput(EnergyPlusData &state) { if (!FileSystem::fileExists(state.dataStrGlobals->inputFilePath)) { - ShowFatalError(state, "Input file path " + state.dataStrGlobals->inputFilePath.string() + " not found"); + ShowFatalError(state, fmt::format("Input file path {} not found", state.dataStrGlobals->inputFilePath)); return; } diff --git a/src/EnergyPlus/OutputProcessor.cc b/src/EnergyPlus/OutputProcessor.cc index 11f04dd6102..80f48e6b049 100644 --- a/src/EnergyPlus/OutputProcessor.cc +++ b/src/EnergyPlus/OutputProcessor.cc @@ -3913,8 +3913,8 @@ void SetInitialMeterReportingAndOutputNames(EnergyPlusData &state, format(R"(Output:Meter:MeterFileOnly requested for "{}" ({}), already on "Output:Meter". Will report to both {} and {})", meter->Name, reportFreqNames[(freq == ReportFreq::EachCall) ? (int)ReportFreq::TimeStep : (int)freq], - state.files.eso.filePath.filename().string(), - state.files.mtr.filePath.filename().string())); + state.files.eso.filePath.filename(), + state.files.mtr.filePath.filename())); } if (!period.Rpt) { period.Rpt = true; @@ -3933,8 +3933,8 @@ void SetInitialMeterReportingAndOutputNames(EnergyPlusData &state, format("Output:Meter:MeterFileOnly requested for \"Cumulative {}\" (TimeStep), already on \"Output:Meter\". " "Will report to both {} and {}", meter->Name, - state.files.eso.filePath.filename().string(), - state.files.mtr.filePath.filename().string())); + state.files.eso.filePath.filename(), + state.files.mtr.filePath.filename())); } if (!period.accRpt) { @@ -4730,7 +4730,7 @@ int initErrorFile(EnergyPlusData &state) { state.files.err_stream = std::make_unique(state.files.outputErrFilePath); if (state.files.err_stream->bad()) { - DisplayString(state, "ERROR: Could not open file " + state.files.outputErrFilePath.string() + " for output (write)."); + DisplayString(state, fmt::format("ERROR: Could not open file {} for output (write).", state.files.outputErrFilePath)); return EXIT_FAILURE; } return EXIT_SUCCESS; diff --git a/src/EnergyPlus/OutputReportTabular.cc b/src/EnergyPlus/OutputReportTabular.cc index c0e6b764335..4d7a6aa62f5 100644 --- a/src/EnergyPlus/OutputReportTabular.cc +++ b/src/EnergyPlus/OutputReportTabular.cc @@ -179,7 +179,7 @@ std::ofstream &open_tbl_stream(EnergyPlusData &state, int const iStyle, fs::path if (output_to_file) { tbl_stream.open(filePath); if (!tbl_stream) { - ShowFatalError(state, format("OpenOutputTabularFile: Could not open file \"{}\" for output (write).", filePath.string())); + ShowFatalError(state, format("OpenOutputTabularFile: Could not open file \"{}\" for output (write).", filePath)); } } else { tbl_stream.setstate(std::ios_base::badbit); diff --git a/src/EnergyPlus/PluginManager.cc b/src/EnergyPlus/PluginManager.cc index 73f2b98fb99..ca742de3dce 100644 --- a/src/EnergyPlus/PluginManager.cc +++ b/src/EnergyPlus/PluginManager.cc @@ -407,17 +407,16 @@ void initPython(EnergyPlusData &state, fs::path const &pathToPythonPackages) status = PyConfig_SetString(&config, &config.home, wcharPath); if (PyStatus_Exception(status)) { - ShowFatalError(state, fmt::format("Could not set home to {} on PyConfig... {}", pathToPythonPackages.generic_string(), status)); + ShowFatalError(state, fmt::format("Could not set home to {:g} on PyConfig... {}", pathToPythonPackages, status)); } status = PyConfig_SetString(&config, &config.base_prefix, wcharPath); if (PyStatus_Exception(status)) { - ShowFatalError(state, fmt::format("Could not set base_prefix to {} on PyConfig... {}", pathToPythonPackages.generic_string(), status)); + ShowFatalError(state, fmt::format("Could not set base_prefix to {:g} on PyConfig... {}", pathToPythonPackages, status)); } config.module_search_paths_set = 1; status = PyWideStringList_Append(&config.module_search_paths, wcharPath); if (PyStatus_Exception(status)) { - ShowFatalError(state, - fmt::format("Could not add {} to module_search_paths on PyConfig... {}", pathToPythonPackages.generic_string(), status)); + ShowFatalError(state, fmt::format("Could not add {:g} to module_search_paths on PyConfig... {}", pathToPythonPackages, status)); } } else { @@ -428,17 +427,16 @@ void initPython(EnergyPlusData &state, fs::path const &pathToPythonPackages) status = PyConfig_SetString(&config, &config.home, wcharPath); if (PyStatus_Exception(status)) { - ShowFatalError(state, fmt::format("Could not set home to {} on PyConfig... {}", pathToPythonPackages.generic_string(), status)); + ShowFatalError(state, fmt::format("Could not set home to {:g} on PyConfig... {}", pathToPythonPackages, status)); } status = PyConfig_SetString(&config, &config.base_prefix, wcharPath); if (PyStatus_Exception(status)) { - ShowFatalError(state, fmt::format("Could not set base_prefix to {} on PyConfig... {}", pathToPythonPackages.generic_string(), status)); + ShowFatalError(state, fmt::format("Could not set base_prefix to {:g} on PyConfig... {}", pathToPythonPackages, status)); } config.module_search_paths_set = 1; status = PyWideStringList_Append(&config.module_search_paths, wcharPath); if (PyStatus_Exception(status)) { - ShowFatalError(state, - fmt::format("Could not add {} to module_search_paths on PyConfig... {}", pathToPythonPackages.generic_string(), status)); + ShowFatalError(state, fmt::format("Could not add {:g} to module_search_paths on PyConfig... {}", pathToPythonPackages, status)); } PyMem_RawFree(wcharPath); @@ -697,6 +695,12 @@ PluginManager::~PluginManager() #endif // LINK_WITH_PYTHON } +PluginInstance::PluginInstance(const fs::path &_modulePath, const std::string &_className, std::string emsName, bool runPluginDuringWarmup) + : modulePath(_modulePath), className(_className), emsAlias(std::move(emsName)), runDuringWarmup(runPluginDuringWarmup), + stringIdentifier(FileSystem::toString(_modulePath) + "." + _className) +{ +} + void PluginInstance::reportPythonError([[maybe_unused]] EnergyPlusData &state) { #if LINK_WITH_PYTHON @@ -786,13 +790,13 @@ void PluginInstance::setup([[maybe_unused]] EnergyPlusData &state) pModuleName = PyUnicode_FromString(s.c_str()); // New reference } if (pModuleName == nullptr) { - EnergyPlus::ShowFatalError(state, format("Failed to convert the Module Path \"{}\" for import", this->modulePath.generic_string())); + EnergyPlus::ShowFatalError(state, format("Failed to convert the Module Path \"{:g}\" for import", this->modulePath)); } this->pModule = PyImport_Import(pModuleName); Py_DECREF(pModuleName); if (!this->pModule) { - EnergyPlus::ShowSevereError(state, format("Failed to import module \"{}\"", this->modulePath.generic_string())); + EnergyPlus::ShowSevereError(state, format("Failed to import module \"{:g}\"", this->modulePath)); EnergyPlus::ShowContinueError(state, format("Current sys.path={}", PluginManager::currentPythonPath())); // ONLY call PyErr_Print if PyErr has occurred, otherwise it will cause other problems if (PyErr_Occurred()) { @@ -804,7 +808,7 @@ void PluginInstance::setup([[maybe_unused]] EnergyPlusData &state) } PyObject *pModuleDict = PyModule_GetDict(this->pModule); if (!pModuleDict) { - EnergyPlus::ShowSevereError(state, format("Failed to read module dictionary from module \"{}\"", this->modulePath.generic_string())); + EnergyPlus::ShowSevereError(state, format("Failed to read module dictionary from module \"{:g}\"", this->modulePath)); if (PyErr_Occurred()) { PluginInstance::reportPythonError(state); } else { @@ -826,7 +830,7 @@ void PluginInstance::setup([[maybe_unused]] EnergyPlusData &state) PyObject *pClass = PyDict_GetItemString(pModuleDict, className.c_str()); // Py_DECREF(pModuleDict); // PyModule_GetDict returns a borrowed reference, DO NOT decrement if (!pClass) { - EnergyPlus::ShowSevereError(state, format(R"(Failed to get class type "{}" from module "{}")", className, modulePath.generic_string())); + EnergyPlus::ShowSevereError(state, format(R"(Failed to get class type "{}" from module "{:g}")", className, modulePath)); if (PyErr_Occurred()) { PluginInstance::reportPythonError(state); } else { @@ -863,11 +867,9 @@ void PluginInstance::setup([[maybe_unused]] EnergyPlusData &state) std::string const detectOverriddenFunctionName = "_detect_overridden"; PyObject *detectFunction = PyObject_GetAttrString(this->pClassInstance, detectOverriddenFunctionName.c_str()); if (!detectFunction || !PyCallable_Check(detectFunction)) { - EnergyPlus::ShowSevereError(state, - format(R"(Could not find or call function "{}" on class "{}.{}")", - detectOverriddenFunctionName, - this->modulePath.generic_string(), - this->className)); + EnergyPlus::ShowSevereError( + state, + format(R"(Could not find or call function "{}" on class "{:g}.{}")", detectOverriddenFunctionName, this->modulePath, this->className)); if (PyErr_Occurred()) { PluginInstance::reportPythonError(state); } else { @@ -1177,8 +1179,7 @@ void PluginManager::addToPythonPath(EnergyPlusData &state, const fs::path &inclu unicodeIncludePath = PyUnicode_FromString(s.c_str()); // New reference } if (unicodeIncludePath == nullptr) { - EnergyPlus::ShowFatalError(state, - format("ERROR converting the path \"{}\" for addition to the sys.path in Python", includePath.generic_string())); + EnergyPlus::ShowFatalError(state, format("ERROR converting the path \"{:g}\" for addition to the sys.path in Python", includePath)); } PyObject *sysPath = PySys_GetObject("path"); // Borrowed reference @@ -1189,11 +1190,11 @@ void PluginManager::addToPythonPath(EnergyPlusData &state, const fs::path &inclu if (PyErr_Occurred()) { PluginInstance::reportPythonError(state); } - EnergyPlus::ShowFatalError(state, format("ERROR adding \"{}\" to the sys.path in Python", includePath.generic_string())); + EnergyPlus::ShowFatalError(state, format("ERROR adding \"{:g}\" to the sys.path in Python", includePath)); } if (userDefinedPath) { - EnergyPlus::ShowMessage(state, format("Successfully added path \"{}\" to the sys.path in Python", includePath.generic_string())); + EnergyPlus::ShowMessage(state, format("Successfully added path \"{:g}\" to the sys.path in Python", includePath)); } // PyRun_SimpleString)("print(' EPS : ' + str(sys.path))"); diff --git a/src/EnergyPlus/PluginManager.hh b/src/EnergyPlus/PluginManager.hh index ceb84bb5bfd..f9122a1afce 100644 --- a/src/EnergyPlus/PluginManager.hh +++ b/src/EnergyPlus/PluginManager.hh @@ -93,11 +93,7 @@ namespace PluginManagement { struct PluginInstance { - PluginInstance(const fs::path &_modulePath, const std::string &_className, std::string emsName, bool runPluginDuringWarmup) - : modulePath(_modulePath), className(_className), emsAlias(std::move(emsName)), runDuringWarmup(runPluginDuringWarmup), - stringIdentifier(_modulePath.string() + "." + _className) - { - } + PluginInstance(const fs::path &_modulePath, const std::string &_className, std::string emsName, bool runPluginDuringWarmup); // members fs::path modulePath; diff --git a/src/EnergyPlus/SQLiteProcedures.cc b/src/EnergyPlus/SQLiteProcedures.cc index 1ec88c7b4d6..56b7e53f825 100644 --- a/src/EnergyPlus/SQLiteProcedures.cc +++ b/src/EnergyPlus/SQLiteProcedures.cc @@ -68,8 +68,6 @@ #include #include -#include - namespace EnergyPlus { constexpr std::array reportFreqInts = { @@ -2621,21 +2619,15 @@ SQLiteProcedures::SQLiteProcedures(std::shared_ptr const &errorStr // std::cout << "dbName.string()=" << dbName.string() << std::endl; // std::cout << "dbName.generic_string()=" << dbName.generic_string() << std::endl; std::wcout << "dbName.generic_wstring()=" << dbName.generic_wstring() << std::endl; - std::cout << "narrow(dbName.generic_wstring())=" << CLI::narrow(dbName.generic_wstring()) << std::endl; + std::cout << "narrow(dbName.generic_wstring())=" << FileSystem::toGenericString(dbName) << std::endl; } - std::string const dbName_utf8 = [&dbName]() { - if constexpr (std::is_same_v) { - return CLI::narrow(dbName.generic_wstring()); - } else { - return dbName.generic_string(); - } - }(); + std::string const dbName_utf8 = FileSystem::toGenericString(dbName); // Test if we can write to the sqlite error file // Does there need to be a separate sqlite.err file at all? Consider using eplusout.err if (m_errorStream) { - *m_errorStream << "SQLite3 message, " << CLI::narrow(errorFilePath.generic_wstring()) << " open for processing!" << std::endl; + *m_errorStream << "SQLite3 message, " << FileSystem::toGenericString(errorFilePath) << " open for processing!" << std::endl; } else { ok = false; } diff --git a/src/EnergyPlus/ScheduleManager.cc b/src/EnergyPlus/ScheduleManager.cc index 27e216bad7c..83184a58b25 100644 --- a/src/EnergyPlus/ScheduleManager.cc +++ b/src/EnergyPlus/ScheduleManager.cc @@ -490,7 +490,7 @@ namespace ScheduleManager { ShowSevereError(state, error); } } - ShowContinueError(state, fmt::format("Error Occurred in {}", state.files.TempFullFilePath.filePath.string())); + ShowContinueError(state, fmt::format("Error Occurred in {}", state.files.TempFullFilePath.filePath)); ShowFatalError(state, "Program terminates due to previous condition."); } schedule_file_shading_result = it.first; @@ -1805,7 +1805,7 @@ namespace ScheduleManager { ShowSevereError(state, error); } } - ShowContinueError(state, fmt::format("Error Occurred in {}", state.files.TempFullFilePath.filePath.string())); + ShowContinueError(state, fmt::format("Error Occurred in {}", state.files.TempFullFilePath.filePath)); ShowFatalError(state, "Program terminates due to previous condition."); } result = it.first; diff --git a/src/EnergyPlus/SimulationManager.cc b/src/EnergyPlus/SimulationManager.cc index 70ba13d6ddd..20306b3dae7 100644 --- a/src/EnergyPlus/SimulationManager.cc +++ b/src/EnergyPlus/SimulationManager.cc @@ -1579,7 +1579,7 @@ namespace SimulationManager { { auto result = std::make_unique(filePath, mode); // (AUTO_OK_UPTR) if (!result->good()) { - ShowFatalError(state, format("OpenOutputFiles: Could not open file {} for output (write).", filePath.string())); + ShowFatalError(state, format("OpenOutputFiles: Could not open file {} for output (write).", filePath)); } return result; } @@ -1588,7 +1588,7 @@ namespace SimulationManager { { std::unique_ptr result = nullptr; #ifdef _WIN32 - std::string filePathStr = filePath.string(); + std::string filePathStr = FileSystem::toString(filePath); const char *path = filePathStr.c_str(); #else const char *path = filePath.c_str(); @@ -1598,7 +1598,7 @@ namespace SimulationManager { result = std::make_unique(std::move(f)); } catch (const std::system_error &error) { ShowSevereError(state, error.what()); - ShowFatalError(state, format("OpenOutputFiles: Could not open file {} for output (write).", filePath.string())); + ShowFatalError(state, format("OpenOutputFiles: Could not open file {} for output (write).", filePath)); } return result; } diff --git a/src/EnergyPlus/SolarShading.cc b/src/EnergyPlus/SolarShading.cc index adbeb77c6ce..30d09da0595 100644 --- a/src/EnergyPlus/SolarShading.cc +++ b/src/EnergyPlus/SolarShading.cc @@ -186,9 +186,8 @@ void InitSolarCalculations(EnergyPlusData &state) state.dataSolarShading->shd_stream = std::make_unique(state.dataStrGlobals->outputShdFilePath, std::ios_base::out | std::ios_base::trunc); if (!state.dataSolarShading->shd_stream) { - ShowFatalError(state, - format("InitSolarCalculations: Could not open file \"{}\" for output (write).", - state.dataStrGlobals->outputShdFilePath.string())); + ShowFatalError( + state, format("InitSolarCalculations: Could not open file \"{}\" for output (write).", state.dataStrGlobals->outputShdFilePath)); } } else { state.dataSolarShading->shd_stream = std::make_unique(nullptr); diff --git a/src/EnergyPlus/TARCOGOutput.cc b/src/EnergyPlus/TARCOGOutput.cc index d42e230c7d5..7cb0680024e 100644 --- a/src/EnergyPlus/TARCOGOutput.cc +++ b/src/EnergyPlus/TARCOGOutput.cc @@ -52,6 +52,7 @@ // EnergyPlus Headers #include #include +#include #include #include #include @@ -291,7 +292,7 @@ void WriteInputArguments(EnergyPlusData &state, print(InArgumentsFile, Format_1007, state.dataTARCOGOutputs->iguID); } - print(InArgumentsFile, " Debug dir: {}\n", DBGD.string()); + print(InArgumentsFile, " Debug dir: {}\n", DBGD); print(InArgumentsFile, "\n"); print(InArgumentsFile, Format_1000); @@ -1267,8 +1268,8 @@ void PrepDebugFilesAndVariables(EnergyPlusData &state, // setup file names if file name is provided, otherwise keep default if (!Debug_file.empty()) { - files.WINCogFilePath = fs::path(Debug_file.string() + ".w7"); - files.DebugOutputFilePath = fs::path(Debug_file.string() + ".dbg"); + files.WINCogFilePath = FileSystem::appendSuffixToPath(Debug_file, ".w7"); + files.DebugOutputFilePath = FileSystem::appendSuffixToPath(Debug_file, ".dbg"); } files.WriteDebugOutput = false; diff --git a/src/EnergyPlus/UtilityRoutines.cc b/src/EnergyPlus/UtilityRoutines.cc index dd63a95befb..5de5db24599 100644 --- a/src/EnergyPlus/UtilityRoutines.cc +++ b/src/EnergyPlus/UtilityRoutines.cc @@ -75,7 +75,7 @@ extern "C" { #include // #include #include -// #include +#include #include #include // #include @@ -431,9 +431,9 @@ namespace Util { if (state.files.outputControl.perflog) { fsPerfLog.open(state.dataStrGlobals->outputPerfLogFilePath, std::fstream::out); // open file normally if (!fsPerfLog) { - ShowFatalError(state, - format("appendPerfLog: Could not open file \"{}\" for output (write).", - state.dataStrGlobals->outputPerfLogFilePath.string())); + ShowFatalError( + state, + format("appendPerfLog: Could not open file \"{}\" for output (write).", state.dataStrGlobals->outputPerfLogFilePath)); } fsPerfLog << state.dataUtilityRoutines->appendPerfLog_headerRow << std::endl; fsPerfLog << state.dataUtilityRoutines->appendPerfLog_valuesRow << std::endl; @@ -442,9 +442,9 @@ namespace Util { if (state.files.outputControl.perflog) { fsPerfLog.open(state.dataStrGlobals->outputPerfLogFilePath, std::fstream::app); // append to already existing file if (!fsPerfLog) { - ShowFatalError(state, - format("appendPerfLog: Could not open file \"{}\" for output (append).", - state.dataStrGlobals->outputPerfLogFilePath.string())); + ShowFatalError( + state, + format("appendPerfLog: Could not open file \"{}\" for output (append).", state.dataStrGlobals->outputPerfLogFilePath)); } fsPerfLog << state.dataUtilityRoutines->appendPerfLog_valuesRow << std::endl; } @@ -576,7 +576,7 @@ int AbortEnergyPlus(EnergyPlusData &state) auto tempfl = state.files.endFile.try_open(state.files.outputControl.end); if (!tempfl.good()) { - DisplayString(state, "AbortEnergyPlus: Could not open file " + tempfl.filePath.string() + " for output (write)."); + DisplayString(state, fmt::format("AbortEnergyPlus: Could not open file {} for output (write).", tempfl.filePath)); } print( tempfl, "EnergyPlus Terminated--Fatal Error Detected. {} Warning; {} Severe Errors; Elapsed Time={}\n", NumWarnings, NumSevere, Elapsed); @@ -712,7 +712,7 @@ int EndEnergyPlus(EnergyPlusData &state) { auto tempfl = state.files.endFile.try_open(state.files.outputControl.end); if (!tempfl.good()) { - DisplayString(state, "EndEnergyPlus: Could not open file " + tempfl.filePath.string() + " for output (write)."); + DisplayString(state, fmt::format("EndEnergyPlus: Could not open file {} for output (write).", tempfl.filePath)); } print(tempfl, "EnergyPlus Completed Successfully-- {} Warning; {} Severe Errors; Elapsed Time={}\n", NumWarnings, NumSevere, Elapsed); } diff --git a/src/EnergyPlus/WeatherManager.cc b/src/EnergyPlus/WeatherManager.cc index 6b267eaf01a..20f2f26a740 100644 --- a/src/EnergyPlus/WeatherManager.cc +++ b/src/EnergyPlus/WeatherManager.cc @@ -8432,7 +8432,7 @@ namespace Weather { auto statFile = state.files.inStatFilePath.try_open(); if (!statFile.good()) { ShowSevereError(state, - format("CalcAnnualAndMonthlyDryBulbTemp: Could not open file {} for input (read).", statFile.filePath.string())); + format("CalcAnnualAndMonthlyDryBulbTemp: Could not open file {} for input (read).", statFile.filePath)); ShowContinueError(state, "Water Mains Temperature will be set to a fixed default value of 10.0 C."); return; } @@ -8453,14 +8453,14 @@ namespace Weather { ShowSevereError( state, format("CalcAnnualAndMonthlyDryBulbTemp: Stat file '{}' does not have Monthly Statistics for Dry Bulb temperatures.", - statFile.filePath.string())); + statFile.filePath)); ShowContinueError(state, "Water Mains Temperature will be set to a fixed default value of 10.0 C."); return; } else if (lineAvg.find("Daily Avg") == std::string::npos) { ShowSevereError(state, format("CalcAnnualAndMonthlyDryBulbTemp: Stat file '{}' does not have the 'Daily Avg' line in the Monthly " "Statistics for Dry Bulb temperatures.", - statFile.filePath.string())); + statFile.filePath)); ShowContinueError(state, "Water Mains Temperature will be set to a fixed default value of 10.0 C."); return; } else { @@ -8482,7 +8482,7 @@ namespace Weather { bool epwHasLeapYear(false); if (!epwFile.good()) { ShowSevereError(state, - format("CalcAnnualAndMonthlyDryBulbTemp: Could not open file {} for input (read).", epwFile.filePath.string())); + format("CalcAnnualAndMonthlyDryBulbTemp: Could not open file {} for input (read).", epwFile.filePath)); ShowContinueError(state, "Water Mains Temperature will be set to a fixed default value of 10.0 C."); return; } @@ -8541,8 +8541,8 @@ namespace Weather { this->OADryBulbWeatherDataProcessed = true; } else { ShowSevereError(state, "CalcAnnualAndMonthlyDryBulbTemp: weather file or stat file does not exist."); - ShowContinueError(state, format("Weather file: {}.", state.files.inputWeatherFilePath.filePath.string())); - ShowContinueError(state, format("Stat file: {}.", state.files.inStatFilePath.filePath.string())); + ShowContinueError(state, format("Weather file: {}.", state.files.inputWeatherFilePath.filePath)); + ShowContinueError(state, format("Stat file: {}.", state.files.inStatFilePath.filePath)); ShowContinueError(state, "Water Mains Monthly Temperature cannot be calculated using CorrelationFromWeatherFile method."); ShowContinueError(state, "Instead a fixed default value of 10.0 C will be used."); } diff --git a/src/EnergyPlus/WindTurbine.cc b/src/EnergyPlus/WindTurbine.cc index 3de7724f34c..ab1ee89df7d 100644 --- a/src/EnergyPlus/WindTurbine.cc +++ b/src/EnergyPlus/WindTurbine.cc @@ -825,7 +825,7 @@ namespace WindTurbine { ShowWarningError(state, format("InitWindTurbine: read from {} file shows <365 days in weather file. Annual average " "wind speed used will be inaccurate.", - state.files.inStatFilePath.filePath.string())); + state.files.inStatFilePath.filePath)); lineIn.data.erase(0, lnPtr + 1); warningShown = true; } @@ -835,7 +835,7 @@ namespace WindTurbine { ShowWarningError(state, format("InitWindTurbine: read from {} file shows <365 days in weather file. Annual average wind " "speed used will be inaccurate.", - state.files.inStatFilePath.filePath.string())); + state.files.inStatFilePath.filePath)); lineIn.data.erase(0, lnPtr + 1); warningShown = true; } diff --git a/src/EnergyPlus/ZoneTempPredictorCorrector.cc b/src/EnergyPlus/ZoneTempPredictorCorrector.cc index 52944be15e9..20783b681b4 100644 --- a/src/EnergyPlus/ZoneTempPredictorCorrector.cc +++ b/src/EnergyPlus/ZoneTempPredictorCorrector.cc @@ -2690,7 +2690,7 @@ void CalculateMonthlyRunningAverageDryBulb(EnergyPlusData &state, Array1D Date: Mon, 8 Jul 2024 22:19:41 +0200 Subject: [PATCH 55/68] tweak toString to use a type_traits too --- src/EnergyPlus/FileSystem.cc | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/EnergyPlus/FileSystem.cc b/src/EnergyPlus/FileSystem.cc index 9f573a96a39..ff8484e9556 100644 --- a/src/EnergyPlus/FileSystem.cc +++ b/src/EnergyPlus/FileSystem.cc @@ -53,6 +53,7 @@ #include #include #include +#include #ifdef _WIN32 #include @@ -404,12 +405,11 @@ namespace FileSystem { std::string toString(fs::path const &p) { - return CLI::detail::maybe_narrow(p.c_str()); - // if constexpr (std::is_same_v) { - // return CLI::narrow(p.wstring()); - // } else { - // return p.string(); - // } + if constexpr (std::is_same_v) { + return CLI::narrow(p.wstring()); + } else { + return p.string(); + } } std::string toGenericString(fs::path const &p) From 83d7cf3f96e2d916a995161f48535ddb065aebdc Mon Sep 17 00:00:00 2001 From: Julien Marrec Date: Mon, 8 Jul 2024 22:22:16 +0200 Subject: [PATCH 56/68] update ExternalInterface --- src/EnergyPlus/ExternalInterface.cc | 31 +++++++++++++---------------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/src/EnergyPlus/ExternalInterface.cc b/src/EnergyPlus/ExternalInterface.cc index d36372fd93c..30e6ff105df 100644 --- a/src/EnergyPlus/ExternalInterface.cc +++ b/src/EnergyPlus/ExternalInterface.cc @@ -324,7 +324,7 @@ void CloseSocket(EnergyPlusData &state, int const FlagToWriteToSocket) bool fileExist = FileSystem::fileExists(state.dataExternalInterface->socCfgFilPath); if ((state.dataExternalInterface->socketFD == -1) && fileExist) { - state.dataExternalInterface->socketFD = establishclientsocket(state.dataExternalInterface->socCfgFilPath.string().c_str()); + state.dataExternalInterface->socketFD = establishclientsocket(FileSystem::toString(state.dataExternalInterface->socCfgFilPath).c_str()); } if (state.dataExternalInterface->socketFD >= 0) { @@ -398,14 +398,14 @@ void InitExternalInterface(EnergyPlusData &state) // Get port number if (FileSystem::fileExists(state.dataExternalInterface->socCfgFilPath)) { - state.dataExternalInterface->socketFD = establishclientsocket(state.dataExternalInterface->socCfgFilPath.string().c_str()); + state.dataExternalInterface->socketFD = establishclientsocket(FileSystem::toString(state.dataExternalInterface->socCfgFilPath).c_str()); if (state.dataExternalInterface->socketFD < 0) { ShowSevereError(state, format("ExternalInterface: Could not open socket. File descriptor = {}.", state.dataExternalInterface->socketFD)); state.dataExternalInterface->ErrorsFound = true; } } else { - ShowSevereError(state, format("ExternalInterface: Did not find file \"{}\".", state.dataExternalInterface->socCfgFilPath.string())); + ShowSevereError(state, format("ExternalInterface: Did not find file \"{}\".", state.dataExternalInterface->socCfgFilPath)); ShowContinueError(state, "This file needs to be in same directory as in.idf."); ShowContinueError(state, "Check the documentation for the ExternalInterface."); state.dataExternalInterface->ErrorsFound = true; @@ -833,7 +833,7 @@ void InstantiateInitializeFMUImport(EnergyPlusData &state) // Instantiate FMUs for (int i = 1; i <= state.dataExternalInterface->NumFMUObjects; ++i) { for (int j = 1; j <= state.dataExternalInterface->FMU(i).NumInstances; ++j) { - std::string const &folderStr = state.dataExternalInterface->FMU(i).Instance(j).WorkingFolder.string(); + std::string const folderStr = FileSystem::toString(state.dataExternalInterface->FMU(i).Instance(j).WorkingFolder); state.dataExternalInterface->FMU(i).Instance(j).fmicomponent = fmiEPlusInstantiateSlave((char *)folderStr.c_str(), &state.dataExternalInterface->FMU(i).Instance(j).LenWorkingFolder, @@ -1024,7 +1024,7 @@ void InitExternalInterfaceFMUImport(EnergyPlusData &state) strippedFileName(Loop) = state.dataExternalInterface->FMU(Loop).Name; } } - fullFileName(Loop) = tempFullFilePath.string(); + fullFileName(Loop) = FileSystem::toString(tempFullFilePath); } else { state.dataExternalInterface->ErrorsFound = true; } @@ -1132,14 +1132,13 @@ void InitExternalInterfaceFMUImport(EnergyPlusData &state) for (int i = 1; i <= state.dataExternalInterface->NumFMUObjects; ++i) { for (int j = 1; j <= state.dataExternalInterface->FMU(i).NumInstances; ++j) { // get the length of working folder trimmed - state.dataExternalInterface->FMU(i).Instance(j).LenWorkingFolder = - state.dataExternalInterface->FMU(i).Instance(j).WorkingFolder.string().length(); + std::string const workingFolderStr = FileSystem::toString(state.dataExternalInterface->FMU(i).Instance(j).WorkingFolder); + state.dataExternalInterface->FMU(i).Instance(j).LenWorkingFolder = workingFolderStr.length(); // unpack fmus // preprocess arguments for library call { std::vector fullFileNameArr(getCharArrayFromString(fullFileName(i))); - std::vector workingFolderArr( - getCharArrayFromString(state.dataExternalInterface->FMU(i).Instance(j).WorkingFolder.string())); + std::vector workingFolderArr(getCharArrayFromString(workingFolderStr)); int lenFileName(len(fullFileName(i))); // make the library call @@ -1158,8 +1157,7 @@ void InitExternalInterfaceFMUImport(EnergyPlusData &state) { // determine modelID and modelGUID of all FMU instances // preprocess arguments for library call - std::vector workingFolderArr( - getCharArrayFromString(state.dataExternalInterface->FMU(i).Instance(j).WorkingFolder.string())); + std::vector workingFolderArr(getCharArrayFromString(workingFolderStr)); // make the library call state.dataExternalInterface->FMU(i).Instance(j).Index = @@ -1185,13 +1183,12 @@ void InitExternalInterfaceFMUImport(EnergyPlusData &state) { // get the path to the binaries // preprocess args for library call - std::vector workingFolderArr( - getCharArrayFromString(state.dataExternalInterface->FMU(i).Instance(j).WorkingFolder.string())); + std::vector workingFolderArr(getCharArrayFromString(workingFolderStr)); // Reserve some space in the string, becasue addLibPathCurrentWorkflowFolder doesn't allocate memory for the // workingFolderWithLibArr Note: you can't call str.resize(str.length() + 91) because the conversion to std::vector will // find the null terminator and so it will have no effect - std::string reservedString = state.dataExternalInterface->FMU(i).Instance(j).WorkingFolder.string() + - " "; + std::string reservedString = + workingFolderStr + " "; std::vector workingFolderWithLibArr(getCharArrayFromString(reservedString)); // make the library call @@ -1218,14 +1215,14 @@ void InitExternalInterfaceFMUImport(EnergyPlusData &state) // get the length of the working folder with libraries state.dataExternalInterface->FMU(i).Instance(j).LenWorkingFolder_wLib = - state.dataExternalInterface->FMU(i).Instance(j).WorkingFolder_wLib.string().length(); + FileSystem::toString(state.dataExternalInterface->FMU(i).Instance(j).WorkingFolder_wLib).length(); } { // determine the FMI version // preprocess args for library call std::vector workingFolderWithLibArr( - getCharArrayFromString(state.dataExternalInterface->FMU(i).Instance(j).WorkingFolder_wLib.string())); + getCharArrayFromString(FileSystem::toString(state.dataExternalInterface->FMU(i).Instance(j).WorkingFolder_wLib))); std::vector VersionNumArr( getCharArrayFromString(" ")); // the version should only be 3 characters long, since for now we only handle "1.0" From 48eb2eb3e40c43cc4a30faf4fc9848fbd5520d2f Mon Sep 17 00:00:00 2001 From: Julien Marrec Date: Tue, 23 Jul 2024 06:56:16 +0200 Subject: [PATCH 57/68] Remove debug code in SQLiteProcedures --- src/EnergyPlus/SQLiteProcedures.cc | 22 ---------------------- 1 file changed, 22 deletions(-) diff --git a/src/EnergyPlus/SQLiteProcedures.cc b/src/EnergyPlus/SQLiteProcedures.cc index 56b7e53f825..5cd1aa4d2b1 100644 --- a/src/EnergyPlus/SQLiteProcedures.cc +++ b/src/EnergyPlus/SQLiteProcedures.cc @@ -2607,21 +2607,11 @@ SQLiteProcedures::SQLiteProcedures(std::shared_ptr const &errorStr fs::path const &errorFilePath) : m_writeOutputToSQLite(writeOutputToSQLite), m_errorStream(errorStream) { - constexpr bool debug = true; - sqlite3 *m_connection = nullptr; if (m_writeOutputToSQLite) { int rc = -1; bool ok = true; - if constexpr (debug) { - // std::cout << "errorStream=" << errorStream << ", dbName=" << dbName << std::endl; - // std::cout << "dbName.string()=" << dbName.string() << std::endl; - // std::cout << "dbName.generic_string()=" << dbName.generic_string() << std::endl; - std::wcout << "dbName.generic_wstring()=" << dbName.generic_wstring() << std::endl; - std::cout << "narrow(dbName.generic_wstring())=" << FileSystem::toGenericString(dbName) << std::endl; - } - std::string const dbName_utf8 = FileSystem::toGenericString(dbName); // Test if we can write to the sqlite error file @@ -2631,9 +2621,6 @@ SQLiteProcedures::SQLiteProcedures(std::shared_ptr const &errorStr } else { ok = false; } - if constexpr (debug) { - std::cout << "m_errorStream: " << std::boolalpha << ok << std::endl; - } // Test if we can create a new file named dbName if (ok && dbName != ":memory:") { @@ -2644,9 +2631,6 @@ SQLiteProcedures::SQLiteProcedures(std::shared_ptr const &errorStr ok = false; } } - if constexpr (debug) { - std::cout << "ofstream dbName: " << std::boolalpha << ok << std::endl; - } // Test if we can write to the database // If we can't then there are probably locks on the database @@ -2656,14 +2640,8 @@ SQLiteProcedures::SQLiteProcedures(std::shared_ptr const &errorStr if (rc) { *m_errorStream << "SQLite3 message, can't get exclusive lock to open database: " << sqlite3_errmsg(m_connection) << std::endl; ok = false; - if constexpr (debug) { - std::cout << "sqlite3_open_v2: " << std::boolalpha << ok << ' ' << sqlite3_errmsg(m_connection) << std::endl; - } } } - if constexpr (debug) { - std::cout << "sqlite3_open_v2: " << std::boolalpha << ok << std::endl; - } if (ok) { char *zErrMsg = nullptr; From f7be7486ea9f8166aa0903064ea8b9ec350a9504 Mon Sep 17 00:00:00 2001 From: Rick Strand Date: Tue, 23 Jul 2024 06:20:48 -0500 Subject: [PATCH 58/68] 10299 Another Round of Unit Test Fixes Last round was closer to getting rid of all of the unit test fails. Hopefully this gets everything fixed up and ready to go. --- tst/EnergyPlus/unit/SolarShading.unit.cc | 52 ++++++++++++++++++++---- 1 file changed, 43 insertions(+), 9 deletions(-) diff --git a/tst/EnergyPlus/unit/SolarShading.unit.cc b/tst/EnergyPlus/unit/SolarShading.unit.cc index 1b1c9949b27..aa28eb96a4a 100644 --- a/tst/EnergyPlus/unit/SolarShading.unit.cc +++ b/tst/EnergyPlus/unit/SolarShading.unit.cc @@ -3892,22 +3892,33 @@ TEST_F(EnergyPlusFixture, SolarShadingTest_Warn_Pixel_Count_and_TM_Schedule) EXPECT_EQ(state->dataSolarShading->anyScheduledShadingSurface, true); +#ifdef EP_NO_OPENGL EXPECT_EQ(state->dataErrTracking->AskForSurfacesReport, true); - EXPECT_EQ(state->dataErrTracking->TotalWarningErrors, 1); - // Expect no severe errors at this point + EXPECT_EQ(state->dataErrTracking->TotalWarningErrors, 2); EXPECT_EQ(state->dataErrTracking->TotalSevereErrors, 0); +#else + if (!Penumbra::Penumbra::is_valid_context()) { + EXPECT_EQ(state->dataErrTracking->AskForSurfacesReport, true); + EXPECT_EQ(state->dataErrTracking->TotalWarningErrors, 2); + EXPECT_EQ(state->dataErrTracking->TotalSevereErrors, 0); + } else { + EXPECT_EQ(state->dataErrTracking->AskForSurfacesReport, true); + EXPECT_EQ(state->dataErrTracking->TotalWarningErrors, 1); + EXPECT_EQ(state->dataErrTracking->TotalSevereErrors, 0); + } +#endif SolarShading::processShadowingInput(*state); #ifdef EP_NO_OPENGL - EXPECT_EQ(state->dataErrTracking->TotalWarningErrors, 1); + EXPECT_EQ(state->dataErrTracking->TotalWarningErrors, 2); EXPECT_EQ(state->dataErrTracking->TotalSevereErrors, 0; EXPECT_EQ(state->dataErrTracking->LastSevereError, ""); #else if (!Penumbra::Penumbra::is_valid_context()) { EXPECT_EQ(state->dataErrTracking->TotalWarningErrors, 2); - EXPECT_EQ(state->dataErrTracking->TotalSevereErrors, 1); - EXPECT_EQ(state->dataErrTracking->LastSevereError, "The Shading Calculation Method of choice is \"PixelCounting\"; "); + EXPECT_EQ(state->dataErrTracking->TotalSevereErrors, 0); + EXPECT_EQ(state->dataErrTracking->LastSevereError, ""); } else { EXPECT_EQ(state->dataErrTracking->TotalWarningErrors, 1); EXPECT_EQ(state->dataErrTracking->TotalSevereErrors, 1); @@ -6083,7 +6094,16 @@ TEST_F(EnergyPlusFixture, SolarShadingTest_GetShadowingInputTest4) EXPECT_EQ(expectedOverlaps, state->dataSolarShading->MaxHCS); EXPECT_FALSE(state->dataSysVars->SutherlandHodgman); EXPECT_FALSE(state->dataSysVars->SlaterBarsky); - EXPECT_ENUM_EQ(state->dataSysVars->shadingMethod, ShadingMethod::PixelCounting); + +#ifdef EP_NO_OPENGL + EXPECT_ENUM_EQ(state->dataSysVars->shadingMethod, ShadingMethod::PolygonClipping); +#else + if (!Penumbra::Penumbra::is_valid_context()) { + EXPECT_ENUM_EQ(state->dataSysVars->shadingMethod, ShadingMethod::PolygonClipping); + } else { + EXPECT_ENUM_EQ(state->dataSysVars->shadingMethod, ShadingMethod::PixelCounting); + } +#endif } TEST_F(EnergyPlusFixture, SolarShadingTest_GetShadowingInputTest5) @@ -6116,7 +6136,16 @@ TEST_F(EnergyPlusFixture, SolarShadingTest_GetShadowingInputTest5) EXPECT_EQ(expectedOverlaps, state->dataSolarShading->MaxHCS); EXPECT_TRUE(state->dataSysVars->SutherlandHodgman); EXPECT_FALSE(state->dataSysVars->SlaterBarsky); - EXPECT_ENUM_EQ(state->dataSysVars->shadingMethod, ShadingMethod::PixelCounting); + +#ifdef EP_NO_OPENGL + EXPECT_ENUM_EQ(state->dataSysVars->shadingMethod, ShadingMethod::PolygonClipping); +#else + if (!Penumbra::Penumbra::is_valid_context()) { + EXPECT_ENUM_EQ(state->dataSysVars->shadingMethod, ShadingMethod::PolygonClipping); + } else { + EXPECT_ENUM_EQ(state->dataSysVars->shadingMethod, ShadingMethod::PixelCounting); + } +#endif } TEST_F(EnergyPlusFixture, SolarShadingTest_GetShadowingInputTest6) @@ -6150,7 +6179,6 @@ TEST_F(EnergyPlusFixture, SolarShadingTest_GetShadowingInputTest6) EXPECT_EQ(expectedOverlaps, state->dataSolarShading->MaxHCS); EXPECT_TRUE(state->dataSysVars->SutherlandHodgman); EXPECT_TRUE(state->dataSysVars->SlaterBarsky); - EXPECT_ENUM_EQ(state->dataSysVars->shadingMethod, ShadingMethod::PixelCounting); #ifdef EP_NO_OPENGL std::string const error_string = delimited_string({" ** Warning ** ShadowCalculation: suspect Shading Calculation Update Frequency", @@ -6158,15 +6186,21 @@ TEST_F(EnergyPlusFixture, SolarShadingTest_GetShadowingInputTest6) " ** Warning ** No GPU found (required for PixelCounting)", " ** ~~~ ** PolygonClipping will be used instead"}); EXPECT_TRUE(compare_err_stream(error_string, true)); + EXPECT_ENUM_EQ(state->dataSysVars->shadingMethod, ShadingMethod::PolygonClipping); + #else if (!Penumbra::Penumbra::is_valid_context()) { std::string const error_string = delimited_string({" ** Warning ** ShadowCalculation: suspect Shading Calculation Update Frequency", - " ** ~~~ ** Value entered=[56], Shadowing Calculations will be inaccurate."}); + " ** ~~~ ** Value entered=[56], Shadowing Calculations will be inaccurate.", + " ** Warning ** No GPU found (required for PixelCounting)", + " ** ~~~ ** PolygonClipping will be used instead"}); EXPECT_TRUE(compare_err_stream(error_string, true)); + EXPECT_ENUM_EQ(state->dataSysVars->shadingMethod, ShadingMethod::PolygonClipping); } else { std::string const error_string = delimited_string({" ** Warning ** ShadowCalculation: suspect Shading Calculation Update Frequency", " ** ~~~ ** Value entered=[56], Shadowing Calculations will be inaccurate."}); EXPECT_TRUE(compare_err_stream(error_string, true)); + EXPECT_ENUM_EQ(state->dataSysVars->shadingMethod, ShadingMethod::PixelCounting); } #endif } From dbdea7b80033ea460853cb38824dd8eee7e26122 Mon Sep 17 00:00:00 2001 From: Jason Glazer Date: Tue, 23 Jul 2024 08:18:46 -0500 Subject: [PATCH 59/68] Removed lines causing latex error and clean up --- .../src/output-files/eplustbl-lt-ext-gt.tex | 62 ------------------- 1 file changed, 62 deletions(-) diff --git a/doc/output-details-and-examples/src/output-files/eplustbl-lt-ext-gt.tex b/doc/output-details-and-examples/src/output-files/eplustbl-lt-ext-gt.tex index 2d061ec9a36..fed96eb1b70 100644 --- a/doc/output-details-and-examples/src/output-files/eplustbl-lt-ext-gt.tex +++ b/doc/output-details-and-examples/src/output-files/eplustbl-lt-ext-gt.tex @@ -1018,8 +1018,6 @@ \subsection{Equipment Summary}\label{equipment-summary} Plantloop Branch Name \end{itemize} -An example of the report is shown here - \begin{figure}[h!] \centering \includegraphics{media/boiler-table-example.PNG} @@ -1053,8 +1051,6 @@ \subsection{Equipment Summary}\label{equipment-summary} Condenser Loop Branch Name \end{itemize} -An example of the report is shown here - \begin{figure}[h!] \centering \includegraphics{media/cooling-tower-table-example.PNG} @@ -1078,8 +1074,6 @@ \subsection{Equipment Summary}\label{equipment-summary} Minimum Loop Flow Rate [m3/s] \end{itemize} -An example of the report is shown here - \begin{figure}[h!] \centering \includegraphics{media/plantloop-table-example.PNG} @@ -1127,8 +1121,6 @@ \subsection{Equipment Summary}\label{equipment-summary} Minimum Outdoor Flow Schedule Name \end{itemize} -An example of the report is shown here - \begin{figure}[h!] \centering \includegraphics{media/air-terminal-table-example.PNG} @@ -1160,7 +1152,6 @@ \subsection{Equipment Summary}\label{equipment-summary} Outdoor Airflow [kg/s] \end{itemize} -An example of the report is shown here \begin{figure}[h!] \centering @@ -1168,59 +1159,6 @@ \subsection{Equipment Summary}\label{equipment-summary} \caption{} \end{figure} -{\scriptsize -\begin{longtable}[c]{>{\raggedright}p{1.5in}>{\raggedright}p{1.5in}>{\raggedright}p{1.5in}>{\raggedright}p{1.5in}} -\toprule -~ & Type & Nominal Total Capacity (W) & Nominal Efficiency (W/W) \tabularnewline -~ & Type & Reference Capacity[W] & Type Reference Efficiency [W/W] & Rated Capacity [W] & Rated Efficiency [W/W] & IPLV in SI Units [W/W] & IPLV in IP Units [Btu/W-h] & Minimum Part Load Ratio & Fuel Type & Rated Entering Condenser Temperature [C] & Rated Leaving Evaporator Temperature [C] Reference Entering Condenser Temperature [C] Reference Leaving Evaporator Temperature [C] Design Size Reference Chilled Water Flow Rate [kg/s] Design Size Reference Condenser Fluid Flow Rate [kg/s] Plantloop Name Plantloop Branch Name Condenser Loop Name Condenser Loop Branch Name Heat Recovery Plantloop Name Heat Recovery Plantloop Branch Name Recovery Relative Capacity Fraction - -\midrule -\endfirsthead - -\toprule -~ & Type & Nominal Total Capacity (W) & Nominal Efficiency (W/W) \tabularnewline -\midrule -\endhead - -Type Reference Capacity[W] TypeReference Efficiency [W/W] Rated Capacity [W] Rated Efficiency [W/W] IPLV in SI Units [W/W] IPLV in IP Units [Btu/W-h] Minimum Part Load Ratio Fuel Type Rated Entering Condenser Temperature [C] Rated Leaving Evaporator Temperature [C] Reference Entering Condenser Temperature [C] Reference Leaving Evaporator Temperature [C] Design Size Reference Chilled Water Flow Rate [kg/s] Design Size Reference Condenser Fluid Flow Rate [kg/s] Plantloop Name Plantloop Branch Name Condenser Loop Name Condenser Loop Branch Name Heat Recovery Plantloop Name Heat Recovery Plantloop Branch Name Recovery Relative Capacity Fraction -90.1-2004 WATERCOOLED CENTRIFUGAL CHILLER 0 416TONS 0.6KW/TON Chiller:Electric:EIR 1932343.27 6.10 1932343.27 6.10 6.88 6.92 0.00 Electricity 35.00 6.67 35.00 6.67 82.04 96.29 CHILLED WATER LOOP CHILLED WATER LOOP SUPPLY BRANCH 1 CONDENSER WATER LOOP CONDENSER WATER LOOP DEMAND BRANCH 2 N/A N/A 0.00 -90.1-2004 WATERCOOLED CENTRIFUGAL CHILLER 1 416TONS 0.6KW/TON Chiller:Electric:EIR 1932343.27 6.10 1932343.27 6.10 6.88 6.92 0.00 Electricity 35.00 6.67 35.00 6.67 82.04 96.29 CHILLED WATER LOOP CHILLED WATER LOOP SUPPLY BRANCH 2 CONDENSER WATER LOOP CONDENSER WATER LOOP DEMAND BRANCH 3 N/A N/A 0.00 - - - - - - -SPACE1-1 ZONE COIL & Coil:Heating:Fuel & 17614.83 & 0.80 \tabularnewline -SPACE2-1 ZONE COIL & Coil:Heating:Fuel & 14619.82 & 0.80 \tabularnewline -SPACE3-1 ZONE COIL & Coil:Heating:Fuel & 16093.74 & 0.80 \tabularnewline -SPACE4-1 ZONE COIL & Coil:Heating:Fuel & 18942.35 & 0.80 \tabularnewline -SPACE5-1 ZONE COIL & Coil:Heating:Fuel & 19146.73 & 0.80 \tabularnewline -MAIN HEATING COIL 1 & Coil:Heating:Fuel & 19754.61 & 0.80 \tabularnewline -\bottomrule -\end{longtable}} - -{\scriptsize -\begin{longtable}[c]{>{\raggedright}p{1.5in}>{\raggedright}p{1.5in}>{\raggedright}p{1.5in}>{\raggedright}p{1.5in}} -\toprule -~ & Type & Nominal Total Capacity (W) & Nominal Efficiency (W/W) \tabularnewline -\midrule -\endfirsthead - -\toprule -~ & Type & Nominal Total Capacity (W) & Nominal Efficiency (W/W) \tabularnewline -\midrule -\endhead - -SPACE1-1 ZONE COIL & Coil:Heating:Fuel & 17614.83 & 0.80 \tabularnewline -SPACE2-1 ZONE COIL & Coil:Heating:Fuel & 14619.82 & 0.80 \tabularnewline -SPACE3-1 ZONE COIL & Coil:Heating:Fuel & 16093.74 & 0.80 \tabularnewline -SPACE4-1 ZONE COIL & Coil:Heating:Fuel & 18942.35 & 0.80 \tabularnewline -SPACE5-1 ZONE COIL & Coil:Heating:Fuel & 19146.73 & 0.80 \tabularnewline -MAIN HEATING COIL 1 & Coil:Heating:Fuel & 19754.61 & 0.80 \tabularnewline -\bottomrule -\end{longtable}} - \subsection{Envelope Summary}\label{envelope-summary} From 0a0aa68b8497ee4874c39aca38ccb7113a18c06e Mon Sep 17 00:00:00 2001 From: Rick Strand Date: Tue, 23 Jul 2024 14:50:21 -0500 Subject: [PATCH 60/68] 10299 Get Rid of Unneeded Get Flag A get flag was added early on during work on this defect. It is not necessary and may be causing some issues with API runs. Even if that isn't the problem, there is no reason to keep this flag/code--it's unnecessary. --- src/EnergyPlus/SolarShading.cc | 5 ----- src/EnergyPlus/SolarShading.hh | 1 - 2 files changed, 6 deletions(-) diff --git a/src/EnergyPlus/SolarShading.cc b/src/EnergyPlus/SolarShading.cc index e166aed955a..638d1b57f25 100644 --- a/src/EnergyPlus/SolarShading.cc +++ b/src/EnergyPlus/SolarShading.cc @@ -411,11 +411,6 @@ void GetShadowingInput(EnergyPlusData &state) using DataSystemVariables::ShadingMethod; // SUBROUTINE LOCAL VARIABLE DECLARATIONS: - if (state.dataSolarShading->getShadowingCalculationInput) { - state.dataSolarShading->getShadowingCalculationInput = false; - } else { - return; - } int NumItems; int NumNumbers; int NumAlphas; diff --git a/src/EnergyPlus/SolarShading.hh b/src/EnergyPlus/SolarShading.hh index bd466b327bf..5e3d62e5f41 100644 --- a/src/EnergyPlus/SolarShading.hh +++ b/src/EnergyPlus/SolarShading.hh @@ -437,7 +437,6 @@ struct SolarShadingData : BaseGlobalStruct #endif bool GetInputFlag = true; - bool getShadowingCalculationInput = true; bool anyScheduledShadingSurface = false; bool firstTime = true; bool debugging = false; From 5664dfa35f5109fa181cda55195411e046550703 Mon Sep 17 00:00:00 2001 From: Rick Strand Date: Wed, 24 Jul 2024 06:59:33 -0500 Subject: [PATCH 61/68] 10299 Clang Format Final Missed clang formatting on a file... --- src/EnergyPlus/DataSystemVariables.hh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/EnergyPlus/DataSystemVariables.hh b/src/EnergyPlus/DataSystemVariables.hh index 156d628ab01..e8506ce2439 100644 --- a/src/EnergyPlus/DataSystemVariables.hh +++ b/src/EnergyPlus/DataSystemVariables.hh @@ -115,8 +115,8 @@ struct SystemVarsData : BaseGlobalStruct bool DisableSelfShadingWithinGroup = false; bool DisableSelfShadingBetweenGroup = false; - int shadingGroupsNum = 0; // number of shading groups - Array1D_string zoneName; // array of zone names in user input + int shadingGroupsNum = 0; // number of shading groups + Array1D_string zoneName; // array of zone names in user input bool TrackAirLoopEnvFlag = false; // If TRUE generates a file with runtime statistics for each HVAC // controller on each air loop From c842eecd8d83750518cc5b575761bea46d8cb0f2 Mon Sep 17 00:00:00 2001 From: Edwin Lee Date: Wed, 24 Jul 2024 10:33:30 -0500 Subject: [PATCH 62/68] Apply clang format --- src/EnergyPlus/BoilerSteam.cc | 4 +- src/EnergyPlus/FluidProperties.cc | 5293 +++++++++-------- src/EnergyPlus/FluidProperties.hh | 331 +- src/EnergyPlus/HVACVariableRefrigerantFlow.cc | 275 +- src/EnergyPlus/HVACVariableRefrigerantFlow.hh | 82 +- src/EnergyPlus/OutdoorAirUnit.cc | 14 +- src/EnergyPlus/Plant/Loop.cc | 8 +- src/EnergyPlus/Plant/LoopSide.cc | 8 +- src/EnergyPlus/Plant/PlantManager.cc | 36 +- src/EnergyPlus/PoweredInductionUnits.cc | 14 +- src/EnergyPlus/SingleDuct.cc | 17 +- src/EnergyPlus/SteamCoils.cc | 22 +- src/EnergyPlus/UnitHeater.cc | 12 +- src/EnergyPlus/UtilityRoutines.cc | 10 +- src/EnergyPlus/UtilityRoutines.hh | 25 +- src/EnergyPlus/VentilatedSlab.cc | 15 +- src/EnergyPlus/WaterToAirHeatPump.cc | 68 +- tst/EnergyPlus/unit/FluidProperties.unit.cc | 12 +- .../unit/HVACVariableRefrigerantFlow.unit.cc | 24 +- .../unit/LowTempRadiantSystem.unit.cc | 88 +- tst/EnergyPlus/unit/OutdoorAirUnit.unit.cc | 17 +- tst/EnergyPlus/unit/UnitHeater.unit.cc | 33 +- tst/EnergyPlus/unit/WaterCoils.unit.cc | 6 +- .../unit/WaterToAirHeatPump.unit.cc | 2 +- 24 files changed, 3230 insertions(+), 3186 deletions(-) diff --git a/src/EnergyPlus/BoilerSteam.cc b/src/EnergyPlus/BoilerSteam.cc index 2d6b3a82184..8cb9a6534dd 100644 --- a/src/EnergyPlus/BoilerSteam.cc +++ b/src/EnergyPlus/BoilerSteam.cc @@ -269,8 +269,8 @@ namespace BoilerSteam { if (SteamFluidIndex == 0 && BoilerNum == 1) { SteamFluidIndex = FluidProperties::GetRefrigNum(state, fluidNameSteam); // Steam is a refrigerant? if (SteamFluidIndex == 0) { - ShowSevereError( - state, format("{}{}=\"{}\",", RoutineName, state.dataIPShortCut->cCurrentModuleObject, state.dataIPShortCut->cAlphaArgs(1))); + ShowSevereError( + state, format("{}{}=\"{}\",", RoutineName, state.dataIPShortCut->cCurrentModuleObject, state.dataIPShortCut->cAlphaArgs(1))); ShowContinueError(state, "Steam Properties not found; Steam Fluid Properties must be included in the input file."); ErrorsFound = true; } diff --git a/src/EnergyPlus/FluidProperties.cc b/src/EnergyPlus/FluidProperties.cc index a017ed81bac..963be054cfa 100644 --- a/src/EnergyPlus/FluidProperties.cc +++ b/src/EnergyPlus/FluidProperties.cc @@ -107,72 +107,72 @@ namespace FluidProperties { constexpr int DefaultNumSteamTemps(111); // Temperature dimension of default steam data. constexpr int DefaultNumSteamSuperheatedTemps(114); // Temperature dimension of default steam data. constexpr int DefaultNumSteamSuperheatedPressure(114); // Temperature dimension of default steam data. - + static constexpr std::array DefaultGlycolTemps = { -35.0, -30.0, -25.0, -20.0, -15.0, -10.0, -5.0, 0.0, 5.0, 10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0, 105.0, 110.0, 115.0, 120.0, 125.0}; // 33 total temperature // points - inline int GlycolTempToTempIndex(Real64 Temp) { - return (int)(Temp / 5.0) + ((Temp < 0.0) ? 6 : 7); + inline int GlycolTempToTempIndex(Real64 Temp) + { + return (int)(Temp / 5.0) + ((Temp < 0.0) ? 6 : 7); } - + static constexpr std::array DefaultGlycolConcs = { 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9}; // 10 total concentration points static constexpr std::array DefaultWaterCpData = { - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 4217.0, 4198.0, 4191.0, 4185.0, 4181.0, 4179.0, 4180.0, - 4180.0, 4180.0, 4180.0, 4181.0, 4183.0, 4185.0, 4188.0, - 4192.0, 4196.0, 4200.0, 4203.0, 4208.0, 4213.0, 4218.0, - 4223.0, 4228.0, 4233.0, 4238.0, 4243.0}; // in J/kg-K + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 4217.0, 4198.0, 4191.0, 4185.0, 4181.0, 4179.0, 4180.0, 4180.0, 4180.0, 4180.0, + 4181.0, 4183.0, 4185.0, 4188.0, 4192.0, 4196.0, 4200.0, 4203.0, 4208.0, 4213.0, 4218.0, 4223.0, 4228.0, 4233.0, 4238.0, 4243.0}; // in J/kg-K static constexpr std::array DefaultWaterViscData = { 0.0e-3, 0.0e-3, 0.0e-3, 0.0e-3, 0.0e-3, 0.0e-3, 0.0e-3, 1.7912e-3, 1.5183e-3, 1.306e-3, 1.1376e-3, 1.0016e-3, 0.8901e-3, 0.7974e-3, 0.7193e-3, 0.653e-3, 0.5961e-3, 0.5468e-3, 0.504e-3, 0.4664e-3, 0.4332e-3, 0.4039e-3, 0.3777e-3, 0.3543e-3, 0.3333e-3, 0.3144e-3, 0.2973e-3, 0.2817e-3, 0.0e-3, 0.0e-3, 0.0e-3, 0.0e-3, 0.0e-3}; // in Pa-s - + static constexpr std::array DefaultWaterRhoData = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 999.8, 999.9, 999.7, 999.1, 998.2, 997.0, 995.6, 994.0, 992.2, 990.2, 988.0, 985.7, 983.2, 980.5, 977.7, 974.8, 971.8, 968.6, 965.3, 961.9, 958.3, 0.0, 0.0, 0.0, 0.0, 0.0}; // in kg/m3 - + static constexpr std::array DefaultWaterCondData = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.561, 0.5705, 0.58, 0.5893, 0.5984, 0.6072, 0.6155, 0.6233, 0.6306, 0.6373, 0.6436, 0.6492, 0.6543, 0.659, 0.6631, 0.6668, 0.67, 0.6728, 0.6753, 0.6773, 0.6791, 0.0, 0.0, 0.0, 0.0, 0.0}; // in W/mK - + // Ethylene Glycol Data: Specific Heat in J/(kg-k) - static constexpr std::array, DefaultNumGlyConcs> DefaultEthGlyCpData = { - {{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 4217.0, 4198.0, 4191.0, 4185.0, - 4181.0, 4179.0, 4180.0, 4180.0, 4180.0, 4180.0, 4181.0, 4183.0, 4185.0, 4188.0, 4192.0, - 4196.0, 4200.0, 4203.0, 4208.0, 4213.0, 4218.0, 4223.0, 4228.0, 4233.0, 4238.0, 4243.0}, // DefaultWaterCpData - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3937.0, 3946.0, 3954.0, 3963.0, - 3972.0, 3981.0, 3989.0, 3998.0, 4007.0, 4015.0, 4024.0, 4033.0, 4042.0, 4050.0, 4059.0, - 4068.0, 4077.0, 4085.0, 4094.0, 4103.0, 4112.0, 4120.0, 4129.0, 4138.0, 4147.0, 4155.0}, // Conc=0.1 - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3757.0, 3769.0, 3780.0, 3792.0, 3803.0, - 3815.0, 3826.0, 3838.0, 3849.0, 3861.0, 3872.0, 3884.0, 3895.0, 3907.0, 3918.0, 3930.0, - 3941.0, 3953.0, 3964.0, 3976.0, 3987.0, 3999.0, 4010.0, 4022.0, 4033.0, 4045.0, 4056.0}, // Conc=0.2 - {0.0, 0.0, 0.0, 0.0, 0.0, 3560.0, 3574.0, 3589.0, 3603.0, 3617.0, 3631.0, - 3645.0, 3660.0, 3674.0, 3688.0, 3702.0, 3716.0, 3730.0, 3745.0, 3759.0, 3773.0, 3787.0, - 3801.0, 3816.0, 3830.0, 3844.0, 3858.0, 3872.0, 3886.0, 3901.0, 3915.0, 3929.0, 3943.0}, // Conc=0.3 - {0.0, 0.0, 0.0, 3334.0, 3351.0, 3367.0, 3384.0, 3401.0, 3418.0, 3435.0, 3451.0, - 3468.0, 3485.0, 3502.0, 3518.0, 3535.0, 3552.0, 3569.0, 3585.0, 3602.0, 3619.0, 3636.0, - 3653.0, 3669.0, 3686.0, 3703.0, 3720.0, 3736.0, 3753.0, 3770.0, 3787.0, 3804.0, 3820.0}, // Conc=0.4 - {3068.0, 3088.0, 3107.0, 3126.0, 3145.0, 3165.0, 3184.0, 3203.0, 3223.0, 3242.0, 3261.0, - 3281.0, 3300.0, 3319.0, 3339.0, 3358.0, 3377.0, 3396.0, 3416.0, 3435.0, 3454.0, 3474.0, - 3493.0, 3512.0, 3532.0, 3551.0, 3570.0, 3590.0, 3609.0, 3628.0, 3647.0, 3667.0, 3686.0}, // Conc=0.5 - {2844.0, 2866.0, 2888.0, 2909.0, 2931.0, 2953.0, 2975.0, 2997.0, 3018.0, 3040.0, 3062.0, - 3084.0, 3106.0, 3127.0, 3149.0, 3171.0, 3193.0, 3215.0, 3236.0, 3258.0, 3280.0, 3302.0, - 3324.0, 3345.0, 3367.0, 3389.0, 3411.0, 3433.0, 3454.0, 3476.0, 3498.0, 3520.0, 3542.0}, // Conc=0.6 - {2612.0, 2636.0, 2660.0, 2685.0, 2709.0, 2733.0, 2757.0, 2782.0, 2806.0, 2830.0, 2854.0, - 2878.0, 2903.0, 2927.0, 2951.0, 2975.0, 3000.0, 3024.0, 3048.0, 3072.0, 3097.0, 3121.0, - 3145.0, 3169.0, 3193.0, 3218.0, 3242.0, 3266.0, 3290.0, 3315.0, 3339.0, 3363.0, 3387.0}, // Conc=0.7 - {2370.0, 2397.0, 2423.0, 2450.0, 2477.0, 2503.0, 2530.0, 2556.0, 2583.0, 2610.0, 2636.0, - 2663.0, 2690.0, 2716.0, 2743.0, 2770.0, 2796.0, 2823.0, 2850.0, 2876.0, 2903.0, 2929.0, - 2956.0, 2983.0, 3009.0, 3036.0, 3063.0, 3089.0, 3116.0, 3143.0, 3169.0, 3196.0, 3223.0}, // Conc=0.8 - {0.0, 0.0, 2177.0, 2206.0, 2235.0, 2264.0, 2293.0, 2322.0, 2351.0, 2380.0, 2409.0, - 2438.0, 2467.0, 2496.0, 2525.0, 2554.0, 2583.0, 2612.0, 2641.0, 2670.0, 2699.0, 2728.0, - 2757.0, 2786.0, 2815.0, 2844.0, 2873.0, 2902.0, 2931.0, 2960.0, 2989.0, 3018.0, 3047.0}} // Conc=0.9 + static constexpr std::array, DefaultNumGlyConcs> + DefaultEthGlyCpData = + { + {{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 4217.0, 4198.0, 4191.0, 4185.0, + 4181.0, 4179.0, 4180.0, 4180.0, 4180.0, 4180.0, 4181.0, 4183.0, 4185.0, 4188.0, 4192.0, + 4196.0, 4200.0, 4203.0, 4208.0, 4213.0, 4218.0, 4223.0, 4228.0, 4233.0, 4238.0, 4243.0}, // DefaultWaterCpData + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3937.0, 3946.0, 3954.0, 3963.0, + 3972.0, 3981.0, 3989.0, 3998.0, 4007.0, 4015.0, 4024.0, 4033.0, 4042.0, 4050.0, 4059.0, + 4068.0, 4077.0, 4085.0, 4094.0, 4103.0, 4112.0, 4120.0, 4129.0, 4138.0, 4147.0, 4155.0}, // Conc=0.1 + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3757.0, 3769.0, 3780.0, 3792.0, 3803.0, + 3815.0, 3826.0, 3838.0, 3849.0, 3861.0, 3872.0, 3884.0, 3895.0, 3907.0, 3918.0, 3930.0, + 3941.0, 3953.0, 3964.0, 3976.0, 3987.0, 3999.0, 4010.0, 4022.0, 4033.0, 4045.0, 4056.0}, // Conc=0.2 + {0.0, 0.0, 0.0, 0.0, 0.0, 3560.0, 3574.0, 3589.0, 3603.0, 3617.0, 3631.0, + 3645.0, 3660.0, 3674.0, 3688.0, 3702.0, 3716.0, 3730.0, 3745.0, 3759.0, 3773.0, 3787.0, + 3801.0, 3816.0, 3830.0, 3844.0, 3858.0, 3872.0, 3886.0, 3901.0, 3915.0, 3929.0, 3943.0}, // Conc=0.3 + {0.0, 0.0, 0.0, 3334.0, 3351.0, 3367.0, 3384.0, 3401.0, 3418.0, 3435.0, 3451.0, + 3468.0, 3485.0, 3502.0, 3518.0, 3535.0, 3552.0, 3569.0, 3585.0, 3602.0, 3619.0, 3636.0, + 3653.0, 3669.0, 3686.0, 3703.0, 3720.0, 3736.0, 3753.0, 3770.0, 3787.0, 3804.0, 3820.0}, // Conc=0.4 + {3068.0, 3088.0, 3107.0, 3126.0, 3145.0, 3165.0, 3184.0, 3203.0, 3223.0, 3242.0, 3261.0, + 3281.0, 3300.0, 3319.0, 3339.0, 3358.0, 3377.0, 3396.0, 3416.0, 3435.0, 3454.0, 3474.0, + 3493.0, 3512.0, 3532.0, 3551.0, 3570.0, 3590.0, 3609.0, 3628.0, 3647.0, 3667.0, 3686.0}, // Conc=0.5 + {2844.0, 2866.0, 2888.0, 2909.0, 2931.0, 2953.0, 2975.0, 2997.0, 3018.0, 3040.0, 3062.0, + 3084.0, 3106.0, 3127.0, 3149.0, 3171.0, 3193.0, 3215.0, 3236.0, 3258.0, 3280.0, 3302.0, + 3324.0, 3345.0, 3367.0, 3389.0, 3411.0, 3433.0, 3454.0, 3476.0, 3498.0, 3520.0, 3542.0}, // Conc=0.6 + {2612.0, 2636.0, 2660.0, 2685.0, 2709.0, 2733.0, 2757.0, 2782.0, 2806.0, 2830.0, 2854.0, + 2878.0, 2903.0, 2927.0, 2951.0, 2975.0, 3000.0, 3024.0, 3048.0, 3072.0, 3097.0, 3121.0, + 3145.0, 3169.0, 3193.0, 3218.0, 3242.0, 3266.0, 3290.0, 3315.0, 3339.0, 3363.0, 3387.0}, // Conc=0.7 + {2370.0, 2397.0, 2423.0, 2450.0, 2477.0, 2503.0, 2530.0, 2556.0, 2583.0, 2610.0, 2636.0, + 2663.0, 2690.0, 2716.0, 2743.0, 2770.0, 2796.0, 2823.0, 2850.0, 2876.0, 2903.0, 2929.0, + 2956.0, 2983.0, 3009.0, 3036.0, 3063.0, 3089.0, 3116.0, 3143.0, 3169.0, 3196.0, 3223.0}, // Conc=0.8 + {0.0, 0.0, 2177.0, 2206.0, 2235.0, 2264.0, 2293.0, 2322.0, 2351.0, 2380.0, 2409.0, + 2438.0, 2467.0, 2496.0, 2525.0, 2554.0, 2583.0, 2612.0, 2641.0, 2670.0, 2699.0, 2728.0, + 2757.0, 2786.0, 2815.0, 2844.0, 2873.0, 2902.0, 2931.0, 2960.0, 2989.0, 3018.0, 3047.0}} // Conc=0.9 }; // Ethylene Glycol Data: Viscosity in mPa-s @@ -208,7 +208,7 @@ namespace FluidProperties { 1.295e-02, 1.059e-02, 8.77e-03, 7.34e-03, 6.21e-03, 5.30e-03, 4.56e-03, 3.95e-03, 3.45e-03, 3.03e-03, 2.67e-03, 2.37e-03, 2.12e-03, 1.90e-03, 1.71e-03, 1.54e-03, 1.40e-03, 1.27e-03, 1.16e-03, 1.07e-03, 9.8e-04, 9.0e-04}} // Conc = 0.9 }; - + // Ethylene Glycol Data: Density in kg/m3 static constexpr std::array, DefaultNumGlyConcs> DefaultEthGlyRhoData = { {{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 999.8, 999.9, 999.7, 999.1, 998.2, 997.0, 995.6, 994.0, 992.2, 990.2, @@ -243,62 +243,57 @@ namespace FluidProperties { }; // Ethylene Glycol Data: Conductivity in W/(m-K) - static constexpr std::array, DefaultNumGlyConcs> DefaultEthGlyCondData = { - {{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.561, 0.5705, 0.58, 0.5893, - 0.5984, 0.6072, 0.6155, 0.6233, 0.6306, 0.6373, 0.6436, 0.6492, 0.6543, 0.659, 0.6631, - 0.6668, 0.67, 0.6728, 0.6753, 0.6773, 0.6791, 0.0, 0.0, 0.0, 0.0, 0.0}, // DefaultWaterCondData - {0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.511, 0.520, 0.528, 0.537, 0.545, 0.552, 0.559, 0.566, 0.572, 0.577, - 0.583, 0.588, 0.592, 0.596, 0.600, 0.603, 0.606, 0.608, 0.610, 0.612, 0.613, 0.614, 0.614, 0.614, 0.613, 0.612}, // Conc=0.1 - {0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.460, 0.468, 0.476, 0.483, 0.490, 0.497, 0.503, 0.509, 0.515, 0.520, 0.525, - 0.529, 0.534, 0.538, 0.541, 0.544, 0.547, 0.549, 0.551, 0.553, 0.555, 0.556, 0.556, 0.557, 0.557, 0.556, 0.555}, // Conc=0.2 - {0.000, 0.000, 0.000, 0.000, 0.000, 0.415, 0.422, 0.429, 0.436, 0.442, 0.448, 0.453, 0.459, 0.464, 0.469, 0.473, 0.477, - 0.481, 0.485, 0.488, 0.491, 0.494, 0.496, 0.498, 0.500, 0.501, 0.503, 0.504, 0.504, 0.505, 0.505, 0.504, 0.504}, // Conc=0.3 - {0.000, 0.000, 0.000, 0.371, 0.377, 0.383, 0.389, 0.395, 0.400, 0.405, 0.410, 0.415, 0.419, 0.424, 0.428, 0.431, 0.435, - 0.438, 0.441, 0.444, 0.446, 0.449, 0.451, 0.452, 0.454, 0.455, 0.456, 0.457, 0.458, 0.458, 0.458, 0.458, 0.458}, // Conc=0.4 - {0.328, 0.333, 0.339, 0.344, 0.349, 0.354, 0.359, 0.364, 0.368, 0.373, 0.377, 0.380, 0.384, 0.387, 0.391, 0.394, 0.397, - 0.399, 0.402, 0.404, 0.406, 0.408, 0.410, 0.411, 0.413, 0.414, 0.415, 0.416, 0.416, 0.417, 0.417, 0.417, 0.417}, // Conc=0.5 - {0.307, 0.312, 0.316, 0.321, 0.325, 0.329, 0.333, 0.336, 0.340, 0.343, 0.346, 0.349, 0.352, 0.355, 0.358, 0.360, 0.363, - 0.365, 0.367, 0.369, 0.371, 0.372, 0.374, 0.375, 0.376, 0.377, 0.378, 0.379, 0.379, 0.380, 0.380, 0.380, 0.380}, // Conc=0.6 - {0.289, 0.293, 0.296, 0.300, 0.303, 0.306, 0.309, 0.312, 0.314, 0.317, 0.320, 0.322, 0.324, 0.327, 0.329, 0.331, 0.332, - 0.334, 0.336, 0.337, 0.339, 0.340, 0.341, 0.342, 0.343, 0.344, 0.345, 0.346, 0.346, 0.347, 0.347, 0.347, 0.347}, // Conc=0.7 - {0.274, 0.276, 0.279, 0.281, 0.283, 0.286, 0.288, 0.290, 0.292, 0.294, 0.296, 0.298, 0.299, 0.301, 0.303, 0.304, 0.306, - 0.307, 0.308, 0.310, 0.311, 0.312, 0.313, 0.314, 0.314, 0.315, 0.316, 0.316, 0.317, 0.317, 0.318, 0.318, 0.318}, // Conc=0.8 - {0.000, 0.000, 0.263, 0.265, 0.266, 0.268, 0.269, 0.271, 0.272, 0.274, 0.275, 0.276, 0.278, 0.279, 0.280, 0.281, 0.282, - 0.283, 0.284, 0.285, 0.286, 0.287, 0.288, 0.288, 0.289, 0.290, 0.290, 0.291, 0.291, 0.292, 0.292, 0.293, 0.293}} // Conc=0.9 + static constexpr std:: + array, DefaultNumGlyConcs> + DefaultEthGlyCondData = + { + {{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.561, 0.5705, 0.58, 0.5893, + 0.5984, 0.6072, 0.6155, 0.6233, 0.6306, 0.6373, 0.6436, 0.6492, 0.6543, 0.659, 0.6631, + 0.6668, 0.67, 0.6728, 0.6753, 0.6773, 0.6791, 0.0, 0.0, 0.0, 0.0, 0.0}, // DefaultWaterCondData + {0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.511, 0.520, 0.528, 0.537, 0.545, 0.552, 0.559, 0.566, 0.572, 0.577, + 0.583, 0.588, 0.592, 0.596, 0.600, 0.603, 0.606, 0.608, 0.610, 0.612, 0.613, 0.614, 0.614, 0.614, 0.613, 0.612}, // Conc=0.1 + {0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.460, 0.468, 0.476, 0.483, 0.490, 0.497, 0.503, 0.509, 0.515, 0.520, 0.525, + 0.529, 0.534, 0.538, 0.541, 0.544, 0.547, 0.549, 0.551, 0.553, 0.555, 0.556, 0.556, 0.557, 0.557, 0.556, 0.555}, // Conc=0.2 + {0.000, 0.000, 0.000, 0.000, 0.000, 0.415, 0.422, 0.429, 0.436, 0.442, 0.448, 0.453, 0.459, 0.464, 0.469, 0.473, 0.477, + 0.481, 0.485, 0.488, 0.491, 0.494, 0.496, 0.498, 0.500, 0.501, 0.503, 0.504, 0.504, 0.505, 0.505, 0.504, 0.504}, // Conc=0.3 + {0.000, 0.000, 0.000, 0.371, 0.377, 0.383, 0.389, 0.395, 0.400, 0.405, 0.410, 0.415, 0.419, 0.424, 0.428, 0.431, 0.435, + 0.438, 0.441, 0.444, 0.446, 0.449, 0.451, 0.452, 0.454, 0.455, 0.456, 0.457, 0.458, 0.458, 0.458, 0.458, 0.458}, // Conc=0.4 + {0.328, 0.333, 0.339, 0.344, 0.349, 0.354, 0.359, 0.364, 0.368, 0.373, 0.377, 0.380, 0.384, 0.387, 0.391, 0.394, 0.397, + 0.399, 0.402, 0.404, 0.406, 0.408, 0.410, 0.411, 0.413, 0.414, 0.415, 0.416, 0.416, 0.417, 0.417, 0.417, 0.417}, // Conc=0.5 + {0.307, 0.312, 0.316, 0.321, 0.325, 0.329, 0.333, 0.336, 0.340, 0.343, 0.346, 0.349, 0.352, 0.355, 0.358, 0.360, 0.363, + 0.365, 0.367, 0.369, 0.371, 0.372, 0.374, 0.375, 0.376, 0.377, 0.378, 0.379, 0.379, 0.380, 0.380, 0.380, 0.380}, // Conc=0.6 + {0.289, 0.293, 0.296, 0.300, 0.303, 0.306, 0.309, 0.312, 0.314, 0.317, 0.320, 0.322, 0.324, 0.327, 0.329, 0.331, 0.332, + 0.334, 0.336, 0.337, 0.339, 0.340, 0.341, 0.342, 0.343, 0.344, 0.345, 0.346, 0.346, 0.347, 0.347, 0.347, 0.347}, // Conc=0.7 + {0.274, 0.276, 0.279, 0.281, 0.283, 0.286, 0.288, 0.290, 0.292, 0.294, 0.296, 0.298, 0.299, 0.301, 0.303, 0.304, 0.306, + 0.307, 0.308, 0.310, 0.311, 0.312, 0.313, 0.314, 0.314, 0.315, 0.316, 0.316, 0.317, 0.317, 0.318, 0.318, 0.318}, // Conc=0.8 + {0.000, 0.000, 0.263, 0.265, 0.266, 0.268, 0.269, 0.271, 0.272, 0.274, 0.275, 0.276, 0.278, 0.279, 0.280, 0.281, 0.282, + 0.283, 0.284, 0.285, 0.286, 0.287, 0.288, 0.288, 0.289, 0.290, 0.290, 0.291, 0.291, 0.292, 0.292, 0.293, 0.293}} // Conc=0.9 }; - + // Propylene Glycol Data: Specific Heat in J/(kg-k) static constexpr std::array, DefaultNumGlyConcs> DefaultPropGlyCpData = { - {{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 4217.0, 4198.0, 4191.0, 4185.0, - 4181.0, 4179.0, 4180.0, 4180.0, 4180.0, 4180.0, 4181.0, 4183.0, 4185.0, 4188.0, 4192.0, - 4196.0, 4200.0, 4203.0, 4208.0, 4213.0, 4218.0, 4223.0, 4228.0, 4233.0, 4238.0, 4243.0}, // DefaultWaterCpData in J/kg-K - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 4042.0, 4050.0, 4058.0, 4067.0, - 4075.0, 4083.0, 4091.0, 4099.0, 4107.0, 4115.0, 4123.0, 4131.0, 4139.0, 4147.0, 4155.0, - 4163.0, 4171.0, 4179.0, 4187.0, 4195.0, 4203.0, 4211.0, 4219.0, 4227.0, 4235.0, 4243.0}, // Conc=0.1 - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3918.0, 3929.0, 3940.0, 3951.0, 3962.0, - 3973.0, 3983.0, 3994.0, 4005.0, 4016.0, 4027.0, 4038.0, 4049.0, 4060.0, 4071.0, 4082.0, - 4093.0, 4104.0, 4115.0, 4126.0, 4136.0, 4147.0, 4158.0, 4169.0, 4180.0, 4191.0, 4202.0}, // Conc=0.2 - {0.0, 0.0, 0.0, 0.0, 0.0, 3765.0, 3779.0, 3793.0, 3807.0, 3820.0, 3834.0, - 3848.0, 3862.0, 3875.0, 3889.0, 3903.0, 3917.0, 3930.0, 3944.0, 3958.0, 3972.0, 3985.0, - 3999.0, 4013.0, 4027.0, 4040.0, 4054.0, 4068.0, 4082.0, 4095.0, 4109.0, 4123.0, 4137.0}, // Conc=0.3 - {0.0, 0.0, 0.0, 0.0, 3586.0, 3603.0, 3619.0, 3636.0, 3652.0, 3669.0, 3685.0, - 3702.0, 3718.0, 3735.0, 3751.0, 3768.0, 3784.0, 3801.0, 3817.0, 3834.0, 3850.0, 3867.0, - 3883.0, 3900.0, 3916.0, 3933.0, 3949.0, 3966.0, 3982.0, 3999.0, 4015.0, 4032.0, 4049.0}, // Conc=0.4 - {0.0, 0.0, 3358.0, 3378.0, 3397.0, 3416.0, 3435.0, 3455.0, 3474.0, 3493.0, 3513.0, - 3532.0, 3551.0, 3570.0, 3590.0, 3609.0, 3628.0, 3648.0, 3667.0, 3686.0, 3706.0, 3725.0, - 3744.0, 3763.0, 3783.0, 3802.0, 3821.0, 3841.0, 3860.0, 3879.0, 3898.0, 3918.0, 3937.0}, // Conc=0.5 - {3096.0, 3118.0, 3140.0, 3162.0, 3184.0, 3206.0, 3228.0, 3250.0, 3272.0, 3295.0, 3317.0, - 3339.0, 3361.0, 3383.0, 3405.0, 3427.0, 3449.0, 3471.0, 3493.0, 3515.0, 3537.0, 3559.0, - 3581.0, 3603.0, 3625.0, 3647.0, 3670.0, 3692.0, 3714.0, 3736.0, 3758.0, 3780.0, 3802.0}, // Conc=0.6 - {2843.0, 2868.0, 2893.0, 2918.0, 2943.0, 2968.0, 2993.0, 3018.0, 3042.0, 3067.0, 3092.0, - 3117.0, 3142.0, 3167.0, 3192.0, 3217.0, 3242.0, 3266.0, 3291.0, 3316.0, 3341.0, 3366.0, - 3391.0, 3416.0, 3441.0, 3465.0, 3490.0, 3515.0, 3540.0, 3565.0, 3590.0, 3615.0, 3640.0}, // Conc=0.7 - {2572.0, 2600.0, 2627.0, 2655.0, 2683.0, 2710.0, 2738.0, 2766.0, 2793.0, 2821.0, 2849.0, - 2876.0, 2904.0, 2931.0, 2959.0, 2987.0, 3014.0, 3042.0, 3070.0, 3097.0, 3125.0, 3153.0, - 3180.0, 3208.0, 3236.0, 3263.0, 3291.0, 3319.0, 3346.0, 3374.0, 3402.0, 3429.0, 3457.0}, // Conc=0.8 - {2264.0, 2295.0, 2326.0, 2356.0, 2387.0, 2417.0, 2448.0, 2478.0, 2509.0, 2539.0, 2570.0, - 2600.0, 2631.0, 2661.0, 2692.0, 2723.0, 2753.0, 2784.0, 2814.0, 2845.0, 2875.0, 2906.0, - 2936.0, 2967.0, 2997.0, 3028.0, 3058.0, 3089.0, 3119.0, 3150.0, 3181.0, 3211.0, 3242.0}} // Conc=0.9 + {{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 4217.0, 4198.0, 4191.0, 4185.0, 4181.0, 4179.0, 4180.0, 4180.0, 4180.0, 4180.0, + 4181.0, 4183.0, 4185.0, 4188.0, 4192.0, 4196.0, 4200.0, 4203.0, 4208.0, 4213.0, 4218.0, 4223.0, 4228.0, 4233.0, 4238.0, 4243.0}, // DefaultWaterCpData + // in + // J/kg-K + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 4042.0, 4050.0, 4058.0, 4067.0, 4075.0, 4083.0, 4091.0, 4099.0, 4107.0, 4115.0, + 4123.0, 4131.0, 4139.0, 4147.0, 4155.0, 4163.0, 4171.0, 4179.0, 4187.0, 4195.0, 4203.0, 4211.0, 4219.0, 4227.0, 4235.0, 4243.0}, // Conc=0.1 + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3918.0, 3929.0, 3940.0, 3951.0, 3962.0, 3973.0, 3983.0, 3994.0, 4005.0, 4016.0, 4027.0, + 4038.0, 4049.0, 4060.0, 4071.0, 4082.0, 4093.0, 4104.0, 4115.0, 4126.0, 4136.0, 4147.0, 4158.0, 4169.0, 4180.0, 4191.0, 4202.0}, // Conc=0.2 + {0.0, 0.0, 0.0, 0.0, 0.0, 3765.0, 3779.0, 3793.0, 3807.0, 3820.0, 3834.0, 3848.0, 3862.0, 3875.0, 3889.0, 3903.0, 3917.0, + 3930.0, 3944.0, 3958.0, 3972.0, 3985.0, 3999.0, 4013.0, 4027.0, 4040.0, 4054.0, 4068.0, 4082.0, 4095.0, 4109.0, 4123.0, 4137.0}, // Conc=0.3 + {0.0, 0.0, 0.0, 0.0, 3586.0, 3603.0, 3619.0, 3636.0, 3652.0, 3669.0, 3685.0, 3702.0, 3718.0, 3735.0, 3751.0, 3768.0, 3784.0, + 3801.0, 3817.0, 3834.0, 3850.0, 3867.0, 3883.0, 3900.0, 3916.0, 3933.0, 3949.0, 3966.0, 3982.0, 3999.0, 4015.0, 4032.0, 4049.0}, // Conc=0.4 + {0.0, 0.0, 3358.0, 3378.0, 3397.0, 3416.0, 3435.0, 3455.0, 3474.0, 3493.0, 3513.0, 3532.0, 3551.0, 3570.0, 3590.0, 3609.0, 3628.0, + 3648.0, 3667.0, 3686.0, 3706.0, 3725.0, 3744.0, 3763.0, 3783.0, 3802.0, 3821.0, 3841.0, 3860.0, 3879.0, 3898.0, 3918.0, 3937.0}, // Conc=0.5 + {3096.0, 3118.0, 3140.0, 3162.0, 3184.0, 3206.0, 3228.0, 3250.0, 3272.0, 3295.0, 3317.0, 3339.0, 3361.0, 3383.0, 3405.0, 3427.0, 3449.0, + 3471.0, 3493.0, 3515.0, 3537.0, 3559.0, 3581.0, 3603.0, 3625.0, 3647.0, 3670.0, 3692.0, 3714.0, 3736.0, 3758.0, 3780.0, 3802.0}, // Conc=0.6 + {2843.0, 2868.0, 2893.0, 2918.0, 2943.0, 2968.0, 2993.0, 3018.0, 3042.0, 3067.0, 3092.0, 3117.0, 3142.0, 3167.0, 3192.0, 3217.0, 3242.0, + 3266.0, 3291.0, 3316.0, 3341.0, 3366.0, 3391.0, 3416.0, 3441.0, 3465.0, 3490.0, 3515.0, 3540.0, 3565.0, 3590.0, 3615.0, 3640.0}, // Conc=0.7 + {2572.0, 2600.0, 2627.0, 2655.0, 2683.0, 2710.0, 2738.0, 2766.0, 2793.0, 2821.0, 2849.0, 2876.0, 2904.0, 2931.0, 2959.0, 2987.0, 3014.0, + 3042.0, 3070.0, 3097.0, 3125.0, 3153.0, 3180.0, 3208.0, 3236.0, 3263.0, 3291.0, 3319.0, 3346.0, 3374.0, 3402.0, 3429.0, 3457.0}, // Conc=0.8 + {2264.0, 2295.0, 2326.0, 2356.0, 2387.0, 2417.0, 2448.0, 2478.0, 2509.0, 2539.0, 2570.0, 2600.0, 2631.0, 2661.0, 2692.0, 2723.0, 2753.0, + 2784.0, 2814.0, 2845.0, 2875.0, 2906.0, 2936.0, 2967.0, 2997.0, 3028.0, 3058.0, 3089.0, 3119.0, 3150.0, 3181.0, 3211.0, 3242.0}} // Conc=0.9 }; // Propylene Glycol Data: Viscosity in mPa-s @@ -311,7 +306,7 @@ namespace FluidProperties { 4.9e-04, 4.6e-04, 4.3e-04, 4.0e-04, 3.8e-04, 3.5e-04, 3.3e-04, 3.2e-04, 3.0e-04, 2.8e-04, 2.7e-04}, // Conc=0.1 {0.0e+00, 0.0e+00, 0.0e+00, 0.0e+00, 0.0e+00, 0.0e+00, 4.98e-03, 4.05e-03, 3.34e-03, 2.79e-03, 2.36e-03, 2.02e-03, 1.74e-03, 1.52e-03, 1.34e-03, 1.18e-03, 1.06e-03, 9.5e-04, 8.6e-04, 7.8e-04, 7.1e-04, 6.6e-04, - 6.0e-04, 5.6e-04, 5.2e-04, 4.9e-04, 4.5e-04, 4.3e-04, 4.0e-04, 3.8e-04, 3.6e-04, 3.4e-04, 3.2e-04}, // Conc=0.2 + 6.0e-04, 5.6e-04, 5.2e-04, 4.9e-04, 4.5e-04, 4.3e-04, 4.0e-04, 3.8e-04, 3.6e-04, 3.4e-04, 3.2e-04}, // Conc=0.2 {0.0e+00, 0.0e+00, 0.0e+00, 0.0e+00, 0.0e+00, 1.187e-02, 9.08e-03, 7.08e-03, 5.61e-03, 4.52e-03, 3.69e-03, 3.06e-03, 2.57e-03, 2.18e-03, 1.88e-03, 1.63e-03, 1.43e-03, 1.26e-03, 1.13e-03, 1.01e-03, 9.1e-04, 8.3e-04, 7.6e-04, 7.0e-04, 6.5e-04, 6.1e-04, 5.7e-04, 5.3e-04, 5.0e-04, 4.7e-04, 4.5e-04, 4.3e-04, 4.1e-04}, // Conc=0.3 @@ -327,17 +322,16 @@ namespace FluidProperties { {9.1618e-01, 5.5112e-01, 3.4009e-01, 2.1567e-01, 1.4062e-01, 9.423e-02, 6.483e-02, 4.574e-02, 3.304e-02, 2.441e-02, 1.841e-02, 1.415e-02, 1.108e-02, 8.81e-03, 7.12e-03, 5.84e-03, 4.85e-03, 4.08e-03, 3.46e-03, 2.98e-03, 2.58e-03, 2.26e-03, 1.99e-03, 1.77e-03, 1.59e-03, 1.43e-03, 1.30e-03, 1.18e-03, 1.08e-03, 1.00e-03, 9.3e-04, 8.6e-04, 8.0e-04}, // Conc=0.7 - {1.43422e+00, 9.0847e-01, 5.7592e-01, 3.6877e-01, 2.3986e-01, 1.5902e-01, 1.0764e-01, 7.445e-02, 5.263e-02, - 3.799e-02, 2.800e-02, 2.104e-02, 1.610e-02, 1.255e-02, 9.94e-03, 7.99e-03, 6.52e-03, 5.39e-03, - 4.51e-03, 3.82e-03, 3.28e-03, 2.83e-03, 2.47e-03, 2.18e-03, 1.94e-03, 1.73e-03, 1.56e-03, - 1.42e-03, 1.29e-03, 1.19e-03, 1.09e-03, 1.02e-03, 9.5e-04}, // Conc=0.8 + {1.43422e+00, 9.0847e-01, 5.7592e-01, 3.6877e-01, 2.3986e-01, 1.5902e-01, 1.0764e-01, 7.445e-02, 5.263e-02, 3.799e-02, 2.800e-02, + 2.104e-02, 1.610e-02, 1.255e-02, 9.94e-03, 7.99e-03, 6.52e-03, 5.39e-03, 4.51e-03, 3.82e-03, 3.28e-03, 2.83e-03, + 2.47e-03, 2.18e-03, 1.94e-03, 1.73e-03, 1.56e-03, 1.42e-03, 1.29e-03, 1.19e-03, 1.09e-03, 1.02e-03, 9.5e-04}, // Conc=0.8 {3.81329e+00, 2.07134e+00, 1.17609e+00, 6.9609e-01, 4.2819e-01, 2.7294e-01, 1.7978e-01, 1.2203e-01, 8.515e-02, 6.093e-02, 4.462e-02, 3.338e-02, 2.545e-02, 1.976e-02, 1.560e-02, 1.249e-02, 1.015e-02, 8.35e-03, 6.95e-03, 5.85e-03, 4.97e-03, 4.26e-03, 3.69e-03, 3.22e-03, 2.83e-03, 2.50e-03, 2.23e-03, 2.00e-03, 1.80e-03, 1.63e-03, 1.48e-03, 1.35e-03, 1.24e-03}} // Conc=0.9 }; - - // Propylene Glycol Data: Density in kg/m3 + + // Propylene Glycol Data: Density in kg/m3 static constexpr std::array, DefaultNumGlyConcs> DefaultPropGlyRhoData = { {{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 999.8, 999.9, 999.7, 999.1, 998.2, 997.0, 995.6, 994.0, 992.2, 990.2, 988.0, 985.7, 983.2, 980.5, 977.7, 974.8, 971.8, 968.6, 965.3, 961.9, 958.3, 0.0, 0.0, 0.0, 0.0, 0.0}, // DefaultWaterRhoData in @@ -372,29 +366,32 @@ namespace FluidProperties { }; // Propylene Glycol Data: Conductivity in W/(m-K) - static constexpr std::array, DefaultNumGlyConcs> DefaultPropGlyCondData = { - {{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.561, 0.5705, 0.58, 0.5893, - 0.5984, 0.6072, 0.6155, 0.6233, 0.6306, 0.6373, 0.6436, 0.6492, 0.6543, 0.659, 0.6631, - 0.6668, 0.67, 0.6728, 0.6753, 0.6773, 0.6791, 0.0, 0.0, 0.0, 0.0, 0.0}, // DefaultWaterCondData - // in W/mK - {0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.510, 0.518, 0.527, 0.535, 0.543, 0.550, 0.557, 0.563, 0.569, 0.575, - 0.580, 0.585, 0.589, 0.593, 0.596, 0.599, 0.602, 0.604, 0.606, 0.607, 0.608, 0.609, 0.609, 0.608, 0.608, 0.606}, // Conc=0.1 - {0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.456, 0.464, 0.472, 0.479, 0.485, 0.492, 0.498, 0.503, 0.508, 0.513, 0.518, - 0.522, 0.526, 0.529, 0.532, 0.535, 0.538, 0.540, 0.541, 0.543, 0.544, 0.544, 0.544, 0.544, 0.544, 0.543, 0.542}, // Conc=0.2 - {0.000, 0.000, 0.000, 0.000, 0.000, 0.410, 0.416, 0.423, 0.429, 0.434, 0.440, 0.445, 0.449, 0.454, 0.458, 0.462, 0.466, - 0.469, 0.472, 0.475, 0.477, 0.479, 0.481, 0.482, 0.484, 0.484, 0.485, 0.485, 0.485, 0.485, 0.485, 0.484, 0.482}, // Conc=0.3 - {0.000, 0.000, 0.000, 0.000, 0.369, 0.375, 0.380, 0.385, 0.389, 0.394, 0.398, 0.402, 0.406, 0.409, 0.412, 0.415, 0.418, - 0.420, 0.423, 0.425, 0.426, 0.428, 0.429, 0.430, 0.431, 0.431, 0.432, 0.432, 0.432, 0.431, 0.430, 0.429, 0.428}, // Conc=0.4 - {0.000, 0.000, 0.329, 0.334, 0.338, 0.342, 0.346, 0.349, 0.353, 0.356, 0.359, 0.362, 0.365, 0.367, 0.370, 0.372, 0.374, - 0.375, 0.377, 0.378, 0.379, 0.380, 0.381, 0.382, 0.382, 0.382, 0.382, 0.382, 0.382, 0.381, 0.380, 0.379, 0.378}, // Conc=0.5 - {0.296, 0.300, 0.303, 0.306, 0.309, 0.312, 0.314, 0.317, 0.319, 0.321, 0.323, 0.325, 0.327, 0.329, 0.330, 0.331, 0.333, - 0.334, 0.335, 0.335, 0.336, 0.336, 0.337, 0.337, 0.337, 0.337, 0.336, 0.336, 0.335, 0.335, 0.334, 0.333, 0.332}, // Conc=0.6 - {0.275, 0.277, 0.278, 0.280, 0.282, 0.284, 0.285, 0.286, 0.289, 0.290, 0.291, 0.292, 0.293, 0.293, 0.294, 0.294, 0.295, - 0.295, 0.295, 0.295, 0.295, 0.295, 0.295, 0.295, 0.295, 0.294, 0.294, 0.293, 0.292, 0.292, 0.291, 0.290, 0.288}, // Conc=0.7 - {0.255, 0.256, 0.257, 0.257, 0.258, 0.259, 0.259, 0.259, 0.260, 0.260, 0.260, 0.261, 0.261, 0.261, 0.261, 0.261, 0.260, - 0.260, 0.260, 0.260, 0.259, 0.259, 0.258, 0.258, 0.257, 0.256, 0.256, 0.255, 0.254, 0.253, 0.252, 0.251, 0.250}, // Conc=0.8 - {0.237, 0.237, 0.236, 0.236, 0.236, 0.235, 0.235, 0.234, 0.234, 0.233, 0.233, 0.232, 0.233, 0.231, 0.230, 0.229, 0.229, - 0.228, 0.227, 0.227, 0.226, 0.225, 0.224, 0.223, 0.222, 0.221, 0.220, 0.219, 0.218, 0.217, 0.216, 0.215, 0.214}} // Conc=0.9 + static constexpr std:: + array, DefaultNumGlyConcs> + DefaultPropGlyCondData = + { + {{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.561, 0.5705, 0.58, 0.5893, + 0.5984, 0.6072, 0.6155, 0.6233, 0.6306, 0.6373, 0.6436, 0.6492, 0.6543, 0.659, 0.6631, + 0.6668, 0.67, 0.6728, 0.6753, 0.6773, 0.6791, 0.0, 0.0, 0.0, 0.0, 0.0}, // DefaultWaterCondData + // in W/mK + {0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.510, 0.518, 0.527, 0.535, 0.543, 0.550, 0.557, 0.563, 0.569, 0.575, + 0.580, 0.585, 0.589, 0.593, 0.596, 0.599, 0.602, 0.604, 0.606, 0.607, 0.608, 0.609, 0.609, 0.608, 0.608, 0.606}, // Conc=0.1 + {0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.456, 0.464, 0.472, 0.479, 0.485, 0.492, 0.498, 0.503, 0.508, 0.513, 0.518, + 0.522, 0.526, 0.529, 0.532, 0.535, 0.538, 0.540, 0.541, 0.543, 0.544, 0.544, 0.544, 0.544, 0.544, 0.543, 0.542}, // Conc=0.2 + {0.000, 0.000, 0.000, 0.000, 0.000, 0.410, 0.416, 0.423, 0.429, 0.434, 0.440, 0.445, 0.449, 0.454, 0.458, 0.462, 0.466, + 0.469, 0.472, 0.475, 0.477, 0.479, 0.481, 0.482, 0.484, 0.484, 0.485, 0.485, 0.485, 0.485, 0.485, 0.484, 0.482}, // Conc=0.3 + {0.000, 0.000, 0.000, 0.000, 0.369, 0.375, 0.380, 0.385, 0.389, 0.394, 0.398, 0.402, 0.406, 0.409, 0.412, 0.415, 0.418, + 0.420, 0.423, 0.425, 0.426, 0.428, 0.429, 0.430, 0.431, 0.431, 0.432, 0.432, 0.432, 0.431, 0.430, 0.429, 0.428}, // Conc=0.4 + {0.000, 0.000, 0.329, 0.334, 0.338, 0.342, 0.346, 0.349, 0.353, 0.356, 0.359, 0.362, 0.365, 0.367, 0.370, 0.372, 0.374, + 0.375, 0.377, 0.378, 0.379, 0.380, 0.381, 0.382, 0.382, 0.382, 0.382, 0.382, 0.382, 0.381, 0.380, 0.379, 0.378}, // Conc=0.5 + {0.296, 0.300, 0.303, 0.306, 0.309, 0.312, 0.314, 0.317, 0.319, 0.321, 0.323, 0.325, 0.327, 0.329, 0.330, 0.331, 0.333, + 0.334, 0.335, 0.335, 0.336, 0.336, 0.337, 0.337, 0.337, 0.337, 0.336, 0.336, 0.335, 0.335, 0.334, 0.333, 0.332}, // Conc=0.6 + {0.275, 0.277, 0.278, 0.280, 0.282, 0.284, 0.285, 0.286, 0.289, 0.290, 0.291, 0.292, 0.293, 0.293, 0.294, 0.294, 0.295, + 0.295, 0.295, 0.295, 0.295, 0.295, 0.295, 0.295, 0.295, 0.294, 0.294, 0.293, 0.292, 0.292, 0.291, 0.290, 0.288}, // Conc=0.7 + {0.255, 0.256, 0.257, 0.257, 0.258, 0.259, 0.259, 0.259, 0.260, 0.260, 0.260, 0.261, 0.261, 0.261, 0.261, 0.261, 0.260, + 0.260, 0.260, 0.260, 0.259, 0.259, 0.258, 0.258, 0.257, 0.256, 0.256, 0.255, 0.254, 0.253, 0.252, 0.251, 0.250}, // Conc=0.8 + {0.237, 0.237, 0.236, 0.236, 0.236, 0.235, 0.235, 0.234, 0.234, 0.233, 0.233, 0.232, 0.233, 0.231, 0.230, 0.229, 0.229, + 0.228, 0.227, 0.227, 0.226, 0.225, 0.224, 0.223, 0.222, 0.221, 0.220, 0.219, 0.218, 0.217, 0.216, 0.215, 0.214}} // Conc=0.9 }; // Steam Refrigerant Data @@ -404,8 +401,7 @@ namespace FluidProperties { 107.0, 108.0, 109.0, 110.0, 111.0, 112.0, 113.0, 114.0, 115.0, 116.0, 117.0, 118.0, 119.0, 120.0, 121.0, 122.0, 123.0, 124.0, 125.0, 126.0, 127.0, 128.0, 129.0, 130.0, 132.0, 134.0, 136.0, 138.0, 140.0, 142.0, 144.0, 146.0, 148.0, 150.0, 152.0, 154.0, 156.0, 158.0, 160.0, 162.0, 164.0, 166.0, 168.0, 170.0, 172.0, 174.0, 176.0, 178.0, 180.0, 185.0, 190.0, 195.0, 200.0, 205.0, 210.0, 215.0, 220.0, - 225.0, 230.0, 240.0, 250.0, 260.0, 270.0, 280.0, 290.0, 300.0, 310.0, 320.0, 330.0, 340.0, 350.0, 360.0, 370.0 - }; + 225.0, 230.0, 240.0, 250.0, 260.0, 270.0, 280.0, 290.0, 300.0, 310.0, 320.0, 330.0, 340.0, 350.0, 360.0, 370.0}; static constexpr std::array DefaultSteamPressData = { 611.7, 657.1, 872.6, 1228.0, 1706.0, 2339.0, 3170.0, 4247.0, 5629.0, 7385.0, 9595.0, 12350.0, @@ -417,34 +413,29 @@ namespace FluidProperties { 502200.0, 529500.0, 557800.0, 587400.0, 618200.0, 650300.0, 683700.0, 718500.0, 754600.0, 792200.0, 831200.0, 871800.0, 913800.0, 957500.0, 1003000.0, 1123000.0, 1255000.0, 1399000.0, 1555000.0, 1724000.0, 1908000.0, 2106000.0, 2320000.0, 2550000.0, 2797000.0, 3347000.0, 3976000.0, 4692000.0, 5503000.0, 6417000.0, 7442000.0, 8588000.0, 9865000.0, 11280000.0, 12860000.0, 14600000.0, - 16530000.0, 18670000.0, 21040000.0 - }; + 16530000.0, 18670000.0, 21040000.0}; static constexpr std::array DefaultSteamEnthalpyFluidData = { - 0.59, 4177.0, 21020.0, 42020.0, 62980.0, 83910.0, 104800.0, 125700.0, 146600.0, 167500.0, 188400.0, 209300.0, - 230300.0, 251200.0, 272100.0, 293100.0, 301400.0, 309800.0, 318200.0, 326600.0, 335000.0, 343400.0, 351800.0, 360200.0, - 368600.0, 377000.0, 385500.0, 393900.0, 402300.0, 410700.0, 414900.0, 419200.0, 423400.0, 427600.0, 431800.0, 436000.0, - 440300.0, 444500.0, 448700.0, 453000.0, 457200.0, 461400.0, 465600.0, 469900.0, 474100.0, 478400.0, 482600.0, 486800.0, - 491100.0, 495300.0, 499600.0, 503800.0, 508100.0, 512300.0, 516600.0, 520800.0, 525100.0, 529300.0, 533600.0, 537900.0, - 542100.0, 546400.0, 554900.0, 563500.0, 572000.0, 580600.0, 589200.0, 597700.0, 606300.0, 614900.0, 623600.0, 632200.0, - 640800.0, 649500.0, 658100.0, 666800.0, 675500.0, 684200.0, 692900.0, 701600.0, 710300.0, 719100.0, 727800.0, 736600.0, - 745400.0, 754200.0, 763100.0, 785200.0, 807400.0, 829800.0, 852300.0, 874900.0, 897600.0, 920500.0, 943600.0, 966800.0, - 990200.0, 1038000.0, 1086000.0, 1135000.0, 1185000.0, 1237000.0, 1290000.0, 1345000.0, 1402000.0, 1462000.0, 1526000.0, 1595000.0, - 1671000.0, 1762000.0, 1891000.0 - }; - + 0.59, 4177.0, 21020.0, 42020.0, 62980.0, 83910.0, 104800.0, 125700.0, 146600.0, 167500.0, 188400.0, 209300.0, 230300.0, + 251200.0, 272100.0, 293100.0, 301400.0, 309800.0, 318200.0, 326600.0, 335000.0, 343400.0, 351800.0, 360200.0, 368600.0, 377000.0, + 385500.0, 393900.0, 402300.0, 410700.0, 414900.0, 419200.0, 423400.0, 427600.0, 431800.0, 436000.0, 440300.0, 444500.0, 448700.0, + 453000.0, 457200.0, 461400.0, 465600.0, 469900.0, 474100.0, 478400.0, 482600.0, 486800.0, 491100.0, 495300.0, 499600.0, 503800.0, + 508100.0, 512300.0, 516600.0, 520800.0, 525100.0, 529300.0, 533600.0, 537900.0, 542100.0, 546400.0, 554900.0, 563500.0, 572000.0, + 580600.0, 589200.0, 597700.0, 606300.0, 614900.0, 623600.0, 632200.0, 640800.0, 649500.0, 658100.0, 666800.0, 675500.0, 684200.0, + 692900.0, 701600.0, 710300.0, 719100.0, 727800.0, 736600.0, 745400.0, 754200.0, 763100.0, 785200.0, 807400.0, 829800.0, 852300.0, + 874900.0, 897600.0, 920500.0, 943600.0, 966800.0, 990200.0, 1038000.0, 1086000.0, 1135000.0, 1185000.0, 1237000.0, 1290000.0, 1345000.0, + 1402000.0, 1462000.0, 1526000.0, 1595000.0, 1671000.0, 1762000.0, 1891000.0}; + static constexpr std::array DefaultSteamEnthalpyGasFluidData = { - 2501000.0, 2503000.0, 2510000.0, 2519000.0, 2528000.0, 2537000.0, 2547000.0, 2556000.0, 2565000.0, 2574000.0, 2582000.0, 2591000.0, - 2600000.0, 2609000.0, 2618000.0, 2626000.0, 2630000.0, 2633000.0, 2636000.0, 2640000.0, 2643000.0, 2646000.0, 2650000.0, 2653000.0, - 2656000.0, 2660000.0, 2663000.0, 2666000.0, 2669000.0, 2672000.0, 2674000.0, 2676000.0, 2677000.0, 2679000.0, 2680000.0, 2682000.0, - 2683000.0, 2685000.0, 2686000.0, 2688000.0, 2690000.0, 2691000.0, 2693000.0, 2694000.0, 2696000.0, 2697000.0, 2699000.0, 2700000.0, - 2702000.0, 2703000.0, 2704000.0, 2706000.0, 2707000.0, 2709000.0, 2710000.0, 2712000.0, 2713000.0, 2715000.0, 2716000.0, 2717000.0, - 2719000.0, 2720000.0, 2723000.0, 2726000.0, 2728000.0, 2731000.0, 2733000.0, 2736000.0, 2739000.0, 2741000.0, 2744000.0, 2746000.0, - 2748000.0, 2751000.0, 2753000.0, 2755000.0, 2757000.0, 2760000.0, 2762000.0, 2764000.0, 2766000.0, 2768000.0, 2770000.0, 2772000.0, - 2774000.0, 2775000.0, 2777000.0, 2781000.0, 2785000.0, 2789000.0, 2792000.0, 2795000.0, 2797000.0, 2799000.0, 2801000.0, 2802000.0, - 2803000.0, 2803000.0, 2801000.0, 2797000.0, 2790000.0, 2780000.0, 2767000.0, 2750000.0, 2728000.0, 2701000.0, 2666000.0, 2622000.0, - 2564000.0, 2481000.0, 2335000.0 - }; + 2501000.0, 2503000.0, 2510000.0, 2519000.0, 2528000.0, 2537000.0, 2547000.0, 2556000.0, 2565000.0, 2574000.0, 2582000.0, 2591000.0, 2600000.0, + 2609000.0, 2618000.0, 2626000.0, 2630000.0, 2633000.0, 2636000.0, 2640000.0, 2643000.0, 2646000.0, 2650000.0, 2653000.0, 2656000.0, 2660000.0, + 2663000.0, 2666000.0, 2669000.0, 2672000.0, 2674000.0, 2676000.0, 2677000.0, 2679000.0, 2680000.0, 2682000.0, 2683000.0, 2685000.0, 2686000.0, + 2688000.0, 2690000.0, 2691000.0, 2693000.0, 2694000.0, 2696000.0, 2697000.0, 2699000.0, 2700000.0, 2702000.0, 2703000.0, 2704000.0, 2706000.0, + 2707000.0, 2709000.0, 2710000.0, 2712000.0, 2713000.0, 2715000.0, 2716000.0, 2717000.0, 2719000.0, 2720000.0, 2723000.0, 2726000.0, 2728000.0, + 2731000.0, 2733000.0, 2736000.0, 2739000.0, 2741000.0, 2744000.0, 2746000.0, 2748000.0, 2751000.0, 2753000.0, 2755000.0, 2757000.0, 2760000.0, + 2762000.0, 2764000.0, 2766000.0, 2768000.0, 2770000.0, 2772000.0, 2774000.0, 2775000.0, 2777000.0, 2781000.0, 2785000.0, 2789000.0, 2792000.0, + 2795000.0, 2797000.0, 2799000.0, 2801000.0, 2802000.0, 2803000.0, 2803000.0, 2801000.0, 2797000.0, 2790000.0, 2780000.0, 2767000.0, 2750000.0, + 2728000.0, 2701000.0, 2666000.0, 2622000.0, 2564000.0, 2481000.0, 2335000.0}; static constexpr std::array DefaultSteamCpFluidData = { 4220.0, 4217.0, 4205.0, 4196.0, 4189.0, 4184.0, 4182.0, 4180.0, 4180.0, 4180.0, 4180.0, 4182.0, 4183.0, 4185.0, 4187.0, 4190.0, @@ -453,8 +444,7 @@ namespace FluidProperties { 4239.0, 4240.0, 4242.0, 4244.0, 4245.0, 4247.0, 4249.0, 4250.0, 4252.0, 4254.0, 4256.0, 4258.0, 4260.0, 4261.0, 4265.0, 4270.0, 4274.0, 4278.0, 4283.0, 4287.0, 4292.0, 4297.0, 4302.0, 4307.0, 4312.0, 4318.0, 4324.0, 4329.0, 4335.0, 4341.0, 4348.0, 4354.0, 4361.0, 4368.0, 4375.0, 4382.0, 4390.0, 4397.0, 4405.0, 4425.0, 4447.0, 4471.0, 4496.0, 4523.0, 4551.0, 4582.0, 4615.0, 4650.0, - 4688.0, 4772.0, 4870.0, 4986.0, 5123.0, 5289.0, 5493.0, 5750.0, 6085.0, 6537.0, 7186.0, 8208.0, 10120.0, 15000.0, 45160.0 - }; + 4688.0, 4772.0, 4870.0, 4986.0, 5123.0, 5289.0, 5493.0, 5750.0, 6085.0, 6537.0, 7186.0, 8208.0, 10120.0, 15000.0, 45160.0}; static constexpr std::array DefaultSteamCpGasFluidData = { 1884.0, 1885.0, 1889.0, 1895.0, 1900.0, 1906.0, 1912.0, 1918.0, 1925.0, 1931.0, 1939.0, 1947.0, 1955.0, 1965.0, 1975.0, 1986.0, @@ -463,18 +453,16 @@ namespace FluidProperties { 2160.0, 2166.0, 2171.0, 2177.0, 2183.0, 2189.0, 2195.0, 2201.0, 2207.0, 2213.0, 2219.0, 2226.0, 2232.0, 2239.0, 2252.0, 2266.0, 2281.0, 2296.0, 2311.0, 2327.0, 2343.0, 2359.0, 2376.0, 2394.0, 2412.0, 2430.0, 2449.0, 2468.0, 2488.0, 2509.0, 2529.0, 2551.0, 2572.0, 2594.0, 2617.0, 2640.0, 2664.0, 2688.0, 2713.0, 2777.0, 2844.0, 2915.0, 2990.0, 3068.0, 3150.0, 3237.0, 3329.0, 3426.0, - 3528.0, 3754.0, 4011.0, 4308.0, 4656.0, 5073.0, 5582.0, 6220.0, 7045.0, 8159.0, 9753.0, 12240.0, 16690.0, 27360.0, 96600.0 - }; - + 3528.0, 3754.0, 4011.0, 4308.0, 4656.0, 5073.0, 5582.0, 6220.0, 7045.0, 8159.0, 9753.0, 12240.0, 16690.0, 27360.0, 96600.0}; + static constexpr std::array DefaultSteamDensityFluidData = { 999.8, 999.9, 999.9, 999.7, 999.1, 998.2, 997.0, 995.6, 994.0, 992.2, 990.2, 988.0, 985.7, 983.2, 980.5, 977.7, 976.6, 975.4, 974.2, 973.0, 971.8, 970.5, 969.2, 967.9, 966.6, 965.3, 963.9, 962.6, 961.2, 959.8, 959.1, 958.3, 957.6, 956.9, 956.2, 955.4, 954.7, 954.0, 953.2, 952.5, 951.7, 950.9, 950.2, 949.4, 948.6, 947.9, 947.1, 946.3, 945.5, 944.7, 943.9, 943.1, 942.3, 941.5, 940.7, 939.8, 939.0, 938.2, 937.4, 936.5, 935.7, 934.8, 933.1, 931.4, 929.7, 927.9, 926.1, 924.3, 922.5, 920.7, 918.9, 917.0, 915.1, 913.2, 911.3, 909.4, 907.4, 905.5, 903.5, 901.5, 899.5, 897.5, 895.4, 893.3, 891.2, 889.1, 887.0, 881.6, 876.1, 870.4, 864.7, 858.8, 852.7, 846.5, 840.2, - 833.7, 827.1, 813.4, 798.9, 783.6, 767.5, 750.3, 731.9, 712.1, 690.7, 667.1, 640.8, 610.7, 574.7, 527.6, 451.4 - }; - + 833.7, 827.1, 813.4, 798.9, 783.6, 767.5, 750.3, 731.9, 712.1, 690.7, 667.1, 640.8, 610.7, 574.7, 527.6, 451.4}; + static constexpr std::array DefaultSteamDensityGasFluidData = { 4.86e-003, 5.20e-003, 6.80e-003, 9.41e-003, 1.28e-002, 1.73e-002, 2.31e-002, 3.04e-002, 3.97e-002, 5.12e-002, 6.56e-002, 8.32e-002, 0.10, 0.13, 0.16, 0.20, 0.22, 0.23, 0.25, 0.27, 0.29, 0.32, 0.34, 0.37, 0.39, 0.42, @@ -484,32 +472,28 @@ namespace FluidProperties { 1.86, 1.97, 2.07, 2.19, 2.30, 2.42, 2.55, 2.68, 2.82, 2.96, 3.11, 3.26, 3.42, 3.59, 3.76, 3.94, 4.12, 4.32, 4.52, 4.72, 4.94, 5.16, 5.75, 6.40, 7.10, 7.86, 8.69, 9.59, 10.56, 11.62, 12.75, 13.99, 16.75, 19.97, 23.71, 28.07, 33.16, 39.13, 46.17, - 54.54, 64.64, 77.05, 92.76, 113.60, 143.90, 201.80 - }; - + 54.54, 64.64, 77.05, 92.76, 113.60, 143.90, 201.80}; + static constexpr std::array DefaultSteamSuperheatedTemps = { 1.00e-002, 1.0, 5.0, 10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 72.0, 74.0, 76.0, 78.0, 80.0, 82.0, 84.0, 86.0, 88.0, 90.0, 92.0, 94.0, 96.0, 98.0, 99.0, 100.0, 101.0, 102.0, 103.0, 104.0, 105.0, 106.0, 107.0, 108.0, 109.0, 110.0, 111.0, 112.0, 113.0, 114.0, 115.0, 116.0, 117.0, 118.0, 119.0, 120.0, 121.0, 122.0, 123.0, 124.0, 125.0, 126.0, 127.0, 128.0, 129.0, 130.0, 132.0, 134.0, 136.0, 138.0, 140.0, 142.0, 144.0, 146.0, 148.0, 150.0, 152.0, 154.0, 156.0, 158.0, 160.0, 162.0, 164.0, 166.0, 168.0, 170.0, 172.0, 174.0, 176.0, 178.0, 180.0, 185.0, 190.0, 195.0, 200.0, 205.0, 210.0, 215.0, 220.0, - 225.0, 230.0, 240.0, 250.0, 260.0, 270.0, 280.0, 290.0, 300.0, 310.0, 320.0, 330.0, 340.0, 350.0, 360.0, 370.0, 400.0, 450.0, 500.0 - }; + 225.0, 230.0, 240.0, 250.0, 260.0, 270.0, 280.0, 290.0, 300.0, 310.0, 320.0, 330.0, 340.0, 350.0, 360.0, 370.0, 400.0, 450.0, 500.0}; static constexpr std::array DefaultSteamSuperheatedPressData = { - 611.70, 657.10, 872.60, 1228.0, 1706.0, 2339.0, 3170.0, 4247.0, 5629.0, 7385.0, 9595.0, - 12350.0, 15760.0, 19950.0, 25040.0, 31200.0, 34000.0, 37010.0, 40240.0, 43700.0, 47410.0, 51390.0, - 55640.0, 60170.0, 65020.0, 70180.0, 75680.0, 81540.0, 87770.0, 94390.0, 97850.0, 101400.0, 105100.0, - 108900.0, 112800.0, 116800.0, 120900.0, 125100.0, 129500.0, 134000.0, 138600.0, 143400.0, 148300.0, 153300.0, - 158400.0, 163700.0, 169200.0, 174800.0, 180500.0, 186400.0, 192500.0, 198700.0, 205000.0, 211600.0, 218300.0, - 225200.0, 232200.0, 239500.0, 246900.0, 254500.0, 262300.0, 270300.0, 286800.0, 304200.0, 322400.0, 341500.0, - 361500.0, 382500.0, 404400.0, 427300.0, 451200.0, 476200.0, 502200.0, 529500.0, 557800.0, 587400.0, 618200.0, - 650300.0, 683700.0, 718500.0, 754600.0, 792200.0, 831200.0, 871800.0, 913800.0, 957500.0, 1003000.0, 1123000.0, - 1255000.0, 1399000.0, 1555000.0, 1724000.0, 1908000.0, 2106000.0, 2320000.0, 2550000.0, 2797000.0, 3347000.0, 3976000.0, - 4692000.0, 5503000.0, 6417000.0, 7442000.0, 8588000.0, 9865000.0, 11280000.0, 12860000.0, 14600000.0, 16530000.0, 18670000.0, - 21040000.0, 30000000.0, 35000000.0, 40000000.0 - }; - + 611.70, 657.10, 872.60, 1228.0, 1706.0, 2339.0, 3170.0, 4247.0, 5629.0, 7385.0, 9595.0, 12350.0, + 15760.0, 19950.0, 25040.0, 31200.0, 34000.0, 37010.0, 40240.0, 43700.0, 47410.0, 51390.0, 55640.0, 60170.0, + 65020.0, 70180.0, 75680.0, 81540.0, 87770.0, 94390.0, 97850.0, 101400.0, 105100.0, 108900.0, 112800.0, 116800.0, + 120900.0, 125100.0, 129500.0, 134000.0, 138600.0, 143400.0, 148300.0, 153300.0, 158400.0, 163700.0, 169200.0, 174800.0, + 180500.0, 186400.0, 192500.0, 198700.0, 205000.0, 211600.0, 218300.0, 225200.0, 232200.0, 239500.0, 246900.0, 254500.0, + 262300.0, 270300.0, 286800.0, 304200.0, 322400.0, 341500.0, 361500.0, 382500.0, 404400.0, 427300.0, 451200.0, 476200.0, + 502200.0, 529500.0, 557800.0, 587400.0, 618200.0, 650300.0, 683700.0, 718500.0, 754600.0, 792200.0, 831200.0, 871800.0, + 913800.0, 957500.0, 1003000.0, 1123000.0, 1255000.0, 1399000.0, 1555000.0, 1724000.0, 1908000.0, 2106000.0, 2320000.0, 2550000.0, + 2797000.0, 3347000.0, 3976000.0, 4692000.0, 5503000.0, 6417000.0, 7442000.0, 8588000.0, 9865000.0, 11280000.0, 12860000.0, 14600000.0, + 16530000.0, 18670000.0, 21040000.0, 30000000.0, 35000000.0, 40000000.0}; + void GetFluidPropertiesData(EnergyPlusData &state) { @@ -534,15 +518,15 @@ namespace FluidProperties { static constexpr std::string_view routineName = "GetFluidPropertiesData"; // SUBROUTINE LOCAL VARIABLE DECLARATIONS: - Array1D_string Alphas; // Reads string value from input file - Array1D_string cAlphaFields; // field names for alpha fields - Array1D_string cNumericFields; // field names for numeric fields - int NumAlphas; // States which alpha value to read from a "Number" line - Array1D Numbers; // brings in data from IP - Array1D_bool lAlphaFieldBlanks; // logical for blank alpha fields - Array1D_bool lNumericFieldBlanks; // logical for blank numeric fields - int NumNumbers; // States which number value to read from a "Numbers" line - int Status; // Either 1 "object found" or -1 "not found" (also used as temp) + Array1D_string Alphas; // Reads string value from input file + Array1D_string cAlphaFields; // field names for alpha fields + Array1D_string cNumericFields; // field names for numeric fields + int NumAlphas; // States which alpha value to read from a "Number" line + Array1D Numbers; // brings in data from IP + Array1D_bool lAlphaFieldBlanks; // logical for blank alpha fields + Array1D_bool lNumericFieldBlanks; // logical for blank numeric fields + int NumNumbers; // States which number value to read from a "Numbers" line + int Status; // Either 1 "object found" or -1 "not found" (also used as temp) bool ErrorsFound(false); std::string CurrentModuleObject; // for ease in renaming. @@ -558,15 +542,18 @@ namespace FluidProperties { // actual initializer into a function of one argument. auto &df = state.dataFluidProps; - + // This is here because of a unit test in HVACVRF:2358 - for (int i = 1; i <= df->refrigs.isize(); ++i) delete df->refrigs(i); + for (int i = 1; i <= df->refrigs.isize(); ++i) + delete df->refrigs(i); df->refrigs.clear(); - for (int i = 1; i <= df->glycolsRaw.isize(); ++i) delete df->glycolsRaw(i); + for (int i = 1; i <= df->glycolsRaw.isize(); ++i) + delete df->glycolsRaw(i); df->glycolsRaw.clear(); - for (int i = 1; i <= df->glycols.isize(); ++i) delete df->glycols(i); + for (int i = 1; i <= df->glycols.isize(); ++i) + delete df->glycols(i); df->glycols.clear(); - + // For default "glycol" fluids of Water, Ethylene Glycol, and Propylene Glycol // Where are these things initialized? @@ -584,7 +571,6 @@ namespace FluidProperties { // Object Data Array1D FluidTemps; - int MaxAlphas = 0; int MaxNumbers = 0; if (state.dataInputProcessing->inputProcessor->getNumObjectsFound(state, "FluidProperties:Name") > 0) { @@ -644,7 +630,7 @@ namespace FluidProperties { steam->Name = "STEAM"; df->refrigs.push_back(steam); steam->Num = df->refrigs.isize(); - + // Check to see if there is any FluidName input. If not, this is okay as // long as the user only desires to simulate loops with water. More than // one FluidName input is not allowed. @@ -737,7 +723,7 @@ namespace FluidProperties { for (int Loop = 1; Loop <= NumOfFluidTempArrays; ++Loop) { auto &tempArray = FluidTemps(Loop); - + state.dataInputProcessing->inputProcessor->getObjectItem(state, CurrentModuleObject, Loop, @@ -760,8 +746,7 @@ namespace FluidProperties { for (int TempLoop = 2; TempLoop <= tempArray.NumOfTemps; ++TempLoop) { if (tempArray.Temps(TempLoop) <= tempArray.Temps(TempLoop - 1)) { ShowSevereError( - state, - format("{}: {} name={}, lists must have data in ascending order", routineName, CurrentModuleObject, tempArray.Name)); + state, format("{}: {} name={}, lists must have data in ascending order", routineName, CurrentModuleObject, tempArray.Name)); ShowContinueError(state, format("First out of order occurrence at Temperature #({}) {{{:.R3}}} >= Temp({}) {{{:.R3}}}", TempLoop - 1, @@ -775,9 +760,9 @@ namespace FluidProperties { } // For each property, cycle through all the valid input until the proper match is found. - + // ********** SATURATED DATA SECTION ********** - + // Get: ***** Saturation Pressure temperatures and data (fluidgas only) ***** // This section added by S.J.Rees May 2002. CurrentModuleObject = "FluidProperties:Saturated"; @@ -797,7 +782,7 @@ namespace FluidProperties { cNumericFields); ErrorObjectHeader eoh{routineName, CurrentModuleObject, Alphas(1)}; - + auto *refrig = GetRefrig(state, Alphas(1)); if (refrig == nullptr) { ShowSevereItemNotFound(state, eoh, cAlphaFields(1), Alphas(1)); @@ -817,10 +802,10 @@ namespace FluidProperties { ShowSevereItemNotFound(state, eoh, cAlphaFields(4), Alphas(4)); ErrorsFound = true; continue; - } + } auto &tempArray = FluidTemps(tempArrayNum); - + // Make sure the number of points in the two arrays (temps and values) are the same if (NumNumbers != tempArray.NumOfTemps) { ShowSevereError(state, format("{}: {} Name={}", routineName, CurrentModuleObject, refrig->Name)); @@ -828,18 +813,19 @@ namespace FluidProperties { format("Temperature Name={}, Temperature array and fluid saturation pressure array must have the " "same number of points", tempArray.Name)); - ShowContinueError(state, format("Temperature # points={} whereas {} # {} points={}", tempArray.NumOfTemps, refrig->Name, Alphas(2), NumNumbers)); + ShowContinueError( + state, format("Temperature # points={} whereas {} # {} points={}", tempArray.NumOfTemps, refrig->Name, Alphas(2), NumNumbers)); ErrorsFound = true; break; // the TempLoop DO Loop } - + if (Alphas(2) == "PRESSURE" && Alphas(3) == "FLUIDGAS") { refrig->NumPsPoints = tempArray.NumOfTemps; refrig->PsTemps.allocate(refrig->NumPsPoints); refrig->PsValues.allocate(refrig->NumPsPoints); refrig->PsTemps = tempArray.Temps; refrig->PsValues = Numbers({1, NumNumbers}); - + } else if (Alphas(2) == "ENTHALPY" && Alphas(3) == "FLUID") { refrig->NumHPoints = tempArray.NumOfTemps; refrig->HTemps.allocate(refrig->NumHPoints); @@ -859,7 +845,7 @@ namespace FluidProperties { refrig->CpTemps = tempArray.Temps; refrig->CpfValues = Numbers({1, NumNumbers}); - } else if (Alphas(2) == "SPECIFICHEAT" && Alphas(3) == "FLUIDGAS") { + } else if (Alphas(2) == "SPECIFICHEAT" && Alphas(3) == "FLUIDGAS") { refrig->NumCpPoints = tempArray.NumOfTemps; refrig->CpfgValues.allocate(refrig->NumCpPoints); refrig->CpfgValues = Numbers({1, NumNumbers}); @@ -883,7 +869,7 @@ namespace FluidProperties { ShowContinueError(state, format(R"(Valid choices are "Enthalpy", "SpecificHeat", "Density".)")); ShowContinueError(state, "This fluid property will not be processed nor available for the simulation."); } - + } else if (Alphas(3) == "FLUIDGAS") { if (Alphas(2) != "PRESSURE" && Alphas(2) != "ENTHALPY" && Alphas(2) != "SPECIFICHEAT" && Alphas(2) != "DENSITY") { ShowWarningError(state, format("{}: {} Name={}", routineName, CurrentModuleObject, refrig->Name)); @@ -898,21 +884,22 @@ namespace FluidProperties { ShowContinueError(state, "This fluid property will not be processed nor available for the simulation."); } } // for (inData) - for (auto const *refrig : df->refrigs) { ErrorObjectHeader eoh{routineName, CurrentModuleObject, refrig->Name}; if (refrig->PsValues.size() == 0) { - ShowSevereCustomMessage(state, eoh, + ShowSevereCustomMessage(state, + eoh, format(R"(No Gas/Fluid Saturation Pressure found. Need properties with {}="Pressure" and {}="FluidGas".)", cAlphaFields(2), cAlphaFields(3))); ErrorsFound = true; } - if (refrig->HfValues.size() == 0) { - ShowSevereCustomMessage(state, eoh, + if (refrig->HfValues.size() == 0) { + ShowSevereCustomMessage(state, + eoh, format(R"(No Saturated Fluid Enthalpy found. Need properties with {}="Enthalpy" and {}="Fluid".)", cAlphaFields(2), cAlphaFields(3))); @@ -920,15 +907,17 @@ namespace FluidProperties { } if (refrig->HfgValues.size() == 0) { - ShowSevereCustomMessage(state, eoh, - format(R"(No Saturated Gas/Fluid Enthalpy found. Need properties with {}="Enthalpy" and {}="FluidGas".)", - cAlphaFields(2), - cAlphaFields(3))); + ShowSevereCustomMessage(state, + eoh, + format(R"(No Saturated Gas/Fluid Enthalpy found. Need properties with {}="Enthalpy" and {}="FluidGas".)", + cAlphaFields(2), + cAlphaFields(3))); ErrorsFound = true; } if (refrig->CpfValues.size() == 0) { - ShowSevereCustomMessage(state, eoh, + ShowSevereCustomMessage(state, + eoh, format(R"(No Saturated Fluid Specific Heat found. Need properties with {}="SpecificHeat" and {}="Fluid".)", cAlphaFields(2), cAlphaFields(3))); @@ -936,15 +925,18 @@ namespace FluidProperties { } if (refrig->CpfgValues.size() == 0) { - ShowSevereCustomMessage(state, eoh, - format(R"(No Saturated Gas/Fluid Specific Heat found. Need properties with {}="SpecificHeat" and {}="FluidGas".)", - cAlphaFields(2), - cAlphaFields(3))); + ShowSevereCustomMessage( + state, + eoh, + format(R"(No Saturated Gas/Fluid Specific Heat found. Need properties with {}="SpecificHeat" and {}="FluidGas".)", + cAlphaFields(2), + cAlphaFields(3))); ErrorsFound = true; } if (refrig->RhofValues.size() == 0) { - ShowSevereCustomMessage(state, eoh, + ShowSevereCustomMessage(state, + eoh, format(R"(No Saturated Fluid Density found. Need properties with {}="Density" and {}="Fluid".)", cAlphaFields(2), cAlphaFields(3))); @@ -952,14 +944,14 @@ namespace FluidProperties { } if (refrig->RhofgValues.size() == 0) { - ShowSevereCustomMessage(state, eoh, - format(R"(No Saturated Gas/Fluid Density found. Need properties with {}="Density" and {}="FluidGas".)", - cAlphaFields(2), - cAlphaFields(3))); + ShowSevereCustomMessage(state, + eoh, + format(R"(No Saturated Gas/Fluid Density found. Need properties with {}="Density" and {}="FluidGas".)", + cAlphaFields(2), + cAlphaFields(3))); ErrorsFound = true; } } // for (refrigNum) - // Check: TEMPERATURES for saturated density (must all be the same) // IF (RefrigData(Loop)%NumCpPoints /= RefrigData(Loop)%NumCpPoints) THEN @@ -983,12 +975,12 @@ namespace FluidProperties { // ENDIF // END DO // END IF - + // ********** SUPERHEATED DATA SECTION ********** // Get: ***** ENTHALPY of SUPERHEATED GAS ***** // First find the number of pressure value syntax lines have been entered and // make sure that all of the pressure input is linked to the same temperature list - + // Need to do a setup pass to find the number of pressure points CurrentModuleObject = "FluidProperties:Superheated"; for (int InData = 1; InData <= NumOfSHFluidPropArrays; ++InData) { @@ -1004,16 +996,16 @@ namespace FluidProperties { lAlphaFieldBlanks, cAlphaFields, cNumericFields); - + ErrorObjectHeader eoh{routineName, CurrentModuleObject, Alphas(1)}; - + auto *refrig = GetRefrig(state, Alphas(1)); if (refrig == nullptr) { ShowSevereItemNotFound(state, eoh, cAlphaFields(1), Alphas(1)); ErrorsFound = true; continue; } - + if (refrig->supTempArrayName != "" && refrig->supTempArrayName != Alphas(3)) { ShowSevereCustomMessage(state, eoh, "Saturated temperature arrays are not the same for different properties"); ErrorsFound = true; @@ -1021,10 +1013,9 @@ namespace FluidProperties { } refrig->supTempArrayName = Alphas(3); - - if (Alphas(2) != "ENTHALPY") - continue; - + + if (Alphas(2) != "ENTHALPY") continue; + int supTempArrayNum = Util::FindItemInList(refrig->supTempArrayName, FluidTemps); if (supTempArrayNum == 0) { ShowSevereItemNotFound(state, eoh, cAlphaFields(3), Alphas(3)); @@ -1036,14 +1027,14 @@ namespace FluidProperties { refrig->NumSupTempPoints = supTempArray.NumOfTemps; refrig->SupTemps.allocate(refrig->NumSupTempPoints); refrig->SupTemps = supTempArray.Temps; - + if (Numbers(1) <= 0.0) { ShowSevereError(state, format("{}: {} Name={}", routineName, CurrentModuleObject, refrig->Name)); ShowContinueError(state, format("Negative pressures not allowed in fluid property input data, Value =[{:.3R}].", Numbers(1))); ErrorsFound = true; continue; } - + if (std::find(refrig->SupPress.begin(), refrig->SupPress.end(), Numbers(1)) == refrig->SupPress.end()) { refrig->SupPress.push_back(Numbers(1)); ++refrig->NumSupPressPoints; @@ -1055,11 +1046,11 @@ namespace FluidProperties { if (refrig->Name == "STEAM") continue; std::sort(refrig->SupPress.begin(), refrig->SupPress.end()); - + refrig->HshValues.allocate(refrig->NumSupPressPoints, refrig->NumSupTempPoints); refrig->RhoshValues.allocate(refrig->NumSupPressPoints, refrig->NumSupTempPoints); } - + // Finally, get the pressure and enthalpy values from the user input CurrentModuleObject = "FluidProperties:Superheated"; for (int InData = 1; InData <= NumOfSHFluidPropArrays; ++InData) { @@ -1076,54 +1067,59 @@ namespace FluidProperties { cAlphaFields, cNumericFields); - ErrorObjectHeader eoh{routineName, CurrentModuleObject, Alphas(1)}; - + auto *refrig = GetRefrig(state, Alphas(1)); if (refrig == nullptr) { ShowSevereItemNotFound(state, eoh, cAlphaFields(1), Alphas(1)); ErrorsFound = true; continue; } - + if ((NumNumbers - 1) != refrig->NumSupTempPoints) { - ShowSevereCustomMessage(state, eoh, + ShowSevereCustomMessage(state, + eoh, format("Number of superheated {} points ({}) not equal to number of temperature points ({})", - Alphas(2), NumNumbers - 1, refrig->NumSupTempPoints)); + Alphas(2), + NumNumbers - 1, + refrig->NumSupTempPoints)); ErrorsFound = true; continue; } - + // Find which pressure point this temperature series belongs to auto pressFound = std::find(refrig->SupPress.begin(), refrig->SupPress.end(), Numbers(1)); assert(pressFound != refrig->SupPress.end()); int pressNum = (pressFound - refrig->SupPress.begin()) + 1; - if (Alphas(2) == "ENTHALPY") { + if (Alphas(2) == "ENTHALPY") { refrig->HshValues(pressNum, {1, refrig->NumSupTempPoints}) = Numbers({2, NumNumbers}); } else if (Alphas(2) == "DENSITY") { refrig->RhoshValues(pressNum, {1, refrig->NumSupTempPoints}) = Numbers({2, NumNumbers}); } else { - ShowWarningInvalidKey(state, eoh, cAlphaFields(2), Alphas(2), "", + ShowWarningInvalidKey(state, + eoh, + cAlphaFields(2), + Alphas(2), + "", format("Valid options are (\"Enthalpy\", \"Density\"). Fluid will not be available for simulation.")); ErrorsFound = true; continue; } } // for (InData) - // *************** RAW GLYCOLS *************** // Go through each glycol found in the fluid names statement and read in the data // Note that every valid fluid must have ALL of the necessary data or a fatal error will // be produced. // Propylene and ethylene are available by default - + auto *waterRaw = GetGlycolRaw(state, "WATER"); if (waterRaw == nullptr) { waterRaw = new GlycolRawProps; waterRaw->Name = "WATER"; - + df->glycolsRaw.push_back(waterRaw); waterRaw->Num = df->glycolsRaw.isize(); } @@ -1175,66 +1171,66 @@ namespace FluidProperties { df->glycolsRaw.push_back(ethylene); ethylene->Num = df->glycolsRaw.isize(); } - + // Specific Heat - ethylene->CpDataPresent = true; // Flag set when specific heat data is available - ethylene->NumCpTempPoints = DefaultNumGlyTemps; // Number of temperature points for specific heat - ethylene->NumCpConcPoints = DefaultNumGlyConcs; // Number of concentration points for specific heat + ethylene->CpDataPresent = true; // Flag set when specific heat data is available + ethylene->NumCpTempPoints = DefaultNumGlyTemps; // Number of temperature points for specific heat + ethylene->NumCpConcPoints = DefaultNumGlyConcs; // Number of concentration points for specific heat - ethylene->CpTemps.allocate(ethylene->NumCpTempPoints); // Temperatures for specific heat of glycol + ethylene->CpTemps.allocate(ethylene->NumCpTempPoints); // Temperatures for specific heat of glycol ethylene->CpTemps = DefaultGlycolTemps; - - ethylene->CpConcs.allocate(ethylene->NumCpConcPoints); // Concentration for specific heat of glycol + + ethylene->CpConcs.allocate(ethylene->NumCpConcPoints); // Concentration for specific heat of glycol ethylene->CpConcs = DefaultGlycolConcs; - ethylene->CpValues.allocate(ethylene->NumCpConcPoints, ethylene->NumCpTempPoints); // Specific heat data values + ethylene->CpValues.allocate(ethylene->NumCpConcPoints, ethylene->NumCpTempPoints); // Specific heat data values for (int i = 1; i <= ethylene->NumCpConcPoints; ++i) - ethylene->CpValues(i, {1, ethylene->NumCpTempPoints}) = DefaultEthGlyCpData[i-1]; + ethylene->CpValues(i, {1, ethylene->NumCpTempPoints}) = DefaultEthGlyCpData[i - 1]; // Density - ethylene->RhoDataPresent = true; + ethylene->RhoDataPresent = true; ethylene->NumRhoTempPoints = DefaultNumGlyTemps; ethylene->NumRhoConcPoints = DefaultNumGlyConcs; - ethylene->RhoTemps.allocate(ethylene->NumRhoTempPoints); // Temperatures for density of glycol + ethylene->RhoTemps.allocate(ethylene->NumRhoTempPoints); // Temperatures for density of glycol ethylene->RhoTemps = DefaultGlycolTemps; - ethylene->RhoConcs.allocate(ethylene->NumRhoConcPoints); // Concentration for density of glycol + ethylene->RhoConcs.allocate(ethylene->NumRhoConcPoints); // Concentration for density of glycol ethylene->RhoConcs = DefaultGlycolConcs; - - ethylene->RhoValues.allocate(ethylene->NumRhoConcPoints, ethylene->NumRhoTempPoints); // Density data values + + ethylene->RhoValues.allocate(ethylene->NumRhoConcPoints, ethylene->NumRhoTempPoints); // Density data values for (int i = 1; i <= ethylene->NumRhoConcPoints; ++i) - ethylene->RhoValues(i, {1, ethylene->NumRhoTempPoints}) = DefaultEthGlyRhoData[i-1]; + ethylene->RhoValues(i, {1, ethylene->NumRhoTempPoints}) = DefaultEthGlyRhoData[i - 1]; // Conductivity - ethylene->CondDataPresent = true; + ethylene->CondDataPresent = true; ethylene->NumCondTempPoints = DefaultNumGlyTemps; ethylene->NumCondConcPoints = DefaultNumGlyConcs; - ethylene->CondTemps.allocate(ethylene->NumCondTempPoints); // Temperatures for density of glycol + ethylene->CondTemps.allocate(ethylene->NumCondTempPoints); // Temperatures for density of glycol ethylene->CondTemps = DefaultGlycolTemps; - ethylene->CondConcs.allocate(ethylene->NumCondConcPoints); // Concentration for density of glycol + ethylene->CondConcs.allocate(ethylene->NumCondConcPoints); // Concentration for density of glycol ethylene->CondConcs = DefaultGlycolConcs; - - ethylene->CondValues.allocate(ethylene->NumCondConcPoints, ethylene->NumCondTempPoints); // Density data values + + ethylene->CondValues.allocate(ethylene->NumCondConcPoints, ethylene->NumCondTempPoints); // Density data values for (int i = 1; i <= ethylene->NumCondConcPoints; ++i) - ethylene->CondValues(i, {1, ethylene->NumCondTempPoints}) = DefaultEthGlyCondData[i-1]; + ethylene->CondValues(i, {1, ethylene->NumCondTempPoints}) = DefaultEthGlyCondData[i - 1]; // Viscosity - ethylene->ViscDataPresent = true; + ethylene->ViscDataPresent = true; ethylene->NumViscTempPoints = DefaultNumGlyTemps; ethylene->NumViscConcPoints = DefaultNumGlyConcs; - ethylene->ViscTemps.allocate(ethylene->NumViscTempPoints); // Temperatures for density of glycol + ethylene->ViscTemps.allocate(ethylene->NumViscTempPoints); // Temperatures for density of glycol ethylene->ViscTemps = DefaultGlycolTemps; - ethylene->ViscConcs.allocate(ethylene->NumViscConcPoints); // Concentration for density of glycol + ethylene->ViscConcs.allocate(ethylene->NumViscConcPoints); // Concentration for density of glycol ethylene->ViscConcs = DefaultGlycolConcs; - - ethylene->ViscValues.allocate(ethylene->NumViscConcPoints, ethylene->NumViscTempPoints); // Density data values + + ethylene->ViscValues.allocate(ethylene->NumViscConcPoints, ethylene->NumViscTempPoints); // Density data values for (int i = 1; i <= ethylene->NumViscConcPoints; ++i) - ethylene->ViscValues(i, {1, ethylene->NumViscTempPoints}) = DefaultEthGlyViscData[i-1]; + ethylene->ViscValues(i, {1, ethylene->NumViscTempPoints}) = DefaultEthGlyViscData[i - 1]; // Propylene auto *propylene = GetGlycolRaw(state, "PROPYLENEGLYCOL"); @@ -1244,69 +1240,68 @@ namespace FluidProperties { df->glycolsRaw.push_back(propylene); propylene->Num = df->glycolsRaw.isize(); } - + // Specific Heat - propylene->CpDataPresent = true; // Flag set when specific heat data is available - propylene->NumCpTempPoints = DefaultNumGlyTemps; // Number of temperature points for specific heat - propylene->NumCpConcPoints = DefaultNumGlyConcs; // Number of concentration points for specific heat + propylene->CpDataPresent = true; // Flag set when specific heat data is available + propylene->NumCpTempPoints = DefaultNumGlyTemps; // Number of temperature points for specific heat + propylene->NumCpConcPoints = DefaultNumGlyConcs; // Number of concentration points for specific heat // No ObjexxFCL templates for assigning std::array to Array1S, Probably want to covert these Array1D and 2D to std::vector eventually anyway - propylene->CpTemps.allocate(propylene->NumCpTempPoints); // Temperatures for specific heat of glycol + propylene->CpTemps.allocate(propylene->NumCpTempPoints); // Temperatures for specific heat of glycol propylene->CpTemps = DefaultGlycolTemps; - - propylene->CpConcs.allocate(propylene->NumCpConcPoints); // Concentration for specific heat of glycol + + propylene->CpConcs.allocate(propylene->NumCpConcPoints); // Concentration for specific heat of glycol propylene->CpConcs = DefaultGlycolConcs; - propylene->CpValues.allocate(propylene->NumCpConcPoints, propylene->NumCpTempPoints); // Specific heat data values + propylene->CpValues.allocate(propylene->NumCpConcPoints, propylene->NumCpTempPoints); // Specific heat data values for (int i = 1; i <= propylene->NumCpConcPoints; ++i) - propylene->CpValues(i, {1, propylene->NumCpTempPoints}) = DefaultPropGlyCpData[i-1]; + propylene->CpValues(i, {1, propylene->NumCpTempPoints}) = DefaultPropGlyCpData[i - 1]; // Density - propylene->RhoDataPresent = true; + propylene->RhoDataPresent = true; propylene->NumRhoTempPoints = DefaultNumGlyTemps; propylene->NumRhoConcPoints = DefaultNumGlyConcs; - propylene->RhoTemps.allocate(propylene->NumRhoTempPoints); // Temperatures for density of glycol + propylene->RhoTemps.allocate(propylene->NumRhoTempPoints); // Temperatures for density of glycol propylene->RhoTemps = DefaultGlycolTemps; - propylene->RhoConcs.allocate(propylene->NumRhoConcPoints); // Concentration for density of glycol + propylene->RhoConcs.allocate(propylene->NumRhoConcPoints); // Concentration for density of glycol propylene->RhoConcs = DefaultGlycolConcs; - - propylene->RhoValues.allocate(propylene->NumRhoConcPoints, propylene->NumRhoTempPoints); // Density data values + + propylene->RhoValues.allocate(propylene->NumRhoConcPoints, propylene->NumRhoTempPoints); // Density data values for (int i = 1; i <= propylene->NumRhoConcPoints; ++i) - propylene->RhoValues(i, {1, propylene->NumRhoTempPoints}) = DefaultPropGlyRhoData[i-1]; + propylene->RhoValues(i, {1, propylene->NumRhoTempPoints}) = DefaultPropGlyRhoData[i - 1]; // Conductivity - propylene->CondDataPresent = true; + propylene->CondDataPresent = true; propylene->NumCondTempPoints = DefaultNumGlyTemps; propylene->NumCondConcPoints = DefaultNumGlyConcs; - propylene->CondTemps.allocate(propylene->NumCondTempPoints); // Temperatures for density of glycol + propylene->CondTemps.allocate(propylene->NumCondTempPoints); // Temperatures for density of glycol propylene->CondTemps = DefaultGlycolTemps; - propylene->CondConcs.allocate(propylene->NumCondConcPoints); // Concentration for density of glycol + propylene->CondConcs.allocate(propylene->NumCondConcPoints); // Concentration for density of glycol propylene->CondConcs = DefaultGlycolConcs; - - propylene->CondValues.allocate(propylene->NumCondConcPoints, propylene->NumCondTempPoints); // Density data values + + propylene->CondValues.allocate(propylene->NumCondConcPoints, propylene->NumCondTempPoints); // Density data values for (int i = 1; i <= propylene->NumCondConcPoints; ++i) - propylene->CondValues(i, {1, propylene->NumCondTempPoints}) = DefaultPropGlyCondData[i-1]; + propylene->CondValues(i, {1, propylene->NumCondTempPoints}) = DefaultPropGlyCondData[i - 1]; // Viscosity - propylene->ViscDataPresent = true; + propylene->ViscDataPresent = true; propylene->NumViscTempPoints = DefaultNumGlyTemps; propylene->NumViscConcPoints = DefaultNumGlyConcs; - propylene->ViscTemps.allocate(propylene->NumViscTempPoints); // Temperatures for density of glycol + propylene->ViscTemps.allocate(propylene->NumViscTempPoints); // Temperatures for density of glycol propylene->ViscTemps = DefaultGlycolTemps; - propylene->ViscConcs.allocate(propylene->NumViscConcPoints); // Concentration for density of glycol + propylene->ViscConcs.allocate(propylene->NumViscConcPoints); // Concentration for density of glycol propylene->ViscConcs = DefaultGlycolConcs; - - propylene->ViscValues.allocate(propylene->NumViscConcPoints, propylene->NumViscTempPoints); // Density data values + + propylene->ViscValues.allocate(propylene->NumViscConcPoints, propylene->NumViscTempPoints); // Density data values for (int i = 1; i <= propylene->NumViscConcPoints; ++i) - propylene->ViscValues(i, {1, propylene->NumViscTempPoints}) = DefaultPropGlyViscData[i-1]; + propylene->ViscValues(i, {1, propylene->NumViscTempPoints}) = DefaultPropGlyViscData[i - 1]; - CurrentModuleObject = "FluidProperties:Concentration"; for (int InData = 1; InData <= NumOfGlyFluidPropArrays; ++InData) { // check temperatures given for specific heat are consistant state.dataInputProcessing->inputProcessor->getObjectItem(state, @@ -1323,7 +1318,7 @@ namespace FluidProperties { cNumericFields); if (Alphas(1) == "WATER") continue; // Is this the right thing to do? - + ErrorObjectHeader eoh{routineName, CurrentModuleObject, Alphas(1)}; auto *glycolRaw = GetGlycolRaw(state, Alphas(1)); @@ -1338,19 +1333,22 @@ namespace FluidProperties { ErrorsFound = true; continue; } - + if (Numbers(1) < 0.0) { ShowSevereCustomMessage(state, eoh, "Negative concentrations not allowed in fluid property input data"); ErrorsFound = true; continue; } - + // Can temperatue and pressure points be different for different properties? Why is this allowed? if (Alphas(2) == "SPECIFICHEAT") { if (glycolRaw->CpTempArrayName != "" && glycolRaw->CpTempArrayName != Alphas(3)) { - ShowSevereCustomMessage(state, eoh, + ShowSevereCustomMessage(state, + eoh, format("All specific heat data for the same glycol must use the same temperature list" - "Expected name={}, Entered name={}", glycolRaw->CpTempArrayName, Alphas(3))); + "Expected name={}, Entered name={}", + glycolRaw->CpTempArrayName, + Alphas(3))); ErrorsFound = true; continue; } @@ -1364,14 +1362,17 @@ namespace FluidProperties { } else if (Alphas(2) == "DENSITY") { if (glycolRaw->RhoTempArrayName != "" && glycolRaw->RhoTempArrayName != Alphas(3)) { - ShowSevereCustomMessage(state, eoh, + ShowSevereCustomMessage(state, + eoh, format("All density data for the same glycol must use the same temperature list" - "Expected name={}, Entered name={}", glycolRaw->RhoTempArrayName, Alphas(3))); + "Expected name={}, Entered name={}", + glycolRaw->RhoTempArrayName, + Alphas(3))); ErrorsFound = true; continue; } glycolRaw->RhoTempArrayName = Alphas(3); - + if (std::find(glycolRaw->RhoConcs.begin(), glycolRaw->RhoConcs.end(), Numbers(1)) == glycolRaw->RhoConcs.end()) { glycolRaw->RhoConcs.push_back(Numbers(1)); ++glycolRaw->NumRhoConcPoints; @@ -1380,14 +1381,17 @@ namespace FluidProperties { } else if (Alphas(2) == "CONDUCTIVITY") { if (glycolRaw->CondTempArrayName != "" && glycolRaw->CondTempArrayName != Alphas(3)) { - ShowSevereCustomMessage(state, eoh, + ShowSevereCustomMessage(state, + eoh, format("All conductivity data for the same glycol must use the same temperature list" - "Expected name={}, Entered name={}", glycolRaw->CondTempArrayName, Alphas(3))); + "Expected name={}, Entered name={}", + glycolRaw->CondTempArrayName, + Alphas(3))); ErrorsFound = true; continue; } glycolRaw->CondTempArrayName = Alphas(3); - + if (std::find(glycolRaw->CondConcs.begin(), glycolRaw->CondConcs.end(), Numbers(1)) == glycolRaw->CondConcs.end()) { glycolRaw->CondConcs.push_back(Numbers(1)); ++glycolRaw->NumCondConcPoints; @@ -1396,14 +1400,17 @@ namespace FluidProperties { } else if (Alphas(2) == "VISCOSITY") { if (glycolRaw->ViscTempArrayName != "" && glycolRaw->ViscTempArrayName != Alphas(3)) { - ShowSevereCustomMessage(state, eoh, + ShowSevereCustomMessage(state, + eoh, format("All conductivity data for the same glycol must use the same temperature list" - "Expected name={}, Entered name={}", glycolRaw->ViscTempArrayName, Alphas(3))); + "Expected name={}, Entered name={}", + glycolRaw->ViscTempArrayName, + Alphas(3))); ErrorsFound = true; continue; } glycolRaw->ViscTempArrayName = Alphas(3); - + if (std::find(glycolRaw->ViscConcs.begin(), glycolRaw->ViscConcs.end(), Numbers(1)) == glycolRaw->ViscConcs.end()) { glycolRaw->ViscConcs.push_back(Numbers(1)); ++glycolRaw->NumViscConcPoints; @@ -1411,8 +1418,8 @@ namespace FluidProperties { glycolRaw->ViscDataPresent = true; } else { - ShowSevereInvalidKey(state, eoh, cAlphaFields(2), Alphas(2), - "Valid options are (\"Specific Heat\", \"Density\", \"Conductivity\", \"Viscosity\")"); + ShowSevereInvalidKey( + state, eoh, cAlphaFields(2), Alphas(2), "Valid options are (\"Specific Heat\", \"Density\", \"Conductivity\", \"Viscosity\")"); ErrorsFound = true; } } @@ -1426,18 +1433,18 @@ namespace FluidProperties { glycolRaw->NumCpTempPoints = cpTempArray.NumOfTemps; glycolRaw->CpTemps.allocate(glycolRaw->NumCpTempPoints); glycolRaw->CpTemps = cpTempArray.Temps; - + glycolRaw->CpValues.allocate(glycolRaw->NumCpConcPoints, glycolRaw->NumCpTempPoints); std::sort(glycolRaw->CpConcs.begin(), glycolRaw->CpConcs.end()); } - + if (!glycolRaw->RhoTempArrayName.empty()) { int rhoTempArrayNum = Util::FindItemInList(glycolRaw->RhoTempArrayName, FluidTemps); auto &rhoTempArray = FluidTemps(rhoTempArrayNum); glycolRaw->NumRhoTempPoints = rhoTempArray.NumOfTemps; glycolRaw->RhoTemps.allocate(glycolRaw->NumRhoTempPoints); glycolRaw->RhoTemps = rhoTempArray.Temps; - + glycolRaw->RhoValues.allocate(glycolRaw->NumRhoConcPoints, glycolRaw->NumRhoTempPoints); std::sort(glycolRaw->RhoConcs.begin(), glycolRaw->RhoConcs.end()); } @@ -1448,7 +1455,7 @@ namespace FluidProperties { glycolRaw->NumCondTempPoints = condTempArray.NumOfTemps; glycolRaw->CondTemps.allocate(glycolRaw->NumCondTempPoints); glycolRaw->CondTemps = condTempArray.Temps; - + glycolRaw->CondValues.allocate(glycolRaw->NumCondConcPoints, glycolRaw->NumCondTempPoints); std::sort(glycolRaw->CondConcs.begin(), glycolRaw->CondConcs.end()); } @@ -1459,12 +1466,12 @@ namespace FluidProperties { glycolRaw->NumViscTempPoints = viscTempArray.NumOfTemps; glycolRaw->ViscTemps.allocate(glycolRaw->NumViscTempPoints); glycolRaw->ViscTemps = viscTempArray.Temps; - + glycolRaw->ViscValues.allocate(glycolRaw->NumViscConcPoints, glycolRaw->NumViscTempPoints); std::sort(glycolRaw->ViscConcs.begin(), glycolRaw->ViscConcs.end()); } } - + // Finally, get the specific heat and concentration values from the user input CurrentModuleObject = "FluidProperties:Concentration"; for (int InData = 1; InData <= NumOfGlyFluidPropArrays; ++InData) { @@ -1482,16 +1489,18 @@ namespace FluidProperties { cNumericFields); if (Alphas(1) == "WATER") continue; // Is this the right thing to do? - + ErrorObjectHeader eoh{routineName, CurrentModuleObject, Alphas(1)}; auto *glycolRaw = GetGlycolRaw(state, Alphas(1)); assert(glycolRaw != nullptr); // We've already tested for this, can just assert now if (Alphas(2) == "SPECIFICHEAT") { if ((NumNumbers - 1) != glycolRaw->NumCpTempPoints) { - ShowSevereCustomMessage(state, eoh, + ShowSevereCustomMessage(state, + eoh, format("Number of specific heat points ({}) not equal to number of temperature points ({})", - NumNumbers - 1, glycolRaw->NumCpTempPoints)); + NumNumbers - 1, + glycolRaw->NumCpTempPoints)); ErrorsFound = true; continue; } @@ -1500,11 +1509,13 @@ namespace FluidProperties { int concNum = (concFound - glycolRaw->CpConcs.begin()) + 1; glycolRaw->CpValues(concNum, {1, glycolRaw->NumCpTempPoints}) = Numbers({2, NumNumbers}); - } else if (Alphas(2) == "DENSITY") { + } else if (Alphas(2) == "DENSITY") { if ((NumNumbers - 1) != glycolRaw->NumRhoTempPoints) { - ShowSevereCustomMessage(state, eoh, + ShowSevereCustomMessage(state, + eoh, format("Number of density points ({}) not equal to number of temperature points ({})", - NumNumbers - 1, glycolRaw->NumRhoTempPoints)); + NumNumbers - 1, + glycolRaw->NumRhoTempPoints)); ErrorsFound = true; continue; } @@ -1513,11 +1524,13 @@ namespace FluidProperties { int concNum = (concFound - glycolRaw->RhoConcs.begin()) + 1; glycolRaw->RhoValues(concNum, {1, glycolRaw->NumRhoTempPoints}) = Numbers({2, NumNumbers}); - } else if (Alphas(2) == "CONDUCTIVITY") { + } else if (Alphas(2) == "CONDUCTIVITY") { if ((NumNumbers - 1) != glycolRaw->NumCondTempPoints) { - ShowSevereCustomMessage(state, eoh, + ShowSevereCustomMessage(state, + eoh, format("Number of conductivity points ({}) not equal to number of temperature points ({})", - NumNumbers - 1, glycolRaw->NumCondTempPoints)); + NumNumbers - 1, + glycolRaw->NumCondTempPoints)); ErrorsFound = true; continue; } @@ -1525,12 +1538,14 @@ namespace FluidProperties { assert(concFound != glycolRaw->CondConcs.end()); int concNum = (concFound - glycolRaw->CondConcs.begin()) + 1; glycolRaw->CondValues(concNum, {1, glycolRaw->NumCondTempPoints}) = Numbers({2, NumNumbers}); - - } else if (Alphas(2) == "VISCOSITY") { + + } else if (Alphas(2) == "VISCOSITY") { if ((NumNumbers - 1) != glycolRaw->NumViscTempPoints) { - ShowSevereCustomMessage(state, eoh, + ShowSevereCustomMessage(state, + eoh, format("Number of viscosity points ({}) not equal to number of temperature points ({})", - NumNumbers - 1, glycolRaw->NumViscTempPoints)); + NumNumbers - 1, + glycolRaw->NumViscTempPoints)); ErrorsFound = true; continue; } @@ -1578,7 +1593,7 @@ namespace FluidProperties { water->Name = "WATER"; water->GlycolName = "WATER"; water->used = true; // mark Water as always used - + df->glycols.push_back(water); water->Num = df->glycols.isize(); } @@ -1608,21 +1623,21 @@ namespace FluidProperties { water->ViscTemps = DefaultGlycolTemps; water->ViscValues = DefaultWaterViscData; -#ifdef PERFORMANCE_OPT +#ifdef PERFORMANCE_OPT // This is a speed optimization. Maybe. water->CpTempRatios.allocate(water->NumCpTempPoints); for (int i = 1; i < water->NumCpTempPoints; ++i) - water->CpTempRatios(i) = (water->CpValues(i+1) - water->CpValues(i)) / (water->CpTemps(i+1) - water->CpTemps(i)); + water->CpTempRatios(i) = (water->CpValues(i + 1) - water->CpValues(i)) / (water->CpTemps(i + 1) - water->CpTemps(i)); water->RhoTempRatios.allocate(water->NumRhoTempPoints); for (int i = 1; i < water->NumRhoTempPoints; ++i) - water->RhoTempRatios(i) = (water->RhoValues(i+1) - water->RhoValues(i)) / (water->RhoTemps(i+1) - water->RhoTemps(i)); + water->RhoTempRatios(i) = (water->RhoValues(i + 1) - water->RhoValues(i)) / (water->RhoTemps(i + 1) - water->RhoTemps(i)); water->CondTempRatios.allocate(water->NumCondTempPoints); for (int i = 1; i < water->NumCondTempPoints; ++i) - water->CondTempRatios(i) = (water->CondValues(i+1) - water->CondValues(i)) / (water->CondTemps(i+1) - water->CondTemps(i)); + water->CondTempRatios(i) = (water->CondValues(i + 1) - water->CondValues(i)) / (water->CondTemps(i + 1) - water->CondTemps(i)); water->ViscTempRatios.allocate(water->NumViscTempPoints); for (int i = 1; i < water->NumCondTempPoints; ++i) - water->ViscTempRatios(i) = (water->ViscValues(i+1) - water->ViscValues(i)) / (water->ViscTemps(i+1) - water->ViscTemps(i)); -#endif // PERFORMANCE_OPT + water->ViscTempRatios(i) = (water->ViscValues(i + 1) - water->ViscValues(i)) / (water->ViscTemps(i + 1) - water->ViscTemps(i)); +#endif // PERFORMANCE_OPT for (int Loop = 1; Loop <= NumOfOptionalInput; ++Loop) { state.dataInputProcessing->inputProcessor->getObjectItem(state, @@ -1649,7 +1664,7 @@ namespace FluidProperties { } GlycolRawProps *glycolRaw = nullptr; - + if (Alphas(2) == "ETHYLENEGLYCOL" || Alphas(2) == "PROPYLENEGLYCOL") { glycol->GlycolName = Alphas(2); glycolRaw = GetGlycolRaw(state, Alphas(2)); @@ -1680,13 +1695,18 @@ namespace FluidProperties { ErrorsFound = true; continue; } - + glycol->NumCpTempPoints = glycolRaw->NumCpTempPoints; glycol->CpTemps.allocate(glycol->NumCpTempPoints); glycol->CpTemps({1, glycol->NumCpTempPoints}) = glycolRaw->CpTemps({1, glycolRaw->NumCpTempPoints}); glycol->CpValues.allocate(glycol->NumCpTempPoints); - InterpValuesForGlycolConc(state, glycolRaw->NumCpConcPoints, glycolRaw->NumCpTempPoints, glycolRaw->CpConcs, glycolRaw->CpValues, - glycol->Concentration, glycol->CpValues); + InterpValuesForGlycolConc(state, + glycolRaw->NumCpConcPoints, + glycolRaw->NumCpTempPoints, + glycolRaw->CpConcs, + glycolRaw->CpValues, + glycol->Concentration, + glycol->CpValues); glycol->RhoDataPresent = glycolRaw->RhoDataPresent; if (!glycol->RhoDataPresent) { @@ -1697,13 +1717,18 @@ namespace FluidProperties { ErrorsFound = true; continue; } - + glycol->NumRhoTempPoints = glycolRaw->NumRhoTempPoints; glycol->RhoTemps.allocate(glycol->NumRhoTempPoints); glycol->RhoTemps({1, glycol->NumRhoTempPoints}) = glycolRaw->RhoTemps({1, glycolRaw->NumRhoTempPoints}); glycol->RhoValues.allocate(glycol->NumRhoTempPoints); - InterpValuesForGlycolConc(state, glycolRaw->NumRhoConcPoints, glycolRaw->NumRhoTempPoints, glycolRaw->RhoConcs, glycolRaw->RhoValues, - glycol->Concentration, glycol->RhoValues); + InterpValuesForGlycolConc(state, + glycolRaw->NumRhoConcPoints, + glycolRaw->NumRhoTempPoints, + glycolRaw->RhoConcs, + glycolRaw->RhoValues, + glycol->Concentration, + glycol->RhoValues); glycol->CondDataPresent = glycolRaw->CondDataPresent; if (!glycol->CondDataPresent) { @@ -1714,13 +1739,18 @@ namespace FluidProperties { ErrorsFound = true; continue; } - + glycol->NumCondTempPoints = glycolRaw->NumCondTempPoints; glycol->CondTemps.allocate(glycol->NumCondTempPoints); glycol->CondTemps({1, glycol->NumCondTempPoints}) = glycolRaw->CondTemps({1, glycolRaw->NumCondTempPoints}); glycol->CondValues.allocate(glycol->NumCondTempPoints); - InterpValuesForGlycolConc(state, glycolRaw->NumCondConcPoints, glycolRaw->NumCondTempPoints, glycolRaw->CondConcs, glycolRaw->CondValues, - glycol->Concentration, glycol->CondValues); + InterpValuesForGlycolConc(state, + glycolRaw->NumCondConcPoints, + glycolRaw->NumCondTempPoints, + glycolRaw->CondConcs, + glycolRaw->CondValues, + glycol->Concentration, + glycol->CondValues); glycol->ViscDataPresent = glycolRaw->ViscDataPresent; if (!glycol->ViscDataPresent) { @@ -1731,31 +1761,36 @@ namespace FluidProperties { ErrorsFound = true; continue; } - + glycol->NumViscTempPoints = glycolRaw->NumViscTempPoints; glycol->ViscTemps.allocate(glycol->NumViscTempPoints); glycol->ViscTemps({1, glycol->NumViscTempPoints}) = glycolRaw->ViscTemps({1, glycolRaw->NumViscTempPoints}); glycol->ViscValues.allocate(glycol->NumViscTempPoints); - InterpValuesForGlycolConc(state, glycolRaw->NumViscConcPoints, glycolRaw->NumViscTempPoints, glycolRaw->ViscConcs, glycolRaw->ViscValues, - glycol->Concentration, glycol->ViscValues); + InterpValuesForGlycolConc(state, + glycolRaw->NumViscConcPoints, + glycolRaw->NumViscTempPoints, + glycolRaw->ViscConcs, + glycolRaw->ViscValues, + glycol->Concentration, + glycol->ViscValues); -#ifdef PERFORMANCE_OPT +#ifdef PERFORMANCE_OPT // This is a speed optimization. Maybe. glycol->CpTempRatios.allocate(glycol->NumCpTempPoints); for (int i = 1; i < glycol->NumCpTempPoints; ++i) - glycol->CpTempRatios(i) = (glycol->CpValues(i+1) - glycol->CpValues(i)) / (glycol->CpTemps(i+1) - glycol->CpTemps(i)); + glycol->CpTempRatios(i) = (glycol->CpValues(i + 1) - glycol->CpValues(i)) / (glycol->CpTemps(i + 1) - glycol->CpTemps(i)); glycol->RhoTempRatios.allocate(glycol->NumRhoTempPoints); for (int i = 1; i < glycol->NumRhoTempPoints; ++i) - glycol->RhoTempRatios(i) = (glycol->RhoValues(i+1) - glycol->RhoValues(i)) / (glycol->RhoTemps(i+1) - glycol->RhoTemps(i)); + glycol->RhoTempRatios(i) = (glycol->RhoValues(i + 1) - glycol->RhoValues(i)) / (glycol->RhoTemps(i + 1) - glycol->RhoTemps(i)); glycol->CondTempRatios.allocate(glycol->NumCondTempPoints); for (int i = 1; i < glycol->NumCondTempPoints; ++i) - glycol->CondTempRatios(i) = (glycol->CondValues(i+1) - glycol->CondValues(i)) / (glycol->CondTemps(i+1) - glycol->CondTemps(i)); + glycol->CondTempRatios(i) = (glycol->CondValues(i + 1) - glycol->CondValues(i)) / (glycol->CondTemps(i + 1) - glycol->CondTemps(i)); glycol->ViscTempRatios.allocate(glycol->NumViscTempPoints); for (int i = 1; i < glycol->NumCondTempPoints; ++i) - glycol->ViscTempRatios(i) = (glycol->ViscValues(i+1) - glycol->ViscValues(i)) / (glycol->ViscTemps(i+1) - glycol->ViscTemps(i)); -#endif // PERFORMANCE_OPT + glycol->ViscTempRatios(i) = (glycol->ViscValues(i + 1) - glycol->ViscValues(i)) / (glycol->ViscTemps(i + 1) - glycol->ViscTemps(i)); +#endif // PERFORMANCE_OPT } // for (Loop) - + if (!ErrorsFound) InitializeGlycolTempLimits(state, ErrorsFound); // Initialize the Temp limits for the glycols if (!ErrorsFound) InitializeRefrigerantLimits(state, ErrorsFound); // Initialize the limits for the refrigerants @@ -1774,12 +1809,9 @@ namespace FluidProperties { } if (state.dataInputProcessing->inputProcessor->getNumSectionsFound("REPORTGLYCOLS") > 0) df->DebugReportGlycols = true; - if (state.dataInputProcessing->inputProcessor->getNumSectionsFound("REPORTREFRIGERANTS") > 0) - df->DebugReportRefrigerants = true; - if (state.dataInputProcessing->inputProcessor->getNumSectionsFound("INCREASEGLYCOLERRORLIMIT") > 0) - df->GlycolErrorLimitTest += 10; - if (state.dataInputProcessing->inputProcessor->getNumSectionsFound("INCREASEREFRIGERANTERRORLIMIT") > 0) - df->RefrigErrorLimitTest += 10; + if (state.dataInputProcessing->inputProcessor->getNumSectionsFound("REPORTREFRIGERANTS") > 0) df->DebugReportRefrigerants = true; + if (state.dataInputProcessing->inputProcessor->getNumSectionsFound("INCREASEGLYCOLERRORLIMIT") > 0) df->GlycolErrorLimitTest += 10; + if (state.dataInputProcessing->inputProcessor->getNumSectionsFound("INCREASEREFRIGERANTERRORLIMIT") > 0) df->RefrigErrorLimitTest += 10; if (df->DebugReportGlycols) ReportAndTestGlycols(state); if (df->DebugReportRefrigerants) ReportAndTestRefrigerants(state); @@ -1872,7 +1904,8 @@ namespace FluidProperties { } } } else { // user has input data for concentrations that are too close or repeated, this must be fixed - ShowFatalError(state, format("{}: concentration values too close or data repeated, check your fluid property input data", routineName)); + ShowFatalError(state, + format("{}: concentration values too close or data repeated, check your fluid property input data", routineName)); } } } @@ -1892,7 +1925,7 @@ namespace FluidProperties { // be set up for symmetry and not be limited to just valid values. auto &df = state.dataFluidProps; - + for (auto *glycol : df->glycols) { if (glycol->CpDataPresent) { // check for lowest non-zero value by referencing temp data @@ -1973,8 +2006,8 @@ namespace FluidProperties { Failure = glycol->ViscLowTempIndex == 0 || glycol->ViscHighTempIndex == 0; } if (Failure) { - ShowSevereError(state, - format("InitializeGlycolTempLimits: Required values for Glycol={} are all zeroes for some data types.", glycol->Name)); + ShowSevereError( + state, format("InitializeGlycolTempLimits: Required values for Glycol={} are all zeroes for some data types.", glycol->Name)); ErrorsFound = true; } } @@ -2091,15 +2124,16 @@ namespace FluidProperties { Failure = refrig->PsLowPresIndex == 0 || refrig->PsLowTempIndex == 0 || refrig->PsHighPresIndex == 0 || refrig->PsHighTempIndex == 0; } if (refrig->NumHPoints > 0) { - Failure = refrig->HfLowTempIndex == 0 || refrig->HfgLowTempIndex == 0 || refrig->HfHighTempIndex == 0 || refrig->HfgHighTempIndex == 0; + Failure = + refrig->HfLowTempIndex == 0 || refrig->HfgLowTempIndex == 0 || refrig->HfHighTempIndex == 0 || refrig->HfgHighTempIndex == 0; } if (refrig->NumCpPoints > 0) { Failure = refrig->CpfLowTempIndex == 0 || refrig->CpfgLowTempIndex == 0 || refrig->CpfHighTempIndex == 0 || refrig->CpfgHighTempIndex == 0; } if (refrig->NumRhoPoints > 0) { - Failure = - refrig->RhofLowTempIndex == 0 || refrig->RhofgLowTempIndex == 0 || refrig->RhofHighTempIndex == 0 || refrig->RhofgHighTempIndex == 0; + Failure = refrig->RhofLowTempIndex == 0 || refrig->RhofgLowTempIndex == 0 || refrig->RhofHighTempIndex == 0 || + refrig->RhofgHighTempIndex == 0; } if (Failure) { ShowSevereError( @@ -2378,7 +2412,7 @@ namespace FluidProperties { Real64 ReturnValue; // Values returned from refrigerant functions auto &df = state.dataFluidProps; - + for (auto *refrig : df->refrigs) { // Lay out the basic values: if (!refrig->Name.empty()) { @@ -2507,7 +2541,8 @@ namespace FluidProperties { } if (refrig->NumSupTempPoints > 0 && refrig->NumSupPressPoints > 0) { - print(state.files.debug, "Superheated Gas Fluid Data points:,NumTemperaturePoints=,{},NumPressurePoints=,{}\n", + print(state.files.debug, + "Superheated Gas Fluid Data points:,NumTemperaturePoints=,{},NumPressurePoints=,{}\n", refrig->NumSupTempPoints, refrig->NumSupPressPoints); print(state.files.debug, "Superheated Temperatures:"); @@ -2688,8 +2723,8 @@ namespace FluidProperties { //***************************************************************************** Real64 RefrigProps::getSatPressure(EnergyPlusData &state, - Real64 const Temperature, // actual temperature given as input - std::string_view const CalledFrom // routine this function was called from (error messages) + Real64 const Temperature, // actual temperature given as input + std::string_view const CalledFrom // routine this function was called from (error messages) ) { @@ -2713,7 +2748,7 @@ namespace FluidProperties { int LoTempIndex = FindArrayIndex(Temperature, this->PsTemps, this->PsLowTempIndex, this->PsHighTempIndex); auto &df = state.dataFluidProps; - + // check for out of data bounds problems if (LoTempIndex == 0) { ReturnValue = this->PsValues(this->PsLowTempIndex); @@ -2723,20 +2758,18 @@ namespace FluidProperties { ErrorFlag = true; } else { // find interpolation ratio w.r.t temperature - Real64 TempInterpRatio = (Temperature - this->PsTemps(LoTempIndex)) / (this->PsTemps(LoTempIndex+1) - this->PsTemps(LoTempIndex)); + Real64 TempInterpRatio = (Temperature - this->PsTemps(LoTempIndex)) / (this->PsTemps(LoTempIndex + 1) - this->PsTemps(LoTempIndex)); // apply final linear interpolation - ReturnValue = this->PsValues(LoTempIndex) + TempInterpRatio * (this->PsValues(LoTempIndex+1) - this->PsValues(LoTempIndex)); + ReturnValue = this->PsValues(LoTempIndex) + TempInterpRatio * (this->PsValues(LoTempIndex + 1) - this->PsValues(LoTempIndex)); } if (!state.dataGlobal->WarmupFlag && ErrorFlag) { ++this->errors[(int)RefrigError::SatTemp].count; // send warning if (this->errors[(int)RefrigError::SatTemp].count <= df->RefrigErrorLimitTest) { - ShowSevereMessage(state, - format("{}: Saturation temperature is out of range for refrigerant [{}] supplied data: **", - routineName, - this->Name)); + ShowSevereMessage( + state, format("{}: Saturation temperature is out of range for refrigerant [{}] supplied data: **", routineName, this->Name)); ShowContinueError(state, format("...Called From:{}, supplied data range=[{:.2R},{:.2R}]", CalledFrom, @@ -2746,12 +2779,12 @@ namespace FluidProperties { state, format("...Supplied Refrigerant Temperature={:.2R} Returned saturated pressure value = {:.0R}", Temperature, ReturnValue)); ShowContinueErrorTimeStamp(state, ""); } - ShowRecurringSevereErrorAtEnd(state, - format("{}: Saturation temperature is out of range for refrigerant [{}] supplied data: **", - routineName, this->Name), - this->errors[(int)RefrigError::SatTemp].index, - Temperature, - "{C}"); + ShowRecurringSevereErrorAtEnd( + state, + format("{}: Saturation temperature is out of range for refrigerant [{}] supplied data: **", routineName, this->Name), + this->errors[(int)RefrigError::SatTemp].index, + Temperature, + "{C}"); } return ReturnValue; @@ -2759,9 +2792,9 @@ namespace FluidProperties { Real64 GetSatPressureRefrig(EnergyPlusData &state, std::string_view const refrigName, // carries in substance name - Real64 const Temperature, // actual temperature given as input - int &RefrigIndex, // Index to Refrigerant Properties - std::string_view const CalledFrom // routine this function was called from (error messages) + Real64 const Temperature, // actual temperature given as input + int &RefrigIndex, // Index to Refrigerant Properties + std::string_view const CalledFrom // routine this function was called from (error messages) ) { // Wrapper for RefrigProps::getSatPressure() @@ -2781,8 +2814,8 @@ namespace FluidProperties { //***************************************************************************** Real64 RefrigProps::getSatTemperature(EnergyPlusData &state, - Real64 const Pressure, // actual temperature given as input - std::string_view const CalledFrom // routine this function was called from (error messages) + Real64 const Pressure, // actual temperature given as input + std::string_view const CalledFrom // routine this function was called from (error messages) ) { @@ -2815,15 +2848,15 @@ namespace FluidProperties { if (LoPresIndex == 0) { ReturnValue = this->PsTemps(this->PsLowPresIndex); ErrorFlag = true; - } else if (LoPresIndex+1 > this->PsHighPresIndex) { + } else if (LoPresIndex + 1 > this->PsHighPresIndex) { ReturnValue = this->PsTemps(this->PsHighPresIndex); ErrorFlag = true; } else { // find interpolation ratio w.r.t temperature - Real64 PresInterpRatio = (Pressure - this->PsValues(LoPresIndex)) / (this->PsValues(LoPresIndex+1) - this->PsValues(LoPresIndex)); + Real64 PresInterpRatio = (Pressure - this->PsValues(LoPresIndex)) / (this->PsValues(LoPresIndex + 1) - this->PsValues(LoPresIndex)); // apply final linear interpolation - ReturnValue = this->PsTemps(LoPresIndex) + PresInterpRatio * (this->PsTemps(LoPresIndex+1) - this->PsTemps(LoPresIndex)); + ReturnValue = this->PsTemps(LoPresIndex) + PresInterpRatio * (this->PsTemps(LoPresIndex + 1) - this->PsTemps(LoPresIndex)); } if (!state.dataGlobal->WarmupFlag && ErrorFlag) { @@ -2831,9 +2864,7 @@ namespace FluidProperties { // send warning if (this->errors[(int)RefrigError::SatPress].count <= df->RefrigErrorLimitTest) { ShowSevereMessage(state, - format("{}: Saturation pressure is out of range for refrigerant [{}] supplied data: **", - routineName, - this->Name)); + format("{}: Saturation pressure is out of range for refrigerant [{}] supplied data: **", routineName, this->Name)); ShowContinueError(state, format("...Called From:{}, supplied data range=[{:.0R},{:.0R}]", CalledFrom, @@ -2843,20 +2874,21 @@ namespace FluidProperties { state, format("...Supplied Refrigerant Pressure={:.0R} Returned saturated temperature value ={:.2R}", Pressure, ReturnValue)); ShowContinueErrorTimeStamp(state, ""); } - ShowRecurringSevereErrorAtEnd(state, - format("{}: Saturation pressure is out of range for refrigerant [{}] supplied data: **", routineName, this->Name), - this->errors[(int)RefrigError::SatPress].index, - Pressure, - "{Pa}"); + ShowRecurringSevereErrorAtEnd( + state, + format("{}: Saturation pressure is out of range for refrigerant [{}] supplied data: **", routineName, this->Name), + this->errors[(int)RefrigError::SatPress].index, + Pressure, + "{Pa}"); } return ReturnValue; } Real64 GetSatTemperatureRefrig(EnergyPlusData &state, std::string_view const refrigName, // carries in substance name - Real64 const Pressure, // actual temperature given as input - int &RefrigIndex, // Index to Refrigerant Properties - std::string_view const CalledFrom // routine this function was called from (error messages) + Real64 const Pressure, // actual temperature given as input + int &RefrigIndex, // Index to Refrigerant Properties + std::string_view const CalledFrom // routine this function was called from (error messages) ) { // Wrapper for RefrigProps::getSatTemperature() @@ -2872,13 +2904,13 @@ namespace FluidProperties { return df->refrigs(RefrigIndex)->getSatTemperature(state, Pressure, CalledFrom); } - + //***************************************************************************** Real64 RefrigProps::getSatEnthalpy(EnergyPlusData &state, - Real64 const Temperature, // actual temperature given as input - Real64 const Quality, // actual quality given as input - std::string_view const CalledFrom // routine this function was called from (error messages) + Real64 const Temperature, // actual temperature given as input + Real64 const Quality, // actual quality given as input + std::string_view const CalledFrom // routine this function was called from (error messages) ) { @@ -2903,15 +2935,15 @@ namespace FluidProperties { Real64 GetSatEnthalpyRefrig(EnergyPlusData &state, std::string_view const refrigName, // carries in substance name - Real64 const Temperature, // actual temperature given as input - Real64 const Quality, // actual quality given as input - int &RefrigIndex, // Index to Refrigerant Properties - std::string_view const CalledFrom // routine this function was called from (error messages) + Real64 const Temperature, // actual temperature given as input + Real64 const Quality, // actual quality given as input + int &RefrigIndex, // Index to Refrigerant Properties + std::string_view const CalledFrom // routine this function was called from (error messages) ) { // Wrapper for RefrigProps::getSatEnthalpy() auto &df = state.dataFluidProps; - + if (RefrigIndex == 0) { if ((RefrigIndex = GetRefrigNum(state, refrigName)) == 0) { ShowSevereError(state, format("Refrigerant \"{}\" not found, called from: {}", refrigName, CalledFrom)); @@ -2921,13 +2953,13 @@ namespace FluidProperties { } return df->refrigs(RefrigIndex)->getSatEnthalpy(state, Temperature, Quality, CalledFrom); } - + //***************************************************************************** Real64 RefrigProps::getSatDensity(EnergyPlusData &state, - Real64 const Temperature, // actual temperature given as input - Real64 const Quality, // actual quality given as input - std::string_view const CalledFrom // routine this function was called from (error messages) + Real64 const Temperature, // actual temperature given as input + Real64 const Quality, // actual quality given as input + std::string_view const CalledFrom // routine this function was called from (error messages) ) { @@ -3003,10 +3035,8 @@ namespace FluidProperties { ++this->errors[(int)RefrigError::SatTempDensity].count; // send warning if (this->errors[(int)RefrigError::SatTempDensity].count <= df->RefrigErrorLimitTest) { - ShowSevereMessage(state, - format("{}: Saturation temperature is out of range for refrigerant [{}] supplied data: **", - routineName, - this->Name)); + ShowSevereMessage( + state, format("{}: Saturation temperature is out of range for refrigerant [{}] supplied data: **", routineName, this->Name)); ShowContinueError(state, format("...Called From:{}, supplied data range=[{:.2R},{:.2R}]", CalledFrom, @@ -3016,44 +3046,45 @@ namespace FluidProperties { state, format("...Supplied Refrigerant Temperature={:.2R} Returned saturated density value ={:.2R}", Temperature, ReturnValue)); ShowContinueErrorTimeStamp(state, ""); } - ShowRecurringSevereErrorAtEnd(state, - format("{}: Saturation temperature is out of range for refrigerant [{}] supplied data: **", routineName, this->Name), - this->errors[(int)RefrigError::SatTempDensity].index, - Temperature, - "{C}"); + ShowRecurringSevereErrorAtEnd( + state, + format("{}: Saturation temperature is out of range for refrigerant [{}] supplied data: **", routineName, this->Name), + this->errors[(int)RefrigError::SatTempDensity].index, + Temperature, + "{C}"); } return ReturnValue; } Real64 GetSatDensityRefrig(EnergyPlusData &state, std::string_view const refrigName, // carries in substance name - Real64 const Temperature, // actual temperature given as input - Real64 const Quality, // actual quality given as input - int &RefrigIndex, // Index to Refrigerant Properties - std::string_view const CalledFrom // routine this function was called from (error messages) + Real64 const Temperature, // actual temperature given as input + Real64 const Quality, // actual quality given as input + int &RefrigIndex, // Index to Refrigerant Properties + std::string_view const CalledFrom // routine this function was called from (error messages) ) { // Wrapper for RefrigProps::getSatDensity() auto &df = state.dataFluidProps; - + if (RefrigIndex == 0) { - if ((RefrigIndex = GetRefrigNum(state, refrigName)) == 0) { + if ((RefrigIndex = GetRefrigNum(state, refrigName)) == 0) { ShowSevereError(state, format("Refrigerant \"{}\" not found, called from: {}", refrigName, CalledFrom)); ShowFatalError(state, "Program terminates due to preceding condition."); return 0.0; } } - + return df->refrigs(RefrigIndex)->getSatDensity(state, Temperature, Quality, CalledFrom); } - + //***************************************************************************** Real64 RefrigProps::getSatSpecificHeat(EnergyPlusData &state, - Real64 const Temperature, // actual temperature given as input - Real64 const Quality, // actual quality given as input - std::string_view const CalledFrom // routine this function was called from (error messages) - ) + Real64 const Temperature, // actual temperature given as input + Real64 const Quality, // actual quality given as input + std::string_view const CalledFrom // routine this function was called from (error messages) + ) { // SUBROUTINE INFORMATION: @@ -3080,30 +3111,22 @@ namespace FluidProperties { } // Apply linear interpolation function - return GetInterpolatedSatProp(state, - Temperature, - this->CpTemps, - this->CpfValues, - this->CpfgValues, - Quality, - CalledFrom, - this->CpfLowTempIndex, - this->CpfHighTempIndex); - + return GetInterpolatedSatProp( + state, Temperature, this->CpTemps, this->CpfValues, this->CpfgValues, Quality, CalledFrom, this->CpfLowTempIndex, this->CpfHighTempIndex); } - + Real64 GetSatSpecificHeatRefrig(EnergyPlusData &state, std::string_view const refrigName, // carries in substance name - Real64 const Temperature, // actual temperature given as input - Real64 const Quality, // actual quality given as input - int &RefrigIndex, // Index to Refrigerant Properties - std::string_view const CalledFrom // routine this function was called from (error messages) + Real64 const Temperature, // actual temperature given as input + Real64 const Quality, // actual quality given as input + int &RefrigIndex, // Index to Refrigerant Properties + std::string_view const CalledFrom // routine this function was called from (error messages) ) { // Wrapper for RefrigProps::getSpecificHeat() auto &df = state.dataFluidProps; - + if (RefrigIndex == 0) { if ((RefrigIndex = GetRefrigNum(state, refrigName)) == 0) { ShowSevereError(state, format("Refrigerant \"{}\" not found, called from: {}", refrigName, CalledFrom)); @@ -3118,9 +3141,9 @@ namespace FluidProperties { //***************************************************************************** Real64 RefrigProps::getSupHeatEnthalpy(EnergyPlusData &state, - Real64 const Temperature, // actual temperature given as input - Real64 const Pressure, // actual pressure given as input - std::string_view const CalledFrom // routine this function was called from (error messages) + Real64 const Temperature, // actual temperature given as input + Real64 const Pressure, // actual pressure given as input + std::string_view const CalledFrom // routine this function was called from (error messages) ) { @@ -3153,10 +3176,10 @@ namespace FluidProperties { static constexpr std::string_view routineName = "RefrigProps::getSupHeatEnthalpy"; auto &df = state.dataFluidProps; - + Real64 TempInterpRatio; Real64 PressInterpRatio; - + int HiTempIndex; // high temperature index value int HiPressIndex; // high pressure index value @@ -3274,34 +3297,35 @@ namespace FluidProperties { if (this->errors[(int)RefrigError::SatSupEnthalpyTemp].count <= df->RefrigErrorLimitTest) { ShowWarningMessage(state, format("{}: Refrigerant [{}] Temperature is out of range for superheated enthalpy: values capped **", - routineName, this->Name)); + routineName, + this->Name)); ShowContinueError(state, fmt::format(" Called From:{}", CalledFrom)); ShowContinueErrorTimeStamp(state, ""); } - ShowRecurringWarningErrorAtEnd(state, - format("{}: Refrigerant [{}] Temperature is out of range for superheated enthalpy: values capped **", - routineName, this->Name), - this->errors[(int)RefrigError::SatSupEnthalpyTemp].index, - Temperature, - "{C}"); + ShowRecurringWarningErrorAtEnd( + state, + format("{}: Refrigerant [{}] Temperature is out of range for superheated enthalpy: values capped **", routineName, this->Name), + this->errors[(int)RefrigError::SatSupEnthalpyTemp].index, + Temperature, + "{C}"); } // send pressure range error if flagged this->errors[(int)RefrigError::SatSupEnthalpyPress].count += CurPresRangeErrCount; if (CurPresRangeErrCount > 0) { if (this->errors[(int)RefrigError::SatSupEnthalpyPress].count <= df->RefrigErrorLimitTest) { - ShowWarningMessage(state, - format("{}: Refrigerant [{}] Pressure is out of range for superheated enthalpy: values capped **", - routineName, this->Name)); + ShowWarningMessage( + state, + format("{}: Refrigerant [{}] Pressure is out of range for superheated enthalpy: values capped **", routineName, this->Name)); ShowContinueError(state, fmt::format(" Called From:{}", CalledFrom)); ShowContinueErrorTimeStamp(state, ""); } - ShowRecurringWarningErrorAtEnd(state, - format("{}: Refrigerant [{}] Pressure is out of range for superheated enthalpy: values capped **", - routineName, this->Name), - this->errors[(int)RefrigError::SatSupEnthalpyPress].index, - Pressure, - "{Pa}"); + ShowRecurringWarningErrorAtEnd( + state, + format("{}: Refrigerant [{}] Pressure is out of range for superheated enthalpy: values capped **", routineName, this->Name), + this->errors[(int)RefrigError::SatSupEnthalpyPress].index, + Pressure, + "{Pa}"); } } // end error checking @@ -3310,15 +3334,15 @@ namespace FluidProperties { Real64 GetSupHeatEnthalpyRefrig(EnergyPlusData &state, std::string_view const refrigName, // carries in substance name - Real64 const Temperature, // actual temperature given as input - Real64 const Pressure, // actual pressure given as input - int &RefrigIndex, // Index to Refrigerant Properties - std::string_view const CalledFrom // routine this function was called from (error messages) + Real64 const Temperature, // actual temperature given as input + Real64 const Pressure, // actual pressure given as input + int &RefrigIndex, // Index to Refrigerant Properties + std::string_view const CalledFrom // routine this function was called from (error messages) ) { // Wrapper for RefrigProps::getSupHeatEnthalpy() auto &df = state.dataFluidProps; - + if (RefrigIndex == 0) { if ((RefrigIndex = GetRefrigNum(state, refrigName)) == 0) { ShowSevereError(state, format("Refrigerant \"{}\" not found, called from: {}", refrigName, CalledFrom)); @@ -3329,13 +3353,13 @@ namespace FluidProperties { return df->refrigs(RefrigIndex)->getSupHeatEnthalpy(state, Temperature, Pressure, CalledFrom); } - + //***************************************************************************** Real64 RefrigProps::getSupHeatPressure(EnergyPlusData &state, - Real64 const Temperature, // actual temperature given as input - Real64 const Enthalpy, // actual enthalpy given as input - std::string_view const CalledFrom // routine this function was called from (error messages) + Real64 const Temperature, // actual temperature given as input + Real64 const Enthalpy, // actual enthalpy given as input + std::string_view const CalledFrom // routine this function was called from (error messages) ) { @@ -3366,10 +3390,10 @@ namespace FluidProperties { // FUNCTION PARAMETERS: // the enthalpy calculated from the pressure found static constexpr std::string_view routineName = "RefrigProps::getSupHeatPressure"; - + auto &df = state.dataFluidProps; - - // SUBROUTINE LOCAL VARIABLE DECLARATIONS: + + // SUBROUTINE LOCAL VARIABLE DECLARATIONS: Real64 EnthalpyCheck; // recalculates enthalpy based on calculated pressure Real64 EnthalpyHigh; // Enthalpy value at interpolated pressure and high temperature Real64 EnthalpyLow; // Enthalpy value at interpolated pressure and low temperature @@ -3513,18 +3537,21 @@ namespace FluidProperties { if (this->errors[(int)RefrigError::SatSupPress].count <= df->RefrigErrorLimitTest) { ShowSevereMessage(state, format("{}: Refrigerant [{}] is saturated at the given enthalpy and temperature, saturated enthalpy at given " - "temperature returned. **", routineName, this->Name)); + "temperature returned. **", + routineName, + this->Name)); ShowContinueError(state, fmt::format("...Called From:{}", CalledFrom)); ShowContinueError(state, format("Refrigerant temperature = {:.2R}", Temperature)); ShowContinueError(state, format("Refrigerant Enthalpy = {:.3R}", Enthalpy)); ShowContinueError(state, format("Returned Pressure value = {:.0R}", ReturnValue)); ShowContinueErrorTimeStamp(state, ""); } - ShowRecurringSevereErrorAtEnd(state, - format("{}: Refrigerant [{}] saturated at the given enthalpy and temperature **", routineName, this->Name), - this->errors[(int)RefrigError::SatSupPress].index, - ReturnValue, - "{Pa}"); + ShowRecurringSevereErrorAtEnd( + state, + format("{}: Refrigerant [{}] saturated at the given enthalpy and temperature **", routineName, this->Name), + this->errors[(int)RefrigError::SatSupPress].index, + ReturnValue, + "{Pa}"); } // send temp range error if flagged @@ -3533,43 +3560,43 @@ namespace FluidProperties { if (this->errors[(int)RefrigError::SatSupPressTemp].count <= df->RefrigErrorLimitTest) { ShowWarningMessage(state, format("{}: Refrigerant [{}] Temperature is out of range for superheated pressure: values capped **", - routineName, this->Name)); + routineName, + this->Name)); ShowContinueError(state, fmt::format(" Called From:{}", CalledFrom)); ShowContinueErrorTimeStamp(state, ""); } - ShowRecurringWarningErrorAtEnd(state, - format("{}: Refrigerant [{}] Temperature is out of range for superheated pressure: values capped **", - routineName, this->Name), - this->errors[(int)RefrigError::SatSupPressTemp].index, - Temperature, - "{C}"); + ShowRecurringWarningErrorAtEnd( + state, + format("{}: Refrigerant [{}] Temperature is out of range for superheated pressure: values capped **", routineName, this->Name), + this->errors[(int)RefrigError::SatSupPressTemp].index, + Temperature, + "{C}"); } // send enthalpy range error if flagged this->errors[(int)RefrigError::SatSupPressEnthalpy].count += CurEnthalpyRangeErrCount; if (CurEnthalpyRangeErrCount > 0) { if (this->errors[(int)RefrigError::SatSupPressEnthalpy].count <= df->RefrigErrorLimitTest) { - ShowWarningMessage(state, - format("{}: Refrigerant [{}] Pressure is out of range for superheated enthalpy: values capped **", - routineName, this->Name)); + ShowWarningMessage( + state, + format("{}: Refrigerant [{}] Pressure is out of range for superheated enthalpy: values capped **", routineName, this->Name)); ShowContinueError(state, fmt::format(" Called From:{}", CalledFrom)); ShowContinueErrorTimeStamp(state, ""); } - ShowRecurringWarningErrorAtEnd(state, - format("{}: Refrigerant [{}] Pressure is out of range for superheated pressure: values capped **", - routineName, this->Name), - this->errors[(int)RefrigError::SatSupPressEnthalpy].index, - Enthalpy, - "{J}"); + ShowRecurringWarningErrorAtEnd( + state, + format("{}: Refrigerant [{}] Pressure is out of range for superheated pressure: values capped **", routineName, this->Name), + this->errors[(int)RefrigError::SatSupPressEnthalpy].index, + Enthalpy, + "{J}"); } } // end error checking return ReturnValue; } - Real64 GetSupHeatPressureRefrig(EnergyPlusData &state, - std::string const &refrigName, // carries in substance name + std::string const &refrigName, // carries in substance name Real64 const Temperature, // actual temperature given as input Real64 const Enthalpy, // actual enthalpy given as input int &RefrigIndex, // Index to Refrigerant Properties @@ -3593,12 +3620,12 @@ namespace FluidProperties { //***************************************************************************** Real64 RefrigProps::getSupHeatTemp(EnergyPlusData &state, - Real64 const Pressure, // actual pressure given as input - Real64 const Enthalpy, // actual enthalpy given as input - Real64 TempLow, // lower bound of temperature in the iteration - Real64 TempUp, // upper bound of temperature in the iteration - std::string_view const CalledFrom // routine this function was called from (error messages) - ) + Real64 const Pressure, // actual pressure given as input + Real64 const Enthalpy, // actual enthalpy given as input + Real64 TempLow, // lower bound of temperature in the iteration + Real64 TempUp, // upper bound of temperature in the iteration + std::string_view const CalledFrom // routine this function was called from (error messages) + ) { // SUBROUTINE INFORMATION: // AUTHOR Rongpeng Zhang @@ -3693,17 +3720,17 @@ namespace FluidProperties { Real64 GetSupHeatTempRefrig(EnergyPlusData &state, std::string_view const refrigName, // carries in substance name - Real64 const Pressure, // actual pressure given as input - Real64 const Enthalpy, // actual enthalpy given as input - Real64 TempLow, // lower bound of temperature in the iteration - Real64 TempUp, // upper bound of temperature in the iteration - int &RefrigIndex, // Index to Refrigerant Properties - std::string_view const CalledFrom // routine this function was called from (error messages) + Real64 const Pressure, // actual pressure given as input + Real64 const Enthalpy, // actual enthalpy given as input + Real64 TempLow, // lower bound of temperature in the iteration + Real64 TempUp, // upper bound of temperature in the iteration + int &RefrigIndex, // Index to Refrigerant Properties + std::string_view const CalledFrom // routine this function was called from (error messages) ) { // Wrapper for RefrigProps::getSupHeatTemp() auto &df = state.dataFluidProps; - + if (RefrigIndex == 0) { if ((RefrigIndex = GetRefrigNum(state, refrigName)) == 0) { ShowSevereError(state, format("Refrigerant \"{}\" not found, called from: {}", refrigName, CalledFrom)); @@ -3714,13 +3741,13 @@ namespace FluidProperties { return df->refrigs(RefrigIndex)->getSupHeatTemp(state, Pressure, Enthalpy, TempLow, TempUp, CalledFrom); } - + //***************************************************************************** Real64 RefrigProps::getSupHeatDensity(EnergyPlusData &state, - Real64 const Temperature, // actual temperature given as input - Real64 const Pressure, // actual pressure given as input - std::string_view const CalledFrom // routine this function was called from (error messages) + Real64 const Temperature, // actual temperature given as input + Real64 const Pressure, // actual pressure given as input + std::string_view const CalledFrom // routine this function was called from (error messages) ) { @@ -3750,7 +3777,7 @@ namespace FluidProperties { Real64 ReturnValue; auto &df = state.dataFluidProps; - + // FUNCTION PARAMETERS: static constexpr std::string_view routineName = "RefrigProps::getSupHeatDensity"; @@ -3876,36 +3903,37 @@ namespace FluidProperties { this->errors[(int)RefrigError::SatSupDensityTemp].count += CurTempRangeErrCount; if (CurTempRangeErrCount > 0) { if (this->errors[(int)RefrigError::SatSupDensityTemp].count <= df->RefrigErrorLimitTest) { - ShowWarningMessage(state, format("{}: Refrigerant [{}] Temperature is out of range for superheated density: values capped **", - routineName, this->Name)); + ShowWarningMessage(state, + format("{}: Refrigerant [{}] Temperature is out of range for superheated density: values capped **", + routineName, + this->Name)); ShowContinueError(state, fmt::format(" Called From:{}", CalledFrom)); ShowContinueErrorTimeStamp(state, ""); } - ShowRecurringWarningErrorAtEnd(state, - format("{}: Refrigerant [{}] Temperature is out of range for superheated density: values capped **", - routineName, this->Name), - this->errors[(int)RefrigError::SatSupDensityTemp].index, - Temperature, - "{C}"); + ShowRecurringWarningErrorAtEnd( + state, + format("{}: Refrigerant [{}] Temperature is out of range for superheated density: values capped **", routineName, this->Name), + this->errors[(int)RefrigError::SatSupDensityTemp].index, + Temperature, + "{C}"); } // send pressure range error if flagged this->errors[(int)RefrigError::SatSupDensityPress].count += CurPresRangeErrCount; if (CurPresRangeErrCount > 0) { if (this->errors[(int)RefrigError::SatSupDensityPress].count <= df->RefrigErrorLimitTest) { - ShowWarningMessage(state, - format("{}: Refrigerant [{}] Pressure is out of range for superheated density: values capped **", - routineName, - this->Name)); + ShowWarningMessage( + state, + format("{}: Refrigerant [{}] Pressure is out of range for superheated density: values capped **", routineName, this->Name)); ShowContinueError(state, fmt::format(" Called From:{}", CalledFrom)); ShowContinueErrorTimeStamp(state, ""); } - ShowRecurringWarningErrorAtEnd(state, - format("{}: Refrigerant [{}] Pressure is out of range for superheated density: values capped **", - routineName, this->Name), - this->errors[(int)RefrigError::SatSupDensityPress].index, - Pressure, - "{Pa}"); + ShowRecurringWarningErrorAtEnd( + state, + format("{}: Refrigerant [{}] Pressure is out of range for superheated density: values capped **", routineName, this->Name), + this->errors[(int)RefrigError::SatSupDensityPress].index, + Pressure, + "{Pa}"); } // end error checking } @@ -3914,10 +3942,10 @@ namespace FluidProperties { Real64 GetSupHeatDensityRefrig(EnergyPlusData &state, std::string_view const refrigName, // carries in substance name - Real64 const Temperature, // actual temperature given as input - Real64 const Pressure, // actual pressure given as input - int &RefrigIndex, // Index to Refrigerant Properties - std::string_view const CalledFrom // routine this function was called from (error messages) + Real64 const Temperature, // actual temperature given as input + Real64 const Pressure, // actual pressure given as input + int &RefrigIndex, // Index to Refrigerant Properties + std::string_view const CalledFrom // routine this function was called from (error messages) ) { // Wrapper for RefrigProps::getSupHeatDensity() @@ -3932,12 +3960,12 @@ namespace FluidProperties { return df->refrigs(RefrigIndex)->getSupHeatDensity(state, Temperature, Pressure, CalledFrom); } - + //***************************************************************************** #ifdef EP_cache_GlycolSpecificHeat Real64 GlycolProps::getSpecificHeat(EnergyPlusData &state, - Real64 const Temperature, // actual temperature given as input - std::string_view const CalledFrom // routine this function was called from (error messages) + Real64 const Temperature, // actual temperature given as input + std::string_view const CalledFrom // routine this function was called from (error messages) ) { auto &df = state.dataFluidProps; @@ -3964,13 +3992,13 @@ namespace FluidProperties { } Real64 GlycolProps::getSpecificHeat_raw(EnergyPlusData &state, - Real64 const Temp, // actual temperature given as input - std::string_view const CalledFrom // routine this function was called from (error messages) + Real64 const Temp, // actual temperature given as input + std::string_view const CalledFrom // routine this function was called from (error messages) ) #else Real64 GlycolProps::getSpecificHeat(EnergyPlusData &state, - Real64 const Temp, // actual temperature given as input - std::string_view const CalledFrom // routine this function was called from (error messages) + Real64 const Temp, // actual temperature given as input + std::string_view const CalledFrom // routine this function was called from (error messages) ) #endif { @@ -4003,14 +4031,13 @@ namespace FluidProperties { // Now determine the value of specific heat using interpolation if (Temp < this->CpLowTempValue) { // Temperature too low - + if (!state.dataGlobal->WarmupFlag) { df->glycolErrorLimits[(int)GlycolError::SpecHeatLow] = ++this->errors[(int)GlycolError::SpecHeatLow].count; if (df->glycolErrorLimits[(int)GlycolError::SpecHeatLow] <= df->GlycolErrorLimitTest) { - ShowWarningMessage(state, - format("{}: Temperature is out of range (too low) for fluid [{}] specific heat supplied values **", - routineName, - this->Name)); + ShowWarningMessage( + state, + format("{}: Temperature is out of range (too low) for fluid [{}] specific heat supplied values **", routineName, this->Name)); ShowContinueError(state, format("..Called From:{},Temperature=[{:.2R}], supplied data range=[{:.2R},{:.2R}]", CalledFrom, @@ -4019,11 +4046,12 @@ namespace FluidProperties { this->CpHighTempValue)); ShowContinueErrorTimeStamp(state, ""); } - ShowRecurringWarningErrorAtEnd(state, - format("{}: Temperature out of range (too low) for fluid [{}] specific heat **", routineName, this->Name), - this->errors[(int)GlycolError::SpecHeatLow].index, - Temp, - "{C}"); + ShowRecurringWarningErrorAtEnd( + state, + format("{}: Temperature out of range (too low) for fluid [{}] specific heat **", routineName, this->Name), + this->errors[(int)GlycolError::SpecHeatLow].index, + Temp, + "{C}"); } return this->CpValues(this->CpLowTempIndex); @@ -4031,8 +4059,8 @@ namespace FluidProperties { if (!state.dataGlobal->WarmupFlag) { df->glycolErrorLimits[(int)GlycolError::SpecHeatHigh] = ++this->errors[(int)GlycolError::SpecHeatHigh].count; if (df->glycolErrorLimits[(int)GlycolError::SpecHeatHigh] <= df->GlycolErrorLimitTest) { - ShowWarningMessage( - state, format("{}: Temperature is out of range (too high) for fluid [{}] specific heat **", routineName, this->Name)); + ShowWarningMessage(state, + format("{}: Temperature is out of range (too high) for fluid [{}] specific heat **", routineName, this->Name)); ShowContinueError(state, format("..Called From:{},Temperature=[{:.2R}], supplied data range=[{:.2R},{:.2R}]", CalledFrom, @@ -4041,43 +4069,44 @@ namespace FluidProperties { this->CpHighTempValue)); ShowContinueErrorTimeStamp(state, ""); } - ShowRecurringWarningErrorAtEnd(state, - format("{}: Temperature out of range (too high) for fluid [{}] specific heat **", routineName, this->Name), - this->errors[(int)GlycolError::SpecHeatHigh].index, - Temp, - "{C}"); + ShowRecurringWarningErrorAtEnd( + state, + format("{}: Temperature out of range (too high) for fluid [{}] specific heat **", routineName, this->Name), + this->errors[(int)GlycolError::SpecHeatHigh].index, + Temp, + "{C}"); } return this->CpValues(this->CpHighTempIndex); } else { // Temperature somewhere between the lowest and highest value #ifdef PERFORMANCE_OPT - if (Temp < this->CpTemps(this->LoCpTempIdxLast) || Temp > this->CpTemps(this->LoCpTempIdxLast+1)) { + if (Temp < this->CpTemps(this->LoCpTempIdxLast) || Temp > this->CpTemps(this->LoCpTempIdxLast + 1)) { this->LoCpTempIdxLast = FindArrayIndex(Temp, this->CpTemps, 1, this->NumCpTempPoints); } return this->CpValues(this->LoCpTempIdxLast) + (Temp - this->CpTemps(this->LoCpTempIdxLast)) * this->CpTempRatios(this->LoCpTempIdxLast); -#else // !PERFORMANCE_OPT - assert(this->CpTemps.size() <= static_cast(std::numeric_limits::max())); - int beg(1), end(this->CpTemps.isize()); // 1-based indexing +#else // !PERFORMANCE_OPT + assert(this->CpTemps.size() <= static_cast(std::numeric_limits::max())); + int beg(1), end(this->CpTemps.isize()); // 1-based indexing assert(end > 0); while (beg + 1 < end) { int mid = ((beg + end) >> 1); // bit shifting is faster than /2 (Temp > this->CpTemps(mid) ? beg : end) = mid; } // Invariant: glycol_CpTemps[beg] <= Temperature <= glycol_CpTemps[end] return GetInterpValue(Temp, this->CpTemps(beg), this->CpTemps(end), this->CpValues(beg), this->CpValues(end)); -#endif // PERFORMANCE_OPT +#endif // PERFORMANCE_OPT } } Real64 GetSpecificHeatGlycol(EnergyPlusData &state, - std::string_view const glycolName, // carries in substance name - Real64 const Temperature, // actual temperature given as input - int &GlycolIndex, // Index to Glycol Properties - std::string_view const CalledFrom // routine this function was called from (error messages) + std::string_view const glycolName, // carries in substance name + Real64 const Temperature, // actual temperature given as input + int &GlycolIndex, // Index to Glycol Properties + std::string_view const CalledFrom // routine this function was called from (error messages) ) { // Wrapper for GlycolProps::getSpecificHeat() auto &df = state.dataFluidProps; - + if (GlycolIndex == 0) { if ((GlycolIndex = GetGlycolNum(state, glycolName)) == 0) { ShowSevereError(state, format("Glycol \"{}\" not found, called from: {}", glycolName, CalledFrom)); @@ -4088,12 +4117,12 @@ namespace FluidProperties { return df->glycols(GlycolIndex)->getSpecificHeat(state, Temperature, CalledFrom); } - + //***************************************************************************** Real64 GlycolProps::getDensity(EnergyPlusData &state, - Real64 const Temp, // actual temperature given as input - std::string_view const CalledFrom // routine this function was called from (error messages) + Real64 const Temp, // actual temperature given as input + std::string_view const CalledFrom // routine this function was called from (error messages) ) { @@ -4122,7 +4151,7 @@ namespace FluidProperties { static constexpr std::string_view routineName = "GlycolProps::getDensity"; auto &df = state.dataFluidProps; - + // FUNCTION LOCAL VARIABLE DECLARATIONS: GlycolError error = GlycolError::Invalid; @@ -4131,22 +4160,23 @@ namespace FluidProperties { // Now determine the value of specific heat using interpolation if (Temp < this->RhoLowTempValue) { // Temperature too low - error = GlycolError::DensityLow; + error = GlycolError::DensityLow; Rho = this->RhoValues(this->RhoLowTempIndex); } else if (Temp > this->RhoHighTempValue) { // Temperature too high error = GlycolError::DensityHigh; Rho = this->RhoValues(this->RhoHighTempIndex); } else { // Temperature somewhere between the lowest and highest value #ifdef PERFORMANCE_OPT - if (Temp < this->RhoTemps(this->LoRhoTempIdxLast) || Temp > this->RhoTemps(this->LoRhoTempIdxLast+1)) { + if (Temp < this->RhoTemps(this->LoRhoTempIdxLast) || Temp > this->RhoTemps(this->LoRhoTempIdxLast + 1)) { this->LoRhoTempIdxLast = FindArrayIndex(Temp, this->RhoTemps, 1, this->NumRhoTempPoints); } - Rho = this->RhoValues(this->LoRhoTempIdxLast) + (Temp - this->RhoTemps(this->LoRhoTempIdxLast)) * this->RhoTempRatios(this->LoRhoTempIdxLast); -#else // !PERFORMANCE_OPT + Rho = this->RhoValues(this->LoRhoTempIdxLast) + + (Temp - this->RhoTemps(this->LoRhoTempIdxLast)) * this->RhoTempRatios(this->LoRhoTempIdxLast); +#else // !PERFORMANCE_OPT int LoTempIndex = FindArrayIndex(Temp, this->RhoTemps, 1, this->NumRhoTempPoints); - Real64 TempInterpRatio = (Temp - this->RhoTemps(LoTempIndex)) / (this->RhoTemps(LoTempIndex+1) - this->RhoTemps(LoTempIndex)); - Rho = this->RhoValues(LoTempIndex) + TempInterpRatio * (this->RhoValues(LoTempIndex+1) - this->RhoValues(LoTempIndex)); -#endif // PERFORMANCE_OPT + Real64 TempInterpRatio = (Temp - this->RhoTemps(LoTempIndex)) / (this->RhoTemps(LoTempIndex + 1) - this->RhoTemps(LoTempIndex)); + Rho = this->RhoValues(LoTempIndex) + TempInterpRatio * (this->RhoValues(LoTempIndex + 1) - this->RhoValues(LoTempIndex)); +#endif // PERFORMANCE_OPT } // Error handling @@ -4170,10 +4200,11 @@ namespace FluidProperties { this->errors[(int)GlycolError::DensityLow].index, Temp, "{C}"); - + } else { // error == GlycolError::DensityHigh if (df->glycolErrorLimits[(int)error] <= df->GlycolErrorLimitTest) { - ShowWarningMessage(state, format("{}: Temperature is out of range (too high) for fluid [{}] density **", routineName, this->Name)); + ShowWarningMessage(state, + format("{}: Temperature is out of range (too high) for fluid [{}] density **", routineName, this->Name)); ShowContinueError(state, format("..Called From:{},Temperature=[{:.2R}], supplied data range=[{:.2R},{:.2R}]", CalledFrom, @@ -4194,15 +4225,15 @@ namespace FluidProperties { } Real64 GetDensityGlycol(EnergyPlusData &state, - std::string_view const glycolName, // carries in substance name - Real64 const Temperature, // actual temperature given as input - int &GlycolIndex, // Index to Glycol Properties - std::string_view const CalledFrom // routine this function was called from (error messages) + std::string_view const glycolName, // carries in substance name + Real64 const Temperature, // actual temperature given as input + int &GlycolIndex, // Index to Glycol Properties + std::string_view const CalledFrom // routine this function was called from (error messages) ) { // Wrapper for GlycolProps::getDensity() auto &df = state.dataFluidProps; - + if (GlycolIndex == 0) { if ((GlycolIndex = GetGlycolNum(state, glycolName)) == 0) { ShowSevereError(state, format("Glycol \"{}\" not found, called from: {}", glycolName, CalledFrom)); @@ -4213,12 +4244,12 @@ namespace FluidProperties { return df->glycols(GlycolIndex)->getDensity(state, Temperature, CalledFrom); } - + //***************************************************************************** Real64 GlycolProps::getConductivity(EnergyPlusData &state, - Real64 const Temp, // actual temperature given as input - std::string_view const CalledFrom // routine this function was called from (error messages) + Real64 const Temp, // actual temperature given as input + std::string_view const CalledFrom // routine this function was called from (error messages) ) { @@ -4250,7 +4281,7 @@ namespace FluidProperties { GlycolError error = GlycolError::Invalid; auto &df = state.dataFluidProps; - + // If user didn't input data (shouldn't get this far, but just in case...), we can't find a value if (!this->CondDataPresent) { ShowSevereError(state, format("{}: conductivity data not found for glycol \"{}\", called from {}", routineName, this->Name, CalledFrom)); @@ -4267,14 +4298,15 @@ namespace FluidProperties { Cond = this->CondValues(this->CondHighTempIndex); } else { // Temperature somewhere between the lowest and highest value #ifdef PERFORMANCE_OPT - if (Temp < this->CondTemps(this->LoCondTempIdxLast) || Temp > this->CondTemps(this->LoCondTempIdxLast+1)) { + if (Temp < this->CondTemps(this->LoCondTempIdxLast) || Temp > this->CondTemps(this->LoCondTempIdxLast + 1)) { this->LoCondTempIdxLast = FindArrayIndex(Temp, this->CondTemps, 1, this->NumCondTempPoints); } - Cond = this->CondValues(this->LoCondTempIdxLast) + (Temp - this->CondTemps(this->LoCondTempIdxLast)) * this->CondTempRatios(this->LoCondTempIdxLast); -#else // !PERFORMANCE_OPT + Cond = this->CondValues(this->LoCondTempIdxLast) + + (Temp - this->CondTemps(this->LoCondTempIdxLast)) * this->CondTempRatios(this->LoCondTempIdxLast); +#else // !PERFORMANCE_OPT int LoTempIndex = FindArrayIndex(Temp, this->CondTemps, 1, this->NumCondTempPoints); - Real64 TempInterpRatio = (Temp - this->CondTemps(LoTempIndex)) / (this->CondTemps(LoTempIndex+1) - this->CondTemps(LoTempIndex)); - Cond = this->CondValues(LoTempIndex) + TempInterpRatio * (this->CondValues(LoTempIndex+1) - this->CondValues(LoTempIndex)); + Real64 TempInterpRatio = (Temp - this->CondTemps(LoTempIndex)) / (this->CondTemps(LoTempIndex + 1) - this->CondTemps(LoTempIndex)); + Cond = this->CondValues(LoTempIndex) + TempInterpRatio * (this->CondValues(LoTempIndex + 1) - this->CondValues(LoTempIndex)); #endif // PERFORMANCE_OPT } @@ -4284,7 +4316,8 @@ namespace FluidProperties { if (error == GlycolError::ConductivityLow) { if (df->glycolErrorLimits[(int)error] <= df->GlycolErrorLimitTest) { - ShowWarningMessage(state, format("{}: Temperature is out of range (too low) for fluid [{}] conductivity **", routineName, this->Name)); + ShowWarningMessage(state, + format("{}: Temperature is out of range (too low) for fluid [{}] conductivity **", routineName, this->Name)); ShowContinueError(state, format("..Called From:{},Temperature=[{:.2R}], supplied data range=[{:.2R},{:.2R}]", CalledFrom, @@ -4294,16 +4327,18 @@ namespace FluidProperties { ShowContinueErrorTimeStamp(state, ""); } - ShowRecurringWarningErrorAtEnd(state, - format("{}: Temperature out of range (too low) for fluid [{}] conductivity **", routineName, this->Name), - this->errors[(int)error].index, - Temp, - "{C}"); + ShowRecurringWarningErrorAtEnd( + state, + format("{}: Temperature out of range (too low) for fluid [{}] conductivity **", routineName, this->Name), + this->errors[(int)error].index, + Temp, + "{C}"); } else if (error == GlycolError::ConductivityHigh) { if (df->glycolErrorLimits[(int)error] <= df->GlycolErrorLimitTest) { - ShowWarningMessage(state, format("{}: Temperature is out of range (too high) for fluid [{}] conductivity **", routineName, this->Name)); + ShowWarningMessage(state, + format("{}: Temperature is out of range (too high) for fluid [{}] conductivity **", routineName, this->Name)); ShowContinueError(state, format("..Called From:{},Temperature=[{:.2R}], supplied data range=[{:.2R},{:.2R}]", CalledFrom, @@ -4313,11 +4348,12 @@ namespace FluidProperties { ShowContinueErrorTimeStamp(state, ""); } - ShowRecurringWarningErrorAtEnd(state, - format("{}: Temperature out of range (too high) for fluid [{}] conductivity **", routineName, this->Name), - this->errors[(int)error].index, - Temp, - "{C}"); + ShowRecurringWarningErrorAtEnd( + state, + format("{}: Temperature out of range (too high) for fluid [{}] conductivity **", routineName, this->Name), + this->errors[(int)error].index, + Temp, + "{C}"); } } @@ -4325,15 +4361,15 @@ namespace FluidProperties { } // GlycolProps::getConductivity() Real64 GetConductivityGlycol(EnergyPlusData &state, - std::string_view const glycolName, // carries in substance name - Real64 const Temperature, // actual temperature given as input - int &GlycolIndex, // Index to Glycol Properties - std::string_view const CalledFrom // routine this function was called from (error messages) + std::string_view const glycolName, // carries in substance name + Real64 const Temperature, // actual temperature given as input + int &GlycolIndex, // Index to Glycol Properties + std::string_view const CalledFrom // routine this function was called from (error messages) ) { // Wrapper for GlycolProps::getConductivity() auto &df = state.dataFluidProps; - + if (GlycolIndex == 0) { if ((GlycolIndex = GetGlycolNum(state, glycolName)) == 0) { ShowSevereError(state, format("Glycol \"{}\" not found, called from: {}", glycolName, CalledFrom)); @@ -4345,12 +4381,12 @@ namespace FluidProperties { // If user didn't input data (shouldn't get this far, but just in case...), we can't find a value return df->glycols(GlycolIndex)->getConductivity(state, Temperature, CalledFrom); } - + //***************************************************************************** Real64 GlycolProps::getViscosity(EnergyPlusData &state, - Real64 const Temp, // actual temperature given as input - std::string_view const CalledFrom // routine this function was called from (error messages) + Real64 const Temp, // actual temperature given as input + std::string_view const CalledFrom // routine this function was called from (error messages) ) { @@ -4399,15 +4435,16 @@ namespace FluidProperties { Visc = this->ViscValues(this->ViscHighTempIndex); } else { // Temperature somewhere between the lowest and highest value #ifdef PERFORMANCE_OPT - if (Temp < this->ViscTemps(this->LoViscTempIdxLast) || Temp > this->ViscTemps(this->LoViscTempIdxLast+1)) { + if (Temp < this->ViscTemps(this->LoViscTempIdxLast) || Temp > this->ViscTemps(this->LoViscTempIdxLast + 1)) { this->LoViscTempIdxLast = FindArrayIndex(Temp, this->ViscTemps, 1, this->NumViscTempPoints); } - Visc = this->ViscValues(this->LoViscTempIdxLast) + (Temp - this->ViscTemps(this->LoViscTempIdxLast)) * this->ViscTempRatios(this->LoViscTempIdxLast); -#else // !PERFORMANCE_OPT + Visc = this->ViscValues(this->LoViscTempIdxLast) + + (Temp - this->ViscTemps(this->LoViscTempIdxLast)) * this->ViscTempRatios(this->LoViscTempIdxLast); +#else // !PERFORMANCE_OPT int LoTempIndex = FindArrayIndex(Temp, this->ViscTemps, 1, this->NumViscTempPoints); - Real64 TempInterpRatio = (Temp - this->ViscTemps(LoTempIndex)) / (this->ViscTemps(LoTempIndex+1) - this->ViscTemps(LoTempIndex)); - Visc = this->ViscValues(LoTempIndex) + TempInterpRatio * (this->ViscValues(LoTempIndex+1) - this->ViscValues(LoTempIndex)); -#endif // PERFORMANCE_OPT + Real64 TempInterpRatio = (Temp - this->ViscTemps(LoTempIndex)) / (this->ViscTemps(LoTempIndex + 1) - this->ViscTemps(LoTempIndex)); + Visc = this->ViscValues(LoTempIndex) + TempInterpRatio * (this->ViscValues(LoTempIndex + 1) - this->ViscValues(LoTempIndex)); +#endif // PERFORMANCE_OPT } // Error handling @@ -4416,7 +4453,8 @@ namespace FluidProperties { if (error == GlycolError::ViscosityHigh) { if (df->glycolErrorLimits[(int)error] <= df->GlycolErrorLimitTest) { - ShowWarningMessage(state, format("{}: Temperature is out of range (too low) for fluid [{}] viscosity **", routineName, this->Name)); + ShowWarningMessage(state, + format("{}: Temperature is out of range (too low) for fluid [{}] viscosity **", routineName, this->Name)); ShowContinueError(state, format("..Called From:{},Temperature=[{:.2R}], supplied data range=[{:.2R},{:.2R}]", CalledFrom, @@ -4432,10 +4470,11 @@ namespace FluidProperties { Temp, "{C}"); } - + else if (error == GlycolError::ViscosityHigh) { if (df->glycolErrorLimits[(int)error] <= df->GlycolErrorLimitTest) { - ShowWarningMessage(state, format("{}: Temperature is out of range (too high) for fluid [{}] viscosity **", routineName, this->Name)); + ShowWarningMessage(state, + format("{}: Temperature is out of range (too high) for fluid [{}] viscosity **", routineName, this->Name)); ShowContinueError(state, format("..Called From:{},Temperature=[{:.2R}], supplied data range=[{:.2R},{:.2R}]", CalledFrom, @@ -4457,15 +4496,15 @@ namespace FluidProperties { } // GlycolProps::getViscosity() Real64 GetViscosityGlycol(EnergyPlusData &state, - std::string_view const glycolName, // carries in substance name - Real64 const Temperature, // actual temperature given as input - int &GlycolIndex, // Index to Glycol Properties - std::string_view const CalledFrom // routine this function was called from (error messages) + std::string_view const glycolName, // carries in substance name + Real64 const Temperature, // actual temperature given as input + int &GlycolIndex, // Index to Glycol Properties + std::string_view const CalledFrom // routine this function was called from (error messages) ) { // Wrapper for GlycolProps::getViscosity() auto &df = state.dataFluidProps; - + if (GlycolIndex == 0) { if ((GlycolIndex = GetGlycolNum(state, glycolName)) == 0) { ShowSevereError(state, format("Glycol \"{}\" not found, called from: {}", glycolName, CalledFrom)); @@ -4477,7 +4516,7 @@ namespace FluidProperties { // Now determine the value of specific heat using interpolation return df->glycols(GlycolIndex)->getViscosity(state, Temperature, CalledFrom); } - + //***************************************************************************** int GetRefrigNum(EnergyPlusData &state, std::string_view const refrigName) // carries in substance name @@ -4491,9 +4530,9 @@ namespace FluidProperties { // This function simply determines the index of the refrigerant named // in the input variable to this routine within the derived type. auto &df = state.dataFluidProps; - - auto found = std::find_if(df->refrigs.begin(), df->refrigs.end(), - [refrigName](RefrigProps const *refrig) { return refrig->Name == refrigName; }); + + auto found = + std::find_if(df->refrigs.begin(), df->refrigs.end(), [refrigName](RefrigProps const *refrig) { return refrig->Name == refrigName; }); if (found == df->refrigs.end()) return 0; @@ -4502,7 +4541,8 @@ namespace FluidProperties { return refrigNum; } - RefrigProps *GetRefrig(EnergyPlusData &state, std::string_view const refrigName) { + RefrigProps *GetRefrig(EnergyPlusData &state, std::string_view const refrigName) + { auto &df = state.dataFluidProps; int refrigNum = GetRefrigNum(state, refrigName); return (refrigNum > 0) ? df->refrigs(refrigNum) : nullptr; @@ -4521,9 +4561,9 @@ namespace FluidProperties { // This function simply determines the index of the glycol named // in the input variable to this routine within the derived type. auto &df = state.dataFluidProps; - - auto found = std::find_if(df->glycols.begin(), df->glycols.end(), - [glycolName](GlycolProps const *glycol) { return glycol->Name == glycolName; }); + + auto found = + std::find_if(df->glycols.begin(), df->glycols.end(), [glycolName](GlycolProps const *glycol) { return glycol->Name == glycolName; }); if (found == df->glycols.end()) return 0; @@ -4532,7 +4572,8 @@ namespace FluidProperties { return glycolNum; } - GlycolProps *GetGlycol(EnergyPlusData &state, std::string_view const glycolName) { + GlycolProps *GetGlycol(EnergyPlusData &state, std::string_view const glycolName) + { auto &df = state.dataFluidProps; int glycolNum = GetGlycolNum(state, glycolName); return (glycolNum > 0) ? df->glycols(glycolNum) : nullptr; @@ -4541,9 +4582,10 @@ namespace FluidProperties { int GetGlycolRawNum(EnergyPlusData &state, std::string_view const glycolRawName) // carries in substance name { auto &df = state.dataFluidProps; - - auto found = std::find_if(df->glycolsRaw.begin(), df->glycolsRaw.end(), - [glycolRawName](GlycolRawProps const *glycolRaw) { return glycolRaw->Name == glycolRawName; }); + + auto found = std::find_if(df->glycolsRaw.begin(), df->glycolsRaw.end(), [glycolRawName](GlycolRawProps const *glycolRaw) { + return glycolRaw->Name == glycolRawName; + }); if (found == df->glycolsRaw.end()) return 0; @@ -4551,12 +4593,13 @@ namespace FluidProperties { return glycolRawNum; } - GlycolRawProps *GetGlycolRaw(EnergyPlusData &state, std::string_view const glycolRawName) { + GlycolRawProps *GetGlycolRaw(EnergyPlusData &state, std::string_view const glycolRawName) + { auto &df = state.dataFluidProps; int glycolRawNum = GetGlycolRawNum(state, glycolRawName); return (glycolRawNum > 0) ? df->glycolsRaw(glycolRawNum) : nullptr; } - + //***************************************************************************** std::string GetGlycolNameByIndex(EnergyPlusData &state, int const Idx) // carries in substance index @@ -4725,7 +4768,7 @@ namespace FluidProperties { Real64 ReturnValue; auto &df = state.dataFluidProps; - + // error counters and dummy string bool ErrorFlag(false); // error flag for current call @@ -4778,7 +4821,7 @@ namespace FluidProperties { //***************************************************************************** bool CheckFluidPropertyName(EnergyPlusData &state, - std::string const &name) // Name from input(?) to be checked against valid FluidPropertyNames + std::string const &name) // Name from input(?) to be checked against valid FluidPropertyNames { // FUNCTION INFORMATION: @@ -4788,11 +4831,11 @@ namespace FluidProperties { // PURPOSE OF THIS FUNCTION: // This function checks on an input fluid property to make sure it is valid. auto &df = state.dataFluidProps; - - auto foundRefrig = std::find_if(df->refrigs.begin(), df->refrigs.end(), [name](RefrigProps const *refrig){ return refrig->Name == name; }); + + auto foundRefrig = std::find_if(df->refrigs.begin(), df->refrigs.end(), [name](RefrigProps const *refrig) { return refrig->Name == name; }); if (foundRefrig != df->refrigs.end()) return true; - auto foundGlycol = std::find_if(df->glycols.begin(), df->glycols.end(), [name](GlycolProps const *glycol){ return glycol->Name == name; }); + auto foundGlycol = std::find_if(df->glycols.begin(), df->glycols.end(), [name](GlycolProps const *glycol) { return glycol->Name == name; }); if (foundGlycol != df->glycols.end()) return true; return false; @@ -4813,7 +4856,7 @@ namespace FluidProperties { int NumUnusedRefrig = 0; auto &df = state.dataFluidProps; - + for (auto const *refrig : df->refrigs) { if (refrig->used) continue; if (refrig->Name == "STEAM") continue; @@ -4855,7 +4898,6 @@ namespace FluidProperties { } } - void GetFluidDensityTemperatureLimits(EnergyPlusData &state, int const FluidIndex, Real64 &MinTempLimit, Real64 &MaxTempLimit) { if (FluidIndex > 0) { @@ -4944,1944 +4986,1961 @@ namespace FluidProperties { #ifdef UNUSED_FLUID_PROPS static constexpr std::array, DefaultNumSteamSuperheatedPressure> - DefaultSteamSuperheatedEnthalpyDataTable = { - {{2501000.0, 2503000.0, 2510000.0, 2520000.0, 2529000.0, 2538000.0, 2548000.0, 2557000.0, 2566000.0, 2576000.0, 2585000.0, 2595000.0, - 2604000.0, 2613000.0, 2623000.0, 2632000.0, 2636000.0, 2640000.0, 2643000.0, 2647000.0, 2651000.0, 2655000.0, 2658000.0, 2662000.0, - 2666000.0, 2670000.0, 2673000.0, 2677000.0, 2681000.0, 2685000.0, 2687000.0, 2689000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, - 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, - 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, 2740000.0, 2742000.0, - 2744000.0, 2746000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2768000.0, 2772000.0, 2776000.0, 2780000.0, 2784000.0, - 2788000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2811000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, 2830000.0, - 2834000.0, 2837000.0, 2841000.0, 2851000.0, 2861000.0, 2870000.0, 2880000.0, 2890000.0, 2899000.0, 2909000.0, 2919000.0, 2929000.0, - 2938000.0, 2958000.0, 2978000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0, - 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, - {0.0, 2503000.0, 2510000.0, 2520000.0, 2529000.0, 2538000.0, 2548000.0, 2557000.0, 2566000.0, 2576000.0, 2585000.0, 2595000.0, - 2604000.0, 2613000.0, 2623000.0, 2632000.0, 2636000.0, 2640000.0, 2643000.0, 2647000.0, 2651000.0, 2655000.0, 2658000.0, 2662000.0, - 2666000.0, 2670000.0, 2673000.0, 2677000.0, 2681000.0, 2685000.0, 2687000.0, 2689000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, - 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, - 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, 2740000.0, 2742000.0, - 2744000.0, 2746000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2768000.0, 2772000.0, 2776000.0, 2780000.0, 2784000.0, - 2788000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2811000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, 2830000.0, - 2834000.0, 2837000.0, 2841000.0, 2851000.0, 2861000.0, 2870000.0, 2880000.0, 2890000.0, 2899000.0, 2909000.0, 2919000.0, 2929000.0, - 2938000.0, 2958000.0, 2978000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0, - 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, - {0.0, 0.0, 2510000.0, 2519000.0, 2529000.0, 2538000.0, 2548000.0, 2557000.0, 2566000.0, 2576000.0, 2585000.0, 2594000.0, - 2604000.0, 2613000.0, 2623000.0, 2632000.0, 2636000.0, 2640000.0, 2643000.0, 2647000.0, 2651000.0, 2655000.0, 2658000.0, 2662000.0, - 2666000.0, 2670000.0, 2673000.0, 2677000.0, 2681000.0, 2685000.0, 2687000.0, 2689000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, - 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, - 2721000.0, 2723000.0, 2725000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, 2740000.0, 2742000.0, - 2744000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2768000.0, 2772000.0, 2776000.0, 2780000.0, 2784000.0, - 2788000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2811000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, 2830000.0, - 2834000.0, 2837000.0, 2841000.0, 2851000.0, 2861000.0, 2870000.0, 2880000.0, 2890000.0, 2899000.0, 2909000.0, 2919000.0, 2929000.0, - 2938000.0, 2958000.0, 2978000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0, - 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, - {0.0, 0.0, 0.0, 2519000.0, 2529000.0, 2538000.0, 2547000.0, 2557000.0, 2566000.0, 2576000.0, 2585000.0, 2594000.0, - 2604000.0, 2613000.0, 2623000.0, 2632000.0, 2636000.0, 2639000.0, 2643000.0, 2647000.0, 2651000.0, 2655000.0, 2658000.0, 2662000.0, - 2666000.0, 2670000.0, 2673000.0, 2677000.0, 2681000.0, 2685000.0, 2687000.0, 2689000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, - 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, - 2721000.0, 2723000.0, 2725000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, 2740000.0, 2742000.0, - 2744000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2768000.0, 2772000.0, 2776000.0, 2780000.0, 2784000.0, - 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, 2830000.0, - 2834000.0, 2837000.0, 2841000.0, 2851000.0, 2861000.0, 2870000.0, 2880000.0, 2890000.0, 2899000.0, 2909000.0, 2919000.0, 2929000.0, - 2938000.0, 2958000.0, 2978000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0, - 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, - {0.0, 0.0, 0.0, 0.0, 2528000.0, 2538000.0, 2547000.0, 2557000.0, 2566000.0, 2575000.0, 2585000.0, 2594000.0, - 2604000.0, 2613000.0, 2622000.0, 2632000.0, 2636000.0, 2639000.0, 2643000.0, 2647000.0, 2651000.0, 2654000.0, 2658000.0, 2662000.0, - 2666000.0, 2670000.0, 2673000.0, 2677000.0, 2681000.0, 2685000.0, 2687000.0, 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, - 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, - 2721000.0, 2723000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, 2740000.0, 2742000.0, - 2744000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2764000.0, 2768000.0, 2772000.0, 2776000.0, 2780000.0, 2784000.0, - 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, 2830000.0, - 2834000.0, 2837000.0, 2841000.0, 2851000.0, 2861000.0, 2870000.0, 2880000.0, 2890000.0, 2899000.0, 2909000.0, 2919000.0, 2929000.0, - 2938000.0, 2958000.0, 2978000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0, - 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 2537000.0, 2547000.0, 2556000.0, 2566000.0, 2575000.0, 2585000.0, 2594000.0, - 2603000.0, 2613000.0, 2622000.0, 2632000.0, 2635000.0, 2639000.0, 2643000.0, 2647000.0, 2651000.0, 2654000.0, 2658000.0, 2662000.0, - 2666000.0, 2669000.0, 2673000.0, 2677000.0, 2681000.0, 2685000.0, 2687000.0, 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, - 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, - 2721000.0, 2723000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, 2740000.0, 2742000.0, - 2743000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2764000.0, 2768000.0, 2772000.0, 2776000.0, 2780000.0, 2784000.0, - 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, 2830000.0, - 2834000.0, 2837000.0, 2841000.0, 2851000.0, 2861000.0, 2870000.0, 2880000.0, 2890000.0, 2899000.0, 2909000.0, 2919000.0, 2929000.0, - 2938000.0, 2958000.0, 2978000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0, - 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2547000.0, 2556000.0, 2566000.0, 2575000.0, 2584000.0, 2594000.0, - 2603000.0, 2613000.0, 2622000.0, 2632000.0, 2635000.0, 2639000.0, 2643000.0, 2647000.0, 2650000.0, 2654000.0, 2658000.0, 2662000.0, - 2666000.0, 2669000.0, 2673000.0, 2677000.0, 2681000.0, 2685000.0, 2686000.0, 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, - 2698000.0, 2700000.0, 2702000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, - 2721000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, 2740000.0, 2741000.0, - 2743000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2764000.0, 2768000.0, 2772000.0, 2776000.0, 2780000.0, 2784000.0, - 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, 2830000.0, - 2833000.0, 2837000.0, 2841000.0, 2851000.0, 2861000.0, 2870000.0, 2880000.0, 2890000.0, 2899000.0, 2909000.0, 2919000.0, 2929000.0, - 2938000.0, 2958000.0, 2978000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0, - 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2556000.0, 2565000.0, 2575000.0, 2584000.0, 2594000.0, - 2603000.0, 2612000.0, 2622000.0, 2631000.0, 2635000.0, 2639000.0, 2643000.0, 2646000.0, 2650000.0, 2654000.0, 2658000.0, 2662000.0, - 2665000.0, 2669000.0, 2673000.0, 2677000.0, 2681000.0, 2684000.0, 2686000.0, 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, - 2698000.0, 2700000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, - 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, 2739000.0, 2741000.0, - 2743000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2760000.0, 2764000.0, 2768000.0, 2772000.0, 2776000.0, 2780000.0, 2783000.0, - 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, 2830000.0, - 2833000.0, 2837000.0, 2841000.0, 2851000.0, 2860000.0, 2870000.0, 2880000.0, 2890000.0, 2899000.0, 2909000.0, 2919000.0, 2929000.0, - 2938000.0, 2958000.0, 2978000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0, - 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2565000.0, 2574000.0, 2584000.0, 2593000.0, - 2603000.0, 2612000.0, 2622000.0, 2631000.0, 2635000.0, 2639000.0, 2642000.0, 2646000.0, 2650000.0, 2654000.0, 2658000.0, 2661000.0, - 2665000.0, 2669000.0, 2673000.0, 2677000.0, 2680000.0, 2684000.0, 2686000.0, 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, - 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2718000.0, - 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2737000.0, 2739000.0, 2741000.0, - 2743000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2760000.0, 2764000.0, 2768000.0, 2772000.0, 2776000.0, 2780000.0, 2783000.0, - 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, 2829000.0, - 2833000.0, 2837000.0, 2841000.0, 2851000.0, 2860000.0, 2870000.0, 2880000.0, 2890000.0, 2899000.0, 2909000.0, 2919000.0, 2929000.0, - 2938000.0, 2958000.0, 2978000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0, - 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2574000.0, 2583000.0, 2593000.0, - 2602000.0, 2612000.0, 2621000.0, 2631000.0, 2635000.0, 2638000.0, 2642000.0, 2646000.0, 2650000.0, 2654000.0, 2657000.0, 2661000.0, - 2665000.0, 2669000.0, 2673000.0, 2676000.0, 2680000.0, 2684000.0, 2686000.0, 2688000.0, 2690000.0, 2692000.0, 2693000.0, 2695000.0, - 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2714000.0, 2716000.0, 2718000.0, - 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2733000.0, 2735000.0, 2737000.0, 2739000.0, 2741000.0, - 2743000.0, 2745000.0, 2749000.0, 2753000.0, 2756000.0, 2760000.0, 2764000.0, 2768000.0, 2772000.0, 2776000.0, 2779000.0, 2783000.0, - 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, 2829000.0, - 2833000.0, 2837000.0, 2841000.0, 2851000.0, 2860000.0, 2870000.0, 2880000.0, 2889000.0, 2899000.0, 2909000.0, 2919000.0, 2928000.0, - 2938000.0, 2958000.0, 2978000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0, - 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2582000.0, 2592000.0, - 2602000.0, 2611000.0, 2621000.0, 2630000.0, 2634000.0, 2638000.0, 2642000.0, 2646000.0, 2649000.0, 2653000.0, 2657000.0, 2661000.0, - 2665000.0, 2668000.0, 2672000.0, 2676000.0, 2680000.0, 2684000.0, 2686000.0, 2688000.0, 2689000.0, 2691000.0, 2693000.0, 2695000.0, - 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2708000.0, 2710000.0, 2712000.0, 2714000.0, 2716000.0, 2718000.0, - 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2729000.0, 2731000.0, 2733000.0, 2735000.0, 2737000.0, 2739000.0, 2741000.0, - 2743000.0, 2745000.0, 2749000.0, 2752000.0, 2756000.0, 2760000.0, 2764000.0, 2768000.0, 2772000.0, 2775000.0, 2779000.0, 2783000.0, - 2787000.0, 2791000.0, 2795000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, 2825000.0, 2829000.0, - 2833000.0, 2837000.0, 2841000.0, 2851000.0, 2860000.0, 2870000.0, 2880000.0, 2889000.0, 2899000.0, 2909000.0, 2919000.0, 2928000.0, - 2938000.0, 2958000.0, 2977000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0, - 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2591000.0, - 2601000.0, 2611000.0, 2620000.0, 2630000.0, 2634000.0, 2637000.0, 2641000.0, 2645000.0, 2649000.0, 2653000.0, 2657000.0, 2660000.0, - 2664000.0, 2668000.0, 2672000.0, 2676000.0, 2680000.0, 2683000.0, 2685000.0, 2687000.0, 2689000.0, 2691000.0, 2693000.0, 2695000.0, - 2697000.0, 2699000.0, 2701000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2710000.0, 2712000.0, 2714000.0, 2716000.0, 2718000.0, - 2720000.0, 2722000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2733000.0, 2735000.0, 2737000.0, 2739000.0, 2741000.0, - 2743000.0, 2745000.0, 2748000.0, 2752000.0, 2756000.0, 2760000.0, 2764000.0, 2768000.0, 2771000.0, 2775000.0, 2779000.0, 2783000.0, - 2787000.0, 2791000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, 2821000.0, 2825000.0, 2829000.0, - 2833000.0, 2837000.0, 2841000.0, 2850000.0, 2860000.0, 2870000.0, 2879000.0, 2889000.0, 2899000.0, 2909000.0, 2918000.0, 2928000.0, - 2938000.0, 2958000.0, 2977000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0, - 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 2600000.0, 2610000.0, 2620000.0, 2629000.0, 2633000.0, 2637000.0, 2641000.0, 2645000.0, 2648000.0, 2652000.0, 2656000.0, 2660000.0, - 2664000.0, 2668000.0, 2671000.0, 2675000.0, 2679000.0, 2683000.0, 2685000.0, 2687000.0, 2689000.0, 2691000.0, 2692000.0, 2694000.0, - 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2710000.0, 2712000.0, 2714000.0, 2715000.0, 2717000.0, - 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2733000.0, 2735000.0, 2737000.0, 2738000.0, 2740000.0, - 2742000.0, 2744000.0, 2748000.0, 2752000.0, 2756000.0, 2760000.0, 2763000.0, 2767000.0, 2771000.0, 2775000.0, 2779000.0, 2783000.0, - 2786000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2813000.0, 2817000.0, 2821000.0, 2825000.0, 2829000.0, - 2833000.0, 2837000.0, 2841000.0, 2850000.0, 2860000.0, 2870000.0, 2879000.0, 2889000.0, 2899000.0, 2909000.0, 2918000.0, 2928000.0, - 2938000.0, 2958000.0, 2977000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0, - 3177000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 2609000.0, 2619000.0, 2628000.0, 2632000.0, 2636000.0, 2640000.0, 2644000.0, 2648000.0, 2652000.0, 2655000.0, 2659000.0, - 2663000.0, 2667000.0, 2671000.0, 2675000.0, 2679000.0, 2682000.0, 2684000.0, 2686000.0, 2688000.0, 2690000.0, 2692000.0, 2694000.0, - 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, - 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, 2740000.0, - 2742000.0, 2744000.0, 2748000.0, 2752000.0, 2755000.0, 2759000.0, 2763000.0, 2767000.0, 2771000.0, 2775000.0, 2778000.0, 2782000.0, - 2786000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2805000.0, 2809000.0, 2813000.0, 2817000.0, 2821000.0, 2825000.0, 2829000.0, - 2833000.0, 2836000.0, 2840000.0, 2850000.0, 2860000.0, 2869000.0, 2879000.0, 2889000.0, 2899000.0, 2908000.0, 2918000.0, 2928000.0, - 2938000.0, 2957000.0, 2977000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3076000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0, - 3177000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 2618000.0, 2627000.0, 2631000.0, 2635000.0, 2639000.0, 2643000.0, 2647000.0, 2651000.0, 2655000.0, 2659000.0, - 2662000.0, 2666000.0, 2670000.0, 2674000.0, 2678000.0, 2682000.0, 2684000.0, 2686000.0, 2688000.0, 2689000.0, 2691000.0, 2693000.0, - 2695000.0, 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2716000.0, - 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, 2740000.0, - 2741000.0, 2743000.0, 2747000.0, 2751000.0, 2755000.0, 2759000.0, 2763000.0, 2767000.0, 2770000.0, 2774000.0, 2778000.0, 2782000.0, - 2786000.0, 2790000.0, 2794000.0, 2797000.0, 2801000.0, 2805000.0, 2809000.0, 2813000.0, 2817000.0, 2821000.0, 2825000.0, 2828000.0, - 2832000.0, 2836000.0, 2840000.0, 2850000.0, 2859000.0, 2869000.0, 2879000.0, 2889000.0, 2898000.0, 2908000.0, 2918000.0, 2928000.0, - 2938000.0, 2957000.0, 2977000.0, 2997000.0, 3017000.0, 3036000.0, 3056000.0, 3076000.0, 3096000.0, 3117000.0, 3137000.0, 3157000.0, - 3177000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 2626000.0, 2630000.0, 2634000.0, 2638000.0, 2642000.0, 2646000.0, 2650000.0, 2654000.0, 2658000.0, - 2661000.0, 2665000.0, 2669000.0, 2673000.0, 2677000.0, 2681000.0, 2683000.0, 2685000.0, 2687000.0, 2689000.0, 2691000.0, 2693000.0, - 2695000.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2710000.0, 2712000.0, 2714000.0, 2716000.0, - 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2733000.0, 2735000.0, 2737000.0, 2739000.0, - 2741000.0, 2743000.0, 2747000.0, 2751000.0, 2754000.0, 2758000.0, 2762000.0, 2766000.0, 2770000.0, 2774000.0, 2778000.0, 2782000.0, - 2785000.0, 2789000.0, 2793000.0, 2797000.0, 2801000.0, 2805000.0, 2809000.0, 2813000.0, 2816000.0, 2820000.0, 2824000.0, 2828000.0, - 2832000.0, 2836000.0, 2840000.0, 2849000.0, 2859000.0, 2869000.0, 2879000.0, 2888000.0, 2898000.0, 2908000.0, 2918000.0, 2928000.0, - 2937000.0, 2957000.0, 2977000.0, 2997000.0, 3016000.0, 3036000.0, 3056000.0, 3076000.0, 3096000.0, 3116000.0, 3137000.0, 3157000.0, - 3177000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3489000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 2630000.0, 2633000.0, 2637000.0, 2641000.0, 2645000.0, 2649000.0, 2653000.0, 2657000.0, - 2661000.0, 2665000.0, 2669000.0, 2673000.0, 2677000.0, 2681000.0, 2683000.0, 2684000.0, 2686000.0, 2688000.0, 2690000.0, 2692000.0, - 2694000.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2710000.0, 2712000.0, 2714000.0, 2716000.0, - 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2733000.0, 2735000.0, 2737000.0, 2739000.0, - 2741000.0, 2743000.0, 2747000.0, 2750000.0, 2754000.0, 2758000.0, 2762000.0, 2766000.0, 2770000.0, 2774000.0, 2777000.0, 2781000.0, - 2785000.0, 2789000.0, 2793000.0, 2797000.0, 2801000.0, 2805000.0, 2808000.0, 2812000.0, 2816000.0, 2820000.0, 2824000.0, 2828000.0, - 2832000.0, 2836000.0, 2840000.0, 2849000.0, 2859000.0, 2869000.0, 2879000.0, 2888000.0, 2898000.0, 2908000.0, 2918000.0, 2927000.0, - 2937000.0, 2957000.0, 2977000.0, 2996000.0, 3016000.0, 3036000.0, 3056000.0, 3076000.0, 3096000.0, 3116000.0, 3137000.0, 3157000.0, - 3177000.0, 3197000.0, 3218000.0, 3280000.0, 3384000.0, 3489000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 2633000.0, 2637000.0, 2641000.0, 2645000.0, 2649000.0, 2653000.0, 2657000.0, - 2661000.0, 2665000.0, 2668000.0, 2672000.0, 2676000.0, 2680000.0, 2682000.0, 2684000.0, 2686000.0, 2688000.0, 2690000.0, 2692000.0, - 2694000.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, - 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2733000.0, 2735000.0, 2737000.0, 2738000.0, - 2740000.0, 2742000.0, 2746000.0, 2750000.0, 2754000.0, 2758000.0, 2762000.0, 2766000.0, 2770000.0, 2773000.0, 2777000.0, 2781000.0, - 2785000.0, 2789000.0, 2793000.0, 2797000.0, 2801000.0, 2804000.0, 2808000.0, 2812000.0, 2816000.0, 2820000.0, 2824000.0, 2828000.0, - 2832000.0, 2835000.0, 2839000.0, 2849000.0, 2859000.0, 2869000.0, 2878000.0, 2888000.0, 2898000.0, 2908000.0, 2918000.0, 2927000.0, - 2937000.0, 2957000.0, 2977000.0, 2996000.0, 3016000.0, 3036000.0, 3056000.0, 3076000.0, 3096000.0, 3116000.0, 3136000.0, 3157000.0, - 3177000.0, 3197000.0, 3218000.0, 3280000.0, 3384000.0, 3489000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2636000.0, 2640000.0, 2644000.0, 2648000.0, 2652000.0, 2656000.0, - 2660000.0, 2664000.0, 2668000.0, 2672000.0, 2676000.0, 2680000.0, 2682000.0, 2684000.0, 2686000.0, 2688000.0, 2690000.0, 2691000.0, - 2693000.0, 2695000.0, 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, - 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, - 2740000.0, 2742000.0, 2746000.0, 2750000.0, 2754000.0, 2758000.0, 2762000.0, 2765000.0, 2769000.0, 2773000.0, 2777000.0, 2781000.0, - 2785000.0, 2789000.0, 2793000.0, 2796000.0, 2800000.0, 2804000.0, 2808000.0, 2812000.0, 2816000.0, 2820000.0, 2824000.0, 2828000.0, - 2831000.0, 2835000.0, 2839000.0, 2849000.0, 2859000.0, 2868000.0, 2878000.0, 2888000.0, 2898000.0, 2908000.0, 2917000.0, 2927000.0, - 2937000.0, 2957000.0, 2976000.0, 2996000.0, 3016000.0, 3036000.0, 3056000.0, 3076000.0, 3096000.0, 3116000.0, 3136000.0, 3157000.0, - 3177000.0, 3197000.0, 3218000.0, 3280000.0, 3384000.0, 3489000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2640000.0, 2644000.0, 2648000.0, 2652000.0, 2656000.0, - 2660000.0, 2664000.0, 2667000.0, 2671000.0, 2675000.0, 2679000.0, 2681000.0, 2683000.0, 2685000.0, 2687000.0, 2689000.0, 2691000.0, - 2693000.0, 2695000.0, 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, - 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, - 2740000.0, 2742000.0, 2746000.0, 2750000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2769000.0, 2773000.0, 2777000.0, 2781000.0, - 2785000.0, 2788000.0, 2792000.0, 2796000.0, 2800000.0, 2804000.0, 2808000.0, 2812000.0, 2816000.0, 2820000.0, 2823000.0, 2827000.0, - 2831000.0, 2835000.0, 2839000.0, 2849000.0, 2859000.0, 2868000.0, 2878000.0, 2888000.0, 2898000.0, 2907000.0, 2917000.0, 2927000.0, - 2937000.0, 2957000.0, 2976000.0, 2996000.0, 3016000.0, 3036000.0, 3056000.0, 3076000.0, 3096000.0, 3116000.0, 3136000.0, 3157000.0, - 3177000.0, 3197000.0, 3218000.0, 3280000.0, 3384000.0, 3489000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2643000.0, 2647000.0, 2651000.0, 2655000.0, - 2659000.0, 2663000.0, 2667000.0, 2671000.0, 2675000.0, 2679000.0, 2681000.0, 2683000.0, 2685000.0, 2687000.0, 2689000.0, 2691000.0, - 2693000.0, 2695000.0, 2697000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2710000.0, 2712000.0, 2714000.0, - 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, - 2740000.0, 2741000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2769000.0, 2773000.0, 2777000.0, 2780000.0, - 2784000.0, 2788000.0, 2792000.0, 2796000.0, 2800000.0, 2804000.0, 2808000.0, 2812000.0, 2815000.0, 2819000.0, 2823000.0, 2827000.0, - 2831000.0, 2835000.0, 2839000.0, 2849000.0, 2858000.0, 2868000.0, 2878000.0, 2888000.0, 2897000.0, 2907000.0, 2917000.0, 2927000.0, - 2937000.0, 2956000.0, 2976000.0, 2996000.0, 3016000.0, 3036000.0, 3056000.0, 3076000.0, 3096000.0, 3116000.0, 3136000.0, 3157000.0, - 3177000.0, 3197000.0, 3218000.0, 3280000.0, 3384000.0, 3489000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2646000.0, 2650000.0, 2654000.0, - 2658000.0, 2662000.0, 2666000.0, 2670000.0, 2674000.0, 2678000.0, 2680000.0, 2682000.0, 2684000.0, 2686000.0, 2688000.0, 2690000.0, - 2692000.0, 2694000.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2710000.0, 2712000.0, 2714000.0, - 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2733000.0, 2735000.0, 2737000.0, - 2739000.0, 2741000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2768000.0, 2772000.0, 2776000.0, 2780000.0, - 2784000.0, 2788000.0, 2792000.0, 2796000.0, 2800000.0, 2804000.0, 2807000.0, 2811000.0, 2815000.0, 2819000.0, 2823000.0, 2827000.0, - 2831000.0, 2835000.0, 2839000.0, 2848000.0, 2858000.0, 2868000.0, 2878000.0, 2887000.0, 2897000.0, 2907000.0, 2917000.0, 2927000.0, - 2937000.0, 2956000.0, 2976000.0, 2996000.0, 3016000.0, 3036000.0, 3056000.0, 3076000.0, 3096000.0, 3116000.0, 3136000.0, 3156000.0, - 3177000.0, 3197000.0, 3218000.0, 3280000.0, 3383000.0, 3489000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2650000.0, 2654000.0, - 2658000.0, 2662000.0, 2666000.0, 2670000.0, 2674000.0, 2678000.0, 2680000.0, 2682000.0, 2684000.0, 2686000.0, 2688000.0, 2690000.0, - 2692000.0, 2694000.0, 2696000.0, 2698000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, - 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2733000.0, 2735000.0, 2737000.0, - 2739000.0, 2741000.0, 2745000.0, 2749000.0, 2752000.0, 2756000.0, 2760000.0, 2764000.0, 2768000.0, 2772000.0, 2776000.0, 2780000.0, - 2784000.0, 2788000.0, 2792000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2811000.0, 2815000.0, 2819000.0, 2823000.0, 2827000.0, - 2831000.0, 2834000.0, 2838000.0, 2848000.0, 2858000.0, 2868000.0, 2878000.0, 2887000.0, 2897000.0, 2907000.0, 2917000.0, 2927000.0, - 2936000.0, 2956000.0, 2976000.0, 2996000.0, 3016000.0, 3036000.0, 3056000.0, 3076000.0, 3096000.0, 3116000.0, 3136000.0, 3156000.0, - 3177000.0, 3197000.0, 3218000.0, 3280000.0, 3383000.0, 3489000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2653000.0, - 2657000.0, 2661000.0, 2665000.0, 2669000.0, 2673000.0, 2677000.0, 2679000.0, 2681000.0, 2683000.0, 2685000.0, 2687000.0, 2689000.0, - 2691000.0, 2693000.0, 2695000.0, 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, - 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2732000.0, 2734000.0, 2736000.0, - 2738000.0, 2740000.0, 2744000.0, 2748000.0, 2752000.0, 2756000.0, 2760000.0, 2764000.0, 2768000.0, 2772000.0, 2776000.0, 2779000.0, - 2783000.0, 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2811000.0, 2815000.0, 2819000.0, 2822000.0, 2826000.0, - 2830000.0, 2834000.0, 2838000.0, 2848000.0, 2858000.0, 2867000.0, 2877000.0, 2887000.0, 2897000.0, 2907000.0, 2917000.0, 2926000.0, - 2936000.0, 2956000.0, 2976000.0, 2996000.0, 3016000.0, 3035000.0, 3055000.0, 3076000.0, 3096000.0, 3116000.0, 3136000.0, 3156000.0, - 3177000.0, 3197000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 2656000.0, 2660000.0, 2664000.0, 2668000.0, 2672000.0, 2676000.0, 2678000.0, 2680000.0, 2682000.0, 2684000.0, 2686000.0, 2688000.0, - 2690000.0, 2692000.0, 2694000.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2710000.0, 2712000.0, - 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, - 2738000.0, 2740000.0, 2744000.0, 2748000.0, 2752000.0, 2756000.0, 2760000.0, 2763000.0, 2767000.0, 2771000.0, 2775000.0, 2779000.0, - 2783000.0, 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, - 2830000.0, 2834000.0, 2838000.0, 2848000.0, 2857000.0, 2867000.0, 2877000.0, 2887000.0, 2897000.0, 2907000.0, 2916000.0, 2926000.0, - 2936000.0, 2956000.0, 2976000.0, 2996000.0, 3015000.0, 3035000.0, 3055000.0, 3075000.0, 3095000.0, 3116000.0, 3136000.0, 3156000.0, - 3176000.0, 3197000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 2660000.0, 2664000.0, 2668000.0, 2672000.0, 2676000.0, 2678000.0, 2680000.0, 2682000.0, 2684000.0, 2686000.0, 2688000.0, - 2690000.0, 2692000.0, 2694000.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2710000.0, 2712000.0, - 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2735000.0, - 2737000.0, 2739000.0, 2743000.0, 2747000.0, 2751000.0, 2755000.0, 2759000.0, 2763000.0, 2767000.0, 2771000.0, 2775000.0, 2779000.0, - 2783000.0, 2787000.0, 2791000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, - 2830000.0, 2834000.0, 2838000.0, 2847000.0, 2857000.0, 2867000.0, 2877000.0, 2887000.0, 2896000.0, 2906000.0, 2916000.0, 2926000.0, - 2936000.0, 2956000.0, 2975000.0, 2995000.0, 3015000.0, 3035000.0, 3055000.0, 3075000.0, 3095000.0, 3116000.0, 3136000.0, 3156000.0, - 3176000.0, 3197000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 2663000.0, 2667000.0, 2671000.0, 2675000.0, 2677000.0, 2679000.0, 2681000.0, 2683000.0, 2685000.0, 2687000.0, - 2689000.0, 2691000.0, 2693000.0, 2695000.0, 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, - 2713000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2733000.0, 2735000.0, - 2737000.0, 2739000.0, 2743000.0, 2747000.0, 2751000.0, 2755000.0, 2759000.0, 2763000.0, 2767000.0, 2771000.0, 2774000.0, 2778000.0, - 2782000.0, 2786000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, - 2829000.0, 2833000.0, 2837000.0, 2847000.0, 2857000.0, 2867000.0, 2877000.0, 2886000.0, 2896000.0, 2906000.0, 2916000.0, 2926000.0, - 2936000.0, 2955000.0, 2975000.0, 2995000.0, 3015000.0, 3035000.0, 3055000.0, 3075000.0, 3095000.0, 3115000.0, 3136000.0, 3156000.0, - 3176000.0, 3197000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 2666000.0, 2670000.0, 2674000.0, 2676000.0, 2678000.0, 2680000.0, 2682000.0, 2684000.0, 2686000.0, - 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, - 2713000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, - 2736000.0, 2738000.0, 2742000.0, 2746000.0, 2750000.0, 2754000.0, 2758000.0, 2762000.0, 2766000.0, 2770000.0, 2774000.0, 2778000.0, - 2782000.0, 2786000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2809000.0, 2813000.0, 2817000.0, 2821000.0, 2825000.0, - 2829000.0, 2833000.0, 2837000.0, 2847000.0, 2857000.0, 2866000.0, 2876000.0, 2886000.0, 2896000.0, 2906000.0, 2916000.0, 2926000.0, - 2935000.0, 2955000.0, 2975000.0, 2995000.0, 3015000.0, 3035000.0, 3055000.0, 3075000.0, 3095000.0, 3115000.0, 3136000.0, 3156000.0, - 3176000.0, 3197000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 2669000.0, 2673000.0, 2675000.0, 2677000.0, 2679000.0, 2682000.0, 2684000.0, 2686000.0, - 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2710000.0, - 2712000.0, 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, - 2736000.0, 2738000.0, 2742000.0, 2746000.0, 2750000.0, 2754000.0, 2758000.0, 2762000.0, 2766000.0, 2770000.0, 2774000.0, 2777000.0, - 2781000.0, 2785000.0, 2789000.0, 2793000.0, 2797000.0, 2801000.0, 2805000.0, 2809000.0, 2813000.0, 2817000.0, 2821000.0, 2825000.0, - 2829000.0, 2833000.0, 2837000.0, 2846000.0, 2856000.0, 2866000.0, 2876000.0, 2886000.0, 2896000.0, 2906000.0, 2915000.0, 2925000.0, - 2935000.0, 2955000.0, 2975000.0, 2995000.0, 3015000.0, 3035000.0, 3055000.0, 3075000.0, 3095000.0, 3115000.0, 3135000.0, 3156000.0, - 3176000.0, 3196000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 2672000.0, 2674000.0, 2677000.0, 2679000.0, 2681000.0, 2683000.0, 2685000.0, - 2687000.0, 2689000.0, 2691000.0, 2693000.0, 2695000.0, 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, - 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2733000.0, - 2735000.0, 2737000.0, 2741000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2769000.0, 2773000.0, 2777000.0, - 2781000.0, 2785000.0, 2789000.0, 2793000.0, 2797000.0, 2801000.0, 2805000.0, 2809000.0, 2813000.0, 2817000.0, 2820000.0, 2824000.0, - 2828000.0, 2832000.0, 2836000.0, 2846000.0, 2856000.0, 2866000.0, 2876000.0, 2886000.0, 2895000.0, 2905000.0, 2915000.0, 2925000.0, - 2935000.0, 2955000.0, 2975000.0, 2995000.0, 3015000.0, 3035000.0, 3055000.0, 3075000.0, 3095000.0, 3115000.0, 3135000.0, 3156000.0, - 3176000.0, 3196000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2674000.0, 2676000.0, 2678000.0, 2680000.0, 2682000.0, 2684000.0, - 2686000.0, 2688000.0, 2690000.0, 2693000.0, 2695000.0, 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, - 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2733000.0, - 2735000.0, 2737000.0, 2741000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2769000.0, 2773000.0, 2777000.0, - 2781000.0, 2785000.0, 2789000.0, 2793000.0, 2797000.0, 2801000.0, 2804000.0, 2808000.0, 2812000.0, 2816000.0, 2820000.0, 2824000.0, - 2828000.0, 2832000.0, 2836000.0, 2846000.0, 2856000.0, 2866000.0, 2876000.0, 2885000.0, 2895000.0, 2905000.0, 2915000.0, 2925000.0, - 2935000.0, 2955000.0, 2975000.0, 2994000.0, 3014000.0, 3034000.0, 3054000.0, 3075000.0, 3095000.0, 3115000.0, 3135000.0, 3156000.0, - 3176000.0, 3196000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2676000.0, 2678000.0, 2680000.0, 2682000.0, 2684000.0, - 2686000.0, 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, - 2710000.0, 2712000.0, 2714000.0, 2716000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2733000.0, - 2735000.0, 2737000.0, 2741000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2769000.0, 2773000.0, 2776000.0, - 2780000.0, 2784000.0, 2788000.0, 2792000.0, 2796000.0, 2800000.0, 2804000.0, 2808000.0, 2812000.0, 2816000.0, 2820000.0, 2824000.0, - 2828000.0, 2832000.0, 2836000.0, 2846000.0, 2856000.0, 2866000.0, 2875000.0, 2885000.0, 2895000.0, 2905000.0, 2915000.0, 2925000.0, - 2935000.0, 2955000.0, 2974000.0, 2994000.0, 3014000.0, 3034000.0, 3054000.0, 3074000.0, 3095000.0, 3115000.0, 3135000.0, 3155000.0, - 3176000.0, 3196000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2677000.0, 2679000.0, 2681000.0, 2683000.0, - 2685000.0, 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, - 2710000.0, 2712000.0, 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, - 2734000.0, 2736000.0, 2740000.0, 2744000.0, 2748000.0, 2752000.0, 2756000.0, 2760000.0, 2764000.0, 2768000.0, 2772000.0, 2776000.0, - 2780000.0, 2784000.0, 2788000.0, 2792000.0, 2796000.0, 2800000.0, 2804000.0, 2808000.0, 2812000.0, 2816000.0, 2820000.0, 2824000.0, - 2828000.0, 2832000.0, 2836000.0, 2846000.0, 2855000.0, 2865000.0, 2875000.0, 2885000.0, 2895000.0, 2905000.0, 2915000.0, 2925000.0, - 2935000.0, 2954000.0, 2974000.0, 2994000.0, 3014000.0, 3034000.0, 3054000.0, 3074000.0, 3095000.0, 3115000.0, 3135000.0, 3155000.0, - 3176000.0, 3196000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2679000.0, 2681000.0, 2683000.0, - 2685000.0, 2687000.0, 2689000.0, 2691000.0, 2693000.0, 2695000.0, 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2706000.0, 2708000.0, - 2710000.0, 2712000.0, 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, - 2734000.0, 2736000.0, 2740000.0, 2744000.0, 2748000.0, 2752000.0, 2756000.0, 2760000.0, 2764000.0, 2768000.0, 2772000.0, 2776000.0, - 2780000.0, 2784000.0, 2788000.0, 2792000.0, 2796000.0, 2800000.0, 2804000.0, 2808000.0, 2812000.0, 2816000.0, 2820000.0, 2824000.0, - 2828000.0, 2832000.0, 2835000.0, 2845000.0, 2855000.0, 2865000.0, 2875000.0, 2885000.0, 2895000.0, 2905000.0, 2915000.0, 2925000.0, - 2934000.0, 2954000.0, 2974000.0, 2994000.0, 3014000.0, 3034000.0, 3054000.0, 3074000.0, 3094000.0, 3115000.0, 3135000.0, 3155000.0, - 3176000.0, 3196000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2680000.0, 2682000.0, - 2684000.0, 2687000.0, 2689000.0, 2691000.0, 2693000.0, 2695000.0, 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, - 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2730000.0, 2732000.0, - 2734000.0, 2736000.0, 2740000.0, 2744000.0, 2748000.0, 2752000.0, 2756000.0, 2760000.0, 2764000.0, 2768000.0, 2772000.0, 2776000.0, - 2780000.0, 2784000.0, 2788000.0, 2792000.0, 2796000.0, 2800000.0, 2804000.0, 2807000.0, 2811000.0, 2815000.0, 2819000.0, 2823000.0, - 2827000.0, 2831000.0, 2835000.0, 2845000.0, 2855000.0, 2865000.0, 2875000.0, 2885000.0, 2895000.0, 2905000.0, 2914000.0, 2924000.0, - 2934000.0, 2954000.0, 2974000.0, 2994000.0, 3014000.0, 3034000.0, 3054000.0, 3074000.0, 3094000.0, 3115000.0, 3135000.0, 3155000.0, - 3176000.0, 3196000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2682000.0, - 2684000.0, 2686000.0, 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, 2698000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, - 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, - 2733000.0, 2735000.0, 2739000.0, 2743000.0, 2747000.0, 2751000.0, 2755000.0, 2759000.0, 2763000.0, 2767000.0, 2771000.0, 2775000.0, - 2779000.0, 2783000.0, 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2811000.0, 2815000.0, 2819000.0, 2823000.0, - 2827000.0, 2831000.0, 2835000.0, 2845000.0, 2855000.0, 2865000.0, 2875000.0, 2885000.0, 2894000.0, 2904000.0, 2914000.0, 2924000.0, - 2934000.0, 2954000.0, 2974000.0, 2994000.0, 3014000.0, 3034000.0, 3054000.0, 3074000.0, 3094000.0, 3115000.0, 3135000.0, 3155000.0, - 3176000.0, 3196000.0, 3216000.0, 3280000.0, 3383000.0, 3489000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 2683000.0, 2685000.0, 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, - 2708000.0, 2710000.0, 2712000.0, 2714000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, - 2733000.0, 2735000.0, 2739000.0, 2743000.0, 2747000.0, 2751000.0, 2755000.0, 2759000.0, 2763000.0, 2767000.0, 2771000.0, 2775000.0, - 2779000.0, 2783000.0, 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2811000.0, 2815000.0, 2819000.0, 2823000.0, - 2827000.0, 2831000.0, 2835000.0, 2845000.0, 2855000.0, 2865000.0, 2874000.0, 2884000.0, 2894000.0, 2904000.0, 2914000.0, 2924000.0, - 2934000.0, 2954000.0, 2974000.0, 2994000.0, 3014000.0, 3034000.0, 3054000.0, 3074000.0, 3094000.0, 3114000.0, 3135000.0, 3155000.0, - 3175000.0, 3196000.0, 3216000.0, 3280000.0, 3383000.0, 3489000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 2685000.0, 2687000.0, 2689000.0, 2691000.0, 2693000.0, 2695000.0, 2697000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, - 2708000.0, 2710000.0, 2712000.0, 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, - 2732000.0, 2734000.0, 2738000.0, 2743000.0, 2747000.0, 2751000.0, 2755000.0, 2759000.0, 2763000.0, 2767000.0, 2771000.0, 2775000.0, - 2779000.0, 2783000.0, 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2811000.0, 2815000.0, 2819000.0, 2823000.0, - 2827000.0, 2831000.0, 2835000.0, 2844000.0, 2854000.0, 2864000.0, 2874000.0, 2884000.0, 2894000.0, 2904000.0, 2914000.0, 2924000.0, - 2934000.0, 2954000.0, 2974000.0, 2994000.0, 3014000.0, 3034000.0, 3054000.0, 3074000.0, 3094000.0, 3114000.0, 3135000.0, 3155000.0, - 3175000.0, 3196000.0, 3216000.0, 3280000.0, 3383000.0, 3488000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 2686000.0, 2689000.0, 2691000.0, 2693000.0, 2695000.0, 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, - 2707000.0, 2709000.0, 2711000.0, 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, - 2732000.0, 2734000.0, 2738000.0, 2742000.0, 2746000.0, 2750000.0, 2754000.0, 2758000.0, 2762000.0, 2766000.0, 2770000.0, 2774000.0, - 2778000.0, 2782000.0, 2786000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, - 2826000.0, 2830000.0, 2834000.0, 2844000.0, 2854000.0, 2864000.0, 2874000.0, 2884000.0, 2894000.0, 2904000.0, 2914000.0, 2924000.0, - 2934000.0, 2954000.0, 2974000.0, 2994000.0, 3014000.0, 3034000.0, 3054000.0, 3074000.0, 3094000.0, 3114000.0, 3135000.0, 3155000.0, - 3175000.0, 3196000.0, 3216000.0, 3280000.0, 3382000.0, 3488000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, - 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2730000.0, - 2732000.0, 2734000.0, 2738000.0, 2742000.0, 2746000.0, 2750000.0, 2754000.0, 2758000.0, 2762000.0, 2766000.0, 2770000.0, 2774000.0, - 2778000.0, 2782000.0, 2786000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, - 2826000.0, 2830000.0, 2834000.0, 2844000.0, 2854000.0, 2864000.0, 2874000.0, 2884000.0, 2894000.0, 2904000.0, 2914000.0, 2924000.0, - 2934000.0, 2953000.0, 2973000.0, 2993000.0, 3013000.0, 3033000.0, 3054000.0, 3074000.0, 3094000.0, 3114000.0, 3134000.0, 3155000.0, - 3175000.0, 3196000.0, 3216000.0, 3280000.0, 3382000.0, 3488000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, - 2706000.0, 2708000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, - 2731000.0, 2733000.0, 2737000.0, 2741000.0, 2745000.0, 2749000.0, 2754000.0, 2758000.0, 2762000.0, 2766000.0, 2770000.0, 2774000.0, - 2778000.0, 2782000.0, 2786000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, - 2826000.0, 2830000.0, 2834000.0, 2844000.0, 2854000.0, 2864000.0, 2874000.0, 2884000.0, 2894000.0, 2903000.0, 2913000.0, 2923000.0, - 2933000.0, 2953000.0, 2973000.0, 2993000.0, 3013000.0, 3033000.0, 3053000.0, 3074000.0, 3094000.0, 3114000.0, 3134000.0, 3155000.0, - 3175000.0, 3196000.0, 3216000.0, 3280000.0, 3382000.0, 3488000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 2691000.0, 2693000.0, 2695000.0, 2697000.0, 2700000.0, 2702000.0, 2704000.0, - 2706000.0, 2708000.0, 2710000.0, 2712000.0, 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2727000.0, 2729000.0, - 2731000.0, 2733000.0, 2737000.0, 2741000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2769000.0, 2773000.0, - 2777000.0, 2781000.0, 2785000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, - 2826000.0, 2830000.0, 2834000.0, 2844000.0, 2853000.0, 2863000.0, 2873000.0, 2883000.0, 2893000.0, 2903000.0, 2913000.0, 2923000.0, - 2933000.0, 2953000.0, 2973000.0, 2993000.0, 3013000.0, 3033000.0, 3053000.0, 3073000.0, 3094000.0, 3114000.0, 3134000.0, 3155000.0, - 3175000.0, 3195000.0, 3216000.0, 3280000.0, 3382000.0, 3488000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2693000.0, 2695000.0, 2697000.0, 2699000.0, 2701000.0, 2703000.0, - 2705000.0, 2707000.0, 2709000.0, 2712000.0, 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, - 2730000.0, 2732000.0, 2736000.0, 2740000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2769000.0, 2773000.0, - 2777000.0, 2781000.0, 2785000.0, 2789000.0, 2793000.0, 2797000.0, 2801000.0, 2805000.0, 2809000.0, 2813000.0, 2817000.0, 2821000.0, - 2825000.0, 2829000.0, 2833000.0, 2843000.0, 2853000.0, 2863000.0, 2873000.0, 2883000.0, 2893000.0, 2903000.0, 2913000.0, 2923000.0, - 2933000.0, 2953000.0, 2973000.0, 2993000.0, 3013000.0, 3033000.0, 3053000.0, 3073000.0, 3094000.0, 3114000.0, 3134000.0, 3154000.0, - 3175000.0, 3195000.0, 3216000.0, 3280000.0, 3382000.0, 3488000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2694000.0, 2696000.0, 2698000.0, 2700000.0, 2703000.0, - 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2724000.0, 2726000.0, 2728000.0, - 2730000.0, 2732000.0, 2736000.0, 2740000.0, 2744000.0, 2748000.0, 2752000.0, 2756000.0, 2760000.0, 2765000.0, 2769000.0, 2773000.0, - 2777000.0, 2781000.0, 2785000.0, 2789000.0, 2793000.0, 2797000.0, 2801000.0, 2805000.0, 2809000.0, 2813000.0, 2817000.0, 2821000.0, - 2825000.0, 2829000.0, 2833000.0, 2843000.0, 2853000.0, 2863000.0, 2873000.0, 2883000.0, 2893000.0, 2903000.0, 2913000.0, 2923000.0, - 2933000.0, 2953000.0, 2973000.0, 2993000.0, 3013000.0, 3033000.0, 3053000.0, 3073000.0, 3093000.0, 3114000.0, 3134000.0, 3154000.0, - 3175000.0, 3195000.0, 3216000.0, 3280000.0, 3382000.0, 3488000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0, - 2704000.0, 2706000.0, 2708000.0, 2710000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, - 2729000.0, 2731000.0, 2735000.0, 2740000.0, 2744000.0, 2748000.0, 2752000.0, 2756000.0, 2760000.0, 2764000.0, 2768000.0, 2772000.0, - 2776000.0, 2780000.0, 2784000.0, 2788000.0, 2793000.0, 2797000.0, 2801000.0, 2805000.0, 2809000.0, 2813000.0, 2817000.0, 2821000.0, - 2825000.0, 2829000.0, 2833000.0, 2843000.0, 2853000.0, 2863000.0, 2873000.0, 2883000.0, 2893000.0, 2903000.0, 2913000.0, 2923000.0, - 2933000.0, 2953000.0, 2973000.0, 2993000.0, 3013000.0, 3033000.0, 3053000.0, 3073000.0, 3093000.0, 3114000.0, 3134000.0, 3154000.0, - 3175000.0, 3195000.0, 3216000.0, 3280000.0, 3382000.0, 3488000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2697000.0, 2699000.0, 2701000.0, - 2703000.0, 2706000.0, 2708000.0, 2710000.0, 2712000.0, 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2725000.0, 2727000.0, - 2729000.0, 2731000.0, 2735000.0, 2739000.0, 2743000.0, 2747000.0, 2751000.0, 2756000.0, 2760000.0, 2764000.0, 2768000.0, 2772000.0, - 2776000.0, 2780000.0, 2784000.0, 2788000.0, 2792000.0, 2796000.0, 2800000.0, 2804000.0, 2808000.0, 2812000.0, 2816000.0, 2820000.0, - 2824000.0, 2828000.0, 2832000.0, 2842000.0, 2852000.0, 2862000.0, 2872000.0, 2882000.0, 2892000.0, 2902000.0, 2912000.0, 2922000.0, - 2932000.0, 2952000.0, 2972000.0, 2992000.0, 3013000.0, 3033000.0, 3053000.0, 3073000.0, 3093000.0, 3113000.0, 3134000.0, 3154000.0, - 3175000.0, 3195000.0, 3216000.0, 3280000.0, 3382000.0, 3488000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2699000.0, 2701000.0, - 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0, - 2728000.0, 2730000.0, 2734000.0, 2739000.0, 2743000.0, 2747000.0, 2751000.0, 2755000.0, 2759000.0, 2763000.0, 2767000.0, 2771000.0, - 2776000.0, 2780000.0, 2784000.0, 2788000.0, 2792000.0, 2796000.0, 2800000.0, 2804000.0, 2808000.0, 2812000.0, 2816000.0, 2820000.0, - 2824000.0, 2828000.0, 2832000.0, 2842000.0, 2852000.0, 2862000.0, 2872000.0, 2882000.0, 2892000.0, 2902000.0, 2912000.0, 2922000.0, - 2932000.0, 2952000.0, 2972000.0, 2992000.0, 3012000.0, 3032000.0, 3053000.0, 3073000.0, 3093000.0, 3113000.0, 3134000.0, 3154000.0, - 3174000.0, 3195000.0, 3216000.0, 3280000.0, 3382000.0, 3488000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2700000.0, - 2702000.0, 2704000.0, 2706000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2726000.0, - 2728000.0, 2730000.0, 2734000.0, 2738000.0, 2742000.0, 2746000.0, 2750000.0, 2755000.0, 2759000.0, 2763000.0, 2767000.0, 2771000.0, - 2775000.0, 2779000.0, 2783000.0, 2787000.0, 2791000.0, 2795000.0, 2800000.0, 2804000.0, 2808000.0, 2812000.0, 2816000.0, 2820000.0, - 2824000.0, 2828000.0, 2832000.0, 2842000.0, 2852000.0, 2862000.0, 2872000.0, 2882000.0, 2892000.0, 2902000.0, 2912000.0, 2922000.0, - 2932000.0, 2952000.0, 2972000.0, 2992000.0, 3012000.0, 3032000.0, 3052000.0, 3073000.0, 3093000.0, 3113000.0, 3134000.0, 3154000.0, - 3174000.0, 3195000.0, 3215000.0, 3280000.0, 3382000.0, 3488000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2710000.0, 2712000.0, 2714000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, - 2727000.0, 2729000.0, 2733000.0, 2738000.0, 2742000.0, 2746000.0, 2750000.0, 2754000.0, 2758000.0, 2762000.0, 2766000.0, 2771000.0, - 2775000.0, 2779000.0, 2783000.0, 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2811000.0, 2815000.0, 2819000.0, - 2823000.0, 2827000.0, 2831000.0, 2842000.0, 2852000.0, 2862000.0, 2872000.0, 2882000.0, 2892000.0, 2902000.0, 2912000.0, 2922000.0, - 2932000.0, 2952000.0, 2972000.0, 2992000.0, 3012000.0, 3032000.0, 3052000.0, 3073000.0, 3093000.0, 3113000.0, 3133000.0, 3154000.0, - 3174000.0, 3195000.0, 3215000.0, 3280000.0, 3382000.0, 3488000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2712000.0, 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, - 2726000.0, 2729000.0, 2733000.0, 2737000.0, 2741000.0, 2745000.0, 2749000.0, 2754000.0, 2758000.0, 2762000.0, 2766000.0, 2770000.0, - 2774000.0, 2778000.0, 2782000.0, 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2811000.0, 2815000.0, 2819000.0, - 2823000.0, 2827000.0, 2831000.0, 2841000.0, 2851000.0, 2861000.0, 2871000.0, 2881000.0, 2891000.0, 2901000.0, 2911000.0, 2922000.0, - 2932000.0, 2952000.0, 2972000.0, 2992000.0, 3012000.0, 3032000.0, 3052000.0, 3072000.0, 3093000.0, 3113000.0, 3133000.0, 3154000.0, - 3174000.0, 3195000.0, 3215000.0, 3280000.0, 3382000.0, 3488000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 2704000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2720000.0, 2722000.0, 2724000.0, - 2726000.0, 2728000.0, 2732000.0, 2736000.0, 2741000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2766000.0, 2770000.0, - 2774000.0, 2778000.0, 2782000.0, 2786000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2811000.0, 2815000.0, 2819000.0, - 2823000.0, 2827000.0, 2831000.0, 2841000.0, 2851000.0, 2861000.0, 2871000.0, 2881000.0, 2891000.0, 2901000.0, 2911000.0, 2921000.0, - 2931000.0, 2951000.0, 2971000.0, 2992000.0, 3012000.0, 3032000.0, 3052000.0, 3072000.0, 3093000.0, 3113000.0, 3133000.0, 3154000.0, - 3174000.0, 3195000.0, 3215000.0, 3280000.0, 3382000.0, 3488000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 2706000.0, 2708000.0, 2710000.0, 2712000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, - 2725000.0, 2727000.0, 2732000.0, 2736000.0, 2740000.0, 2744000.0, 2748000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2769000.0, - 2773000.0, 2777000.0, 2782000.0, 2786000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, - 2822000.0, 2826000.0, 2830000.0, 2841000.0, 2851000.0, 2861000.0, 2871000.0, 2881000.0, 2891000.0, 2901000.0, 2911000.0, 2921000.0, - 2931000.0, 2951000.0, 2971000.0, 2991000.0, 3012000.0, 3032000.0, 3052000.0, 3072000.0, 3092000.0, 3113000.0, 3133000.0, 3153000.0, - 3174000.0, 3194000.0, 3215000.0, 3280000.0, 3382000.0, 3488000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 2707000.0, 2710000.0, 2712000.0, 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, - 2725000.0, 2727000.0, 2731000.0, 2735000.0, 2739000.0, 2744000.0, 2748000.0, 2752000.0, 2756000.0, 2760000.0, 2765000.0, 2769000.0, - 2773000.0, 2777000.0, 2781000.0, 2785000.0, 2789000.0, 2793000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, - 2822000.0, 2826000.0, 2830000.0, 2840000.0, 2850000.0, 2860000.0, 2870000.0, 2881000.0, 2891000.0, 2901000.0, 2911000.0, 2921000.0, - 2931000.0, 2951000.0, 2971000.0, 2991000.0, 3011000.0, 3031000.0, 3052000.0, 3072000.0, 3092000.0, 3113000.0, 3133000.0, 3153000.0, - 3174000.0, 3194000.0, 3215000.0, 3280000.0, 3382000.0, 3488000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2718000.0, 2720000.0, 2722000.0, - 2724000.0, 2726000.0, 2730000.0, 2735000.0, 2739000.0, 2743000.0, 2747000.0, 2752000.0, 2756000.0, 2760000.0, 2764000.0, 2768000.0, - 2772000.0, 2776000.0, 2781000.0, 2785000.0, 2789000.0, 2793000.0, 2797000.0, 2801000.0, 2805000.0, 2809000.0, 2813000.0, 2818000.0, - 2822000.0, 2826000.0, 2830000.0, 2840000.0, 2850000.0, 2860000.0, 2870000.0, 2880000.0, 2890000.0, 2900000.0, 2910000.0, 2921000.0, - 2931000.0, 2951000.0, 2971000.0, 2991000.0, 3011000.0, 3031000.0, 3052000.0, 3072000.0, 3092000.0, 3112000.0, 3133000.0, 3153000.0, - 3174000.0, 3194000.0, 3215000.0, 3280000.0, 3381000.0, 3488000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2710000.0, 2712000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, - 2723000.0, 2725000.0, 2730000.0, 2734000.0, 2738000.0, 2743000.0, 2747000.0, 2751000.0, 2755000.0, 2759000.0, 2764000.0, 2768000.0, - 2772000.0, 2776000.0, 2780000.0, 2784000.0, 2788000.0, 2793000.0, 2797000.0, 2801000.0, 2805000.0, 2809000.0, 2813000.0, 2817000.0, - 2821000.0, 2825000.0, 2829000.0, 2839000.0, 2850000.0, 2860000.0, 2870000.0, 2880000.0, 2890000.0, 2900000.0, 2910000.0, 2920000.0, - 2930000.0, 2950000.0, 2971000.0, 2991000.0, 3011000.0, 3031000.0, 3051000.0, 3072000.0, 3092000.0, 3112000.0, 3133000.0, 3153000.0, - 3174000.0, 3194000.0, 3215000.0, 3280000.0, 3381000.0, 3487000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2712000.0, 2714000.0, 2716000.0, 2718000.0, 2720000.0, - 2723000.0, 2725000.0, 2729000.0, 2733000.0, 2738000.0, 2742000.0, 2746000.0, 2750000.0, 2755000.0, 2759000.0, 2763000.0, 2767000.0, - 2771000.0, 2775000.0, 2780000.0, 2784000.0, 2788000.0, 2792000.0, 2796000.0, 2800000.0, 2804000.0, 2808000.0, 2813000.0, 2817000.0, - 2821000.0, 2825000.0, 2829000.0, 2839000.0, 2849000.0, 2859000.0, 2870000.0, 2880000.0, 2890000.0, 2900000.0, 2910000.0, 2920000.0, - 2930000.0, 2950000.0, 2970000.0, 2991000.0, 3011000.0, 3031000.0, 3051000.0, 3071000.0, 3092000.0, 3112000.0, 3132000.0, 3153000.0, - 3173000.0, 3194000.0, 3215000.0, 3280000.0, 3381000.0, 3487000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2713000.0, 2715000.0, 2717000.0, 2720000.0, - 2722000.0, 2724000.0, 2728000.0, 2733000.0, 2737000.0, 2741000.0, 2746000.0, 2750000.0, 2754000.0, 2758000.0, 2762000.0, 2767000.0, - 2771000.0, 2775000.0, 2779000.0, 2783000.0, 2787000.0, 2792000.0, 2796000.0, 2800000.0, 2804000.0, 2808000.0, 2812000.0, 2816000.0, - 2820000.0, 2824000.0, 2829000.0, 2839000.0, 2849000.0, 2859000.0, 2869000.0, 2879000.0, 2889000.0, 2900000.0, 2910000.0, 2920000.0, - 2930000.0, 2950000.0, 2970000.0, 2990000.0, 3011000.0, 3031000.0, 3051000.0, 3071000.0, 3092000.0, 3112000.0, 3132000.0, 3153000.0, - 3173000.0, 3194000.0, 3214000.0, 3280000.0, 3381000.0, 3487000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2715000.0, 2717000.0, 2719000.0, - 2721000.0, 2723000.0, 2728000.0, 2732000.0, 2736000.0, 2741000.0, 2745000.0, 2749000.0, 2753000.0, 2758000.0, 2762000.0, 2766000.0, - 2770000.0, 2774000.0, 2779000.0, 2783000.0, 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2808000.0, 2812000.0, 2816000.0, - 2820000.0, 2824000.0, 2828000.0, 2838000.0, 2849000.0, 2859000.0, 2869000.0, 2879000.0, 2889000.0, 2899000.0, 2909000.0, 2919000.0, - 2930000.0, 2950000.0, 2970000.0, 2990000.0, 3010000.0, 3031000.0, 3051000.0, 3071000.0, 3091000.0, 3112000.0, 3132000.0, 3153000.0, - 3173000.0, 3194000.0, 3214000.0, 3280000.0, 3381000.0, 3487000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2716000.0, 2718000.0, - 2720000.0, 2723000.0, 2727000.0, 2731000.0, 2736000.0, 2740000.0, 2744000.0, 2748000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, - 2770000.0, 2774000.0, 2778000.0, 2782000.0, 2786000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2811000.0, 2815000.0, - 2819000.0, 2824000.0, 2828000.0, 2838000.0, 2848000.0, 2858000.0, 2868000.0, 2879000.0, 2889000.0, 2899000.0, 2909000.0, 2919000.0, - 2929000.0, 2949000.0, 2970000.0, 2990000.0, 3010000.0, 3030000.0, 3051000.0, 3071000.0, 3091000.0, 3112000.0, 3132000.0, 3152000.0, - 3173000.0, 3194000.0, 3214000.0, 3280000.0, 3381000.0, 3487000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2717000.0, - 2720000.0, 2722000.0, 2726000.0, 2731000.0, 2735000.0, 2739000.0, 2744000.0, 2748000.0, 2752000.0, 2756000.0, 2761000.0, 2765000.0, - 2769000.0, 2773000.0, 2777000.0, 2782000.0, 2786000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2807000.0, 2811000.0, 2815000.0, - 2819000.0, 2823000.0, 2827000.0, 2837000.0, 2848000.0, 2858000.0, 2868000.0, 2878000.0, 2888000.0, 2899000.0, 2909000.0, 2919000.0, - 2929000.0, 2949000.0, 2969000.0, 2990000.0, 3010000.0, 3030000.0, 3050000.0, 3071000.0, 3091000.0, 3111000.0, 3132000.0, 3152000.0, - 3173000.0, 3193000.0, 3214000.0, 3280000.0, 3381000.0, 3487000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 2719000.0, 2721000.0, 2725000.0, 2730000.0, 2734000.0, 2738000.0, 2743000.0, 2747000.0, 2751000.0, 2756000.0, 2760000.0, 2764000.0, - 2768000.0, 2773000.0, 2777000.0, 2781000.0, 2785000.0, 2789000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0, - 2819000.0, 2823000.0, 2827000.0, 2837000.0, 2847000.0, 2858000.0, 2868000.0, 2878000.0, 2888000.0, 2898000.0, 2908000.0, 2919000.0, - 2929000.0, 2949000.0, 2969000.0, 2989000.0, 3010000.0, 3030000.0, 3050000.0, 3071000.0, 3091000.0, 3111000.0, 3132000.0, 3152000.0, - 3173000.0, 3193000.0, 3214000.0, 3280000.0, 3381000.0, 3487000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 2720000.0, 2725000.0, 2729000.0, 2733000.0, 2738000.0, 2742000.0, 2746000.0, 2751000.0, 2755000.0, 2759000.0, 2764000.0, - 2768000.0, 2772000.0, 2776000.0, 2781000.0, 2785000.0, 2789000.0, 2793000.0, 2797000.0, 2801000.0, 2806000.0, 2810000.0, 2814000.0, - 2818000.0, 2822000.0, 2826000.0, 2837000.0, 2847000.0, 2857000.0, 2867000.0, 2878000.0, 2888000.0, 2898000.0, 2908000.0, 2918000.0, - 2928000.0, 2949000.0, 2969000.0, 2989000.0, 3009000.0, 3030000.0, 3050000.0, 3070000.0, 3091000.0, 3111000.0, 3132000.0, 3152000.0, - 3173000.0, 3193000.0, 3214000.0, 3280000.0, 3381000.0, 3487000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 2723000.0, 2727000.0, 2732000.0, 2736000.0, 2741000.0, 2745000.0, 2749000.0, 2754000.0, 2758000.0, 2762000.0, - 2767000.0, 2771000.0, 2775000.0, 2779000.0, 2784000.0, 2788000.0, 2792000.0, 2796000.0, 2800000.0, 2805000.0, 2809000.0, 2813000.0, - 2817000.0, 2821000.0, 2825000.0, 2836000.0, 2846000.0, 2856000.0, 2867000.0, 2877000.0, 2887000.0, 2897000.0, 2907000.0, 2918000.0, - 2928000.0, 2948000.0, 2968000.0, 2989000.0, 3009000.0, 3029000.0, 3050000.0, 3070000.0, 3090000.0, 3111000.0, 3131000.0, 3152000.0, - 3172000.0, 3193000.0, 3213000.0, 3280000.0, 3380000.0, 3487000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 2726000.0, 2730000.0, 2735000.0, 2739000.0, 2743000.0, 2748000.0, 2752000.0, 2757000.0, 2761000.0, - 2765000.0, 2769000.0, 2774000.0, 2778000.0, 2782000.0, 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2808000.0, 2812000.0, - 2816000.0, 2820000.0, 2824000.0, 2835000.0, 2845000.0, 2855000.0, 2866000.0, 2876000.0, 2886000.0, 2896000.0, 2907000.0, 2917000.0, - 2927000.0, 2947000.0, 2968000.0, 2988000.0, 3008000.0, 3029000.0, 3049000.0, 3069000.0, 3090000.0, 3110000.0, 3131000.0, 3151000.0, - 3172000.0, 3192000.0, 3213000.0, 3280000.0, 3380000.0, 3487000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 2728000.0, 2733000.0, 2737000.0, 2742000.0, 2746000.0, 2751000.0, 2755000.0, 2759000.0, - 2764000.0, 2768000.0, 2772000.0, 2777000.0, 2781000.0, 2785000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2811000.0, - 2815000.0, 2819000.0, 2823000.0, 2834000.0, 2844000.0, 2854000.0, 2865000.0, 2875000.0, 2885000.0, 2896000.0, 2906000.0, 2916000.0, - 2926000.0, 2947000.0, 2967000.0, 2987000.0, 3008000.0, 3028000.0, 3049000.0, 3069000.0, 3089000.0, 3110000.0, 3130000.0, 3151000.0, - 3172000.0, 3192000.0, 3213000.0, 3280000.0, 3380000.0, 3486000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 2731000.0, 2735000.0, 2740000.0, 2744000.0, 2749000.0, 2753000.0, 2758000.0, - 2762000.0, 2767000.0, 2771000.0, 2775000.0, 2780000.0, 2784000.0, 2788000.0, 2792000.0, 2797000.0, 2801000.0, 2805000.0, 2809000.0, - 2814000.0, 2818000.0, 2822000.0, 2833000.0, 2843000.0, 2853000.0, 2864000.0, 2874000.0, 2885000.0, 2895000.0, 2905000.0, 2915000.0, - 2926000.0, 2946000.0, 2966000.0, 2987000.0, 3007000.0, 3028000.0, 3048000.0, 3069000.0, 3089000.0, 3109000.0, 3130000.0, 3151000.0, - 3171000.0, 3192000.0, 3212000.0, 3280000.0, 3380000.0, 3486000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2733000.0, 2738000.0, 2743000.0, 2747000.0, 2752000.0, 2756000.0, - 2761000.0, 2765000.0, 2769000.0, 2774000.0, 2778000.0, 2782000.0, 2787000.0, 2791000.0, 2795000.0, 2800000.0, 2804000.0, 2808000.0, - 2812000.0, 2817000.0, 2821000.0, 2831000.0, 2842000.0, 2852000.0, 2863000.0, 2873000.0, 2884000.0, 2894000.0, 2904000.0, 2915000.0, - 2925000.0, 2945000.0, 2966000.0, 2986000.0, 3007000.0, 3027000.0, 3048000.0, 3068000.0, 3089000.0, 3109000.0, 3130000.0, 3150000.0, - 3171000.0, 3191000.0, 3212000.0, 3280000.0, 3380000.0, 3486000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2736000.0, 2741000.0, 2745000.0, 2750000.0, 2754000.0, - 2759000.0, 2763000.0, 2768000.0, 2772000.0, 2777000.0, 2781000.0, 2785000.0, 2790000.0, 2794000.0, 2798000.0, 2803000.0, 2807000.0, - 2811000.0, 2815000.0, 2820000.0, 2830000.0, 2841000.0, 2851000.0, 2862000.0, 2872000.0, 2883000.0, 2893000.0, 2903000.0, 2914000.0, - 2924000.0, 2945000.0, 2965000.0, 2986000.0, 3006000.0, 3027000.0, 3047000.0, 3068000.0, 3088000.0, 3109000.0, 3129000.0, 3150000.0, - 3170000.0, 3191000.0, 3212000.0, 3280000.0, 3379000.0, 3486000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2739000.0, 2743000.0, 2748000.0, 2752000.0, - 2757000.0, 2761000.0, 2766000.0, 2770000.0, 2775000.0, 2779000.0, 2784000.0, 2788000.0, 2792000.0, 2797000.0, 2801000.0, 2805000.0, - 2810000.0, 2814000.0, 2818000.0, 2829000.0, 2840000.0, 2850000.0, 2861000.0, 2871000.0, 2882000.0, 2892000.0, 2902000.0, 2913000.0, - 2923000.0, 2944000.0, 2964000.0, 2985000.0, 3005000.0, 3026000.0, 3046000.0, 3067000.0, 3088000.0, 3108000.0, 3129000.0, 3149000.0, - 3170000.0, 3191000.0, 3211000.0, 3280000.0, 3379000.0, 3485000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2741000.0, 2746000.0, 2750000.0, - 2755000.0, 2760000.0, 2764000.0, 2769000.0, 2773000.0, 2778000.0, 2782000.0, 2786000.0, 2791000.0, 2795000.0, 2800000.0, 2804000.0, - 2808000.0, 2813000.0, 2817000.0, 2828000.0, 2838000.0, 2849000.0, 2860000.0, 2870000.0, 2881000.0, 2891000.0, 2901000.0, 2912000.0, - 2922000.0, 2943000.0, 2964000.0, 2984000.0, 3005000.0, 3025000.0, 3046000.0, 3066000.0, 3087000.0, 3108000.0, 3128000.0, 3149000.0, - 3170000.0, 3190000.0, 3211000.0, 3280000.0, 3379000.0, 3485000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2744000.0, 2748000.0, - 2753000.0, 2758000.0, 2762000.0, 2767000.0, 2771000.0, 2776000.0, 2780000.0, 2785000.0, 2789000.0, 2794000.0, 2798000.0, 2802000.0, - 2807000.0, 2811000.0, 2815000.0, 2826000.0, 2837000.0, 2848000.0, 2858000.0, 2869000.0, 2879000.0, 2890000.0, 2900000.0, 2911000.0, - 2921000.0, 2942000.0, 2963000.0, 2983000.0, 3004000.0, 3025000.0, 3045000.0, 3066000.0, 3086000.0, 3107000.0, 3128000.0, 3148000.0, - 3169000.0, 3190000.0, 3211000.0, 3280000.0, 3378000.0, 3485000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2746000.0, - 2751000.0, 2755000.0, 2760000.0, 2765000.0, 2769000.0, 2774000.0, 2778000.0, 2783000.0, 2787000.0, 2792000.0, 2796000.0, 2801000.0, - 2805000.0, 2810000.0, 2814000.0, 2825000.0, 2836000.0, 2846000.0, 2857000.0, 2868000.0, 2878000.0, 2889000.0, 2899000.0, 2910000.0, - 2920000.0, 2941000.0, 2962000.0, 2983000.0, 3003000.0, 3024000.0, 3045000.0, 3065000.0, 3086000.0, 3106000.0, 3127000.0, 3148000.0, - 3169000.0, 3189000.0, 3210000.0, 3280000.0, 3378000.0, 3485000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 2748000.0, 2753000.0, 2758000.0, 2763000.0, 2767000.0, 2772000.0, 2776000.0, 2781000.0, 2786000.0, 2790000.0, 2795000.0, 2799000.0, - 2803000.0, 2808000.0, 2812000.0, 2823000.0, 2834000.0, 2845000.0, 2856000.0, 2866000.0, 2877000.0, 2888000.0, 2898000.0, 2909000.0, - 2919000.0, 2940000.0, 2961000.0, 2982000.0, 3002000.0, 3023000.0, 3044000.0, 3064000.0, 3085000.0, 3106000.0, 3127000.0, 3147000.0, - 3168000.0, 3189000.0, 3210000.0, 3280000.0, 3378000.0, 3484000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 2751000.0, 2755000.0, 2760000.0, 2765000.0, 2770000.0, 2774000.0, 2779000.0, 2784000.0, 2788000.0, 2793000.0, 2797000.0, - 2802000.0, 2806000.0, 2811000.0, 2822000.0, 2833000.0, 2843000.0, 2854000.0, 2865000.0, 2876000.0, 2886000.0, 2897000.0, 2908000.0, - 2918000.0, 2939000.0, 2960000.0, 2981000.0, 3002000.0, 3022000.0, 3043000.0, 3064000.0, 3085000.0, 3105000.0, 3126000.0, 3147000.0, - 3168000.0, 3188000.0, 3209000.0, 3280000.0, 3377000.0, 3484000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 2753000.0, 2758000.0, 2763000.0, 2767000.0, 2772000.0, 2777000.0, 2781000.0, 2786000.0, 2791000.0, 2795000.0, - 2800000.0, 2804000.0, 2809000.0, 2820000.0, 2831000.0, 2842000.0, 2853000.0, 2864000.0, 2874000.0, 2885000.0, 2896000.0, 2906000.0, - 2917000.0, 2938000.0, 2959000.0, 2980000.0, 3001000.0, 3022000.0, 3042000.0, 3063000.0, 3084000.0, 3105000.0, 3125000.0, 3146000.0, - 3167000.0, 3188000.0, 3209000.0, 3280000.0, 3377000.0, 3484000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 2755000.0, 2760000.0, 2765000.0, 2770000.0, 2775000.0, 2779000.0, 2784000.0, 2789000.0, 2793000.0, - 2798000.0, 2802000.0, 2807000.0, 2818000.0, 2829000.0, 2840000.0, 2851000.0, 2862000.0, 2873000.0, 2884000.0, 2894000.0, 2905000.0, - 2916000.0, 2937000.0, 2958000.0, 2979000.0, 3000000.0, 3021000.0, 3042000.0, 3062000.0, 3083000.0, 3104000.0, 3125000.0, 3146000.0, - 3166000.0, 3187000.0, 3208000.0, 3280000.0, 3377000.0, 3484000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 2757000.0, 2762000.0, 2767000.0, 2772000.0, 2777000.0, 2782000.0, 2786000.0, 2791000.0, - 2796000.0, 2800000.0, 2805000.0, 2816000.0, 2827000.0, 2839000.0, 2850000.0, 2861000.0, 2872000.0, 2882000.0, 2893000.0, 2904000.0, - 2915000.0, 2936000.0, 2957000.0, 2978000.0, 2999000.0, 3020000.0, 3041000.0, 3062000.0, 3082000.0, 3103000.0, 3124000.0, 3145000.0, - 3166000.0, 3187000.0, 3208000.0, 3280000.0, 3376000.0, 3483000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 2760000.0, 2765000.0, 2770000.0, 2774000.0, 2779000.0, 2784000.0, 2789000.0, - 2793000.0, 2798000.0, 2803000.0, 2814000.0, 2826000.0, 2837000.0, 2848000.0, 2859000.0, 2870000.0, 2881000.0, 2892000.0, 2902000.0, - 2913000.0, 2935000.0, 2956000.0, 2977000.0, 2998000.0, 3019000.0, 3040000.0, 3061000.0, 3082000.0, 3102000.0, 3123000.0, 3144000.0, - 3165000.0, 3186000.0, 3207000.0, 3280000.0, 3376000.0, 3483000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2762000.0, 2767000.0, 2772000.0, 2777000.0, 2781000.0, 2786000.0, - 2791000.0, 2796000.0, 2800000.0, 2812000.0, 2824000.0, 2835000.0, 2846000.0, 2857000.0, 2868000.0, 2879000.0, 2890000.0, 2901000.0, - 2912000.0, 2933000.0, 2955000.0, 2976000.0, 2997000.0, 3018000.0, 3039000.0, 3060000.0, 3081000.0, 3102000.0, 3123000.0, 3144000.0, - 3164000.0, 3185000.0, 3206000.0, 3280000.0, 3375000.0, 3483000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2764000.0, 2769000.0, 2774000.0, 2779000.0, 2784000.0, - 2789000.0, 2793000.0, 2798000.0, 2810000.0, 2821000.0, 2833000.0, 2844000.0, 2855000.0, 2867000.0, 2878000.0, 2889000.0, 2900000.0, - 2910000.0, 2932000.0, 2953000.0, 2975000.0, 2996000.0, 3017000.0, 3038000.0, 3059000.0, 3080000.0, 3101000.0, 3122000.0, 3143000.0, - 3164000.0, 3185000.0, 3206000.0, 3280000.0, 3375000.0, 3482000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2766000.0, 2771000.0, 2776000.0, 2781000.0, - 2786000.0, 2791000.0, 2796000.0, 2808000.0, 2819000.0, 2831000.0, 2842000.0, 2854000.0, 2865000.0, 2876000.0, 2887000.0, 2898000.0, - 2909000.0, 2931000.0, 2952000.0, 2973000.0, 2995000.0, 3016000.0, 3037000.0, 3058000.0, 3079000.0, 3100000.0, 3121000.0, 3142000.0, - 3163000.0, 3184000.0, 3205000.0, 3280000.0, 3374000.0, 3482000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2768000.0, 2773000.0, 2778000.0, - 2783000.0, 2788000.0, 2793000.0, 2805000.0, 2817000.0, 2829000.0, 2840000.0, 2852000.0, 2863000.0, 2874000.0, 2885000.0, 2896000.0, - 2907000.0, 2929000.0, 2951000.0, 2972000.0, 2994000.0, 3015000.0, 3036000.0, 3057000.0, 3078000.0, 3099000.0, 3120000.0, 3141000.0, - 3162000.0, 3183000.0, 3204000.0, 3280000.0, 3374000.0, 3481000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2770000.0, 2775000.0, - 2780000.0, 2785000.0, 2790000.0, 2802000.0, 2814000.0, 2826000.0, 2838000.0, 2850000.0, 2861000.0, 2872000.0, 2883000.0, 2895000.0, - 2906000.0, 2928000.0, 2949000.0, 2971000.0, 2992000.0, 3014000.0, 3035000.0, 3056000.0, 3077000.0, 3098000.0, 3119000.0, 3140000.0, - 3162000.0, 3183000.0, 3204000.0, 3280000.0, 3373000.0, 3481000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2772000.0, - 2777000.0, 2782000.0, 2787000.0, 2800000.0, 2812000.0, 2824000.0, 2836000.0, 2847000.0, 2859000.0, 2870000.0, 2882000.0, 2893000.0, - 2904000.0, 2926000.0, 2948000.0, 2969000.0, 2991000.0, 3012000.0, 3034000.0, 3055000.0, 3076000.0, 3097000.0, 3118000.0, 3140000.0, - 3161000.0, 3182000.0, 3203000.0, 3280000.0, 3373000.0, 3480000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 2774000.0, 2779000.0, 2784000.0, 2797000.0, 2809000.0, 2821000.0, 2833000.0, 2845000.0, 2857000.0, 2868000.0, 2880000.0, 2891000.0, - 2902000.0, 2924000.0, 2946000.0, 2968000.0, 2990000.0, 3011000.0, 3033000.0, 3054000.0, 3075000.0, 3096000.0, 3118000.0, 3139000.0, - 3160000.0, 3181000.0, 3202000.0, 3280000.0, 3372000.0, 3480000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 2775000.0, 2781000.0, 2794000.0, 2806000.0, 2819000.0, 2831000.0, 2843000.0, 2854000.0, 2866000.0, 2878000.0, 2889000.0, - 2900000.0, 2923000.0, 2945000.0, 2967000.0, 2988000.0, 3010000.0, 3031000.0, 3053000.0, 3074000.0, 3095000.0, 3117000.0, 3138000.0, - 3159000.0, 3180000.0, 3201000.0, 3280000.0, 3372000.0, 3480000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 2777000.0, 2790000.0, 2803000.0, 2816000.0, 2828000.0, 2840000.0, 2852000.0, 2864000.0, 2875000.0, 2887000.0, - 2898000.0, 2921000.0, 2943000.0, 2965000.0, 2987000.0, 3009000.0, 3030000.0, 3052000.0, 3073000.0, 3094000.0, 3116000.0, 3137000.0, - 3158000.0, 3179000.0, 3201000.0, 3280000.0, 3371000.0, 3479000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 2781000.0, 2795000.0, 2808000.0, 2821000.0, 2833000.0, 2846000.0, 2858000.0, 2870000.0, 2881000.0, - 2893000.0, 2916000.0, 2939000.0, 2961000.0, 2983000.0, 3005000.0, 3027000.0, 3048000.0, 3070000.0, 3091000.0, 3113000.0, 3134000.0, - 3156000.0, 3177000.0, 3198000.0, 3280000.0, 3370000.0, 3478000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 2785000.0, 2799000.0, 2813000.0, 2826000.0, 2838000.0, 2851000.0, 2863000.0, 2875000.0, - 2887000.0, 2910000.0, 2933000.0, 2956000.0, 2979000.0, 3001000.0, 3023000.0, 3045000.0, 3067000.0, 3088000.0, 3110000.0, 3132000.0, - 3153000.0, 3175000.0, 3196000.0, 3280000.0, 3368000.0, 3476000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 2789000.0, 2803000.0, 2817000.0, 2830000.0, 2843000.0, 2856000.0, 2868000.0, - 2880000.0, 2904000.0, 2928000.0, 2951000.0, 2974000.0, 2996000.0, 3019000.0, 3041000.0, 3063000.0, 3085000.0, 3107000.0, 3128000.0, - 3150000.0, 3172000.0, 3193000.0, 3280000.0, 3366000.0, 3475000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2792000.0, 2807000.0, 2821000.0, 2834000.0, 2847000.0, 2860000.0, - 2873000.0, 2898000.0, 2922000.0, 2945000.0, 2969000.0, 2992000.0, 3014000.0, 3037000.0, 3059000.0, 3081000.0, 3103000.0, 3125000.0, - 3147000.0, 3169000.0, 3190000.0, 3280000.0, 3364000.0, 3473000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2795000.0, 2810000.0, 2824000.0, 2838000.0, 2851000.0, - 2864000.0, 2890000.0, 2915000.0, 2939000.0, 2963000.0, 2986000.0, 3009000.0, 3032000.0, 3055000.0, 3077000.0, 3099000.0, 3121000.0, - 3143000.0, 3165000.0, 3187000.0, 3280000.0, 3362000.0, 3471000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2797000.0, 2813000.0, 2827000.0, 2841000.0, - 2855000.0, 2882000.0, 2907000.0, 2932000.0, 2956000.0, 2980000.0, 3004000.0, 3027000.0, 3050000.0, 3072000.0, 3095000.0, 3117000.0, - 3140000.0, 3162000.0, 3184000.0, 3280000.0, 3359000.0, 3469000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2799000.0, 2815000.0, 2830000.0, - 2844000.0, 2872000.0, 2899000.0, 2924000.0, 2949000.0, 2974000.0, 2998000.0, 3021000.0, 3044000.0, 3067000.0, 3090000.0, 3113000.0, - 3135000.0, 3158000.0, 3180000.0, 3280000.0, 3357000.0, 3467000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2801000.0, 2817000.0, - 2832000.0, 2862000.0, 2889000.0, 2916000.0, 2941000.0, 2966000.0, 2991000.0, 3015000.0, 3039000.0, 3062000.0, 3085000.0, 3108000.0, - 3131000.0, 3154000.0, 3176000.0, 3280000.0, 3354000.0, 3465000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2802000.0, - 2819000.0, 2850000.0, 2879000.0, 2906000.0, 2933000.0, 2958000.0, 2984000.0, 3008000.0, 3032000.0, 3056000.0, 3080000.0, 3103000.0, - 3126000.0, 3149000.0, 3172000.0, 3280000.0, 3351000.0, 3462000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 2803000.0, 2836000.0, 2867000.0, 2895000.0, 2923000.0, 2950000.0, 2975000.0, 3001000.0, 3025000.0, 3050000.0, 3073000.0, 3097000.0, - 3121000.0, 3144000.0, 3167000.0, 3280000.0, 3348000.0, 3459000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 2803000.0, 2838000.0, 2870000.0, 2900000.0, 2929000.0, 2957000.0, 2983000.0, 3009000.0, 3035000.0, 3060000.0, 3084000.0, - 3108000.0, 3132000.0, 3156000.0, 3280000.0, 3340000.0, 3453000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 2801000.0, 2838000.0, 2872000.0, 2904000.0, 2934000.0, 2963000.0, 2990000.0, 3017000.0, 3043000.0, 3069000.0, - 3094000.0, 3119000.0, 3143000.0, 3280000.0, 3332000.0, 3446000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 2797000.0, 2837000.0, 2873000.0, 2906000.0, 2937000.0, 2967000.0, 2996000.0, 3023000.0, 3050000.0, - 3077000.0, 3103000.0, 3128000.0, 3280000.0, 3322000.0, 3438000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 2790000.0, 2833000.0, 2871000.0, 2906000.0, 2939000.0, 2970000.0, 3000000.0, 3029000.0, - 3057000.0, 3084000.0, 3110000.0, 3280000.0, 3310000.0, 3429000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 2780000.0, 2826000.0, 2867000.0, 2905000.0, 2939000.0, 2972000.0, 3003000.0, - 3033000.0, 3062000.0, 3090000.0, 3280000.0, 3297000.0, 3418000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2767000.0, 2817000.0, - 2861000.0, 2901000.0, 2938000.0, 2972000.0, 3004000.0, 3036000.0, 3066000.0, 3280000.0, 3282000.0, 3406000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2750000.0, - 2806000.0, 2853000.0, 2895000.0, 2934000.0, 2970000.0, 3004000.0, 3037000.0, 3280000.0, 3264000.0, 3392000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2728000.0, - 2790000.0, 2842000.0, 2887000.0, 2929000.0, 2967000.0, 3003000.0, 3280000.0, 3244000.0, 3377000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 2701000.0, 2771000.0, 2828000.0, 2877000.0, 2921000.0, 2961000.0, 3280000.0, 3222000.0, 3359000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 2666000.0, 2747000.0, 2810000.0, 2864000.0, 2911000.0, 3280000.0, 3195000.0, 3339000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2622000.0, 2718000.0, 2789000.0, 2847000.0, 3280000.0, 3165000.0, 3316000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2564000.0, 2683000.0, 2763000.0, 3280000.0, 3130000.0, 3290000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2481000.0, 2641000.0, 3280000.0, 3089000.0, 3260000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2335000.0, 3280000.0, 3040000.0, 3226000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3280000.0, 2821000.0, 3085000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3280000.0, 2671000.0, 2998000.0}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3280000.0, 2512000.0, 2906000.0}} - }; - + DefaultSteamSuperheatedEnthalpyDataTable = { + {{2501000.0, 2503000.0, 2510000.0, 2520000.0, 2529000.0, 2538000.0, 2548000.0, 2557000.0, 2566000.0, 2576000.0, 2585000.0, 2595000.0, + 2604000.0, 2613000.0, 2623000.0, 2632000.0, 2636000.0, 2640000.0, 2643000.0, 2647000.0, 2651000.0, 2655000.0, 2658000.0, 2662000.0, + 2666000.0, 2670000.0, 2673000.0, 2677000.0, 2681000.0, 2685000.0, 2687000.0, 2689000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, + 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, + 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, 2740000.0, 2742000.0, + 2744000.0, 2746000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2768000.0, 2772000.0, 2776000.0, 2780000.0, 2784000.0, + 2788000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2811000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, 2830000.0, + 2834000.0, 2837000.0, 2841000.0, 2851000.0, 2861000.0, 2870000.0, 2880000.0, 2890000.0, 2899000.0, 2909000.0, 2919000.0, 2929000.0, + 2938000.0, 2958000.0, 2978000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0, + 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, + {0.0, 2503000.0, 2510000.0, 2520000.0, 2529000.0, 2538000.0, 2548000.0, 2557000.0, 2566000.0, 2576000.0, 2585000.0, 2595000.0, + 2604000.0, 2613000.0, 2623000.0, 2632000.0, 2636000.0, 2640000.0, 2643000.0, 2647000.0, 2651000.0, 2655000.0, 2658000.0, 2662000.0, + 2666000.0, 2670000.0, 2673000.0, 2677000.0, 2681000.0, 2685000.0, 2687000.0, 2689000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, + 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, + 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, 2740000.0, 2742000.0, + 2744000.0, 2746000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2768000.0, 2772000.0, 2776000.0, 2780000.0, 2784000.0, + 2788000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2811000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, 2830000.0, + 2834000.0, 2837000.0, 2841000.0, 2851000.0, 2861000.0, 2870000.0, 2880000.0, 2890000.0, 2899000.0, 2909000.0, 2919000.0, 2929000.0, + 2938000.0, 2958000.0, 2978000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0, + 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, + {0.0, 0.0, 2510000.0, 2519000.0, 2529000.0, 2538000.0, 2548000.0, 2557000.0, 2566000.0, 2576000.0, 2585000.0, 2594000.0, + 2604000.0, 2613000.0, 2623000.0, 2632000.0, 2636000.0, 2640000.0, 2643000.0, 2647000.0, 2651000.0, 2655000.0, 2658000.0, 2662000.0, + 2666000.0, 2670000.0, 2673000.0, 2677000.0, 2681000.0, 2685000.0, 2687000.0, 2689000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, + 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, + 2721000.0, 2723000.0, 2725000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, 2740000.0, 2742000.0, + 2744000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2768000.0, 2772000.0, 2776000.0, 2780000.0, 2784000.0, + 2788000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2811000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, 2830000.0, + 2834000.0, 2837000.0, 2841000.0, 2851000.0, 2861000.0, 2870000.0, 2880000.0, 2890000.0, 2899000.0, 2909000.0, 2919000.0, 2929000.0, + 2938000.0, 2958000.0, 2978000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0, + 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, + {0.0, 0.0, 0.0, 2519000.0, 2529000.0, 2538000.0, 2547000.0, 2557000.0, 2566000.0, 2576000.0, 2585000.0, 2594000.0, + 2604000.0, 2613000.0, 2623000.0, 2632000.0, 2636000.0, 2639000.0, 2643000.0, 2647000.0, 2651000.0, 2655000.0, 2658000.0, 2662000.0, + 2666000.0, 2670000.0, 2673000.0, 2677000.0, 2681000.0, 2685000.0, 2687000.0, 2689000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, + 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, + 2721000.0, 2723000.0, 2725000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, 2740000.0, 2742000.0, + 2744000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2768000.0, 2772000.0, 2776000.0, 2780000.0, 2784000.0, + 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, 2830000.0, + 2834000.0, 2837000.0, 2841000.0, 2851000.0, 2861000.0, 2870000.0, 2880000.0, 2890000.0, 2899000.0, 2909000.0, 2919000.0, 2929000.0, + 2938000.0, 2958000.0, 2978000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0, + 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, + {0.0, 0.0, 0.0, 0.0, 2528000.0, 2538000.0, 2547000.0, 2557000.0, 2566000.0, 2575000.0, 2585000.0, 2594000.0, + 2604000.0, 2613000.0, 2622000.0, 2632000.0, 2636000.0, 2639000.0, 2643000.0, 2647000.0, 2651000.0, 2654000.0, 2658000.0, 2662000.0, + 2666000.0, 2670000.0, 2673000.0, 2677000.0, 2681000.0, 2685000.0, 2687000.0, 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, + 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, + 2721000.0, 2723000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, 2740000.0, 2742000.0, + 2744000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2764000.0, 2768000.0, 2772000.0, 2776000.0, 2780000.0, 2784000.0, + 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, 2830000.0, + 2834000.0, 2837000.0, 2841000.0, 2851000.0, 2861000.0, 2870000.0, 2880000.0, 2890000.0, 2899000.0, 2909000.0, 2919000.0, 2929000.0, + 2938000.0, 2958000.0, 2978000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0, + 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 2537000.0, 2547000.0, 2556000.0, 2566000.0, 2575000.0, 2585000.0, 2594000.0, + 2603000.0, 2613000.0, 2622000.0, 2632000.0, 2635000.0, 2639000.0, 2643000.0, 2647000.0, 2651000.0, 2654000.0, 2658000.0, 2662000.0, + 2666000.0, 2669000.0, 2673000.0, 2677000.0, 2681000.0, 2685000.0, 2687000.0, 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, + 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, + 2721000.0, 2723000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, 2740000.0, 2742000.0, + 2743000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2764000.0, 2768000.0, 2772000.0, 2776000.0, 2780000.0, 2784000.0, + 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, 2830000.0, + 2834000.0, 2837000.0, 2841000.0, 2851000.0, 2861000.0, 2870000.0, 2880000.0, 2890000.0, 2899000.0, 2909000.0, 2919000.0, 2929000.0, + 2938000.0, 2958000.0, 2978000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0, + 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2547000.0, 2556000.0, 2566000.0, 2575000.0, 2584000.0, 2594000.0, + 2603000.0, 2613000.0, 2622000.0, 2632000.0, 2635000.0, 2639000.0, 2643000.0, 2647000.0, 2650000.0, 2654000.0, 2658000.0, 2662000.0, + 2666000.0, 2669000.0, 2673000.0, 2677000.0, 2681000.0, 2685000.0, 2686000.0, 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, + 2698000.0, 2700000.0, 2702000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, + 2721000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, 2740000.0, 2741000.0, + 2743000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2764000.0, 2768000.0, 2772000.0, 2776000.0, 2780000.0, 2784000.0, + 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, 2830000.0, + 2833000.0, 2837000.0, 2841000.0, 2851000.0, 2861000.0, 2870000.0, 2880000.0, 2890000.0, 2899000.0, 2909000.0, 2919000.0, 2929000.0, + 2938000.0, 2958000.0, 2978000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0, + 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2556000.0, 2565000.0, 2575000.0, 2584000.0, 2594000.0, + 2603000.0, 2612000.0, 2622000.0, 2631000.0, 2635000.0, 2639000.0, 2643000.0, 2646000.0, 2650000.0, 2654000.0, 2658000.0, 2662000.0, + 2665000.0, 2669000.0, 2673000.0, 2677000.0, 2681000.0, 2684000.0, 2686000.0, 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, + 2698000.0, 2700000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, + 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, 2739000.0, 2741000.0, + 2743000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2760000.0, 2764000.0, 2768000.0, 2772000.0, 2776000.0, 2780000.0, 2783000.0, + 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, 2830000.0, + 2833000.0, 2837000.0, 2841000.0, 2851000.0, 2860000.0, 2870000.0, 2880000.0, 2890000.0, 2899000.0, 2909000.0, 2919000.0, 2929000.0, + 2938000.0, 2958000.0, 2978000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0, + 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2565000.0, 2574000.0, 2584000.0, 2593000.0, + 2603000.0, 2612000.0, 2622000.0, 2631000.0, 2635000.0, 2639000.0, 2642000.0, 2646000.0, 2650000.0, 2654000.0, 2658000.0, 2661000.0, + 2665000.0, 2669000.0, 2673000.0, 2677000.0, 2680000.0, 2684000.0, 2686000.0, 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, + 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2718000.0, + 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2737000.0, 2739000.0, 2741000.0, + 2743000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2760000.0, 2764000.0, 2768000.0, 2772000.0, 2776000.0, 2780000.0, 2783000.0, + 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, 2829000.0, + 2833000.0, 2837000.0, 2841000.0, 2851000.0, 2860000.0, 2870000.0, 2880000.0, 2890000.0, 2899000.0, 2909000.0, 2919000.0, 2929000.0, + 2938000.0, 2958000.0, 2978000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0, + 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2574000.0, 2583000.0, 2593000.0, + 2602000.0, 2612000.0, 2621000.0, 2631000.0, 2635000.0, 2638000.0, 2642000.0, 2646000.0, 2650000.0, 2654000.0, 2657000.0, 2661000.0, + 2665000.0, 2669000.0, 2673000.0, 2676000.0, 2680000.0, 2684000.0, 2686000.0, 2688000.0, 2690000.0, 2692000.0, 2693000.0, 2695000.0, + 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2714000.0, 2716000.0, 2718000.0, + 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2733000.0, 2735000.0, 2737000.0, 2739000.0, 2741000.0, + 2743000.0, 2745000.0, 2749000.0, 2753000.0, 2756000.0, 2760000.0, 2764000.0, 2768000.0, 2772000.0, 2776000.0, 2779000.0, 2783000.0, + 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, 2829000.0, + 2833000.0, 2837000.0, 2841000.0, 2851000.0, 2860000.0, 2870000.0, 2880000.0, 2889000.0, 2899000.0, 2909000.0, 2919000.0, 2928000.0, + 2938000.0, 2958000.0, 2978000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0, + 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2582000.0, 2592000.0, + 2602000.0, 2611000.0, 2621000.0, 2630000.0, 2634000.0, 2638000.0, 2642000.0, 2646000.0, 2649000.0, 2653000.0, 2657000.0, 2661000.0, + 2665000.0, 2668000.0, 2672000.0, 2676000.0, 2680000.0, 2684000.0, 2686000.0, 2688000.0, 2689000.0, 2691000.0, 2693000.0, 2695000.0, + 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2708000.0, 2710000.0, 2712000.0, 2714000.0, 2716000.0, 2718000.0, + 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2729000.0, 2731000.0, 2733000.0, 2735000.0, 2737000.0, 2739000.0, 2741000.0, + 2743000.0, 2745000.0, 2749000.0, 2752000.0, 2756000.0, 2760000.0, 2764000.0, 2768000.0, 2772000.0, 2775000.0, 2779000.0, 2783000.0, + 2787000.0, 2791000.0, 2795000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, 2825000.0, 2829000.0, + 2833000.0, 2837000.0, 2841000.0, 2851000.0, 2860000.0, 2870000.0, 2880000.0, 2889000.0, 2899000.0, 2909000.0, 2919000.0, 2928000.0, + 2938000.0, 2958000.0, 2977000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0, + 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2591000.0, + 2601000.0, 2611000.0, 2620000.0, 2630000.0, 2634000.0, 2637000.0, 2641000.0, 2645000.0, 2649000.0, 2653000.0, 2657000.0, 2660000.0, + 2664000.0, 2668000.0, 2672000.0, 2676000.0, 2680000.0, 2683000.0, 2685000.0, 2687000.0, 2689000.0, 2691000.0, 2693000.0, 2695000.0, + 2697000.0, 2699000.0, 2701000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2710000.0, 2712000.0, 2714000.0, 2716000.0, 2718000.0, + 2720000.0, 2722000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2733000.0, 2735000.0, 2737000.0, 2739000.0, 2741000.0, + 2743000.0, 2745000.0, 2748000.0, 2752000.0, 2756000.0, 2760000.0, 2764000.0, 2768000.0, 2771000.0, 2775000.0, 2779000.0, 2783000.0, + 2787000.0, 2791000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, 2821000.0, 2825000.0, 2829000.0, + 2833000.0, 2837000.0, 2841000.0, 2850000.0, 2860000.0, 2870000.0, 2879000.0, 2889000.0, 2899000.0, 2909000.0, 2918000.0, 2928000.0, + 2938000.0, 2958000.0, 2977000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0, + 3178000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 2600000.0, 2610000.0, 2620000.0, 2629000.0, 2633000.0, 2637000.0, 2641000.0, 2645000.0, 2648000.0, 2652000.0, 2656000.0, 2660000.0, + 2664000.0, 2668000.0, 2671000.0, 2675000.0, 2679000.0, 2683000.0, 2685000.0, 2687000.0, 2689000.0, 2691000.0, 2692000.0, 2694000.0, + 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2710000.0, 2712000.0, 2714000.0, 2715000.0, 2717000.0, + 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2733000.0, 2735000.0, 2737000.0, 2738000.0, 2740000.0, + 2742000.0, 2744000.0, 2748000.0, 2752000.0, 2756000.0, 2760000.0, 2763000.0, 2767000.0, 2771000.0, 2775000.0, 2779000.0, 2783000.0, + 2786000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2813000.0, 2817000.0, 2821000.0, 2825000.0, 2829000.0, + 2833000.0, 2837000.0, 2841000.0, 2850000.0, 2860000.0, 2870000.0, 2879000.0, 2889000.0, 2899000.0, 2909000.0, 2918000.0, 2928000.0, + 2938000.0, 2958000.0, 2977000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3077000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0, + 3177000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 2609000.0, 2619000.0, 2628000.0, 2632000.0, 2636000.0, 2640000.0, 2644000.0, 2648000.0, 2652000.0, 2655000.0, 2659000.0, + 2663000.0, 2667000.0, 2671000.0, 2675000.0, 2679000.0, 2682000.0, 2684000.0, 2686000.0, 2688000.0, 2690000.0, 2692000.0, 2694000.0, + 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, + 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, 2740000.0, + 2742000.0, 2744000.0, 2748000.0, 2752000.0, 2755000.0, 2759000.0, 2763000.0, 2767000.0, 2771000.0, 2775000.0, 2778000.0, 2782000.0, + 2786000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2805000.0, 2809000.0, 2813000.0, 2817000.0, 2821000.0, 2825000.0, 2829000.0, + 2833000.0, 2836000.0, 2840000.0, 2850000.0, 2860000.0, 2869000.0, 2879000.0, 2889000.0, 2899000.0, 2908000.0, 2918000.0, 2928000.0, + 2938000.0, 2957000.0, 2977000.0, 2997000.0, 3017000.0, 3037000.0, 3057000.0, 3076000.0, 3097000.0, 3117000.0, 3137000.0, 3157000.0, + 3177000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 2618000.0, 2627000.0, 2631000.0, 2635000.0, 2639000.0, 2643000.0, 2647000.0, 2651000.0, 2655000.0, 2659000.0, + 2662000.0, 2666000.0, 2670000.0, 2674000.0, 2678000.0, 2682000.0, 2684000.0, 2686000.0, 2688000.0, 2689000.0, 2691000.0, 2693000.0, + 2695000.0, 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2716000.0, + 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, 2740000.0, + 2741000.0, 2743000.0, 2747000.0, 2751000.0, 2755000.0, 2759000.0, 2763000.0, 2767000.0, 2770000.0, 2774000.0, 2778000.0, 2782000.0, + 2786000.0, 2790000.0, 2794000.0, 2797000.0, 2801000.0, 2805000.0, 2809000.0, 2813000.0, 2817000.0, 2821000.0, 2825000.0, 2828000.0, + 2832000.0, 2836000.0, 2840000.0, 2850000.0, 2859000.0, 2869000.0, 2879000.0, 2889000.0, 2898000.0, 2908000.0, 2918000.0, 2928000.0, + 2938000.0, 2957000.0, 2977000.0, 2997000.0, 3017000.0, 3036000.0, 3056000.0, 3076000.0, 3096000.0, 3117000.0, 3137000.0, 3157000.0, + 3177000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3490000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 2626000.0, 2630000.0, 2634000.0, 2638000.0, 2642000.0, 2646000.0, 2650000.0, 2654000.0, 2658000.0, + 2661000.0, 2665000.0, 2669000.0, 2673000.0, 2677000.0, 2681000.0, 2683000.0, 2685000.0, 2687000.0, 2689000.0, 2691000.0, 2693000.0, + 2695000.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2710000.0, 2712000.0, 2714000.0, 2716000.0, + 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2733000.0, 2735000.0, 2737000.0, 2739000.0, + 2741000.0, 2743000.0, 2747000.0, 2751000.0, 2754000.0, 2758000.0, 2762000.0, 2766000.0, 2770000.0, 2774000.0, 2778000.0, 2782000.0, + 2785000.0, 2789000.0, 2793000.0, 2797000.0, 2801000.0, 2805000.0, 2809000.0, 2813000.0, 2816000.0, 2820000.0, 2824000.0, 2828000.0, + 2832000.0, 2836000.0, 2840000.0, 2849000.0, 2859000.0, 2869000.0, 2879000.0, 2888000.0, 2898000.0, 2908000.0, 2918000.0, 2928000.0, + 2937000.0, 2957000.0, 2977000.0, 2997000.0, 3016000.0, 3036000.0, 3056000.0, 3076000.0, 3096000.0, 3116000.0, 3137000.0, 3157000.0, + 3177000.0, 3198000.0, 3218000.0, 3280000.0, 3384000.0, 3489000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 2630000.0, 2633000.0, 2637000.0, 2641000.0, 2645000.0, 2649000.0, 2653000.0, 2657000.0, + 2661000.0, 2665000.0, 2669000.0, 2673000.0, 2677000.0, 2681000.0, 2683000.0, 2684000.0, 2686000.0, 2688000.0, 2690000.0, 2692000.0, + 2694000.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2710000.0, 2712000.0, 2714000.0, 2716000.0, + 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2733000.0, 2735000.0, 2737000.0, 2739000.0, + 2741000.0, 2743000.0, 2747000.0, 2750000.0, 2754000.0, 2758000.0, 2762000.0, 2766000.0, 2770000.0, 2774000.0, 2777000.0, 2781000.0, + 2785000.0, 2789000.0, 2793000.0, 2797000.0, 2801000.0, 2805000.0, 2808000.0, 2812000.0, 2816000.0, 2820000.0, 2824000.0, 2828000.0, + 2832000.0, 2836000.0, 2840000.0, 2849000.0, 2859000.0, 2869000.0, 2879000.0, 2888000.0, 2898000.0, 2908000.0, 2918000.0, 2927000.0, + 2937000.0, 2957000.0, 2977000.0, 2996000.0, 3016000.0, 3036000.0, 3056000.0, 3076000.0, 3096000.0, 3116000.0, 3137000.0, 3157000.0, + 3177000.0, 3197000.0, 3218000.0, 3280000.0, 3384000.0, 3489000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 2633000.0, 2637000.0, 2641000.0, 2645000.0, 2649000.0, 2653000.0, 2657000.0, + 2661000.0, 2665000.0, 2668000.0, 2672000.0, 2676000.0, 2680000.0, 2682000.0, 2684000.0, 2686000.0, 2688000.0, 2690000.0, 2692000.0, + 2694000.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, + 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2733000.0, 2735000.0, 2737000.0, 2738000.0, + 2740000.0, 2742000.0, 2746000.0, 2750000.0, 2754000.0, 2758000.0, 2762000.0, 2766000.0, 2770000.0, 2773000.0, 2777000.0, 2781000.0, + 2785000.0, 2789000.0, 2793000.0, 2797000.0, 2801000.0, 2804000.0, 2808000.0, 2812000.0, 2816000.0, 2820000.0, 2824000.0, 2828000.0, + 2832000.0, 2835000.0, 2839000.0, 2849000.0, 2859000.0, 2869000.0, 2878000.0, 2888000.0, 2898000.0, 2908000.0, 2918000.0, 2927000.0, + 2937000.0, 2957000.0, 2977000.0, 2996000.0, 3016000.0, 3036000.0, 3056000.0, 3076000.0, 3096000.0, 3116000.0, 3136000.0, 3157000.0, + 3177000.0, 3197000.0, 3218000.0, 3280000.0, 3384000.0, 3489000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2636000.0, 2640000.0, 2644000.0, 2648000.0, 2652000.0, 2656000.0, + 2660000.0, 2664000.0, 2668000.0, 2672000.0, 2676000.0, 2680000.0, 2682000.0, 2684000.0, 2686000.0, 2688000.0, 2690000.0, 2691000.0, + 2693000.0, 2695000.0, 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, + 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, + 2740000.0, 2742000.0, 2746000.0, 2750000.0, 2754000.0, 2758000.0, 2762000.0, 2765000.0, 2769000.0, 2773000.0, 2777000.0, 2781000.0, + 2785000.0, 2789000.0, 2793000.0, 2796000.0, 2800000.0, 2804000.0, 2808000.0, 2812000.0, 2816000.0, 2820000.0, 2824000.0, 2828000.0, + 2831000.0, 2835000.0, 2839000.0, 2849000.0, 2859000.0, 2868000.0, 2878000.0, 2888000.0, 2898000.0, 2908000.0, 2917000.0, 2927000.0, + 2937000.0, 2957000.0, 2976000.0, 2996000.0, 3016000.0, 3036000.0, 3056000.0, 3076000.0, 3096000.0, 3116000.0, 3136000.0, 3157000.0, + 3177000.0, 3197000.0, 3218000.0, 3280000.0, 3384000.0, 3489000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2640000.0, 2644000.0, 2648000.0, 2652000.0, 2656000.0, + 2660000.0, 2664000.0, 2667000.0, 2671000.0, 2675000.0, 2679000.0, 2681000.0, 2683000.0, 2685000.0, 2687000.0, 2689000.0, 2691000.0, + 2693000.0, 2695000.0, 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, + 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, + 2740000.0, 2742000.0, 2746000.0, 2750000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2769000.0, 2773000.0, 2777000.0, 2781000.0, + 2785000.0, 2788000.0, 2792000.0, 2796000.0, 2800000.0, 2804000.0, 2808000.0, 2812000.0, 2816000.0, 2820000.0, 2823000.0, 2827000.0, + 2831000.0, 2835000.0, 2839000.0, 2849000.0, 2859000.0, 2868000.0, 2878000.0, 2888000.0, 2898000.0, 2907000.0, 2917000.0, 2927000.0, + 2937000.0, 2957000.0, 2976000.0, 2996000.0, 3016000.0, 3036000.0, 3056000.0, 3076000.0, 3096000.0, 3116000.0, 3136000.0, 3157000.0, + 3177000.0, 3197000.0, 3218000.0, 3280000.0, 3384000.0, 3489000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2643000.0, 2647000.0, 2651000.0, 2655000.0, + 2659000.0, 2663000.0, 2667000.0, 2671000.0, 2675000.0, 2679000.0, 2681000.0, 2683000.0, 2685000.0, 2687000.0, 2689000.0, 2691000.0, + 2693000.0, 2695000.0, 2697000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2710000.0, 2712000.0, 2714000.0, + 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, 2738000.0, + 2740000.0, 2741000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2769000.0, 2773000.0, 2777000.0, 2780000.0, + 2784000.0, 2788000.0, 2792000.0, 2796000.0, 2800000.0, 2804000.0, 2808000.0, 2812000.0, 2815000.0, 2819000.0, 2823000.0, 2827000.0, + 2831000.0, 2835000.0, 2839000.0, 2849000.0, 2858000.0, 2868000.0, 2878000.0, 2888000.0, 2897000.0, 2907000.0, 2917000.0, 2927000.0, + 2937000.0, 2956000.0, 2976000.0, 2996000.0, 3016000.0, 3036000.0, 3056000.0, 3076000.0, 3096000.0, 3116000.0, 3136000.0, 3157000.0, + 3177000.0, 3197000.0, 3218000.0, 3280000.0, 3384000.0, 3489000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2646000.0, 2650000.0, 2654000.0, + 2658000.0, 2662000.0, 2666000.0, 2670000.0, 2674000.0, 2678000.0, 2680000.0, 2682000.0, 2684000.0, 2686000.0, 2688000.0, 2690000.0, + 2692000.0, 2694000.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2710000.0, 2712000.0, 2714000.0, + 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2733000.0, 2735000.0, 2737000.0, + 2739000.0, 2741000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2768000.0, 2772000.0, 2776000.0, 2780000.0, + 2784000.0, 2788000.0, 2792000.0, 2796000.0, 2800000.0, 2804000.0, 2807000.0, 2811000.0, 2815000.0, 2819000.0, 2823000.0, 2827000.0, + 2831000.0, 2835000.0, 2839000.0, 2848000.0, 2858000.0, 2868000.0, 2878000.0, 2887000.0, 2897000.0, 2907000.0, 2917000.0, 2927000.0, + 2937000.0, 2956000.0, 2976000.0, 2996000.0, 3016000.0, 3036000.0, 3056000.0, 3076000.0, 3096000.0, 3116000.0, 3136000.0, 3156000.0, + 3177000.0, 3197000.0, 3218000.0, 3280000.0, 3383000.0, 3489000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2650000.0, 2654000.0, + 2658000.0, 2662000.0, 2666000.0, 2670000.0, 2674000.0, 2678000.0, 2680000.0, 2682000.0, 2684000.0, 2686000.0, 2688000.0, 2690000.0, + 2692000.0, 2694000.0, 2696000.0, 2698000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, + 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2733000.0, 2735000.0, 2737000.0, + 2739000.0, 2741000.0, 2745000.0, 2749000.0, 2752000.0, 2756000.0, 2760000.0, 2764000.0, 2768000.0, 2772000.0, 2776000.0, 2780000.0, + 2784000.0, 2788000.0, 2792000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2811000.0, 2815000.0, 2819000.0, 2823000.0, 2827000.0, + 2831000.0, 2834000.0, 2838000.0, 2848000.0, 2858000.0, 2868000.0, 2878000.0, 2887000.0, 2897000.0, 2907000.0, 2917000.0, 2927000.0, + 2936000.0, 2956000.0, 2976000.0, 2996000.0, 3016000.0, 3036000.0, 3056000.0, 3076000.0, 3096000.0, 3116000.0, 3136000.0, 3156000.0, + 3177000.0, 3197000.0, 3218000.0, 3280000.0, 3383000.0, 3489000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2653000.0, + 2657000.0, 2661000.0, 2665000.0, 2669000.0, 2673000.0, 2677000.0, 2679000.0, 2681000.0, 2683000.0, 2685000.0, 2687000.0, 2689000.0, + 2691000.0, 2693000.0, 2695000.0, 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, + 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2732000.0, 2734000.0, 2736000.0, + 2738000.0, 2740000.0, 2744000.0, 2748000.0, 2752000.0, 2756000.0, 2760000.0, 2764000.0, 2768000.0, 2772000.0, 2776000.0, 2779000.0, + 2783000.0, 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2811000.0, 2815000.0, 2819000.0, 2822000.0, 2826000.0, + 2830000.0, 2834000.0, 2838000.0, 2848000.0, 2858000.0, 2867000.0, 2877000.0, 2887000.0, 2897000.0, 2907000.0, 2917000.0, 2926000.0, + 2936000.0, 2956000.0, 2976000.0, 2996000.0, 3016000.0, 3035000.0, 3055000.0, 3076000.0, 3096000.0, 3116000.0, 3136000.0, 3156000.0, + 3177000.0, 3197000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 2656000.0, 2660000.0, 2664000.0, 2668000.0, 2672000.0, 2676000.0, 2678000.0, 2680000.0, 2682000.0, 2684000.0, 2686000.0, 2688000.0, + 2690000.0, 2692000.0, 2694000.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2710000.0, 2712000.0, + 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2736000.0, + 2738000.0, 2740000.0, 2744000.0, 2748000.0, 2752000.0, 2756000.0, 2760000.0, 2763000.0, 2767000.0, 2771000.0, 2775000.0, 2779000.0, + 2783000.0, 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, + 2830000.0, 2834000.0, 2838000.0, 2848000.0, 2857000.0, 2867000.0, 2877000.0, 2887000.0, 2897000.0, 2907000.0, 2916000.0, 2926000.0, + 2936000.0, 2956000.0, 2976000.0, 2996000.0, 3015000.0, 3035000.0, 3055000.0, 3075000.0, 3095000.0, 3116000.0, 3136000.0, 3156000.0, + 3176000.0, 3197000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 2660000.0, 2664000.0, 2668000.0, 2672000.0, 2676000.0, 2678000.0, 2680000.0, 2682000.0, 2684000.0, 2686000.0, 2688000.0, + 2690000.0, 2692000.0, 2694000.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2710000.0, 2712000.0, + 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, 2735000.0, + 2737000.0, 2739000.0, 2743000.0, 2747000.0, 2751000.0, 2755000.0, 2759000.0, 2763000.0, 2767000.0, 2771000.0, 2775000.0, 2779000.0, + 2783000.0, 2787000.0, 2791000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, + 2830000.0, 2834000.0, 2838000.0, 2847000.0, 2857000.0, 2867000.0, 2877000.0, 2887000.0, 2896000.0, 2906000.0, 2916000.0, 2926000.0, + 2936000.0, 2956000.0, 2975000.0, 2995000.0, 3015000.0, 3035000.0, 3055000.0, 3075000.0, 3095000.0, 3116000.0, 3136000.0, 3156000.0, + 3176000.0, 3197000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 2663000.0, 2667000.0, 2671000.0, 2675000.0, 2677000.0, 2679000.0, 2681000.0, 2683000.0, 2685000.0, 2687000.0, + 2689000.0, 2691000.0, 2693000.0, 2695000.0, 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, + 2713000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2733000.0, 2735000.0, + 2737000.0, 2739000.0, 2743000.0, 2747000.0, 2751000.0, 2755000.0, 2759000.0, 2763000.0, 2767000.0, 2771000.0, 2774000.0, 2778000.0, + 2782000.0, 2786000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, 2826000.0, + 2829000.0, 2833000.0, 2837000.0, 2847000.0, 2857000.0, 2867000.0, 2877000.0, 2886000.0, 2896000.0, 2906000.0, 2916000.0, 2926000.0, + 2936000.0, 2955000.0, 2975000.0, 2995000.0, 3015000.0, 3035000.0, 3055000.0, 3075000.0, 3095000.0, 3115000.0, 3136000.0, 3156000.0, + 3176000.0, 3197000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 2666000.0, 2670000.0, 2674000.0, 2676000.0, 2678000.0, 2680000.0, 2682000.0, 2684000.0, 2686000.0, + 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, + 2713000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, + 2736000.0, 2738000.0, 2742000.0, 2746000.0, 2750000.0, 2754000.0, 2758000.0, 2762000.0, 2766000.0, 2770000.0, 2774000.0, 2778000.0, + 2782000.0, 2786000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2809000.0, 2813000.0, 2817000.0, 2821000.0, 2825000.0, + 2829000.0, 2833000.0, 2837000.0, 2847000.0, 2857000.0, 2866000.0, 2876000.0, 2886000.0, 2896000.0, 2906000.0, 2916000.0, 2926000.0, + 2935000.0, 2955000.0, 2975000.0, 2995000.0, 3015000.0, 3035000.0, 3055000.0, 3075000.0, 3095000.0, 3115000.0, 3136000.0, 3156000.0, + 3176000.0, 3197000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 2669000.0, 2673000.0, 2675000.0, 2677000.0, 2679000.0, 2682000.0, 2684000.0, 2686000.0, + 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2710000.0, + 2712000.0, 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, 2734000.0, + 2736000.0, 2738000.0, 2742000.0, 2746000.0, 2750000.0, 2754000.0, 2758000.0, 2762000.0, 2766000.0, 2770000.0, 2774000.0, 2777000.0, + 2781000.0, 2785000.0, 2789000.0, 2793000.0, 2797000.0, 2801000.0, 2805000.0, 2809000.0, 2813000.0, 2817000.0, 2821000.0, 2825000.0, + 2829000.0, 2833000.0, 2837000.0, 2846000.0, 2856000.0, 2866000.0, 2876000.0, 2886000.0, 2896000.0, 2906000.0, 2915000.0, 2925000.0, + 2935000.0, 2955000.0, 2975000.0, 2995000.0, 3015000.0, 3035000.0, 3055000.0, 3075000.0, 3095000.0, 3115000.0, 3135000.0, 3156000.0, + 3176000.0, 3196000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 2672000.0, 2674000.0, 2677000.0, 2679000.0, 2681000.0, 2683000.0, 2685000.0, + 2687000.0, 2689000.0, 2691000.0, 2693000.0, 2695000.0, 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, + 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2733000.0, + 2735000.0, 2737000.0, 2741000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2769000.0, 2773000.0, 2777000.0, + 2781000.0, 2785000.0, 2789000.0, 2793000.0, 2797000.0, 2801000.0, 2805000.0, 2809000.0, 2813000.0, 2817000.0, 2820000.0, 2824000.0, + 2828000.0, 2832000.0, 2836000.0, 2846000.0, 2856000.0, 2866000.0, 2876000.0, 2886000.0, 2895000.0, 2905000.0, 2915000.0, 2925000.0, + 2935000.0, 2955000.0, 2975000.0, 2995000.0, 3015000.0, 3035000.0, 3055000.0, 3075000.0, 3095000.0, 3115000.0, 3135000.0, 3156000.0, + 3176000.0, 3196000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2674000.0, 2676000.0, 2678000.0, 2680000.0, 2682000.0, 2684000.0, + 2686000.0, 2688000.0, 2690000.0, 2693000.0, 2695000.0, 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, + 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2733000.0, + 2735000.0, 2737000.0, 2741000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2769000.0, 2773000.0, 2777000.0, + 2781000.0, 2785000.0, 2789000.0, 2793000.0, 2797000.0, 2801000.0, 2804000.0, 2808000.0, 2812000.0, 2816000.0, 2820000.0, 2824000.0, + 2828000.0, 2832000.0, 2836000.0, 2846000.0, 2856000.0, 2866000.0, 2876000.0, 2885000.0, 2895000.0, 2905000.0, 2915000.0, 2925000.0, + 2935000.0, 2955000.0, 2975000.0, 2994000.0, 3014000.0, 3034000.0, 3054000.0, 3075000.0, 3095000.0, 3115000.0, 3135000.0, 3156000.0, + 3176000.0, 3196000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2676000.0, 2678000.0, 2680000.0, 2682000.0, 2684000.0, + 2686000.0, 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, + 2710000.0, 2712000.0, 2714000.0, 2716000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, 2733000.0, + 2735000.0, 2737000.0, 2741000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2769000.0, 2773000.0, 2776000.0, + 2780000.0, 2784000.0, 2788000.0, 2792000.0, 2796000.0, 2800000.0, 2804000.0, 2808000.0, 2812000.0, 2816000.0, 2820000.0, 2824000.0, + 2828000.0, 2832000.0, 2836000.0, 2846000.0, 2856000.0, 2866000.0, 2875000.0, 2885000.0, 2895000.0, 2905000.0, 2915000.0, 2925000.0, + 2935000.0, 2955000.0, 2974000.0, 2994000.0, 3014000.0, 3034000.0, 3054000.0, 3074000.0, 3095000.0, 3115000.0, 3135000.0, 3155000.0, + 3176000.0, 3196000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2677000.0, 2679000.0, 2681000.0, 2683000.0, + 2685000.0, 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, 2708000.0, + 2710000.0, 2712000.0, 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, + 2734000.0, 2736000.0, 2740000.0, 2744000.0, 2748000.0, 2752000.0, 2756000.0, 2760000.0, 2764000.0, 2768000.0, 2772000.0, 2776000.0, + 2780000.0, 2784000.0, 2788000.0, 2792000.0, 2796000.0, 2800000.0, 2804000.0, 2808000.0, 2812000.0, 2816000.0, 2820000.0, 2824000.0, + 2828000.0, 2832000.0, 2836000.0, 2846000.0, 2855000.0, 2865000.0, 2875000.0, 2885000.0, 2895000.0, 2905000.0, 2915000.0, 2925000.0, + 2935000.0, 2954000.0, 2974000.0, 2994000.0, 3014000.0, 3034000.0, 3054000.0, 3074000.0, 3095000.0, 3115000.0, 3135000.0, 3155000.0, + 3176000.0, 3196000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2679000.0, 2681000.0, 2683000.0, + 2685000.0, 2687000.0, 2689000.0, 2691000.0, 2693000.0, 2695000.0, 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2706000.0, 2708000.0, + 2710000.0, 2712000.0, 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, 2732000.0, + 2734000.0, 2736000.0, 2740000.0, 2744000.0, 2748000.0, 2752000.0, 2756000.0, 2760000.0, 2764000.0, 2768000.0, 2772000.0, 2776000.0, + 2780000.0, 2784000.0, 2788000.0, 2792000.0, 2796000.0, 2800000.0, 2804000.0, 2808000.0, 2812000.0, 2816000.0, 2820000.0, 2824000.0, + 2828000.0, 2832000.0, 2835000.0, 2845000.0, 2855000.0, 2865000.0, 2875000.0, 2885000.0, 2895000.0, 2905000.0, 2915000.0, 2925000.0, + 2934000.0, 2954000.0, 2974000.0, 2994000.0, 3014000.0, 3034000.0, 3054000.0, 3074000.0, 3094000.0, 3115000.0, 3135000.0, 3155000.0, + 3176000.0, 3196000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2680000.0, 2682000.0, + 2684000.0, 2687000.0, 2689000.0, 2691000.0, 2693000.0, 2695000.0, 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, + 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2730000.0, 2732000.0, + 2734000.0, 2736000.0, 2740000.0, 2744000.0, 2748000.0, 2752000.0, 2756000.0, 2760000.0, 2764000.0, 2768000.0, 2772000.0, 2776000.0, + 2780000.0, 2784000.0, 2788000.0, 2792000.0, 2796000.0, 2800000.0, 2804000.0, 2807000.0, 2811000.0, 2815000.0, 2819000.0, 2823000.0, + 2827000.0, 2831000.0, 2835000.0, 2845000.0, 2855000.0, 2865000.0, 2875000.0, 2885000.0, 2895000.0, 2905000.0, 2914000.0, 2924000.0, + 2934000.0, 2954000.0, 2974000.0, 2994000.0, 3014000.0, 3034000.0, 3054000.0, 3074000.0, 3094000.0, 3115000.0, 3135000.0, 3155000.0, + 3176000.0, 3196000.0, 3217000.0, 3280000.0, 3383000.0, 3489000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2682000.0, + 2684000.0, 2686000.0, 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, 2698000.0, 2701000.0, 2703000.0, 2705000.0, 2707000.0, + 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, + 2733000.0, 2735000.0, 2739000.0, 2743000.0, 2747000.0, 2751000.0, 2755000.0, 2759000.0, 2763000.0, 2767000.0, 2771000.0, 2775000.0, + 2779000.0, 2783000.0, 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2811000.0, 2815000.0, 2819000.0, 2823000.0, + 2827000.0, 2831000.0, 2835000.0, 2845000.0, 2855000.0, 2865000.0, 2875000.0, 2885000.0, 2894000.0, 2904000.0, 2914000.0, 2924000.0, + 2934000.0, 2954000.0, 2974000.0, 2994000.0, 3014000.0, 3034000.0, 3054000.0, 3074000.0, 3094000.0, 3115000.0, 3135000.0, 3155000.0, + 3176000.0, 3196000.0, 3216000.0, 3280000.0, 3383000.0, 3489000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 2683000.0, 2685000.0, 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, + 2708000.0, 2710000.0, 2712000.0, 2714000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, 2731000.0, + 2733000.0, 2735000.0, 2739000.0, 2743000.0, 2747000.0, 2751000.0, 2755000.0, 2759000.0, 2763000.0, 2767000.0, 2771000.0, 2775000.0, + 2779000.0, 2783000.0, 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2811000.0, 2815000.0, 2819000.0, 2823000.0, + 2827000.0, 2831000.0, 2835000.0, 2845000.0, 2855000.0, 2865000.0, 2874000.0, 2884000.0, 2894000.0, 2904000.0, 2914000.0, 2924000.0, + 2934000.0, 2954000.0, 2974000.0, 2994000.0, 3014000.0, 3034000.0, 3054000.0, 3074000.0, 3094000.0, 3114000.0, 3135000.0, 3155000.0, + 3175000.0, 3196000.0, 3216000.0, 3280000.0, 3383000.0, 3489000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 2685000.0, 2687000.0, 2689000.0, 2691000.0, 2693000.0, 2695000.0, 2697000.0, 2700000.0, 2702000.0, 2704000.0, 2706000.0, + 2708000.0, 2710000.0, 2712000.0, 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, + 2732000.0, 2734000.0, 2738000.0, 2743000.0, 2747000.0, 2751000.0, 2755000.0, 2759000.0, 2763000.0, 2767000.0, 2771000.0, 2775000.0, + 2779000.0, 2783000.0, 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2811000.0, 2815000.0, 2819000.0, 2823000.0, + 2827000.0, 2831000.0, 2835000.0, 2844000.0, 2854000.0, 2864000.0, 2874000.0, 2884000.0, 2894000.0, 2904000.0, 2914000.0, 2924000.0, + 2934000.0, 2954000.0, 2974000.0, 2994000.0, 3014000.0, 3034000.0, 3054000.0, 3074000.0, 3094000.0, 3114000.0, 3135000.0, 3155000.0, + 3175000.0, 3196000.0, 3216000.0, 3280000.0, 3383000.0, 3488000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 2686000.0, 2689000.0, 2691000.0, 2693000.0, 2695000.0, 2697000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, + 2707000.0, 2709000.0, 2711000.0, 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, 2730000.0, + 2732000.0, 2734000.0, 2738000.0, 2742000.0, 2746000.0, 2750000.0, 2754000.0, 2758000.0, 2762000.0, 2766000.0, 2770000.0, 2774000.0, + 2778000.0, 2782000.0, 2786000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, + 2826000.0, 2830000.0, 2834000.0, 2844000.0, 2854000.0, 2864000.0, 2874000.0, 2884000.0, 2894000.0, 2904000.0, 2914000.0, 2924000.0, + 2934000.0, 2954000.0, 2974000.0, 2994000.0, 3014000.0, 3034000.0, 3054000.0, 3074000.0, 3094000.0, 3114000.0, 3135000.0, 3155000.0, + 3175000.0, 3196000.0, 3216000.0, 3280000.0, 3382000.0, 3488000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 2688000.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, 2699000.0, 2701000.0, 2703000.0, 2705000.0, + 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2730000.0, + 2732000.0, 2734000.0, 2738000.0, 2742000.0, 2746000.0, 2750000.0, 2754000.0, 2758000.0, 2762000.0, 2766000.0, 2770000.0, 2774000.0, + 2778000.0, 2782000.0, 2786000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, + 2826000.0, 2830000.0, 2834000.0, 2844000.0, 2854000.0, 2864000.0, 2874000.0, 2884000.0, 2894000.0, 2904000.0, 2914000.0, 2924000.0, + 2934000.0, 2953000.0, 2973000.0, 2993000.0, 3013000.0, 3033000.0, 3054000.0, 3074000.0, 3094000.0, 3114000.0, 3134000.0, 3155000.0, + 3175000.0, 3196000.0, 3216000.0, 3280000.0, 3382000.0, 3488000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 2690000.0, 2692000.0, 2694000.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0, 2704000.0, + 2706000.0, 2708000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, 2729000.0, + 2731000.0, 2733000.0, 2737000.0, 2741000.0, 2745000.0, 2749000.0, 2754000.0, 2758000.0, 2762000.0, 2766000.0, 2770000.0, 2774000.0, + 2778000.0, 2782000.0, 2786000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, + 2826000.0, 2830000.0, 2834000.0, 2844000.0, 2854000.0, 2864000.0, 2874000.0, 2884000.0, 2894000.0, 2903000.0, 2913000.0, 2923000.0, + 2933000.0, 2953000.0, 2973000.0, 2993000.0, 3013000.0, 3033000.0, 3053000.0, 3074000.0, 3094000.0, 3114000.0, 3134000.0, 3155000.0, + 3175000.0, 3196000.0, 3216000.0, 3280000.0, 3382000.0, 3488000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 2691000.0, 2693000.0, 2695000.0, 2697000.0, 2700000.0, 2702000.0, 2704000.0, + 2706000.0, 2708000.0, 2710000.0, 2712000.0, 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2727000.0, 2729000.0, + 2731000.0, 2733000.0, 2737000.0, 2741000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2769000.0, 2773000.0, + 2777000.0, 2781000.0, 2785000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, 2822000.0, + 2826000.0, 2830000.0, 2834000.0, 2844000.0, 2853000.0, 2863000.0, 2873000.0, 2883000.0, 2893000.0, 2903000.0, 2913000.0, 2923000.0, + 2933000.0, 2953000.0, 2973000.0, 2993000.0, 3013000.0, 3033000.0, 3053000.0, 3073000.0, 3094000.0, 3114000.0, 3134000.0, 3155000.0, + 3175000.0, 3195000.0, 3216000.0, 3280000.0, 3382000.0, 3488000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2693000.0, 2695000.0, 2697000.0, 2699000.0, 2701000.0, 2703000.0, + 2705000.0, 2707000.0, 2709000.0, 2712000.0, 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0, 2728000.0, + 2730000.0, 2732000.0, 2736000.0, 2740000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2769000.0, 2773000.0, + 2777000.0, 2781000.0, 2785000.0, 2789000.0, 2793000.0, 2797000.0, 2801000.0, 2805000.0, 2809000.0, 2813000.0, 2817000.0, 2821000.0, + 2825000.0, 2829000.0, 2833000.0, 2843000.0, 2853000.0, 2863000.0, 2873000.0, 2883000.0, 2893000.0, 2903000.0, 2913000.0, 2923000.0, + 2933000.0, 2953000.0, 2973000.0, 2993000.0, 3013000.0, 3033000.0, 3053000.0, 3073000.0, 3094000.0, 3114000.0, 3134000.0, 3154000.0, + 3175000.0, 3195000.0, 3216000.0, 3280000.0, 3382000.0, 3488000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2694000.0, 2696000.0, 2698000.0, 2700000.0, 2703000.0, + 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2724000.0, 2726000.0, 2728000.0, + 2730000.0, 2732000.0, 2736000.0, 2740000.0, 2744000.0, 2748000.0, 2752000.0, 2756000.0, 2760000.0, 2765000.0, 2769000.0, 2773000.0, + 2777000.0, 2781000.0, 2785000.0, 2789000.0, 2793000.0, 2797000.0, 2801000.0, 2805000.0, 2809000.0, 2813000.0, 2817000.0, 2821000.0, + 2825000.0, 2829000.0, 2833000.0, 2843000.0, 2853000.0, 2863000.0, 2873000.0, 2883000.0, 2893000.0, 2903000.0, 2913000.0, 2923000.0, + 2933000.0, 2953000.0, 2973000.0, 2993000.0, 3013000.0, 3033000.0, 3053000.0, 3073000.0, 3093000.0, 3114000.0, 3134000.0, 3154000.0, + 3175000.0, 3195000.0, 3216000.0, 3280000.0, 3382000.0, 3488000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2696000.0, 2698000.0, 2700000.0, 2702000.0, + 2704000.0, 2706000.0, 2708000.0, 2710000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, 2727000.0, + 2729000.0, 2731000.0, 2735000.0, 2740000.0, 2744000.0, 2748000.0, 2752000.0, 2756000.0, 2760000.0, 2764000.0, 2768000.0, 2772000.0, + 2776000.0, 2780000.0, 2784000.0, 2788000.0, 2793000.0, 2797000.0, 2801000.0, 2805000.0, 2809000.0, 2813000.0, 2817000.0, 2821000.0, + 2825000.0, 2829000.0, 2833000.0, 2843000.0, 2853000.0, 2863000.0, 2873000.0, 2883000.0, 2893000.0, 2903000.0, 2913000.0, 2923000.0, + 2933000.0, 2953000.0, 2973000.0, 2993000.0, 3013000.0, 3033000.0, 3053000.0, 3073000.0, 3093000.0, 3114000.0, 3134000.0, 3154000.0, + 3175000.0, 3195000.0, 3216000.0, 3280000.0, 3382000.0, 3488000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2697000.0, 2699000.0, 2701000.0, + 2703000.0, 2706000.0, 2708000.0, 2710000.0, 2712000.0, 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2725000.0, 2727000.0, + 2729000.0, 2731000.0, 2735000.0, 2739000.0, 2743000.0, 2747000.0, 2751000.0, 2756000.0, 2760000.0, 2764000.0, 2768000.0, 2772000.0, + 2776000.0, 2780000.0, 2784000.0, 2788000.0, 2792000.0, 2796000.0, 2800000.0, 2804000.0, 2808000.0, 2812000.0, 2816000.0, 2820000.0, + 2824000.0, 2828000.0, 2832000.0, 2842000.0, 2852000.0, 2862000.0, 2872000.0, 2882000.0, 2892000.0, 2902000.0, 2912000.0, 2922000.0, + 2932000.0, 2952000.0, 2972000.0, 2992000.0, 3013000.0, 3033000.0, 3053000.0, 3073000.0, 3093000.0, 3113000.0, 3134000.0, 3154000.0, + 3175000.0, 3195000.0, 3216000.0, 3280000.0, 3382000.0, 3488000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2699000.0, 2701000.0, + 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, 2726000.0, + 2728000.0, 2730000.0, 2734000.0, 2739000.0, 2743000.0, 2747000.0, 2751000.0, 2755000.0, 2759000.0, 2763000.0, 2767000.0, 2771000.0, + 2776000.0, 2780000.0, 2784000.0, 2788000.0, 2792000.0, 2796000.0, 2800000.0, 2804000.0, 2808000.0, 2812000.0, 2816000.0, 2820000.0, + 2824000.0, 2828000.0, 2832000.0, 2842000.0, 2852000.0, 2862000.0, 2872000.0, 2882000.0, 2892000.0, 2902000.0, 2912000.0, 2922000.0, + 2932000.0, 2952000.0, 2972000.0, 2992000.0, 3012000.0, 3032000.0, 3053000.0, 3073000.0, 3093000.0, 3113000.0, 3134000.0, 3154000.0, + 3174000.0, 3195000.0, 3216000.0, 3280000.0, 3382000.0, 3488000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2700000.0, + 2702000.0, 2704000.0, 2706000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2726000.0, + 2728000.0, 2730000.0, 2734000.0, 2738000.0, 2742000.0, 2746000.0, 2750000.0, 2755000.0, 2759000.0, 2763000.0, 2767000.0, 2771000.0, + 2775000.0, 2779000.0, 2783000.0, 2787000.0, 2791000.0, 2795000.0, 2800000.0, 2804000.0, 2808000.0, 2812000.0, 2816000.0, 2820000.0, + 2824000.0, 2828000.0, 2832000.0, 2842000.0, 2852000.0, 2862000.0, 2872000.0, 2882000.0, 2892000.0, 2902000.0, 2912000.0, 2922000.0, + 2932000.0, 2952000.0, 2972000.0, 2992000.0, 3012000.0, 3032000.0, 3052000.0, 3073000.0, 3093000.0, 3113000.0, 3134000.0, 3154000.0, + 3174000.0, 3195000.0, 3215000.0, 3280000.0, 3382000.0, 3488000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 2702000.0, 2704000.0, 2706000.0, 2708000.0, 2710000.0, 2712000.0, 2714000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, 2725000.0, + 2727000.0, 2729000.0, 2733000.0, 2738000.0, 2742000.0, 2746000.0, 2750000.0, 2754000.0, 2758000.0, 2762000.0, 2766000.0, 2771000.0, + 2775000.0, 2779000.0, 2783000.0, 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2811000.0, 2815000.0, 2819000.0, + 2823000.0, 2827000.0, 2831000.0, 2842000.0, 2852000.0, 2862000.0, 2872000.0, 2882000.0, 2892000.0, 2902000.0, 2912000.0, 2922000.0, + 2932000.0, 2952000.0, 2972000.0, 2992000.0, 3012000.0, 3032000.0, 3052000.0, 3073000.0, 3093000.0, 3113000.0, 3133000.0, 3154000.0, + 3174000.0, 3195000.0, 3215000.0, 3280000.0, 3382000.0, 3488000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 2703000.0, 2705000.0, 2707000.0, 2709000.0, 2712000.0, 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, 2724000.0, + 2726000.0, 2729000.0, 2733000.0, 2737000.0, 2741000.0, 2745000.0, 2749000.0, 2754000.0, 2758000.0, 2762000.0, 2766000.0, 2770000.0, + 2774000.0, 2778000.0, 2782000.0, 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2811000.0, 2815000.0, 2819000.0, + 2823000.0, 2827000.0, 2831000.0, 2841000.0, 2851000.0, 2861000.0, 2871000.0, 2881000.0, 2891000.0, 2901000.0, 2911000.0, 2922000.0, + 2932000.0, 2952000.0, 2972000.0, 2992000.0, 3012000.0, 3032000.0, 3052000.0, 3072000.0, 3093000.0, 3113000.0, 3133000.0, 3154000.0, + 3174000.0, 3195000.0, 3215000.0, 3280000.0, 3382000.0, 3488000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 2704000.0, 2707000.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2717000.0, 2720000.0, 2722000.0, 2724000.0, + 2726000.0, 2728000.0, 2732000.0, 2736000.0, 2741000.0, 2745000.0, 2749000.0, 2753000.0, 2757000.0, 2761000.0, 2766000.0, 2770000.0, + 2774000.0, 2778000.0, 2782000.0, 2786000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2811000.0, 2815000.0, 2819000.0, + 2823000.0, 2827000.0, 2831000.0, 2841000.0, 2851000.0, 2861000.0, 2871000.0, 2881000.0, 2891000.0, 2901000.0, 2911000.0, 2921000.0, + 2931000.0, 2951000.0, 2971000.0, 2992000.0, 3012000.0, 3032000.0, 3052000.0, 3072000.0, 3093000.0, 3113000.0, 3133000.0, 3154000.0, + 3174000.0, 3195000.0, 3215000.0, 3280000.0, 3382000.0, 3488000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 2706000.0, 2708000.0, 2710000.0, 2712000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, 2723000.0, + 2725000.0, 2727000.0, 2732000.0, 2736000.0, 2740000.0, 2744000.0, 2748000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, 2769000.0, + 2773000.0, 2777000.0, 2782000.0, 2786000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, + 2822000.0, 2826000.0, 2830000.0, 2841000.0, 2851000.0, 2861000.0, 2871000.0, 2881000.0, 2891000.0, 2901000.0, 2911000.0, 2921000.0, + 2931000.0, 2951000.0, 2971000.0, 2991000.0, 3012000.0, 3032000.0, 3052000.0, 3072000.0, 3092000.0, 3113000.0, 3133000.0, 3153000.0, + 3174000.0, 3194000.0, 3215000.0, 3280000.0, 3382000.0, 3488000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 2707000.0, 2710000.0, 2712000.0, 2714000.0, 2716000.0, 2718000.0, 2720000.0, 2722000.0, + 2725000.0, 2727000.0, 2731000.0, 2735000.0, 2739000.0, 2744000.0, 2748000.0, 2752000.0, 2756000.0, 2760000.0, 2765000.0, 2769000.0, + 2773000.0, 2777000.0, 2781000.0, 2785000.0, 2789000.0, 2793000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0, 2818000.0, + 2822000.0, 2826000.0, 2830000.0, 2840000.0, 2850000.0, 2860000.0, 2870000.0, 2881000.0, 2891000.0, 2901000.0, 2911000.0, 2921000.0, + 2931000.0, 2951000.0, 2971000.0, 2991000.0, 3011000.0, 3031000.0, 3052000.0, 3072000.0, 3092000.0, 3113000.0, 3133000.0, 3153000.0, + 3174000.0, 3194000.0, 3215000.0, 3280000.0, 3382000.0, 3488000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 2709000.0, 2711000.0, 2713000.0, 2715000.0, 2718000.0, 2720000.0, 2722000.0, + 2724000.0, 2726000.0, 2730000.0, 2735000.0, 2739000.0, 2743000.0, 2747000.0, 2752000.0, 2756000.0, 2760000.0, 2764000.0, 2768000.0, + 2772000.0, 2776000.0, 2781000.0, 2785000.0, 2789000.0, 2793000.0, 2797000.0, 2801000.0, 2805000.0, 2809000.0, 2813000.0, 2818000.0, + 2822000.0, 2826000.0, 2830000.0, 2840000.0, 2850000.0, 2860000.0, 2870000.0, 2880000.0, 2890000.0, 2900000.0, 2910000.0, 2921000.0, + 2931000.0, 2951000.0, 2971000.0, 2991000.0, 3011000.0, 3031000.0, 3052000.0, 3072000.0, 3092000.0, 3112000.0, 3133000.0, 3153000.0, + 3174000.0, 3194000.0, 3215000.0, 3280000.0, 3381000.0, 3488000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2710000.0, 2712000.0, 2715000.0, 2717000.0, 2719000.0, 2721000.0, + 2723000.0, 2725000.0, 2730000.0, 2734000.0, 2738000.0, 2743000.0, 2747000.0, 2751000.0, 2755000.0, 2759000.0, 2764000.0, 2768000.0, + 2772000.0, 2776000.0, 2780000.0, 2784000.0, 2788000.0, 2793000.0, 2797000.0, 2801000.0, 2805000.0, 2809000.0, 2813000.0, 2817000.0, + 2821000.0, 2825000.0, 2829000.0, 2839000.0, 2850000.0, 2860000.0, 2870000.0, 2880000.0, 2890000.0, 2900000.0, 2910000.0, 2920000.0, + 2930000.0, 2950000.0, 2971000.0, 2991000.0, 3011000.0, 3031000.0, 3051000.0, 3072000.0, 3092000.0, 3112000.0, 3133000.0, 3153000.0, + 3174000.0, 3194000.0, 3215000.0, 3280000.0, 3381000.0, 3487000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2712000.0, 2714000.0, 2716000.0, 2718000.0, 2720000.0, + 2723000.0, 2725000.0, 2729000.0, 2733000.0, 2738000.0, 2742000.0, 2746000.0, 2750000.0, 2755000.0, 2759000.0, 2763000.0, 2767000.0, + 2771000.0, 2775000.0, 2780000.0, 2784000.0, 2788000.0, 2792000.0, 2796000.0, 2800000.0, 2804000.0, 2808000.0, 2813000.0, 2817000.0, + 2821000.0, 2825000.0, 2829000.0, 2839000.0, 2849000.0, 2859000.0, 2870000.0, 2880000.0, 2890000.0, 2900000.0, 2910000.0, 2920000.0, + 2930000.0, 2950000.0, 2970000.0, 2991000.0, 3011000.0, 3031000.0, 3051000.0, 3071000.0, 3092000.0, 3112000.0, 3132000.0, 3153000.0, + 3173000.0, 3194000.0, 3215000.0, 3280000.0, 3381000.0, 3487000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2713000.0, 2715000.0, 2717000.0, 2720000.0, + 2722000.0, 2724000.0, 2728000.0, 2733000.0, 2737000.0, 2741000.0, 2746000.0, 2750000.0, 2754000.0, 2758000.0, 2762000.0, 2767000.0, + 2771000.0, 2775000.0, 2779000.0, 2783000.0, 2787000.0, 2792000.0, 2796000.0, 2800000.0, 2804000.0, 2808000.0, 2812000.0, 2816000.0, + 2820000.0, 2824000.0, 2829000.0, 2839000.0, 2849000.0, 2859000.0, 2869000.0, 2879000.0, 2889000.0, 2900000.0, 2910000.0, 2920000.0, + 2930000.0, 2950000.0, 2970000.0, 2990000.0, 3011000.0, 3031000.0, 3051000.0, 3071000.0, 3092000.0, 3112000.0, 3132000.0, 3153000.0, + 3173000.0, 3194000.0, 3214000.0, 3280000.0, 3381000.0, 3487000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2715000.0, 2717000.0, 2719000.0, + 2721000.0, 2723000.0, 2728000.0, 2732000.0, 2736000.0, 2741000.0, 2745000.0, 2749000.0, 2753000.0, 2758000.0, 2762000.0, 2766000.0, + 2770000.0, 2774000.0, 2779000.0, 2783000.0, 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2808000.0, 2812000.0, 2816000.0, + 2820000.0, 2824000.0, 2828000.0, 2838000.0, 2849000.0, 2859000.0, 2869000.0, 2879000.0, 2889000.0, 2899000.0, 2909000.0, 2919000.0, + 2930000.0, 2950000.0, 2970000.0, 2990000.0, 3010000.0, 3031000.0, 3051000.0, 3071000.0, 3091000.0, 3112000.0, 3132000.0, 3153000.0, + 3173000.0, 3194000.0, 3214000.0, 3280000.0, 3381000.0, 3487000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2716000.0, 2718000.0, + 2720000.0, 2723000.0, 2727000.0, 2731000.0, 2736000.0, 2740000.0, 2744000.0, 2748000.0, 2753000.0, 2757000.0, 2761000.0, 2765000.0, + 2770000.0, 2774000.0, 2778000.0, 2782000.0, 2786000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2807000.0, 2811000.0, 2815000.0, + 2819000.0, 2824000.0, 2828000.0, 2838000.0, 2848000.0, 2858000.0, 2868000.0, 2879000.0, 2889000.0, 2899000.0, 2909000.0, 2919000.0, + 2929000.0, 2949000.0, 2970000.0, 2990000.0, 3010000.0, 3030000.0, 3051000.0, 3071000.0, 3091000.0, 3112000.0, 3132000.0, 3152000.0, + 3173000.0, 3194000.0, 3214000.0, 3280000.0, 3381000.0, 3487000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2717000.0, + 2720000.0, 2722000.0, 2726000.0, 2731000.0, 2735000.0, 2739000.0, 2744000.0, 2748000.0, 2752000.0, 2756000.0, 2761000.0, 2765000.0, + 2769000.0, 2773000.0, 2777000.0, 2782000.0, 2786000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2807000.0, 2811000.0, 2815000.0, + 2819000.0, 2823000.0, 2827000.0, 2837000.0, 2848000.0, 2858000.0, 2868000.0, 2878000.0, 2888000.0, 2899000.0, 2909000.0, 2919000.0, + 2929000.0, 2949000.0, 2969000.0, 2990000.0, 3010000.0, 3030000.0, 3050000.0, 3071000.0, 3091000.0, 3111000.0, 3132000.0, 3152000.0, + 3173000.0, 3193000.0, 3214000.0, 3280000.0, 3381000.0, 3487000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 2719000.0, 2721000.0, 2725000.0, 2730000.0, 2734000.0, 2738000.0, 2743000.0, 2747000.0, 2751000.0, 2756000.0, 2760000.0, 2764000.0, + 2768000.0, 2773000.0, 2777000.0, 2781000.0, 2785000.0, 2789000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2810000.0, 2814000.0, + 2819000.0, 2823000.0, 2827000.0, 2837000.0, 2847000.0, 2858000.0, 2868000.0, 2878000.0, 2888000.0, 2898000.0, 2908000.0, 2919000.0, + 2929000.0, 2949000.0, 2969000.0, 2989000.0, 3010000.0, 3030000.0, 3050000.0, 3071000.0, 3091000.0, 3111000.0, 3132000.0, 3152000.0, + 3173000.0, 3193000.0, 3214000.0, 3280000.0, 3381000.0, 3487000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 2720000.0, 2725000.0, 2729000.0, 2733000.0, 2738000.0, 2742000.0, 2746000.0, 2751000.0, 2755000.0, 2759000.0, 2764000.0, + 2768000.0, 2772000.0, 2776000.0, 2781000.0, 2785000.0, 2789000.0, 2793000.0, 2797000.0, 2801000.0, 2806000.0, 2810000.0, 2814000.0, + 2818000.0, 2822000.0, 2826000.0, 2837000.0, 2847000.0, 2857000.0, 2867000.0, 2878000.0, 2888000.0, 2898000.0, 2908000.0, 2918000.0, + 2928000.0, 2949000.0, 2969000.0, 2989000.0, 3009000.0, 3030000.0, 3050000.0, 3070000.0, 3091000.0, 3111000.0, 3132000.0, 3152000.0, + 3173000.0, 3193000.0, 3214000.0, 3280000.0, 3381000.0, 3487000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 2723000.0, 2727000.0, 2732000.0, 2736000.0, 2741000.0, 2745000.0, 2749000.0, 2754000.0, 2758000.0, 2762000.0, + 2767000.0, 2771000.0, 2775000.0, 2779000.0, 2784000.0, 2788000.0, 2792000.0, 2796000.0, 2800000.0, 2805000.0, 2809000.0, 2813000.0, + 2817000.0, 2821000.0, 2825000.0, 2836000.0, 2846000.0, 2856000.0, 2867000.0, 2877000.0, 2887000.0, 2897000.0, 2907000.0, 2918000.0, + 2928000.0, 2948000.0, 2968000.0, 2989000.0, 3009000.0, 3029000.0, 3050000.0, 3070000.0, 3090000.0, 3111000.0, 3131000.0, 3152000.0, + 3172000.0, 3193000.0, 3213000.0, 3280000.0, 3380000.0, 3487000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 2726000.0, 2730000.0, 2735000.0, 2739000.0, 2743000.0, 2748000.0, 2752000.0, 2757000.0, 2761000.0, + 2765000.0, 2769000.0, 2774000.0, 2778000.0, 2782000.0, 2787000.0, 2791000.0, 2795000.0, 2799000.0, 2803000.0, 2808000.0, 2812000.0, + 2816000.0, 2820000.0, 2824000.0, 2835000.0, 2845000.0, 2855000.0, 2866000.0, 2876000.0, 2886000.0, 2896000.0, 2907000.0, 2917000.0, + 2927000.0, 2947000.0, 2968000.0, 2988000.0, 3008000.0, 3029000.0, 3049000.0, 3069000.0, 3090000.0, 3110000.0, 3131000.0, 3151000.0, + 3172000.0, 3192000.0, 3213000.0, 3280000.0, 3380000.0, 3487000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 2728000.0, 2733000.0, 2737000.0, 2742000.0, 2746000.0, 2751000.0, 2755000.0, 2759000.0, + 2764000.0, 2768000.0, 2772000.0, 2777000.0, 2781000.0, 2785000.0, 2790000.0, 2794000.0, 2798000.0, 2802000.0, 2806000.0, 2811000.0, + 2815000.0, 2819000.0, 2823000.0, 2834000.0, 2844000.0, 2854000.0, 2865000.0, 2875000.0, 2885000.0, 2896000.0, 2906000.0, 2916000.0, + 2926000.0, 2947000.0, 2967000.0, 2987000.0, 3008000.0, 3028000.0, 3049000.0, 3069000.0, 3089000.0, 3110000.0, 3130000.0, 3151000.0, + 3172000.0, 3192000.0, 3213000.0, 3280000.0, 3380000.0, 3486000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 2731000.0, 2735000.0, 2740000.0, 2744000.0, 2749000.0, 2753000.0, 2758000.0, + 2762000.0, 2767000.0, 2771000.0, 2775000.0, 2780000.0, 2784000.0, 2788000.0, 2792000.0, 2797000.0, 2801000.0, 2805000.0, 2809000.0, + 2814000.0, 2818000.0, 2822000.0, 2833000.0, 2843000.0, 2853000.0, 2864000.0, 2874000.0, 2885000.0, 2895000.0, 2905000.0, 2915000.0, + 2926000.0, 2946000.0, 2966000.0, 2987000.0, 3007000.0, 3028000.0, 3048000.0, 3069000.0, 3089000.0, 3109000.0, 3130000.0, 3151000.0, + 3171000.0, 3192000.0, 3212000.0, 3280000.0, 3380000.0, 3486000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2733000.0, 2738000.0, 2743000.0, 2747000.0, 2752000.0, 2756000.0, + 2761000.0, 2765000.0, 2769000.0, 2774000.0, 2778000.0, 2782000.0, 2787000.0, 2791000.0, 2795000.0, 2800000.0, 2804000.0, 2808000.0, + 2812000.0, 2817000.0, 2821000.0, 2831000.0, 2842000.0, 2852000.0, 2863000.0, 2873000.0, 2884000.0, 2894000.0, 2904000.0, 2915000.0, + 2925000.0, 2945000.0, 2966000.0, 2986000.0, 3007000.0, 3027000.0, 3048000.0, 3068000.0, 3089000.0, 3109000.0, 3130000.0, 3150000.0, + 3171000.0, 3191000.0, 3212000.0, 3280000.0, 3380000.0, 3486000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2736000.0, 2741000.0, 2745000.0, 2750000.0, 2754000.0, + 2759000.0, 2763000.0, 2768000.0, 2772000.0, 2777000.0, 2781000.0, 2785000.0, 2790000.0, 2794000.0, 2798000.0, 2803000.0, 2807000.0, + 2811000.0, 2815000.0, 2820000.0, 2830000.0, 2841000.0, 2851000.0, 2862000.0, 2872000.0, 2883000.0, 2893000.0, 2903000.0, 2914000.0, + 2924000.0, 2945000.0, 2965000.0, 2986000.0, 3006000.0, 3027000.0, 3047000.0, 3068000.0, 3088000.0, 3109000.0, 3129000.0, 3150000.0, + 3170000.0, 3191000.0, 3212000.0, 3280000.0, 3379000.0, 3486000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2739000.0, 2743000.0, 2748000.0, 2752000.0, + 2757000.0, 2761000.0, 2766000.0, 2770000.0, 2775000.0, 2779000.0, 2784000.0, 2788000.0, 2792000.0, 2797000.0, 2801000.0, 2805000.0, + 2810000.0, 2814000.0, 2818000.0, 2829000.0, 2840000.0, 2850000.0, 2861000.0, 2871000.0, 2882000.0, 2892000.0, 2902000.0, 2913000.0, + 2923000.0, 2944000.0, 2964000.0, 2985000.0, 3005000.0, 3026000.0, 3046000.0, 3067000.0, 3088000.0, 3108000.0, 3129000.0, 3149000.0, + 3170000.0, 3191000.0, 3211000.0, 3280000.0, 3379000.0, 3485000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2741000.0, 2746000.0, 2750000.0, + 2755000.0, 2760000.0, 2764000.0, 2769000.0, 2773000.0, 2778000.0, 2782000.0, 2786000.0, 2791000.0, 2795000.0, 2800000.0, 2804000.0, + 2808000.0, 2813000.0, 2817000.0, 2828000.0, 2838000.0, 2849000.0, 2860000.0, 2870000.0, 2881000.0, 2891000.0, 2901000.0, 2912000.0, + 2922000.0, 2943000.0, 2964000.0, 2984000.0, 3005000.0, 3025000.0, 3046000.0, 3066000.0, 3087000.0, 3108000.0, 3128000.0, 3149000.0, + 3170000.0, 3190000.0, 3211000.0, 3280000.0, 3379000.0, 3485000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2744000.0, 2748000.0, + 2753000.0, 2758000.0, 2762000.0, 2767000.0, 2771000.0, 2776000.0, 2780000.0, 2785000.0, 2789000.0, 2794000.0, 2798000.0, 2802000.0, + 2807000.0, 2811000.0, 2815000.0, 2826000.0, 2837000.0, 2848000.0, 2858000.0, 2869000.0, 2879000.0, 2890000.0, 2900000.0, 2911000.0, + 2921000.0, 2942000.0, 2963000.0, 2983000.0, 3004000.0, 3025000.0, 3045000.0, 3066000.0, 3086000.0, 3107000.0, 3128000.0, 3148000.0, + 3169000.0, 3190000.0, 3211000.0, 3280000.0, 3378000.0, 3485000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2746000.0, + 2751000.0, 2755000.0, 2760000.0, 2765000.0, 2769000.0, 2774000.0, 2778000.0, 2783000.0, 2787000.0, 2792000.0, 2796000.0, 2801000.0, + 2805000.0, 2810000.0, 2814000.0, 2825000.0, 2836000.0, 2846000.0, 2857000.0, 2868000.0, 2878000.0, 2889000.0, 2899000.0, 2910000.0, + 2920000.0, 2941000.0, 2962000.0, 2983000.0, 3003000.0, 3024000.0, 3045000.0, 3065000.0, 3086000.0, 3106000.0, 3127000.0, 3148000.0, + 3169000.0, 3189000.0, 3210000.0, 3280000.0, 3378000.0, 3485000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 2748000.0, 2753000.0, 2758000.0, 2763000.0, 2767000.0, 2772000.0, 2776000.0, 2781000.0, 2786000.0, 2790000.0, 2795000.0, 2799000.0, + 2803000.0, 2808000.0, 2812000.0, 2823000.0, 2834000.0, 2845000.0, 2856000.0, 2866000.0, 2877000.0, 2888000.0, 2898000.0, 2909000.0, + 2919000.0, 2940000.0, 2961000.0, 2982000.0, 3002000.0, 3023000.0, 3044000.0, 3064000.0, 3085000.0, 3106000.0, 3127000.0, 3147000.0, + 3168000.0, 3189000.0, 3210000.0, 3280000.0, 3378000.0, 3484000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 2751000.0, 2755000.0, 2760000.0, 2765000.0, 2770000.0, 2774000.0, 2779000.0, 2784000.0, 2788000.0, 2793000.0, 2797000.0, + 2802000.0, 2806000.0, 2811000.0, 2822000.0, 2833000.0, 2843000.0, 2854000.0, 2865000.0, 2876000.0, 2886000.0, 2897000.0, 2908000.0, + 2918000.0, 2939000.0, 2960000.0, 2981000.0, 3002000.0, 3022000.0, 3043000.0, 3064000.0, 3085000.0, 3105000.0, 3126000.0, 3147000.0, + 3168000.0, 3188000.0, 3209000.0, 3280000.0, 3377000.0, 3484000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 2753000.0, 2758000.0, 2763000.0, 2767000.0, 2772000.0, 2777000.0, 2781000.0, 2786000.0, 2791000.0, 2795000.0, + 2800000.0, 2804000.0, 2809000.0, 2820000.0, 2831000.0, 2842000.0, 2853000.0, 2864000.0, 2874000.0, 2885000.0, 2896000.0, 2906000.0, + 2917000.0, 2938000.0, 2959000.0, 2980000.0, 3001000.0, 3022000.0, 3042000.0, 3063000.0, 3084000.0, 3105000.0, 3125000.0, 3146000.0, + 3167000.0, 3188000.0, 3209000.0, 3280000.0, 3377000.0, 3484000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 2755000.0, 2760000.0, 2765000.0, 2770000.0, 2775000.0, 2779000.0, 2784000.0, 2789000.0, 2793000.0, + 2798000.0, 2802000.0, 2807000.0, 2818000.0, 2829000.0, 2840000.0, 2851000.0, 2862000.0, 2873000.0, 2884000.0, 2894000.0, 2905000.0, + 2916000.0, 2937000.0, 2958000.0, 2979000.0, 3000000.0, 3021000.0, 3042000.0, 3062000.0, 3083000.0, 3104000.0, 3125000.0, 3146000.0, + 3166000.0, 3187000.0, 3208000.0, 3280000.0, 3377000.0, 3484000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 2757000.0, 2762000.0, 2767000.0, 2772000.0, 2777000.0, 2782000.0, 2786000.0, 2791000.0, + 2796000.0, 2800000.0, 2805000.0, 2816000.0, 2827000.0, 2839000.0, 2850000.0, 2861000.0, 2872000.0, 2882000.0, 2893000.0, 2904000.0, + 2915000.0, 2936000.0, 2957000.0, 2978000.0, 2999000.0, 3020000.0, 3041000.0, 3062000.0, 3082000.0, 3103000.0, 3124000.0, 3145000.0, + 3166000.0, 3187000.0, 3208000.0, 3280000.0, 3376000.0, 3483000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 2760000.0, 2765000.0, 2770000.0, 2774000.0, 2779000.0, 2784000.0, 2789000.0, + 2793000.0, 2798000.0, 2803000.0, 2814000.0, 2826000.0, 2837000.0, 2848000.0, 2859000.0, 2870000.0, 2881000.0, 2892000.0, 2902000.0, + 2913000.0, 2935000.0, 2956000.0, 2977000.0, 2998000.0, 3019000.0, 3040000.0, 3061000.0, 3082000.0, 3102000.0, 3123000.0, 3144000.0, + 3165000.0, 3186000.0, 3207000.0, 3280000.0, 3376000.0, 3483000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2762000.0, 2767000.0, 2772000.0, 2777000.0, 2781000.0, 2786000.0, + 2791000.0, 2796000.0, 2800000.0, 2812000.0, 2824000.0, 2835000.0, 2846000.0, 2857000.0, 2868000.0, 2879000.0, 2890000.0, 2901000.0, + 2912000.0, 2933000.0, 2955000.0, 2976000.0, 2997000.0, 3018000.0, 3039000.0, 3060000.0, 3081000.0, 3102000.0, 3123000.0, 3144000.0, + 3164000.0, 3185000.0, 3206000.0, 3280000.0, 3375000.0, 3483000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2764000.0, 2769000.0, 2774000.0, 2779000.0, 2784000.0, + 2789000.0, 2793000.0, 2798000.0, 2810000.0, 2821000.0, 2833000.0, 2844000.0, 2855000.0, 2867000.0, 2878000.0, 2889000.0, 2900000.0, + 2910000.0, 2932000.0, 2953000.0, 2975000.0, 2996000.0, 3017000.0, 3038000.0, 3059000.0, 3080000.0, 3101000.0, 3122000.0, 3143000.0, + 3164000.0, 3185000.0, 3206000.0, 3280000.0, 3375000.0, 3482000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2766000.0, 2771000.0, 2776000.0, 2781000.0, + 2786000.0, 2791000.0, 2796000.0, 2808000.0, 2819000.0, 2831000.0, 2842000.0, 2854000.0, 2865000.0, 2876000.0, 2887000.0, 2898000.0, + 2909000.0, 2931000.0, 2952000.0, 2973000.0, 2995000.0, 3016000.0, 3037000.0, 3058000.0, 3079000.0, 3100000.0, 3121000.0, 3142000.0, + 3163000.0, 3184000.0, 3205000.0, 3280000.0, 3374000.0, 3482000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2768000.0, 2773000.0, 2778000.0, + 2783000.0, 2788000.0, 2793000.0, 2805000.0, 2817000.0, 2829000.0, 2840000.0, 2852000.0, 2863000.0, 2874000.0, 2885000.0, 2896000.0, + 2907000.0, 2929000.0, 2951000.0, 2972000.0, 2994000.0, 3015000.0, 3036000.0, 3057000.0, 3078000.0, 3099000.0, 3120000.0, 3141000.0, + 3162000.0, 3183000.0, 3204000.0, 3280000.0, 3374000.0, 3481000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2770000.0, 2775000.0, + 2780000.0, 2785000.0, 2790000.0, 2802000.0, 2814000.0, 2826000.0, 2838000.0, 2850000.0, 2861000.0, 2872000.0, 2883000.0, 2895000.0, + 2906000.0, 2928000.0, 2949000.0, 2971000.0, 2992000.0, 3014000.0, 3035000.0, 3056000.0, 3077000.0, 3098000.0, 3119000.0, 3140000.0, + 3162000.0, 3183000.0, 3204000.0, 3280000.0, 3373000.0, 3481000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2772000.0, + 2777000.0, 2782000.0, 2787000.0, 2800000.0, 2812000.0, 2824000.0, 2836000.0, 2847000.0, 2859000.0, 2870000.0, 2882000.0, 2893000.0, + 2904000.0, 2926000.0, 2948000.0, 2969000.0, 2991000.0, 3012000.0, 3034000.0, 3055000.0, 3076000.0, 3097000.0, 3118000.0, 3140000.0, + 3161000.0, 3182000.0, 3203000.0, 3280000.0, 3373000.0, 3480000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 2774000.0, 2779000.0, 2784000.0, 2797000.0, 2809000.0, 2821000.0, 2833000.0, 2845000.0, 2857000.0, 2868000.0, 2880000.0, 2891000.0, + 2902000.0, 2924000.0, 2946000.0, 2968000.0, 2990000.0, 3011000.0, 3033000.0, 3054000.0, 3075000.0, 3096000.0, 3118000.0, 3139000.0, + 3160000.0, 3181000.0, 3202000.0, 3280000.0, 3372000.0, 3480000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 2775000.0, 2781000.0, 2794000.0, 2806000.0, 2819000.0, 2831000.0, 2843000.0, 2854000.0, 2866000.0, 2878000.0, 2889000.0, + 2900000.0, 2923000.0, 2945000.0, 2967000.0, 2988000.0, 3010000.0, 3031000.0, 3053000.0, 3074000.0, 3095000.0, 3117000.0, 3138000.0, + 3159000.0, 3180000.0, 3201000.0, 3280000.0, 3372000.0, 3480000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 2777000.0, 2790000.0, 2803000.0, 2816000.0, 2828000.0, 2840000.0, 2852000.0, 2864000.0, 2875000.0, 2887000.0, + 2898000.0, 2921000.0, 2943000.0, 2965000.0, 2987000.0, 3009000.0, 3030000.0, 3052000.0, 3073000.0, 3094000.0, 3116000.0, 3137000.0, + 3158000.0, 3179000.0, 3201000.0, 3280000.0, 3371000.0, 3479000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 2781000.0, 2795000.0, 2808000.0, 2821000.0, 2833000.0, 2846000.0, 2858000.0, 2870000.0, 2881000.0, + 2893000.0, 2916000.0, 2939000.0, 2961000.0, 2983000.0, 3005000.0, 3027000.0, 3048000.0, 3070000.0, 3091000.0, 3113000.0, 3134000.0, + 3156000.0, 3177000.0, 3198000.0, 3280000.0, 3370000.0, 3478000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 2785000.0, 2799000.0, 2813000.0, 2826000.0, 2838000.0, 2851000.0, 2863000.0, 2875000.0, + 2887000.0, 2910000.0, 2933000.0, 2956000.0, 2979000.0, 3001000.0, 3023000.0, 3045000.0, 3067000.0, 3088000.0, 3110000.0, 3132000.0, + 3153000.0, 3175000.0, 3196000.0, 3280000.0, 3368000.0, 3476000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 2789000.0, 2803000.0, 2817000.0, 2830000.0, 2843000.0, 2856000.0, 2868000.0, + 2880000.0, 2904000.0, 2928000.0, 2951000.0, 2974000.0, 2996000.0, 3019000.0, 3041000.0, 3063000.0, 3085000.0, 3107000.0, 3128000.0, + 3150000.0, 3172000.0, 3193000.0, 3280000.0, 3366000.0, 3475000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2792000.0, 2807000.0, 2821000.0, 2834000.0, 2847000.0, 2860000.0, + 2873000.0, 2898000.0, 2922000.0, 2945000.0, 2969000.0, 2992000.0, 3014000.0, 3037000.0, 3059000.0, 3081000.0, 3103000.0, 3125000.0, + 3147000.0, 3169000.0, 3190000.0, 3280000.0, 3364000.0, 3473000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2795000.0, 2810000.0, 2824000.0, 2838000.0, 2851000.0, + 2864000.0, 2890000.0, 2915000.0, 2939000.0, 2963000.0, 2986000.0, 3009000.0, 3032000.0, 3055000.0, 3077000.0, 3099000.0, 3121000.0, + 3143000.0, 3165000.0, 3187000.0, 3280000.0, 3362000.0, 3471000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2797000.0, 2813000.0, 2827000.0, 2841000.0, + 2855000.0, 2882000.0, 2907000.0, 2932000.0, 2956000.0, 2980000.0, 3004000.0, 3027000.0, 3050000.0, 3072000.0, 3095000.0, 3117000.0, + 3140000.0, 3162000.0, 3184000.0, 3280000.0, 3359000.0, 3469000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2799000.0, 2815000.0, 2830000.0, + 2844000.0, 2872000.0, 2899000.0, 2924000.0, 2949000.0, 2974000.0, 2998000.0, 3021000.0, 3044000.0, 3067000.0, 3090000.0, 3113000.0, + 3135000.0, 3158000.0, 3180000.0, 3280000.0, 3357000.0, 3467000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2801000.0, 2817000.0, + 2832000.0, 2862000.0, 2889000.0, 2916000.0, 2941000.0, 2966000.0, 2991000.0, 3015000.0, 3039000.0, 3062000.0, 3085000.0, 3108000.0, + 3131000.0, 3154000.0, 3176000.0, 3280000.0, 3354000.0, 3465000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2802000.0, + 2819000.0, 2850000.0, 2879000.0, 2906000.0, 2933000.0, 2958000.0, 2984000.0, 3008000.0, 3032000.0, 3056000.0, 3080000.0, 3103000.0, + 3126000.0, 3149000.0, 3172000.0, 3280000.0, 3351000.0, 3462000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 2803000.0, 2836000.0, 2867000.0, 2895000.0, 2923000.0, 2950000.0, 2975000.0, 3001000.0, 3025000.0, 3050000.0, 3073000.0, 3097000.0, + 3121000.0, 3144000.0, 3167000.0, 3280000.0, 3348000.0, 3459000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 2803000.0, 2838000.0, 2870000.0, 2900000.0, 2929000.0, 2957000.0, 2983000.0, 3009000.0, 3035000.0, 3060000.0, 3084000.0, + 3108000.0, 3132000.0, 3156000.0, 3280000.0, 3340000.0, 3453000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 2801000.0, 2838000.0, 2872000.0, 2904000.0, 2934000.0, 2963000.0, 2990000.0, 3017000.0, 3043000.0, 3069000.0, + 3094000.0, 3119000.0, 3143000.0, 3280000.0, 3332000.0, 3446000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 2797000.0, 2837000.0, 2873000.0, 2906000.0, 2937000.0, 2967000.0, 2996000.0, 3023000.0, 3050000.0, + 3077000.0, 3103000.0, 3128000.0, 3280000.0, 3322000.0, 3438000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 2790000.0, 2833000.0, 2871000.0, 2906000.0, 2939000.0, 2970000.0, 3000000.0, 3029000.0, + 3057000.0, 3084000.0, 3110000.0, 3280000.0, 3310000.0, 3429000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 2780000.0, 2826000.0, 2867000.0, 2905000.0, 2939000.0, 2972000.0, 3003000.0, + 3033000.0, 3062000.0, 3090000.0, 3280000.0, 3297000.0, 3418000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2767000.0, 2817000.0, + 2861000.0, 2901000.0, 2938000.0, 2972000.0, 3004000.0, 3036000.0, 3066000.0, 3280000.0, 3282000.0, 3406000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2750000.0, + 2806000.0, 2853000.0, 2895000.0, 2934000.0, 2970000.0, 3004000.0, 3037000.0, 3280000.0, 3264000.0, 3392000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2728000.0, + 2790000.0, 2842000.0, 2887000.0, 2929000.0, 2967000.0, 3003000.0, 3280000.0, 3244000.0, 3377000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 2701000.0, 2771000.0, 2828000.0, 2877000.0, 2921000.0, 2961000.0, 3280000.0, 3222000.0, 3359000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 2666000.0, 2747000.0, 2810000.0, 2864000.0, 2911000.0, 3280000.0, 3195000.0, 3339000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 2622000.0, 2718000.0, 2789000.0, 2847000.0, 3280000.0, 3165000.0, 3316000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2564000.0, 2683000.0, 2763000.0, 3280000.0, 3130000.0, 3290000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2481000.0, 2641000.0, 3280000.0, 3089000.0, 3260000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2335000.0, 3280000.0, 3040000.0, 3226000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3280000.0, 2821000.0, 3085000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3280000.0, 2671000.0, 2998000.0}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3280000.0, 2512000.0, 2906000.0}}}; + static constexpr std::array, DefaultNumSteamSuperheatedPressure> - DefaultSteamSuperheatedDensityDataTable = { - {{4.855e-03, 4.837e-03, 4.767e-03, 4.683e-03, 4.601e-03, 4.522e-03, 4.446e-03, 4.373e-03, 4.302e-03, 4.233e-03, 4.167e-03, 4.102e-03, - 4.039e-03, 3.979e-03, 3.920e-03, 3.863e-03, 3.840e-03, 3.818e-03, 3.796e-03, 3.775e-03, 3.753e-03, 3.732e-03, 3.711e-03, 3.691e-03, - 3.670e-03, 3.650e-03, 3.630e-03, 3.610e-03, 3.591e-03, 3.571e-03, 3.562e-03, 3.552e-03, 3.543e-03, 3.533e-03, 3.524e-03, 3.514e-03, - 3.505e-03, 3.496e-03, 3.487e-03, 3.477e-03, 3.468e-03, 3.459e-03, 3.450e-03, 3.441e-03, 3.432e-03, 3.424e-03, 3.415e-03, 3.406e-03, - 3.397e-03, 3.388e-03, 3.380e-03, 3.371e-03, 3.363e-03, 3.354e-03, 3.346e-03, 3.337e-03, 3.329e-03, 3.321e-03, 3.312e-03, 3.304e-03, - 3.296e-03, 3.288e-03, 3.271e-03, 3.255e-03, 3.239e-03, 3.224e-03, 3.208e-03, 3.193e-03, 3.177e-03, 3.162e-03, 3.147e-03, 3.132e-03, - 3.117e-03, 3.103e-03, 3.088e-03, 3.074e-03, 3.060e-03, 3.046e-03, 3.032e-03, 3.018e-03, 3.004e-03, 2.991e-03, 2.977e-03, 2.964e-03, - 2.951e-03, 2.938e-03, 2.925e-03, 2.893e-03, 2.862e-03, 2.831e-03, 2.801e-03, 2.772e-03, 2.743e-03, 2.715e-03, 2.688e-03, 2.661e-03, - 2.634e-03, 2.583e-03, 2.533e-03, 2.486e-03, 2.440e-03, 2.396e-03, 2.353e-03, 2.312e-03, 2.273e-03, 2.234e-03, 2.197e-03, 2.162e-03, - 2.127e-03, 2.093e-03, 2.061e-03, 3.542e-05, 1.833e-03, 1.714e-03}, - {0.0, 5.196e-03, 5.121e-03, 5.031e-03, 4.943e-03, 4.859e-03, 4.777e-03, 4.698e-03, 4.622e-03, 4.548e-03, 4.476e-03, 4.407e-03, - 4.340e-03, 4.274e-03, 4.211e-03, 4.150e-03, 4.126e-03, 4.102e-03, 4.078e-03, 4.055e-03, 4.032e-03, 4.009e-03, 3.987e-03, 3.965e-03, - 3.943e-03, 3.921e-03, 3.899e-03, 3.878e-03, 3.857e-03, 3.836e-03, 3.826e-03, 3.816e-03, 3.806e-03, 3.795e-03, 3.785e-03, 3.775e-03, - 3.765e-03, 3.755e-03, 3.746e-03, 3.736e-03, 3.726e-03, 3.716e-03, 3.707e-03, 3.697e-03, 3.687e-03, 3.678e-03, 3.668e-03, 3.659e-03, - 3.650e-03, 3.640e-03, 3.631e-03, 3.622e-03, 3.612e-03, 3.603e-03, 3.594e-03, 3.585e-03, 3.576e-03, 3.567e-03, 3.558e-03, 3.549e-03, - 3.541e-03, 3.532e-03, 3.514e-03, 3.497e-03, 3.480e-03, 3.463e-03, 3.446e-03, 3.430e-03, 3.413e-03, 3.397e-03, 3.381e-03, 3.365e-03, - 3.349e-03, 3.333e-03, 3.318e-03, 3.302e-03, 3.287e-03, 3.272e-03, 3.257e-03, 3.242e-03, 3.228e-03, 3.213e-03, 3.198e-03, 3.184e-03, - 3.170e-03, 3.156e-03, 3.142e-03, 3.108e-03, 3.074e-03, 3.041e-03, 3.009e-03, 2.978e-03, 2.947e-03, 2.917e-03, 2.887e-03, 2.858e-03, - 2.830e-03, 2.775e-03, 2.722e-03, 2.671e-03, 2.621e-03, 2.574e-03, 2.528e-03, 2.484e-03, 2.442e-03, 2.400e-03, 2.361e-03, 2.322e-03, - 2.285e-03, 2.249e-03, 2.214e-03, 3.542e-05, 1.969e-03, 1.841e-03}, - {0.0, 0.0, 6.802e-03, 6.681e-03, 6.565e-03, 6.453e-03, 6.344e-03, 6.239e-03, 6.138e-03, 6.040e-03, 5.944e-03, 5.852e-03, - 5.763e-03, 5.676e-03, 5.592e-03, 5.511e-03, 5.479e-03, 5.447e-03, 5.416e-03, 5.385e-03, 5.355e-03, 5.324e-03, 5.295e-03, 5.265e-03, - 5.236e-03, 5.207e-03, 5.178e-03, 5.150e-03, 5.122e-03, 5.095e-03, 5.081e-03, 5.067e-03, 5.054e-03, 5.040e-03, 5.027e-03, 5.014e-03, - 5.000e-03, 4.987e-03, 4.974e-03, 4.961e-03, 4.948e-03, 4.935e-03, 4.922e-03, 4.909e-03, 4.897e-03, 4.884e-03, 4.871e-03, 4.859e-03, - 4.846e-03, 4.834e-03, 4.822e-03, 4.809e-03, 4.797e-03, 4.785e-03, 4.773e-03, 4.761e-03, 4.749e-03, 4.737e-03, 4.725e-03, 4.714e-03, - 4.702e-03, 4.690e-03, 4.667e-03, 4.644e-03, 4.621e-03, 4.599e-03, 4.577e-03, 4.555e-03, 4.533e-03, 4.511e-03, 4.490e-03, 4.468e-03, - 4.447e-03, 4.427e-03, 4.406e-03, 4.385e-03, 4.365e-03, 4.345e-03, 4.325e-03, 4.306e-03, 4.286e-03, 4.267e-03, 4.247e-03, 4.228e-03, - 4.210e-03, 4.191e-03, 4.172e-03, 4.127e-03, 4.082e-03, 4.039e-03, 3.996e-03, 3.954e-03, 3.913e-03, 3.873e-03, 3.834e-03, 3.796e-03, - 3.758e-03, 3.685e-03, 3.614e-03, 3.546e-03, 3.481e-03, 3.418e-03, 3.357e-03, 3.299e-03, 3.242e-03, 3.188e-03, 3.135e-03, 3.084e-03, - 3.034e-03, 2.986e-03, 2.940e-03, 3.542e-05, 2.615e-03, 2.445e-03}, - {0.0, 0.0, 0.0, 9.407e-03, 9.243e-03, 9.084e-03, 8.931e-03, 8.783e-03, 8.640e-03, 8.502e-03, 8.368e-03, 8.238e-03, - 8.113e-03, 7.991e-03, 7.872e-03, 7.757e-03, 7.712e-03, 7.668e-03, 7.624e-03, 7.580e-03, 7.537e-03, 7.495e-03, 7.453e-03, 7.411e-03, - 7.370e-03, 7.330e-03, 7.289e-03, 7.250e-03, 7.210e-03, 7.172e-03, 7.152e-03, 7.133e-03, 7.114e-03, 7.095e-03, 7.076e-03, 7.057e-03, - 7.039e-03, 7.020e-03, 7.002e-03, 6.983e-03, 6.965e-03, 6.947e-03, 6.929e-03, 6.911e-03, 6.893e-03, 6.875e-03, 6.857e-03, 6.840e-03, - 6.822e-03, 6.805e-03, 6.787e-03, 6.770e-03, 6.753e-03, 6.736e-03, 6.719e-03, 6.702e-03, 6.685e-03, 6.668e-03, 6.651e-03, 6.635e-03, - 6.618e-03, 6.602e-03, 6.569e-03, 6.537e-03, 6.505e-03, 6.473e-03, 6.442e-03, 6.411e-03, 6.380e-03, 6.350e-03, 6.320e-03, 6.290e-03, - 6.260e-03, 6.231e-03, 6.202e-03, 6.173e-03, 6.144e-03, 6.116e-03, 6.088e-03, 6.060e-03, 6.033e-03, 6.006e-03, 5.979e-03, 5.952e-03, - 5.925e-03, 5.899e-03, 5.873e-03, 5.809e-03, 5.746e-03, 5.685e-03, 5.625e-03, 5.566e-03, 5.508e-03, 5.452e-03, 5.397e-03, 5.342e-03, - 5.289e-03, 5.186e-03, 5.087e-03, 4.992e-03, 4.900e-03, 4.811e-03, 4.726e-03, 4.643e-03, 4.564e-03, 4.487e-03, 4.412e-03, 4.340e-03, - 4.271e-03, 4.203e-03, 4.138e-03, 3.542e-05, 3.680e-03, 3.442e-03}, - {0.0, 0.0, 0.0, 0.0, 1.284e-02, 1.262e-02, 1.241e-02, 1.220e-02, 1.200e-02, 1.181e-02, 1.162e-02, 1.144e-02, - 1.127e-02, 1.110e-02, 1.093e-02, 1.078e-02, 1.071e-02, 1.065e-02, 1.059e-02, 1.053e-02, 1.047e-02, 1.041e-02, 1.035e-02, 1.029e-02, - 1.024e-02, 1.018e-02, 1.012e-02, 1.007e-02, 1.001e-02, 9.961e-03, 9.934e-03, 9.907e-03, 9.881e-03, 9.855e-03, 9.828e-03, 9.802e-03, - 9.776e-03, 9.750e-03, 9.725e-03, 9.699e-03, 9.674e-03, 9.649e-03, 9.623e-03, 9.598e-03, 9.574e-03, 9.549e-03, 9.524e-03, 9.500e-03, - 9.475e-03, 9.451e-03, 9.427e-03, 9.403e-03, 9.379e-03, 9.355e-03, 9.332e-03, 9.308e-03, 9.285e-03, 9.261e-03, 9.238e-03, 9.215e-03, - 9.192e-03, 9.170e-03, 9.124e-03, 9.079e-03, 9.035e-03, 8.991e-03, 8.947e-03, 8.904e-03, 8.862e-03, 8.819e-03, 8.777e-03, 8.736e-03, - 8.695e-03, 8.654e-03, 8.614e-03, 8.574e-03, 8.534e-03, 8.495e-03, 8.456e-03, 8.417e-03, 8.379e-03, 8.341e-03, 8.304e-03, 8.267e-03, - 8.230e-03, 8.193e-03, 8.157e-03, 8.068e-03, 7.981e-03, 7.896e-03, 7.812e-03, 7.731e-03, 7.651e-03, 7.572e-03, 7.495e-03, 7.420e-03, - 7.346e-03, 7.203e-03, 7.065e-03, 6.933e-03, 6.805e-03, 6.682e-03, 6.563e-03, 6.449e-03, 6.338e-03, 6.231e-03, 6.128e-03, 6.028e-03, - 5.931e-03, 5.838e-03, 5.747e-03, 3.542e-05, 5.111e-03, 4.781e-03}, - {0.0, 0.0, 0.0, 0.0, 0.0, 1.731e-02, 1.702e-02, 1.674e-02, 1.646e-02, 1.620e-02, 1.594e-02, 1.570e-02, - 1.546e-02, 1.522e-02, 1.500e-02, 1.478e-02, 1.469e-02, 1.461e-02, 1.452e-02, 1.444e-02, 1.436e-02, 1.428e-02, 1.420e-02, 1.412e-02, - 1.404e-02, 1.396e-02, 1.389e-02, 1.381e-02, 1.374e-02, 1.366e-02, 1.362e-02, 1.359e-02, 1.355e-02, 1.352e-02, 1.348e-02, 1.344e-02, - 1.341e-02, 1.337e-02, 1.334e-02, 1.330e-02, 1.327e-02, 1.323e-02, 1.320e-02, 1.316e-02, 1.313e-02, 1.310e-02, 1.306e-02, 1.303e-02, - 1.300e-02, 1.296e-02, 1.293e-02, 1.290e-02, 1.286e-02, 1.283e-02, 1.280e-02, 1.277e-02, 1.273e-02, 1.270e-02, 1.267e-02, 1.264e-02, - 1.261e-02, 1.258e-02, 1.251e-02, 1.245e-02, 1.239e-02, 1.233e-02, 1.227e-02, 1.221e-02, 1.215e-02, 1.210e-02, 1.204e-02, 1.198e-02, - 1.192e-02, 1.187e-02, 1.181e-02, 1.176e-02, 1.170e-02, 1.165e-02, 1.160e-02, 1.154e-02, 1.149e-02, 1.144e-02, 1.139e-02, 1.134e-02, - 1.129e-02, 1.124e-02, 1.119e-02, 1.107e-02, 1.095e-02, 1.083e-02, 1.071e-02, 1.060e-02, 1.049e-02, 1.038e-02, 1.028e-02, 1.018e-02, - 1.007e-02, 9.879e-03, 9.690e-03, 9.508e-03, 9.333e-03, 9.164e-03, 9.001e-03, 8.844e-03, 8.692e-03, 8.546e-03, 8.404e-03, 8.267e-03, - 8.134e-03, 8.006e-03, 7.881e-03, 3.542e-05, 7.009e-03, 6.556e-03}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.307e-02, 2.269e-02, 2.232e-02, 2.196e-02, 2.161e-02, 2.128e-02, - 2.095e-02, 2.063e-02, 2.033e-02, 2.003e-02, 1.991e-02, 1.980e-02, 1.968e-02, 1.957e-02, 1.946e-02, 1.935e-02, 1.924e-02, 1.913e-02, - 1.903e-02, 1.892e-02, 1.882e-02, 1.872e-02, 1.862e-02, 1.851e-02, 1.846e-02, 1.842e-02, 1.837e-02, 1.832e-02, 1.827e-02, 1.822e-02, - 1.817e-02, 1.812e-02, 1.808e-02, 1.803e-02, 1.798e-02, 1.793e-02, 1.789e-02, 1.784e-02, 1.779e-02, 1.775e-02, 1.770e-02, 1.766e-02, - 1.761e-02, 1.757e-02, 1.752e-02, 1.748e-02, 1.743e-02, 1.739e-02, 1.734e-02, 1.730e-02, 1.726e-02, 1.721e-02, 1.717e-02, 1.713e-02, - 1.708e-02, 1.704e-02, 1.696e-02, 1.687e-02, 1.679e-02, 1.671e-02, 1.663e-02, 1.655e-02, 1.647e-02, 1.639e-02, 1.631e-02, 1.624e-02, - 1.616e-02, 1.608e-02, 1.601e-02, 1.593e-02, 1.586e-02, 1.579e-02, 1.572e-02, 1.564e-02, 1.557e-02, 1.550e-02, 1.543e-02, 1.536e-02, - 1.530e-02, 1.523e-02, 1.516e-02, 1.499e-02, 1.483e-02, 1.467e-02, 1.452e-02, 1.437e-02, 1.422e-02, 1.407e-02, 1.393e-02, 1.379e-02, - 1.365e-02, 1.339e-02, 1.313e-02, 1.288e-02, 1.265e-02, 1.242e-02, 1.220e-02, 1.198e-02, 1.178e-02, 1.158e-02, 1.139e-02, 1.120e-02, - 1.102e-02, 1.085e-02, 1.068e-02, 3.542e-05, 9.498e-03, 8.884e-03}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3.042e-02, 2.992e-02, 2.943e-02, 2.897e-02, 2.851e-02, - 2.808e-02, 2.765e-02, 2.724e-02, 2.684e-02, 2.669e-02, 2.653e-02, 2.638e-02, 2.623e-02, 2.608e-02, 2.593e-02, 2.579e-02, 2.564e-02, - 2.550e-02, 2.536e-02, 2.522e-02, 2.508e-02, 2.494e-02, 2.481e-02, 2.474e-02, 2.468e-02, 2.461e-02, 2.454e-02, 2.448e-02, 2.441e-02, - 2.435e-02, 2.428e-02, 2.422e-02, 2.416e-02, 2.409e-02, 2.403e-02, 2.397e-02, 2.391e-02, 2.384e-02, 2.378e-02, 2.372e-02, 2.366e-02, - 2.360e-02, 2.354e-02, 2.348e-02, 2.342e-02, 2.336e-02, 2.330e-02, 2.324e-02, 2.318e-02, 2.312e-02, 2.306e-02, 2.301e-02, 2.295e-02, - 2.289e-02, 2.284e-02, 2.272e-02, 2.261e-02, 2.250e-02, 2.239e-02, 2.228e-02, 2.217e-02, 2.207e-02, 2.196e-02, 2.186e-02, 2.175e-02, - 2.165e-02, 2.155e-02, 2.145e-02, 2.135e-02, 2.125e-02, 2.115e-02, 2.106e-02, 2.096e-02, 2.087e-02, 2.077e-02, 2.068e-02, 2.059e-02, - 2.049e-02, 2.040e-02, 2.031e-02, 2.009e-02, 1.987e-02, 1.966e-02, 1.945e-02, 1.925e-02, 1.905e-02, 1.885e-02, 1.866e-02, 1.848e-02, - 1.829e-02, 1.794e-02, 1.759e-02, 1.726e-02, 1.694e-02, 1.664e-02, 1.634e-02, 1.606e-02, 1.578e-02, 1.552e-02, 1.526e-02, 1.501e-02, - 1.477e-02, 1.453e-02, 1.431e-02, 3.542e-05, 1.273e-02, 1.190e-02}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3.967e-02, 3.903e-02, 3.841e-02, 3.781e-02, - 3.723e-02, 3.666e-02, 3.612e-02, 3.559e-02, 3.538e-02, 3.518e-02, 3.497e-02, 3.477e-02, 3.457e-02, 3.438e-02, 3.419e-02, 3.399e-02, - 3.380e-02, 3.362e-02, 3.343e-02, 3.325e-02, 3.307e-02, 3.289e-02, 3.280e-02, 3.271e-02, 3.262e-02, 3.254e-02, 3.245e-02, 3.236e-02, - 3.228e-02, 3.219e-02, 3.211e-02, 3.202e-02, 3.194e-02, 3.186e-02, 3.177e-02, 3.169e-02, 3.161e-02, 3.153e-02, 3.144e-02, 3.136e-02, - 3.128e-02, 3.120e-02, 3.112e-02, 3.104e-02, 3.096e-02, 3.089e-02, 3.081e-02, 3.073e-02, 3.065e-02, 3.058e-02, 3.050e-02, 3.042e-02, - 3.035e-02, 3.027e-02, 3.012e-02, 2.997e-02, 2.983e-02, 2.968e-02, 2.954e-02, 2.939e-02, 2.925e-02, 2.911e-02, 2.897e-02, 2.884e-02, - 2.870e-02, 2.857e-02, 2.843e-02, 2.830e-02, 2.817e-02, 2.804e-02, 2.791e-02, 2.778e-02, 2.766e-02, 2.753e-02, 2.741e-02, 2.729e-02, - 2.716e-02, 2.704e-02, 2.692e-02, 2.663e-02, 2.634e-02, 2.606e-02, 2.579e-02, 2.552e-02, 2.525e-02, 2.499e-02, 2.474e-02, 2.449e-02, - 2.425e-02, 2.377e-02, 2.332e-02, 2.288e-02, 2.246e-02, 2.205e-02, 2.166e-02, 2.128e-02, 2.092e-02, 2.057e-02, 2.022e-02, 1.989e-02, - 1.957e-02, 1.927e-02, 1.897e-02, 3.542e-05, 1.687e-02, 1.578e-02}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 5.124e-02, 5.042e-02, 4.963e-02, - 4.887e-02, 4.812e-02, 4.741e-02, 4.671e-02, 4.644e-02, 4.617e-02, 4.590e-02, 4.564e-02, 4.537e-02, 4.512e-02, 4.486e-02, 4.461e-02, - 4.436e-02, 4.412e-02, 4.387e-02, 4.363e-02, 4.340e-02, 4.316e-02, 4.304e-02, 4.293e-02, 4.281e-02, 4.270e-02, 4.258e-02, 4.247e-02, - 4.236e-02, 4.225e-02, 4.213e-02, 4.202e-02, 4.191e-02, 4.180e-02, 4.169e-02, 4.158e-02, 4.148e-02, 4.137e-02, 4.126e-02, 4.116e-02, - 4.105e-02, 4.094e-02, 4.084e-02, 4.073e-02, 4.063e-02, 4.053e-02, 4.043e-02, 4.032e-02, 4.022e-02, 4.012e-02, 4.002e-02, 3.992e-02, - 3.982e-02, 3.972e-02, 3.952e-02, 3.933e-02, 3.914e-02, 3.895e-02, 3.876e-02, 3.857e-02, 3.838e-02, 3.820e-02, 3.802e-02, 3.784e-02, - 3.766e-02, 3.748e-02, 3.731e-02, 3.713e-02, 3.696e-02, 3.679e-02, 3.662e-02, 3.646e-02, 3.629e-02, 3.613e-02, 3.596e-02, 3.580e-02, - 3.564e-02, 3.548e-02, 3.533e-02, 3.494e-02, 3.456e-02, 3.419e-02, 3.383e-02, 3.348e-02, 3.313e-02, 3.279e-02, 3.246e-02, 3.213e-02, - 3.181e-02, 3.119e-02, 3.059e-02, 3.002e-02, 2.947e-02, 2.893e-02, 2.842e-02, 2.792e-02, 2.744e-02, 2.698e-02, 2.653e-02, 2.610e-02, - 2.568e-02, 2.528e-02, 2.488e-02, 3.542e-05, 2.213e-02, 2.070e-02}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 6.556e-02, 6.453e-02, - 6.353e-02, 6.256e-02, 6.163e-02, 6.072e-02, 6.036e-02, 6.001e-02, 5.966e-02, 5.932e-02, 5.898e-02, 5.864e-02, 5.831e-02, 5.799e-02, - 5.766e-02, 5.734e-02, 5.702e-02, 5.671e-02, 5.640e-02, 5.610e-02, 5.594e-02, 5.579e-02, 5.564e-02, 5.549e-02, 5.535e-02, 5.520e-02, - 5.505e-02, 5.490e-02, 5.476e-02, 5.461e-02, 5.447e-02, 5.433e-02, 5.419e-02, 5.404e-02, 5.390e-02, 5.376e-02, 5.362e-02, 5.349e-02, - 5.335e-02, 5.321e-02, 5.307e-02, 5.294e-02, 5.280e-02, 5.267e-02, 5.254e-02, 5.240e-02, 5.227e-02, 5.214e-02, 5.201e-02, 5.188e-02, - 5.175e-02, 5.162e-02, 5.136e-02, 5.111e-02, 5.086e-02, 5.061e-02, 5.036e-02, 5.012e-02, 4.988e-02, 4.964e-02, 4.940e-02, 4.917e-02, - 4.894e-02, 4.871e-02, 4.848e-02, 4.825e-02, 4.803e-02, 4.781e-02, 4.759e-02, 4.737e-02, 4.716e-02, 4.694e-02, 4.673e-02, 4.652e-02, - 4.632e-02, 4.611e-02, 4.591e-02, 4.540e-02, 4.491e-02, 4.443e-02, 4.396e-02, 4.350e-02, 4.305e-02, 4.261e-02, 4.218e-02, 4.175e-02, - 4.134e-02, 4.053e-02, 3.975e-02, 3.901e-02, 3.829e-02, 3.759e-02, 3.693e-02, 3.628e-02, 3.566e-02, 3.506e-02, 3.448e-02, 3.391e-02, - 3.337e-02, 3.284e-02, 3.233e-02, 3.542e-05, 2.875e-02, 2.689e-02}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 8.315e-02, - 8.185e-02, 8.060e-02, 7.939e-02, 7.821e-02, 7.775e-02, 7.730e-02, 7.685e-02, 7.641e-02, 7.597e-02, 7.553e-02, 7.511e-02, 7.468e-02, - 7.426e-02, 7.385e-02, 7.344e-02, 7.304e-02, 7.264e-02, 7.224e-02, 7.205e-02, 7.185e-02, 7.166e-02, 7.147e-02, 7.128e-02, 7.108e-02, - 7.090e-02, 7.071e-02, 7.052e-02, 7.033e-02, 7.015e-02, 6.996e-02, 6.978e-02, 6.960e-02, 6.942e-02, 6.923e-02, 6.906e-02, 6.888e-02, - 6.870e-02, 6.852e-02, 6.835e-02, 6.817e-02, 6.800e-02, 6.782e-02, 6.765e-02, 6.748e-02, 6.731e-02, 6.714e-02, 6.697e-02, 6.680e-02, - 6.664e-02, 6.647e-02, 6.614e-02, 6.581e-02, 6.549e-02, 6.517e-02, 6.485e-02, 6.454e-02, 6.423e-02, 6.392e-02, 6.361e-02, 6.331e-02, - 6.301e-02, 6.272e-02, 6.242e-02, 6.213e-02, 6.185e-02, 6.156e-02, 6.128e-02, 6.100e-02, 6.072e-02, 6.044e-02, 6.017e-02, 5.990e-02, - 5.963e-02, 5.937e-02, 5.911e-02, 5.846e-02, 5.783e-02, 5.721e-02, 5.660e-02, 5.601e-02, 5.543e-02, 5.486e-02, 5.430e-02, 5.375e-02, - 5.322e-02, 5.218e-02, 5.118e-02, 5.022e-02, 4.929e-02, 4.840e-02, 4.754e-02, 4.671e-02, 4.591e-02, 4.513e-02, 4.438e-02, 4.366e-02, - 4.296e-02, 4.228e-02, 4.162e-02, 3.542e-05, 3.701e-02, 3.462e-02}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.10460, 0.10290, 0.10140, 9.988e-02, 9.929e-02, 9.871e-02, 9.813e-02, 9.757e-02, 9.700e-02, 9.645e-02, 9.590e-02, 9.536e-02, - 9.482e-02, 9.430e-02, 9.377e-02, 9.325e-02, 9.274e-02, 9.224e-02, 9.199e-02, 9.174e-02, 9.149e-02, 9.124e-02, 9.100e-02, 9.075e-02, - 9.051e-02, 9.027e-02, 9.003e-02, 8.979e-02, 8.955e-02, 8.932e-02, 8.908e-02, 8.885e-02, 8.862e-02, 8.839e-02, 8.816e-02, 8.793e-02, - 8.770e-02, 8.747e-02, 8.725e-02, 8.703e-02, 8.680e-02, 8.658e-02, 8.636e-02, 8.614e-02, 8.592e-02, 8.571e-02, 8.549e-02, 8.528e-02, - 8.506e-02, 8.485e-02, 8.443e-02, 8.401e-02, 8.360e-02, 8.319e-02, 8.278e-02, 8.238e-02, 8.198e-02, 8.159e-02, 8.120e-02, 8.081e-02, - 8.043e-02, 8.005e-02, 7.968e-02, 7.931e-02, 7.894e-02, 7.857e-02, 7.821e-02, 7.786e-02, 7.750e-02, 7.715e-02, 7.680e-02, 7.646e-02, - 7.611e-02, 7.578e-02, 7.544e-02, 7.461e-02, 7.380e-02, 7.301e-02, 7.224e-02, 7.148e-02, 7.074e-02, 7.001e-02, 6.930e-02, 6.860e-02, - 6.792e-02, 6.659e-02, 6.532e-02, 6.409e-02, 6.291e-02, 6.177e-02, 6.067e-02, 5.961e-02, 5.859e-02, 5.760e-02, 5.664e-02, 5.572e-02, - 5.482e-02, 5.395e-02, 5.312e-02, 3.542e-05, 4.724e-02, 4.418e-02}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.13040, 0.12840, 0.12650, 0.12580, 0.125, 0.12430, 0.12360, 0.12290, 0.12220, 0.12150, 0.12080, - 0.12010, 0.11940, 0.11870, 0.11810, 0.11740, 0.11680, 0.11650, 0.11620, 0.11580, 0.11550, 0.11520, 0.11490, - 0.11460, 0.11430, 0.114, 0.11370, 0.11340, 0.11310, 0.11280, 0.11250, 0.11220, 0.11190, 0.11160, 0.11130, - 0.111, 0.11080, 0.11050, 0.11020, 0.10990, 0.10960, 0.10930, 0.10910, 0.10880, 0.10850, 0.10820, 0.108, - 0.10770, 0.10740, 0.10690, 0.10640, 0.10580, 0.10530, 0.10480, 0.10430, 0.10380, 0.10330, 0.10280, 0.10230, - 0.10180, 0.10130, 0.10090, 0.10040, 9.993e-02, 9.946e-02, 9.901e-02, 9.855e-02, 9.810e-02, 9.766e-02, 9.722e-02, 9.678e-02, - 9.635e-02, 9.592e-02, 9.549e-02, 9.444e-02, 9.342e-02, 9.242e-02, 9.144e-02, 9.048e-02, 8.954e-02, 8.862e-02, 8.771e-02, 8.683e-02, - 8.597e-02, 8.429e-02, 8.267e-02, 8.112e-02, 7.962e-02, 7.818e-02, 7.678e-02, 7.544e-02, 7.415e-02, 7.289e-02, 7.168e-02, 7.051e-02, - 6.938e-02, 6.828e-02, 6.722e-02, 3.542e-05, 5.978e-02, 5.591e-02}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.16150, 0.159, 0.15810, 0.15710, 0.15620, 0.15530, 0.15440, 0.15350, 0.15260, 0.15180, - 0.15090, 0.15, 0.14920, 0.14840, 0.14760, 0.14670, 0.14630, 0.14590, 0.14550, 0.14520, 0.14480, 0.14440, - 0.144, 0.14360, 0.14320, 0.14280, 0.14250, 0.14210, 0.14170, 0.14130, 0.141, 0.14060, 0.14020, 0.13990, - 0.13950, 0.13910, 0.13880, 0.13840, 0.13810, 0.13770, 0.13730, 0.137, 0.13660, 0.13630, 0.136, 0.13560, - 0.13530, 0.13490, 0.13430, 0.13360, 0.13290, 0.13230, 0.13160, 0.131, 0.13040, 0.12970, 0.12910, 0.12850, - 0.12790, 0.12730, 0.12670, 0.12610, 0.12550, 0.12490, 0.12430, 0.12380, 0.12320, 0.12260, 0.12210, 0.12150, - 0.121, 0.12050, 0.11990, 0.11860, 0.11730, 0.11610, 0.11480, 0.11360, 0.11240, 0.11130, 0.11010, 0.109, - 0.10790, 0.10580, 0.10380, 0.10190, 9.997e-02, 9.816e-02, 9.641e-02, 9.473e-02, 9.310e-02, 9.152e-02, 9.000e-02, 8.853e-02, - 8.711e-02, 8.573e-02, 8.440e-02, 3.542e-05, 7.505e-02, 7.019e-02}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.19840, 0.19720, 0.19610, 0.19490, 0.19370, 0.19260, 0.19150, 0.19040, 0.18930, 0.18820, 0.18720, - 0.18610, 0.18510, 0.184, 0.183, 0.18250, 0.182, 0.18150, 0.181, 0.18050, 0.18, 0.17960, 0.17910, 0.17860, - 0.17810, 0.17760, 0.17720, 0.17670, 0.17620, 0.17580, 0.17530, 0.17480, 0.17440, 0.17390, 0.17350, 0.173, 0.17260, - 0.17210, 0.17170, 0.17120, 0.17080, 0.17040, 0.16990, 0.16950, 0.16910, 0.16870, 0.16820, 0.16740, 0.16660, 0.16570, - 0.16490, 0.16410, 0.16330, 0.16250, 0.16170, 0.16090, 0.16020, 0.15940, 0.15870, 0.15790, 0.15720, 0.15640, 0.15570, - 0.155, 0.15430, 0.15360, 0.15290, 0.15220, 0.15150, 0.15080, 0.15010, 0.14950, 0.14780, 0.14620, 0.14460, 0.14310, - 0.14160, 0.14010, 0.13870, 0.13730, 0.13590, 0.13450, 0.13190, 0.12940, 0.12690, 0.12460, 0.12230, 0.12010, 0.118, - 0.116, 0.11410, 0.11220, 0.11030, 0.10850, 0.10680, 0.10520, 3.542e-05, 9.352e-02, 8.746e-02}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.21510, 0.21380, 0.21250, 0.21130, 0.21, 0.20880, 0.20760, 0.20640, 0.20520, 0.204, 0.20290, 0.20180, 0.20060, 0.19950, - 0.199, 0.19840, 0.19790, 0.19730, 0.19680, 0.19630, 0.19570, 0.19520, 0.19470, 0.19420, 0.19360, 0.19310, 0.19260, 0.19210, 0.19160, - 0.19110, 0.19060, 0.19010, 0.18960, 0.18910, 0.18860, 0.18810, 0.18760, 0.18720, 0.18670, 0.18620, 0.18570, 0.18520, 0.18480, 0.18430, - 0.18380, 0.18340, 0.18250, 0.18150, 0.18060, 0.17980, 0.17890, 0.178, 0.17710, 0.17630, 0.17540, 0.17460, 0.17380, 0.17290, 0.17210, - 0.17130, 0.17050, 0.16970, 0.16890, 0.16820, 0.16740, 0.16660, 0.16590, 0.16510, 0.16440, 0.16360, 0.16290, 0.16110, 0.15940, 0.15770, - 0.156, 0.15430, 0.15270, 0.15110, 0.14960, 0.14810, 0.14660, 0.14370, 0.141, 0.13830, 0.13580, 0.13330, 0.13090, 0.12860, 0.12640, - 0.12430, 0.12220, 0.12020, 0.11830, 0.11640, 0.11460, 3.542e-05, 0.10190, 9.531e-02}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.23290, 0.23150, 0.23010, 0.22870, 0.22740, 0.22610, 0.22480, 0.22350, 0.22220, 0.221, 0.21970, 0.21850, 0.21730, - 0.21670, 0.21610, 0.21550, 0.21490, 0.21430, 0.21370, 0.21310, 0.21260, 0.212, 0.21140, 0.21090, 0.21030, 0.20970, 0.20920, 0.20860, - 0.20810, 0.20750, 0.207, 0.20640, 0.20590, 0.20540, 0.20480, 0.20430, 0.20380, 0.20330, 0.20270, 0.20220, 0.20170, 0.20120, 0.20070, - 0.20020, 0.19970, 0.19870, 0.19770, 0.19670, 0.19570, 0.19480, 0.19380, 0.19290, 0.19190, 0.191, 0.19010, 0.18920, 0.18830, 0.18740, - 0.18650, 0.18560, 0.18480, 0.18390, 0.18310, 0.18220, 0.18140, 0.18060, 0.17980, 0.179, 0.17820, 0.17740, 0.17540, 0.17350, 0.17160, - 0.16980, 0.168, 0.16630, 0.16450, 0.16290, 0.16120, 0.15960, 0.15650, 0.15350, 0.15060, 0.14780, 0.14510, 0.14250, 0.14, 0.13760, - 0.13530, 0.133, 0.13090, 0.12880, 0.12670, 0.12480, 3.542e-05, 0.11090, 0.1037}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.25180, 0.25030, 0.24890, 0.24740, 0.246, 0.24450, 0.24310, 0.24170, 0.24040, 0.239, 0.23770, 0.23640, - 0.23570, 0.23510, 0.23440, 0.23380, 0.23310, 0.23250, 0.23190, 0.23120, 0.23060, 0.23, 0.22940, 0.22880, 0.22810, 0.22750, 0.22690, - 0.22630, 0.22570, 0.22510, 0.22460, 0.224, 0.22340, 0.22280, 0.22220, 0.22160, 0.22110, 0.22050, 0.21990, 0.21940, 0.21880, 0.21830, - 0.21770, 0.21720, 0.21610, 0.215, 0.21390, 0.21290, 0.21180, 0.21080, 0.20970, 0.20870, 0.20770, 0.20670, 0.20570, 0.20480, 0.20380, - 0.20280, 0.20190, 0.201, 0.2, 0.19910, 0.19820, 0.19730, 0.19640, 0.19550, 0.19460, 0.19370, 0.19290, 0.19080, 0.18870, 0.18660, - 0.18470, 0.18270, 0.18080, 0.17890, 0.17710, 0.17530, 0.17360, 0.17020, 0.16690, 0.16370, 0.16070, 0.15780, 0.155, 0.15230, 0.14960, - 0.14710, 0.14470, 0.14230, 0.14, 0.13780, 0.13560, 3.542e-05, 0.12060, 0.1128}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.27210, 0.27050, 0.26890, 0.26730, 0.26580, 0.26420, 0.26270, 0.26120, 0.25970, 0.25830, 0.25680, - 0.25610, 0.25540, 0.25470, 0.254, 0.25330, 0.25260, 0.25190, 0.25130, 0.25060, 0.24990, 0.24920, 0.24860, 0.24790, 0.24720, 0.24660, - 0.24590, 0.24530, 0.24460, 0.244, 0.24330, 0.24270, 0.24210, 0.24140, 0.24080, 0.24020, 0.23960, 0.239, 0.23840, 0.23770, 0.23710, - 0.23650, 0.23590, 0.23480, 0.23360, 0.23240, 0.23130, 0.23010, 0.229, 0.22790, 0.22680, 0.22570, 0.22460, 0.22350, 0.22250, 0.22140, - 0.22040, 0.21930, 0.21830, 0.21730, 0.21630, 0.21530, 0.21430, 0.21330, 0.21240, 0.21140, 0.21050, 0.20950, 0.20720, 0.205, 0.20270, - 0.20060, 0.19850, 0.19640, 0.19440, 0.19240, 0.19040, 0.18850, 0.18480, 0.18130, 0.17790, 0.17460, 0.17140, 0.16830, 0.16540, 0.16250, - 0.15980, 0.15710, 0.15460, 0.15210, 0.14970, 0.14730, 3.542e-05, 0.131, 0.1225}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.29370, 0.29190, 0.29020, 0.28850, 0.28690, 0.28520, 0.28360, 0.282, 0.28040, 0.27880, - 0.278, 0.27730, 0.27650, 0.27570, 0.275, 0.27420, 0.27350, 0.27270, 0.272, 0.27130, 0.27050, 0.26980, 0.26910, 0.26840, 0.26760, - 0.26690, 0.26620, 0.26550, 0.26480, 0.26410, 0.26340, 0.26280, 0.26210, 0.26140, 0.26070, 0.26, 0.25940, 0.25870, 0.258, 0.25740, - 0.25670, 0.25610, 0.25480, 0.25350, 0.25220, 0.251, 0.24980, 0.24850, 0.24730, 0.24610, 0.24490, 0.24370, 0.24260, 0.24140, 0.24030, - 0.23910, 0.238, 0.23690, 0.23580, 0.23470, 0.23360, 0.23260, 0.23150, 0.23050, 0.22940, 0.22840, 0.22740, 0.22490, 0.22240, 0.22, - 0.21770, 0.21540, 0.21310, 0.21090, 0.20880, 0.20660, 0.20460, 0.20060, 0.19670, 0.193, 0.18940, 0.186, 0.18270, 0.17950, 0.17640, - 0.17340, 0.17050, 0.16770, 0.165, 0.16240, 0.15990, 3.542e-05, 0.14210, 0.1329}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.31660, 0.31480, 0.31290, 0.31110, 0.30930, 0.30760, 0.30580, 0.30410, 0.30240, - 0.30150, 0.30070, 0.29990, 0.299, 0.29820, 0.29740, 0.29660, 0.29580, 0.295, 0.29420, 0.29340, 0.29260, 0.29180, 0.291, 0.29020, - 0.28940, 0.28870, 0.28790, 0.28720, 0.28640, 0.28560, 0.28490, 0.28420, 0.28340, 0.28270, 0.282, 0.28120, 0.28050, 0.27980, 0.27910, - 0.27840, 0.27760, 0.27620, 0.27490, 0.27350, 0.27210, 0.27080, 0.26940, 0.26810, 0.26680, 0.26550, 0.26430, 0.263, 0.26170, 0.26050, - 0.25930, 0.258, 0.25680, 0.25560, 0.25450, 0.25330, 0.25210, 0.251, 0.24980, 0.24870, 0.24760, 0.24650, 0.24380, 0.24110, 0.23850, - 0.23590, 0.23350, 0.231, 0.22860, 0.22630, 0.224, 0.22170, 0.21740, 0.21320, 0.20920, 0.20530, 0.20160, 0.198, 0.19450, 0.19120, - 0.18790, 0.18480, 0.18180, 0.17880, 0.176, 0.17330, 3.542e-05, 0.154, 0.1441}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.34110, 0.33910, 0.33710, 0.33520, 0.33320, 0.33130, 0.32940, 0.32760, - 0.32670, 0.32580, 0.32490, 0.324, 0.32310, 0.32220, 0.32130, 0.32040, 0.31950, 0.31870, 0.31780, 0.31690, 0.31610, 0.31520, 0.31440, - 0.31350, 0.31270, 0.31190, 0.31110, 0.31020, 0.30940, 0.30860, 0.30780, 0.307, 0.30620, 0.30540, 0.30460, 0.30380, 0.30310, 0.30230, - 0.30150, 0.30070, 0.29920, 0.29770, 0.29620, 0.29470, 0.29330, 0.29180, 0.29040, 0.289, 0.28760, 0.28620, 0.28480, 0.28350, 0.28210, - 0.28080, 0.27950, 0.27820, 0.27690, 0.27560, 0.27430, 0.27310, 0.27180, 0.27060, 0.26930, 0.26810, 0.26690, 0.264, 0.26110, 0.25830, - 0.25550, 0.25280, 0.25020, 0.24760, 0.245, 0.24260, 0.24010, 0.23540, 0.23090, 0.22650, 0.22230, 0.21830, 0.21440, 0.21060, 0.207, - 0.20350, 0.20010, 0.19680, 0.19360, 0.19060, 0.18760, 3.542e-05, 0.16680, 0.156}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.36710, 0.36490, 0.36280, 0.36070, 0.35860, 0.35660, 0.35460, - 0.35360, 0.35260, 0.35160, 0.35060, 0.34960, 0.34870, 0.34770, 0.34680, 0.34580, 0.34490, 0.34390, 0.343, 0.34210, 0.34110, 0.34020, - 0.33930, 0.33840, 0.33750, 0.33660, 0.33570, 0.33480, 0.334, 0.33310, 0.33220, 0.33130, 0.33050, 0.32960, 0.32880, 0.32790, 0.32710, - 0.32630, 0.32540, 0.32380, 0.32210, 0.32050, 0.31890, 0.31730, 0.31580, 0.31420, 0.31270, 0.31120, 0.30970, 0.30820, 0.30670, 0.30520, - 0.30380, 0.30240, 0.30090, 0.29950, 0.29820, 0.29680, 0.29540, 0.29410, 0.29270, 0.29140, 0.29010, 0.28880, 0.28560, 0.28250, 0.27940, - 0.27640, 0.27350, 0.27060, 0.26780, 0.26510, 0.26240, 0.25980, 0.25460, 0.24970, 0.245, 0.24050, 0.23610, 0.23190, 0.22780, 0.22390, - 0.22010, 0.21640, 0.21290, 0.20940, 0.20610, 0.20290, 3.542e-05, 0.18040, 0.1687}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.39460, 0.39230, 0.39010, 0.38780, 0.38560, 0.38340, - 0.38230, 0.38120, 0.38020, 0.37910, 0.37810, 0.377, 0.376, 0.37490, 0.37390, 0.37290, 0.37190, 0.37080, 0.36980, 0.36880, 0.36780, - 0.36690, 0.36590, 0.36490, 0.36390, 0.363, 0.362, 0.361, 0.36010, 0.35920, 0.35820, 0.35730, 0.35640, 0.35540, 0.35450, 0.35360, - 0.35270, 0.35180, 0.35, 0.34820, 0.34650, 0.34470, 0.343, 0.34130, 0.33970, 0.338, 0.33640, 0.33470, 0.33310, 0.33150, 0.32990, - 0.32840, 0.32680, 0.32530, 0.32380, 0.32230, 0.32080, 0.31930, 0.31780, 0.31640, 0.315, 0.31350, 0.31210, 0.30870, 0.30530, 0.302, - 0.29870, 0.29560, 0.29250, 0.28940, 0.28650, 0.28360, 0.28070, 0.27520, 0.26990, 0.26480, 0.25990, 0.25510, 0.25060, 0.24620, 0.24190, - 0.23780, 0.23390, 0.23, 0.22630, 0.22270, 0.21930, 3.542e-05, 0.19490, 0.1823}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.42390, 0.42140, 0.419, 0.41660, 0.41420, - 0.413, 0.41190, 0.41070, 0.40960, 0.40840, 0.40730, 0.40610, 0.405, 0.40390, 0.40280, 0.40170, 0.40060, 0.39950, 0.39840, 0.39730, - 0.39630, 0.39520, 0.39410, 0.39310, 0.392, 0.391, 0.39, 0.38890, 0.38790, 0.38690, 0.38590, 0.38490, 0.38390, 0.38290, 0.38190, - 0.38090, 0.37990, 0.378, 0.37610, 0.37420, 0.37230, 0.37050, 0.36860, 0.36680, 0.365, 0.36320, 0.36150, 0.35970, 0.358, 0.35630, - 0.35460, 0.35290, 0.35130, 0.34960, 0.348, 0.34640, 0.34480, 0.34320, 0.34160, 0.34010, 0.33860, 0.337, 0.33330, 0.32960, 0.32610, - 0.32260, 0.31910, 0.31580, 0.31250, 0.30930, 0.30620, 0.30310, 0.29710, 0.29140, 0.28590, 0.28060, 0.27540, 0.27050, 0.26580, 0.26120, - 0.25680, 0.25250, 0.24830, 0.24430, 0.24050, 0.23670, 3.542e-05, 0.21040, 0.1968}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.45490, 0.45230, 0.44970, 0.44710, - 0.44580, 0.44450, 0.44330, 0.442, 0.44080, 0.43960, 0.43830, 0.43710, 0.43590, 0.43470, 0.43350, 0.43230, 0.43110, 0.43, 0.42880, - 0.42760, 0.42650, 0.42530, 0.42420, 0.42310, 0.42190, 0.42080, 0.41970, 0.41860, 0.41750, 0.41640, 0.41530, 0.41420, 0.41320, 0.41210, - 0.411, 0.41, 0.40790, 0.40580, 0.40380, 0.40170, 0.39970, 0.39770, 0.39580, 0.39380, 0.39190, 0.39, 0.38810, 0.38620, 0.38440, - 0.38260, 0.38080, 0.379, 0.37720, 0.37540, 0.37370, 0.372, 0.37030, 0.36860, 0.36690, 0.36520, 0.36360, 0.35950, 0.35560, 0.35170, - 0.34790, 0.34420, 0.34060, 0.33710, 0.33360, 0.33020, 0.32690, 0.32050, 0.31430, 0.30830, 0.30260, 0.29710, 0.29180, 0.28660, 0.28170, - 0.27690, 0.27230, 0.26780, 0.26350, 0.25930, 0.25530, 3.542e-05, 0.22690, 0.2122}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.48780, 0.48490, 0.48210, - 0.48080, 0.47940, 0.478, 0.47670, 0.47530, 0.474, 0.47270, 0.47130, 0.47, 0.46870, 0.46740, 0.46620, 0.46490, 0.46360, 0.46230, - 0.46110, 0.45980, 0.45860, 0.45740, 0.45610, 0.45490, 0.45370, 0.45250, 0.45130, 0.45010, 0.44890, 0.44780, 0.44660, 0.44540, 0.44430, - 0.44310, 0.442, 0.43970, 0.43750, 0.43530, 0.43310, 0.43090, 0.42870, 0.42660, 0.42450, 0.42240, 0.42040, 0.41830, 0.41630, 0.41430, - 0.41240, 0.41040, 0.40850, 0.40650, 0.40460, 0.40280, 0.40090, 0.39910, 0.39720, 0.39540, 0.39360, 0.39190, 0.38750, 0.38320, 0.37910, - 0.375, 0.371, 0.36710, 0.36330, 0.35950, 0.35590, 0.35230, 0.34530, 0.33870, 0.33230, 0.32610, 0.32010, 0.31440, 0.30890, 0.30350, - 0.29840, 0.29340, 0.28860, 0.28390, 0.27940, 0.27510, 3.542e-05, 0.24450, 0.2287}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.52250, 0.51950, - 0.518, 0.51650, 0.51510, 0.51360, 0.51210, 0.51070, 0.50920, 0.50780, 0.50640, 0.505, 0.50360, 0.50220, 0.50080, 0.49940, 0.49810, - 0.49670, 0.49540, 0.494, 0.49270, 0.49140, 0.49010, 0.48870, 0.48740, 0.48610, 0.48490, 0.48360, 0.48230, 0.481, 0.47980, 0.47850, - 0.47730, 0.47610, 0.47360, 0.47120, 0.46880, 0.46640, 0.46410, 0.46180, 0.45950, 0.45720, 0.455, 0.45270, 0.45050, 0.44840, 0.44620, - 0.44410, 0.442, 0.43990, 0.43780, 0.43580, 0.43370, 0.43170, 0.42970, 0.42780, 0.42580, 0.42390, 0.422, 0.41730, 0.41270, 0.40820, - 0.40380, 0.39950, 0.39530, 0.39110, 0.38710, 0.38320, 0.37930, 0.37180, 0.36460, 0.35770, 0.35110, 0.34460, 0.33850, 0.33250, 0.32680, - 0.32120, 0.31590, 0.31070, 0.30570, 0.30080, 0.29610, 3.542e-05, 0.26320, 0.2461}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.55930, - 0.55770, 0.55610, 0.55450, 0.55290, 0.55130, 0.54980, 0.54820, 0.54670, 0.54510, 0.54360, 0.54210, 0.54060, 0.53910, 0.53760, 0.53610, - 0.53460, 0.53320, 0.53170, 0.53030, 0.52890, 0.52740, 0.526, 0.52460, 0.52320, 0.52180, 0.52050, 0.51910, 0.51770, 0.51640, 0.515, - 0.51370, 0.51230, 0.50970, 0.50710, 0.50450, 0.50190, 0.49940, 0.49690, 0.49440, 0.492, 0.48960, 0.48720, 0.48480, 0.48240, 0.48010, - 0.47780, 0.47550, 0.47330, 0.47110, 0.46880, 0.46670, 0.46450, 0.46230, 0.46020, 0.45810, 0.456, 0.454, 0.44890, 0.44390, 0.43910, - 0.43440, 0.42970, 0.42520, 0.42080, 0.41640, 0.41220, 0.408, 0.4, 0.39220, 0.38480, 0.37760, 0.37070, 0.36410, 0.35760, 0.35150, - 0.34550, 0.33970, 0.33410, 0.32870, 0.32350, 0.31850, 3.542e-05, 0.28310, 0.2647}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.57850, 0.57680, 0.57510, 0.57350, 0.57180, 0.57020, 0.56860, 0.567, 0.56540, 0.56380, 0.56220, 0.56070, 0.55910, 0.55760, 0.556, - 0.55450, 0.553, 0.55150, 0.55, 0.54850, 0.547, 0.54550, 0.54410, 0.54260, 0.54120, 0.53980, 0.53830, 0.53690, 0.53550, 0.53410, - 0.53270, 0.53130, 0.52860, 0.52590, 0.52320, 0.52050, 0.51790, 0.51530, 0.51270, 0.51020, 0.50770, 0.50520, 0.50270, 0.50030, 0.49790, - 0.49550, 0.49310, 0.49080, 0.48850, 0.48620, 0.48390, 0.48160, 0.47940, 0.47720, 0.475, 0.47290, 0.47070, 0.46550, 0.46030, 0.45530, - 0.45040, 0.44560, 0.44090, 0.43630, 0.43180, 0.42740, 0.423, 0.41470, 0.40660, 0.39890, 0.39150, 0.38430, 0.37740, 0.37080, 0.36440, - 0.35820, 0.35220, 0.34640, 0.34080, 0.33540, 0.33020, 3.542e-05, 0.29350, 0.2744}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.59820, 0.59640, 0.59470, 0.593, 0.59130, 0.58960, 0.588, 0.58630, 0.58470, 0.583, 0.58140, 0.57980, 0.57820, 0.57660, - 0.575, 0.57340, 0.57180, 0.57030, 0.56870, 0.56720, 0.56570, 0.56420, 0.56270, 0.56120, 0.55970, 0.55820, 0.55670, 0.55520, 0.55380, - 0.55230, 0.55090, 0.548, 0.54520, 0.54240, 0.53970, 0.53690, 0.53420, 0.53160, 0.52890, 0.52630, 0.52370, 0.52120, 0.51870, 0.51620, - 0.51370, 0.51120, 0.50880, 0.50640, 0.504, 0.50170, 0.49930, 0.497, 0.49470, 0.49250, 0.49020, 0.488, 0.48250, 0.47720, 0.472, - 0.46690, 0.46190, 0.457, 0.45220, 0.44760, 0.443, 0.43850, 0.42980, 0.42150, 0.41350, 0.40580, 0.39840, 0.39120, 0.38430, 0.37770, - 0.37130, 0.36510, 0.35910, 0.35330, 0.34760, 0.34220, 3.542e-05, 0.30420, 0.2844}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.61840, 0.61660, 0.61480, 0.61310, 0.61130, 0.60960, 0.60790, 0.60620, 0.60450, 0.60280, 0.60110, 0.59940, 0.59780, - 0.59610, 0.59450, 0.59280, 0.59120, 0.58960, 0.588, 0.58640, 0.58490, 0.58330, 0.58170, 0.58020, 0.57860, 0.57710, 0.57560, 0.57410, - 0.57260, 0.57110, 0.56810, 0.56520, 0.56230, 0.55940, 0.55660, 0.55380, 0.551, 0.54830, 0.54560, 0.54290, 0.54020, 0.53760, 0.535, - 0.53240, 0.52990, 0.52740, 0.52490, 0.52240, 0.52, 0.51750, 0.51510, 0.51280, 0.51040, 0.50810, 0.50580, 0.50010, 0.49460, 0.48920, - 0.48390, 0.47870, 0.47360, 0.46870, 0.46390, 0.45910, 0.45450, 0.44550, 0.43680, 0.42850, 0.42050, 0.41290, 0.40540, 0.39830, 0.39140, - 0.38470, 0.37830, 0.37210, 0.36610, 0.36030, 0.35460, 3.542e-05, 0.31520, 0.2948}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.63920, 0.63740, 0.63550, 0.63370, 0.63190, 0.63010, 0.62830, 0.62660, 0.62480, 0.623, 0.62130, 0.61960, - 0.61790, 0.61620, 0.61450, 0.61280, 0.61110, 0.60950, 0.60780, 0.60620, 0.60460, 0.60290, 0.60130, 0.59970, 0.59810, 0.59660, 0.595, - 0.59340, 0.59190, 0.58880, 0.58580, 0.58270, 0.57980, 0.57680, 0.57390, 0.571, 0.56820, 0.56540, 0.56260, 0.55990, 0.55710, 0.55440, - 0.55180, 0.54910, 0.54650, 0.54390, 0.54140, 0.53880, 0.53630, 0.53380, 0.53140, 0.52890, 0.52650, 0.52410, 0.51820, 0.51250, 0.50690, - 0.50140, 0.496, 0.49080, 0.48570, 0.48060, 0.47570, 0.47090, 0.46160, 0.45260, 0.444, 0.43570, 0.42780, 0.42010, 0.41270, 0.40550, - 0.39860, 0.392, 0.38550, 0.37930, 0.37330, 0.36740, 3.542e-05, 0.32660, 0.3054}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.66060, 0.65870, 0.65680, 0.65490, 0.653, 0.65120, 0.64930, 0.64750, 0.64570, 0.64390, 0.64210, - 0.64030, 0.63850, 0.63680, 0.635, 0.63330, 0.63160, 0.62990, 0.62820, 0.62650, 0.62480, 0.62310, 0.62150, 0.61980, 0.61820, 0.61650, - 0.61490, 0.61330, 0.61010, 0.607, 0.60380, 0.60070, 0.59770, 0.59470, 0.59170, 0.58870, 0.58580, 0.58290, 0.58010, 0.57720, 0.57440, - 0.57170, 0.56890, 0.56620, 0.56350, 0.56090, 0.55820, 0.55560, 0.55310, 0.55050, 0.548, 0.54550, 0.543, 0.53690, 0.53090, 0.52510, - 0.51940, 0.51390, 0.50840, 0.50310, 0.49790, 0.49280, 0.48780, 0.47820, 0.46890, 0.46, 0.45140, 0.44310, 0.43510, 0.42750, 0.42010, - 0.41290, 0.406, 0.39930, 0.39290, 0.38660, 0.38060, 3.542e-05, 0.33830, 0.3163}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.68250, 0.68050, 0.67860, 0.67660, 0.67470, 0.67280, 0.67090, 0.669, 0.66710, 0.66530, - 0.66340, 0.66160, 0.65980, 0.658, 0.65620, 0.65440, 0.65260, 0.65080, 0.64910, 0.64730, 0.64560, 0.64390, 0.64210, 0.64040, 0.63870, - 0.63710, 0.63540, 0.63210, 0.62880, 0.62550, 0.62230, 0.61920, 0.616, 0.61290, 0.60990, 0.60690, 0.60390, 0.60090, 0.598, 0.59510, - 0.59220, 0.58930, 0.58650, 0.58370, 0.581, 0.57830, 0.57560, 0.57290, 0.57020, 0.56760, 0.565, 0.56240, 0.55610, 0.54990, 0.54390, - 0.538, 0.53230, 0.52660, 0.52110, 0.51570, 0.51040, 0.50530, 0.49520, 0.48560, 0.47640, 0.46750, 0.45890, 0.45070, 0.44270, 0.435, - 0.42760, 0.42050, 0.41360, 0.40690, 0.40040, 0.39410, 3.542e-05, 0.35030, 0.3276}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.705, 0.703, 0.701, 0.699, 0.697, 0.695, 0.69310, 0.69110, 0.68920, - 0.68730, 0.68530, 0.68350, 0.68160, 0.67970, 0.67780, 0.676, 0.67420, 0.67230, 0.67050, 0.66870, 0.66690, 0.66510, 0.66340, 0.66160, - 0.65990, 0.65810, 0.65470, 0.65130, 0.64790, 0.64460, 0.64130, 0.63810, 0.63480, 0.63170, 0.62850, 0.62540, 0.62230, 0.61930, 0.61630, - 0.61330, 0.61040, 0.60740, 0.60460, 0.60170, 0.59890, 0.59610, 0.59330, 0.59050, 0.58780, 0.58510, 0.58250, 0.57590, 0.56950, 0.56330, - 0.55710, 0.55120, 0.54530, 0.53960, 0.534, 0.52860, 0.52320, 0.51280, 0.50280, 0.49330, 0.484, 0.47520, 0.46660, 0.45840, 0.45050, - 0.44280, 0.43540, 0.42820, 0.42130, 0.41460, 0.40810, 3.542e-05, 0.36270, 0.3391}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.72820, 0.72610, 0.724, 0.72190, 0.71990, 0.71780, 0.71580, 0.71380, - 0.71180, 0.70980, 0.70790, 0.70590, 0.704, 0.702, 0.70010, 0.69820, 0.69630, 0.69440, 0.69250, 0.69070, 0.68880, 0.687, 0.68520, - 0.68340, 0.68160, 0.678, 0.67450, 0.671, 0.66750, 0.66410, 0.66070, 0.65740, 0.65410, 0.65080, 0.64760, 0.64440, 0.64130, 0.63810, - 0.63510, 0.632, 0.629, 0.626, 0.623, 0.62010, 0.61720, 0.61430, 0.61150, 0.60860, 0.60580, 0.60310, 0.59630, 0.58960, 0.58320, - 0.57680, 0.57060, 0.56460, 0.55870, 0.55290, 0.54720, 0.54170, 0.53090, 0.52060, 0.51060, 0.50110, 0.49190, 0.48310, 0.47450, 0.46630, - 0.45840, 0.45070, 0.44330, 0.43610, 0.42920, 0.42240, 3.542e-05, 0.37540, 0.3511}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.75190, 0.74970, 0.74760, 0.74550, 0.74330, 0.74120, 0.73920, - 0.73710, 0.735, 0.733, 0.73090, 0.72890, 0.72690, 0.72490, 0.723, 0.721, 0.719, 0.71710, 0.71520, 0.71320, 0.71130, 0.70940, - 0.70760, 0.70570, 0.702, 0.69830, 0.69470, 0.69110, 0.68760, 0.68410, 0.68060, 0.67720, 0.67380, 0.67050, 0.66720, 0.66390, 0.66060, - 0.65740, 0.65430, 0.65110, 0.648, 0.645, 0.64190, 0.63890, 0.63590, 0.633, 0.63010, 0.62720, 0.62430, 0.61730, 0.61040, 0.60370, - 0.59710, 0.59070, 0.58440, 0.57830, 0.57230, 0.56640, 0.56070, 0.54950, 0.53880, 0.52850, 0.51870, 0.50910, 0.5, 0.49120, 0.48260, - 0.47440, 0.46650, 0.45880, 0.45140, 0.44420, 0.43720, 3.542e-05, 0.38860, 0.3633}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.77630, 0.774, 0.77180, 0.76960, 0.76740, 0.76530, - 0.76310, 0.761, 0.75890, 0.75670, 0.75470, 0.75260, 0.75050, 0.74840, 0.74640, 0.74440, 0.74240, 0.74040, 0.73840, 0.73640, 0.73440, - 0.73250, 0.73050, 0.72670, 0.72290, 0.71910, 0.71540, 0.71170, 0.70810, 0.70450, 0.701, 0.69750, 0.694, 0.69060, 0.68720, 0.68380, - 0.68050, 0.67720, 0.674, 0.67070, 0.66760, 0.66440, 0.66130, 0.65820, 0.65510, 0.65210, 0.64910, 0.64610, 0.63880, 0.63170, 0.62480, - 0.618, 0.61130, 0.60480, 0.59850, 0.59230, 0.58620, 0.58020, 0.56870, 0.55760, 0.547, 0.53670, 0.52690, 0.51740, 0.50820, 0.49940, - 0.49090, 0.48270, 0.47470, 0.46710, 0.45960, 0.45240, 3.542e-05, 0.40210, 0.3759}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.80130, 0.799, 0.79670, 0.79440, 0.79220, - 0.78990, 0.78770, 0.78550, 0.78330, 0.78110, 0.779, 0.77680, 0.77470, 0.77260, 0.77050, 0.76840, 0.76630, 0.76420, 0.76220, 0.76010, - 0.75810, 0.75610, 0.75210, 0.74820, 0.74430, 0.74040, 0.73660, 0.73280, 0.72910, 0.72540, 0.72180, 0.71820, 0.71470, 0.71110, 0.70770, - 0.70420, 0.70080, 0.69740, 0.69410, 0.69080, 0.68750, 0.68430, 0.68110, 0.67790, 0.67480, 0.67170, 0.66860, 0.661, 0.65370, 0.64650, - 0.63940, 0.63250, 0.62580, 0.61920, 0.61280, 0.60650, 0.60030, 0.58840, 0.57690, 0.56590, 0.55530, 0.54510, 0.53530, 0.52580, 0.51670, - 0.50790, 0.49940, 0.49110, 0.48320, 0.47550, 0.468, 3.542e-05, 0.41590, 0.3889}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.82690, 0.82460, 0.82220, 0.81990, - 0.81750, 0.81520, 0.81290, 0.81070, 0.80840, 0.80620, 0.80390, 0.80170, 0.79950, 0.79730, 0.79520, 0.793, 0.79090, 0.78870, 0.78660, - 0.78450, 0.78240, 0.77830, 0.77420, 0.77010, 0.76610, 0.76220, 0.75830, 0.75440, 0.75060, 0.74690, 0.74310, 0.73940, 0.73580, 0.73220, - 0.72860, 0.72510, 0.72160, 0.71810, 0.71470, 0.71130, 0.708, 0.70470, 0.70140, 0.69810, 0.69490, 0.69170, 0.68390, 0.67630, 0.66880, - 0.66150, 0.65440, 0.64740, 0.64060, 0.63390, 0.62740, 0.621, 0.60870, 0.59680, 0.58540, 0.57440, 0.56390, 0.55370, 0.54390, 0.53450, - 0.52530, 0.51650, 0.508, 0.49980, 0.49180, 0.48410, 3.542e-05, 0.43020, 0.4023}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.85320, 0.85080, 0.84840, - 0.846, 0.84360, 0.84120, 0.83880, 0.83650, 0.83410, 0.83180, 0.82950, 0.82730, 0.825, 0.82270, 0.82050, 0.81830, 0.81610, 0.81390, - 0.81170, 0.80950, 0.80520, 0.801, 0.79680, 0.79260, 0.78850, 0.78450, 0.78050, 0.77650, 0.77260, 0.76880, 0.76490, 0.76120, 0.75740, - 0.75370, 0.75010, 0.74650, 0.74290, 0.73930, 0.73580, 0.73240, 0.72890, 0.72550, 0.72210, 0.71880, 0.71550, 0.70740, 0.69950, 0.69180, - 0.68420, 0.67680, 0.66960, 0.66260, 0.65570, 0.64890, 0.64230, 0.62950, 0.61720, 0.60540, 0.59410, 0.58310, 0.57260, 0.56250, 0.55270, - 0.54330, 0.53420, 0.52540, 0.51690, 0.50860, 0.50060, 3.542e-05, 0.44490, 0.416}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.88020, 0.87770, - 0.87520, 0.87270, 0.87030, 0.86780, 0.86540, 0.86290, 0.86050, 0.85820, 0.85580, 0.85340, 0.85110, 0.84880, 0.84650, 0.84420, 0.84190, - 0.83960, 0.83740, 0.83290, 0.82850, 0.82420, 0.81990, 0.81560, 0.81140, 0.80730, 0.80320, 0.79920, 0.79510, 0.79120, 0.78730, 0.78340, - 0.77960, 0.77580, 0.772, 0.76830, 0.76460, 0.761, 0.75740, 0.75390, 0.75030, 0.74680, 0.74340, 0.74, 0.73160, 0.72340, 0.71540, - 0.70760, 0.69990, 0.69240, 0.68510, 0.678, 0.671, 0.66420, 0.65090, 0.63820, 0.626, 0.61430, 0.603, 0.59210, 0.58160, 0.57150, - 0.56170, 0.55230, 0.54320, 0.53440, 0.52590, 0.51760, 3.542e-05, 0.46, 0.4301}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.90790, - 0.90530, 0.90270, 0.90020, 0.89760, 0.89510, 0.89260, 0.89010, 0.88760, 0.88520, 0.88270, 0.88030, 0.87790, 0.87550, 0.87310, 0.87070, - 0.86840, 0.86610, 0.86140, 0.85690, 0.85240, 0.84790, 0.84350, 0.83920, 0.83490, 0.83060, 0.82640, 0.82230, 0.81820, 0.81410, 0.81010, - 0.80610, 0.80220, 0.79830, 0.79450, 0.79070, 0.78690, 0.78320, 0.77950, 0.77590, 0.77220, 0.76870, 0.76510, 0.75640, 0.74790, 0.73970, - 0.73160, 0.72370, 0.71590, 0.70840, 0.701, 0.69380, 0.68670, 0.673, 0.65980, 0.64720, 0.635, 0.62340, 0.61210, 0.60130, 0.59080, - 0.58070, 0.571, 0.56150, 0.55240, 0.54360, 0.53510, 3.542e-05, 0.47550, 0.4446}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.93630, 0.93360, 0.931, 0.92830, 0.92570, 0.92310, 0.92050, 0.91790, 0.91540, 0.91280, 0.91030, 0.90780, 0.90530, 0.90290, 0.90040, - 0.898, 0.89560, 0.89080, 0.886, 0.88140, 0.87680, 0.87220, 0.86770, 0.86320, 0.85880, 0.85450, 0.85020, 0.84590, 0.84170, 0.83760, - 0.83340, 0.82940, 0.82540, 0.82140, 0.81740, 0.81350, 0.80970, 0.80590, 0.80210, 0.79840, 0.79460, 0.791, 0.782, 0.77320, 0.76460, - 0.75620, 0.74810, 0.74010, 0.73220, 0.72460, 0.71710, 0.70980, 0.69560, 0.682, 0.66890, 0.65640, 0.64430, 0.63270, 0.62150, 0.61060, - 0.60020, 0.59010, 0.58040, 0.571, 0.56190, 0.553, 3.542e-05, 0.49140, 0.4594}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.96540, 0.96260, 0.95990, 0.95720, 0.95450, 0.95180, 0.94910, 0.94650, 0.94380, 0.94120, 0.93860, 0.93610, 0.93350, 0.93090, - 0.92840, 0.92590, 0.92090, 0.916, 0.91120, 0.90640, 0.90170, 0.897, 0.89240, 0.88780, 0.88330, 0.87890, 0.87450, 0.87010, 0.86580, - 0.86150, 0.85730, 0.85320, 0.849, 0.845, 0.84090, 0.83690, 0.833, 0.82910, 0.82520, 0.82140, 0.81760, 0.80830, 0.79920, 0.79030, - 0.78160, 0.77310, 0.76490, 0.75680, 0.74890, 0.74110, 0.73360, 0.71890, 0.70480, 0.69130, 0.67830, 0.66580, 0.65380, 0.64220, 0.631, - 0.62020, 0.60980, 0.59970, 0.59, 0.58060, 0.57150, 3.542e-05, 0.50780, 0.4747}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.99520, 0.99240, 0.98950, 0.98670, 0.984, 0.98120, 0.97840, 0.97570, 0.973, 0.97030, 0.96760, 0.965, 0.96230, - 0.95970, 0.95710, 0.952, 0.94690, 0.94190, 0.93690, 0.932, 0.92720, 0.92240, 0.91770, 0.913, 0.90840, 0.90380, 0.89930, 0.89480, - 0.89040, 0.88610, 0.88170, 0.87750, 0.87320, 0.86910, 0.86490, 0.86080, 0.85680, 0.85280, 0.84880, 0.84490, 0.83520, 0.82580, 0.81670, - 0.80770, 0.79890, 0.79040, 0.782, 0.77380, 0.76580, 0.758, 0.74280, 0.72830, 0.71430, 0.70090, 0.68790, 0.67550, 0.66350, 0.652, - 0.64080, 0.63, 0.61960, 0.60960, 0.59980, 0.59040, 3.542e-05, 0.52460, 0.4905}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 1.026, 1.023, 1.02, 1.017, 1.014, 1.011, 1.008, 1.006, 1.003, 1.0, 0.99740, 0.99460, - 0.99190, 0.98920, 0.98390, 0.97860, 0.97340, 0.96830, 0.96320, 0.95820, 0.95320, 0.94830, 0.94350, 0.93870, 0.934, 0.92930, 0.92470, - 0.92010, 0.91560, 0.91110, 0.90670, 0.90230, 0.898, 0.89370, 0.88950, 0.88530, 0.88110, 0.877, 0.873, 0.863, 0.85330, 0.84380, - 0.83450, 0.82540, 0.81660, 0.80790, 0.79940, 0.79120, 0.78310, 0.76740, 0.75230, 0.73790, 0.724, 0.71060, 0.69780, 0.68540, 0.67350, - 0.66190, 0.65080, 0.64010, 0.62970, 0.61960, 0.60990, 3.542e-05, 0.54180, 0.5066}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 1.057, 1.054, 1.051, 1.048, 1.045, 1.042, 1.039, 1.036, 1.034, 1.031, 1.028, - 1.025, 1.022, 1.017, 1.011, 1.006, 1.0, 0.99520, 0.99, 0.98490, 0.97980, 0.97480, 0.96990, 0.965, 0.96010, 0.95530, - 0.95060, 0.94590, 0.94130, 0.93670, 0.93220, 0.92770, 0.92330, 0.91890, 0.91460, 0.91030, 0.906, 0.90180, 0.89150, 0.88140, 0.87160, - 0.862, 0.85260, 0.84350, 0.83450, 0.82580, 0.81720, 0.80880, 0.79260, 0.77710, 0.76210, 0.74780, 0.734, 0.72070, 0.70790, 0.69550, - 0.68360, 0.67210, 0.661, 0.65030, 0.63990, 0.62980, 3.542e-05, 0.55960, 0.5232}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 1.089, 1.086, 1.083, 1.08, 1.077, 1.074, 1.071, 1.068, 1.065, 1.062, - 1.059, 1.056, 1.05, 1.045, 1.039, 1.034, 1.028, 1.023, 1.017, 1.012, 1.007, 1.002, 0.99680, 0.99180, 0.98680, - 0.982, 0.97710, 0.97230, 0.96760, 0.96290, 0.95830, 0.95370, 0.94910, 0.94470, 0.94020, 0.93580, 0.93150, 0.92080, 0.91040, 0.90020, - 0.89030, 0.88060, 0.87110, 0.86190, 0.85280, 0.844, 0.83530, 0.81850, 0.80250, 0.787, 0.77220, 0.75790, 0.74420, 0.731, 0.71820, - 0.70590, 0.694, 0.68260, 0.67150, 0.66070, 0.65030, 3.542e-05, 0.57780, 0.5402}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.122, 1.119, 1.116, 1.113, 1.109, 1.106, 1.103, 1.1, 1.097, - 1.094, 1.091, 1.085, 1.079, 1.073, 1.068, 1.062, 1.056, 1.051, 1.045, 1.04, 1.035, 1.03, 1.024, 1.019, - 1.014, 1.009, 1.004, 0.99930, 0.99440, 0.98960, 0.98490, 0.98020, 0.97560, 0.971, 0.96640, 0.96190, 0.95090, 0.94010, 0.92960, - 0.91930, 0.90930, 0.89950, 0.88990, 0.88060, 0.87140, 0.86250, 0.84510, 0.82850, 0.81260, 0.79730, 0.78250, 0.76830, 0.75470, 0.74150, - 0.72880, 0.71650, 0.70470, 0.69320, 0.68210, 0.67140, 3.542e-05, 0.59640, 0.5576}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.156, 1.152, 1.149, 1.146, 1.143, 1.139, 1.136, 1.133, - 1.13, 1.127, 1.121, 1.115, 1.109, 1.103, 1.097, 1.091, 1.085, 1.08, 1.074, 1.069, 1.063, 1.058, 1.052, - 1.047, 1.042, 1.037, 1.032, 1.027, 1.022, 1.017, 1.012, 1.007, 1.003, 0.99790, 0.99320, 0.98180, 0.97060, 0.95970, - 0.94910, 0.93880, 0.92860, 0.91880, 0.90910, 0.89960, 0.89040, 0.87250, 0.85530, 0.83880, 0.823, 0.80780, 0.79310, 0.779, 0.76540, - 0.75230, 0.73960, 0.72740, 0.71550, 0.70410, 0.693, 3.542e-05, 0.61560, 0.5755}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.19, 1.187, 1.183, 1.18, 1.177, 1.173, 1.17, - 1.167, 1.164, 1.157, 1.151, 1.145, 1.139, 1.133, 1.127, 1.121, 1.115, 1.109, 1.103, 1.098, 1.092, 1.087, - 1.081, 1.076, 1.071, 1.065, 1.06, 1.055, 1.05, 1.045, 1.04, 1.035, 1.03, 1.025, 1.013, 1.002, 0.99070, - 0.97970, 0.969, 0.95860, 0.94840, 0.93840, 0.92860, 0.919, 0.90050, 0.88280, 0.86580, 0.84940, 0.83370, 0.81860, 0.804, 0.78990, - 0.77640, 0.76330, 0.75070, 0.73840, 0.72660, 0.71520, 3.542e-05, 0.63530, 0.5939}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.226, 1.222, 1.219, 1.215, 1.212, 1.208, - 1.205, 1.202, 1.195, 1.188, 1.182, 1.176, 1.169, 1.163, 1.157, 1.151, 1.145, 1.139, 1.133, 1.127, 1.122, - 1.116, 1.111, 1.105, 1.1, 1.094, 1.089, 1.084, 1.079, 1.073, 1.068, 1.063, 1.058, 1.046, 1.034, 1.023, - 1.011, 1.0, 0.98930, 0.97870, 0.96840, 0.95830, 0.94840, 0.92930, 0.911, 0.89340, 0.87650, 0.86030, 0.84470, 0.82960, 0.81510, - 0.80110, 0.78760, 0.77460, 0.76190, 0.74970, 0.73790, 3.542e-05, 0.65550, 0.6128}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.262, 1.258, 1.254, 1.251, 1.247, - 1.244, 1.24, 1.234, 1.227, 1.22, 1.213, 1.207, 1.201, 1.194, 1.188, 1.182, 1.176, 1.17, 1.164, 1.158, - 1.152, 1.146, 1.141, 1.135, 1.129, 1.124, 1.118, 1.113, 1.108, 1.102, 1.097, 1.092, 1.08, 1.067, 1.055, - 1.043, 1.032, 1.021, 1.01, 0.99920, 0.98880, 0.97860, 0.95890, 0.93990, 0.92180, 0.90440, 0.88760, 0.87150, 0.85590, 0.84090, - 0.82650, 0.81260, 0.79910, 0.78610, 0.77350, 0.76130, 3.542e-05, 0.67620, 0.6321}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.299, 1.295, 1.291, 1.288, - 1.284, 1.28, 1.273, 1.266, 1.259, 1.252, 1.246, 1.239, 1.232, 1.226, 1.22, 1.213, 1.207, 1.201, 1.195, - 1.189, 1.183, 1.177, 1.171, 1.165, 1.16, 1.154, 1.149, 1.143, 1.138, 1.132, 1.127, 1.114, 1.101, 1.089, - 1.077, 1.065, 1.053, 1.042, 1.031, 1.02, 1.01, 0.98920, 0.96960, 0.95090, 0.93290, 0.91560, 0.89890, 0.88290, 0.86740, - 0.85250, 0.83810, 0.82420, 0.81080, 0.79780, 0.78520, 3.542e-05, 0.69740, 0.652}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.337, 1.333, 1.329, - 1.325, 1.321, 1.314, 1.307, 1.3, 1.292, 1.285, 1.279, 1.272, 1.265, 1.258, 1.252, 1.245, 1.239, 1.233, - 1.227, 1.22, 1.214, 1.208, 1.202, 1.196, 1.191, 1.185, 1.179, 1.174, 1.168, 1.163, 1.149, 1.136, 1.123, - 1.111, 1.098, 1.086, 1.075, 1.063, 1.052, 1.041, 1.02, 1.0, 0.98080, 0.96220, 0.94430, 0.92710, 0.91060, 0.89460, - 0.87920, 0.86440, 0.85, 0.83620, 0.82280, 0.80980, 3.542e-05, 0.7192, 0.6723}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.375, 1.371, - 1.367, 1.364, 1.356, 1.348, 1.341, 1.334, 1.326, 1.319, 1.312, 1.305, 1.298, 1.292, 1.285, 1.278, 1.272, - 1.265, 1.259, 1.253, 1.246, 1.24, 1.234, 1.228, 1.222, 1.216, 1.211, 1.205, 1.199, 1.185, 1.172, 1.158, - 1.145, 1.133, 1.12, 1.108, 1.097, 1.085, 1.074, 1.052, 1.031, 1.011, 0.99220, 0.97380, 0.956, 0.939, 0.92250, - 0.90660, 0.89130, 0.87650, 0.86220, 0.84840, 0.835, 3.542e-05, 0.7416, 0.6932}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.415, - 1.411, 1.407, 1.399, 1.391, 1.383, 1.376, 1.368, 1.361, 1.354, 1.346, 1.339, 1.332, 1.325, 1.319, 1.312, - 1.305, 1.299, 1.292, 1.286, 1.279, 1.273, 1.267, 1.261, 1.255, 1.249, 1.243, 1.237, 1.222, 1.208, 1.195, - 1.181, 1.168, 1.155, 1.143, 1.131, 1.119, 1.107, 1.085, 1.063, 1.043, 1.023, 1.004, 0.98570, 0.96810, 0.95110, - 0.93470, 0.91890, 0.90360, 0.88890, 0.87460, 0.86080, 3.542e-05, 0.7645, 0.7146}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 1.455, 1.451, 1.443, 1.435, 1.427, 1.419, 1.411, 1.404, 1.396, 1.389, 1.381, 1.374, 1.367, 1.36, 1.353, - 1.346, 1.339, 1.332, 1.326, 1.319, 1.313, 1.306, 1.3, 1.294, 1.287, 1.281, 1.275, 1.26, 1.246, 1.232, - 1.218, 1.204, 1.191, 1.178, 1.166, 1.154, 1.142, 1.118, 1.096, 1.075, 1.055, 1.035, 1.016, 0.99790, 0.98040, - 0.96350, 0.94720, 0.93140, 0.91620, 0.90150, 0.88730, 3.542e-05, 0.7879, 0.7365}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.497, 1.488, 1.48, 1.472, 1.464, 1.456, 1.448, - 1.44, 1.432, 1.425, 1.417, 1.41, 1.402, 1.395, 1.388, 1.381, 1.374, 1.367, 1.36, 1.354, 1.347, 1.34, 1.334, 1.327, - 1.321, 1.315, 1.299, 1.284, 1.27, 1.255, 1.242, 1.228, 1.215, 1.202, 1.189, 1.177, 1.153, 1.13, 1.108, 1.087, 1.067, - 1.047, 1.028, 1.01, 0.993, 0.97620, 0.95990, 0.94420, 0.92910, 0.91440, 3.542e-05, 0.812, 0.759}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.583, 1.574, 1.565, 1.556, 1.548, 1.539, - 1.531, 1.522, 1.514, 1.506, 1.498, 1.49, 1.483, 1.475, 1.468, 1.46, 1.453, 1.445, 1.438, 1.431, 1.424, 1.417, 1.41, - 1.404, 1.397, 1.38, 1.364, 1.349, 1.334, 1.319, 1.304, 1.29, 1.276, 1.263, 1.25, 1.224, 1.2, 1.177, 1.154, 1.133, - 1.112, 1.092, 1.073, 1.054, 1.036, 1.019, 1.002, 0.98630, 0.97070, 3.542e-05, 0.8619, 0.8056}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.673, 1.663, 1.654, 1.644, 1.635, - 1.626, 1.617, 1.609, 1.6, 1.592, 1.583, 1.575, 1.567, 1.559, 1.551, 1.543, 1.535, 1.527, 1.52, 1.512, 1.505, 1.498, - 1.49, 1.483, 1.466, 1.449, 1.432, 1.416, 1.4, 1.385, 1.37, 1.355, 1.341, 1.327, 1.299, 1.273, 1.249, 1.225, 1.202, - 1.18, 1.159, 1.138, 1.119, 1.1, 1.081, 1.063, 1.046, 1.03, 3.542e-05, 0.9143, 0.8546}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.766, 1.756, 1.746, 1.737, - 1.727, 1.717, 1.708, 1.699, 1.69, 1.681, 1.672, 1.663, 1.655, 1.646, 1.638, 1.629, 1.621, 1.613, 1.605, 1.597, 1.589, - 1.582, 1.574, 1.555, 1.537, 1.519, 1.502, 1.485, 1.469, 1.453, 1.437, 1.422, 1.407, 1.378, 1.351, 1.324, 1.299, 1.274, - 1.251, 1.229, 1.207, 1.186, 1.166, 1.146, 1.128, 1.109, 1.092, 3.542e-05, 0.9692, 0.9059}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.864, 1.854, 1.843, - 1.833, 1.823, 1.813, 1.803, 1.793, 1.784, 1.774, 1.765, 1.755, 1.746, 1.737, 1.729, 1.72, 1.711, 1.703, 1.694, 1.686, - 1.678, 1.669, 1.649, 1.63, 1.611, 1.593, 1.575, 1.557, 1.54, 1.524, 1.507, 1.492, 1.461, 1.432, 1.403, 1.377, 1.351, - 1.326, 1.302, 1.279, 1.257, 1.235, 1.215, 1.195, 1.175, 1.157, 3.542e-05, 1.027, 0.9597}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.967, 1.955, 1.944, 1.933, 1.923, 1.912, 1.902, 1.891, 1.881, 1.871, - 1.861, 1.852, 1.842, 1.833, 1.823, 1.814, 1.805, 1.796, 1.787, 1.778, 1.77, 1.748, 1.728, 1.707, 1.688, 1.669, 1.65, 1.632, 1.614, - 1.597, 1.58, 1.548, 1.516, 1.487, 1.458, 1.431, 1.404, 1.379, 1.354, 1.331, 1.308, 1.286, 1.265, 1.245, 1.225, 3.542e-05, 1.087, 1.016}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.074, 2.062, 2.05, 2.038, 2.027, 2.016, 2.005, 1.994, 1.983, - 1.973, 1.962, 1.952, 1.942, 1.932, 1.922, 1.912, 1.903, 1.893, 1.884, 1.875, 1.852, 1.83, 1.809, 1.788, 1.767, 1.748, 1.728, 1.709, - 1.691, 1.673, 1.639, 1.605, 1.574, 1.543, 1.514, 1.486, 1.459, 1.434, 1.409, 1.384, 1.361, 1.339, 1.317, 1.296, 3.542e-05, 1.15, 1.075}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.185, 2.172, 2.16, 2.148, 2.136, 2.124, 2.112, 2.101, - 2.09, 2.079, 2.068, 2.057, 2.046, 2.036, 2.025, 2.015, 2.005, 1.995, 1.985, 1.961, 1.937, 1.915, 1.892, 1.871, 1.85, 1.829, 1.809, - 1.79, 1.771, 1.734, 1.699, 1.665, 1.633, 1.602, 1.572, 1.544, 1.516, 1.49, 1.464, 1.44, 1.416, 1.393, 1.371, 3.542e-05, 1.216, 1.137}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.301, 2.288, 2.275, 2.262, 2.249, 2.237, 2.225, - 2.213, 2.201, 2.189, 2.177, 2.166, 2.155, 2.144, 2.133, 2.122, 2.111, 2.101, 2.075, 2.05, 2.026, 2.002, 1.979, 1.957, 1.935, 1.914, - 1.893, 1.873, 1.834, 1.796, 1.761, 1.727, 1.694, 1.662, 1.632, 1.603, 1.575, 1.548, 1.522, 1.497, 1.473, 1.449, 3.542e-05, 1.286, 1.201}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.422, 2.408, 2.394, 2.381, 2.367, 2.354, - 2.341, 2.329, 2.316, 2.304, 2.292, 2.28, 2.268, 2.256, 2.245, 2.233, 2.222, 2.195, 2.168, 2.142, 2.117, 2.093, 2.069, 2.046, 2.023, - 2.001, 1.98, 1.938, 1.899, 1.861, 1.825, 1.79, 1.757, 1.725, 1.694, 1.664, 1.635, 1.608, 1.581, 1.556, 1.531, 3.542e-05, 1.358, 1.269}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.548, 2.533, 2.519, 2.505, 2.491, - 2.477, 2.463, 2.45, 2.437, 2.424, 2.411, 2.398, 2.386, 2.373, 2.361, 2.349, 2.32, 2.292, 2.264, 2.238, 2.212, 2.186, 2.162, 2.138, - 2.114, 2.091, 2.048, 2.006, 1.965, 1.927, 1.89, 1.855, 1.821, 1.789, 1.757, 1.727, 1.698, 1.67, 1.642, 1.616, 3.542e-05, 1.433, 1.339}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.679, 2.664, 2.648, 2.633, - 2.619, 2.604, 2.59, 2.576, 2.562, 2.548, 2.535, 2.522, 2.508, 2.495, 2.483, 2.452, 2.421, 2.392, 2.364, 2.336, 2.309, 2.283, 2.258, - 2.233, 2.209, 2.162, 2.117, 2.075, 2.034, 1.995, 1.958, 1.922, 1.888, 1.854, 1.822, 1.792, 1.762, 1.733, 1.705, 3.542e-05, 1.512, 1.413}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.816, 2.8, 2.783, - 2.768, 2.752, 2.737, 2.722, 2.707, 2.692, 2.678, 2.664, 2.65, 2.636, 2.622, 2.589, 2.557, 2.526, 2.496, 2.466, 2.438, 2.41, 2.383, - 2.357, 2.331, 2.282, 2.234, 2.189, 2.146, 2.105, 2.066, 2.028, 1.991, 1.956, 1.922, 1.89, 1.858, 1.828, 1.799, 3.542e-05, 1.595, 1.490}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.958, 2.941, - 2.924, 2.907, 2.891, 2.875, 2.859, 2.843, 2.828, 2.813, 2.798, 2.783, 2.769, 2.733, 2.699, 2.666, 2.634, 2.603, 2.572, 2.543, 2.514, - 2.486, 2.459, 2.407, 2.357, 2.309, 2.263, 2.22, 2.178, 2.138, 2.099, 2.062, 2.026, 1.992, 1.959, 1.927, 1.896, 3.542e-05, 1.681, 1.570}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3.106, - 3.088, 3.07, 3.052, 3.035, 3.018, 3.001, 2.985, 2.969, 2.953, 2.937, 2.922, 2.884, 2.848, 2.812, 2.778, 2.745, 2.713, 2.682, 2.651, - 2.622, 2.593, 2.537, 2.484, 2.434, 2.386, 2.34, 2.295, 2.253, 2.212, 2.173, 2.135, 2.099, 2.064, 2.03, 1.997, 3.542e-05, 1.77, 1.654}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 3.26, 3.24, 3.222, 3.203, 3.185, 3.167, 3.15, 3.132, 3.115, 3.099, 3.082, 3.042, 3.003, 2.966, 2.929, 2.894, 2.86, 2.827, 2.794, - 2.763, 2.732, 2.674, 2.618, 2.564, 2.513, 2.465, 2.418, 2.373, 2.33, 2.289, 2.249, 2.21, 2.173, 2.138, 2.103, 3.542e-05, 1.864, 1.741}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 3.419, 3.399, 3.379, 3.36, 3.341, 3.322, 3.304, 3.286, 3.268, 3.25, 3.207, 3.166, 3.126, 3.087, 3.05, 3.014, 2.978, 2.944, - 2.911, 2.878, 2.816, 2.757, 2.7, 2.646, 2.595, 2.546, 2.498, 2.453, 2.409, 2.367, 2.326, 2.287, 2.25, 2.213, 3.542e-05, 1.961, 1.832}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 3.585, 3.564, 3.543, 3.523, 3.503, 3.483, 3.464, 3.445, 3.426, 3.38, 3.336, 3.294, 3.253, 3.213, 3.174, 3.137, 3.1, - 3.065, 3.031, 2.965, 2.902, 2.842, 2.785, 2.731, 2.679, 2.629, 2.581, 2.535, 2.49, 2.448, 2.406, 2.367, 2.328, 3.542e-05, 2.063, 1.926}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 3.758, 3.735, 3.713, 3.692, 3.671, 3.65, 3.63, 3.61, 3.561, 3.514, 3.469, 3.425, 3.383, 3.342, 3.302, 3.264, - 3.226, 3.19, 3.12, 3.054, 2.99, 2.93, 2.873, 2.818, 2.765, 2.714, 2.665, 2.619, 2.574, 2.53, 2.488, 2.448, 3.542e-05, 2.168, 2.025}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 3.937, 3.913, 3.89, 3.867, 3.845, 3.823, 3.802, 3.75, 3.7, 3.652, 3.605, 3.561, 3.517, 3.475, 3.434, - 3.394, 3.356, 3.282, 3.212, 3.145, 3.081, 3.02, 2.962, 2.907, 2.853, 2.802, 2.752, 2.705, 2.659, 2.615, 2.573, 3.542e-05, 2.278, 2.127}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 4.122, 4.097, 4.073, 4.049, 4.026, 4.003, 3.948, 3.895, 3.843, 3.794, 3.746, 3.7, 3.655, 3.612, - 3.57, 3.529, 3.451, 3.376, 3.306, 3.238, 3.174, 3.113, 3.054, 2.998, 2.944, 2.892, 2.842, 2.794, 2.747, 2.702, 3.542e-05, 2.392, 2.234}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 4.315, 4.289, 4.263, 4.238, 4.214, 4.155, 4.098, 4.043, 3.991, 3.94, 3.891, 3.843, 3.797, - 3.753, 3.709, 3.627, 3.548, 3.473, 3.402, 3.335, 3.27, 3.208, 3.148, 3.091, 3.037, 2.984, 2.933, 2.884, 2.837, 3.542e-05, 2.511, 2.344}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 4.515, 4.487, 4.46, 4.434, 4.371, 4.31, 4.252, 4.196, 4.142, 4.09, 4.04, 3.991, - 3.944, 3.898, 3.81, 3.727, 3.648, 3.573, 3.501, 3.433, 3.368, 3.305, 3.245, 3.187, 3.132, 3.079, 3.027, 2.977, 3.542e-05, 2.635, 2.459}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 4.722, 4.693, 4.665, 4.597, 4.532, 4.47, 4.411, 4.353, 4.298, 4.244, 4.193, - 4.143, 4.094, 4.001, 3.913, 3.83, 3.751, 3.675, 3.603, 3.534, 3.468, 3.405, 3.344, 3.286, 3.23, 3.176, 3.123, 3.542e-05, 2.763, 2.579}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 4.936, 4.906, 4.833, 4.764, 4.698, 4.635, 4.574, 4.515, 4.458, 4.403, - 4.35, 4.298, 4.2, 4.107, 4.019, 3.935, 3.856, 3.78, 3.707, 3.638, 3.571, 3.507, 3.446, 3.387, 3.33, 3.275, 3.542e-05, 2.896, 2.703}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 5.159, 5.081, 5.007, 4.936, 4.868, 4.803, 4.741, 4.681, 4.622, - 4.566, 4.512, 4.407, 4.309, 4.216, 4.128, 4.044, 3.964, 3.887, 3.814, 3.744, 3.677, 3.612, 3.55, 3.49, 3.432, 3.542e-05, 3.035, 2.832}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 5.75, 5.662, 5.579, 5.499, 5.423, 5.35, 5.28, 5.212, - 5.147, 5.084, 4.964, 4.851, 4.744, 4.643, 4.547, 4.456, 4.369, 4.286, 4.206, 4.13, 4.056, 3.986, 3.918, 3.853, 3.542e-05, 3.404, 3.176}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 6.395, 6.296, 6.202, 6.112, 6.027, 5.945, 5.866, - 5.79, 5.717, 5.579, 5.449, 5.327, 5.211, 5.102, 4.998, 4.898, 4.804, 4.714, 4.627, 4.544, 4.464, 4.388, 4.314, 3.542e-05, 3.808, 3.552}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 7.098, 6.985, 6.879, 6.779, 6.683, 6.591, - 6.503, 6.418, 6.258, 6.108, 5.968, 5.836, 5.711, 5.593, 5.48, 5.373, 5.27, 5.172, 5.078, 4.988, 4.902, 4.819, 3.542e-05, 4.25, 3.962}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 7.861, 7.734, 7.615, 7.502, 7.395, - 7.292, 7.193, 7.008, 6.835, 6.674, 6.523, 6.38, 6.245, 6.118, 5.996, 5.88, 5.769, 5.663, 5.561, 5.464, 5.37, 3.542e-05, 4.732, 4.410}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 8.69, 8.547, 8.413, 8.286, - 8.166, 8.051, 7.835, 7.636, 7.451, 7.278, 7.115, 6.961, 6.816, 6.678, 6.547, 6.421, 6.302, 6.187, 6.078, 5.972, 3.542e-05, 5.257, 4.897}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 9.588, 9.428, 9.277, - 9.135, 9.0, 8.749, 8.519, 8.305, 8.106, 7.92, 7.745, 7.58, 7.423, 7.275, 7.133, 6.998, 6.87, 6.746, 6.628, 3.542e-05, 5.827, 5.425}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 10.56, 10.38, - 10.21, 10.05, 9.759, 9.491, 9.244, 9.016, 8.803, 8.603, 8.415, 8.238, 8.069, 7.91, 7.758, 7.613, 7.474, 7.341, 3.542e-05, 6.445, 5.998}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 11.62, - 11.41, 11.22, 10.88, 10.56, 10.28, 10.01, 9.769, 9.541, 9.328, 9.126, 8.936, 8.756, 8.584, 8.421, 8.265, 8.116, 3.542e-05, 7.115, 6.618}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 12.75, 12.53, 12.11, 11.75, 11.41, 11.11, 10.83, 10.57, 10.32, 10.1, 9.88, 9.676, 9.483, 9.299, 9.124, 8.957, 3.542e-05, 7.84, 7.288}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 13.99, 13.49, 13.05, 12.67, 12.31, 11.99, 11.69, 11.41, 11.15, 10.91, 10.68, 10.46, 10.25, 10.06, 9.869, 3.542e-05, 8.623, 8.011}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 16.75, 16.12, 15.58, 15.1, 14.66, 14.26, 13.9, 13.56, 13.25, 12.95, 12.67, 12.41, 12.16, 11.93, 3.542e-05, 10.38, 9.628}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 19.97, 19.17, 18.49, 17.89, 17.36, 16.87, 16.43, 16.02, 15.64, 15.28, 14.95, 14.63, 14.34, 3.542e-05, 12.42, 11.5}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 23.71, 22.7, 21.85, 21.1, 20.45, 19.85, 19.31, 18.81, 18.35, 17.93, 17.53, 17.15, 3.542e-05, 14.77, 13.65}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 28.07, 26.78, 25.71, 24.79, 23.97, 23.25, 22.59, 21.99, 21.44, 20.93, 20.45, 3.542e-05, 17.48, 16.12}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 33.16, 31.5, 30.15, 29.0, 28.0, 27.11, 26.31, 25.59, 24.92, 24.31, 3.542e-05, 20.6, 18.94}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 39.13, 36.97, 35.25, 33.82, 32.58, 31.5, 30.53, 29.65, 28.86, 3.542e-05, 24.19, 22.16}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 46.17, 43.33, 41.13, 39.33, 37.8, 36.47, 35.29, 34.24, 3.542e-05, 28.31, 25.84}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 54.54, 50.75, 47.92, 45.65, 43.75, 42.11, 40.68, 3.542e-05, 33.07, 30.03}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 64.64, 59.47, 55.78, 52.9, 50.53, 48.51, 3.542e-05, 38.55, 34.81}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 77.05, 69.8, 64.93, 61.24, 58.27, 3.542e-05, 44.92, 40.28}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 92.76, 82.18, 75.63, 70.87, 3.542e-05, 52.35, 46.54}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 113.6, 97.22, 88.27, 3.542e-05, 61.12, 53.76}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 143.9, 115.8, 3.542e-05, 71.6, 62.15}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 201.8, 3.542e-05, 84.38, 71.99}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3.542e-05, 148.4, 115.1}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3.542e-05, 201.7, 144.2}, - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3.542e-05, 270.9, 177.8}} - }; + DefaultSteamSuperheatedDensityDataTable = { + {{4.855e-03, 4.837e-03, 4.767e-03, 4.683e-03, 4.601e-03, 4.522e-03, 4.446e-03, 4.373e-03, 4.302e-03, 4.233e-03, 4.167e-03, 4.102e-03, + 4.039e-03, 3.979e-03, 3.920e-03, 3.863e-03, 3.840e-03, 3.818e-03, 3.796e-03, 3.775e-03, 3.753e-03, 3.732e-03, 3.711e-03, 3.691e-03, + 3.670e-03, 3.650e-03, 3.630e-03, 3.610e-03, 3.591e-03, 3.571e-03, 3.562e-03, 3.552e-03, 3.543e-03, 3.533e-03, 3.524e-03, 3.514e-03, + 3.505e-03, 3.496e-03, 3.487e-03, 3.477e-03, 3.468e-03, 3.459e-03, 3.450e-03, 3.441e-03, 3.432e-03, 3.424e-03, 3.415e-03, 3.406e-03, + 3.397e-03, 3.388e-03, 3.380e-03, 3.371e-03, 3.363e-03, 3.354e-03, 3.346e-03, 3.337e-03, 3.329e-03, 3.321e-03, 3.312e-03, 3.304e-03, + 3.296e-03, 3.288e-03, 3.271e-03, 3.255e-03, 3.239e-03, 3.224e-03, 3.208e-03, 3.193e-03, 3.177e-03, 3.162e-03, 3.147e-03, 3.132e-03, + 3.117e-03, 3.103e-03, 3.088e-03, 3.074e-03, 3.060e-03, 3.046e-03, 3.032e-03, 3.018e-03, 3.004e-03, 2.991e-03, 2.977e-03, 2.964e-03, + 2.951e-03, 2.938e-03, 2.925e-03, 2.893e-03, 2.862e-03, 2.831e-03, 2.801e-03, 2.772e-03, 2.743e-03, 2.715e-03, 2.688e-03, 2.661e-03, + 2.634e-03, 2.583e-03, 2.533e-03, 2.486e-03, 2.440e-03, 2.396e-03, 2.353e-03, 2.312e-03, 2.273e-03, 2.234e-03, 2.197e-03, 2.162e-03, + 2.127e-03, 2.093e-03, 2.061e-03, 3.542e-05, 1.833e-03, 1.714e-03}, + {0.0, 5.196e-03, 5.121e-03, 5.031e-03, 4.943e-03, 4.859e-03, 4.777e-03, 4.698e-03, 4.622e-03, 4.548e-03, 4.476e-03, 4.407e-03, + 4.340e-03, 4.274e-03, 4.211e-03, 4.150e-03, 4.126e-03, 4.102e-03, 4.078e-03, 4.055e-03, 4.032e-03, 4.009e-03, 3.987e-03, 3.965e-03, + 3.943e-03, 3.921e-03, 3.899e-03, 3.878e-03, 3.857e-03, 3.836e-03, 3.826e-03, 3.816e-03, 3.806e-03, 3.795e-03, 3.785e-03, 3.775e-03, + 3.765e-03, 3.755e-03, 3.746e-03, 3.736e-03, 3.726e-03, 3.716e-03, 3.707e-03, 3.697e-03, 3.687e-03, 3.678e-03, 3.668e-03, 3.659e-03, + 3.650e-03, 3.640e-03, 3.631e-03, 3.622e-03, 3.612e-03, 3.603e-03, 3.594e-03, 3.585e-03, 3.576e-03, 3.567e-03, 3.558e-03, 3.549e-03, + 3.541e-03, 3.532e-03, 3.514e-03, 3.497e-03, 3.480e-03, 3.463e-03, 3.446e-03, 3.430e-03, 3.413e-03, 3.397e-03, 3.381e-03, 3.365e-03, + 3.349e-03, 3.333e-03, 3.318e-03, 3.302e-03, 3.287e-03, 3.272e-03, 3.257e-03, 3.242e-03, 3.228e-03, 3.213e-03, 3.198e-03, 3.184e-03, + 3.170e-03, 3.156e-03, 3.142e-03, 3.108e-03, 3.074e-03, 3.041e-03, 3.009e-03, 2.978e-03, 2.947e-03, 2.917e-03, 2.887e-03, 2.858e-03, + 2.830e-03, 2.775e-03, 2.722e-03, 2.671e-03, 2.621e-03, 2.574e-03, 2.528e-03, 2.484e-03, 2.442e-03, 2.400e-03, 2.361e-03, 2.322e-03, + 2.285e-03, 2.249e-03, 2.214e-03, 3.542e-05, 1.969e-03, 1.841e-03}, + {0.0, 0.0, 6.802e-03, 6.681e-03, 6.565e-03, 6.453e-03, 6.344e-03, 6.239e-03, 6.138e-03, 6.040e-03, 5.944e-03, 5.852e-03, + 5.763e-03, 5.676e-03, 5.592e-03, 5.511e-03, 5.479e-03, 5.447e-03, 5.416e-03, 5.385e-03, 5.355e-03, 5.324e-03, 5.295e-03, 5.265e-03, + 5.236e-03, 5.207e-03, 5.178e-03, 5.150e-03, 5.122e-03, 5.095e-03, 5.081e-03, 5.067e-03, 5.054e-03, 5.040e-03, 5.027e-03, 5.014e-03, + 5.000e-03, 4.987e-03, 4.974e-03, 4.961e-03, 4.948e-03, 4.935e-03, 4.922e-03, 4.909e-03, 4.897e-03, 4.884e-03, 4.871e-03, 4.859e-03, + 4.846e-03, 4.834e-03, 4.822e-03, 4.809e-03, 4.797e-03, 4.785e-03, 4.773e-03, 4.761e-03, 4.749e-03, 4.737e-03, 4.725e-03, 4.714e-03, + 4.702e-03, 4.690e-03, 4.667e-03, 4.644e-03, 4.621e-03, 4.599e-03, 4.577e-03, 4.555e-03, 4.533e-03, 4.511e-03, 4.490e-03, 4.468e-03, + 4.447e-03, 4.427e-03, 4.406e-03, 4.385e-03, 4.365e-03, 4.345e-03, 4.325e-03, 4.306e-03, 4.286e-03, 4.267e-03, 4.247e-03, 4.228e-03, + 4.210e-03, 4.191e-03, 4.172e-03, 4.127e-03, 4.082e-03, 4.039e-03, 3.996e-03, 3.954e-03, 3.913e-03, 3.873e-03, 3.834e-03, 3.796e-03, + 3.758e-03, 3.685e-03, 3.614e-03, 3.546e-03, 3.481e-03, 3.418e-03, 3.357e-03, 3.299e-03, 3.242e-03, 3.188e-03, 3.135e-03, 3.084e-03, + 3.034e-03, 2.986e-03, 2.940e-03, 3.542e-05, 2.615e-03, 2.445e-03}, + {0.0, 0.0, 0.0, 9.407e-03, 9.243e-03, 9.084e-03, 8.931e-03, 8.783e-03, 8.640e-03, 8.502e-03, 8.368e-03, 8.238e-03, + 8.113e-03, 7.991e-03, 7.872e-03, 7.757e-03, 7.712e-03, 7.668e-03, 7.624e-03, 7.580e-03, 7.537e-03, 7.495e-03, 7.453e-03, 7.411e-03, + 7.370e-03, 7.330e-03, 7.289e-03, 7.250e-03, 7.210e-03, 7.172e-03, 7.152e-03, 7.133e-03, 7.114e-03, 7.095e-03, 7.076e-03, 7.057e-03, + 7.039e-03, 7.020e-03, 7.002e-03, 6.983e-03, 6.965e-03, 6.947e-03, 6.929e-03, 6.911e-03, 6.893e-03, 6.875e-03, 6.857e-03, 6.840e-03, + 6.822e-03, 6.805e-03, 6.787e-03, 6.770e-03, 6.753e-03, 6.736e-03, 6.719e-03, 6.702e-03, 6.685e-03, 6.668e-03, 6.651e-03, 6.635e-03, + 6.618e-03, 6.602e-03, 6.569e-03, 6.537e-03, 6.505e-03, 6.473e-03, 6.442e-03, 6.411e-03, 6.380e-03, 6.350e-03, 6.320e-03, 6.290e-03, + 6.260e-03, 6.231e-03, 6.202e-03, 6.173e-03, 6.144e-03, 6.116e-03, 6.088e-03, 6.060e-03, 6.033e-03, 6.006e-03, 5.979e-03, 5.952e-03, + 5.925e-03, 5.899e-03, 5.873e-03, 5.809e-03, 5.746e-03, 5.685e-03, 5.625e-03, 5.566e-03, 5.508e-03, 5.452e-03, 5.397e-03, 5.342e-03, + 5.289e-03, 5.186e-03, 5.087e-03, 4.992e-03, 4.900e-03, 4.811e-03, 4.726e-03, 4.643e-03, 4.564e-03, 4.487e-03, 4.412e-03, 4.340e-03, + 4.271e-03, 4.203e-03, 4.138e-03, 3.542e-05, 3.680e-03, 3.442e-03}, + {0.0, 0.0, 0.0, 0.0, 1.284e-02, 1.262e-02, 1.241e-02, 1.220e-02, 1.200e-02, 1.181e-02, 1.162e-02, 1.144e-02, + 1.127e-02, 1.110e-02, 1.093e-02, 1.078e-02, 1.071e-02, 1.065e-02, 1.059e-02, 1.053e-02, 1.047e-02, 1.041e-02, 1.035e-02, 1.029e-02, + 1.024e-02, 1.018e-02, 1.012e-02, 1.007e-02, 1.001e-02, 9.961e-03, 9.934e-03, 9.907e-03, 9.881e-03, 9.855e-03, 9.828e-03, 9.802e-03, + 9.776e-03, 9.750e-03, 9.725e-03, 9.699e-03, 9.674e-03, 9.649e-03, 9.623e-03, 9.598e-03, 9.574e-03, 9.549e-03, 9.524e-03, 9.500e-03, + 9.475e-03, 9.451e-03, 9.427e-03, 9.403e-03, 9.379e-03, 9.355e-03, 9.332e-03, 9.308e-03, 9.285e-03, 9.261e-03, 9.238e-03, 9.215e-03, + 9.192e-03, 9.170e-03, 9.124e-03, 9.079e-03, 9.035e-03, 8.991e-03, 8.947e-03, 8.904e-03, 8.862e-03, 8.819e-03, 8.777e-03, 8.736e-03, + 8.695e-03, 8.654e-03, 8.614e-03, 8.574e-03, 8.534e-03, 8.495e-03, 8.456e-03, 8.417e-03, 8.379e-03, 8.341e-03, 8.304e-03, 8.267e-03, + 8.230e-03, 8.193e-03, 8.157e-03, 8.068e-03, 7.981e-03, 7.896e-03, 7.812e-03, 7.731e-03, 7.651e-03, 7.572e-03, 7.495e-03, 7.420e-03, + 7.346e-03, 7.203e-03, 7.065e-03, 6.933e-03, 6.805e-03, 6.682e-03, 6.563e-03, 6.449e-03, 6.338e-03, 6.231e-03, 6.128e-03, 6.028e-03, + 5.931e-03, 5.838e-03, 5.747e-03, 3.542e-05, 5.111e-03, 4.781e-03}, + {0.0, 0.0, 0.0, 0.0, 0.0, 1.731e-02, 1.702e-02, 1.674e-02, 1.646e-02, 1.620e-02, 1.594e-02, 1.570e-02, + 1.546e-02, 1.522e-02, 1.500e-02, 1.478e-02, 1.469e-02, 1.461e-02, 1.452e-02, 1.444e-02, 1.436e-02, 1.428e-02, 1.420e-02, 1.412e-02, + 1.404e-02, 1.396e-02, 1.389e-02, 1.381e-02, 1.374e-02, 1.366e-02, 1.362e-02, 1.359e-02, 1.355e-02, 1.352e-02, 1.348e-02, 1.344e-02, + 1.341e-02, 1.337e-02, 1.334e-02, 1.330e-02, 1.327e-02, 1.323e-02, 1.320e-02, 1.316e-02, 1.313e-02, 1.310e-02, 1.306e-02, 1.303e-02, + 1.300e-02, 1.296e-02, 1.293e-02, 1.290e-02, 1.286e-02, 1.283e-02, 1.280e-02, 1.277e-02, 1.273e-02, 1.270e-02, 1.267e-02, 1.264e-02, + 1.261e-02, 1.258e-02, 1.251e-02, 1.245e-02, 1.239e-02, 1.233e-02, 1.227e-02, 1.221e-02, 1.215e-02, 1.210e-02, 1.204e-02, 1.198e-02, + 1.192e-02, 1.187e-02, 1.181e-02, 1.176e-02, 1.170e-02, 1.165e-02, 1.160e-02, 1.154e-02, 1.149e-02, 1.144e-02, 1.139e-02, 1.134e-02, + 1.129e-02, 1.124e-02, 1.119e-02, 1.107e-02, 1.095e-02, 1.083e-02, 1.071e-02, 1.060e-02, 1.049e-02, 1.038e-02, 1.028e-02, 1.018e-02, + 1.007e-02, 9.879e-03, 9.690e-03, 9.508e-03, 9.333e-03, 9.164e-03, 9.001e-03, 8.844e-03, 8.692e-03, 8.546e-03, 8.404e-03, 8.267e-03, + 8.134e-03, 8.006e-03, 7.881e-03, 3.542e-05, 7.009e-03, 6.556e-03}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.307e-02, 2.269e-02, 2.232e-02, 2.196e-02, 2.161e-02, 2.128e-02, + 2.095e-02, 2.063e-02, 2.033e-02, 2.003e-02, 1.991e-02, 1.980e-02, 1.968e-02, 1.957e-02, 1.946e-02, 1.935e-02, 1.924e-02, 1.913e-02, + 1.903e-02, 1.892e-02, 1.882e-02, 1.872e-02, 1.862e-02, 1.851e-02, 1.846e-02, 1.842e-02, 1.837e-02, 1.832e-02, 1.827e-02, 1.822e-02, + 1.817e-02, 1.812e-02, 1.808e-02, 1.803e-02, 1.798e-02, 1.793e-02, 1.789e-02, 1.784e-02, 1.779e-02, 1.775e-02, 1.770e-02, 1.766e-02, + 1.761e-02, 1.757e-02, 1.752e-02, 1.748e-02, 1.743e-02, 1.739e-02, 1.734e-02, 1.730e-02, 1.726e-02, 1.721e-02, 1.717e-02, 1.713e-02, + 1.708e-02, 1.704e-02, 1.696e-02, 1.687e-02, 1.679e-02, 1.671e-02, 1.663e-02, 1.655e-02, 1.647e-02, 1.639e-02, 1.631e-02, 1.624e-02, + 1.616e-02, 1.608e-02, 1.601e-02, 1.593e-02, 1.586e-02, 1.579e-02, 1.572e-02, 1.564e-02, 1.557e-02, 1.550e-02, 1.543e-02, 1.536e-02, + 1.530e-02, 1.523e-02, 1.516e-02, 1.499e-02, 1.483e-02, 1.467e-02, 1.452e-02, 1.437e-02, 1.422e-02, 1.407e-02, 1.393e-02, 1.379e-02, + 1.365e-02, 1.339e-02, 1.313e-02, 1.288e-02, 1.265e-02, 1.242e-02, 1.220e-02, 1.198e-02, 1.178e-02, 1.158e-02, 1.139e-02, 1.120e-02, + 1.102e-02, 1.085e-02, 1.068e-02, 3.542e-05, 9.498e-03, 8.884e-03}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3.042e-02, 2.992e-02, 2.943e-02, 2.897e-02, 2.851e-02, + 2.808e-02, 2.765e-02, 2.724e-02, 2.684e-02, 2.669e-02, 2.653e-02, 2.638e-02, 2.623e-02, 2.608e-02, 2.593e-02, 2.579e-02, 2.564e-02, + 2.550e-02, 2.536e-02, 2.522e-02, 2.508e-02, 2.494e-02, 2.481e-02, 2.474e-02, 2.468e-02, 2.461e-02, 2.454e-02, 2.448e-02, 2.441e-02, + 2.435e-02, 2.428e-02, 2.422e-02, 2.416e-02, 2.409e-02, 2.403e-02, 2.397e-02, 2.391e-02, 2.384e-02, 2.378e-02, 2.372e-02, 2.366e-02, + 2.360e-02, 2.354e-02, 2.348e-02, 2.342e-02, 2.336e-02, 2.330e-02, 2.324e-02, 2.318e-02, 2.312e-02, 2.306e-02, 2.301e-02, 2.295e-02, + 2.289e-02, 2.284e-02, 2.272e-02, 2.261e-02, 2.250e-02, 2.239e-02, 2.228e-02, 2.217e-02, 2.207e-02, 2.196e-02, 2.186e-02, 2.175e-02, + 2.165e-02, 2.155e-02, 2.145e-02, 2.135e-02, 2.125e-02, 2.115e-02, 2.106e-02, 2.096e-02, 2.087e-02, 2.077e-02, 2.068e-02, 2.059e-02, + 2.049e-02, 2.040e-02, 2.031e-02, 2.009e-02, 1.987e-02, 1.966e-02, 1.945e-02, 1.925e-02, 1.905e-02, 1.885e-02, 1.866e-02, 1.848e-02, + 1.829e-02, 1.794e-02, 1.759e-02, 1.726e-02, 1.694e-02, 1.664e-02, 1.634e-02, 1.606e-02, 1.578e-02, 1.552e-02, 1.526e-02, 1.501e-02, + 1.477e-02, 1.453e-02, 1.431e-02, 3.542e-05, 1.273e-02, 1.190e-02}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3.967e-02, 3.903e-02, 3.841e-02, 3.781e-02, + 3.723e-02, 3.666e-02, 3.612e-02, 3.559e-02, 3.538e-02, 3.518e-02, 3.497e-02, 3.477e-02, 3.457e-02, 3.438e-02, 3.419e-02, 3.399e-02, + 3.380e-02, 3.362e-02, 3.343e-02, 3.325e-02, 3.307e-02, 3.289e-02, 3.280e-02, 3.271e-02, 3.262e-02, 3.254e-02, 3.245e-02, 3.236e-02, + 3.228e-02, 3.219e-02, 3.211e-02, 3.202e-02, 3.194e-02, 3.186e-02, 3.177e-02, 3.169e-02, 3.161e-02, 3.153e-02, 3.144e-02, 3.136e-02, + 3.128e-02, 3.120e-02, 3.112e-02, 3.104e-02, 3.096e-02, 3.089e-02, 3.081e-02, 3.073e-02, 3.065e-02, 3.058e-02, 3.050e-02, 3.042e-02, + 3.035e-02, 3.027e-02, 3.012e-02, 2.997e-02, 2.983e-02, 2.968e-02, 2.954e-02, 2.939e-02, 2.925e-02, 2.911e-02, 2.897e-02, 2.884e-02, + 2.870e-02, 2.857e-02, 2.843e-02, 2.830e-02, 2.817e-02, 2.804e-02, 2.791e-02, 2.778e-02, 2.766e-02, 2.753e-02, 2.741e-02, 2.729e-02, + 2.716e-02, 2.704e-02, 2.692e-02, 2.663e-02, 2.634e-02, 2.606e-02, 2.579e-02, 2.552e-02, 2.525e-02, 2.499e-02, 2.474e-02, 2.449e-02, + 2.425e-02, 2.377e-02, 2.332e-02, 2.288e-02, 2.246e-02, 2.205e-02, 2.166e-02, 2.128e-02, 2.092e-02, 2.057e-02, 2.022e-02, 1.989e-02, + 1.957e-02, 1.927e-02, 1.897e-02, 3.542e-05, 1.687e-02, 1.578e-02}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 5.124e-02, 5.042e-02, 4.963e-02, + 4.887e-02, 4.812e-02, 4.741e-02, 4.671e-02, 4.644e-02, 4.617e-02, 4.590e-02, 4.564e-02, 4.537e-02, 4.512e-02, 4.486e-02, 4.461e-02, + 4.436e-02, 4.412e-02, 4.387e-02, 4.363e-02, 4.340e-02, 4.316e-02, 4.304e-02, 4.293e-02, 4.281e-02, 4.270e-02, 4.258e-02, 4.247e-02, + 4.236e-02, 4.225e-02, 4.213e-02, 4.202e-02, 4.191e-02, 4.180e-02, 4.169e-02, 4.158e-02, 4.148e-02, 4.137e-02, 4.126e-02, 4.116e-02, + 4.105e-02, 4.094e-02, 4.084e-02, 4.073e-02, 4.063e-02, 4.053e-02, 4.043e-02, 4.032e-02, 4.022e-02, 4.012e-02, 4.002e-02, 3.992e-02, + 3.982e-02, 3.972e-02, 3.952e-02, 3.933e-02, 3.914e-02, 3.895e-02, 3.876e-02, 3.857e-02, 3.838e-02, 3.820e-02, 3.802e-02, 3.784e-02, + 3.766e-02, 3.748e-02, 3.731e-02, 3.713e-02, 3.696e-02, 3.679e-02, 3.662e-02, 3.646e-02, 3.629e-02, 3.613e-02, 3.596e-02, 3.580e-02, + 3.564e-02, 3.548e-02, 3.533e-02, 3.494e-02, 3.456e-02, 3.419e-02, 3.383e-02, 3.348e-02, 3.313e-02, 3.279e-02, 3.246e-02, 3.213e-02, + 3.181e-02, 3.119e-02, 3.059e-02, 3.002e-02, 2.947e-02, 2.893e-02, 2.842e-02, 2.792e-02, 2.744e-02, 2.698e-02, 2.653e-02, 2.610e-02, + 2.568e-02, 2.528e-02, 2.488e-02, 3.542e-05, 2.213e-02, 2.070e-02}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 6.556e-02, 6.453e-02, + 6.353e-02, 6.256e-02, 6.163e-02, 6.072e-02, 6.036e-02, 6.001e-02, 5.966e-02, 5.932e-02, 5.898e-02, 5.864e-02, 5.831e-02, 5.799e-02, + 5.766e-02, 5.734e-02, 5.702e-02, 5.671e-02, 5.640e-02, 5.610e-02, 5.594e-02, 5.579e-02, 5.564e-02, 5.549e-02, 5.535e-02, 5.520e-02, + 5.505e-02, 5.490e-02, 5.476e-02, 5.461e-02, 5.447e-02, 5.433e-02, 5.419e-02, 5.404e-02, 5.390e-02, 5.376e-02, 5.362e-02, 5.349e-02, + 5.335e-02, 5.321e-02, 5.307e-02, 5.294e-02, 5.280e-02, 5.267e-02, 5.254e-02, 5.240e-02, 5.227e-02, 5.214e-02, 5.201e-02, 5.188e-02, + 5.175e-02, 5.162e-02, 5.136e-02, 5.111e-02, 5.086e-02, 5.061e-02, 5.036e-02, 5.012e-02, 4.988e-02, 4.964e-02, 4.940e-02, 4.917e-02, + 4.894e-02, 4.871e-02, 4.848e-02, 4.825e-02, 4.803e-02, 4.781e-02, 4.759e-02, 4.737e-02, 4.716e-02, 4.694e-02, 4.673e-02, 4.652e-02, + 4.632e-02, 4.611e-02, 4.591e-02, 4.540e-02, 4.491e-02, 4.443e-02, 4.396e-02, 4.350e-02, 4.305e-02, 4.261e-02, 4.218e-02, 4.175e-02, + 4.134e-02, 4.053e-02, 3.975e-02, 3.901e-02, 3.829e-02, 3.759e-02, 3.693e-02, 3.628e-02, 3.566e-02, 3.506e-02, 3.448e-02, 3.391e-02, + 3.337e-02, 3.284e-02, 3.233e-02, 3.542e-05, 2.875e-02, 2.689e-02}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 8.315e-02, + 8.185e-02, 8.060e-02, 7.939e-02, 7.821e-02, 7.775e-02, 7.730e-02, 7.685e-02, 7.641e-02, 7.597e-02, 7.553e-02, 7.511e-02, 7.468e-02, + 7.426e-02, 7.385e-02, 7.344e-02, 7.304e-02, 7.264e-02, 7.224e-02, 7.205e-02, 7.185e-02, 7.166e-02, 7.147e-02, 7.128e-02, 7.108e-02, + 7.090e-02, 7.071e-02, 7.052e-02, 7.033e-02, 7.015e-02, 6.996e-02, 6.978e-02, 6.960e-02, 6.942e-02, 6.923e-02, 6.906e-02, 6.888e-02, + 6.870e-02, 6.852e-02, 6.835e-02, 6.817e-02, 6.800e-02, 6.782e-02, 6.765e-02, 6.748e-02, 6.731e-02, 6.714e-02, 6.697e-02, 6.680e-02, + 6.664e-02, 6.647e-02, 6.614e-02, 6.581e-02, 6.549e-02, 6.517e-02, 6.485e-02, 6.454e-02, 6.423e-02, 6.392e-02, 6.361e-02, 6.331e-02, + 6.301e-02, 6.272e-02, 6.242e-02, 6.213e-02, 6.185e-02, 6.156e-02, 6.128e-02, 6.100e-02, 6.072e-02, 6.044e-02, 6.017e-02, 5.990e-02, + 5.963e-02, 5.937e-02, 5.911e-02, 5.846e-02, 5.783e-02, 5.721e-02, 5.660e-02, 5.601e-02, 5.543e-02, 5.486e-02, 5.430e-02, 5.375e-02, + 5.322e-02, 5.218e-02, 5.118e-02, 5.022e-02, 4.929e-02, 4.840e-02, 4.754e-02, 4.671e-02, 4.591e-02, 4.513e-02, 4.438e-02, 4.366e-02, + 4.296e-02, 4.228e-02, 4.162e-02, 3.542e-05, 3.701e-02, 3.462e-02}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.10460, 0.10290, 0.10140, 9.988e-02, 9.929e-02, 9.871e-02, 9.813e-02, 9.757e-02, 9.700e-02, 9.645e-02, 9.590e-02, 9.536e-02, + 9.482e-02, 9.430e-02, 9.377e-02, 9.325e-02, 9.274e-02, 9.224e-02, 9.199e-02, 9.174e-02, 9.149e-02, 9.124e-02, 9.100e-02, 9.075e-02, + 9.051e-02, 9.027e-02, 9.003e-02, 8.979e-02, 8.955e-02, 8.932e-02, 8.908e-02, 8.885e-02, 8.862e-02, 8.839e-02, 8.816e-02, 8.793e-02, + 8.770e-02, 8.747e-02, 8.725e-02, 8.703e-02, 8.680e-02, 8.658e-02, 8.636e-02, 8.614e-02, 8.592e-02, 8.571e-02, 8.549e-02, 8.528e-02, + 8.506e-02, 8.485e-02, 8.443e-02, 8.401e-02, 8.360e-02, 8.319e-02, 8.278e-02, 8.238e-02, 8.198e-02, 8.159e-02, 8.120e-02, 8.081e-02, + 8.043e-02, 8.005e-02, 7.968e-02, 7.931e-02, 7.894e-02, 7.857e-02, 7.821e-02, 7.786e-02, 7.750e-02, 7.715e-02, 7.680e-02, 7.646e-02, + 7.611e-02, 7.578e-02, 7.544e-02, 7.461e-02, 7.380e-02, 7.301e-02, 7.224e-02, 7.148e-02, 7.074e-02, 7.001e-02, 6.930e-02, 6.860e-02, + 6.792e-02, 6.659e-02, 6.532e-02, 6.409e-02, 6.291e-02, 6.177e-02, 6.067e-02, 5.961e-02, 5.859e-02, 5.760e-02, 5.664e-02, 5.572e-02, + 5.482e-02, 5.395e-02, 5.312e-02, 3.542e-05, 4.724e-02, 4.418e-02}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.13040, 0.12840, 0.12650, 0.12580, 0.125, 0.12430, 0.12360, 0.12290, 0.12220, 0.12150, 0.12080, + 0.12010, 0.11940, 0.11870, 0.11810, 0.11740, 0.11680, 0.11650, 0.11620, 0.11580, 0.11550, 0.11520, 0.11490, + 0.11460, 0.11430, 0.114, 0.11370, 0.11340, 0.11310, 0.11280, 0.11250, 0.11220, 0.11190, 0.11160, 0.11130, + 0.111, 0.11080, 0.11050, 0.11020, 0.10990, 0.10960, 0.10930, 0.10910, 0.10880, 0.10850, 0.10820, 0.108, + 0.10770, 0.10740, 0.10690, 0.10640, 0.10580, 0.10530, 0.10480, 0.10430, 0.10380, 0.10330, 0.10280, 0.10230, + 0.10180, 0.10130, 0.10090, 0.10040, 9.993e-02, 9.946e-02, 9.901e-02, 9.855e-02, 9.810e-02, 9.766e-02, 9.722e-02, 9.678e-02, + 9.635e-02, 9.592e-02, 9.549e-02, 9.444e-02, 9.342e-02, 9.242e-02, 9.144e-02, 9.048e-02, 8.954e-02, 8.862e-02, 8.771e-02, 8.683e-02, + 8.597e-02, 8.429e-02, 8.267e-02, 8.112e-02, 7.962e-02, 7.818e-02, 7.678e-02, 7.544e-02, 7.415e-02, 7.289e-02, 7.168e-02, 7.051e-02, + 6.938e-02, 6.828e-02, 6.722e-02, 3.542e-05, 5.978e-02, 5.591e-02}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.16150, 0.159, 0.15810, 0.15710, 0.15620, 0.15530, 0.15440, 0.15350, 0.15260, 0.15180, + 0.15090, 0.15, 0.14920, 0.14840, 0.14760, 0.14670, 0.14630, 0.14590, 0.14550, 0.14520, 0.14480, 0.14440, + 0.144, 0.14360, 0.14320, 0.14280, 0.14250, 0.14210, 0.14170, 0.14130, 0.141, 0.14060, 0.14020, 0.13990, + 0.13950, 0.13910, 0.13880, 0.13840, 0.13810, 0.13770, 0.13730, 0.137, 0.13660, 0.13630, 0.136, 0.13560, + 0.13530, 0.13490, 0.13430, 0.13360, 0.13290, 0.13230, 0.13160, 0.131, 0.13040, 0.12970, 0.12910, 0.12850, + 0.12790, 0.12730, 0.12670, 0.12610, 0.12550, 0.12490, 0.12430, 0.12380, 0.12320, 0.12260, 0.12210, 0.12150, + 0.121, 0.12050, 0.11990, 0.11860, 0.11730, 0.11610, 0.11480, 0.11360, 0.11240, 0.11130, 0.11010, 0.109, + 0.10790, 0.10580, 0.10380, 0.10190, 9.997e-02, 9.816e-02, 9.641e-02, 9.473e-02, 9.310e-02, 9.152e-02, 9.000e-02, 8.853e-02, + 8.711e-02, 8.573e-02, 8.440e-02, 3.542e-05, 7.505e-02, 7.019e-02}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.19840, 0.19720, 0.19610, 0.19490, 0.19370, 0.19260, 0.19150, 0.19040, 0.18930, 0.18820, 0.18720, + 0.18610, 0.18510, 0.184, 0.183, 0.18250, 0.182, 0.18150, 0.181, 0.18050, 0.18, 0.17960, 0.17910, 0.17860, + 0.17810, 0.17760, 0.17720, 0.17670, 0.17620, 0.17580, 0.17530, 0.17480, 0.17440, 0.17390, 0.17350, 0.173, 0.17260, + 0.17210, 0.17170, 0.17120, 0.17080, 0.17040, 0.16990, 0.16950, 0.16910, 0.16870, 0.16820, 0.16740, 0.16660, 0.16570, + 0.16490, 0.16410, 0.16330, 0.16250, 0.16170, 0.16090, 0.16020, 0.15940, 0.15870, 0.15790, 0.15720, 0.15640, 0.15570, + 0.155, 0.15430, 0.15360, 0.15290, 0.15220, 0.15150, 0.15080, 0.15010, 0.14950, 0.14780, 0.14620, 0.14460, 0.14310, + 0.14160, 0.14010, 0.13870, 0.13730, 0.13590, 0.13450, 0.13190, 0.12940, 0.12690, 0.12460, 0.12230, 0.12010, 0.118, + 0.116, 0.11410, 0.11220, 0.11030, 0.10850, 0.10680, 0.10520, 3.542e-05, 9.352e-02, 8.746e-02}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.21510, 0.21380, 0.21250, 0.21130, 0.21, 0.20880, 0.20760, 0.20640, 0.20520, 0.204, + 0.20290, 0.20180, 0.20060, 0.19950, 0.199, 0.19840, 0.19790, 0.19730, 0.19680, 0.19630, 0.19570, 0.19520, 0.19470, + 0.19420, 0.19360, 0.19310, 0.19260, 0.19210, 0.19160, 0.19110, 0.19060, 0.19010, 0.18960, 0.18910, 0.18860, 0.18810, + 0.18760, 0.18720, 0.18670, 0.18620, 0.18570, 0.18520, 0.18480, 0.18430, 0.18380, 0.18340, 0.18250, 0.18150, 0.18060, + 0.17980, 0.17890, 0.178, 0.17710, 0.17630, 0.17540, 0.17460, 0.17380, 0.17290, 0.17210, 0.17130, 0.17050, 0.16970, + 0.16890, 0.16820, 0.16740, 0.16660, 0.16590, 0.16510, 0.16440, 0.16360, 0.16290, 0.16110, 0.15940, 0.15770, 0.156, + 0.15430, 0.15270, 0.15110, 0.14960, 0.14810, 0.14660, 0.14370, 0.141, 0.13830, 0.13580, 0.13330, 0.13090, 0.12860, + 0.12640, 0.12430, 0.12220, 0.12020, 0.11830, 0.11640, 0.11460, 3.542e-05, 0.10190, 9.531e-02}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.23290, 0.23150, 0.23010, 0.22870, 0.22740, 0.22610, 0.22480, 0.22350, 0.22220, 0.221, 0.21970, 0.21850, 0.21730, + 0.21670, 0.21610, 0.21550, 0.21490, 0.21430, 0.21370, 0.21310, 0.21260, 0.212, 0.21140, 0.21090, 0.21030, 0.20970, 0.20920, 0.20860, + 0.20810, 0.20750, 0.207, 0.20640, 0.20590, 0.20540, 0.20480, 0.20430, 0.20380, 0.20330, 0.20270, 0.20220, 0.20170, 0.20120, 0.20070, + 0.20020, 0.19970, 0.19870, 0.19770, 0.19670, 0.19570, 0.19480, 0.19380, 0.19290, 0.19190, 0.191, 0.19010, 0.18920, 0.18830, 0.18740, + 0.18650, 0.18560, 0.18480, 0.18390, 0.18310, 0.18220, 0.18140, 0.18060, 0.17980, 0.179, 0.17820, 0.17740, 0.17540, 0.17350, 0.17160, + 0.16980, 0.168, 0.16630, 0.16450, 0.16290, 0.16120, 0.15960, 0.15650, 0.15350, 0.15060, 0.14780, 0.14510, 0.14250, 0.14, 0.13760, + 0.13530, 0.133, 0.13090, 0.12880, 0.12670, 0.12480, 3.542e-05, 0.11090, 0.1037}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.25180, 0.25030, 0.24890, 0.24740, 0.246, 0.24450, 0.24310, 0.24170, 0.24040, 0.239, 0.23770, 0.23640, + 0.23570, 0.23510, 0.23440, 0.23380, 0.23310, 0.23250, 0.23190, 0.23120, 0.23060, 0.23, 0.22940, 0.22880, 0.22810, 0.22750, 0.22690, + 0.22630, 0.22570, 0.22510, 0.22460, 0.224, 0.22340, 0.22280, 0.22220, 0.22160, 0.22110, 0.22050, 0.21990, 0.21940, 0.21880, 0.21830, + 0.21770, 0.21720, 0.21610, 0.215, 0.21390, 0.21290, 0.21180, 0.21080, 0.20970, 0.20870, 0.20770, 0.20670, 0.20570, 0.20480, 0.20380, + 0.20280, 0.20190, 0.201, 0.2, 0.19910, 0.19820, 0.19730, 0.19640, 0.19550, 0.19460, 0.19370, 0.19290, 0.19080, 0.18870, 0.18660, + 0.18470, 0.18270, 0.18080, 0.17890, 0.17710, 0.17530, 0.17360, 0.17020, 0.16690, 0.16370, 0.16070, 0.15780, 0.155, 0.15230, 0.14960, + 0.14710, 0.14470, 0.14230, 0.14, 0.13780, 0.13560, 3.542e-05, 0.12060, 0.1128}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.27210, 0.27050, 0.26890, 0.26730, 0.26580, 0.26420, 0.26270, 0.26120, 0.25970, 0.25830, 0.25680, + 0.25610, 0.25540, 0.25470, 0.254, 0.25330, 0.25260, 0.25190, 0.25130, 0.25060, 0.24990, 0.24920, 0.24860, 0.24790, 0.24720, 0.24660, + 0.24590, 0.24530, 0.24460, 0.244, 0.24330, 0.24270, 0.24210, 0.24140, 0.24080, 0.24020, 0.23960, 0.239, 0.23840, 0.23770, 0.23710, + 0.23650, 0.23590, 0.23480, 0.23360, 0.23240, 0.23130, 0.23010, 0.229, 0.22790, 0.22680, 0.22570, 0.22460, 0.22350, 0.22250, 0.22140, + 0.22040, 0.21930, 0.21830, 0.21730, 0.21630, 0.21530, 0.21430, 0.21330, 0.21240, 0.21140, 0.21050, 0.20950, 0.20720, 0.205, 0.20270, + 0.20060, 0.19850, 0.19640, 0.19440, 0.19240, 0.19040, 0.18850, 0.18480, 0.18130, 0.17790, 0.17460, 0.17140, 0.16830, 0.16540, 0.16250, + 0.15980, 0.15710, 0.15460, 0.15210, 0.14970, 0.14730, 3.542e-05, 0.131, 0.1225}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.29370, 0.29190, 0.29020, 0.28850, 0.28690, 0.28520, 0.28360, 0.282, 0.28040, 0.27880, + 0.278, 0.27730, 0.27650, 0.27570, 0.275, 0.27420, 0.27350, 0.27270, 0.272, 0.27130, 0.27050, 0.26980, 0.26910, 0.26840, 0.26760, + 0.26690, 0.26620, 0.26550, 0.26480, 0.26410, 0.26340, 0.26280, 0.26210, 0.26140, 0.26070, 0.26, 0.25940, 0.25870, 0.258, 0.25740, + 0.25670, 0.25610, 0.25480, 0.25350, 0.25220, 0.251, 0.24980, 0.24850, 0.24730, 0.24610, 0.24490, 0.24370, 0.24260, 0.24140, 0.24030, + 0.23910, 0.238, 0.23690, 0.23580, 0.23470, 0.23360, 0.23260, 0.23150, 0.23050, 0.22940, 0.22840, 0.22740, 0.22490, 0.22240, 0.22, + 0.21770, 0.21540, 0.21310, 0.21090, 0.20880, 0.20660, 0.20460, 0.20060, 0.19670, 0.193, 0.18940, 0.186, 0.18270, 0.17950, 0.17640, + 0.17340, 0.17050, 0.16770, 0.165, 0.16240, 0.15990, 3.542e-05, 0.14210, 0.1329}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.31660, 0.31480, 0.31290, 0.31110, 0.30930, 0.30760, 0.30580, 0.30410, 0.30240, + 0.30150, 0.30070, 0.29990, 0.299, 0.29820, 0.29740, 0.29660, 0.29580, 0.295, 0.29420, 0.29340, 0.29260, 0.29180, 0.291, 0.29020, + 0.28940, 0.28870, 0.28790, 0.28720, 0.28640, 0.28560, 0.28490, 0.28420, 0.28340, 0.28270, 0.282, 0.28120, 0.28050, 0.27980, 0.27910, + 0.27840, 0.27760, 0.27620, 0.27490, 0.27350, 0.27210, 0.27080, 0.26940, 0.26810, 0.26680, 0.26550, 0.26430, 0.263, 0.26170, 0.26050, + 0.25930, 0.258, 0.25680, 0.25560, 0.25450, 0.25330, 0.25210, 0.251, 0.24980, 0.24870, 0.24760, 0.24650, 0.24380, 0.24110, 0.23850, + 0.23590, 0.23350, 0.231, 0.22860, 0.22630, 0.224, 0.22170, 0.21740, 0.21320, 0.20920, 0.20530, 0.20160, 0.198, 0.19450, 0.19120, + 0.18790, 0.18480, 0.18180, 0.17880, 0.176, 0.17330, 3.542e-05, 0.154, 0.1441}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.34110, 0.33910, 0.33710, 0.33520, 0.33320, 0.33130, 0.32940, 0.32760, + 0.32670, 0.32580, 0.32490, 0.324, 0.32310, 0.32220, 0.32130, 0.32040, 0.31950, 0.31870, 0.31780, 0.31690, 0.31610, 0.31520, 0.31440, + 0.31350, 0.31270, 0.31190, 0.31110, 0.31020, 0.30940, 0.30860, 0.30780, 0.307, 0.30620, 0.30540, 0.30460, 0.30380, 0.30310, 0.30230, + 0.30150, 0.30070, 0.29920, 0.29770, 0.29620, 0.29470, 0.29330, 0.29180, 0.29040, 0.289, 0.28760, 0.28620, 0.28480, 0.28350, 0.28210, + 0.28080, 0.27950, 0.27820, 0.27690, 0.27560, 0.27430, 0.27310, 0.27180, 0.27060, 0.26930, 0.26810, 0.26690, 0.264, 0.26110, 0.25830, + 0.25550, 0.25280, 0.25020, 0.24760, 0.245, 0.24260, 0.24010, 0.23540, 0.23090, 0.22650, 0.22230, 0.21830, 0.21440, 0.21060, 0.207, + 0.20350, 0.20010, 0.19680, 0.19360, 0.19060, 0.18760, 3.542e-05, 0.16680, 0.156}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.36710, 0.36490, 0.36280, 0.36070, 0.35860, 0.35660, 0.35460, + 0.35360, 0.35260, 0.35160, 0.35060, 0.34960, 0.34870, 0.34770, 0.34680, 0.34580, 0.34490, 0.34390, 0.343, 0.34210, 0.34110, 0.34020, + 0.33930, 0.33840, 0.33750, 0.33660, 0.33570, 0.33480, 0.334, 0.33310, 0.33220, 0.33130, 0.33050, 0.32960, 0.32880, 0.32790, 0.32710, + 0.32630, 0.32540, 0.32380, 0.32210, 0.32050, 0.31890, 0.31730, 0.31580, 0.31420, 0.31270, 0.31120, 0.30970, 0.30820, 0.30670, 0.30520, + 0.30380, 0.30240, 0.30090, 0.29950, 0.29820, 0.29680, 0.29540, 0.29410, 0.29270, 0.29140, 0.29010, 0.28880, 0.28560, 0.28250, 0.27940, + 0.27640, 0.27350, 0.27060, 0.26780, 0.26510, 0.26240, 0.25980, 0.25460, 0.24970, 0.245, 0.24050, 0.23610, 0.23190, 0.22780, 0.22390, + 0.22010, 0.21640, 0.21290, 0.20940, 0.20610, 0.20290, 3.542e-05, 0.18040, 0.1687}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.39460, 0.39230, 0.39010, 0.38780, 0.38560, 0.38340, + 0.38230, 0.38120, 0.38020, 0.37910, 0.37810, 0.377, 0.376, 0.37490, 0.37390, 0.37290, 0.37190, 0.37080, 0.36980, 0.36880, 0.36780, + 0.36690, 0.36590, 0.36490, 0.36390, 0.363, 0.362, 0.361, 0.36010, 0.35920, 0.35820, 0.35730, 0.35640, 0.35540, 0.35450, 0.35360, + 0.35270, 0.35180, 0.35, 0.34820, 0.34650, 0.34470, 0.343, 0.34130, 0.33970, 0.338, 0.33640, 0.33470, 0.33310, 0.33150, 0.32990, + 0.32840, 0.32680, 0.32530, 0.32380, 0.32230, 0.32080, 0.31930, 0.31780, 0.31640, 0.315, 0.31350, 0.31210, 0.30870, 0.30530, 0.302, + 0.29870, 0.29560, 0.29250, 0.28940, 0.28650, 0.28360, 0.28070, 0.27520, 0.26990, 0.26480, 0.25990, 0.25510, 0.25060, 0.24620, 0.24190, + 0.23780, 0.23390, 0.23, 0.22630, 0.22270, 0.21930, 3.542e-05, 0.19490, 0.1823}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.42390, 0.42140, 0.419, 0.41660, 0.41420, + 0.413, 0.41190, 0.41070, 0.40960, 0.40840, 0.40730, 0.40610, 0.405, 0.40390, 0.40280, 0.40170, 0.40060, 0.39950, 0.39840, 0.39730, + 0.39630, 0.39520, 0.39410, 0.39310, 0.392, 0.391, 0.39, 0.38890, 0.38790, 0.38690, 0.38590, 0.38490, 0.38390, 0.38290, 0.38190, + 0.38090, 0.37990, 0.378, 0.37610, 0.37420, 0.37230, 0.37050, 0.36860, 0.36680, 0.365, 0.36320, 0.36150, 0.35970, 0.358, 0.35630, + 0.35460, 0.35290, 0.35130, 0.34960, 0.348, 0.34640, 0.34480, 0.34320, 0.34160, 0.34010, 0.33860, 0.337, 0.33330, 0.32960, 0.32610, + 0.32260, 0.31910, 0.31580, 0.31250, 0.30930, 0.30620, 0.30310, 0.29710, 0.29140, 0.28590, 0.28060, 0.27540, 0.27050, 0.26580, 0.26120, + 0.25680, 0.25250, 0.24830, 0.24430, 0.24050, 0.23670, 3.542e-05, 0.21040, 0.1968}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.45490, 0.45230, 0.44970, 0.44710, + 0.44580, 0.44450, 0.44330, 0.442, 0.44080, 0.43960, 0.43830, 0.43710, 0.43590, 0.43470, 0.43350, 0.43230, 0.43110, 0.43, 0.42880, + 0.42760, 0.42650, 0.42530, 0.42420, 0.42310, 0.42190, 0.42080, 0.41970, 0.41860, 0.41750, 0.41640, 0.41530, 0.41420, 0.41320, 0.41210, + 0.411, 0.41, 0.40790, 0.40580, 0.40380, 0.40170, 0.39970, 0.39770, 0.39580, 0.39380, 0.39190, 0.39, 0.38810, 0.38620, 0.38440, + 0.38260, 0.38080, 0.379, 0.37720, 0.37540, 0.37370, 0.372, 0.37030, 0.36860, 0.36690, 0.36520, 0.36360, 0.35950, 0.35560, 0.35170, + 0.34790, 0.34420, 0.34060, 0.33710, 0.33360, 0.33020, 0.32690, 0.32050, 0.31430, 0.30830, 0.30260, 0.29710, 0.29180, 0.28660, 0.28170, + 0.27690, 0.27230, 0.26780, 0.26350, 0.25930, 0.25530, 3.542e-05, 0.22690, 0.2122}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.48780, 0.48490, 0.48210, + 0.48080, 0.47940, 0.478, 0.47670, 0.47530, 0.474, 0.47270, 0.47130, 0.47, 0.46870, 0.46740, 0.46620, 0.46490, 0.46360, 0.46230, + 0.46110, 0.45980, 0.45860, 0.45740, 0.45610, 0.45490, 0.45370, 0.45250, 0.45130, 0.45010, 0.44890, 0.44780, 0.44660, 0.44540, 0.44430, + 0.44310, 0.442, 0.43970, 0.43750, 0.43530, 0.43310, 0.43090, 0.42870, 0.42660, 0.42450, 0.42240, 0.42040, 0.41830, 0.41630, 0.41430, + 0.41240, 0.41040, 0.40850, 0.40650, 0.40460, 0.40280, 0.40090, 0.39910, 0.39720, 0.39540, 0.39360, 0.39190, 0.38750, 0.38320, 0.37910, + 0.375, 0.371, 0.36710, 0.36330, 0.35950, 0.35590, 0.35230, 0.34530, 0.33870, 0.33230, 0.32610, 0.32010, 0.31440, 0.30890, 0.30350, + 0.29840, 0.29340, 0.28860, 0.28390, 0.27940, 0.27510, 3.542e-05, 0.24450, 0.2287}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.52250, 0.51950, + 0.518, 0.51650, 0.51510, 0.51360, 0.51210, 0.51070, 0.50920, 0.50780, 0.50640, 0.505, 0.50360, 0.50220, 0.50080, 0.49940, 0.49810, + 0.49670, 0.49540, 0.494, 0.49270, 0.49140, 0.49010, 0.48870, 0.48740, 0.48610, 0.48490, 0.48360, 0.48230, 0.481, 0.47980, 0.47850, + 0.47730, 0.47610, 0.47360, 0.47120, 0.46880, 0.46640, 0.46410, 0.46180, 0.45950, 0.45720, 0.455, 0.45270, 0.45050, 0.44840, 0.44620, + 0.44410, 0.442, 0.43990, 0.43780, 0.43580, 0.43370, 0.43170, 0.42970, 0.42780, 0.42580, 0.42390, 0.422, 0.41730, 0.41270, 0.40820, + 0.40380, 0.39950, 0.39530, 0.39110, 0.38710, 0.38320, 0.37930, 0.37180, 0.36460, 0.35770, 0.35110, 0.34460, 0.33850, 0.33250, 0.32680, + 0.32120, 0.31590, 0.31070, 0.30570, 0.30080, 0.29610, 3.542e-05, 0.26320, 0.2461}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.55930, + 0.55770, 0.55610, 0.55450, 0.55290, 0.55130, 0.54980, 0.54820, 0.54670, 0.54510, 0.54360, 0.54210, 0.54060, 0.53910, 0.53760, 0.53610, + 0.53460, 0.53320, 0.53170, 0.53030, 0.52890, 0.52740, 0.526, 0.52460, 0.52320, 0.52180, 0.52050, 0.51910, 0.51770, 0.51640, 0.515, + 0.51370, 0.51230, 0.50970, 0.50710, 0.50450, 0.50190, 0.49940, 0.49690, 0.49440, 0.492, 0.48960, 0.48720, 0.48480, 0.48240, 0.48010, + 0.47780, 0.47550, 0.47330, 0.47110, 0.46880, 0.46670, 0.46450, 0.46230, 0.46020, 0.45810, 0.456, 0.454, 0.44890, 0.44390, 0.43910, + 0.43440, 0.42970, 0.42520, 0.42080, 0.41640, 0.41220, 0.408, 0.4, 0.39220, 0.38480, 0.37760, 0.37070, 0.36410, 0.35760, 0.35150, + 0.34550, 0.33970, 0.33410, 0.32870, 0.32350, 0.31850, 3.542e-05, 0.28310, 0.2647}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.57850, 0.57680, 0.57510, 0.57350, 0.57180, 0.57020, 0.56860, 0.567, 0.56540, 0.56380, 0.56220, 0.56070, 0.55910, 0.55760, 0.556, + 0.55450, 0.553, 0.55150, 0.55, 0.54850, 0.547, 0.54550, 0.54410, 0.54260, 0.54120, 0.53980, 0.53830, 0.53690, 0.53550, 0.53410, + 0.53270, 0.53130, 0.52860, 0.52590, 0.52320, 0.52050, 0.51790, 0.51530, 0.51270, 0.51020, 0.50770, 0.50520, 0.50270, 0.50030, 0.49790, + 0.49550, 0.49310, 0.49080, 0.48850, 0.48620, 0.48390, 0.48160, 0.47940, 0.47720, 0.475, 0.47290, 0.47070, 0.46550, 0.46030, 0.45530, + 0.45040, 0.44560, 0.44090, 0.43630, 0.43180, 0.42740, 0.423, 0.41470, 0.40660, 0.39890, 0.39150, 0.38430, 0.37740, 0.37080, 0.36440, + 0.35820, 0.35220, 0.34640, 0.34080, 0.33540, 0.33020, 3.542e-05, 0.29350, 0.2744}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.59820, 0.59640, 0.59470, 0.593, 0.59130, 0.58960, 0.588, 0.58630, 0.58470, 0.583, 0.58140, 0.57980, 0.57820, 0.57660, + 0.575, 0.57340, 0.57180, 0.57030, 0.56870, 0.56720, 0.56570, 0.56420, 0.56270, 0.56120, 0.55970, 0.55820, 0.55670, 0.55520, 0.55380, + 0.55230, 0.55090, 0.548, 0.54520, 0.54240, 0.53970, 0.53690, 0.53420, 0.53160, 0.52890, 0.52630, 0.52370, 0.52120, 0.51870, 0.51620, + 0.51370, 0.51120, 0.50880, 0.50640, 0.504, 0.50170, 0.49930, 0.497, 0.49470, 0.49250, 0.49020, 0.488, 0.48250, 0.47720, 0.472, + 0.46690, 0.46190, 0.457, 0.45220, 0.44760, 0.443, 0.43850, 0.42980, 0.42150, 0.41350, 0.40580, 0.39840, 0.39120, 0.38430, 0.37770, + 0.37130, 0.36510, 0.35910, 0.35330, 0.34760, 0.34220, 3.542e-05, 0.30420, 0.2844}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.61840, 0.61660, 0.61480, 0.61310, 0.61130, 0.60960, 0.60790, 0.60620, 0.60450, 0.60280, 0.60110, 0.59940, 0.59780, + 0.59610, 0.59450, 0.59280, 0.59120, 0.58960, 0.588, 0.58640, 0.58490, 0.58330, 0.58170, 0.58020, 0.57860, 0.57710, 0.57560, 0.57410, + 0.57260, 0.57110, 0.56810, 0.56520, 0.56230, 0.55940, 0.55660, 0.55380, 0.551, 0.54830, 0.54560, 0.54290, 0.54020, 0.53760, 0.535, + 0.53240, 0.52990, 0.52740, 0.52490, 0.52240, 0.52, 0.51750, 0.51510, 0.51280, 0.51040, 0.50810, 0.50580, 0.50010, 0.49460, 0.48920, + 0.48390, 0.47870, 0.47360, 0.46870, 0.46390, 0.45910, 0.45450, 0.44550, 0.43680, 0.42850, 0.42050, 0.41290, 0.40540, 0.39830, 0.39140, + 0.38470, 0.37830, 0.37210, 0.36610, 0.36030, 0.35460, 3.542e-05, 0.31520, 0.2948}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.63920, 0.63740, 0.63550, 0.63370, 0.63190, 0.63010, 0.62830, 0.62660, 0.62480, 0.623, 0.62130, 0.61960, + 0.61790, 0.61620, 0.61450, 0.61280, 0.61110, 0.60950, 0.60780, 0.60620, 0.60460, 0.60290, 0.60130, 0.59970, 0.59810, 0.59660, 0.595, + 0.59340, 0.59190, 0.58880, 0.58580, 0.58270, 0.57980, 0.57680, 0.57390, 0.571, 0.56820, 0.56540, 0.56260, 0.55990, 0.55710, 0.55440, + 0.55180, 0.54910, 0.54650, 0.54390, 0.54140, 0.53880, 0.53630, 0.53380, 0.53140, 0.52890, 0.52650, 0.52410, 0.51820, 0.51250, 0.50690, + 0.50140, 0.496, 0.49080, 0.48570, 0.48060, 0.47570, 0.47090, 0.46160, 0.45260, 0.444, 0.43570, 0.42780, 0.42010, 0.41270, 0.40550, + 0.39860, 0.392, 0.38550, 0.37930, 0.37330, 0.36740, 3.542e-05, 0.32660, 0.3054}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.66060, 0.65870, 0.65680, 0.65490, 0.653, 0.65120, 0.64930, 0.64750, 0.64570, 0.64390, 0.64210, + 0.64030, 0.63850, 0.63680, 0.635, 0.63330, 0.63160, 0.62990, 0.62820, 0.62650, 0.62480, 0.62310, 0.62150, 0.61980, 0.61820, 0.61650, + 0.61490, 0.61330, 0.61010, 0.607, 0.60380, 0.60070, 0.59770, 0.59470, 0.59170, 0.58870, 0.58580, 0.58290, 0.58010, 0.57720, 0.57440, + 0.57170, 0.56890, 0.56620, 0.56350, 0.56090, 0.55820, 0.55560, 0.55310, 0.55050, 0.548, 0.54550, 0.543, 0.53690, 0.53090, 0.52510, + 0.51940, 0.51390, 0.50840, 0.50310, 0.49790, 0.49280, 0.48780, 0.47820, 0.46890, 0.46, 0.45140, 0.44310, 0.43510, 0.42750, 0.42010, + 0.41290, 0.406, 0.39930, 0.39290, 0.38660, 0.38060, 3.542e-05, 0.33830, 0.3163}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.68250, 0.68050, 0.67860, 0.67660, 0.67470, 0.67280, 0.67090, 0.669, 0.66710, 0.66530, + 0.66340, 0.66160, 0.65980, 0.658, 0.65620, 0.65440, 0.65260, 0.65080, 0.64910, 0.64730, 0.64560, 0.64390, 0.64210, 0.64040, 0.63870, + 0.63710, 0.63540, 0.63210, 0.62880, 0.62550, 0.62230, 0.61920, 0.616, 0.61290, 0.60990, 0.60690, 0.60390, 0.60090, 0.598, 0.59510, + 0.59220, 0.58930, 0.58650, 0.58370, 0.581, 0.57830, 0.57560, 0.57290, 0.57020, 0.56760, 0.565, 0.56240, 0.55610, 0.54990, 0.54390, + 0.538, 0.53230, 0.52660, 0.52110, 0.51570, 0.51040, 0.50530, 0.49520, 0.48560, 0.47640, 0.46750, 0.45890, 0.45070, 0.44270, 0.435, + 0.42760, 0.42050, 0.41360, 0.40690, 0.40040, 0.39410, 3.542e-05, 0.35030, 0.3276}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.705, 0.703, 0.701, 0.699, 0.697, 0.695, 0.69310, 0.69110, 0.68920, + 0.68730, 0.68530, 0.68350, 0.68160, 0.67970, 0.67780, 0.676, 0.67420, 0.67230, 0.67050, 0.66870, 0.66690, 0.66510, 0.66340, 0.66160, + 0.65990, 0.65810, 0.65470, 0.65130, 0.64790, 0.64460, 0.64130, 0.63810, 0.63480, 0.63170, 0.62850, 0.62540, 0.62230, 0.61930, 0.61630, + 0.61330, 0.61040, 0.60740, 0.60460, 0.60170, 0.59890, 0.59610, 0.59330, 0.59050, 0.58780, 0.58510, 0.58250, 0.57590, 0.56950, 0.56330, + 0.55710, 0.55120, 0.54530, 0.53960, 0.534, 0.52860, 0.52320, 0.51280, 0.50280, 0.49330, 0.484, 0.47520, 0.46660, 0.45840, 0.45050, + 0.44280, 0.43540, 0.42820, 0.42130, 0.41460, 0.40810, 3.542e-05, 0.36270, 0.3391}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.72820, 0.72610, 0.724, 0.72190, 0.71990, 0.71780, 0.71580, 0.71380, + 0.71180, 0.70980, 0.70790, 0.70590, 0.704, 0.702, 0.70010, 0.69820, 0.69630, 0.69440, 0.69250, 0.69070, 0.68880, 0.687, 0.68520, + 0.68340, 0.68160, 0.678, 0.67450, 0.671, 0.66750, 0.66410, 0.66070, 0.65740, 0.65410, 0.65080, 0.64760, 0.64440, 0.64130, 0.63810, + 0.63510, 0.632, 0.629, 0.626, 0.623, 0.62010, 0.61720, 0.61430, 0.61150, 0.60860, 0.60580, 0.60310, 0.59630, 0.58960, 0.58320, + 0.57680, 0.57060, 0.56460, 0.55870, 0.55290, 0.54720, 0.54170, 0.53090, 0.52060, 0.51060, 0.50110, 0.49190, 0.48310, 0.47450, 0.46630, + 0.45840, 0.45070, 0.44330, 0.43610, 0.42920, 0.42240, 3.542e-05, 0.37540, 0.3511}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.75190, 0.74970, 0.74760, 0.74550, 0.74330, 0.74120, 0.73920, + 0.73710, 0.735, 0.733, 0.73090, 0.72890, 0.72690, 0.72490, 0.723, 0.721, 0.719, 0.71710, 0.71520, 0.71320, 0.71130, 0.70940, + 0.70760, 0.70570, 0.702, 0.69830, 0.69470, 0.69110, 0.68760, 0.68410, 0.68060, 0.67720, 0.67380, 0.67050, 0.66720, 0.66390, 0.66060, + 0.65740, 0.65430, 0.65110, 0.648, 0.645, 0.64190, 0.63890, 0.63590, 0.633, 0.63010, 0.62720, 0.62430, 0.61730, 0.61040, 0.60370, + 0.59710, 0.59070, 0.58440, 0.57830, 0.57230, 0.56640, 0.56070, 0.54950, 0.53880, 0.52850, 0.51870, 0.50910, 0.5, 0.49120, 0.48260, + 0.47440, 0.46650, 0.45880, 0.45140, 0.44420, 0.43720, 3.542e-05, 0.38860, 0.3633}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.77630, 0.774, 0.77180, 0.76960, 0.76740, 0.76530, + 0.76310, 0.761, 0.75890, 0.75670, 0.75470, 0.75260, 0.75050, 0.74840, 0.74640, 0.74440, 0.74240, 0.74040, 0.73840, 0.73640, 0.73440, + 0.73250, 0.73050, 0.72670, 0.72290, 0.71910, 0.71540, 0.71170, 0.70810, 0.70450, 0.701, 0.69750, 0.694, 0.69060, 0.68720, 0.68380, + 0.68050, 0.67720, 0.674, 0.67070, 0.66760, 0.66440, 0.66130, 0.65820, 0.65510, 0.65210, 0.64910, 0.64610, 0.63880, 0.63170, 0.62480, + 0.618, 0.61130, 0.60480, 0.59850, 0.59230, 0.58620, 0.58020, 0.56870, 0.55760, 0.547, 0.53670, 0.52690, 0.51740, 0.50820, 0.49940, + 0.49090, 0.48270, 0.47470, 0.46710, 0.45960, 0.45240, 3.542e-05, 0.40210, 0.3759}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.80130, 0.799, 0.79670, 0.79440, 0.79220, + 0.78990, 0.78770, 0.78550, 0.78330, 0.78110, 0.779, 0.77680, 0.77470, 0.77260, 0.77050, 0.76840, 0.76630, 0.76420, 0.76220, 0.76010, + 0.75810, 0.75610, 0.75210, 0.74820, 0.74430, 0.74040, 0.73660, 0.73280, 0.72910, 0.72540, 0.72180, 0.71820, 0.71470, 0.71110, 0.70770, + 0.70420, 0.70080, 0.69740, 0.69410, 0.69080, 0.68750, 0.68430, 0.68110, 0.67790, 0.67480, 0.67170, 0.66860, 0.661, 0.65370, 0.64650, + 0.63940, 0.63250, 0.62580, 0.61920, 0.61280, 0.60650, 0.60030, 0.58840, 0.57690, 0.56590, 0.55530, 0.54510, 0.53530, 0.52580, 0.51670, + 0.50790, 0.49940, 0.49110, 0.48320, 0.47550, 0.468, 3.542e-05, 0.41590, 0.3889}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.82690, 0.82460, 0.82220, 0.81990, + 0.81750, 0.81520, 0.81290, 0.81070, 0.80840, 0.80620, 0.80390, 0.80170, 0.79950, 0.79730, 0.79520, 0.793, 0.79090, 0.78870, 0.78660, + 0.78450, 0.78240, 0.77830, 0.77420, 0.77010, 0.76610, 0.76220, 0.75830, 0.75440, 0.75060, 0.74690, 0.74310, 0.73940, 0.73580, 0.73220, + 0.72860, 0.72510, 0.72160, 0.71810, 0.71470, 0.71130, 0.708, 0.70470, 0.70140, 0.69810, 0.69490, 0.69170, 0.68390, 0.67630, 0.66880, + 0.66150, 0.65440, 0.64740, 0.64060, 0.63390, 0.62740, 0.621, 0.60870, 0.59680, 0.58540, 0.57440, 0.56390, 0.55370, 0.54390, 0.53450, + 0.52530, 0.51650, 0.508, 0.49980, 0.49180, 0.48410, 3.542e-05, 0.43020, 0.4023}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.85320, 0.85080, 0.84840, + 0.846, 0.84360, 0.84120, 0.83880, 0.83650, 0.83410, 0.83180, 0.82950, 0.82730, 0.825, 0.82270, 0.82050, 0.81830, 0.81610, 0.81390, + 0.81170, 0.80950, 0.80520, 0.801, 0.79680, 0.79260, 0.78850, 0.78450, 0.78050, 0.77650, 0.77260, 0.76880, 0.76490, 0.76120, 0.75740, + 0.75370, 0.75010, 0.74650, 0.74290, 0.73930, 0.73580, 0.73240, 0.72890, 0.72550, 0.72210, 0.71880, 0.71550, 0.70740, 0.69950, 0.69180, + 0.68420, 0.67680, 0.66960, 0.66260, 0.65570, 0.64890, 0.64230, 0.62950, 0.61720, 0.60540, 0.59410, 0.58310, 0.57260, 0.56250, 0.55270, + 0.54330, 0.53420, 0.52540, 0.51690, 0.50860, 0.50060, 3.542e-05, 0.44490, 0.416}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.88020, 0.87770, + 0.87520, 0.87270, 0.87030, 0.86780, 0.86540, 0.86290, 0.86050, 0.85820, 0.85580, 0.85340, 0.85110, 0.84880, 0.84650, 0.84420, 0.84190, + 0.83960, 0.83740, 0.83290, 0.82850, 0.82420, 0.81990, 0.81560, 0.81140, 0.80730, 0.80320, 0.79920, 0.79510, 0.79120, 0.78730, 0.78340, + 0.77960, 0.77580, 0.772, 0.76830, 0.76460, 0.761, 0.75740, 0.75390, 0.75030, 0.74680, 0.74340, 0.74, 0.73160, 0.72340, 0.71540, + 0.70760, 0.69990, 0.69240, 0.68510, 0.678, 0.671, 0.66420, 0.65090, 0.63820, 0.626, 0.61430, 0.603, 0.59210, 0.58160, 0.57150, + 0.56170, 0.55230, 0.54320, 0.53440, 0.52590, 0.51760, 3.542e-05, 0.46, 0.4301}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.90790, + 0.90530, 0.90270, 0.90020, 0.89760, 0.89510, 0.89260, 0.89010, 0.88760, 0.88520, 0.88270, 0.88030, 0.87790, 0.87550, 0.87310, 0.87070, + 0.86840, 0.86610, 0.86140, 0.85690, 0.85240, 0.84790, 0.84350, 0.83920, 0.83490, 0.83060, 0.82640, 0.82230, 0.81820, 0.81410, 0.81010, + 0.80610, 0.80220, 0.79830, 0.79450, 0.79070, 0.78690, 0.78320, 0.77950, 0.77590, 0.77220, 0.76870, 0.76510, 0.75640, 0.74790, 0.73970, + 0.73160, 0.72370, 0.71590, 0.70840, 0.701, 0.69380, 0.68670, 0.673, 0.65980, 0.64720, 0.635, 0.62340, 0.61210, 0.60130, 0.59080, + 0.58070, 0.571, 0.56150, 0.55240, 0.54360, 0.53510, 3.542e-05, 0.47550, 0.4446}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.93630, 0.93360, 0.931, 0.92830, 0.92570, 0.92310, 0.92050, 0.91790, 0.91540, 0.91280, 0.91030, 0.90780, 0.90530, 0.90290, 0.90040, + 0.898, 0.89560, 0.89080, 0.886, 0.88140, 0.87680, 0.87220, 0.86770, 0.86320, 0.85880, 0.85450, 0.85020, 0.84590, 0.84170, 0.83760, + 0.83340, 0.82940, 0.82540, 0.82140, 0.81740, 0.81350, 0.80970, 0.80590, 0.80210, 0.79840, 0.79460, 0.791, 0.782, 0.77320, 0.76460, + 0.75620, 0.74810, 0.74010, 0.73220, 0.72460, 0.71710, 0.70980, 0.69560, 0.682, 0.66890, 0.65640, 0.64430, 0.63270, 0.62150, 0.61060, + 0.60020, 0.59010, 0.58040, 0.571, 0.56190, 0.553, 3.542e-05, 0.49140, 0.4594}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.96540, 0.96260, 0.95990, 0.95720, 0.95450, 0.95180, 0.94910, 0.94650, 0.94380, 0.94120, 0.93860, 0.93610, 0.93350, 0.93090, + 0.92840, 0.92590, 0.92090, 0.916, 0.91120, 0.90640, 0.90170, 0.897, 0.89240, 0.88780, 0.88330, 0.87890, 0.87450, 0.87010, 0.86580, + 0.86150, 0.85730, 0.85320, 0.849, 0.845, 0.84090, 0.83690, 0.833, 0.82910, 0.82520, 0.82140, 0.81760, 0.80830, 0.79920, 0.79030, + 0.78160, 0.77310, 0.76490, 0.75680, 0.74890, 0.74110, 0.73360, 0.71890, 0.70480, 0.69130, 0.67830, 0.66580, 0.65380, 0.64220, 0.631, + 0.62020, 0.60980, 0.59970, 0.59, 0.58060, 0.57150, 3.542e-05, 0.50780, 0.4747}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.99520, 0.99240, 0.98950, 0.98670, 0.984, 0.98120, 0.97840, 0.97570, 0.973, 0.97030, 0.96760, 0.965, 0.96230, + 0.95970, 0.95710, 0.952, 0.94690, 0.94190, 0.93690, 0.932, 0.92720, 0.92240, 0.91770, 0.913, 0.90840, 0.90380, 0.89930, 0.89480, + 0.89040, 0.88610, 0.88170, 0.87750, 0.87320, 0.86910, 0.86490, 0.86080, 0.85680, 0.85280, 0.84880, 0.84490, 0.83520, 0.82580, 0.81670, + 0.80770, 0.79890, 0.79040, 0.782, 0.77380, 0.76580, 0.758, 0.74280, 0.72830, 0.71430, 0.70090, 0.68790, 0.67550, 0.66350, 0.652, + 0.64080, 0.63, 0.61960, 0.60960, 0.59980, 0.59040, 3.542e-05, 0.52460, 0.4905}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 1.026, 1.023, 1.02, 1.017, 1.014, 1.011, 1.008, 1.006, 1.003, 1.0, 0.99740, 0.99460, + 0.99190, 0.98920, 0.98390, 0.97860, 0.97340, 0.96830, 0.96320, 0.95820, 0.95320, 0.94830, 0.94350, 0.93870, 0.934, 0.92930, 0.92470, + 0.92010, 0.91560, 0.91110, 0.90670, 0.90230, 0.898, 0.89370, 0.88950, 0.88530, 0.88110, 0.877, 0.873, 0.863, 0.85330, 0.84380, + 0.83450, 0.82540, 0.81660, 0.80790, 0.79940, 0.79120, 0.78310, 0.76740, 0.75230, 0.73790, 0.724, 0.71060, 0.69780, 0.68540, 0.67350, + 0.66190, 0.65080, 0.64010, 0.62970, 0.61960, 0.60990, 3.542e-05, 0.54180, 0.5066}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 1.057, 1.054, 1.051, 1.048, 1.045, 1.042, 1.039, 1.036, 1.034, 1.031, 1.028, + 1.025, 1.022, 1.017, 1.011, 1.006, 1.0, 0.99520, 0.99, 0.98490, 0.97980, 0.97480, 0.96990, 0.965, 0.96010, 0.95530, + 0.95060, 0.94590, 0.94130, 0.93670, 0.93220, 0.92770, 0.92330, 0.91890, 0.91460, 0.91030, 0.906, 0.90180, 0.89150, 0.88140, 0.87160, + 0.862, 0.85260, 0.84350, 0.83450, 0.82580, 0.81720, 0.80880, 0.79260, 0.77710, 0.76210, 0.74780, 0.734, 0.72070, 0.70790, 0.69550, + 0.68360, 0.67210, 0.661, 0.65030, 0.63990, 0.62980, 3.542e-05, 0.55960, 0.5232}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 1.089, 1.086, 1.083, 1.08, 1.077, 1.074, 1.071, 1.068, 1.065, 1.062, + 1.059, 1.056, 1.05, 1.045, 1.039, 1.034, 1.028, 1.023, 1.017, 1.012, 1.007, 1.002, 0.99680, 0.99180, 0.98680, + 0.982, 0.97710, 0.97230, 0.96760, 0.96290, 0.95830, 0.95370, 0.94910, 0.94470, 0.94020, 0.93580, 0.93150, 0.92080, 0.91040, 0.90020, + 0.89030, 0.88060, 0.87110, 0.86190, 0.85280, 0.844, 0.83530, 0.81850, 0.80250, 0.787, 0.77220, 0.75790, 0.74420, 0.731, 0.71820, + 0.70590, 0.694, 0.68260, 0.67150, 0.66070, 0.65030, 3.542e-05, 0.57780, 0.5402}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.122, 1.119, 1.116, 1.113, 1.109, 1.106, 1.103, 1.1, 1.097, + 1.094, 1.091, 1.085, 1.079, 1.073, 1.068, 1.062, 1.056, 1.051, 1.045, 1.04, 1.035, 1.03, 1.024, 1.019, + 1.014, 1.009, 1.004, 0.99930, 0.99440, 0.98960, 0.98490, 0.98020, 0.97560, 0.971, 0.96640, 0.96190, 0.95090, 0.94010, 0.92960, + 0.91930, 0.90930, 0.89950, 0.88990, 0.88060, 0.87140, 0.86250, 0.84510, 0.82850, 0.81260, 0.79730, 0.78250, 0.76830, 0.75470, 0.74150, + 0.72880, 0.71650, 0.70470, 0.69320, 0.68210, 0.67140, 3.542e-05, 0.59640, 0.5576}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.156, 1.152, 1.149, 1.146, 1.143, 1.139, 1.136, 1.133, + 1.13, 1.127, 1.121, 1.115, 1.109, 1.103, 1.097, 1.091, 1.085, 1.08, 1.074, 1.069, 1.063, 1.058, 1.052, + 1.047, 1.042, 1.037, 1.032, 1.027, 1.022, 1.017, 1.012, 1.007, 1.003, 0.99790, 0.99320, 0.98180, 0.97060, 0.95970, + 0.94910, 0.93880, 0.92860, 0.91880, 0.90910, 0.89960, 0.89040, 0.87250, 0.85530, 0.83880, 0.823, 0.80780, 0.79310, 0.779, 0.76540, + 0.75230, 0.73960, 0.72740, 0.71550, 0.70410, 0.693, 3.542e-05, 0.61560, 0.5755}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.19, 1.187, 1.183, 1.18, 1.177, 1.173, 1.17, + 1.167, 1.164, 1.157, 1.151, 1.145, 1.139, 1.133, 1.127, 1.121, 1.115, 1.109, 1.103, 1.098, 1.092, 1.087, + 1.081, 1.076, 1.071, 1.065, 1.06, 1.055, 1.05, 1.045, 1.04, 1.035, 1.03, 1.025, 1.013, 1.002, 0.99070, + 0.97970, 0.969, 0.95860, 0.94840, 0.93840, 0.92860, 0.919, 0.90050, 0.88280, 0.86580, 0.84940, 0.83370, 0.81860, 0.804, 0.78990, + 0.77640, 0.76330, 0.75070, 0.73840, 0.72660, 0.71520, 3.542e-05, 0.63530, 0.5939}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.226, 1.222, 1.219, 1.215, 1.212, 1.208, + 1.205, 1.202, 1.195, 1.188, 1.182, 1.176, 1.169, 1.163, 1.157, 1.151, 1.145, 1.139, 1.133, 1.127, 1.122, + 1.116, 1.111, 1.105, 1.1, 1.094, 1.089, 1.084, 1.079, 1.073, 1.068, 1.063, 1.058, 1.046, 1.034, 1.023, + 1.011, 1.0, 0.98930, 0.97870, 0.96840, 0.95830, 0.94840, 0.92930, 0.911, 0.89340, 0.87650, 0.86030, 0.84470, 0.82960, 0.81510, + 0.80110, 0.78760, 0.77460, 0.76190, 0.74970, 0.73790, 3.542e-05, 0.65550, 0.6128}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.262, 1.258, 1.254, 1.251, 1.247, + 1.244, 1.24, 1.234, 1.227, 1.22, 1.213, 1.207, 1.201, 1.194, 1.188, 1.182, 1.176, 1.17, 1.164, 1.158, + 1.152, 1.146, 1.141, 1.135, 1.129, 1.124, 1.118, 1.113, 1.108, 1.102, 1.097, 1.092, 1.08, 1.067, 1.055, + 1.043, 1.032, 1.021, 1.01, 0.99920, 0.98880, 0.97860, 0.95890, 0.93990, 0.92180, 0.90440, 0.88760, 0.87150, 0.85590, 0.84090, + 0.82650, 0.81260, 0.79910, 0.78610, 0.77350, 0.76130, 3.542e-05, 0.67620, 0.6321}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.299, 1.295, 1.291, 1.288, + 1.284, 1.28, 1.273, 1.266, 1.259, 1.252, 1.246, 1.239, 1.232, 1.226, 1.22, 1.213, 1.207, 1.201, 1.195, + 1.189, 1.183, 1.177, 1.171, 1.165, 1.16, 1.154, 1.149, 1.143, 1.138, 1.132, 1.127, 1.114, 1.101, 1.089, + 1.077, 1.065, 1.053, 1.042, 1.031, 1.02, 1.01, 0.98920, 0.96960, 0.95090, 0.93290, 0.91560, 0.89890, 0.88290, 0.86740, + 0.85250, 0.83810, 0.82420, 0.81080, 0.79780, 0.78520, 3.542e-05, 0.69740, 0.652}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.337, 1.333, 1.329, + 1.325, 1.321, 1.314, 1.307, 1.3, 1.292, 1.285, 1.279, 1.272, 1.265, 1.258, 1.252, 1.245, 1.239, 1.233, + 1.227, 1.22, 1.214, 1.208, 1.202, 1.196, 1.191, 1.185, 1.179, 1.174, 1.168, 1.163, 1.149, 1.136, 1.123, + 1.111, 1.098, 1.086, 1.075, 1.063, 1.052, 1.041, 1.02, 1.0, 0.98080, 0.96220, 0.94430, 0.92710, 0.91060, 0.89460, + 0.87920, 0.86440, 0.85, 0.83620, 0.82280, 0.80980, 3.542e-05, 0.7192, 0.6723}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.375, 1.371, + 1.367, 1.364, 1.356, 1.348, 1.341, 1.334, 1.326, 1.319, 1.312, 1.305, 1.298, 1.292, 1.285, 1.278, 1.272, + 1.265, 1.259, 1.253, 1.246, 1.24, 1.234, 1.228, 1.222, 1.216, 1.211, 1.205, 1.199, 1.185, 1.172, 1.158, + 1.145, 1.133, 1.12, 1.108, 1.097, 1.085, 1.074, 1.052, 1.031, 1.011, 0.99220, 0.97380, 0.956, 0.939, 0.92250, + 0.90660, 0.89130, 0.87650, 0.86220, 0.84840, 0.835, 3.542e-05, 0.7416, 0.6932}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.415, + 1.411, 1.407, 1.399, 1.391, 1.383, 1.376, 1.368, 1.361, 1.354, 1.346, 1.339, 1.332, 1.325, 1.319, 1.312, + 1.305, 1.299, 1.292, 1.286, 1.279, 1.273, 1.267, 1.261, 1.255, 1.249, 1.243, 1.237, 1.222, 1.208, 1.195, + 1.181, 1.168, 1.155, 1.143, 1.131, 1.119, 1.107, 1.085, 1.063, 1.043, 1.023, 1.004, 0.98570, 0.96810, 0.95110, + 0.93470, 0.91890, 0.90360, 0.88890, 0.87460, 0.86080, 3.542e-05, 0.7645, 0.7146}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 1.455, 1.451, 1.443, 1.435, 1.427, 1.419, 1.411, 1.404, 1.396, 1.389, 1.381, 1.374, 1.367, 1.36, 1.353, + 1.346, 1.339, 1.332, 1.326, 1.319, 1.313, 1.306, 1.3, 1.294, 1.287, 1.281, 1.275, 1.26, 1.246, 1.232, + 1.218, 1.204, 1.191, 1.178, 1.166, 1.154, 1.142, 1.118, 1.096, 1.075, 1.055, 1.035, 1.016, 0.99790, 0.98040, + 0.96350, 0.94720, 0.93140, 0.91620, 0.90150, 0.88730, 3.542e-05, 0.7879, 0.7365}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.497, 1.488, 1.48, 1.472, 1.464, 1.456, 1.448, + 1.44, 1.432, 1.425, 1.417, 1.41, 1.402, 1.395, 1.388, 1.381, 1.374, 1.367, 1.36, 1.354, 1.347, 1.34, 1.334, 1.327, + 1.321, 1.315, 1.299, 1.284, 1.27, 1.255, 1.242, 1.228, 1.215, 1.202, 1.189, 1.177, 1.153, 1.13, 1.108, 1.087, 1.067, + 1.047, 1.028, 1.01, 0.993, 0.97620, 0.95990, 0.94420, 0.92910, 0.91440, 3.542e-05, 0.812, 0.759}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.583, 1.574, 1.565, 1.556, 1.548, 1.539, + 1.531, 1.522, 1.514, 1.506, 1.498, 1.49, 1.483, 1.475, 1.468, 1.46, 1.453, 1.445, 1.438, 1.431, 1.424, 1.417, 1.41, + 1.404, 1.397, 1.38, 1.364, 1.349, 1.334, 1.319, 1.304, 1.29, 1.276, 1.263, 1.25, 1.224, 1.2, 1.177, 1.154, 1.133, + 1.112, 1.092, 1.073, 1.054, 1.036, 1.019, 1.002, 0.98630, 0.97070, 3.542e-05, 0.8619, 0.8056}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.673, 1.663, 1.654, 1.644, 1.635, + 1.626, 1.617, 1.609, 1.6, 1.592, 1.583, 1.575, 1.567, 1.559, 1.551, 1.543, 1.535, 1.527, 1.52, 1.512, 1.505, 1.498, + 1.49, 1.483, 1.466, 1.449, 1.432, 1.416, 1.4, 1.385, 1.37, 1.355, 1.341, 1.327, 1.299, 1.273, 1.249, 1.225, 1.202, + 1.18, 1.159, 1.138, 1.119, 1.1, 1.081, 1.063, 1.046, 1.03, 3.542e-05, 0.9143, 0.8546}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.766, 1.756, 1.746, 1.737, + 1.727, 1.717, 1.708, 1.699, 1.69, 1.681, 1.672, 1.663, 1.655, 1.646, 1.638, 1.629, 1.621, 1.613, 1.605, 1.597, 1.589, + 1.582, 1.574, 1.555, 1.537, 1.519, 1.502, 1.485, 1.469, 1.453, 1.437, 1.422, 1.407, 1.378, 1.351, 1.324, 1.299, 1.274, + 1.251, 1.229, 1.207, 1.186, 1.166, 1.146, 1.128, 1.109, 1.092, 3.542e-05, 0.9692, 0.9059}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.864, 1.854, 1.843, + 1.833, 1.823, 1.813, 1.803, 1.793, 1.784, 1.774, 1.765, 1.755, 1.746, 1.737, 1.729, 1.72, 1.711, 1.703, 1.694, 1.686, + 1.678, 1.669, 1.649, 1.63, 1.611, 1.593, 1.575, 1.557, 1.54, 1.524, 1.507, 1.492, 1.461, 1.432, 1.403, 1.377, 1.351, + 1.326, 1.302, 1.279, 1.257, 1.235, 1.215, 1.195, 1.175, 1.157, 3.542e-05, 1.027, 0.9597}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.967, 1.955, + 1.944, 1.933, 1.923, 1.912, 1.902, 1.891, 1.881, 1.871, 1.861, 1.852, 1.842, 1.833, 1.823, 1.814, 1.805, 1.796, 1.787, + 1.778, 1.77, 1.748, 1.728, 1.707, 1.688, 1.669, 1.65, 1.632, 1.614, 1.597, 1.58, 1.548, 1.516, 1.487, 1.458, 1.431, + 1.404, 1.379, 1.354, 1.331, 1.308, 1.286, 1.265, 1.245, 1.225, 3.542e-05, 1.087, 1.016}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.074, + 2.062, 2.05, 2.038, 2.027, 2.016, 2.005, 1.994, 1.983, 1.973, 1.962, 1.952, 1.942, 1.932, 1.922, 1.912, 1.903, 1.893, + 1.884, 1.875, 1.852, 1.83, 1.809, 1.788, 1.767, 1.748, 1.728, 1.709, 1.691, 1.673, 1.639, 1.605, 1.574, 1.543, 1.514, + 1.486, 1.459, 1.434, 1.409, 1.384, 1.361, 1.339, 1.317, 1.296, 3.542e-05, 1.15, 1.075}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.185, 2.172, 2.16, 2.148, 2.136, 2.124, 2.112, 2.101, + 2.09, 2.079, 2.068, 2.057, 2.046, 2.036, 2.025, 2.015, 2.005, 1.995, 1.985, 1.961, 1.937, 1.915, 1.892, 1.871, 1.85, 1.829, 1.809, + 1.79, 1.771, 1.734, 1.699, 1.665, 1.633, 1.602, 1.572, 1.544, 1.516, 1.49, 1.464, 1.44, 1.416, 1.393, 1.371, 3.542e-05, 1.216, 1.137}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 2.301, 2.288, 2.275, 2.262, 2.249, 2.237, 2.225, 2.213, 2.201, 2.189, 2.177, 2.166, 2.155, 2.144, 2.133, 2.122, + 2.111, 2.101, 2.075, 2.05, 2.026, 2.002, 1.979, 1.957, 1.935, 1.914, 1.893, 1.873, 1.834, 1.796, 1.761, 1.727, 1.694, + 1.662, 1.632, 1.603, 1.575, 1.548, 1.522, 1.497, 1.473, 1.449, 3.542e-05, 1.286, 1.201}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 2.422, 2.408, 2.394, 2.381, 2.367, 2.354, 2.341, 2.329, 2.316, 2.304, 2.292, 2.28, 2.268, 2.256, 2.245, + 2.233, 2.222, 2.195, 2.168, 2.142, 2.117, 2.093, 2.069, 2.046, 2.023, 2.001, 1.98, 1.938, 1.899, 1.861, 1.825, 1.79, + 1.757, 1.725, 1.694, 1.664, 1.635, 1.608, 1.581, 1.556, 1.531, 3.542e-05, 1.358, 1.269}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 2.548, 2.533, 2.519, 2.505, 2.491, 2.477, 2.463, 2.45, 2.437, 2.424, 2.411, 2.398, 2.386, 2.373, + 2.361, 2.349, 2.32, 2.292, 2.264, 2.238, 2.212, 2.186, 2.162, 2.138, 2.114, 2.091, 2.048, 2.006, 1.965, 1.927, 1.89, + 1.855, 1.821, 1.789, 1.757, 1.727, 1.698, 1.67, 1.642, 1.616, 3.542e-05, 1.433, 1.339}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 2.679, 2.664, 2.648, 2.633, 2.619, 2.604, 2.59, 2.576, 2.562, 2.548, 2.535, 2.522, 2.508, + 2.495, 2.483, 2.452, 2.421, 2.392, 2.364, 2.336, 2.309, 2.283, 2.258, 2.233, 2.209, 2.162, 2.117, 2.075, 2.034, 1.995, + 1.958, 1.922, 1.888, 1.854, 1.822, 1.792, 1.762, 1.733, 1.705, 3.542e-05, 1.512, 1.413}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 2.816, 2.8, 2.783, 2.768, 2.752, 2.737, 2.722, 2.707, 2.692, 2.678, 2.664, 2.65, + 2.636, 2.622, 2.589, 2.557, 2.526, 2.496, 2.466, 2.438, 2.41, 2.383, 2.357, 2.331, 2.282, 2.234, 2.189, 2.146, 2.105, + 2.066, 2.028, 1.991, 1.956, 1.922, 1.89, 1.858, 1.828, 1.799, 3.542e-05, 1.595, 1.490}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.958, 2.941, 2.924, 2.907, 2.891, 2.875, 2.859, 2.843, 2.828, 2.813, 2.798, + 2.783, 2.769, 2.733, 2.699, 2.666, 2.634, 2.603, 2.572, 2.543, 2.514, 2.486, 2.459, 2.407, 2.357, 2.309, 2.263, 2.22, + 2.178, 2.138, 2.099, 2.062, 2.026, 1.992, 1.959, 1.927, 1.896, 3.542e-05, 1.681, 1.570}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3.106, 3.088, 3.07, 3.052, 3.035, 3.018, 3.001, 2.985, 2.969, 2.953, + 2.937, 2.922, 2.884, 2.848, 2.812, 2.778, 2.745, 2.713, 2.682, 2.651, 2.622, 2.593, 2.537, 2.484, 2.434, 2.386, 2.34, + 2.295, 2.253, 2.212, 2.173, 2.135, 2.099, 2.064, 2.03, 1.997, 3.542e-05, 1.77, 1.654}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3.26, 3.24, 3.222, 3.203, 3.185, 3.167, 3.15, 3.132, 3.115, + 3.099, 3.082, 3.042, 3.003, 2.966, 2.929, 2.894, 2.86, 2.827, 2.794, 2.763, 2.732, 2.674, 2.618, 2.564, 2.513, 2.465, + 2.418, 2.373, 2.33, 2.289, 2.249, 2.21, 2.173, 2.138, 2.103, 3.542e-05, 1.864, 1.741}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 3.419, 3.399, 3.379, 3.36, 3.341, 3.322, 3.304, 3.286, 3.268, 3.25, 3.207, 3.166, 3.126, 3.087, 3.05, 3.014, 2.978, 2.944, + 2.911, 2.878, 2.816, 2.757, 2.7, 2.646, 2.595, 2.546, 2.498, 2.453, 2.409, 2.367, 2.326, 2.287, 2.25, 2.213, 3.542e-05, 1.961, 1.832}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 3.585, 3.564, 3.543, 3.523, 3.503, 3.483, 3.464, 3.445, 3.426, 3.38, 3.336, 3.294, 3.253, 3.213, 3.174, 3.137, 3.1, + 3.065, 3.031, 2.965, 2.902, 2.842, 2.785, 2.731, 2.679, 2.629, 2.581, 2.535, 2.49, 2.448, 2.406, 2.367, 2.328, 3.542e-05, 2.063, 1.926}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 3.758, 3.735, 3.713, 3.692, 3.671, 3.65, 3.63, 3.61, 3.561, 3.514, 3.469, 3.425, 3.383, 3.342, 3.302, 3.264, + 3.226, 3.19, 3.12, 3.054, 2.99, 2.93, 2.873, 2.818, 2.765, 2.714, 2.665, 2.619, 2.574, 2.53, 2.488, 2.448, 3.542e-05, 2.168, 2.025}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 3.937, 3.913, 3.89, 3.867, 3.845, 3.823, 3.802, 3.75, 3.7, 3.652, 3.605, 3.561, 3.517, 3.475, 3.434, + 3.394, 3.356, 3.282, 3.212, 3.145, 3.081, 3.02, 2.962, 2.907, 2.853, 2.802, 2.752, 2.705, 2.659, 2.615, 2.573, 3.542e-05, 2.278, 2.127}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 4.122, 4.097, 4.073, 4.049, 4.026, 4.003, 3.948, 3.895, 3.843, 3.794, 3.746, 3.7, 3.655, 3.612, + 3.57, 3.529, 3.451, 3.376, 3.306, 3.238, 3.174, 3.113, 3.054, 2.998, 2.944, 2.892, 2.842, 2.794, 2.747, 2.702, 3.542e-05, 2.392, 2.234}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 4.315, 4.289, 4.263, + 4.238, 4.214, 4.155, 4.098, 4.043, 3.991, 3.94, 3.891, 3.843, 3.797, 3.753, 3.709, 3.627, 3.548, 3.473, 3.402, 3.335, + 3.27, 3.208, 3.148, 3.091, 3.037, 2.984, 2.933, 2.884, 2.837, 3.542e-05, 2.511, 2.344}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 4.515, 4.487, 4.46, 4.434, 4.371, 4.31, 4.252, 4.196, 4.142, 4.09, 4.04, 3.991, + 3.944, 3.898, 3.81, 3.727, 3.648, 3.573, 3.501, 3.433, 3.368, 3.305, 3.245, 3.187, 3.132, 3.079, 3.027, 2.977, 3.542e-05, 2.635, 2.459}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 4.722, 4.693, 4.665, 4.597, 4.532, 4.47, 4.411, 4.353, 4.298, 4.244, 4.193, + 4.143, 4.094, 4.001, 3.913, 3.83, 3.751, 3.675, 3.603, 3.534, 3.468, 3.405, 3.344, 3.286, 3.23, 3.176, 3.123, 3.542e-05, 2.763, 2.579}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 4.936, 4.906, 4.833, 4.764, 4.698, 4.635, 4.574, 4.515, 4.458, 4.403, + 4.35, 4.298, 4.2, 4.107, 4.019, 3.935, 3.856, 3.78, 3.707, 3.638, 3.571, 3.507, 3.446, 3.387, 3.33, 3.275, 3.542e-05, 2.896, 2.703}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 5.159, 5.081, 5.007, 4.936, 4.868, 4.803, 4.741, 4.681, 4.622, 4.566, 4.512, 4.407, 4.309, 4.216, 4.128, 4.044, + 3.964, 3.887, 3.814, 3.744, 3.677, 3.612, 3.55, 3.49, 3.432, 3.542e-05, 3.035, 2.832}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 5.75, 5.662, 5.579, 5.499, 5.423, 5.35, 5.28, 5.212, + 5.147, 5.084, 4.964, 4.851, 4.744, 4.643, 4.547, 4.456, 4.369, 4.286, 4.206, 4.13, 4.056, 3.986, 3.918, 3.853, 3.542e-05, 3.404, 3.176}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 6.395, 6.296, 6.202, 6.112, 6.027, 5.945, 5.866, + 5.79, 5.717, 5.579, 5.449, 5.327, 5.211, 5.102, 4.998, 4.898, 4.804, 4.714, 4.627, 4.544, 4.464, 4.388, 4.314, 3.542e-05, 3.808, 3.552}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 7.098, 6.985, 6.879, 6.779, 6.683, 6.591, + 6.503, 6.418, 6.258, 6.108, 5.968, 5.836, 5.711, 5.593, 5.48, 5.373, 5.27, 5.172, 5.078, 4.988, 4.902, 4.819, 3.542e-05, 4.25, 3.962}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 7.861, 7.734, 7.615, 7.502, 7.395, + 7.292, 7.193, 7.008, 6.835, 6.674, 6.523, 6.38, 6.245, 6.118, 5.996, 5.88, 5.769, 5.663, 5.561, 5.464, 5.37, 3.542e-05, 4.732, 4.410}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 8.69, 8.547, 8.413, 8.286, 8.166, 8.051, 7.835, 7.636, 7.451, 7.278, 7.115, + 6.961, 6.816, 6.678, 6.547, 6.421, 6.302, 6.187, 6.078, 5.972, 3.542e-05, 5.257, 4.897}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 9.588, 9.428, 9.277, + 9.135, 9.0, 8.749, 8.519, 8.305, 8.106, 7.92, 7.745, 7.58, 7.423, 7.275, 7.133, 6.998, 6.87, 6.746, 6.628, 3.542e-05, 5.827, 5.425}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 10.56, 10.38, + 10.21, 10.05, 9.759, 9.491, 9.244, 9.016, 8.803, 8.603, 8.415, 8.238, 8.069, 7.91, 7.758, 7.613, 7.474, 7.341, 3.542e-05, 6.445, 5.998}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 11.62, 11.41, 11.22, 10.88, 10.56, 10.28, 10.01, 9.769, + 9.541, 9.328, 9.126, 8.936, 8.756, 8.584, 8.421, 8.265, 8.116, 3.542e-05, 7.115, 6.618}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 12.75, 12.53, 12.11, 11.75, 11.41, 11.11, 10.83, 10.57, 10.32, 10.1, 9.88, 9.676, 9.483, 9.299, 9.124, 8.957, 3.542e-05, 7.84, 7.288}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 13.99, 13.49, 13.05, 12.67, 12.31, 11.99, 11.69, 11.41, 11.15, 10.91, 10.68, 10.46, 10.25, 10.06, 9.869, 3.542e-05, 8.623, 8.011}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 16.75, 16.12, 15.58, 15.1, 14.66, 14.26, 13.9, 13.56, 13.25, 12.95, 12.67, 12.41, 12.16, 11.93, 3.542e-05, 10.38, 9.628}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 19.97, 19.17, 18.49, 17.89, 17.36, 16.87, 16.43, 16.02, 15.64, 15.28, 14.95, 14.63, 14.34, 3.542e-05, 12.42, 11.5}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 23.71, 22.7, 21.85, 21.1, 20.45, 19.85, 19.31, 18.81, 18.35, 17.93, 17.53, 17.15, 3.542e-05, 14.77, 13.65}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 28.07, 26.78, 25.71, 24.79, 23.97, 23.25, 22.59, 21.99, 21.44, 20.93, 20.45, 3.542e-05, 17.48, 16.12}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 33.16, 31.5, 30.15, 29.0, 28.0, 27.11, 26.31, 25.59, 24.92, 24.31, 3.542e-05, 20.6, 18.94}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 39.13, 36.97, 35.25, 33.82, 32.58, 31.5, 30.53, 29.65, 28.86, 3.542e-05, 24.19, 22.16}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 46.17, 43.33, 41.13, 39.33, 37.8, 36.47, 35.29, 34.24, 3.542e-05, 28.31, 25.84}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 54.54, 50.75, 47.92, 45.65, 43.75, 42.11, 40.68, 3.542e-05, 33.07, 30.03}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 64.64, 59.47, 55.78, 52.9, 50.53, 48.51, 3.542e-05, 38.55, 34.81}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 77.05, 69.8, 64.93, 61.24, 58.27, 3.542e-05, 44.92, 40.28}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 92.76, 82.18, 75.63, 70.87, 3.542e-05, 52.35, 46.54}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 113.6, 97.22, 88.27, 3.542e-05, 61.12, 53.76}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 143.9, 115.8, 3.542e-05, 71.6, 62.15}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 201.8, 3.542e-05, 84.38, 71.99}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3.542e-05, 148.4, 115.1}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3.542e-05, 201.7, 144.2}, + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3.542e-05, 270.9, 177.8}}}; #endif // UNUSED_FLUID_PROPS -} // namespace Fluid +} // namespace FluidProperties } // namespace EnergyPlus diff --git a/src/EnergyPlus/FluidProperties.hh b/src/EnergyPlus/FluidProperties.hh index c3a42ac9e40..8beb5eb006f 100644 --- a/src/EnergyPlus/FluidProperties.hh +++ b/src/EnergyPlus/FluidProperties.hh @@ -70,7 +70,7 @@ struct EnergyPlusData; namespace FluidProperties { #undef PERFORMANCE_OPT - + #ifdef EP_cache_GlycolSpecificHeat int constexpr t_sh_cache_size = 1024 * 1024; int constexpr t_sh_precision_bits = 24; @@ -94,141 +94,141 @@ namespace FluidProperties { SatSupDensityPress, Num }; - + struct RefrigProps { // Members - std::string Name; // Name of the refrigerant + std::string Name; // Name of the refrigerant int Num = 0; bool used = false; - std::string satTempArrayName; // Array of saturated temperature points, must be same for all properties - std::string supTempArrayName; // Array of superheated temperature points, must be same for all properties - - int NumPsPoints = 0; // Number of saturation pressure - Real64 PsLowTempValue = 0.0; // Low Temperature Value for Ps (>0.0) - Real64 PsHighTempValue = 0.0; // High Temperature Value for Ps (max in tables) - int PsLowTempIndex = 0; // Low Temperature Min Index for Ps (>0.0) - int PsHighTempIndex = 0; // High Temperature Max Index for Ps (>0.0) - Real64 PsLowPresValue = 0.0; // Low Pressure Value for Ps (>0.0) - Real64 PsHighPresValue = 0.0; // High Pressure Value for Ps (max in tables) - int PsLowPresIndex = 0; // Low Pressure Min Index for Ps (>0.0) - int PsHighPresIndex = 0; // High Pressure Max Index for Ps (>0.0) - Array1D PsTemps; // Temperatures for saturation pressures - Array1D PsValues; // Saturation pressures at PsTemps -#ifdef PERFORMANCE_OPT + std::string satTempArrayName; // Array of saturated temperature points, must be same for all properties + std::string supTempArrayName; // Array of superheated temperature points, must be same for all properties + + int NumPsPoints = 0; // Number of saturation pressure + Real64 PsLowTempValue = 0.0; // Low Temperature Value for Ps (>0.0) + Real64 PsHighTempValue = 0.0; // High Temperature Value for Ps (max in tables) + int PsLowTempIndex = 0; // Low Temperature Min Index for Ps (>0.0) + int PsHighTempIndex = 0; // High Temperature Max Index for Ps (>0.0) + Real64 PsLowPresValue = 0.0; // Low Pressure Value for Ps (>0.0) + Real64 PsHighPresValue = 0.0; // High Pressure Value for Ps (max in tables) + int PsLowPresIndex = 0; // Low Pressure Min Index for Ps (>0.0) + int PsHighPresIndex = 0; // High Pressure Max Index for Ps (>0.0) + Array1D PsTemps; // Temperatures for saturation pressures + Array1D PsValues; // Saturation pressures at PsTemps +#ifdef PERFORMANCE_OPT Array1D PsTempRatios; // PsTempRatios(i) = (PsValues(i+1) - PsValues(i)) / (PsTemps(i+1) - PsTemps(i)). Speed optimization. -#endif // PERFORMANCE_OPT - - int NumHPoints = 0; // Number of enthalpy points - Real64 HfLowTempValue = 0.0; // Low Temperature Value for Hf (>0.0) - Real64 HfHighTempValue = 0.0; // High Temperature Value for Hf (max in tables) - int HfLowTempIndex = 0; // Low Temperature Min Index for Hf (>0.0) - int HfHighTempIndex = 0; // High Temperature Max Index for Hf (>0.0) - Real64 HfgLowTempValue = 0.0; // Low Temperature Value for Hfg (>0.0) - Real64 HfgHighTempValue = 0.0; // High Temperature Value for Hfg (max in tables) - int HfgLowTempIndex = 0; // Low Temperature Min Index for Hfg (>0.0) - int HfgHighTempIndex = 0; // High Temperature Max Index for Hfg (>0.0) - Array1D HTemps; // Temperatures for enthalpy points - Array1D HfValues; // Enthalpy of saturated fluid at HTemps - Array1D HfgValues; // Enthalpy of saturated fluid/gas at HTemps -#ifdef PERFORMANCE_OPT +#endif // PERFORMANCE_OPT + + int NumHPoints = 0; // Number of enthalpy points + Real64 HfLowTempValue = 0.0; // Low Temperature Value for Hf (>0.0) + Real64 HfHighTempValue = 0.0; // High Temperature Value for Hf (max in tables) + int HfLowTempIndex = 0; // Low Temperature Min Index for Hf (>0.0) + int HfHighTempIndex = 0; // High Temperature Max Index for Hf (>0.0) + Real64 HfgLowTempValue = 0.0; // Low Temperature Value for Hfg (>0.0) + Real64 HfgHighTempValue = 0.0; // High Temperature Value for Hfg (max in tables) + int HfgLowTempIndex = 0; // Low Temperature Min Index for Hfg (>0.0) + int HfgHighTempIndex = 0; // High Temperature Max Index for Hfg (>0.0) + Array1D HTemps; // Temperatures for enthalpy points + Array1D HfValues; // Enthalpy of saturated fluid at HTemps + Array1D HfgValues; // Enthalpy of saturated fluid/gas at HTemps +#ifdef PERFORMANCE_OPT Array1D HfTempRatios; Array1D HfgTempRatios; -#endif // PERFORMANCE_OPT - - int NumCpPoints = 0; // Number of specific heat of fluid points - Real64 CpfLowTempValue = 0.0; // Low Temperature Value for Cpf (>0.0) - Real64 CpfHighTempValue = 0.0; // High Temperature Value for Cpf (max in tables) - int CpfLowTempIndex = 0; // Low Temperature Min Index for Cpf (>0.0) - int CpfHighTempIndex = 0; // High Temperature Max Index for Cpf (>0.0) - Real64 CpfgLowTempValue = 0.0; // Low Temperature Value for Cpfg (>0.0) - Real64 CpfgHighTempValue = 0.0; // High Temperature Value for Cpfg (max in tables) - int CpfgLowTempIndex = 0; // Low Temperature Min Index for Cpfg (>0.0) - int CpfgHighTempIndex = 0; // High Temperature Max Index for Cpfg (>0.0) - Array1D CpTemps; // Temperatures for specific heat points - Array1D CpfValues; // Specific heat of saturated fluid at CpTemps - Array1D CpfgValues; // Specific heat of saturated fluid/gas at CpTemps -#ifdef PERFORMANCE_OPT +#endif // PERFORMANCE_OPT + + int NumCpPoints = 0; // Number of specific heat of fluid points + Real64 CpfLowTempValue = 0.0; // Low Temperature Value for Cpf (>0.0) + Real64 CpfHighTempValue = 0.0; // High Temperature Value for Cpf (max in tables) + int CpfLowTempIndex = 0; // Low Temperature Min Index for Cpf (>0.0) + int CpfHighTempIndex = 0; // High Temperature Max Index for Cpf (>0.0) + Real64 CpfgLowTempValue = 0.0; // Low Temperature Value for Cpfg (>0.0) + Real64 CpfgHighTempValue = 0.0; // High Temperature Value for Cpfg (max in tables) + int CpfgLowTempIndex = 0; // Low Temperature Min Index for Cpfg (>0.0) + int CpfgHighTempIndex = 0; // High Temperature Max Index for Cpfg (>0.0) + Array1D CpTemps; // Temperatures for specific heat points + Array1D CpfValues; // Specific heat of saturated fluid at CpTemps + Array1D CpfgValues; // Specific heat of saturated fluid/gas at CpTemps +#ifdef PERFORMANCE_OPT Array1D CpfTempRatios; Array1D CpfgTempRatios; -#endif // PERFORMANCE_OPT - +#endif // PERFORMANCE_OPT + int NumRhoPoints = 0; // Number of density of fluid points - Real64 RhofLowTempValue = 0.0; // Low Temperature Value for Rhof (>0.0) - Real64 RhofHighTempValue = 0.0; // High Temperature Value for Rhof (max in tables) + Real64 RhofLowTempValue = 0.0; // Low Temperature Value for Rhof (>0.0) + Real64 RhofHighTempValue = 0.0; // High Temperature Value for Rhof (max in tables) int RhofLowTempIndex = 0; // Low Temperature Min Index for Rhof (>0.0) int RhofHighTempIndex = 0; // High Temperature Max Index for Rhof (>0.0) - Real64 RhofgLowTempValue = 0.0; // Low Temperature Value for Rhofg (>0.0) - Real64 RhofgHighTempValue = 0.0; // High Temperature Value for Rhofg (max in tables) + Real64 RhofgLowTempValue = 0.0; // Low Temperature Value for Rhofg (>0.0) + Real64 RhofgHighTempValue = 0.0; // High Temperature Value for Rhofg (max in tables) int RhofgLowTempIndex = 0; // Low Temperature Min Index for Rhofg (>0.0) int RhofgHighTempIndex = 0; // High Temperature Max Index for Rhofg (>0.0) - Array1D RhoTemps; // Temperatures for density of fluid points - Array1D RhofValues; // Density of saturated fluid at RhoTemps - Array1D RhofgValues; // Density of saturated fluid/gas at RhoTemps -#ifdef PERFORMANCE_OPT + Array1D RhoTemps; // Temperatures for density of fluid points + Array1D RhofValues; // Density of saturated fluid at RhoTemps + Array1D RhofgValues; // Density of saturated fluid/gas at RhoTemps +#ifdef PERFORMANCE_OPT Array1D RhofTempRatios; Array1D RhofgTempRatios; -#endif // PERFORMANCE_OPT - - int NumSupTempPoints = 0; // Number of temperature points for superheated enthalpy - int NumSupPressPoints = 0; // Number of pressure points for superheated enthalpy - Array1D SupTemps; // Temperatures for superheated gas - Array1D SupPress; // Pressures for superheated gas +#endif // PERFORMANCE_OPT + + int NumSupTempPoints = 0; // Number of temperature points for superheated enthalpy + int NumSupPressPoints = 0; // Number of pressure points for superheated enthalpy + Array1D SupTemps; // Temperatures for superheated gas + Array1D SupPress; // Pressures for superheated gas Array2D HshValues; // Enthalpy of superheated gas at HshTemps, HshPress Array2D RhoshValues; // Density of superheated gas at HshTemps, HshPress std::array errors; Real64 getQuality(EnergyPlusData &state, - Real64 Temperature, // actual temperature given as input - Real64 Enthalpy, // actual enthalpy given as input - std::string_view CalledFrom); // routine this function was called from (error messages) + Real64 Temperature, // actual temperature given as input + Real64 Enthalpy, // actual enthalpy given as input + std::string_view CalledFrom); // routine this function was called from (error messages) Real64 getSatPressure(EnergyPlusData &state, Real64 Temperature, // actual temperature given as input - std::string_view CalledFrom); // routine this function was called from (error messages) + std::string_view CalledFrom); // routine this function was called from (error messages) Real64 getSatTemperature(EnergyPlusData &state, Real64 Pressure, // actual temperature given as input - std::string_view CalledFrom); // routine this function was called from (error messages) + std::string_view CalledFrom); // routine this function was called from (error messages) Real64 getSatEnthalpy(EnergyPlusData &state, Real64 Temperature, // actual temperature given as input Real64 Quality, // actual quality given as input - std::string_view CalledFrom); // routine this function was called from (error messages) + std::string_view CalledFrom); // routine this function was called from (error messages) Real64 getSatDensity(EnergyPlusData &state, Real64 Temperature, // actual temperature given as input Real64 Quality, // actual quality given as input - std::string_view CalledFrom); // routine this function was called from (error messages) + std::string_view CalledFrom); // routine this function was called from (error messages) Real64 getSatSpecificHeat(EnergyPlusData &state, Real64 Temperature, // actual temperature given as input Real64 Quality, // actual quality given as input - std::string_view CalledFrom); // routine this function was called from (error messages) + std::string_view CalledFrom); // routine this function was called from (error messages) Real64 getSupHeatEnthalpy(EnergyPlusData &state, Real64 Temperature, // actual temperature given as input Real64 Pressure, // actual pressure given as input - std::string_view CalledFrom); // routine this function was called from (error messages) + std::string_view CalledFrom); // routine this function was called from (error messages) Real64 getSupHeatPressure(EnergyPlusData &state, Real64 Temperature, // actual temperature given as input Real64 Enthalpy, // actual enthalpy given as input - std::string_view CalledFrom); // routine this function was called from (error messages) + std::string_view CalledFrom); // routine this function was called from (error messages) Real64 getSupHeatTemp(EnergyPlusData &state, Real64 Pressure, // actual pressure given as input Real64 Enthalpy, // actual enthalpy given as input Real64 TempLow, // lower bound of temperature in the iteration Real64 TempUp, // upper bound of temperature in the iteration - std::string_view CalledFrom); // routine this function was called from (error messages) - + std::string_view CalledFrom); // routine this function was called from (error messages) + Real64 getSupHeatDensity(EnergyPlusData &state, Real64 Temperature, // actual temperature given as input Real64 Pressure, // actual pressure given as input - std::string_view CalledFrom); // routine this function was called from (error messages) + std::string_view CalledFrom); // routine this function was called from (error messages) }; enum class GlycolError @@ -244,133 +244,133 @@ namespace FluidProperties { ViscosityHigh, Num }; - + struct GlycolRawProps { // Members - std::string Name; // Name of the glycol + std::string Name; // Name of the glycol int Num = 0; std::string CpTempArrayName; - bool CpDataPresent = false; // Flag set when specific heat data is available - int NumCpTempPoints = 0; // Number of temperature points for specific heat - int NumCpConcPoints = 0; // Number of concentration points for specific heat + bool CpDataPresent = false; // Flag set when specific heat data is available + int NumCpTempPoints = 0; // Number of temperature points for specific heat + int NumCpConcPoints = 0; // Number of concentration points for specific heat Array1D CpTemps; // Temperatures for specific heat of glycol Array1D CpConcs; // Concentration for specific heat of glycol Array2D CpValues; // Specific heat data values std::string RhoTempArrayName; - bool RhoDataPresent = false; // Flag set when density data is available - int NumRhoTempPoints = 0; // Number of temperature points for density - int NumRhoConcPoints = 0; // Number of concentration points for density - Array1D RhoTemps; // Temperatures for density of glycol - Array1D RhoConcs; // Concentration for density of glycol - Array2D RhoValues; // Density data values + bool RhoDataPresent = false; // Flag set when density data is available + int NumRhoTempPoints = 0; // Number of temperature points for density + int NumRhoConcPoints = 0; // Number of concentration points for density + Array1D RhoTemps; // Temperatures for density of glycol + Array1D RhoConcs; // Concentration for density of glycol + Array2D RhoValues; // Density data values std::string CondTempArrayName; - bool CondDataPresent = false; // Flag set when conductivity data is available - int NumCondTempPoints = 0; // Number of temperature points for conductivity - int NumCondConcPoints = 0; // Number of concentration points for conductivity - Array1D CondTemps; // Temperatures for conductivity of glycol - Array1D CondConcs; // Concentration for conductivity of glycol - Array2D CondValues; // conductivity values + bool CondDataPresent = false; // Flag set when conductivity data is available + int NumCondTempPoints = 0; // Number of temperature points for conductivity + int NumCondConcPoints = 0; // Number of concentration points for conductivity + Array1D CondTemps; // Temperatures for conductivity of glycol + Array1D CondConcs; // Concentration for conductivity of glycol + Array2D CondValues; // conductivity values std::string ViscTempArrayName; - bool ViscDataPresent = false; // Flag set when viscosity data is available - int NumViscTempPoints = 0; // Number of temperature points for viscosity - int NumViscConcPoints = 0; // Number of concentration points for viscosity - Array1D ViscTemps; // Temperatures for viscosity of glycol - Array1D ViscConcs; // Concentration for viscosity of glycol - Array2D ViscValues; // viscosity values + bool ViscDataPresent = false; // Flag set when viscosity data is available + int NumViscTempPoints = 0; // Number of temperature points for viscosity + int NumViscConcPoints = 0; // Number of concentration points for viscosity + Array1D ViscTemps; // Temperatures for viscosity of glycol + Array1D ViscConcs; // Concentration for viscosity of glycol + Array2D ViscValues; // viscosity values }; - struct GlycolProps + struct GlycolProps { // Members - std::string Name; // Name of the glycol mixture (used by other parts of code) + std::string Name; // Name of the glycol mixture (used by other parts of code) int Num = 0; bool used = false; - + std::string GlycolName; // Name of non-water fluid that is part of this mixture // (refers to ethylene glycol, propylene glycol, or user fluid) int BaseGlycolIndex = 0; // Index in user defined glycol data (>0 = index in raw data, // -1=propylene glycol, -2=ethylene glycol) - Real64 Concentration = 0.0; // Concentration (if applicable) - - bool CpDataPresent = false; // Flag set when specific heat data is available - Real64 CpLowTempValue = 0.0; // Low Temperature Value for Cp (>0.0) - Real64 CpHighTempValue = 0.0; // High Temperature Value for Cp (max in tables) - int CpLowTempIndex = 0; // Low Temperature Min Index for Cp (>0.0) - int CpHighTempIndex = 0; // High Temperature Max Index for Cp (>0.0) - int NumCpTempPoints = 0; // Number of temperature points for specific heat - Array1D CpTemps; // Temperatures for specific heat of glycol - Array1D CpValues; // Specific heat data values (J/kg-K) + Real64 Concentration = 0.0; // Concentration (if applicable) + + bool CpDataPresent = false; // Flag set when specific heat data is available + Real64 CpLowTempValue = 0.0; // Low Temperature Value for Cp (>0.0) + Real64 CpHighTempValue = 0.0; // High Temperature Value for Cp (max in tables) + int CpLowTempIndex = 0; // Low Temperature Min Index for Cp (>0.0) + int CpHighTempIndex = 0; // High Temperature Max Index for Cp (>0.0) + int NumCpTempPoints = 0; // Number of temperature points for specific heat + Array1D CpTemps; // Temperatures for specific heat of glycol + Array1D CpValues; // Specific heat data values (J/kg-K) #ifdef PERFORMANCE_OPT int LoCpTempIdxLast = 1; Array1D CpTempRatios; // Speed optimization -#endif // PERFORMANCE_OPT - - bool RhoDataPresent = false; // Flag set when density data is available - int NumRhoTempPoints = 0.0; // Number of temperature points for density - Real64 RhoLowTempValue = 0.0; // Low Temperature Value for Rho (>0.0) - Real64 RhoHighTempValue = 0.0; // High Temperature Value for Rho (max in tables) - int RhoLowTempIndex = 0; // Low Temperature Min Index for Rho (>0.0) - int RhoHighTempIndex = 0; // High Temperature Max Index for Rho (>0.0) - Array1D RhoTemps; // Temperatures for density of glycol - Array1D RhoValues; // Density data values (kg/m3) +#endif // PERFORMANCE_OPT + + bool RhoDataPresent = false; // Flag set when density data is available + int NumRhoTempPoints = 0.0; // Number of temperature points for density + Real64 RhoLowTempValue = 0.0; // Low Temperature Value for Rho (>0.0) + Real64 RhoHighTempValue = 0.0; // High Temperature Value for Rho (max in tables) + int RhoLowTempIndex = 0; // Low Temperature Min Index for Rho (>0.0) + int RhoHighTempIndex = 0; // High Temperature Max Index for Rho (>0.0) + Array1D RhoTemps; // Temperatures for density of glycol + Array1D RhoValues; // Density data values (kg/m3) #ifdef PERFORMANCE_OPT int LoRhoTempIdxLast = 1; Array1D RhoTempRatios; // Speed optimization -#endif // PERFORMANCE_OPT - - bool CondDataPresent = false; // Flag set when conductivity data is available - int NumCondTempPoints = 0; // Number of temperature points for conductivity - Real64 CondLowTempValue = 0.0; // Low Temperature Value for Cond (>0.0) - Real64 CondHighTempValue = 0.0; // High Temperature Value for Cond (max in tables) +#endif // PERFORMANCE_OPT + + bool CondDataPresent = false; // Flag set when conductivity data is available + int NumCondTempPoints = 0; // Number of temperature points for conductivity + Real64 CondLowTempValue = 0.0; // Low Temperature Value for Cond (>0.0) + Real64 CondHighTempValue = 0.0; // High Temperature Value for Cond (max in tables) int CondLowTempIndex = 0; // Low Temperature Min Index for Cond (>0.0) int CondHighTempIndex = 0; // High Temperature Max Index for Cond (>0.0) - Array1D CondTemps; // Temperatures for conductivity of glycol - Array1D CondValues; // conductivity values (W/m-K) + Array1D CondTemps; // Temperatures for conductivity of glycol + Array1D CondValues; // conductivity values (W/m-K) #ifdef PERFORMANCE_OPT int LoCondTempIdxLast = 1; Array1D CondTempRatios; // Speed optimization -#endif // PERFORMANCE_OPT - - bool ViscDataPresent = false; // Flag set when viscosity data is available - int NumViscTempPoints = 0; // Number of temperature points for viscosity - Real64 ViscLowTempValue = 0.0; // Low Temperature Value for Visc (>0.0) - Real64 ViscHighTempValue = 0.0; // High Temperature Value for Visc (max in tables) +#endif // PERFORMANCE_OPT + + bool ViscDataPresent = false; // Flag set when viscosity data is available + int NumViscTempPoints = 0; // Number of temperature points for viscosity + Real64 ViscLowTempValue = 0.0; // Low Temperature Value for Visc (>0.0) + Real64 ViscHighTempValue = 0.0; // High Temperature Value for Visc (max in tables) int ViscLowTempIndex = 0; // Low Temperature Min Index for Visc (>0.0) int ViscHighTempIndex = 0; // High Temperature Max Index for Visc (>0.0) - Array1D ViscTemps; // Temperatures for viscosity of glycol - Array1D ViscValues; // viscosity values (mPa-s) + Array1D ViscTemps; // Temperatures for viscosity of glycol + Array1D ViscValues; // viscosity values (mPa-s) #ifdef PERFORMANCE_OPT int LoViscTempIdxLast = 1; Array1D ViscTempRatios; -#endif // PERFORMANCE_OPT - +#endif // PERFORMANCE_OPT + std::array errors; #ifdef EP_cache_GlycolSpecificHeat Real64 getSpecificHeat_raw(EnergyPlusData &state, Real64 Temperature, // actual temperature given as input std::string_view CalledFrom // routine this function was called from (error messages) - ); + ); #endif Real64 getSpecificHeat(EnergyPlusData &state, - Real64 Temperature, // actual temperature given as input + Real64 Temperature, // actual temperature given as input std::string_view CalledFrom); // routine this function was called from (error messages) Real64 getDensity(EnergyPlusData &state, - Real64 Temperature, // actual temperature given as input + Real64 Temperature, // actual temperature given as input std::string_view CalledFrom); // routine this function was called from (error messages) Real64 getConductivity(EnergyPlusData &state, - Real64 Temperature, // actual temperature given as input + Real64 Temperature, // actual temperature given as input std::string_view CalledFrom); // routine this function was called from (error messages) Real64 getViscosity(EnergyPlusData &state, - Real64 Temperature, // actual temperature given as input + Real64 Temperature, // actual temperature given as input std::string_view CalledFrom); // routine this function was called from (error messages) }; @@ -532,15 +532,15 @@ namespace FluidProperties { return Xhi - (((Thi - Tact) / (Thi - Tlo)) * (Xhi - Xlo)); } - int GetRefrigNum(EnergyPlusData &state, std::string_view name); + int GetRefrigNum(EnergyPlusData &state, std::string_view name); RefrigProps *GetRefrig(EnergyPlusData &state, std::string_view name); - - int GetGlycolRawNum(EnergyPlusData &state, std::string_view name); - GlycolRawProps *GetGlycolRaw(EnergyPlusData &state, std::string_view name); - int GetGlycolNum(EnergyPlusData &state, std::string_view name); - GlycolProps *GetGlycol(EnergyPlusData &state, std::string_view name); - + int GetGlycolRawNum(EnergyPlusData &state, std::string_view name); + GlycolRawProps *GetGlycolRaw(EnergyPlusData &state, std::string_view name); + + int GetGlycolNum(EnergyPlusData &state, std::string_view name); + GlycolProps *GetGlycol(EnergyPlusData &state, std::string_view name); + std::string GetGlycolNameByIndex(EnergyPlusData &state, int Idx); // carries in substance index int FindArrayIndex(Real64 Value, // Value to be placed/found within the array of values @@ -565,7 +565,7 @@ namespace FluidProperties { ); bool CheckFluidPropertyName(EnergyPlusData &state, - std::string const &NameToCheck); // Name from input(?) to be checked against valid FluidPropertyNames + std::string const &NameToCheck); // Name from input(?) to be checked against valid FluidPropertyNames void ReportOrphanFluids(EnergyPlusData &state); @@ -603,21 +603,21 @@ namespace FluidProperties { Real64 superHeatedDensity(EnergyPlusData &state, Real64 temperature, Real64 pressure); }; -} // namespace Fluid +} // namespace FluidProperties struct FluidData : BaseGlobalStruct { bool DebugReportGlycols = false; bool DebugReportRefrigerants = false; - int GlycolErrorLimitTest = 1; // how many times error is printed with details before recurring called + int GlycolErrorLimitTest = 1; // how many times error is printed with details before recurring called int RefrigErrorLimitTest = 1; // how many times error is printed with details before recurring called - Array1D refrigs; - Array1D glycolsRaw; - Array1D glycols; + Array1D refrigs; + Array1D glycolsRaw; + Array1D glycols; std::array glycolErrorLimits = {0, 0, 0, 0, 0, 0, 0, 0}; - + int SatErrCountGetSupHeatEnthalpyRefrig = 0; int SatErrCountGetSupHeatDensityRefrig = 0; int TempLoRangeErrIndexGetQualityRefrig = 0; @@ -637,10 +637,13 @@ struct FluidData : BaseGlobalStruct void clear_state() override { - for (int i = 1; i <= refrigs.isize(); ++i) delete refrigs(i); - for (int i = 1; i <= glycolsRaw.isize(); ++i) delete glycolsRaw(i); - for (int i = 1; i <= glycols.isize(); ++i) delete glycols(i); - + for (int i = 1; i <= refrigs.isize(); ++i) + delete refrigs(i); + for (int i = 1; i <= glycolsRaw.isize(); ++i) + delete glycolsRaw(i); + for (int i = 1; i <= glycols.isize(); ++i) + delete glycols(i); + new (this) FluidData(); } }; diff --git a/src/EnergyPlus/HVACVariableRefrigerantFlow.cc b/src/EnergyPlus/HVACVariableRefrigerantFlow.cc index 50b61cac8c2..7d70ed831e6 100644 --- a/src/EnergyPlus/HVACVariableRefrigerantFlow.cc +++ b/src/EnergyPlus/HVACVariableRefrigerantFlow.cc @@ -1268,10 +1268,10 @@ void CalcVRFCondenser(EnergyPlusData &state, int const VRFCond) vrf.WaterCondenserMassFlow = state.dataLoopNodes->Node(vrf.CondenserNodeNum).MassFlowRate; CpCond = FluidProperties::GetSpecificHeatGlycol(state, - state.dataPlnt->PlantLoop(vrf.SourcePlantLoc.loopNum).FluidName, - vrf.CondenserInletTemp, - state.dataPlnt->PlantLoop(vrf.SourcePlantLoc.loopNum).FluidIndex, - RoutineName); + state.dataPlnt->PlantLoop(vrf.SourcePlantLoc.loopNum).FluidName, + vrf.CondenserInletTemp, + state.dataPlnt->PlantLoop(vrf.SourcePlantLoc.loopNum).FluidIndex, + RoutineName); if (CondWaterMassFlow > 0.0) { CondOutletTemp = vrf.QCondenser / (CondWaterMassFlow * CpCond) + CondInletTemp; } else { @@ -2454,7 +2454,7 @@ void GetVRFInputData(EnergyPlusData &state, bool &ErrorsFound) cNumericFieldNames); ErrorObjectHeader eoh{routineName, cCurrentModuleObject, cAlphaArgs(1)}; - + GlobalNames::VerifyUniqueInterObjectName( state, state.dataHVACVarRefFlow->VrfUniqueNames, cAlphaArgs(1), cCurrentModuleObject, cAlphaFieldNames(1), ErrorsFound); @@ -2491,7 +2491,7 @@ void GetVRFInputData(EnergyPlusData &state, bool &ErrorsFound) ShowSevereItemNotFound(state, eoh, cAlphaFieldNames(4), cAlphaArgs(4)); ErrorsFound = true; } - + thisVrfFluidCtrl.RatedEvapCapacity = rNumericArgs(1); thisVrfFluidCtrl.RatedCompPowerPerCapcity = rNumericArgs(2); thisVrfFluidCtrl.RatedCompPower = thisVrfFluidCtrl.RatedCompPowerPerCapcity * thisVrfFluidCtrl.RatedEvapCapacity; @@ -2848,7 +2848,7 @@ void GetVRFInputData(EnergyPlusData &state, bool &ErrorsFound) cNumericFieldNames); ErrorObjectHeader eoh{routineName, cCurrentModuleObject, cAlphaArgs(1)}; - + GlobalNames::VerifyUniqueInterObjectName( state, state.dataHVACVarRefFlow->VrfUniqueNames, cAlphaArgs(1), cCurrentModuleObject, cAlphaFieldNames(1), ErrorsFound); @@ -5656,11 +5656,12 @@ void InitVRF(EnergyPlusData &state, int const VRFTUNum, int const ZoneNum, bool state, "Coil:Heating:Water", state.dataHVACVarRefFlow->VRFTU(VRFTUNum).SuppHeatCoilName, ErrorsFound); if (state.dataHVACVarRefFlow->VRFTU(VRFTUNum).SuppHeatCoilFluidMaxFlow > 0.0) { - rho = FluidProperties::GetDensityGlycol(state, - state.dataPlnt->PlantLoop(state.dataHVACVarRefFlow->VRFTU(VRFTUNum).SuppHeatCoilPlantLoc.loopNum).FluidName, - Constant::HWInitConvTemp, - state.dataPlnt->PlantLoop(state.dataHVACVarRefFlow->VRFTU(VRFTUNum).SuppHeatCoilPlantLoc.loopNum).FluidIndex, - RoutineName); + rho = FluidProperties::GetDensityGlycol( + state, + state.dataPlnt->PlantLoop(state.dataHVACVarRefFlow->VRFTU(VRFTUNum).SuppHeatCoilPlantLoc.loopNum).FluidName, + Constant::HWInitConvTemp, + state.dataPlnt->PlantLoop(state.dataHVACVarRefFlow->VRFTU(VRFTUNum).SuppHeatCoilPlantLoc.loopNum).FluidIndex, + RoutineName); state.dataHVACVarRefFlow->VRFTU(VRFTUNum).SuppHeatCoilFluidMaxFlow = state.dataHVACVarRefFlow->VRFTU(VRFTUNum).SuppHeatCoilFluidMaxFlow * rho; } @@ -6268,11 +6269,12 @@ void InitVRF(EnergyPlusData &state, int const VRFTUNum, int const ZoneNum, bool state.dataHVACVarRefFlow->MyEnvrnFlag(VRFTUNum) = false; if (state.dataHVACVarRefFlow->VRF(VRFCond).CondenserType == DataHeatBalance::RefrigCondenserType::Water) { - rho = FluidProperties::GetDensityGlycol(state, - state.dataPlnt->PlantLoop(state.dataHVACVarRefFlow->VRF(VRFCond).SourcePlantLoc.loopNum).FluidName, - Constant::CWInitConvTemp, - state.dataPlnt->PlantLoop(state.dataHVACVarRefFlow->VRF(VRFCond).SourcePlantLoc.loopNum).FluidIndex, - RoutineName); + rho = + FluidProperties::GetDensityGlycol(state, + state.dataPlnt->PlantLoop(state.dataHVACVarRefFlow->VRF(VRFCond).SourcePlantLoc.loopNum).FluidName, + Constant::CWInitConvTemp, + state.dataPlnt->PlantLoop(state.dataHVACVarRefFlow->VRF(VRFCond).SourcePlantLoc.loopNum).FluidIndex, + RoutineName); state.dataHVACVarRefFlow->VRF(VRFCond).WaterCondenserDesignMassFlow = state.dataHVACVarRefFlow->VRF(VRFCond).WaterCondVolFlowRate * rho; InitComponentNodes(state, @@ -11337,8 +11339,8 @@ void VRFCondenserEquipment::CalcVRFCondenser_FluidTCtrl(EnergyPlusData &state) this->RatedCompPower * CurveValue(state, this->OUCoolingPWRFT(NumOfCompSpdInput), this->CondensingTemp, this->IUEvaporatingTemp); // Initialization for h_IU_evap_in iterations (Label12) - h_IU_evap_in_low = this->refrig->getSatEnthalpy(state, OutdoorDryBulb - this->SC, 0.0, RoutineName); // Tc = Tamb - h_IU_evap_in_up = this->refrig->getSatEnthalpy(state, CapMaxTc - this->SC, 0.0, RoutineName); // Tc = CapMaxTc + h_IU_evap_in_low = this->refrig->getSatEnthalpy(state, OutdoorDryBulb - this->SC, 0.0, RoutineName); // Tc = Tamb + h_IU_evap_in_up = this->refrig->getSatEnthalpy(state, CapMaxTc - this->SC, 0.0, RoutineName); // Tc = CapMaxTc h_IU_evap_in = this->refrig->getSatEnthalpy(state, OutdoorDryBulb + 10 - this->SC, 0.0, RoutineName); // Tc = Tamb+10 NumIteHIUIn = 1; @@ -11357,7 +11359,8 @@ void VRFCondenserEquipment::CalcVRFCondenser_FluidTCtrl(EnergyPlusData &state) TU_CoolingLoad = CompEvaporatingCAPSpdMax; this->TUCoolingLoad = TU_CoolingLoad; RefTSat = this->refrig->getSatTemperature(state, max(min(Pevap, RefPHigh), RefPLow), RoutineName); - h_IU_evap_out = this->refrig->getSupHeatEnthalpy(state, max(RefTSat, this->IUEvaporatingTemp + 3), max(min(Pevap, RefPHigh), RefPLow), RoutineName); + h_IU_evap_out = + this->refrig->getSupHeatEnthalpy(state, max(RefTSat, this->IUEvaporatingTemp + 3), max(min(Pevap, RefPHigh), RefPLow), RoutineName); SH_IU_merged = 3; m_ref_IU_evap = TU_CoolingLoad / (h_IU_evap_out - h_IU_evap_in); @@ -11369,10 +11372,11 @@ void VRFCondenserEquipment::CalcVRFCondenser_FluidTCtrl(EnergyPlusData &state) CoolCoilIndex = state.dataHVACVarRefFlow->VRFTU(TUIndex).CoolCoilIndex; RefTSat = this->refrig->getSatTemperature(state, max(min(Pevap, RefPHigh), RefPLow), RoutineName); - h_IU_evap_out_i = this->refrig->getSupHeatEnthalpy(state, - max(RefTSat, this->IUEvaporatingTemp + state.dataDXCoils->DXCoil(CoolCoilIndex).ActualSH), - max(min(Pevap, RefPHigh), RefPLow), - RoutineName); + h_IU_evap_out_i = + this->refrig->getSupHeatEnthalpy(state, + max(RefTSat, this->IUEvaporatingTemp + state.dataDXCoils->DXCoil(CoolCoilIndex).ActualSH), + max(min(Pevap, RefPHigh), RefPLow), + RoutineName); if (h_IU_evap_out_i > h_IU_evap_in) { m_ref_IU_evap_i = (state.dataHVACVarRefFlow->TerminalUnitList(TUListNum).TotalCoolLoad(NumTU) <= 0.0) @@ -11390,10 +11394,8 @@ void VRFCondenserEquipment::CalcVRFCondenser_FluidTCtrl(EnergyPlusData &state) SH_IU_merged = SH_IU_merged / m_ref_IU_evap; } else { RefTSat = this->refrig->getSatTemperature(state, max(min(Pevap, RefPHigh), RefPLow), RoutineName); - h_IU_evap_out = this->refrig->getSupHeatEnthalpy(state, - max(RefTSat, this->IUEvaporatingTemp + 3), - max(min(Pevap, RefPHigh), RefPLow), - RoutineName); + h_IU_evap_out = this->refrig->getSupHeatEnthalpy( + state, max(RefTSat, this->IUEvaporatingTemp + 3), max(min(Pevap, RefPHigh), RefPLow), RoutineName); SH_IU_merged = 3; m_ref_IU_evap = TU_CoolingLoad / (h_IU_evap_out - h_IU_evap_in); } @@ -11406,12 +11408,8 @@ void VRFCondenserEquipment::CalcVRFCondenser_FluidTCtrl(EnergyPlusData &state) Psuction = Pevap - Pipe_DeltP_c; // This Psuction is used for rps > min; will be updated for rps = min // Perform iteration to calculate T_comp_in - T_comp_in = this->refrig->getSupHeatTemp(state, - max(min(Pevap - Pipe_DeltP_c, RefPHigh), RefPLow), - h_comp_in, - Tsuction + 3, - Tsuction + 30, - RoutineName); + T_comp_in = this->refrig->getSupHeatTemp( + state, max(min(Pevap - Pipe_DeltP_c, RefPHigh), RefPLow), h_comp_in, Tsuction + 3, Tsuction + 30, RoutineName); SH_Comp = T_comp_in - Tsuction; // This is used for rps > min; will be updated for rps = min Q_c_TU_PL = TU_CoolingLoad + Pipe_Q_c; @@ -11549,11 +11547,11 @@ void VRFCondenserEquipment::CalcVRFCondenser_FluidTCtrl(EnergyPlusData &state) if (Q_h_TU_PL > CompEvaporatingCAPSpdMax + CompEvaporatingPWRSpdMax) { // Required load is beyond the max system capacity - h_IU_cond_out = this->refrig->getSatEnthalpy( - state, - this->refrig->getSatTemperature(state, max(min(Pcond, RefPHigh), RefPLow), RoutineName) - 5.0, - 0.0, - RoutineName); // Quality=0 + h_IU_cond_out = + this->refrig->getSatEnthalpy(state, + this->refrig->getSatTemperature(state, max(min(Pcond, RefPHigh), RefPLow), RoutineName) - 5.0, + 0.0, + RoutineName); // Quality=0 h_IU_cond_out_ave = h_IU_cond_out; SC_IU_merged = 5; m_ref_IU_cond = TU_HeatingLoad / (h_IU_cond_in - h_IU_cond_out); @@ -11563,12 +11561,12 @@ void VRFCondenserEquipment::CalcVRFCondenser_FluidTCtrl(EnergyPlusData &state) if (state.dataHVACVarRefFlow->TerminalUnitList(TUListNum).TotalHeatLoad(NumTU) > 0) { TUIndex = state.dataHVACVarRefFlow->TerminalUnitList(TUListNum).ZoneTUPtr(NumTU); HeatCoilIndex = state.dataHVACVarRefFlow->VRFTU(TUIndex).HeatCoilIndex; - h_IU_cond_out_i = this->refrig->getSatEnthalpy( - state, - this->refrig->getSatTemperature(state, max(min(Pcond, RefPHigh), RefPLow), RoutineName) - - state.dataDXCoils->DXCoil(HeatCoilIndex).ActualSC, - 0.0, - RoutineName); // Quality=0 + h_IU_cond_out_i = + this->refrig->getSatEnthalpy(state, + this->refrig->getSatTemperature(state, max(min(Pcond, RefPHigh), RefPLow), RoutineName) - + state.dataDXCoils->DXCoil(HeatCoilIndex).ActualSC, + 0.0, + RoutineName); // Quality=0 m_ref_IU_cond_i = (state.dataHVACVarRefFlow->TerminalUnitList(TUListNum).TotalHeatLoad(NumTU) <= 0.0) ? 0.0 @@ -11582,11 +11580,11 @@ void VRFCondenserEquipment::CalcVRFCondenser_FluidTCtrl(EnergyPlusData &state) h_IU_cond_out_ave = h_IU_cond_out_ave / m_ref_IU_cond; // h_merge SC_IU_merged = SC_IU_merged / m_ref_IU_cond; } else { - h_IU_cond_out_ave = this->refrig->getSatEnthalpy( - state, - this->refrig->getSatTemperature(state, max(min(Pcond, RefPHigh), RefPLow), RoutineName) - 5.0, - 0.0, - RoutineName); // Quality=0 + h_IU_cond_out_ave = + this->refrig->getSatEnthalpy(state, + this->refrig->getSatTemperature(state, max(min(Pcond, RefPHigh), RefPLow), RoutineName) - 5.0, + 0.0, + RoutineName); // Quality=0 SC_IU_merged = 5; m_ref_IU_cond = TU_HeatingLoad / (h_IU_cond_in - h_IU_cond_out_ave); } @@ -11610,8 +11608,7 @@ void VRFCondenserEquipment::CalcVRFCondenser_FluidTCtrl(EnergyPlusData &state) // *Calculate capacity modification factor RefTSat = this->refrig->getSatTemperature(state, max(min(CapMinPe, RefPHigh), RefPLow), RoutineName); - h_comp_in = this->refrig->getSupHeatEnthalpy( - state, max(RefTSat, CapMinTe + this->SH), max(min(CapMinPe, RefPHigh), RefPLow), RoutineName); + h_comp_in = this->refrig->getSupHeatEnthalpy(state, max(RefTSat, CapMinTe + this->SH), max(min(CapMinPe, RefPHigh), RefPLow), RoutineName); C_cap_operation = this->VRFOU_CapModFactor(state, h_comp_in, h_IU_cond_out_ave, @@ -11707,10 +11704,8 @@ void VRFCondenserEquipment::CalcVRFCondenser_FluidTCtrl(EnergyPlusData &state) // Update h_comp_out in iteration Label23 P_comp_in = this->refrig->getSatPressure(state, this->EvaporatingTemp, RoutineName); RefTSat = this->refrig->getSatTemperature(state, max(min(P_comp_in, RefPHigh), RefPLow), RoutineName); - h_comp_in_new = this->refrig->getSupHeatEnthalpy(state, - max(RefTSat, this->SH + this->EvaporatingTemp), - max(min(P_comp_in, RefPHigh), RefPLow), - RoutineName); + h_comp_in_new = this->refrig->getSupHeatEnthalpy( + state, max(RefTSat, this->SH + this->EvaporatingTemp), max(min(P_comp_in, RefPHigh), RefPLow), RoutineName); h_comp_out_new = Ncomp_new / m_ref_IU_cond + h_comp_in_new; if ((std::abs(h_comp_out - h_comp_out_new) > Tolerance * h_comp_out) && (h_IU_cond_in < h_IU_cond_in_up)) { @@ -11781,8 +11776,8 @@ void VRFCondenserEquipment::CalcVRFCondenser_FluidTCtrl(EnergyPlusData &state) Pcond = this->refrig->getSatPressure(state, this->IUCondensingTemp, RoutineName); Real64 Pcond_temp = this->refrig->getSatPressure(state, 40.0, RoutineName); RefTSat = this->refrig->getSatTemperature(state, Pcond_temp, RoutineName); - h_IU_cond_in_up = this->refrig->getSupHeatEnthalpy( - state, max(RefTSat, min(this->IUCondensingTemp + 50, RefTHigh)), Pcond_temp, RoutineName); + h_IU_cond_in_up = + this->refrig->getSupHeatEnthalpy(state, max(RefTSat, min(this->IUCondensingTemp + 50, RefTHigh)), Pcond_temp, RoutineName); h_IU_cond_in_low = this->refrig->getSatEnthalpy(state, this->IUCondensingTemp, 1.0, RoutineName); // Quality=1 h_IU_cond_in = h_IU_cond_in_low; } @@ -11797,12 +11792,12 @@ void VRFCondenserEquipment::CalcVRFCondenser_FluidTCtrl(EnergyPlusData &state) if (state.dataHVACVarRefFlow->TerminalUnitList(TUListNum).TotalHeatLoad(NumTU) > 0) { TUIndex = state.dataHVACVarRefFlow->TerminalUnitList(TUListNum).ZoneTUPtr(NumTU); HeatCoilIndex = state.dataHVACVarRefFlow->VRFTU(TUIndex).HeatCoilIndex; - h_IU_cond_out_i = this->refrig->getSatEnthalpy( - state, - this->refrig->getSatTemperature(state, max(min(Pcond, RefPHigh), RefPLow), RoutineName) - - state.dataDXCoils->DXCoil(HeatCoilIndex).ActualSC, - 0.0, - RoutineName); // Quality=0 + h_IU_cond_out_i = + this->refrig->getSatEnthalpy(state, + this->refrig->getSatTemperature(state, max(min(Pcond, RefPHigh), RefPLow), RoutineName) - + state.dataDXCoils->DXCoil(HeatCoilIndex).ActualSC, + 0.0, + RoutineName); // Quality=0 m_ref_IU_cond_i = (state.dataHVACVarRefFlow->TerminalUnitList(TUListNum).TotalHeatLoad(NumTU) <= 0.0) ? 0.0 @@ -11816,11 +11811,11 @@ void VRFCondenserEquipment::CalcVRFCondenser_FluidTCtrl(EnergyPlusData &state) h_IU_cond_out_ave = h_IU_cond_out_ave / m_ref_IU_cond; SC_IU_merged = SC_IU_merged / m_ref_IU_cond; } else { - h_IU_cond_out_ave = this->refrig->getSatEnthalpy( - state, - this->refrig->getSatTemperature(state, max(min(Pcond, RefPHigh), RefPLow), RoutineName) - 5.0, - 0.0, - RoutineName); // Quality=0 + h_IU_cond_out_ave = + this->refrig->getSatEnthalpy(state, + this->refrig->getSatTemperature(state, max(min(Pcond, RefPHigh), RefPLow), RoutineName) - 5.0, + 0.0, + RoutineName); // Quality=0 SC_IU_merged = 5; m_ref_IU_cond = TU_HeatingLoad / (h_IU_cond_in - h_IU_cond_out_ave); } @@ -11843,10 +11838,11 @@ void VRFCondenserEquipment::CalcVRFCondenser_FluidTCtrl(EnergyPlusData &state) CoolCoilIndex = state.dataHVACVarRefFlow->VRFTU(TUIndex).CoolCoilIndex; RefTSat = this->refrig->getSatTemperature(state, max(min(Pevap, RefPHigh), RefPLow), RoutineName); - h_IU_evap_out_i = this->refrig->getSupHeatEnthalpy(state, - max(RefTSat, this->IUEvaporatingTemp + state.dataDXCoils->DXCoil(CoolCoilIndex).ActualSH), - max(min(Pevap, RefPHigh), RefPLow), - RoutineName); + h_IU_evap_out_i = + this->refrig->getSupHeatEnthalpy(state, + max(RefTSat, this->IUEvaporatingTemp + state.dataDXCoils->DXCoil(CoolCoilIndex).ActualSH), + max(min(Pevap, RefPHigh), RefPLow), + RoutineName); if (h_IU_evap_out_i > h_IU_evap_in) { m_ref_IU_evap_i = (state.dataHVACVarRefFlow->TerminalUnitList(TUListNum).TotalCoolLoad(NumTU) <= 0.0) @@ -11864,10 +11860,8 @@ void VRFCondenserEquipment::CalcVRFCondenser_FluidTCtrl(EnergyPlusData &state) SH_IU_merged = SH_IU_merged / m_ref_IU_evap; } else { RefTSat = this->refrig->getSatTemperature(state, max(min(Pevap, RefPHigh), RefPLow), RoutineName); - h_IU_evap_out = this->refrig->getSupHeatEnthalpy(state, - max(RefTSat, this->IUEvaporatingTemp + 3), - max(min(Pevap, RefPHigh), RefPLow), - RoutineName); + h_IU_evap_out = + this->refrig->getSupHeatEnthalpy(state, max(RefTSat, this->IUEvaporatingTemp + 3), max(min(Pevap, RefPHigh), RefPLow), RoutineName); SH_IU_merged = 3; m_ref_IU_evap = TU_CoolingLoad / (h_IU_evap_out - h_IU_evap_in); } @@ -13557,9 +13551,9 @@ Label11:; RefTSat = this->refrig->getSatTemperature(state, Pe_update, RoutineName); Pipe_h_IU_out_i = this->refrig->getSupHeatEnthalpy(state, - max(RefTSat, Te_update + SH_IU_update), - Pe_update, - RoutineName); // hB_i for the IU + max(RefTSat, Te_update + SH_IU_update), + Pe_update, + RoutineName); // hB_i for the IU if (Pipe_h_IU_out_i > Pipe_h_IU_in) { Pipe_m_ref_i = (state.dataHVACVarRefFlow->TerminalUnitList(TUListNum).TotalCoolLoad(NumTU) <= 0.0) @@ -13661,12 +13655,7 @@ void VRFCondenserEquipment::VRFOU_CompSpd( // variable initializations: system operational parameters P_suction = this->refrig->getSatPressure(state, T_suction, RoutineName); - T_comp_in = this->refrig->getSupHeatTemp(state, - max(min(P_suction, RefPHigh), RefPLow), - h_comp_in, - T_suction + 3, - T_suction + 30, - RoutineName); + T_comp_in = this->refrig->getSupHeatTemp(state, max(min(P_suction, RefPHigh), RefPLow), h_comp_in, T_suction + 3, T_suction + 30, RoutineName); SH_Comp = T_comp_in - T_suction; // Calculate capacity modification factor @@ -13843,12 +13832,7 @@ void VRFCondenserEquipment::VRFOU_CompCap( // variable initializations: system operational parameters P_suction = this->refrig->getSatPressure(state, T_suction, RoutineName); - T_comp_in = this->refrig->getSupHeatTemp(state, - max(min(P_suction, RefPHigh), RefPLow), - h_comp_in, - T_suction + 3, - T_suction + 30, - RoutineName); + T_comp_in = this->refrig->getSupHeatTemp(state, max(min(P_suction, RefPHigh), RefPLow), h_comp_in, T_suction + 3, T_suction + 30, RoutineName); SH_Comp = T_comp_in - T_suction; // Calculate capacity modification factor @@ -14061,10 +14045,8 @@ void VRFCondenserEquipment::VRFOU_CalcCompC(EnergyPlusData &state, (2 * this->C3Te); RefTSat = this->refrig->getSatTemperature(state, max(min(Pipe_Pe_assumed, RefPHigh), RefPLow), RoutineName); - Pipe_h_IU_out_i = this->refrig->getSupHeatEnthalpy(state, - max(RefTSat, Pipe_Te_assumed + Modifi_SHin), - max(min(Pipe_Pe_assumed, RefPHigh), RefPLow), - RoutineName); + Pipe_h_IU_out_i = this->refrig->getSupHeatEnthalpy( + state, max(RefTSat, Pipe_Te_assumed + Modifi_SHin), max(min(Pipe_Pe_assumed, RefPHigh), RefPLow), RoutineName); if (Pipe_h_IU_out_i > Pipe_h_IU_in) { Pipe_m_ref_i = (state.dataHVACVarRefFlow->TerminalUnitList(TUListNum).TotalCoolLoad(NumTU) <= 0.0) @@ -14083,10 +14065,8 @@ void VRFCondenserEquipment::VRFOU_CalcCompC(EnergyPlusData &state, } else { Pipe_SH_merged = this->SH; RefTSat = this->refrig->getSatTemperature(state, max(min(Pipe_Pe_assumed, RefPHigh), RefPLow), RoutineName); - Pipe_h_IU_out = this->refrig->getSupHeatEnthalpy(state, - max(RefTSat, Pipe_Te_assumed + Pipe_SH_merged), - max(min(Pipe_Pe_assumed, RefPHigh), RefPLow), - RoutineName); + Pipe_h_IU_out = this->refrig->getSupHeatEnthalpy( + state, max(RefTSat, Pipe_Te_assumed + Pipe_SH_merged), max(min(Pipe_Pe_assumed, RefPHigh), RefPLow), RoutineName); } // Re-calculate piping loss @@ -14119,12 +14099,8 @@ void VRFCondenserEquipment::VRFOU_CalcCompC(EnergyPlusData &state, } // Perform iteration to calculate Pipe_T_comp_in( Te'+SH' ) - Pipe_T_comp_in = this->refrig->getSupHeatTemp(state, - max(min(Pipe_Pe_assumed - Pipe_DeltP, RefPHigh), RefPLow), - Pipe_h_comp_in, - T_suction + 3, - T_suction + 30, - RoutineName); + Pipe_T_comp_in = this->refrig->getSupHeatTemp( + state, max(min(Pipe_Pe_assumed - Pipe_DeltP, RefPHigh), RefPLow), Pipe_h_comp_in, T_suction + 3, T_suction + 30, RoutineName); Modifi_SH = Pipe_T_comp_in - T_suction; P_suction = Pipe_Pe_assumed - Pipe_DeltP; @@ -14266,10 +14242,8 @@ void VRFCondenserEquipment::VRFOU_CalcCompH( // Calculate capacity modification factor MinOutdoorUnitPe = this->refrig->getSatPressure(state, T_suction, RoutineName); RefTSat = this->refrig->getSatTemperature(state, max(min(MinOutdoorUnitPe, RefPHigh), RefPLow), RoutineName); - Pipe_h_comp_in = this->refrig->getSupHeatEnthalpy(state, - max(RefTSat, T_suction + this->SH), - max(min(MinOutdoorUnitPe, RefPHigh), RefPLow), - RoutineName); + Pipe_h_comp_in = + this->refrig->getSupHeatEnthalpy(state, max(RefTSat, T_suction + this->SH), max(min(MinOutdoorUnitPe, RefPHigh), RefPLow), RoutineName); C_cap_operation = this->VRFOU_CapModFactor( state, Pipe_h_comp_in, Pipe_h_out_ave, max(min(MinOutdoorUnitPe, RefPHigh), RefPLow), T_suction + this->SH, T_suction + 8, IUMaxCondTemp - 5); @@ -14332,10 +14306,8 @@ void VRFCondenserEquipment::VRFOU_CalcCompH( // Calculate capacity modification factor RefTSat = this->refrig->getSatTemperature(state, max(min(Modifi_Pe, RefPHigh), RefPLow), RoutineName); - Pipe_h_comp_in = this->refrig->getSupHeatEnthalpy(state, - max(RefTSat, T_suction + Modifi_SH), - max(min(Modifi_Pe, RefPHigh), RefPLow), - RoutineName); + Pipe_h_comp_in = + this->refrig->getSupHeatEnthalpy(state, max(RefTSat, T_suction + Modifi_SH), max(min(Modifi_Pe, RefPHigh), RefPLow), RoutineName); C_cap_operation = this->VRFOU_CapModFactor(state, Pipe_h_comp_in, Pipe_h_out_ave, @@ -14851,11 +14823,11 @@ void VRFCondenserEquipment::VRFOU_PipeLossC( using General::SolveRoot; - int TUListNum; // index to TU List - int TUIndex; // Index to terminal unit - int CoilIndex; // index to coil in terminal unit - int NumTUInList; // number of terminal units is list - int NumIUActivated; // number of the used indoor units [-] + int TUListNum; // index to TU List + int TUIndex; // Index to terminal unit + int CoilIndex; // index to coil in terminal unit + int NumTUInList; // number of terminal units is list + int NumIUActivated; // number of the used indoor units [-] Real64 Pipe_v_ref; // Piping Loss Algorithm Parameter: Refrigerant velocity [m/s] Real64 Pipe_T_room; // Piping Loss Algorithm Parameter: Average Room Temperature [C] @@ -14917,28 +14889,20 @@ void VRFCondenserEquipment::VRFOU_PipeLossC( if (Pipe_viscosity_ref <= 0) Pipe_viscosity_ref = 16.26; // default superheated vapor viscosity data (MuPa*s) at T=353.15 K, P=2MPa Pipe_v_ref = Pipe_m_ref / (Constant::Pi * pow_2(this->RefPipDiaSuc) * 0.25) / - this->refrig->getSupHeatDensity(state, - this->EvaporatingTemp + Pipe_SH_merged, - max(min(Pevap, RefPHigh), RefPLow), - RoutineName); + this->refrig->getSupHeatDensity(state, this->EvaporatingTemp + Pipe_SH_merged, max(min(Pevap, RefPHigh), RefPLow), RoutineName); Pipe_Num_Re = Pipe_m_ref / (Constant::Pi * pow_2(this->RefPipDiaSuc) * 0.25) * this->RefPipDiaSuc / Pipe_viscosity_ref * 1000000; Pipe_Num_Pr = Pipe_viscosity_ref * Pipe_cp_ref * 0.001 / Pipe_conductivity_ref; Pipe_Num_Nu = 0.023 * std::pow(Pipe_Num_Re, 0.8) * std::pow(Pipe_Num_Pr, 0.3); Pipe_Num_St = Pipe_Num_Nu / Pipe_Num_Re / Pipe_Num_Pr; - Pipe_DeltP = max(0.0, - 8 * Pipe_Num_St * std::pow(Pipe_Num_Pr, 0.6667) * this->RefPipEquLen / this->RefPipDiaSuc * - this->refrig->getSupHeatDensity(state, - this->EvaporatingTemp + Pipe_SH_merged, - max(min(Pevap, RefPHigh), RefPLow), - RoutineName) * - pow_2(Pipe_v_ref) / 2 - - this->RefPipHei * - this->refrig->getSupHeatDensity(state, - this->EvaporatingTemp + Pipe_SH_merged, - max(min(Pevap, RefPHigh), RefPLow), - RoutineName) * - 9.80665); + Pipe_DeltP = max( + 0.0, + 8 * Pipe_Num_St * std::pow(Pipe_Num_Pr, 0.6667) * this->RefPipEquLen / this->RefPipDiaSuc * + this->refrig->getSupHeatDensity(state, this->EvaporatingTemp + Pipe_SH_merged, max(min(Pevap, RefPHigh), RefPLow), RoutineName) * + pow_2(Pipe_v_ref) / 2 - + this->RefPipHei * + this->refrig->getSupHeatDensity(state, this->EvaporatingTemp + Pipe_SH_merged, max(min(Pevap, RefPHigh), RefPLow), RoutineName) * + 9.80665); Pipe_Coe_k1 = Pipe_Num_Nu * Pipe_viscosity_ref; Pipe_Coe_k3 = RefPipInsH * (this->RefPipDiaSuc + 2 * this->RefPipInsThi); @@ -14988,11 +14952,11 @@ void VRFCondenserEquipment::VRFOU_PipeLossH( using General::SolveRoot; - int TUListNum; // index to TU List - int TUIndex; // Index to terminal unit - int CoilIndex; // index to coil in terminal unit - int NumTUInList; // number of terminal units is list - int NumIUActivated; // number of the used indoor units [-] + int TUListNum; // index to TU List + int TUIndex; // Index to terminal unit + int CoilIndex; // index to coil in terminal unit + int NumTUInList; // number of terminal units is list + int NumIUActivated; // number of the used indoor units [-] Real64 Pipe_v_ref; // Piping Loss Algorithm Parameter: Refrigerant velocity [m/s] Real64 Pipe_T_room; // Piping Loss Algorithm Parameter: Average Room Temperature [C] @@ -15029,11 +14993,11 @@ void VRFCondenserEquipment::VRFOU_PipeLossH( // Perform iteration to calculate Pipe_T_IU_in, given P and h Pipe_T_IU_in = this->refrig->getSupHeatTemp(state, - max(min(Pcond, RefPHigh), RefPLow), - Pipe_h_IU_in, - max(this->IUCondensingTemp, RefTSat), - min(this->IUCondensingTemp + 50, RefTHigh), - RoutineName); + max(min(Pcond, RefPHigh), RefPLow), + Pipe_h_IU_in, + max(this->IUCondensingTemp, RefTSat), + min(this->IUCondensingTemp + 50, RefTHigh), + RoutineName); Pipe_T_IU_in = min(RefTHigh, Pipe_T_IU_in); // Calculate average room temperature @@ -15063,9 +15027,8 @@ void VRFCondenserEquipment::VRFOU_PipeLossH( 218.48 * Ref_Coe_v2 * Ref_Coe_v3 + 21.58; if (Pipe_viscosity_ref <= 0) Pipe_viscosity_ref = 16.26; // default superheated vapor viscosity data (MuPa*s) at T=353.15 K, P=2MPa - Pipe_v_ref = - Pipe_m_ref / (Constant::Pi * pow_2(this->RefPipDiaDis) * 0.25) / - this->refrig->getSupHeatDensity(state, Pipe_T_IU_in, max(min(Pcond, RefPHigh), RefPLow), RoutineName); + Pipe_v_ref = Pipe_m_ref / (Constant::Pi * pow_2(this->RefPipDiaDis) * 0.25) / + this->refrig->getSupHeatDensity(state, Pipe_T_IU_in, max(min(Pcond, RefPHigh), RefPLow), RoutineName); Pipe_Num_Re = Pipe_m_ref / (Constant::Pi * pow_2(this->RefPipDiaDis) * 0.25) * this->RefPipDiaDis / Pipe_viscosity_ref * 1000000; Pipe_Num_Pr = Pipe_viscosity_ref * Pipe_cp_ref * 0.001 / Pipe_conductivity_ref; Pipe_Num_Nu = 0.023 * std::pow(Pipe_Num_Re, 0.8) * std::pow(Pipe_Num_Pr, 0.4); @@ -15078,15 +15041,11 @@ void VRFCondenserEquipment::VRFOU_PipeLossH( Pipe_Q = max(0.0, (Constant::Pi * this->RefPipLen) * (Pipe_T_IU_in - OutdoorDryBulb / 2 - Pipe_T_room / 2) / (1 / Pipe_Coe_k1 + 1 / Pipe_Coe_k2 + 1 / Pipe_Coe_k3)); // [W] - Pipe_DeltP = max(0.0, - 8 * Pipe_Num_St * std::pow(Pipe_Num_Pr, 0.6667) * this->RefPipEquLen / this->RefPipDiaDis * - this->refrig->getSupHeatDensity( - state, Pipe_T_IU_in, max(min(Pcond, RefPHigh), RefPLow), RoutineName) * - pow_2(Pipe_v_ref) / 2 - - this->RefPipHei * - this->refrig->getSupHeatDensity( - state, Pipe_T_IU_in, max(min(Pcond, RefPHigh), RefPLow), RoutineName) * - 9.80665); + Pipe_DeltP = max( + 0.0, + 8 * Pipe_Num_St * std::pow(Pipe_Num_Pr, 0.6667) * this->RefPipEquLen / this->RefPipDiaDis * + this->refrig->getSupHeatDensity(state, Pipe_T_IU_in, max(min(Pcond, RefPHigh), RefPLow), RoutineName) * pow_2(Pipe_v_ref) / 2 - + this->RefPipHei * this->refrig->getSupHeatDensity(state, Pipe_T_IU_in, max(min(Pcond, RefPHigh), RefPLow), RoutineName) * 9.80665); Pipe_h_comp_out = Pipe_h_IU_in + Pipe_Q / Pipe_m_ref; diff --git a/src/EnergyPlus/HVACVariableRefrigerantFlow.hh b/src/EnergyPlus/HVACVariableRefrigerantFlow.hh index b1448855c2b..5f2e1024827 100644 --- a/src/EnergyPlus/HVACVariableRefrigerantFlow.hh +++ b/src/EnergyPlus/HVACVariableRefrigerantFlow.hh @@ -320,47 +320,47 @@ namespace HVACVariableRefrigerantFlow { int HeatEIRFPLRErrorIndex = 0; // warning message index int CoolEIRFPLRErrorIndex = 0; // warning message index // The following are for the Algorithm Type: VRF model based on physics, applicable for Fluid Temperature Control - int AlgorithmIUCtrl; // VRF indoor unit contrl algorithm, 1-High sensible, 2-Te/Tc constant - Array1D CompressorSpeed; // compressor speed array [rps] - Real64 CondensingTemp; // VRV system outdoor unit condensing temperature [C] - Real64 CondTempFixed; // Inddor unit condensing temperature, fixed, for AlgorithmIUCtrl is 2-Te/Tc constant [C] - Real64 CoffEvapCap; // Evaporative Capacity Correction Factor - Real64 CompActSpeed; // Compressor speed [rps] - Real64 CompMaxDeltaP; // maximum compressor pressure rise [Pa] - Real64 C1Te; // VRF Outdoor Unit Coefficient 1 to calculate Te,req [--] - Real64 C2Te; // VRF Outdoor Unit Coefficient 2 to calculate Te,req [--] - Real64 C3Te; // VRF Outdoor Unit Coefficient 3 to calculate Te,req [--] - Real64 C1Tc; // VRF Outdoor Unit Coefficient 1 to calculate Tc,req [--] - Real64 C2Tc; // VRF Outdoor Unit Coefficient 2 to calculate Tc,req [--] - Real64 C3Tc; // VRF Outdoor Unit Coefficient 3 to calculate Tc,req [--] - Real64 DiffOUTeTo; // Difference between Outdoor Unit Te and OAT during Simultaneous Heating and Cooling operations - Real64 EffCompInverter; // Compressor Inverter Efficiency - Real64 EvaporatingTemp; // VRV system outdoor unit evaporating temperature [C] - Real64 EvapTempFixed; // Indoor unit evaporating temperature, fixed, for AlgorithmIUCtrl is 2-Te/Tc constant [C] - Real64 HROUHexRatio; // HR OU Heat Exchanger Capacity Ratio [--] - Real64 IUEvaporatingTemp; // VRV system indoor unit evaporating temperature, min among all indoor units [C] - Real64 IUCondensingTemp; // VRV system indoor unit condensing temperature, max among all indoor units [C] - Real64 IUEvapTempLow; // VRV system indoor unit evaporating temperature, lower bound[C] - Real64 IUEvapTempHigh; // VRV system indoor unit evaporating temperature, higher bound [C] - Real64 IUCondTempLow; // VRV system indoor unit condensing temperature, lower bound [C] - Real64 IUCondTempHigh; // VRV system indoor unit condensing temperature, higher bound [C] - Real64 IUCondHeatRate; // Indoor Unit Condensers Total Heat Release Rate, excluding piping loss [W] - Real64 IUEvapHeatRate; // Outdoor Unit Evaporators Total Heat Extract Rate, excluding piping loss [W] - Real64 Ncomp; // compressor electric power [W] - Real64 NcompCooling; // compressor electric power at cooling mode [W] - Real64 NcompHeating; // compressor electric power at heating mode [W] - Array1D_int OUCoolingCAPFT; // index to outdoor unit cooling capacity function of temperature at different compressor speed - Array1D_int OUCoolingPWRFT; // index to outdoor unit cooling power function of temperature at different compressor speed - Real64 OUEvapTempLow; // VRV system outdoor unit evaporating temperature, lower bound[C] - Real64 OUEvapTempHigh; // VRV system outdoor unit evaporating temperature, higher bound [C] - Real64 OUCondTempLow; // VRV system outdoor unit condensing temperature, lower bound [C] - Real64 OUCondTempHigh; // VRV system outdoor unit condensing temperature, higher bound [C] - Real64 OUAirFlowRate; // Max condenser air flow rate [m3/s] - Real64 OUAirFlowRatePerCapcity; // Max condenser air flow rate per Evaporative Capacity [m3/s] - Real64 OUCondHeatRate; // Outdoor Unit Condenser Heat Release Rate, excluding piping loss [W] - Real64 OUEvapHeatRate; // Outdoor Unit Evaporator Heat Extract Rate, excluding piping loss [W] - Real64 OUFanPower; // Outdoor unit fan power at real conditions[W] - std::string refrigName; // Name of refrigerant, must match name in FluidName (see fluidpropertiesrefdata.idf) + int AlgorithmIUCtrl; // VRF indoor unit contrl algorithm, 1-High sensible, 2-Te/Tc constant + Array1D CompressorSpeed; // compressor speed array [rps] + Real64 CondensingTemp; // VRV system outdoor unit condensing temperature [C] + Real64 CondTempFixed; // Inddor unit condensing temperature, fixed, for AlgorithmIUCtrl is 2-Te/Tc constant [C] + Real64 CoffEvapCap; // Evaporative Capacity Correction Factor + Real64 CompActSpeed; // Compressor speed [rps] + Real64 CompMaxDeltaP; // maximum compressor pressure rise [Pa] + Real64 C1Te; // VRF Outdoor Unit Coefficient 1 to calculate Te,req [--] + Real64 C2Te; // VRF Outdoor Unit Coefficient 2 to calculate Te,req [--] + Real64 C3Te; // VRF Outdoor Unit Coefficient 3 to calculate Te,req [--] + Real64 C1Tc; // VRF Outdoor Unit Coefficient 1 to calculate Tc,req [--] + Real64 C2Tc; // VRF Outdoor Unit Coefficient 2 to calculate Tc,req [--] + Real64 C3Tc; // VRF Outdoor Unit Coefficient 3 to calculate Tc,req [--] + Real64 DiffOUTeTo; // Difference between Outdoor Unit Te and OAT during Simultaneous Heating and Cooling operations + Real64 EffCompInverter; // Compressor Inverter Efficiency + Real64 EvaporatingTemp; // VRV system outdoor unit evaporating temperature [C] + Real64 EvapTempFixed; // Indoor unit evaporating temperature, fixed, for AlgorithmIUCtrl is 2-Te/Tc constant [C] + Real64 HROUHexRatio; // HR OU Heat Exchanger Capacity Ratio [--] + Real64 IUEvaporatingTemp; // VRV system indoor unit evaporating temperature, min among all indoor units [C] + Real64 IUCondensingTemp; // VRV system indoor unit condensing temperature, max among all indoor units [C] + Real64 IUEvapTempLow; // VRV system indoor unit evaporating temperature, lower bound[C] + Real64 IUEvapTempHigh; // VRV system indoor unit evaporating temperature, higher bound [C] + Real64 IUCondTempLow; // VRV system indoor unit condensing temperature, lower bound [C] + Real64 IUCondTempHigh; // VRV system indoor unit condensing temperature, higher bound [C] + Real64 IUCondHeatRate; // Indoor Unit Condensers Total Heat Release Rate, excluding piping loss [W] + Real64 IUEvapHeatRate; // Outdoor Unit Evaporators Total Heat Extract Rate, excluding piping loss [W] + Real64 Ncomp; // compressor electric power [W] + Real64 NcompCooling; // compressor electric power at cooling mode [W] + Real64 NcompHeating; // compressor electric power at heating mode [W] + Array1D_int OUCoolingCAPFT; // index to outdoor unit cooling capacity function of temperature at different compressor speed + Array1D_int OUCoolingPWRFT; // index to outdoor unit cooling power function of temperature at different compressor speed + Real64 OUEvapTempLow; // VRV system outdoor unit evaporating temperature, lower bound[C] + Real64 OUEvapTempHigh; // VRV system outdoor unit evaporating temperature, higher bound [C] + Real64 OUCondTempLow; // VRV system outdoor unit condensing temperature, lower bound [C] + Real64 OUCondTempHigh; // VRV system outdoor unit condensing temperature, higher bound [C] + Real64 OUAirFlowRate; // Max condenser air flow rate [m3/s] + Real64 OUAirFlowRatePerCapcity; // Max condenser air flow rate per Evaporative Capacity [m3/s] + Real64 OUCondHeatRate; // Outdoor Unit Condenser Heat Release Rate, excluding piping loss [W] + Real64 OUEvapHeatRate; // Outdoor Unit Evaporator Heat Extract Rate, excluding piping loss [W] + Real64 OUFanPower; // Outdoor unit fan power at real conditions[W] + std::string refrigName; // Name of refrigerant, must match name in FluidName (see fluidpropertiesrefdata.idf) FluidProperties::RefrigProps *refrig; Real64 RatedEvapCapacity; // Rated Evaporative Capacity [W] Real64 RatedHeatCapacity; // Rated Heating Capacity [W] diff --git a/src/EnergyPlus/OutdoorAirUnit.cc b/src/EnergyPlus/OutdoorAirUnit.cc index 1715d43cb75..8a2ed876011 100644 --- a/src/EnergyPlus/OutdoorAirUnit.cc +++ b/src/EnergyPlus/OutdoorAirUnit.cc @@ -1283,13 +1283,13 @@ namespace OutdoorAirUnit { if (thisOutAirUnit.OAEquip(compLoop).Type == CompType::SteamCoil_AirHeat) { thisOutAirUnit.OAEquip(compLoop).MaxVolWaterFlow = GetCoilMaxSteamFlowRate(state, thisOutAirUnit.OAEquip(compLoop).ComponentIndex, errFlag); - Real64 const rho = - FluidProperties::GetSatDensityRefrig(state, - state.dataPlnt->PlantLoop(thisOutAirUnit.OAEquip(compLoop).plantLoc.loopNum).FluidName, - Constant::SteamInitConvTemp, - 1.0, - state.dataPlnt->PlantLoop(thisOutAirUnit.OAEquip(compLoop).plantLoc.loopNum).FluidIndex, - RoutineName); + Real64 const rho = FluidProperties::GetSatDensityRefrig( + state, + state.dataPlnt->PlantLoop(thisOutAirUnit.OAEquip(compLoop).plantLoc.loopNum).FluidName, + Constant::SteamInitConvTemp, + 1.0, + state.dataPlnt->PlantLoop(thisOutAirUnit.OAEquip(compLoop).plantLoc.loopNum).FluidIndex, + RoutineName); thisOutAirUnit.OAEquip(compLoop).MaxWaterMassFlow = rho * thisOutAirUnit.OAEquip(compLoop).MaxVolWaterFlow; thisOutAirUnit.OAEquip(compLoop).MinWaterMassFlow = rho * thisOutAirUnit.OAEquip(compLoop).MinVolWaterFlow; InitComponentNodes(state, diff --git a/src/EnergyPlus/Plant/Loop.cc b/src/EnergyPlus/Plant/Loop.cc index b186a777718..cc894f9a7c9 100644 --- a/src/EnergyPlus/Plant/Loop.cc +++ b/src/EnergyPlus/Plant/Loop.cc @@ -133,7 +133,7 @@ void PlantLoopData::CalcUnmetPlantDemand(EnergyPlusData &state) if (this->FluidType == DataLoopNode::NodeFluidType::Water) { - Cp = FluidProperties::GetSpecificHeatGlycol(state, this->FluidName, TargetTemp, this->FluidIndex, RoutineName); + Cp = FluidProperties::GetSpecificHeatGlycol(state, this->FluidName, TargetTemp, this->FluidIndex, RoutineName); switch (this->LoopDemandCalcScheme) { case DataPlant::LoopDemandCalcScheme::SingleSetPoint: { @@ -188,8 +188,10 @@ void PlantLoopData::CalcUnmetPlantDemand(EnergyPlusData &state) // Calculate the delta temperature DeltaTemp = LoopSetPointTemperature - TargetTemp; - EnthalpySteamSatVapor = FluidProperties::GetSatEnthalpyRefrig(state, this->FluidName, LoopSetPointTemperature, 1.0, this->FluidIndex, RoutineNameAlt); - EnthalpySteamSatLiquid = FluidProperties::GetSatEnthalpyRefrig(state, this->FluidName, LoopSetPointTemperature, 0.0, this->FluidIndex, RoutineNameAlt); + EnthalpySteamSatVapor = + FluidProperties::GetSatEnthalpyRefrig(state, this->FluidName, LoopSetPointTemperature, 1.0, this->FluidIndex, RoutineNameAlt); + EnthalpySteamSatLiquid = + FluidProperties::GetSatEnthalpyRefrig(state, this->FluidName, LoopSetPointTemperature, 0.0, this->FluidIndex, RoutineNameAlt); LatentHeatSteam = EnthalpySteamSatVapor - EnthalpySteamSatLiquid; diff --git a/src/EnergyPlus/Plant/LoopSide.cc b/src/EnergyPlus/Plant/LoopSide.cc index 7d91b9c4a7f..150d6cea60d 100644 --- a/src/EnergyPlus/Plant/LoopSide.cc +++ b/src/EnergyPlus/Plant/LoopSide.cc @@ -1999,10 +1999,10 @@ namespace DataPlant { Real64 const OutletTemp(state.dataLoopNodes->Node(OutletNode).Temp); Real64 const AverageTemp((InletTemp + OutletTemp) / 2.0); Real64 const ComponentCp(FluidProperties::GetSpecificHeatGlycol(state, - state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, - AverageTemp, - state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, - RoutineName)); + state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidName, + AverageTemp, + state.dataPlnt->PlantLoop(this->plantLoc.loopNum).FluidIndex, + RoutineName)); // Calculate the load altered by this component Real64 const LoadAlteration(ComponentMassFlowRate * ComponentCp * (OutletTemp - InletTemp)); diff --git a/src/EnergyPlus/Plant/PlantManager.cc b/src/EnergyPlus/Plant/PlantManager.cc index ced52fc434f..89c4fc4e631 100644 --- a/src/EnergyPlus/Plant/PlantManager.cc +++ b/src/EnergyPlus/Plant/PlantManager.cc @@ -393,7 +393,7 @@ void GetPlantLoopData(EnergyPlusData &state) ShowSevereError(state, CurrentModuleObject + "=\"" + Alpha(1) + "\", missing fluid data for Plant loop."); ErrorsFound = true; } else { - this_loop.FluidIndex = FluidProperties::GetGlycolNum(state, Alpha(3)); + this_loop.FluidIndex = FluidProperties::GetGlycolNum(state, Alpha(3)); if (this_loop.FluidIndex == 0) { ShowSevereError(state, CurrentModuleObject + "=\"" + Alpha(1) + "\", invalid glycol fluid data for Plant loop."); ErrorsFound = true; @@ -2633,19 +2633,19 @@ void ReInitPlantLoopsAtFirstHVACIteration(EnergyPlusData &state) if (state.dataPlnt->PlantLoop(LoopNum).FluidType != DataLoopNode::NodeFluidType::Steam) { Cp = FluidProperties::GetSpecificHeatGlycol(state, - state.dataPlnt->PlantLoop(LoopNum).FluidName, - LoopSetPointTemp, - state.dataPlnt->PlantLoop(LoopNum).FluidIndex, - RoutineNameAlt); + state.dataPlnt->PlantLoop(LoopNum).FluidName, + LoopSetPointTemp, + state.dataPlnt->PlantLoop(LoopNum).FluidIndex, + RoutineNameAlt); StartEnthalpy = Cp * LoopSetPointTemp; } // Use Min/Max flow rates to initialize loop if (state.dataPlnt->PlantLoop(LoopNum).FluidType == DataLoopNode::NodeFluidType::Water) { rho = FluidProperties::GetDensityGlycol(state, - state.dataPlnt->PlantLoop(LoopNum).FluidName, - LoopSetPointTemp, - state.dataPlnt->PlantLoop(LoopNum).FluidIndex, - RoutineNameAlt); + state.dataPlnt->PlantLoop(LoopNum).FluidName, + LoopSetPointTemp, + state.dataPlnt->PlantLoop(LoopNum).FluidIndex, + RoutineNameAlt); LoopMaxMassFlowRate = state.dataPlnt->PlantLoop(LoopNum).MaxVolFlowRate * rho; LoopMinMassFlowRate = state.dataPlnt->PlantLoop(LoopNum).MinVolFlowRate * rho; @@ -2653,8 +2653,8 @@ void ReInitPlantLoopsAtFirstHVACIteration(EnergyPlusData &state) // use saturated liquid of steam at the loop setpoint temp as the starting enthalpy for a water loop if (state.dataPlnt->PlantLoop(LoopNum).FluidType == DataLoopNode::NodeFluidType::Steam) { SteamTemp = 100.0; - SteamDensity = - FluidProperties::GetSatDensityRefrig(state, fluidNameSteam, SteamTemp, 1.0, state.dataPlnt->PlantLoop(LoopNum).FluidIndex, RoutineName); + SteamDensity = FluidProperties::GetSatDensityRefrig( + state, fluidNameSteam, SteamTemp, 1.0, state.dataPlnt->PlantLoop(LoopNum).FluidIndex, RoutineName); LoopMaxMassFlowRate = state.dataPlnt->PlantLoop(LoopNum).MaxVolFlowRate * SteamDensity; StartEnthalpy = FluidProperties::GetSatEnthalpyRefrig( state, fluidNameSteam, LoopSetPointTemp, 0.0, state.dataPlnt->PlantLoop(LoopNum).FluidIndex, RoutineName); @@ -3381,10 +3381,10 @@ void SizePlantLoop(EnergyPlusData &state, state, state.dataPlnt->PlantLoop(LoopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(LoopNum).FluidIndex, RoutineName); if (PlantSizNum > 0 && allocated(state.dataSize->PlantSizData)) { // method only works if sizing delta T is avaiable Real64 cp = FluidProperties::GetSpecificHeatGlycol(state, - state.dataPlnt->PlantLoop(LoopNum).FluidName, - Constant::InitConvTemp, - state.dataPlnt->PlantLoop(LoopNum).FluidIndex, - RoutineName); + state.dataPlnt->PlantLoop(LoopNum).FluidName, + Constant::InitConvTemp, + state.dataPlnt->PlantLoop(LoopNum).FluidIndex, + RoutineName); Real64 DesignPlantCapacity = cp * FluidDensity * state.dataSize->PlantSizData(PlantSizNum).DesVolFlowRate * state.dataSize->PlantSizData(PlantSizNum).DeltaT; state.dataSize->PlantSizData(PlantSizNum).DesCapacity = DesignPlantCapacity; // store it for later use in scaling @@ -3393,7 +3393,8 @@ void SizePlantLoop(EnergyPlusData &state, } } } else if (state.dataPlnt->PlantLoop(LoopNum).FluidType == DataLoopNode::NodeFluidType::Steam) { - FluidDensity = FluidProperties::GetSatDensityRefrig(state, fluidNameSteam, 100.0, 1.0, state.dataPlnt->PlantLoop(LoopNum).FluidIndex, RoutineName); + FluidDensity = + FluidProperties::GetSatDensityRefrig(state, fluidNameSteam, 100.0, 1.0, state.dataPlnt->PlantLoop(LoopNum).FluidIndex, RoutineName); } else { assert(false); } @@ -3527,7 +3528,8 @@ void ResizePlantLoopLevelSizes(EnergyPlusData &state, int const LoopNum // Suppl FluidDensity = FluidProperties::GetDensityGlycol( state, state.dataPlnt->PlantLoop(LoopNum).FluidName, Constant::InitConvTemp, state.dataPlnt->PlantLoop(LoopNum).FluidIndex, RoutineName); } else if (state.dataPlnt->PlantLoop(LoopNum).FluidType == DataLoopNode::NodeFluidType::Steam) { - FluidDensity = FluidProperties::GetSatDensityRefrig(state, fluidNameSteam, 100.0, 1.0, state.dataPlnt->PlantLoop(LoopNum).FluidIndex, RoutineName); + FluidDensity = + FluidProperties::GetSatDensityRefrig(state, fluidNameSteam, 100.0, 1.0, state.dataPlnt->PlantLoop(LoopNum).FluidIndex, RoutineName); } else { assert(false); } diff --git a/src/EnergyPlus/PoweredInductionUnits.cc b/src/EnergyPlus/PoweredInductionUnits.cc index b293743f045..07523f92033 100644 --- a/src/EnergyPlus/PoweredInductionUnits.cc +++ b/src/EnergyPlus/PoweredInductionUnits.cc @@ -724,10 +724,10 @@ void InitPIU(EnergyPlusData &state, // plant upgrade note? why no separate handling of steam coil? add it ? // local plant fluid density Real64 const rho = FluidProperties::GetDensityGlycol(state, - state.dataPlnt->PlantLoop(thisPIU.HWplantLoc.loopNum).FluidName, - Constant::HWInitConvTemp, - state.dataPlnt->PlantLoop(thisPIU.HWplantLoc.loopNum).FluidIndex, - RoutineName); + state.dataPlnt->PlantLoop(thisPIU.HWplantLoc.loopNum).FluidName, + Constant::HWInitConvTemp, + state.dataPlnt->PlantLoop(thisPIU.HWplantLoc.loopNum).FluidIndex, + RoutineName); thisPIU.MaxHotWaterFlow = rho * thisPIU.MaxVolHotWaterFlow; thisPIU.MinHotWaterFlow = rho * thisPIU.MinVolHotWaterFlow; @@ -1308,12 +1308,12 @@ void SizePIU(EnergyPlusData &state, int const PIUNum) DesCoilLoad = PsyCpAirFnW(CoilOutHumRat) * DesMassFlow * (CoilOutTemp - CoilInTemp); Real64 constexpr TempSteamIn = 100.00; Real64 const EnthSteamInDry = - FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 1.0, thisPIU.HCoil_FluidIndex, RoutineName); + FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 1.0, thisPIU.HCoil_FluidIndex, RoutineName); Real64 const EnthSteamOutWet = - FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 0.0, thisPIU.HCoil_FluidIndex, RoutineName); + FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 0.0, thisPIU.HCoil_FluidIndex, RoutineName); Real64 const LatentHeatSteam = EnthSteamInDry - EnthSteamOutWet; Real64 const SteamDensity = - FluidProperties::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, thisPIU.HCoil_FluidIndex, RoutineName); + FluidProperties::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, thisPIU.HCoil_FluidIndex, RoutineName); int DummyWaterIndex = 1; Real64 const Cp = GetSpecificHeatGlycol( state, fluidNameWater, state.dataSize->PlantSizData(PltSizHeatNum).ExitTemp, DummyWaterIndex, RoutineName); diff --git a/src/EnergyPlus/SingleDuct.cc b/src/EnergyPlus/SingleDuct.cc index 594d1ecdd44..f00564541db 100644 --- a/src/EnergyPlus/SingleDuct.cc +++ b/src/EnergyPlus/SingleDuct.cc @@ -2566,10 +2566,10 @@ void SingleDuctAirTerminal::InitSys(EnergyPlusData &state, bool const FirstHVACI if (this->HWplantLoc.loopNum > 0 && this->ReheatComp_Num != HeatingCoilType::SteamAirHeating) { // protect early calls before plant is setup rho = FluidProperties::GetDensityGlycol(state, - state.dataPlnt->PlantLoop(this->HWplantLoc.loopNum).FluidName, - Constant::HWInitConvTemp, - state.dataPlnt->PlantLoop(this->HWplantLoc.loopNum).FluidIndex, - RoutineName); + state.dataPlnt->PlantLoop(this->HWplantLoc.loopNum).FluidName, + Constant::HWInitConvTemp, + state.dataPlnt->PlantLoop(this->HWplantLoc.loopNum).FluidIndex, + RoutineName); } else { rho = 1000.0; } @@ -3638,10 +3638,13 @@ void SingleDuctAirTerminal::SizeSys(EnergyPlusData &state) (state.dataSingleDuct->ZoneDesTempSS - state.dataSingleDuct->CoilInTempSS); if (state.dataSingleDuct->DesCoilLoadSS >= SmallLoad) { TempSteamIn = 100.00; - EnthSteamInDry = FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 1.0, this->FluidIndex, RoutineNameFull); - EnthSteamOutWet = FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 0.0, this->FluidIndex, RoutineNameFull); + EnthSteamInDry = + FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 1.0, this->FluidIndex, RoutineNameFull); + EnthSteamOutWet = + FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 0.0, this->FluidIndex, RoutineNameFull); LatentHeatSteam = EnthSteamInDry - EnthSteamOutWet; - SteamDensity = FluidProperties::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, this->FluidIndex, RoutineNameFull); + SteamDensity = + FluidProperties::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, this->FluidIndex, RoutineNameFull); Cp = GetSpecificHeatGlycol(state, fluidNameWater, diff --git a/src/EnergyPlus/SteamCoils.cc b/src/EnergyPlus/SteamCoils.cc index 0067af18d0a..7362e912db3 100644 --- a/src/EnergyPlus/SteamCoils.cc +++ b/src/EnergyPlus/SteamCoils.cc @@ -1115,10 +1115,10 @@ namespace SteamCoils { // Steam heat exchangers would not have effectivness, since all of the steam is // converted to water and only then the steam trap allows it to leave the heat // exchanger, subsequently heat exchange is latent heat + subcooling. - EnthSteamInDry = - FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 1.0, state.dataSteamCoils->SteamCoil(CoilNum).FluidIndex, RoutineName); - EnthSteamOutWet = - FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 0.0, state.dataSteamCoils->SteamCoil(CoilNum).FluidIndex, RoutineName); + EnthSteamInDry = FluidProperties::GetSatEnthalpyRefrig( + state, fluidNameSteam, TempSteamIn, 1.0, state.dataSteamCoils->SteamCoil(CoilNum).FluidIndex, RoutineName); + EnthSteamOutWet = FluidProperties::GetSatEnthalpyRefrig( + state, fluidNameSteam, TempSteamIn, 0.0, state.dataSteamCoils->SteamCoil(CoilNum).FluidIndex, RoutineName); LatentHeatSteam = EnthSteamInDry - EnthSteamOutWet; @@ -1186,9 +1186,9 @@ namespace SteamCoils { TempLoopOutToPump = TempWaterAtmPress - state.dataSteamCoils->SteamCoil(CoilNum).LoopSubcoolReturn; // Actual Steam Coil Outlet Enthalpy - EnthCoilOutlet = - FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 0.0, state.dataSteamCoils->SteamCoil(CoilNum).FluidIndex, RoutineName) - - CpWater * SubcoolDeltaTemp; + EnthCoilOutlet = FluidProperties::GetSatEnthalpyRefrig( + state, fluidNameSteam, TempSteamIn, 0.0, state.dataSteamCoils->SteamCoil(CoilNum).FluidIndex, RoutineName) - + CpWater * SubcoolDeltaTemp; // Enthalpy at Point 4 EnthAtAtmPress = FluidProperties::GetSatEnthalpyRefrig( @@ -1230,10 +1230,10 @@ namespace SteamCoils { // Steam heat exchangers would not have effectivness, since all of the steam is // converted to water and only then the steam trap allows it to leave the heat // exchanger, subsequently heat exchange is latent heat + subcooling. - EnthSteamInDry = - FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 1.0, state.dataSteamCoils->SteamCoil(CoilNum).FluidIndex, RoutineName); - EnthSteamOutWet = - FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 0.0, state.dataSteamCoils->SteamCoil(CoilNum).FluidIndex, RoutineName); + EnthSteamInDry = FluidProperties::GetSatEnthalpyRefrig( + state, fluidNameSteam, TempSteamIn, 1.0, state.dataSteamCoils->SteamCoil(CoilNum).FluidIndex, RoutineName); + EnthSteamOutWet = FluidProperties::GetSatEnthalpyRefrig( + state, fluidNameSteam, TempSteamIn, 0.0, state.dataSteamCoils->SteamCoil(CoilNum).FluidIndex, RoutineName); LatentHeatSteam = EnthSteamInDry - EnthSteamOutWet; // CpWater = GetSpecificHeatGlycol('WATER', & diff --git a/src/EnergyPlus/UnitHeater.cc b/src/EnergyPlus/UnitHeater.cc index 8631437f9dc..6b3632bba03 100644 --- a/src/EnergyPlus/UnitHeater.cc +++ b/src/EnergyPlus/UnitHeater.cc @@ -1268,13 +1268,13 @@ namespace UnitHeater { } if (DesCoilLoad >= SmallLoad) { TempSteamIn = 100.00; - EnthSteamInDry = - FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 1.0, state.dataUnitHeaters->RefrigIndex, RoutineName); - EnthSteamOutWet = - FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 0.0, state.dataUnitHeaters->RefrigIndex, RoutineName); + EnthSteamInDry = FluidProperties::GetSatEnthalpyRefrig( + state, fluidNameSteam, TempSteamIn, 1.0, state.dataUnitHeaters->RefrigIndex, RoutineName); + EnthSteamOutWet = FluidProperties::GetSatEnthalpyRefrig( + state, fluidNameSteam, TempSteamIn, 0.0, state.dataUnitHeaters->RefrigIndex, RoutineName); LatentHeatSteam = EnthSteamInDry - EnthSteamOutWet; - SteamDensity = - FluidProperties::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, state.dataUnitHeaters->RefrigIndex, RoutineName); + SteamDensity = FluidProperties::GetSatDensityRefrig( + state, fluidNameSteam, TempSteamIn, 1.0, state.dataUnitHeaters->RefrigIndex, RoutineName); MaxVolHotSteamFlowDes = DesCoilLoad / (SteamDensity * (LatentHeatSteam + state.dataSize->PlantSizData(PltSizHeatNum).DeltaT * CPHW(state.dataSize->PlantSizData(PltSizHeatNum).ExitTemp))); diff --git a/src/EnergyPlus/UtilityRoutines.cc b/src/EnergyPlus/UtilityRoutines.cc index e81815be352..e8c9af463f7 100644 --- a/src/EnergyPlus/UtilityRoutines.cc +++ b/src/EnergyPlus/UtilityRoutines.cc @@ -1234,8 +1234,8 @@ void ShowRecurringSevereErrorAtEnd(EnergyPlusData &state, void ShowRecurringSevereErrorAtEnd(EnergyPlusData &state, std::string const &Message, // Message automatically written to "error file" at end of simulation int &MsgIndex, // Recurring message index, if zero, next available index is assigned - Real64 const val, - std::string const &units // optional char string (<=15 length) of units for sum value + Real64 const val, + std::string const &units // optional char string (<=15 length) of units for sum value ) { @@ -1339,8 +1339,8 @@ void ShowRecurringWarningErrorAtEnd(EnergyPlusData &state, void ShowRecurringWarningErrorAtEnd(EnergyPlusData &state, std::string const &Message, // Message automatically written to "error file" at end of simulation int &MsgIndex, // Recurring message index, if zero, next available index is assigned - Real64 const val, - std::string const &units // optional char string (<=15 length) of units for sum value + Real64 const val, + std::string const &units // optional char string (<=15 length) of units for sum value ) { @@ -1385,7 +1385,7 @@ void ShowRecurringWarningErrorAtEnd(EnergyPlusData &state, ++state.dataErrTracking->TotalWarningErrors; StoreRecurringErrorMessage(state, " ** Warning ** " + Message, MsgIndex, val, val, _, units, units, ""); } - + void ShowRecurringContinueErrorAtEnd(EnergyPlusData &state, std::string const &Message, // Message automatically written to "error file" at end of simulation int &MsgIndex, // Recurring message index, if zero, next available index is assigned diff --git a/src/EnergyPlus/UtilityRoutines.hh b/src/EnergyPlus/UtilityRoutines.hh index 9671a9f6e86..b8b360bc323 100644 --- a/src/EnergyPlus/UtilityRoutines.hh +++ b/src/EnergyPlus/UtilityRoutines.hh @@ -163,13 +163,11 @@ void ShowWarningMessage(EnergyPlusData &state, OptionalOutputFileRef OutUnit1 = {}, OptionalOutputFileRef OutUnit2 = {}); -void ShowRecurringSevereErrorAtEnd( - EnergyPlusData &state, - std::string const &Message, // Message automatically written to "error file" at end of simulation - int &MsgIndex, // Recurring message index, if zero, next available index is assigned - Real64 const val, // Track and report the max of the values passed to this argument - std::string const &units -); +void ShowRecurringSevereErrorAtEnd(EnergyPlusData &state, + std::string const &Message, // Message automatically written to "error file" at end of simulation + int &MsgIndex, // Recurring message index, if zero, next available index is assigned + Real64 const val, // Track and report the max of the values passed to this argument + std::string const &units); void ShowRecurringSevereErrorAtEnd( EnergyPlusData &state, @@ -183,12 +181,11 @@ void ShowRecurringSevereErrorAtEnd( std::string const &ReportSumUnits = "" // optional char string (<=15 length) of units for sum value ); -void ShowRecurringWarningErrorAtEnd( - EnergyPlusData &state, - std::string const &Message, // Message automatically written to "error file" at end of simulation - int &MsgIndex, // Recurring message index, if zero, next available index is assigned - Real64 const val, - std::string const &units // optional char string (<=15 length) of units for sum value +void ShowRecurringWarningErrorAtEnd(EnergyPlusData &state, + std::string const &Message, // Message automatically written to "error file" at end of simulation + int &MsgIndex, // Recurring message index, if zero, next available index is assigned + Real64 const val, + std::string const &units // optional char string (<=15 length) of units for sum value ); void ShowRecurringWarningErrorAtEnd( @@ -241,7 +238,7 @@ struct ErrorCountIndex int index = 0; int count = 0; }; - + struct ErrorObjectHeader { std::string_view routineName; diff --git a/src/EnergyPlus/VentilatedSlab.cc b/src/EnergyPlus/VentilatedSlab.cc index 3b10ee75a21..2a8440e0733 100644 --- a/src/EnergyPlus/VentilatedSlab.cc +++ b/src/EnergyPlus/VentilatedSlab.cc @@ -1707,7 +1707,8 @@ namespace VentilatedSlab { if (ventSlab.heatingCoilType == DataPlant::PlantEquipmentType::CoilSteamAirHeating && !state.dataVentilatedSlab->MyPlantScanFlag(Item)) { TempSteamIn = 100.00; - SteamDensity = FluidProperties::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, ventSlab.heatingCoil_FluidIndex, RoutineName); + SteamDensity = + FluidProperties::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, ventSlab.heatingCoil_FluidIndex, RoutineName); ventSlab.MaxHotSteamFlow = SteamDensity * ventSlab.MaxVolHotSteamFlow; ventSlab.MinHotSteamFlow = SteamDensity * ventSlab.MinVolHotSteamFlow; @@ -2344,13 +2345,13 @@ namespace VentilatedSlab { DesCoilLoad = sizerHeatingCapacity.size(state, TempSize, ErrorsFound); } TempSteamIn = 100.00; - EnthSteamInDry = - FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 1.0, ventSlab.heatingCoil_FluidIndex, RoutineName); - EnthSteamOutWet = - FluidProperties::GetSatEnthalpyRefrig(state, fluidNameSteam, TempSteamIn, 0.0, ventSlab.heatingCoil_FluidIndex, RoutineName); + EnthSteamInDry = FluidProperties::GetSatEnthalpyRefrig( + state, fluidNameSteam, TempSteamIn, 1.0, ventSlab.heatingCoil_FluidIndex, RoutineName); + EnthSteamOutWet = FluidProperties::GetSatEnthalpyRefrig( + state, fluidNameSteam, TempSteamIn, 0.0, ventSlab.heatingCoil_FluidIndex, RoutineName); LatentHeatSteam = EnthSteamInDry - EnthSteamOutWet; - SteamDensity = - FluidProperties::GetSatDensityRefrig(state, fluidNameSteam, TempSteamIn, 1.0, ventSlab.heatingCoil_FluidIndex, RoutineName); + SteamDensity = FluidProperties::GetSatDensityRefrig( + state, fluidNameSteam, TempSteamIn, 1.0, ventSlab.heatingCoil_FluidIndex, RoutineName); Cp = GetSpecificHeatGlycol(state, fluidNameWater, Constant::HWInitConvTemp, DummyWaterIndex, RoutineName); rho = GetDensityGlycol(state, fluidNameWater, Constant::HWInitConvTemp, DummyWaterIndex, RoutineName); MaxVolHotSteamFlowDes = diff --git a/src/EnergyPlus/WaterToAirHeatPump.cc b/src/EnergyPlus/WaterToAirHeatPump.cc index 32c55f30d84..ed06f4cd8ef 100644 --- a/src/EnergyPlus/WaterToAirHeatPump.cc +++ b/src/EnergyPlus/WaterToAirHeatPump.cc @@ -127,7 +127,7 @@ namespace WaterToAirHeatPump { int HPNum; // The WatertoAirHP that you are currently loading input into // Obtains and Allocates WatertoAirHP related parameters from input file - if (state.dataWaterToAirHeatPump->GetCoilsInputFlag) { // First time subroutine has been entered + if (state.dataWaterToAirHeatPump->GetCoilsInputFlag) { // First time subroutine has been entered state.dataWaterToAirHeatPump->WaterIndex = FluidProperties::GetGlycolNum(state, fluidNameWater); // Initialize the WaterIndex once GetWatertoAirHPInput(state); state.dataWaterToAirHeatPump->GetCoilsInputFlag = false; @@ -1325,9 +1325,9 @@ namespace WaterToAirHeatPump { LoadSideAirInletEnth_Unit = PsyHFnTdbW(heatPump.InletAirDBTemp, heatPump.InletAirHumRat); SourceSideFluidName = state.dataPlnt->PlantLoop(heatPump.plantLoc.loopNum).FluidName; SourceSideFluidIndex = state.dataPlnt->PlantLoop(heatPump.plantLoc.loopNum).FluidIndex; - SourceSideVolFlowRate = - heatPump.InletWaterMassFlowRate / - FluidProperties::GetDensityGlycol(state, SourceSideFluidName, heatPump.InletWaterTemp, SourceSideFluidIndex, RoutineNameSourceSideInletTemp); + SourceSideVolFlowRate = heatPump.InletWaterMassFlowRate / + FluidProperties::GetDensityGlycol( + state, SourceSideFluidName, heatPump.InletWaterTemp, SourceSideFluidIndex, RoutineNameSourceSideInletTemp); StillSimulatingFlag = true; @@ -1554,11 +1554,11 @@ namespace WaterToAirHeatPump { // Determine the Enthalpy of the Superheated Fluid at Load Side Outlet/Compressor Inlet SuperHeatEnth = FluidProperties::GetSupHeatEnthalpyRefrig(state, - heatPump.Refrigerant, - CompressInletTemp, - LoadSidePressure, - state.dataWaterToAirHeatPump->RefrigIndex, - RoutineNameCompressInletTemp); + heatPump.Refrigerant, + CompressInletTemp, + LoadSidePressure, + state.dataWaterToAirHeatPump->RefrigIndex, + RoutineNameCompressInletTemp); // Determining the suction state of the fluid from inlet state involves interation // Method employed... @@ -1577,7 +1577,8 @@ namespace WaterToAirHeatPump { static constexpr std::string_view RoutineName("CalcWaterToAirHPHeating:CalcCompSuctionTemp"); std::string Refrigerant; // Name of refrigerant int refrigIndex = state.dataWaterToAirHeatPump->RefrigIndex; - Real64 compSuctionEnth = FluidProperties::GetSupHeatEnthalpyRefrig(state, Refrigerant, CompSuctionTemp, SuctionPr, refrigIndex, RoutineName); + Real64 compSuctionEnth = + FluidProperties::GetSupHeatEnthalpyRefrig(state, Refrigerant, CompSuctionTemp, SuctionPr, refrigIndex, RoutineName); return (compSuctionEnth - SuperHeatEnth) / SuperHeatEnth; }; @@ -1588,17 +1589,17 @@ namespace WaterToAirHeatPump { return; } CompSuctionEnth = FluidProperties::GetSupHeatEnthalpyRefrig(state, - heatPump.Refrigerant, - state.dataWaterToAirHeatPump->CompSuctionTemp, - SuctionPr, - state.dataWaterToAirHeatPump->RefrigIndex, - RoutineNameCompSuctionTemp); + heatPump.Refrigerant, + state.dataWaterToAirHeatPump->CompSuctionTemp, + SuctionPr, + state.dataWaterToAirHeatPump->RefrigIndex, + RoutineNameCompSuctionTemp); CompSuctionDensity = FluidProperties::GetSupHeatDensityRefrig(state, - heatPump.Refrigerant, - state.dataWaterToAirHeatPump->CompSuctionTemp, - SuctionPr, - state.dataWaterToAirHeatPump->RefrigIndex, - RoutineNameCompSuctionTemp); + heatPump.Refrigerant, + state.dataWaterToAirHeatPump->CompSuctionTemp, + SuctionPr, + state.dataWaterToAirHeatPump->RefrigIndex, + RoutineNameCompSuctionTemp); // Find Refrigerant Flow Rate switch (heatPump.compressorType) { @@ -1840,9 +1841,9 @@ namespace WaterToAirHeatPump { CpAir = PsyCpAirFnW(heatPump.InletAirHumRat); SourceSideFluidName = state.dataPlnt->PlantLoop(heatPump.plantLoc.loopNum).FluidName; SourceSideFluidIndex = state.dataPlnt->PlantLoop(heatPump.plantLoc.loopNum).FluidIndex; - SourceSideVolFlowRate = - heatPump.InletWaterMassFlowRate / - FluidProperties::GetDensityGlycol(state, SourceSideFluidName, heatPump.InletWaterTemp, SourceSideFluidIndex, RoutineNameSourceSideInletTemp); + SourceSideVolFlowRate = heatPump.InletWaterMassFlowRate / + FluidProperties::GetDensityGlycol( + state, SourceSideFluidName, heatPump.InletWaterTemp, SourceSideFluidIndex, RoutineNameSourceSideInletTemp); // If heat pump is not operating, return if (SensDemand == 0.0 || heatPump.InletAirMassFlowRate <= 0.0 || heatPump.InletWaterMassFlowRate <= 0.0) { @@ -1901,8 +1902,8 @@ namespace WaterToAirHeatPump { } // Determine Effectiveness of Source Side - CpFluid = - FluidProperties::GetSpecificHeatGlycol(state, SourceSideFluidName, heatPump.InletWaterTemp, SourceSideFluidIndex, RoutineNameSourceSideInletTemp); + CpFluid = FluidProperties::GetSpecificHeatGlycol( + state, SourceSideFluidName, heatPump.InletWaterTemp, SourceSideFluidIndex, RoutineNameSourceSideInletTemp); // IF (SourceSideFluidName=='WATER') THEN if (SourceSideFluidIndex == state.dataWaterToAirHeatPump->WaterIndex) { @@ -2001,11 +2002,11 @@ namespace WaterToAirHeatPump { // Determine the Enathalpy of the Superheated Fluid at Source Side Outlet/Compressor Inlet SuperHeatEnth = FluidProperties::GetSupHeatEnthalpyRefrig(state, - heatPump.Refrigerant, - CompressInletTemp, - SourceSidePressure, - state.dataWaterToAirHeatPump->RefrigIndex, - RoutineNameCompressInletTemp); + heatPump.Refrigerant, + CompressInletTemp, + SourceSidePressure, + state.dataWaterToAirHeatPump->RefrigIndex, + RoutineNameCompressInletTemp); // Determining the suction state of the fluid from inlet state involves interation // Method employed... @@ -2013,7 +2014,7 @@ namespace WaterToAirHeatPump { // check that with the inlet enthalpy ( as suction loss is isenthalpic). Iterate till desired accuracy is reached if (!Converged) { - CompSuctionSatTemp = FluidProperties::GetSatTemperatureRefrig( + CompSuctionSatTemp = FluidProperties::GetSatTemperatureRefrig( state, heatPump.Refrigerant, SuctionPr, state.dataWaterToAirHeatPump->RefrigIndex, RoutineNameSuctionPr); CompSuctionTemp1 = CompSuctionSatTemp; @@ -2048,7 +2049,8 @@ namespace WaterToAirHeatPump { static constexpr std::string_view RoutineName("CalcWaterToAirHPHeating:CalcCompSuctionTemp"); std::string Refrigerant; // Name of refrigerant int refrigIndex = state.dataWaterToAirHeatPump->RefrigIndex; - Real64 compSuctionEnth = FluidProperties::GetSupHeatEnthalpyRefrig(state, Refrigerant, CompSuctionTemp, SuctionPr, refrigIndex, RoutineName); + Real64 compSuctionEnth = + FluidProperties::GetSupHeatEnthalpyRefrig(state, Refrigerant, CompSuctionTemp, SuctionPr, refrigIndex, RoutineName); return (compSuctionEnth - SuperHeatEnth) / SuperHeatEnth; }; @@ -2516,7 +2518,7 @@ namespace WaterToAirHeatPump { int WhichCoil; // Obtains and Allocates WatertoAirHP related parameters from input file - if (state.dataWaterToAirHeatPump->GetCoilsInputFlag) { // First time subroutine has been entered + if (state.dataWaterToAirHeatPump->GetCoilsInputFlag) { // First time subroutine has been entered state.dataWaterToAirHeatPump->WaterIndex = FluidProperties::GetGlycolNum(state, fluidNameWater); // Initialize the WaterIndex once GetWatertoAirHPInput(state); state.dataWaterToAirHeatPump->GetCoilsInputFlag = false; diff --git a/tst/EnergyPlus/unit/FluidProperties.unit.cc b/tst/EnergyPlus/unit/FluidProperties.unit.cc index 631475993fd..0c883e902da 100644 --- a/tst/EnergyPlus/unit/FluidProperties.unit.cc +++ b/tst/EnergyPlus/unit/FluidProperties.unit.cc @@ -142,12 +142,12 @@ TEST_F(EnergyPlusFixture, FluidProperties_InterpValuesForGlycolConc) // Test interpolation for the single-concentration scenario FluidProperties::InterpValuesForGlycolConc(*state, - NumCon, // number of concentrations (dimension of raw data) - NumTemp, // number of temperatures (dimension of raw data) - ConData, // concentrations for raw data - PropData, // raw property data (temperature,concentration) - ActCon, // concentration of actual fluid mix - Result); // interpolated output data at proper concentration + NumCon, // number of concentrations (dimension of raw data) + NumTemp, // number of temperatures (dimension of raw data) + ConData, // concentrations for raw data + PropData, // raw property data (temperature,concentration) + ActCon, // concentration of actual fluid mix + Result); // interpolated output data at proper concentration EXPECT_NEAR(1020.0, Result(1), 1e-6); EXPECT_NEAR(1010.0, Result(2), 1e-6); diff --git a/tst/EnergyPlus/unit/HVACVariableRefrigerantFlow.unit.cc b/tst/EnergyPlus/unit/HVACVariableRefrigerantFlow.unit.cc index f26b98a19f8..f26620cf1a4 100644 --- a/tst/EnergyPlus/unit/HVACVariableRefrigerantFlow.unit.cc +++ b/tst/EnergyPlus/unit/HVACVariableRefrigerantFlow.unit.cc @@ -5867,25 +5867,25 @@ TEST_F(EnergyPlusFixture, VRFTest_SysCurve_WaterCooled) EXPECT_NEAR(SysOutputProvided, state->dataZoneEnergyDemand->ZoneSysEnergyDemand(CurZoneNum).RemainingOutputReqToCoolSP, 1.0); rho = FluidProperties::GetDensityGlycol(*state, - state->dataPlnt->PlantLoop(state->dataHVACVarRefFlow->VRF(VRFCond).SourcePlantLoc.loopNum).FluidName, - state->dataSize->PlantSizData(1).ExitTemp, - state->dataPlnt->PlantLoop(state->dataHVACVarRefFlow->VRF(VRFCond).SourcePlantLoc.loopNum).FluidIndex, - RoutineName); + state->dataPlnt->PlantLoop(state->dataHVACVarRefFlow->VRF(VRFCond).SourcePlantLoc.loopNum).FluidName, + state->dataSize->PlantSizData(1).ExitTemp, + state->dataPlnt->PlantLoop(state->dataHVACVarRefFlow->VRF(VRFCond).SourcePlantLoc.loopNum).FluidIndex, + RoutineName); Cp = FluidProperties::GetSpecificHeatGlycol(*state, - state->dataPlnt->PlantLoop(state->dataHVACVarRefFlow->VRF(VRFCond).SourcePlantLoc.loopNum).FluidName, - state->dataSize->PlantSizData(1).ExitTemp, - state->dataPlnt->PlantLoop(state->dataHVACVarRefFlow->VRF(VRFCond).SourcePlantLoc.loopNum).FluidIndex, - RoutineName); + state->dataPlnt->PlantLoop(state->dataHVACVarRefFlow->VRF(VRFCond).SourcePlantLoc.loopNum).FluidName, + state->dataSize->PlantSizData(1).ExitTemp, + state->dataPlnt->PlantLoop(state->dataHVACVarRefFlow->VRF(VRFCond).SourcePlantLoc.loopNum).FluidIndex, + RoutineName); CondVolFlowRate = max(state->dataHVACVarRefFlow->VRF(VRFCond).CoolingCapacity, state->dataHVACVarRefFlow->VRF(VRFCond).HeatingCapacity) / (state->dataSize->PlantSizData(1).DeltaT * Cp * rho); EXPECT_DOUBLE_EQ(CondVolFlowRate, state->dataHVACVarRefFlow->VRF(VRFCond).WaterCondVolFlowRate); rho = FluidProperties::GetDensityGlycol(*state, - state->dataPlnt->PlantLoop(state->dataHVACVarRefFlow->VRF(VRFCond).SourcePlantLoc.loopNum).FluidName, - Constant::InitConvTemp, - state->dataPlnt->PlantLoop(state->dataHVACVarRefFlow->VRF(VRFCond).SourcePlantLoc.loopNum).FluidIndex, - RoutineName); + state->dataPlnt->PlantLoop(state->dataHVACVarRefFlow->VRF(VRFCond).SourcePlantLoc.loopNum).FluidName, + Constant::InitConvTemp, + state->dataPlnt->PlantLoop(state->dataHVACVarRefFlow->VRF(VRFCond).SourcePlantLoc.loopNum).FluidIndex, + RoutineName); EXPECT_DOUBLE_EQ(state->dataHVACVarRefFlow->VRF(VRFCond).WaterCondenserDesignMassFlow, (state->dataHVACVarRefFlow->VRF(VRFCond).WaterCondVolFlowRate * rho)); diff --git a/tst/EnergyPlus/unit/LowTempRadiantSystem.unit.cc b/tst/EnergyPlus/unit/LowTempRadiantSystem.unit.cc index 62898efe817..6bf1a8c30dd 100644 --- a/tst/EnergyPlus/unit/LowTempRadiantSystem.unit.cc +++ b/tst/EnergyPlus/unit/LowTempRadiantSystem.unit.cc @@ -1203,28 +1203,32 @@ TEST_F(LowTempRadiantSystemTest, AutosizeLowTempRadiantVariableFlowTest) CoolingCapacity = state->dataSize->FinalZoneSizing(state->dataSize->CurZoneEqNum).NonAirSysDesCoolLoad * state->dataLowTempRadSys->HydrRadSys(RadSysNum).ScaledCoolingCapacity; // hot water flow rate sizing calculation - Density = FluidProperties::GetDensityGlycol(*state, - state->dataPlnt->PlantLoop(state->dataLowTempRadSys->HydrRadSys(RadSysNum).HWPlantLoc.loopNum).FluidName, - 60.0, - state->dataPlnt->PlantLoop(state->dataLowTempRadSys->HydrRadSys(RadSysNum).HWPlantLoc.loopNum).FluidIndex, - "AutosizeLowTempRadiantVariableFlowTest"); - Cp = FluidProperties::GetSpecificHeatGlycol(*state, - state->dataPlnt->PlantLoop(state->dataLowTempRadSys->HydrRadSys(RadSysNum).HWPlantLoc.loopNum).FluidName, - 60.0, - state->dataPlnt->PlantLoop(state->dataLowTempRadSys->HydrRadSys(RadSysNum).HWPlantLoc.loopNum).FluidIndex, - "AutosizeLowTempRadiantVariableFlowTest"); + Density = + FluidProperties::GetDensityGlycol(*state, + state->dataPlnt->PlantLoop(state->dataLowTempRadSys->HydrRadSys(RadSysNum).HWPlantLoc.loopNum).FluidName, + 60.0, + state->dataPlnt->PlantLoop(state->dataLowTempRadSys->HydrRadSys(RadSysNum).HWPlantLoc.loopNum).FluidIndex, + "AutosizeLowTempRadiantVariableFlowTest"); + Cp = FluidProperties::GetSpecificHeatGlycol( + *state, + state->dataPlnt->PlantLoop(state->dataLowTempRadSys->HydrRadSys(RadSysNum).HWPlantLoc.loopNum).FluidName, + 60.0, + state->dataPlnt->PlantLoop(state->dataLowTempRadSys->HydrRadSys(RadSysNum).HWPlantLoc.loopNum).FluidIndex, + "AutosizeLowTempRadiantVariableFlowTest"); HotWaterFlowRate = HeatingCapacity / (state->dataSize->PlantSizData(1).DeltaT * Cp * Density); // chilled water flow rate sizing calculation - Density = FluidProperties::GetDensityGlycol(*state, - state->dataPlnt->PlantLoop(state->dataLowTempRadSys->HydrRadSys(RadSysNum).CWPlantLoc.loopNum).FluidName, - 5.05, - state->dataPlnt->PlantLoop(state->dataLowTempRadSys->HydrRadSys(RadSysNum).CWPlantLoc.loopNum).FluidIndex, - "AutosizeLowTempRadiantVariableFlowTest"); - Cp = FluidProperties::GetSpecificHeatGlycol(*state, - state->dataPlnt->PlantLoop(state->dataLowTempRadSys->HydrRadSys(RadSysNum).CWPlantLoc.loopNum).FluidName, - 5.05, - state->dataPlnt->PlantLoop(state->dataLowTempRadSys->HydrRadSys(RadSysNum).CWPlantLoc.loopNum).FluidIndex, - "AutosizeLowTempRadiantVariableFlowTest"); + Density = + FluidProperties::GetDensityGlycol(*state, + state->dataPlnt->PlantLoop(state->dataLowTempRadSys->HydrRadSys(RadSysNum).CWPlantLoc.loopNum).FluidName, + 5.05, + state->dataPlnt->PlantLoop(state->dataLowTempRadSys->HydrRadSys(RadSysNum).CWPlantLoc.loopNum).FluidIndex, + "AutosizeLowTempRadiantVariableFlowTest"); + Cp = FluidProperties::GetSpecificHeatGlycol( + *state, + state->dataPlnt->PlantLoop(state->dataLowTempRadSys->HydrRadSys(RadSysNum).CWPlantLoc.loopNum).FluidName, + 5.05, + state->dataPlnt->PlantLoop(state->dataLowTempRadSys->HydrRadSys(RadSysNum).CWPlantLoc.loopNum).FluidIndex, + "AutosizeLowTempRadiantVariableFlowTest"); ChilledWaterFlowRate = CoolingCapacity / (state->dataSize->PlantSizData(2).DeltaT * Cp * Density); // tuble length sizing calculation state->dataLowTempRadSys->HydrRadSys(RadSysNum).TotalSurfaceArea = @@ -2634,16 +2638,18 @@ TEST_F(LowTempRadiantSystemTest, LowTempRadConFlowSystemAutoSizeTempTest) state->dataSize->FinalZoneSizing(state->dataSize->CurZoneEqNum).NonAirSysDesCoolLoad = 1000.0; // hot water volume flow rate sizing calculation - Density = FluidProperties::GetDensityGlycol(*state, - state->dataPlnt->PlantLoop(state->dataLowTempRadSys->CFloRadSys(RadSysNum).HWPlantLoc.loopNum).FluidName, - 60.0, - state->dataPlnt->PlantLoop(state->dataLowTempRadSys->CFloRadSys(RadSysNum).HWPlantLoc.loopNum).FluidIndex, - "LowTempRadConFlowSystemAutoSizeTempTest"); - Cp = FluidProperties::GetSpecificHeatGlycol(*state, - state->dataPlnt->PlantLoop(state->dataLowTempRadSys->CFloRadSys(RadSysNum).HWPlantLoc.loopNum).FluidName, - 60.0, - state->dataPlnt->PlantLoop(state->dataLowTempRadSys->CFloRadSys(RadSysNum).HWPlantLoc.loopNum).FluidIndex, - "LowTempRadConFlowSystemAutoSizeTempTest"); + Density = + FluidProperties::GetDensityGlycol(*state, + state->dataPlnt->PlantLoop(state->dataLowTempRadSys->CFloRadSys(RadSysNum).HWPlantLoc.loopNum).FluidName, + 60.0, + state->dataPlnt->PlantLoop(state->dataLowTempRadSys->CFloRadSys(RadSysNum).HWPlantLoc.loopNum).FluidIndex, + "LowTempRadConFlowSystemAutoSizeTempTest"); + Cp = FluidProperties::GetSpecificHeatGlycol( + *state, + state->dataPlnt->PlantLoop(state->dataLowTempRadSys->CFloRadSys(RadSysNum).HWPlantLoc.loopNum).FluidName, + 60.0, + state->dataPlnt->PlantLoop(state->dataLowTempRadSys->CFloRadSys(RadSysNum).HWPlantLoc.loopNum).FluidIndex, + "LowTempRadConFlowSystemAutoSizeTempTest"); Real64 HeatingLoad = state->dataSize->FinalZoneSizing(1).NonAirSysDesHeatLoad; Real64 DesHotWaterVolFlowRate = HeatingLoad / (state->dataSize->PlantSizData(1).DeltaT * Density * Cp); @@ -2659,16 +2665,18 @@ TEST_F(LowTempRadiantSystemTest, LowTempRadConFlowSystemAutoSizeTempTest) state->dataLowTempRadSys->CFloRadSys(RadSysNum).WaterVolFlowMax = AutoSize; // chilled water volume flow rate sizing calculation - Density = FluidProperties::GetDensityGlycol(*state, - state->dataPlnt->PlantLoop(state->dataLowTempRadSys->CFloRadSys(RadSysNum).CWPlantLoc.loopNum).FluidName, - 5.05, - state->dataPlnt->PlantLoop(state->dataLowTempRadSys->CFloRadSys(RadSysNum).CWPlantLoc.loopNum).FluidIndex, - "LowTempRadConFlowSystemAutoSizeTempTest"); - Cp = FluidProperties::GetSpecificHeatGlycol(*state, - state->dataPlnt->PlantLoop(state->dataLowTempRadSys->CFloRadSys(RadSysNum).CWPlantLoc.loopNum).FluidName, - 5.05, - state->dataPlnt->PlantLoop(state->dataLowTempRadSys->CFloRadSys(RadSysNum).CWPlantLoc.loopNum).FluidIndex, - "LowTempRadConFlowSystemAutoSizeTempTest"); + Density = + FluidProperties::GetDensityGlycol(*state, + state->dataPlnt->PlantLoop(state->dataLowTempRadSys->CFloRadSys(RadSysNum).CWPlantLoc.loopNum).FluidName, + 5.05, + state->dataPlnt->PlantLoop(state->dataLowTempRadSys->CFloRadSys(RadSysNum).CWPlantLoc.loopNum).FluidIndex, + "LowTempRadConFlowSystemAutoSizeTempTest"); + Cp = FluidProperties::GetSpecificHeatGlycol( + *state, + state->dataPlnt->PlantLoop(state->dataLowTempRadSys->CFloRadSys(RadSysNum).CWPlantLoc.loopNum).FluidName, + 5.05, + state->dataPlnt->PlantLoop(state->dataLowTempRadSys->CFloRadSys(RadSysNum).CWPlantLoc.loopNum).FluidIndex, + "LowTempRadConFlowSystemAutoSizeTempTest"); Real64 CoolingLoad = state->dataSize->FinalZoneSizing(state->dataSize->CurZoneEqNum).NonAirSysDesCoolLoad; Real64 DesChilledWaterVolFlowRate = CoolingLoad / (state->dataSize->PlantSizData(2).DeltaT * Density * Cp); diff --git a/tst/EnergyPlus/unit/OutdoorAirUnit.unit.cc b/tst/EnergyPlus/unit/OutdoorAirUnit.unit.cc index a6b596a5b76..597d8498c8f 100644 --- a/tst/EnergyPlus/unit/OutdoorAirUnit.unit.cc +++ b/tst/EnergyPlus/unit/OutdoorAirUnit.unit.cc @@ -692,8 +692,8 @@ TEST_F(EnergyPlusFixture, OutdoorAirUnit_WaterCoolingCoilAutoSizeTest) Real64 CoilDesWaterDeltaT = state->dataSize->PlantSizData(1).DeltaT; Real64 Cp = FluidProperties::GetSpecificHeatGlycol( *state, state->dataPlnt->PlantLoop(1).FluidName, Constant::CWInitConvTemp, state->dataPlnt->PlantLoop(1).FluidIndex, " "); - Real64 rho = - FluidProperties::GetDensityGlycol(*state, state->dataPlnt->PlantLoop(1).FluidName, Constant::CWInitConvTemp, state->dataPlnt->PlantLoop(1).FluidIndex, " "); + Real64 rho = FluidProperties::GetDensityGlycol( + *state, state->dataPlnt->PlantLoop(1).FluidName, Constant::CWInitConvTemp, state->dataPlnt->PlantLoop(1).FluidIndex, " "); Real64 DesCoolingCoilWaterVolFlowRate = DesWaterCoolingCoilLoad / (CoilDesWaterDeltaT * Cp * rho); // check water coil water flow rate calc EXPECT_EQ(DesWaterCoolingCoilLoad, state->dataWaterCoils->WaterCoil(1).DesWaterCoolingCoilRate); @@ -996,11 +996,14 @@ TEST_F(EnergyPlusFixture, OutdoorAirUnit_SteamHeatingCoilAutoSizeTest) Real64 DesSteamCoilLoad = DesAirMassFlow * CpAirAvg * (DesCoilOutTemp - DesCoilInTemp); // do steam flow rate sizing calculation - Real64 EnthSteamIn = FluidProperties::GetSatEnthalpyRefrig(*state, "STEAM", Constant::SteamInitConvTemp, 1.0, state->dataSteamCoils->SteamCoil(1).FluidIndex, ""); - Real64 EnthSteamOut = FluidProperties::GetSatEnthalpyRefrig(*state, "STEAM", Constant::SteamInitConvTemp, 0.0, state->dataSteamCoils->SteamCoil(1).FluidIndex, ""); - Real64 SteamDensity = FluidProperties::GetSatDensityRefrig(*state, "STEAM", Constant::SteamInitConvTemp, 1.0, state->dataSteamCoils->SteamCoil(1).FluidIndex, ""); - Real64 CpOfCondensate = - FluidProperties::GetSatSpecificHeatRefrig(*state, "STEAM", Constant::SteamInitConvTemp, 0.0, state->dataSteamCoils->SteamCoil(1).FluidIndex, ""); + Real64 EnthSteamIn = + FluidProperties::GetSatEnthalpyRefrig(*state, "STEAM", Constant::SteamInitConvTemp, 1.0, state->dataSteamCoils->SteamCoil(1).FluidIndex, ""); + Real64 EnthSteamOut = + FluidProperties::GetSatEnthalpyRefrig(*state, "STEAM", Constant::SteamInitConvTemp, 0.0, state->dataSteamCoils->SteamCoil(1).FluidIndex, ""); + Real64 SteamDensity = + FluidProperties::GetSatDensityRefrig(*state, "STEAM", Constant::SteamInitConvTemp, 1.0, state->dataSteamCoils->SteamCoil(1).FluidIndex, ""); + Real64 CpOfCondensate = FluidProperties::GetSatSpecificHeatRefrig( + *state, "STEAM", Constant::SteamInitConvTemp, 0.0, state->dataSteamCoils->SteamCoil(1).FluidIndex, ""); Real64 LatentHeatChange = EnthSteamIn - EnthSteamOut; Real64 DesMaxSteamVolFlowRate = DesSteamCoilLoad / (SteamDensity * (LatentHeatChange + state->dataSteamCoils->SteamCoil(1).DegOfSubcooling * CpOfCondensate)); diff --git a/tst/EnergyPlus/unit/UnitHeater.unit.cc b/tst/EnergyPlus/unit/UnitHeater.unit.cc index 8d673096237..b5472f8f702 100644 --- a/tst/EnergyPlus/unit/UnitHeater.unit.cc +++ b/tst/EnergyPlus/unit/UnitHeater.unit.cc @@ -1151,16 +1151,18 @@ TEST_F(EnergyPlusFixture, UnitHeater_HWHeatingCoilUAAutoSizingTest) EXPECT_FALSE(ErrorsFound); HWMaxVolFlowRate = state->dataWaterCoils->WaterCoil(CoilNum).MaxWaterVolFlowRate; - HWDensity = FluidProperties::GetDensityGlycol(*state, - state->dataPlnt->PlantLoop(state->dataUnitHeaters->UnitHeat(UnitHeatNum).HWplantLoc.loopNum).FluidName, - Constant::HWInitConvTemp, - state->dataPlnt->PlantLoop(state->dataUnitHeaters->UnitHeat(UnitHeatNum).HWplantLoc.loopNum).FluidIndex, - "xxx"); - CpHW = FluidProperties::GetSpecificHeatGlycol(*state, - state->dataPlnt->PlantLoop(state->dataUnitHeaters->UnitHeat(UnitHeatNum).HWplantLoc.loopNum).FluidName, - Constant::HWInitConvTemp, - state->dataPlnt->PlantLoop(state->dataUnitHeaters->UnitHeat(UnitHeatNum).HWplantLoc.loopNum).FluidIndex, - "xxx"); + HWDensity = + FluidProperties::GetDensityGlycol(*state, + state->dataPlnt->PlantLoop(state->dataUnitHeaters->UnitHeat(UnitHeatNum).HWplantLoc.loopNum).FluidName, + Constant::HWInitConvTemp, + state->dataPlnt->PlantLoop(state->dataUnitHeaters->UnitHeat(UnitHeatNum).HWplantLoc.loopNum).FluidIndex, + "xxx"); + CpHW = FluidProperties::GetSpecificHeatGlycol( + *state, + state->dataPlnt->PlantLoop(state->dataUnitHeaters->UnitHeat(UnitHeatNum).HWplantLoc.loopNum).FluidName, + Constant::HWInitConvTemp, + state->dataPlnt->PlantLoop(state->dataUnitHeaters->UnitHeat(UnitHeatNum).HWplantLoc.loopNum).FluidIndex, + "xxx"); HWPlantDeltaTDesign = state->dataSize->PlantSizData(PltSizHeatNum).DeltaT; // calculate hot water coil design capacity HWCoilDesignCapacity = HWMaxVolFlowRate * HWDensity * CpHW * HWPlantDeltaTDesign; @@ -1398,11 +1400,12 @@ TEST_F(EnergyPlusFixture, UnitHeater_SimUnitHeaterTest) EXPECT_NEAR(UHHeatingRate, state->dataUnitHeaters->UnitHeat(UnitHeatNum).HeatPower, ConvTol); // verify the heat rate delivered by the hot water heating coil HWMassFlowRate = state->dataWaterCoils->WaterCoil(CoilNum).InletWaterMassFlowRate; - CpHW = FluidProperties::GetSpecificHeatGlycol(*state, - state->dataPlnt->PlantLoop(state->dataUnitHeaters->UnitHeat(UnitHeatNum).HWplantLoc.loopNum).FluidName, - 60.0, - state->dataPlnt->PlantLoop(state->dataUnitHeaters->UnitHeat(UnitHeatNum).HWplantLoc.loopNum).FluidIndex, - "UnitTest"); + CpHW = FluidProperties::GetSpecificHeatGlycol( + *state, + state->dataPlnt->PlantLoop(state->dataUnitHeaters->UnitHeat(UnitHeatNum).HWplantLoc.loopNum).FluidName, + 60.0, + state->dataPlnt->PlantLoop(state->dataUnitHeaters->UnitHeat(UnitHeatNum).HWplantLoc.loopNum).FluidIndex, + "UnitTest"); HWCoilHeatingRate = HWMassFlowRate * CpHW * (state->dataLoopNodes->Node(WCWaterInletNode).Temp - state->dataLoopNodes->Node(WCWaterOutletNode).Temp); EXPECT_NEAR(HWCoilHeatingRate, state->dataWaterCoils->WaterCoil(CoilNum).TotWaterHeatingCoilRate, ConvTol); diff --git a/tst/EnergyPlus/unit/WaterCoils.unit.cc b/tst/EnergyPlus/unit/WaterCoils.unit.cc index 7dade685a33..e11cbf8fe26 100644 --- a/tst/EnergyPlus/unit/WaterCoils.unit.cc +++ b/tst/EnergyPlus/unit/WaterCoils.unit.cc @@ -1422,8 +1422,10 @@ TEST_F(WaterCoilsTest, HotWaterHeatingCoilAutoSizeTempTest) Real64 DesWaterFlowRate(0.0); // now size heating coil hot water flow rate at 60.0C - Cp = FluidProperties::GetSpecificHeatGlycol(*state, state->dataPlnt->PlantLoop(1).FluidName, 60.0, state->dataPlnt->PlantLoop(1).FluidIndex, "Unit Test"); - rho = FluidProperties::GetDensityGlycol(*state, state->dataPlnt->PlantLoop(1).FluidName, 60.0, state->dataPlnt->PlantLoop(1).FluidIndex, "Unit Test"); + Cp = FluidProperties::GetSpecificHeatGlycol( + *state, state->dataPlnt->PlantLoop(1).FluidName, 60.0, state->dataPlnt->PlantLoop(1).FluidIndex, "Unit Test"); + rho = FluidProperties::GetDensityGlycol( + *state, state->dataPlnt->PlantLoop(1).FluidName, 60.0, state->dataPlnt->PlantLoop(1).FluidIndex, "Unit Test"); DesWaterFlowRate = DesCoilHeatingLoad / (state->dataSize->PlantSizData(1).DeltaT * Cp * rho); // check heating coil design water flow rate calculated here and sizing results are identical diff --git a/tst/EnergyPlus/unit/WaterToAirHeatPump.unit.cc b/tst/EnergyPlus/unit/WaterToAirHeatPump.unit.cc index 53008112825..9b46f887f3f 100644 --- a/tst/EnergyPlus/unit/WaterToAirHeatPump.unit.cc +++ b/tst/EnergyPlus/unit/WaterToAirHeatPump.unit.cc @@ -309,5 +309,5 @@ TEST_F(EnergyPlusFixture, WaterToAirHeatPumpTest_SimWaterToAir) // clean up state->dataWaterToAirHeatPump->WatertoAirHP.deallocate(); - delete state->dataFluidProps->refrigs(1); + delete state->dataFluidProps->refrigs(1); } From 00ce96634789168d327336c8437bf0b4128ac40c Mon Sep 17 00:00:00 2001 From: Edwin Lee Date: Wed, 24 Jul 2024 10:35:08 -0500 Subject: [PATCH 63/68] Fix format issue with custom_check --- src/EnergyPlus/FluidProperties.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/EnergyPlus/FluidProperties.cc b/src/EnergyPlus/FluidProperties.cc index 963be054cfa..58716dcb385 100644 --- a/src/EnergyPlus/FluidProperties.cc +++ b/src/EnergyPlus/FluidProperties.cc @@ -1102,7 +1102,7 @@ namespace FluidProperties { cAlphaFields(2), Alphas(2), "", - format("Valid options are (\"Enthalpy\", \"Density\"). Fluid will not be available for simulation.")); + R"(Valid options are ("Enthalpy", "Density"). Fluid will not be available for simulation.)"); ErrorsFound = true; continue; } From 44cc05155e320751539f8ef8c63ded1ca37894f9 Mon Sep 17 00:00:00 2001 From: Edwin Lee Date: Wed, 24 Jul 2024 11:57:46 -0500 Subject: [PATCH 64/68] Clang format again? --- src/EnergyPlus/FluidProperties.cc | 58 +++++++++++++++++++------------ 1 file changed, 35 insertions(+), 23 deletions(-) diff --git a/src/EnergyPlus/FluidProperties.cc b/src/EnergyPlus/FluidProperties.cc index 58716dcb385..a27751e06b6 100644 --- a/src/EnergyPlus/FluidProperties.cc +++ b/src/EnergyPlus/FluidProperties.cc @@ -271,29 +271,41 @@ namespace FluidProperties { }; // Propylene Glycol Data: Specific Heat in J/(kg-k) - static constexpr std::array, DefaultNumGlyConcs> DefaultPropGlyCpData = { - {{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 4217.0, 4198.0, 4191.0, 4185.0, 4181.0, 4179.0, 4180.0, 4180.0, 4180.0, 4180.0, - 4181.0, 4183.0, 4185.0, 4188.0, 4192.0, 4196.0, 4200.0, 4203.0, 4208.0, 4213.0, 4218.0, 4223.0, 4228.0, 4233.0, 4238.0, 4243.0}, // DefaultWaterCpData - // in - // J/kg-K - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 4042.0, 4050.0, 4058.0, 4067.0, 4075.0, 4083.0, 4091.0, 4099.0, 4107.0, 4115.0, - 4123.0, 4131.0, 4139.0, 4147.0, 4155.0, 4163.0, 4171.0, 4179.0, 4187.0, 4195.0, 4203.0, 4211.0, 4219.0, 4227.0, 4235.0, 4243.0}, // Conc=0.1 - {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3918.0, 3929.0, 3940.0, 3951.0, 3962.0, 3973.0, 3983.0, 3994.0, 4005.0, 4016.0, 4027.0, - 4038.0, 4049.0, 4060.0, 4071.0, 4082.0, 4093.0, 4104.0, 4115.0, 4126.0, 4136.0, 4147.0, 4158.0, 4169.0, 4180.0, 4191.0, 4202.0}, // Conc=0.2 - {0.0, 0.0, 0.0, 0.0, 0.0, 3765.0, 3779.0, 3793.0, 3807.0, 3820.0, 3834.0, 3848.0, 3862.0, 3875.0, 3889.0, 3903.0, 3917.0, - 3930.0, 3944.0, 3958.0, 3972.0, 3985.0, 3999.0, 4013.0, 4027.0, 4040.0, 4054.0, 4068.0, 4082.0, 4095.0, 4109.0, 4123.0, 4137.0}, // Conc=0.3 - {0.0, 0.0, 0.0, 0.0, 3586.0, 3603.0, 3619.0, 3636.0, 3652.0, 3669.0, 3685.0, 3702.0, 3718.0, 3735.0, 3751.0, 3768.0, 3784.0, - 3801.0, 3817.0, 3834.0, 3850.0, 3867.0, 3883.0, 3900.0, 3916.0, 3933.0, 3949.0, 3966.0, 3982.0, 3999.0, 4015.0, 4032.0, 4049.0}, // Conc=0.4 - {0.0, 0.0, 3358.0, 3378.0, 3397.0, 3416.0, 3435.0, 3455.0, 3474.0, 3493.0, 3513.0, 3532.0, 3551.0, 3570.0, 3590.0, 3609.0, 3628.0, - 3648.0, 3667.0, 3686.0, 3706.0, 3725.0, 3744.0, 3763.0, 3783.0, 3802.0, 3821.0, 3841.0, 3860.0, 3879.0, 3898.0, 3918.0, 3937.0}, // Conc=0.5 - {3096.0, 3118.0, 3140.0, 3162.0, 3184.0, 3206.0, 3228.0, 3250.0, 3272.0, 3295.0, 3317.0, 3339.0, 3361.0, 3383.0, 3405.0, 3427.0, 3449.0, - 3471.0, 3493.0, 3515.0, 3537.0, 3559.0, 3581.0, 3603.0, 3625.0, 3647.0, 3670.0, 3692.0, 3714.0, 3736.0, 3758.0, 3780.0, 3802.0}, // Conc=0.6 - {2843.0, 2868.0, 2893.0, 2918.0, 2943.0, 2968.0, 2993.0, 3018.0, 3042.0, 3067.0, 3092.0, 3117.0, 3142.0, 3167.0, 3192.0, 3217.0, 3242.0, - 3266.0, 3291.0, 3316.0, 3341.0, 3366.0, 3391.0, 3416.0, 3441.0, 3465.0, 3490.0, 3515.0, 3540.0, 3565.0, 3590.0, 3615.0, 3640.0}, // Conc=0.7 - {2572.0, 2600.0, 2627.0, 2655.0, 2683.0, 2710.0, 2738.0, 2766.0, 2793.0, 2821.0, 2849.0, 2876.0, 2904.0, 2931.0, 2959.0, 2987.0, 3014.0, - 3042.0, 3070.0, 3097.0, 3125.0, 3153.0, 3180.0, 3208.0, 3236.0, 3263.0, 3291.0, 3319.0, 3346.0, 3374.0, 3402.0, 3429.0, 3457.0}, // Conc=0.8 - {2264.0, 2295.0, 2326.0, 2356.0, 2387.0, 2417.0, 2448.0, 2478.0, 2509.0, 2539.0, 2570.0, 2600.0, 2631.0, 2661.0, 2692.0, 2723.0, 2753.0, - 2784.0, 2814.0, 2845.0, 2875.0, 2906.0, 2936.0, 2967.0, 2997.0, 3028.0, 3058.0, 3089.0, 3119.0, 3150.0, 3181.0, 3211.0, 3242.0}} // Conc=0.9 + static constexpr std::array, DefaultNumGlyConcs> + DefaultPropGlyCpData = + { + {{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 4217.0, 4198.0, 4191.0, 4185.0, + 4181.0, 4179.0, 4180.0, 4180.0, 4180.0, 4180.0, 4181.0, 4183.0, 4185.0, 4188.0, 4192.0, + 4196.0, 4200.0, 4203.0, 4208.0, 4213.0, 4218.0, 4223.0, 4228.0, 4233.0, 4238.0, 4243.0}, // DefaultWaterCpData + // in + // J/kg-K + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 4042.0, 4050.0, 4058.0, 4067.0, + 4075.0, 4083.0, 4091.0, 4099.0, 4107.0, 4115.0, 4123.0, 4131.0, 4139.0, 4147.0, 4155.0, + 4163.0, 4171.0, 4179.0, 4187.0, 4195.0, 4203.0, 4211.0, 4219.0, 4227.0, 4235.0, 4243.0}, // Conc=0.1 + {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 3918.0, 3929.0, 3940.0, 3951.0, 3962.0, + 3973.0, 3983.0, 3994.0, 4005.0, 4016.0, 4027.0, 4038.0, 4049.0, 4060.0, 4071.0, 4082.0, + 4093.0, 4104.0, 4115.0, 4126.0, 4136.0, 4147.0, 4158.0, 4169.0, 4180.0, 4191.0, 4202.0}, // Conc=0.2 + {0.0, 0.0, 0.0, 0.0, 0.0, 3765.0, 3779.0, 3793.0, 3807.0, 3820.0, 3834.0, + 3848.0, 3862.0, 3875.0, 3889.0, 3903.0, 3917.0, 3930.0, 3944.0, 3958.0, 3972.0, 3985.0, + 3999.0, 4013.0, 4027.0, 4040.0, 4054.0, 4068.0, 4082.0, 4095.0, 4109.0, 4123.0, 4137.0}, // Conc=0.3 + {0.0, 0.0, 0.0, 0.0, 3586.0, 3603.0, 3619.0, 3636.0, 3652.0, 3669.0, 3685.0, + 3702.0, 3718.0, 3735.0, 3751.0, 3768.0, 3784.0, 3801.0, 3817.0, 3834.0, 3850.0, 3867.0, + 3883.0, 3900.0, 3916.0, 3933.0, 3949.0, 3966.0, 3982.0, 3999.0, 4015.0, 4032.0, 4049.0}, // Conc=0.4 + {0.0, 0.0, 3358.0, 3378.0, 3397.0, 3416.0, 3435.0, 3455.0, 3474.0, 3493.0, 3513.0, + 3532.0, 3551.0, 3570.0, 3590.0, 3609.0, 3628.0, 3648.0, 3667.0, 3686.0, 3706.0, 3725.0, + 3744.0, 3763.0, 3783.0, 3802.0, 3821.0, 3841.0, 3860.0, 3879.0, 3898.0, 3918.0, 3937.0}, // Conc=0.5 + {3096.0, 3118.0, 3140.0, 3162.0, 3184.0, 3206.0, 3228.0, 3250.0, 3272.0, 3295.0, 3317.0, + 3339.0, 3361.0, 3383.0, 3405.0, 3427.0, 3449.0, 3471.0, 3493.0, 3515.0, 3537.0, 3559.0, + 3581.0, 3603.0, 3625.0, 3647.0, 3670.0, 3692.0, 3714.0, 3736.0, 3758.0, 3780.0, 3802.0}, // Conc=0.6 + {2843.0, 2868.0, 2893.0, 2918.0, 2943.0, 2968.0, 2993.0, 3018.0, 3042.0, 3067.0, 3092.0, + 3117.0, 3142.0, 3167.0, 3192.0, 3217.0, 3242.0, 3266.0, 3291.0, 3316.0, 3341.0, 3366.0, + 3391.0, 3416.0, 3441.0, 3465.0, 3490.0, 3515.0, 3540.0, 3565.0, 3590.0, 3615.0, 3640.0}, // Conc=0.7 + {2572.0, 2600.0, 2627.0, 2655.0, 2683.0, 2710.0, 2738.0, 2766.0, 2793.0, 2821.0, 2849.0, + 2876.0, 2904.0, 2931.0, 2959.0, 2987.0, 3014.0, 3042.0, 3070.0, 3097.0, 3125.0, 3153.0, + 3180.0, 3208.0, 3236.0, 3263.0, 3291.0, 3319.0, 3346.0, 3374.0, 3402.0, 3429.0, 3457.0}, // Conc=0.8 + {2264.0, 2295.0, 2326.0, 2356.0, 2387.0, 2417.0, 2448.0, 2478.0, 2509.0, 2539.0, 2570.0, + 2600.0, 2631.0, 2661.0, 2692.0, 2723.0, 2753.0, 2784.0, 2814.0, 2845.0, 2875.0, 2906.0, + 2936.0, 2967.0, 2997.0, 3028.0, 3058.0, 3089.0, 3119.0, 3150.0, 3181.0, 3211.0, 3242.0}} // Conc=0.9 }; // Propylene Glycol Data: Viscosity in mPa-s From a0cff9a04860e25e5091e1048f18b31a36038ba7 Mon Sep 17 00:00:00 2001 From: Rick Strand Date: Wed, 24 Jul 2024 15:25:33 -0500 Subject: [PATCH 65/68] 10299 Request to Improve Variable Name Addressed review request to change the name of a variable to be more descriptive. --- src/EnergyPlus/DataSystemVariables.hh | 4 ++-- src/EnergyPlus/SolarShading.cc | 7 ++++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/EnergyPlus/DataSystemVariables.hh b/src/EnergyPlus/DataSystemVariables.hh index e8506ce2439..5d4eedc1c54 100644 --- a/src/EnergyPlus/DataSystemVariables.hh +++ b/src/EnergyPlus/DataSystemVariables.hh @@ -115,8 +115,8 @@ struct SystemVarsData : BaseGlobalStruct bool DisableSelfShadingWithinGroup = false; bool DisableSelfShadingBetweenGroup = false; - int shadingGroupsNum = 0; // number of shading groups - Array1D_string zoneName; // array of zone names in user input + int shadingGroupsNum = 0; // number of shading groups + Array1D_string shadingGroupZoneListNames; // array of zone names in user input bool TrackAirLoopEnvFlag = false; // If TRUE generates a file with runtime statistics for each HVAC // controller on each air loop diff --git a/src/EnergyPlus/SolarShading.cc b/src/EnergyPlus/SolarShading.cc index 638d1b57f25..6c95f90459a 100644 --- a/src/EnergyPlus/SolarShading.cc +++ b/src/EnergyPlus/SolarShading.cc @@ -658,9 +658,9 @@ void GetShadowingInput(EnergyPlusData &state) aNum++; state.dataSysVars->shadingGroupsNum = NumAlphas - (aNum - 1); - state.dataSysVars->zoneName.allocate(state.dataSysVars->shadingGroupsNum); + state.dataSysVars->shadingGroupZoneListNames.allocate(state.dataSysVars->shadingGroupsNum); for (int numZone = 1; numZone <= state.dataSysVars->shadingGroupsNum; ++numZone) { - state.dataSysVars->zoneName(numZone) = state.dataIPShortCut->cAlphaArgs(aNum - 1 + numZone); + state.dataSysVars->shadingGroupZoneListNames(numZone) = state.dataIPShortCut->cAlphaArgs(aNum - 1 + numZone); } if (!state.dataSysVars->DetailedSolarTimestepIntegration && state.dataSurface->ShadingTransmittanceVaries && @@ -757,7 +757,8 @@ void processShadowingInput(EnergyPlusData &state) if (NumOfShadingGroups > 0) { DisableSelfShadingGroups.allocate(NumOfShadingGroups); for (int i = 1; i <= NumOfShadingGroups; i++) { - Found = Util::FindItemInList(state.dataSysVars->zoneName(i), state.dataHeatBal->ZoneList, state.dataHeatBal->NumOfZoneLists); + Found = Util::FindItemInList( + state.dataSysVars->shadingGroupZoneListNames(i), state.dataHeatBal->ZoneList, state.dataHeatBal->NumOfZoneLists); if (Found != 0) DisableSelfShadingGroups(i) = Found; } From ef9b8161be68fc976213e30bd05fbb4896ad0c31 Mon Sep 17 00:00:00 2001 From: Rick Strand Date: Wed, 24 Jul 2024 21:49:05 -0500 Subject: [PATCH 66/68] 10299 Back Out Variable Name Change Something not quite right about this simply variable name change. Things went from expected diffs only to "unexpected" diffs. --- src/EnergyPlus/DataSystemVariables.hh | 4 ++-- src/EnergyPlus/SolarShading.cc | 7 +++---- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/EnergyPlus/DataSystemVariables.hh b/src/EnergyPlus/DataSystemVariables.hh index 5d4eedc1c54..e8506ce2439 100644 --- a/src/EnergyPlus/DataSystemVariables.hh +++ b/src/EnergyPlus/DataSystemVariables.hh @@ -115,8 +115,8 @@ struct SystemVarsData : BaseGlobalStruct bool DisableSelfShadingWithinGroup = false; bool DisableSelfShadingBetweenGroup = false; - int shadingGroupsNum = 0; // number of shading groups - Array1D_string shadingGroupZoneListNames; // array of zone names in user input + int shadingGroupsNum = 0; // number of shading groups + Array1D_string zoneName; // array of zone names in user input bool TrackAirLoopEnvFlag = false; // If TRUE generates a file with runtime statistics for each HVAC // controller on each air loop diff --git a/src/EnergyPlus/SolarShading.cc b/src/EnergyPlus/SolarShading.cc index 6c95f90459a..638d1b57f25 100644 --- a/src/EnergyPlus/SolarShading.cc +++ b/src/EnergyPlus/SolarShading.cc @@ -658,9 +658,9 @@ void GetShadowingInput(EnergyPlusData &state) aNum++; state.dataSysVars->shadingGroupsNum = NumAlphas - (aNum - 1); - state.dataSysVars->shadingGroupZoneListNames.allocate(state.dataSysVars->shadingGroupsNum); + state.dataSysVars->zoneName.allocate(state.dataSysVars->shadingGroupsNum); for (int numZone = 1; numZone <= state.dataSysVars->shadingGroupsNum; ++numZone) { - state.dataSysVars->shadingGroupZoneListNames(numZone) = state.dataIPShortCut->cAlphaArgs(aNum - 1 + numZone); + state.dataSysVars->zoneName(numZone) = state.dataIPShortCut->cAlphaArgs(aNum - 1 + numZone); } if (!state.dataSysVars->DetailedSolarTimestepIntegration && state.dataSurface->ShadingTransmittanceVaries && @@ -757,8 +757,7 @@ void processShadowingInput(EnergyPlusData &state) if (NumOfShadingGroups > 0) { DisableSelfShadingGroups.allocate(NumOfShadingGroups); for (int i = 1; i <= NumOfShadingGroups; i++) { - Found = Util::FindItemInList( - state.dataSysVars->shadingGroupZoneListNames(i), state.dataHeatBal->ZoneList, state.dataHeatBal->NumOfZoneLists); + Found = Util::FindItemInList(state.dataSysVars->zoneName(i), state.dataHeatBal->ZoneList, state.dataHeatBal->NumOfZoneLists); if (Found != 0) DisableSelfShadingGroups(i) = Found; } From 08909a8817b679e9c4d2898e559a6c25f01fe242 Mon Sep 17 00:00:00 2001 From: Rick Strand Date: Thu, 25 Jul 2024 06:48:14 -0500 Subject: [PATCH 67/68] 10299 Attempt 2 at Variable Rename Trying again to rename a variable. This seemed to cause a lot of issues yesterday, but was that because of changes to develop that were happening at the same time? --- src/EnergyPlus/DataSystemVariables.hh | 4 ++-- src/EnergyPlus/SolarShading.cc | 7 ++++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/EnergyPlus/DataSystemVariables.hh b/src/EnergyPlus/DataSystemVariables.hh index e8506ce2439..5d4eedc1c54 100644 --- a/src/EnergyPlus/DataSystemVariables.hh +++ b/src/EnergyPlus/DataSystemVariables.hh @@ -115,8 +115,8 @@ struct SystemVarsData : BaseGlobalStruct bool DisableSelfShadingWithinGroup = false; bool DisableSelfShadingBetweenGroup = false; - int shadingGroupsNum = 0; // number of shading groups - Array1D_string zoneName; // array of zone names in user input + int shadingGroupsNum = 0; // number of shading groups + Array1D_string shadingGroupZoneListNames; // array of zone names in user input bool TrackAirLoopEnvFlag = false; // If TRUE generates a file with runtime statistics for each HVAC // controller on each air loop diff --git a/src/EnergyPlus/SolarShading.cc b/src/EnergyPlus/SolarShading.cc index 638d1b57f25..6c95f90459a 100644 --- a/src/EnergyPlus/SolarShading.cc +++ b/src/EnergyPlus/SolarShading.cc @@ -658,9 +658,9 @@ void GetShadowingInput(EnergyPlusData &state) aNum++; state.dataSysVars->shadingGroupsNum = NumAlphas - (aNum - 1); - state.dataSysVars->zoneName.allocate(state.dataSysVars->shadingGroupsNum); + state.dataSysVars->shadingGroupZoneListNames.allocate(state.dataSysVars->shadingGroupsNum); for (int numZone = 1; numZone <= state.dataSysVars->shadingGroupsNum; ++numZone) { - state.dataSysVars->zoneName(numZone) = state.dataIPShortCut->cAlphaArgs(aNum - 1 + numZone); + state.dataSysVars->shadingGroupZoneListNames(numZone) = state.dataIPShortCut->cAlphaArgs(aNum - 1 + numZone); } if (!state.dataSysVars->DetailedSolarTimestepIntegration && state.dataSurface->ShadingTransmittanceVaries && @@ -757,7 +757,8 @@ void processShadowingInput(EnergyPlusData &state) if (NumOfShadingGroups > 0) { DisableSelfShadingGroups.allocate(NumOfShadingGroups); for (int i = 1; i <= NumOfShadingGroups; i++) { - Found = Util::FindItemInList(state.dataSysVars->zoneName(i), state.dataHeatBal->ZoneList, state.dataHeatBal->NumOfZoneLists); + Found = Util::FindItemInList( + state.dataSysVars->shadingGroupZoneListNames(i), state.dataHeatBal->ZoneList, state.dataHeatBal->NumOfZoneLists); if (Found != 0) DisableSelfShadingGroups(i) = Found; } From ba5a73f4772d0b1a9ae68b0540c192bc78777dd4 Mon Sep 17 00:00:00 2001 From: Edwin Lee Date: Thu, 25 Jul 2024 14:57:41 -0500 Subject: [PATCH 68/68] Applied clang format --- src/EnergyPlus/CurveManager.cc | 18 ++++++++---------- src/EnergyPlus/FileSystem.hh | 2 +- src/EnergyPlus/WeatherManager.cc | 6 ++---- 3 files changed, 11 insertions(+), 15 deletions(-) diff --git a/src/EnergyPlus/CurveManager.cc b/src/EnergyPlus/CurveManager.cc index f000fde6243..e8c3faec990 100644 --- a/src/EnergyPlus/CurveManager.cc +++ b/src/EnergyPlus/CurveManager.cc @@ -2308,13 +2308,12 @@ namespace Curve { std::string tmp = indVarInstance.at("external_file_name").get(); fs::path filePath(tmp); if (!indVarInstance.count("external_file_column_number")) { - ShowSevereError(state, - format("{}: No column number defined for external file \"{}\"", contextString, filePath)); + ShowSevereError(state, format("{}: No column number defined for external file \"{}\"", contextString, filePath)); ErrorsFound = true; } if (!indVarInstance.count("external_file_starting_row_number")) { - ShowSevereError( - state, format("{}: No starting row number defined for external file \"{}\"", contextString, filePath)); + ShowSevereError(state, + format("{}: No starting row number defined for external file \"{}\"", contextString, filePath)); ErrorsFound = true; } @@ -2511,8 +2510,7 @@ namespace Curve { ErrorsFound = true; } if (!fields.count("external_file_starting_row_number")) { - ShowSevereError(state, - format("{}: No starting row number defined for external file \"{}\"", contextString, filePath)); + ShowSevereError(state, format("{}: No starting row number defined for external file \"{}\"", contextString, filePath)); ErrorsFound = true; } @@ -2681,12 +2679,12 @@ namespace Curve { std::size_t row = colAndRow.second; // 0 indexed auto &content = contents[col]; if (col >= numColumns) { - ShowFatalError( - state, format("File \"{}\" : Requested column ({}) exceeds the number of columns ({}).", filePath, col + 1, numColumns)); + ShowFatalError(state, + format("File \"{}\" : Requested column ({}) exceeds the number of columns ({}).", filePath, col + 1, numColumns)); } if (row >= numRows) { - ShowFatalError( - state, format("File \"{}\" : Requested starting row ({}) exceeds the number of rows ({}).", filePath, row + 1, numRows)); + ShowFatalError(state, + format("File \"{}\" : Requested starting row ({}) exceeds the number of rows ({}).", filePath, row + 1, numRows)); } std::vector array(numRows - row); std::transform(content.begin() + row, content.end(), array.begin(), [](std::string_view str) { diff --git a/src/EnergyPlus/FileSystem.hh b/src/EnergyPlus/FileSystem.hh index fc1c926237f..64a274359e4 100644 --- a/src/EnergyPlus/FileSystem.hh +++ b/src/EnergyPlus/FileSystem.hh @@ -317,7 +317,7 @@ namespace FileSystem { std::string toGenericString(fs::path const &p); - fs::path appendSuffixToPath(fs::path const& outputFilePrefixFullPath, const std::string &suffix); + fs::path appendSuffixToPath(fs::path const &outputFilePrefixFullPath, const std::string &suffix); } // namespace FileSystem } // namespace EnergyPlus diff --git a/src/EnergyPlus/WeatherManager.cc b/src/EnergyPlus/WeatherManager.cc index 20f2f26a740..15daa081ab9 100644 --- a/src/EnergyPlus/WeatherManager.cc +++ b/src/EnergyPlus/WeatherManager.cc @@ -8431,8 +8431,7 @@ namespace Weather { if (statFileExists) { auto statFile = state.files.inStatFilePath.try_open(); if (!statFile.good()) { - ShowSevereError(state, - format("CalcAnnualAndMonthlyDryBulbTemp: Could not open file {} for input (read).", statFile.filePath)); + ShowSevereError(state, format("CalcAnnualAndMonthlyDryBulbTemp: Could not open file {} for input (read).", statFile.filePath)); ShowContinueError(state, "Water Mains Temperature will be set to a fixed default value of 10.0 C."); return; } @@ -8481,8 +8480,7 @@ namespace Weather { auto epwFile = state.files.inputWeatherFilePath.try_open(); bool epwHasLeapYear(false); if (!epwFile.good()) { - ShowSevereError(state, - format("CalcAnnualAndMonthlyDryBulbTemp: Could not open file {} for input (read).", epwFile.filePath)); + ShowSevereError(state, format("CalcAnnualAndMonthlyDryBulbTemp: Could not open file {} for input (read).", epwFile.filePath)); ShowContinueError(state, "Water Mains Temperature will be set to a fixed default value of 10.0 C."); return; }