From 5d4b8d2c95d40bfe8d8be8266e76ad12e1e1e9e8 Mon Sep 17 00:00:00 2001 From: amirroth Date: Wed, 26 Jun 2024 08:02:10 -0400 Subject: [PATCH 01/10] 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 f8641777dc11306e10f7a86fb94efc9876a56ba3 Mon Sep 17 00:00:00 2001 From: amirroth Date: Mon, 15 Jul 2024 13:10:21 -0400 Subject: [PATCH 02/10] 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 907bf19b5470c95c6fc429e433ed596ccf25cfbc Mon Sep 17 00:00:00 2001 From: amirroth Date: Thu, 18 Jul 2024 16:17:55 -0400 Subject: [PATCH 03/10] 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 a242572180f8674f4715360116312d43bff8b636 Mon Sep 17 00:00:00 2001 From: amirroth Date: Sat, 20 Jul 2024 07:00:07 -0400 Subject: [PATCH 04/10] 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 05/10] 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 06/10] 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 07/10] 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 c842eecd8d83750518cc5b575761bea46d8cb0f2 Mon Sep 17 00:00:00 2001 From: Edwin Lee Date: Wed, 24 Jul 2024 10:33:30 -0500 Subject: [PATCH 08/10] 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 09/10] 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 10/10] 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