From 9f6cbb636f0b5a70868d6efcebe812bc8977ada2 Mon Sep 17 00:00:00 2001 From: Markus Quaritsch <markus.quaritsch@tugraz.at> Date: Mon, 17 Oct 2022 13:03:20 +0200 Subject: [PATCH] BusAux: use separate HVAC Configuration for heating and cooling extend environmental map with efficiency for heater and heatpump cop depending on environmental conditions map HVAC system configuration and heatpump types (driver/passenger) to a HVAC configuration for calculations segment table: separate busaux HVAC configuration for heating and cooling depending on powertrain architecture (conv, HEV, PEV) --- .../JobEdit/Vehicle/VehicleViewModel.cs | 2 +- .../InterimStageBusVehicleViewModel_v2_8.cs | 2 +- ..._NonSmart_AlternatorsSetEfficiencyTests.vb | 10 +- .../UnitTests/M14Tests.vb | 2 +- .../M1_AverageHVACLoadDemandTests.vb | 8 + .../M2_AverageElectricalLoadTests.vb | 2 +- .../M5_SmartAlternatorSetGenerationTests.vb | 4 +- .../UnitTests/SSMTOOLTests.vb | 27 ++- .../VectoAuxiliariesTests/UnitTests/Utils.vb | 5 +- .../VectoAuxiliariesTests.vbproj | 1 + .../BusHVACSystemConfiguration.cs | 57 ++++- .../BusAuxiliaries/IAuxiliaryConfig.cs | 2 +- .../IEnvironmentalConditionsMapEntry.cs | 7 +- .../BusAuxiliaries/ISSMDeclarationInputs.cs | 101 ++++++-- .../FileIO/JSON/BusAuxiliaryInputData.cs | 2 +- .../InputData/FileIO/JSON/SSMInputData.cs | 17 +- ...MLDeclarationBusAuxiliariesDataProvider.cs | 2 +- .../EnvironmentalContidionsMapReader.cs | 38 ++- .../EngineeringDataAdapter.cs | 4 +- .../AuxiliaryDataAdapter.cs | 226 ++++++++++++------ .../Models/BusAuxiliaries/AuxiliaryConfig.cs | 4 +- .../Models/BusAuxiliaries/BusAuxiliaries.cs | 16 +- .../HVAC/EnvironmentalConditionMapEntry.cs | 18 +- .../Impl/HVAC/SSMCalculate.cs | 70 +++++- .../DownstreamModules/Impl/HVAC/SSMInputs.cs | 23 +- .../DownstreamModules/Impl/HVAC/SSMTOOL.cs | 10 +- .../Models/Declaration/DeclarationData.cs | 98 ++++++-- .../Models/Declaration/HVACCoolingPower.cs | 6 +- .../VectoCore/Models/Declaration/Mission.cs | 39 +-- .../Models/Declaration/PrimaryBusSegments.cs | 37 ++- .../Impl/SimulatorFactory/SimulatorFactory.cs | 5 - .../SimulatorFactoryDeclaration.cs | 8 +- .../OutputData/FileIO/BusAuxWriter.cs | 4 +- .../OutputData/SummaryDataContainer.cs | 2 +- .../Declaration/Buses/DefaultClimatic.aenv | 24 +- .../PrimaryBusSegmentationTable.csv | 44 ++-- VectoCore/VectoCore/VectoCore.csproj | 2 + .../CompletedBusFactorMethodTest.cs | 26 +- .../EngineeringModeBusAuxTest.cs | 2 +- 39 files changed, 668 insertions(+), 289 deletions(-) diff --git a/VECTO3GUI2020/ViewModel/Implementation/JobEdit/Vehicle/VehicleViewModel.cs b/VECTO3GUI2020/ViewModel/Implementation/JobEdit/Vehicle/VehicleViewModel.cs index bdd1d5d53f..14bf6ca8db 100644 --- a/VECTO3GUI2020/ViewModel/Implementation/JobEdit/Vehicle/VehicleViewModel.cs +++ b/VECTO3GUI2020/ViewModel/Implementation/JobEdit/Vehicle/VehicleViewModel.cs @@ -354,7 +354,7 @@ namespace VECTO3GUI2020.ViewModel.Implementation.JobEdit.Vehicle ConsumerTechnology? IVehicleDeclarationInputData.DoorDriveTechnology { get; } public VehicleDeclarationType VehicleDeclarationType => throw new NotImplementedException(); - public Dictionary<PowertrainPosition, List<Tuple<Volt, TableData>>> ElectricMotorTorqueLimits { get; } + public IDictionary<PowertrainPosition, IList<Tuple<Volt, TableData>>> ElectricMotorTorqueLimits { get; } public TableData BoostingLimitations { get; } public string VehicleTypeApprovalNumber => throw new NotImplementedException(); diff --git a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/InterimStageBusVehicleViewModel_v2_8.cs b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/InterimStageBusVehicleViewModel_v2_8.cs index d692eb4ab9..c1d1e80836 100644 --- a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/InterimStageBusVehicleViewModel_v2_8.cs +++ b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/InterimStageBusVehicleViewModel_v2_8.cs @@ -798,7 +798,7 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation set => SetProperty(ref _vehicleDeclarationType, value); } - public Dictionary<PowertrainPosition, List<Tuple<Volt, TableData>>> ElectricMotorTorqueLimits { get; } + public IDictionary<PowertrainPosition, IList<Tuple<Volt, TableData>>> ElectricMotorTorqueLimits { get; } public TableData BoostingLimitations { get; } private string _vehicleTypeApprovalNumber; diff --git a/VECTOAux/VectoAuxiliariesTests/UnitTests/M0_NonSmart_AlternatorsSetEfficiencyTests.vb b/VECTOAux/VectoAuxiliariesTests/UnitTests/M0_NonSmart_AlternatorsSetEfficiencyTests.vb index cb275e66c2..54ede74a5a 100644 --- a/VECTOAux/VectoAuxiliariesTests/UnitTests/M0_NonSmart_AlternatorsSetEfficiencyTests.vb +++ b/VECTOAux/VectoAuxiliariesTests/UnitTests/M0_NonSmart_AlternatorsSetEfficiencyTests.vb @@ -28,7 +28,7 @@ Namespace UnitTests Dim auxconfig = Utils.GetAuxTestConfig() - Dim ssm As SSMTOOL = New SSMTOOL(auxconfig.SSMInputs) _ + Dim ssm As SSMTOOL = New SSMTOOL(auxconfig.SSMInputsCooling) _ ', New HVACConstants()) 'CType(CType(ssm.SSMInputs, SSMInputs).Vehicle, VehicleData).Height= 0.SI (Of Meter) 'ssm.Load(_SSMMAP) @@ -68,7 +68,7 @@ Namespace UnitTests CType(auxConfig.ElectricalUserInputsConfig, ElectricsUserInputsConfig).AlternatorMap =alternatorMap Dim target As IM0_NonSmart_AlternatorsSetEfficiency = New M00Impl(auxConfig.ElectricalUserInputsConfig, - signals, New SSMTOOL(auxconfig.SSMInputs).ElectricalWAdjusted) + signals, New SSMTOOL(auxconfig.SSMInputsCooling).ElectricalWAdjusted) Assert.IsNotNull(target) End Sub @@ -93,7 +93,7 @@ Namespace UnitTests CType(auxConfig.ElectricalUserInputsConfig, ElectricsUserInputsConfig).PowerNetVoltage = powernetVoltage CType(auxConfig.ElectricalUserInputsConfig, ElectricsUserInputsConfig).AlternatorMap = Nothing - Assert.That(Sub() target = New M00Impl(auxConfig.ElectricalUserInputsConfig, signals, New SSMTOOL(auxconfig.SSMInputs).ElectricalWAdjusted), + Assert.That(Sub() target = New M00Impl(auxConfig.ElectricalUserInputsConfig, signals, New SSMTOOL(auxconfig.SSMInputsCooling).ElectricalWAdjusted), Throws.InstanceOf (Of ArgumentException)) End Sub @@ -111,7 +111,7 @@ Namespace UnitTests CType(auxConfig.ElectricalUserInputsConfig, ElectricsUserInputsConfig).AlternatorMap =alternatorMap - Dim target As M00Impl = New M00Impl(auxConfig.ElectricalUserInputsConfig, signals, New SSMTOOL(auxconfig.SSMInputs).ElectricalWAdjusted) + Dim target As M00Impl = New M00Impl(auxConfig.ElectricalUserInputsConfig, signals, New SSMTOOL(auxconfig.SSMInputsCooling).ElectricalWAdjusted) Dim actual As Double = target.AlternatorsEfficiency @@ -128,7 +128,7 @@ Namespace UnitTests CType(auxConfig.ElectricalUserInputsConfig, ElectricsUserInputsConfig).AlternatorMap =alternatorMap - Dim target As IM0_NonSmart_AlternatorsSetEfficiency = New M00Impl(auxConfig.ElectricalUserInputsConfig, signals, New SSMTOOL(auxconfig.SSMInputs).ElectricalWAdjusted) + Dim target As IM0_NonSmart_AlternatorsSetEfficiency = New M00Impl(auxConfig.ElectricalUserInputsConfig, signals, New SSMTOOL(auxconfig.SSMInputsCooling).ElectricalWAdjusted) Dim actual As Ampere Dim expected As Single = 0 diff --git a/VECTOAux/VectoAuxiliariesTests/UnitTests/M14Tests.vb b/VECTOAux/VectoAuxiliariesTests/UnitTests/M14Tests.vb index 8bdad5364a..b65ffb715e 100644 --- a/VECTOAux/VectoAuxiliariesTests/UnitTests/M14Tests.vb +++ b/VECTOAux/VectoAuxiliariesTests/UnitTests/M14Tests.vb @@ -52,7 +52,7 @@ Namespace UnitTests Public Property SSMInputs As ISSMDeclarationInputs Implements ISSMTOOL.SSMInputs Get - Return CType(Utils.GetAuxTestConfig().SSMInputs, ISSMDeclarationInputs) + Return CType(Utils.GetAuxTestConfig().SSMInputsCooling, ISSMDeclarationInputs) End Get Set(value As ISSMDeclarationInputs) End Set diff --git a/VECTOAux/VectoAuxiliariesTests/UnitTests/M1_AverageHVACLoadDemandTests.vb b/VECTOAux/VectoAuxiliariesTests/UnitTests/M1_AverageHVACLoadDemandTests.vb index 09fa249606..b8f26cfc0b 100644 --- a/VECTOAux/VectoAuxiliariesTests/UnitTests/M1_AverageHVACLoadDemandTests.vb +++ b/VECTOAux/VectoAuxiliariesTests/UnitTests/M1_AverageHVACLoadDemandTests.vb @@ -42,6 +42,14 @@ Namespace UnitTests dim vehicle = auxConfig.VehicleData 'CType(vehicle, VehicleData).Height = 0.SI (of Meter) Dim ssmInput = SSMInputData.ReadFile(_SSMMAP, vehicle, Nothing) + + If (ssmInput.HVACSystemConfiguration = BusHVACSystemConfiguration.Unknown ) then + Dim tmp =CType(ssmInput, SSMInputs) + tmp.HVACSystemConfiguration = BusHVACSystemConfiguration.Configuration6 + tmp.HeatPumpTypePassengerCompartment = HeatPumpType.non_R_744_2_stage + end if + + ssm = New SSMTOOL(ssmInput) alternatorMap = AlternatorReader.ReadMap(_GOODMAP) diff --git a/VECTOAux/VectoAuxiliariesTests/UnitTests/M2_AverageElectricalLoadTests.vb b/VECTOAux/VectoAuxiliariesTests/UnitTests/M2_AverageElectricalLoadTests.vb index db3991edd8..a9c64a744e 100644 --- a/VECTOAux/VectoAuxiliariesTests/UnitTests/M2_AverageElectricalLoadTests.vb +++ b/VECTOAux/VectoAuxiliariesTests/UnitTests/M2_AverageElectricalLoadTests.vb @@ -56,7 +56,7 @@ Namespace UnitTests CType(auxConfig.ElectricalUserInputsConfig, ElectricsUserInputsConfig).AlternatorMap =altMap CType(auxConfig.ElectricalUserInputsConfig, ElectricsUserInputsConfig).AlternatorGearEfficiency = 0.8 - Dim m0 As New M00Impl(auxConfig.ElectricalUserInputsConfig, signals, New SSMTOOL(auxConfig.SSMInputs).ElectricalWAdjusted) + Dim m0 As New M00Impl(auxConfig.ElectricalUserInputsConfig, signals, New SSMTOOL(auxConfig.SSMInputsCooling).ElectricalWAdjusted) 'Get Consumers. diff --git a/VECTOAux/VectoAuxiliariesTests/UnitTests/M5_SmartAlternatorSetGenerationTests.vb b/VECTOAux/VectoAuxiliariesTests/UnitTests/M5_SmartAlternatorSetGenerationTests.vb index 1fbe62b3db..4d781b92fc 100644 --- a/VECTOAux/VectoAuxiliariesTests/UnitTests/M5_SmartAlternatorSetGenerationTests.vb +++ b/VECTOAux/VectoAuxiliariesTests/UnitTests/M5_SmartAlternatorSetGenerationTests.vb @@ -40,7 +40,7 @@ Namespace UnitTests Dim auxConfig = Utils.GetAuxTestConfig() - Dim ssm As ISSMTOOL = New SSMTOOL(auxConfig.SSMInputs) + Dim ssm As ISSMTOOL = New SSMTOOL(auxConfig.SSMInputsCooling) 'New SSMTOOL(SSMInputData.ReadFile(_SSMMAP, DeclarationData.BusAuxiliaries.DefaultEnvironmentalConditions, DeclarationData.BusAuxiliaries.SSMTechnologyList)) ', New HVACConstants()) @@ -65,7 +65,7 @@ Namespace UnitTests CType(auxConfig.ElectricalUserInputsConfig, ElectricsUserInputsConfig).AlternatorMap = alternatoMap Dim m0 As New M00Impl(auxConfig.ElectricalUserInputsConfig, _signals, - New SSMTOOL(auxConfig.SSMInputs).ElectricalWAdjusted) + New SSMTOOL(auxConfig.SSMInputsCooling).ElectricalWAdjusted) 'Results Cards Dim readings = New List(Of SmartResult) diff --git a/VECTOAux/VectoAuxiliariesTests/UnitTests/SSMTOOLTests.vb b/VECTOAux/VectoAuxiliariesTests/UnitTests/SSMTOOLTests.vb index d870204272..b05a80f908 100644 --- a/VECTOAux/VectoAuxiliariesTests/UnitTests/SSMTOOLTests.vb +++ b/VECTOAux/VectoAuxiliariesTests/UnitTests/SSMTOOLTests.vb @@ -76,9 +76,11 @@ Namespace UnitTests Dim mission As New Mission With { .BusParameter = New BusParameters() With { - .HVACCompressorType = HeatPumpType.non_R_744_2_stage, - .HVACAuxHeaterPower = 30000.0.SI(Of Watt), - .HVACConfiguration = BusHVACSystemConfiguration.Configuration6, + .HVACConventional = New HVACParameters With { + .HeatPumpTypePassengerCompartmentCooling = HeatPumpType.non_R_744_2_stage, + .HVACAuxHeaterPower = 30000.0.SI(Of Watt), + .HVACConfiguration = BusHVACSystemConfiguration.Configuration6 + }, .DoubleDecker = False, .VehicleWidth = 2.55.SI(Of Meter), .VehicleLength = 10.655.SI(Of Meter), @@ -92,7 +94,8 @@ Namespace UnitTests Dim auxInput as IBusAuxiliariesDeclarationData = Nothing Dim dao = New GenericCompletedBusAuxiliaryDataAdapter() - Dim target As ISSMDeclarationInputs = dao.CreateSSMModelParameters(auxInput, mission, FuelData.Diesel, LoadingType.ReferenceLoad) + Dim target As ISSMDeclarationInputs = dao.CreateSSMModelParameters(auxInput, mission, LoadingType.ReferenceLoad, mission.BusParameter.HVACConventional.HVACConfiguration, + HeatPumpType.none, mission.BusParameter.HVACConventional.HeatPumpTypePassengerCompartmentCooling, mission.BusParameter.HVACConventional.HVACAuxHeaterPower, FuelData.Diesel) If section = "BusParameterisation" Then 'BUS Parameterisation @@ -152,7 +155,7 @@ Namespace UnitTests '********* Assert.AreEqual(HeatPumpType.non_R_744_2_stage, target.ACSystem.HVACCompressorType) Assert.AreEqual(15.5567, target.ACSystem.HVACMaxCoolingPower.Value()/1000.0, 1e-3) - Assert.AreEqual(3.5, target.ACSystem.COP) + 'Assert.AreEqual(3.5, target.ACSystem.COP) End If If section = "Ventilation" Then @@ -584,9 +587,11 @@ Namespace UnitTests Dim mission As New Mission With { .MissionType = MissionType.HeavyUrban, .BusParameter = New BusParameters() With { - .HVACCompressorType = HeatPumpType.non_R_744_2_stage, - .HVACAuxHeaterPower = 18000.0.SI(Of Watt), - .HVACConfiguration = BusHVACSystemConfiguration.Configuration6, + .HVACConventional = New HVACParameters() With { + .HeatPumpTypePassengerCompartmentCooling = HeatPumpType.non_R_744_2_stage, + .HVACAuxHeaterPower = 18000.0.SI(Of Watt), + .HVACConfiguration = BusHVACSystemConfiguration.Configuration6 + }, .DoubleDecker = False, .BodyHeight = 2.7.SI(Of Meter), .VehicleWidth = 2.55.SI(Of Meter), @@ -599,8 +604,10 @@ Namespace UnitTests Dim auxInput as IBusAuxiliariesDeclarationData = Nothing Dim dao = New GenericCompletedBusAuxiliaryDataAdapter() - Dim target As SSMTOOL = New SSMTOOL(dao.CreateSSMModelParameters(auxInput, mission, - FuelData.Diesel, LoadingType.ReferenceLoad)) + Dim params as ISSMDeclarationInputs = dao.CreateSSMModelParameters(auxInput, mission, LoadingType.ReferenceLoad, mission.BusParameter.HVACConventional.HVACConfiguration, + HeatPumpType.none, mission.BusParameter.HVACConventional.HeatPumpTypePassengerCompartmentCooling, mission.BusParameter.HVACConventional.HVACAuxHeaterPower, FuelData.Diesel) + + Dim target As SSMTOOL = New SSMTOOL(params) success = BusAuxWriter.SaveSSMConfig(target.SSMInputs, filePath) 'success = target.Save(filePath) diff --git a/VECTOAux/VectoAuxiliariesTests/UnitTests/Utils.vb b/VECTOAux/VectoAuxiliariesTests/UnitTests/Utils.vb index 1ac1af2911..b2d94c0129 100644 --- a/VECTOAux/VectoAuxiliariesTests/UnitTests/Utils.vb +++ b/VECTOAux/VectoAuxiliariesTests/UnitTests/Utils.vb @@ -121,14 +121,13 @@ Public Class Utils .SmartAirCompression = False, .SmartRegeneration = False }, - .SSMInputs = New SSMInputs(Nothing, heatingFuel) With { + .SSMInputsCooling = New SSMInputs(Nothing, heatingFuel) With { .Technologies = techBenefits, .BusFloorType = FloorType.HighFloor, .BusSurfaceArea = 0.SI(Of SquareMeter), .BusVolume = 0.SI(Of CubicMeter), .BusWindowSurface = 0.SI(of SquareMeter), .UValue = 3.SI(Of WattPerKelvinSquareMeter), - .COP = 3.5, .VentilationRate = 20.SI(Unit.SI.Per.Hour).Cast (Of PerSecond), .VentilationRateHeating = 20.SI(Unit.SI.Per.Hour).Cast (Of PerSecond), .DefaultConditions = @@ -138,7 +137,7 @@ Public Class Utils .CoolingBoundaryTemperature = 23.0.DegCelsiusToKelvin(), .SpecificVentilationPower = 0.56.SI(Unit.SI.Watt.Hour.Per.Cubic.Meter).Cast (Of JoulePerCubicMeter), .HVACCompressorType = HeatPumpType.non_R_744_2_stage, - .HVACMaxCoolingPower = 18.si(Unit.SI.kilo.watt).Cast (of Watt), + .HVACMaxCoolingPowerPassenger = 18.si(Unit.SI.kilo.watt).Cast (of Watt), .AuxHeaterEfficiency = 0.84, .FuelFiredHeaterPower = 30.SI(Unit.SI.kilo.watt).Cast (Of Watt), .FuelEnergyToHeatToCoolant = Constants.BusAuxiliaries.Heater.FuelEnergyToHeatToCoolant, diff --git a/VECTOAux/VectoAuxiliariesTests/VectoAuxiliariesTests.vbproj b/VECTOAux/VectoAuxiliariesTests/VectoAuxiliariesTests.vbproj index cee4dd27f4..21bc8436d3 100644 --- a/VECTOAux/VectoAuxiliariesTests/VectoAuxiliariesTests.vbproj +++ b/VECTOAux/VectoAuxiliariesTests/VectoAuxiliariesTests.vbproj @@ -12,6 +12,7 @@ </PropertyGroup> <ItemGroup> + <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.3.2" /> <PackageReference Include="NUnit" Version="3.13.2" /> <PackageReference Include="NUnit3TestAdapter" Version="4.2.1" /> <PackageReference Include="Newtonsoft.Json" Version="13.0.1" /> diff --git a/VectoCommon/VectoCommon/BusAuxiliaries/BusHVACSystemConfiguration.cs b/VectoCommon/VectoCommon/BusAuxiliaries/BusHVACSystemConfiguration.cs index 80ce7c5716..4371b6e7da 100644 --- a/VectoCommon/VectoCommon/BusAuxiliaries/BusHVACSystemConfiguration.cs +++ b/VectoCommon/VectoCommon/BusAuxiliaries/BusHVACSystemConfiguration.cs @@ -44,7 +44,7 @@ namespace TUGraz.VectoCommon.BusAuxiliaries { { private const string Prefix = "Configuration"; - public static BusHVACSystemConfiguration? Parse(string text) + public static BusHVACSystemConfiguration Parse(string text) { return (Prefix + text).ParseEnum<BusHVACSystemConfiguration>(); } @@ -59,6 +59,14 @@ namespace TUGraz.VectoCommon.BusAuxiliaries { } public static string GetName(this BusHVACSystemConfiguration? hvacConfig) + { + if (hvacConfig == null) { + return "not set"; + } + + return hvacConfig.Value.GetName(); + } + public static string GetName(this BusHVACSystemConfiguration hvacConfig) { if (hvacConfig == BusHVACSystemConfiguration.Unknown) { return "Unknown"; @@ -68,6 +76,15 @@ namespace TUGraz.VectoCommon.BusAuxiliaries { } public static string ToXmlFormat(this BusHVACSystemConfiguration? hvacConfiguration) + { + if (hvacConfiguration == null) { + return "N/A"; + } + + return hvacConfiguration.Value.ToXmlFormat(); + } + + public static string ToXmlFormat(this BusHVACSystemConfiguration hvacConfiguration) { if (hvacConfiguration == BusHVACSystemConfiguration.Unknown) { return "0"; @@ -76,15 +93,12 @@ namespace TUGraz.VectoCommon.BusAuxiliaries { return GetName(hvacConfiguration); } - public static bool RequiresDriverAC(this BusHVACSystemConfiguration? hvacConfig) + public static bool RequiresDriverAC(this BusHVACSystemConfiguration hvacConfig) { - if (hvacConfig == null) { - return false; - } switch (hvacConfig) { - case BusHVACSystemConfiguration.Configuration2: - case BusHVACSystemConfiguration.Configuration4: - case BusHVACSystemConfiguration.Configuration7: + case BusHVACSystemConfiguration.Configuration2: + case BusHVACSystemConfiguration.Configuration4: + case BusHVACSystemConfiguration.Configuration7: case BusHVACSystemConfiguration.Configuration9: return true; } @@ -92,11 +106,13 @@ namespace TUGraz.VectoCommon.BusAuxiliaries { return false; } - public static bool RequiresPassengerAC(this BusHVACSystemConfiguration? hvacConfig) + public static bool RequiresDriverAC(this BusHVACSystemConfiguration? hvacConfig) + { + return hvacConfig != null && hvacConfig.Value.RequiresDriverAC(); + } + + public static bool RequiresPassengerAC(this BusHVACSystemConfiguration hvacConfig) { - if (hvacConfig == null) { - return false; - } switch (hvacConfig) { case BusHVACSystemConfiguration.Configuration1: case BusHVACSystemConfiguration.Configuration2: @@ -107,5 +123,22 @@ namespace TUGraz.VectoCommon.BusAuxiliaries { return true; } + + public static bool RequiresPassengerAC(this BusHVACSystemConfiguration? hvacConfig) + { + return hvacConfig != null && hvacConfig.Value.RequiresPassengerAC(); + + } + + public static bool HasThermalComfortSystem(this BusHVACSystemConfiguration hvacConfig) + { + switch (hvacConfig) { + case BusHVACSystemConfiguration.Configuration1: + case BusHVACSystemConfiguration.Configuration2: + return false; + } + + return true; + } } } \ No newline at end of file diff --git a/VectoCommon/VectoCommon/BusAuxiliaries/IAuxiliaryConfig.cs b/VectoCommon/VectoCommon/BusAuxiliaries/IAuxiliaryConfig.cs index 56f9e1e111..2945f0a32a 100644 --- a/VectoCommon/VectoCommon/BusAuxiliaries/IAuxiliaryConfig.cs +++ b/VectoCommon/VectoCommon/BusAuxiliaries/IAuxiliaryConfig.cs @@ -25,7 +25,7 @@ namespace TUGraz.VectoCommon.BusAuxiliaries { IPneumaticUserInputsConfig PneumaticUserInputsConfig { get; } IPneumaticsConsumersDemand PneumaticAuxillariesConfig { get; } - ISSMInputs SSMInputs { get; } + ISSMInputs SSMInputsCooling { get; } IActuations Actuations { get; } diff --git a/VectoCommon/VectoCommon/BusAuxiliaries/IEnvironmentalConditionsMapEntry.cs b/VectoCommon/VectoCommon/BusAuxiliaries/IEnvironmentalConditionsMapEntry.cs index a3e817a860..7f2c864db8 100644 --- a/VectoCommon/VectoCommon/BusAuxiliaries/IEnvironmentalConditionsMapEntry.cs +++ b/VectoCommon/VectoCommon/BusAuxiliaries/IEnvironmentalConditionsMapEntry.cs @@ -1,4 +1,5 @@ -using TUGraz.VectoCommon.Utils; +using System.Collections.Generic; +using TUGraz.VectoCommon.Utils; namespace TUGraz.VectoCommon.BusAuxiliaries { @@ -12,5 +13,9 @@ namespace TUGraz.VectoCommon.BusAuxiliaries //double GetNormalisedWeighting(IList<IEnvironmentalConditionsMapEntry> map); + + IReadOnlyDictionary<HeaterType, double> HeaterEfficiency { get; } + + IReadOnlyDictionary<HeatPumpType, double> HeatPumpCoP { get; } } } diff --git a/VectoCommon/VectoCommon/BusAuxiliaries/ISSMDeclarationInputs.cs b/VectoCommon/VectoCommon/BusAuxiliaries/ISSMDeclarationInputs.cs index 3756f0ff30..6d83f958cd 100644 --- a/VectoCommon/VectoCommon/BusAuxiliaries/ISSMDeclarationInputs.cs +++ b/VectoCommon/VectoCommon/BusAuxiliaries/ISSMDeclarationInputs.cs @@ -27,6 +27,17 @@ namespace TUGraz.VectoCommon.BusAuxiliaries IAuxHeater AuxHeater { get; } string HVACTechnology { get; } + + //HeatPumpType HeatPumpTypeHeatingDriverCompartment { get; } + + HeatPumpType HeatPumpTypeDriverCompartment { get; } + + //HeatPumpType HeatPumpTypeHeatingPassengerCompartment { get; } + + HeatPumpType HeatPumpTypePassengerCompartment { get; } + + BusHVACSystemConfiguration HVACSystemConfiguration { get; } + string Source { get; } } @@ -91,7 +102,11 @@ namespace TUGraz.VectoCommon.BusAuxiliaries Watt HVACMaxCoolingPower { get; } - double COP { get; } + Watt HVACMaxCoolingPowerDriver { get; } + + Watt HVACMaxCoolingPowerPassenger { get; } + + //double COP { get; } } public interface IVentilation @@ -225,7 +240,7 @@ namespace TUGraz.VectoCommon.BusAuxiliaries private const string NON_R_744_4_STAGE = "non R-744 4-stage"; private const string NON_R_744_CONTINUOUS = "non R-744 continuous"; - public static HeatPumpType Parse(string parse) + public static HeatPumpType? TryParse(string parse) { switch (parse) { @@ -240,10 +255,21 @@ namespace TUGraz.VectoCommon.BusAuxiliaries case "2-stage": return HeatPumpType.non_R_744_2_stage; case "3-stage": return HeatPumpType.non_R_744_3_stage; case "4-stage": return HeatPumpType.non_R_744_4_stage; - default: throw new InvalidEnumArgumentException("HeatPumpType"); + default: return null; //throw new InvalidEnumArgumentException("HeatPumpType"); + } + } + + public static HeatPumpType Parse(string parse) + { + var retVal = TryParse(parse); + if (retVal == null) { + throw new InvalidEnumArgumentException("HeatPumpType"); } + + return retVal.Value; } + public static string GetLabel(this HeatPumpType? type) { if (type == null) { @@ -281,31 +307,60 @@ namespace TUGraz.VectoCommon.BusAuxiliaries return !type.IsElectrical(); } - public static double COP(this HeatPumpType type, FloorType floortype) - { - var cop = 3.5; + //public static double COP(this HeatPumpType type, FloorType floortype) + //{ + // var cop = 3.5; + + // switch (type) { + // case HeatPumpType.none: + // //case HeatPumpType.Unknown: + // return 0; + // case HeatPumpType.non_R_744_2_stage: + // return cop; + // case HeatPumpType.non_R_744_3_stage: + // case HeatPumpType.non_R_744_4_stage: + // return cop * 1.02; + // case HeatPumpType.non_R_744_continuous: + // case HeatPumpType.R_744: + // return floortype == FloorType.LowFloor + // ? cop * 1.04 + // : cop * 1.06; + // default: + // throw new ArgumentOutOfRangeException(); + // } + //} + } - switch (type) { - case HeatPumpType.none: - //case HeatPumpType.Unknown: - return 0; - case HeatPumpType.non_R_744_2_stage: - return cop; - case HeatPumpType.non_R_744_3_stage: - case HeatPumpType.non_R_744_4_stage: - return cop * 1.02; - case HeatPumpType.non_R_744_continuous: - case HeatPumpType.R_744: - return floortype == FloorType.LowFloor - ? cop * 1.04 - : cop * 1.06; - default: - throw new ArgumentOutOfRangeException(); + + [Flags] + public enum HeaterType + { + None = 0, + WaterElectricHeater = 1<<1, + AirElectricHeater = 1<<2, + OtherElectricHeating = 1<<3, + FuelHeater = 1<<4, + } + + public static class HeaterTypeHelper + { + private const string WATER_ELECTRIC_HEATER = "water electric heater"; + private const string AIR_ELECTRIC_HEATER = "air electric heater"; + private const string OTHER_ELECTRIC_HEATING = "other electric heating"; + private const string FUEL_HEATER = "fuel heater"; + + public static HeaterType? TryParse(string parse) + { + switch (parse) { + case WATER_ELECTRIC_HEATER: return HeaterType.WaterElectricHeater; + case AIR_ELECTRIC_HEATER: return HeaterType.AirElectricHeater; + case OTHER_ELECTRIC_HEATING: return HeaterType.OtherElectricHeating; + case FUEL_HEATER: return HeaterType.FuelHeater; + default: return null; } } } - public interface ISSMEngineeringInputs : ISSMInputs { Watt ElectricPower { get; } diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/BusAuxiliaryInputData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/BusAuxiliaryInputData.cs index 19fb8d9ff3..6cfb5309d5 100644 --- a/VectoCore/VectoCore/InputData/FileIO/JSON/BusAuxiliaryInputData.cs +++ b/VectoCore/VectoCore/InputData/FileIO/JSON/BusAuxiliaryInputData.cs @@ -57,7 +57,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON ElectricalUserInputsConfig = ec, PneumaticAuxillariesConfig = pac, PneumaticUserInputsConfig = puc, - SSMInputs = ssm, + SSMInputsCooling = ssm, Actuations = actuations, VehicleData = vehicleData }; diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/SSMInputData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/SSMInputData.cs index d3664bbff3..e1bab9b6db 100644 --- a/VectoCore/VectoCore/InputData/FileIO/JSON/SSMInputData.cs +++ b/VectoCore/VectoCore/InputData/FileIO/JSON/SSMInputData.cs @@ -1,4 +1,5 @@ -using System.IO; +using System.Collections.Generic; +using System.IO; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using TUGraz.VectoCommon.BusAuxiliaries; @@ -36,7 +37,10 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON var genInput = ((JObject)body["SSMInputs"]); var retVal = new SSMInputs(fileName); - + + var heatPumpCoP = new Dictionary<HeatPumpType, double>(); + var heaterEff = new Dictionary<HeaterType, double>(); + retVal.GFactor = genInput.GetEx<double>("BC_GFactor"); //retVal.PassengerBoundaryTemperature = genInput.GetEx<double>("BC_PassengerBoundaryTemperature").DegCelsiusToKelvin(); retVal.HeatingBoundaryTemperature = genInput.GetEx<double>("BC_HeatingBoundaryTemperature").DegCelsiusToKelvin(); @@ -47,7 +51,10 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON retVal.SpecificVentilationPower = genInput.GetEx<double>("BC_SpecificVentilationPower").SI(Unit.SI.Watt.Hour.Per.Cubic.Meter).Cast<JoulePerCubicMeter>(); retVal.AuxHeaterEfficiency = genInput.GetEx<double>("BC_AuxHeaterEfficiency"); retVal.UValue = genInput.GetEx<double>("BC_UValue").SI<WattPerKelvinSquareMeter>(); - retVal.COP = genInput.GetEx<double>("AC_COP"); + //retVal.COP = genInput.GetEx<double>("AC_COP"); + foreach (var entry in EnumHelper.GetValues<HeatPumpType>()) { + heatPumpCoP.Add(entry, genInput.GetEx<double>("AC_COP")); + } //retVal.GCVDieselOrHeatingOil = genInput.GetEx<double>("BC_GCVDieselOrHeatingOil").SI(Unit.SI.Kilo.Watt.Hour.Per.Kilo.Gramm).Cast<JoulePerKilogramm>(); //retVal.MaxTemperatureDeltaForLowFloorBusses = genInput.GetEx<double>("BC_MaxTemperatureDeltaForLowFloorBusses").SI<Kelvin>(); retVal.MaxPossibleBenefitFromTechnologyList = genInput.GetEx<double>("BC_MaxPossibleBenefitFromTechnologyList"); @@ -62,11 +69,11 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON //retVal.Solar = genInput.GetEx<double>("EC_Solar").SI<WattPerSquareMeter>(); retVal.DefaultConditions = new EnvironmentalConditionMapEntry( genInput.GetEx<double>("EC_EnviromentalTemperature").DegCelsiusToKelvin(), - genInput.GetEx<double>("EC_Solar").SI<WattPerSquareMeter>(), 1.0); + genInput.GetEx<double>("EC_Solar").SI<WattPerSquareMeter>(), 1.0, heatPumpCoP, heaterEff); //retVal.EnviromentalConditions_BatchFile = genInput.GetEx<string>("EC_EnviromentalConditions_BatchFile"); //retVal.BatchMode = genInput.GetEx<bool>("EC_EnviromentalConditions_BatchEnabled"); retVal.HVACCompressorType = HeatPumpTypeHelper.Parse(genInput.GetEx<string>("AC_CompressorType")); - retVal.HVACMaxCoolingPower = genInput.GetEx<double>("AC_CompressorCapacitykW").SI(Unit.SI.Kilo.Watt).Cast<Watt>(); + retVal.HVACMaxCoolingPowerPassenger = genInput.GetEx<double>("AC_CompressorCapacitykW").SI(Unit.SI.Kilo.Watt).Cast<Watt>(); retVal.VentilationOnDuringHeating = genInput.GetEx<bool>("VEN_VentilationOnDuringHeating"); retVal.VentilationWhenBothHeatingAndACInactive = genInput.GetEx<bool>("VEN_VentilationWhenBothHeatingAndACInactive"); retVal.VentilationDuringAC = genInput.GetEx<bool>("VEN_VentilationDuringAC"); diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationBusAuxiliariesDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationBusAuxiliariesDataProvider.cs index 95db59ab68..9eb37a499d 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationBusAuxiliariesDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationBusAuxiliariesDataProvider.cs @@ -484,7 +484,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider public override BusHVACSystemConfiguration? SystemConfiguration => ElementExists(XMLNames.Bus_SystemConfiguration) - ? BusHVACSystemConfigurationHelper.Parse(GetString(XMLNames.Bus_SystemConfiguration)) : null; + ? BusHVACSystemConfigurationHelper.Parse(GetString(XMLNames.Bus_SystemConfiguration)) : (BusHVACSystemConfiguration?)null; public override HeatPumpType? HeatPumpTypeCoolingDriverCompartment => ElementExists(XMLNames.Bus_HeatPumpTypeDriver) diff --git a/VectoCore/VectoCore/InputData/Reader/ComponentData/EnvironmentalContidionsMapReader.cs b/VectoCore/VectoCore/InputData/Reader/ComponentData/EnvironmentalContidionsMapReader.cs index ee81cf6cdd..c058f95693 100644 --- a/VectoCore/VectoCore/InputData/Reader/ComponentData/EnvironmentalContidionsMapReader.cs +++ b/VectoCore/VectoCore/InputData/Reader/ComponentData/EnvironmentalContidionsMapReader.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; @@ -44,12 +45,43 @@ namespace TUGraz.VectoCore.InputData.Reader.ComponentData data.Columns.Cast<DataColumn>().Select(x => x.ColumnName).Join()); } + var heatpumps = new List<Tuple<string, HeatPumpType>>(); + var heater = new List<Tuple<string, HeaterType>>(); + foreach (DataColumn column in data.Columns) { + var heatPump = HeatPumpTypeHelper.TryParse(column.ColumnName); + if (heatPump != null) { + heatpumps.Add(Tuple.Create(column.ColumnName, heatPump.Value)); + } + + var heaterCol = HeaterTypeHelper.TryParse(column.ColumnName); + if (heaterCol != null) { + heater.Add(Tuple.Create(column.ColumnName, heaterCol.Value)); + } + } + foreach (DataRow row in data.Rows) { + var cooling = row.Field<string>(Fields.HeatingCooling) + .Equals("c", StringComparison.InvariantCultureIgnoreCase); + var heatPumpCoP = new Dictionary<HeatPumpType, double>(); + foreach (var entry in heatpumps) { + var val = row.ParseDoubleOrGetDefault(entry.Item1, double.NaN); + if (double.IsNaN(val)) { continue; } + heatPumpCoP.Add(entry.Item2, val); + } + + var heaterEfficiency = new Dictionary<HeaterType, double>(); + foreach (var entry in heater) { + var val = row.ParseDoubleOrGetDefault(entry.Item1, double.NaN); + if (double.IsNaN(val)) { continue; } + heaterEfficiency.Add(entry.Item2, val); + } entries.Add( new EnvironmentalConditionMapEntry( row.ParseDouble(Fields.EnvTemp).DegCelsiusToKelvin(), row.ParseDouble(Fields.Solar).SI<WattPerSquareMeter>(), - row.ParseDouble(Fields.WeightingFactor))); + row.ParseDouble(Fields.WeightingFactor), + heatPumpCoP, + heaterEfficiency)); } var sum = entries.Sum(e => e.Weighting); @@ -72,6 +104,8 @@ namespace TUGraz.VectoCore.InputData.Reader.ComponentData public const string EnvTemp = "EnvTemp"; public const string Solar = "Solar"; public const string WeightingFactor = "WeightingFactor"; + + public const string HeatingCooling = "heating/cooling"; } } } diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs index e506ec9a26..251db4d677 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/EngineeringDataAdapter.cs @@ -625,7 +625,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter ParkBrakeAndDoors = 0, CycleTime = 1.SI<Second>() }, - SSMInputs = new SSMEngineeringInputs() { + SSMInputsCooling = new SSMEngineeringInputs() { MechanicalPower = busAux.HVACData.MechanicalPowerDemand, ElectricPower = busAux.HVACData.ElectricalPowerDemand, AuxHeaterPower = busAux.HVACData.AuxHeaterPower, @@ -695,7 +695,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter ParkBrakeAndDoors = 0, CycleTime = 1.SI<Second>() }, - SSMInputs = new SSMEngineeringInputs() { + SSMInputsCooling = new SSMEngineeringInputs() { MechanicalPower = 0.SI<Watt>(), ElectricPower = 0.SI<Watt>(), AuxHeaterPower = 0.SI<Watt>(), diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/AuxiliaryDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/AuxiliaryDataAdapter.cs index 09cfb91903..29bbf551ab 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/AuxiliaryDataAdapter.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/AuxiliaryDataAdapter.cs @@ -34,12 +34,18 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen public interface IPrimaryBusAuxiliaryDataAdapter : IAuxiliaryDataAdapter { AuxiliaryConfig CreateBusAuxiliariesData(Mission mission, IVehicleDeclarationInputData primaryVehicle, VectoRunData runData); - IDictionary<string, AuxiliaryDataAdapter.ElectricConsumerEntry> GetElectricConsumers(Mission mission, IVehicleDeclarationInputData completedVehicle, IActuations actuations, VehicleClass vehicleClass); - ElectricsUserInputsConfig GetDefaultElectricalUserConfig(); - double CalculateAlternatorEfficiency(IList<IAlternatorDeclarationInputData> alternators); - IPneumaticsConsumersDemand CreatePneumaticAuxConfig(RetarderType retarderType); - SSMInputs GetDefaulSSMInputs(IFuelProperties heatingFuel); - TechnologyBenefits SelectBenefitForFloorType(FloorType floorType, List<SSMTechnology> onVehicle); + + //IDictionary<string, AuxiliaryDataAdapter.ElectricConsumerEntry> GetElectricConsumers(Mission mission, IVehicleDeclarationInputData completedVehicle, IActuations actuations, VehicleClass vehicleClass); + + //ElectricsUserInputsConfig GetDefaultElectricalUserConfig(); + + //double CalculateAlternatorEfficiency(IList<IAlternatorDeclarationInputData> alternators); + + //IPneumaticsConsumersDemand CreatePneumaticAuxConfig(RetarderType retarderType); + + //SSMInputs GetDefaulSSMInputs(IFuelProperties heatingFuel); + + //TechnologyBenefits SelectBenefitForFloorType(FloorType floorType, List<SSMTechnology> onVehicle); } @@ -377,23 +383,30 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen StopBrakeActuation = Constants.BusAuxiliaries.PneumaticConsumersDemands.StopBrakeActuation, }; } - public virtual ISSMDeclarationInputs CreateSSMModelParameters(IBusAuxiliariesDeclarationData busAuxInputData, Mission mission, IFuelProperties heatingFuel, LoadingType loadingType) + + + + public virtual ISSMDeclarationInputs CreateSSMModelParameters(IBusAuxiliariesDeclarationData busAuxInputData, + Mission mission, + LoadingType loadingType, BusHVACSystemConfiguration applicableHVACConfiguration, + HeatPumpType driverHeatpumpType, HeatPumpType passengerHeatpumpType, Watt auxHeaterPower, + IFuelProperties heatingFuel) { var busParams = mission.BusParameter; - + var isDoubleDecker = busParams.VehicleCode.IsDoubleDeckerBus(); - var internalLength = busParams.HVACConfiguration == BusHVACSystemConfiguration.Configuration2 + var internalLength = applicableHVACConfiguration == BusHVACSystemConfiguration.Configuration2 ? 2 * Constants.BusParameters.DriverCompartmentLength // OK : DeclarationData.BusAuxiliaries.CalculateInternalLength(busParams.VehicleLength, busParams.VehicleCode, 10); // missing: correction length for low floor buses var internalHeight = DeclarationData.BusAuxiliaries.CalculateInternalHeight(mission.BusParameter.VehicleCode, RegistrationClass.II, busParams.BodyHeight); - var coolingPower = CalculateMaxCoolingPower(null, null, mission); + var coolingPower = CalculateMaxCoolingPower(mission, applicableHVACConfiguration); var retVal = GetDefaulSSMInputs(heatingFuel); retVal.BusFloorType = busParams.VehicleCode.GetFloorType(); retVal.Technologies = GetSSMTechnologyBenefits(busAuxInputData, mission.BusParameter.VehicleCode.GetFloorType()); - retVal.FuelFiredHeaterPower = busParams.HVACAuxHeaterPower; + retVal.FuelFiredHeaterPower = auxHeaterPower; retVal.BusWindowSurface = DeclarationData.BusAuxiliaries.WindowHeight(busParams.DoubleDecker) * internalLength + DeclarationData.BusAuxiliaries.FrontAndRearWindowArea(busParams.DoubleDecker); retVal.BusSurfaceArea = 2 * (internalLength * busParams.VehicleWidth + internalLength * internalHeight + @@ -405,22 +418,41 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen DeclarationData.BusAuxiliaries.CalculateBusFloorSurfaceArea(internalLength, busParams.VehicleWidth) * (loadingType == LoadingType.LowLoading ? mission.BusParameter.PassengerDensityLow : mission.BusParameter.PassengerDensityRef) * (loadingType == LoadingType.LowLoading ? mission.MissionType.GetLowLoadFactorBus() : 1.0) + 1; // add driver for 'heat input' - retVal.VentilationRate = DeclarationData.BusAuxiliaries.VentilationRate(busParams.HVACConfiguration, false); - retVal.VentilationRateHeating = DeclarationData.BusAuxiliaries.VentilationRate(busParams.HVACConfiguration, true); + retVal.VentilationRate = DeclarationData.BusAuxiliaries.VentilationRate(applicableHVACConfiguration, false); + retVal.VentilationRateHeating = DeclarationData.BusAuxiliaries.VentilationRate(applicableHVACConfiguration, true); - retVal.HVACMaxCoolingPower = coolingPower.Item1 + coolingPower.Item2; - retVal.HVACCompressorType = busParams.HVACCompressorType; // use passenger compartment - retVal.COP = DeclarationData.BusAuxiliaries.CalculateCOP( + //retVal.HVACMaxCoolingPower = coolingPower.Item1 + coolingPower.Item2; + retVal.HVACMaxCoolingPowerDriver = coolingPower.Item1; + retVal.HVACMaxCoolingPowerPassenger = coolingPower.Item2; - coolingPower.Item1, HeatPumpType.none, coolingPower.Item2, busParams.HVACCompressorType, - busParams.VehicleCode.GetFloorType()); - retVal.HVACTechnology = $"{busParams.HVACConfiguration.GetName()} " + - $"({string.Join(", ", busParams.HVACCompressorType.GetName(), HeatPumpType.none.GetName())})"; + retVal.HeatPumpTypeDriverCompartment = driverHeatpumpType; + retVal.HeatPumpTypePassengerCompartment = passengerHeatpumpType; - //SetHVACParameters(retVal, vehicleData, mission); + retVal.HVACSystemConfiguration = applicableHVACConfiguration; + retVal.HVACCompressorType = passengerHeatpumpType; // use passenger compartment + return retVal; } + + private HVACParameters GetHVACParams(VectoSimulationJobType vehicleType, BusParameters busParams) + { + switch (vehicleType) { + case VectoSimulationJobType.ConventionalVehicle: + return busParams.HVACConventional; + case VectoSimulationJobType.ParallelHybridVehicle: + case VectoSimulationJobType.SerialHybridVehicle: + case VectoSimulationJobType.IEPC_S: + case VectoSimulationJobType.IHPC: + return busParams.HVACHEV; + case VectoSimulationJobType.BatteryElectricVehicle: + case VectoSimulationJobType.IEPC_E: + return busParams.HVACPEV; + default: + throw new ArgumentOutOfRangeException(nameof(vehicleType), vehicleType, null); + } + } + protected virtual TechnologyBenefits GetSSMTechnologyBenefits(IBusAuxiliariesDeclarationData inputData, FloorType floorType) { var onVehicle = new List<SSMTechnology>(); @@ -502,7 +534,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen }; } - protected virtual Tuple<Watt, Watt> CalculateMaxCoolingPower(IVehicleDeclarationInputData vehicleData, IVehicleDeclarationInputData primaryVehicle, Mission mission) + protected virtual Tuple<Watt, Watt> CalculateMaxCoolingPower(Mission mission, BusHVACSystemConfiguration hvacConfiguration) { var busParams = mission.BusParameter; @@ -513,9 +545,9 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen var volume = length * height * busParams.VehicleWidth; var driver = DeclarationData.BusAuxiliaries.HVACMaxCoolingPower.DriverMaxCoolingPower( - busParams.HVACConfiguration, mission.MissionType); + hvacConfiguration, mission.MissionType); var passenger = DeclarationData.BusAuxiliaries.HVACMaxCoolingPower.PassengerMaxCoolingPower( - busParams.HVACConfiguration, mission.MissionType, volume); + hvacConfiguration, mission.MissionType, volume); return Tuple.Create(driver, passenger); } @@ -526,6 +558,13 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen { var actuations = DeclarationData.BusAuxiliaries.ActuationsMap.Lookup(runData.Mission.MissionType); + var hvacParams = GetHVACParams(primaryVehicle.VehicleType, mission.BusParameter); + + var applicableHVACConfigCooling = DeclarationData.BusAuxiliaries.GetHVACConfig(hvacParams.HVACConfiguration, + HeatPumpType.none, hvacParams.HeatPumpTypePassengerCompartmentCooling); + var applicableHVACConfigHeating = DeclarationData.BusAuxiliaries.GetHVACConfig(hvacParams.HVACConfiguration, + HeatPumpType.none, hvacParams.HeatPumpTypePassengerCompartmentHeating); + var retVal = new AuxiliaryConfig { InputData = primaryVehicle.Components.BusAuxiliaries, @@ -533,8 +572,10 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen PneumaticUserInputsConfig = GetPneumaticUserConfig(primaryVehicle, mission), PneumaticAuxillariesConfig = CreatePneumaticAuxConfig(runData.Retarder.Type), Actuations = actuations, - SSMInputs = CreateSSMModelParameters( - primaryVehicle.Components.BusAuxiliaries, mission, FuelData.Diesel, runData.Loading), + SSMInputsCooling = CreateSSMModelParameters(primaryVehicle.Components.BusAuxiliaries, mission, + runData.Loading, applicableHVACConfigCooling, HeatPumpType.none, hvacParams.HeatPumpTypePassengerCompartmentCooling, hvacParams.HVACAuxHeaterPower, FuelData.Diesel), + SSMInputsHeating = CreateSSMModelParameters(primaryVehicle.Components.BusAuxiliaries, mission, + runData.Loading, applicableHVACConfigCooling, HeatPumpType.none, hvacParams.HeatPumpTypePassengerCompartmentHeating, hvacParams.HVACAuxHeaterPower, FuelData.Diesel), VehicleData = runData.VehicleData, }; @@ -596,11 +637,11 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen public class SpecificCompletedBusAuxiliaryDataAdapter : PrimaryBusAuxiliaryDataAdapter, ICompletedBusAuxiliaryDataAdapter { - private readonly IPrimaryBusAuxiliaryDataAdapter _primaryBusDataAdapter; + private readonly PrimaryBusAuxiliaryDataAdapter _primaryBusDataAdapter; public SpecificCompletedBusAuxiliaryDataAdapter(IPrimaryBusAuxiliaryDataAdapter primaryBusDataAdapter) { - _primaryBusDataAdapter = primaryBusDataAdapter; + _primaryBusDataAdapter = primaryBusDataAdapter as PrimaryBusAuxiliaryDataAdapter; } private double GetNumberOfPassengers(Mission mission, Meter length, Meter width, double registeredPassengerSeats, double registeredPassengersStanding, LoadingType loading) @@ -653,11 +694,12 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen #endregion - private Tuple<Watt, Watt> CalculateMaxCoolingPower(IVehicleDeclarationInputData completedVehicle, IVehicleDeclarationInputData primaryVehicle, - Mission mission) + private Tuple<Watt, Watt> CalculateMaxCoolingPower(IVehicleDeclarationInputData completedVehicle, + IVehicleDeclarationInputData primaryVehicle, + Mission mission, BusHVACSystemConfiguration hvacConfiguration) { - var hvacConfiguration = completedVehicle.Components.BusAuxiliaries.HVACAux.SystemConfiguration; - if (!hvacConfiguration.HasValue || hvacConfiguration.IsOneOf(BusHVACSystemConfiguration.Configuration0, BusHVACSystemConfiguration.Unknown)) + //var hvacConfiguration = completedVehicle.Components.BusAuxiliaries.HVACAux.SystemConfiguration; + if (hvacConfiguration.IsOneOf(BusHVACSystemConfiguration.Configuration0, BusHVACSystemConfiguration.Unknown)) { throw new VectoException( $"HVAC Configuration {hvacConfiguration.ToXmlFormat()} is invalid for final step"); @@ -705,70 +747,92 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen }; } - private SSMInputs GetCompletedSSMInput(Mission mission, IVehicleDeclarationInputData completedVehicle, + private (SSMInputs, SSMInputs) GetCompletedSSMInput(Mission mission, + IVehicleDeclarationInputData completedVehicle, IVehicleDeclarationInputData primaryVehicle, LoadingType loadingType) { - var isDoubleDecker = completedVehicle.VehicleCode.IsDoubleDeckerBus(); + var hvacConfiguration = completedVehicle.Components.BusAuxiliaries.HVACAux.SystemConfiguration; var busAux = completedVehicle.Components.BusAuxiliaries.HVACAux; + if (hvacConfiguration == null || hvacConfiguration.Value == BusHVACSystemConfiguration.Configuration0) { + throw new VectoException("HVAC Configuration has to be set for completed stage!"); + } - if (mission.BusParameter.SeparateAirDistributionDuctsHVACCfg.Contains(hvacConfiguration) && - (busAux.SeparateAirDistributionDucts == null || !busAux.SeparateAirDistributionDucts.Value)) - { - throw new VectoException("Input parameter 'separate air distribution ducts' has to be set to 'true' for vehicle group '{0}' and HVAC configuration '{1}'", + if (mission.BusParameter.SeparateAirDistributionDuctsHVACCfg.Contains(hvacConfiguration.Value) && + (busAux.SeparateAirDistributionDucts == null || !busAux.SeparateAirDistributionDucts.Value)) { + throw new VectoException( + "Input parameter 'separate air distribution ducts' has to be set to 'true' for vehicle group '{0}' and HVAC configuration '{1}'", mission.BusParameter.BusGroup.GetClassNumber(), hvacConfiguration.GetName()); } - if (completedVehicle.NumberPassengerSeatsLowerDeck == null) - { + if (completedVehicle.NumberPassengerSeatsLowerDeck == null) { throw new VectoException("NumberOfPassengerSeatsLowerDeck input parameter is required"); } - if (completedVehicle.NumberPassengerSeatsUpperDeck == null) - { + + if (completedVehicle.NumberPassengerSeatsUpperDeck == null) { throw new VectoException("NumberOfPassengerSeatsUpperDeck input parameter is required"); } - if (completedVehicle.NumberPassengersStandingLowerDeck == null) - { + + if (completedVehicle.NumberPassengersStandingLowerDeck == null) { throw new VectoException("NumberOfPassengersStandingLowerDeck input parameter is required"); } - if (completedVehicle.NumberPassengersStandingUpperDeck == null) - { + + if (completedVehicle.NumberPassengersStandingUpperDeck == null) { throw new VectoException("NumberOfPassengersStandingUpperDeck input parameter is required"); } - if (busAux.HeatPumpTypeCoolingDriverCompartment == null) - { + + if (busAux.HeatPumpTypeCoolingDriverCompartment == null) { throw new VectoException("HeatPumpTypeDriverCompartment Cooling input parameter is required"); } - if (busAux.HeatPumpTypeHeatingDriverCompartment == null) - { + + if (busAux.HeatPumpTypeHeatingDriverCompartment == null) { throw new VectoException("HeatPumpTypeDriverCompartment Heating input parameter is required"); } - if (busAux.HeatPumpTypeCoolingPassengerCompartment == null) - { + + if (busAux.HeatPumpTypeCoolingPassengerCompartment == null) { throw new VectoException("HeatPumpTypePassengerCompartment Cooling input parameter is required"); } - if (busAux.HeatPumpTypeHeatingPassengerCompartment == null) - { + + if (busAux.HeatPumpTypeHeatingPassengerCompartment == null) { throw new VectoException("HeatPumpTypePassengerCompartment Heating input parameter is required"); } - - if (hvacConfiguration.RequiresDriverAC() && busAux.HeatPumpTypeCoolingDriverCompartment == HeatPumpType.none && busAux.HeatPumpTypeHeatingDriverCompartment == HeatPumpType.none) - { - throw new VectoException("HVAC System Configuration {0} requires DriverAC Technology", hvacConfiguration); + if (hvacConfiguration.RequiresDriverAC() && + (busAux.HeatPumpTypeCoolingDriverCompartment == HeatPumpType.none || + busAux.HeatPumpTypeHeatingDriverCompartment == HeatPumpType.none)) { + throw new VectoException("HVAC System Configuration {0} requires a Driver Heatpump Technology", + hvacConfiguration); } - if (hvacConfiguration.RequiresPassengerAC() && busAux.HeatPumpTypeCoolingPassengerCompartment == HeatPumpType.none && busAux.HeatPumpTypeHeatingPassengerCompartment == HeatPumpType.none) - { - throw new VectoException("HVAC System Configuration {0} requires PassengerAC Technology", hvacConfiguration); + if (hvacConfiguration.RequiresPassengerAC() && + (busAux.HeatPumpTypeCoolingPassengerCompartment == HeatPumpType.none || + busAux.HeatPumpTypeHeatingPassengerCompartment == HeatPumpType.none)) { + throw new VectoException("HVAC System Configuration {0} requires a Passenger Heatpump Technology", + hvacConfiguration); } + var applicableSystemConfigCooling = DeclarationData.BusAuxiliaries.GetHVACConfig(hvacConfiguration.Value, + busAux.HeatPumpTypeCoolingDriverCompartment.Value, busAux.HeatPumpTypeCoolingPassengerCompartment.Value); + var applicableSystemConfigHeating = DeclarationData.BusAuxiliaries.GetHVACConfig(hvacConfiguration.Value, + busAux.HeatPumpTypeHeatingDriverCompartment.Value, busAux.HeatPumpTypeHeatingPassengerCompartment.Value); + var ssmCooling = DoGetSsmInputs(mission, completedVehicle, primaryVehicle, loadingType, + applicableSystemConfigCooling, busAux.HeatPumpTypeCoolingDriverCompartment.Value, + busAux.HeatPumpTypeCoolingPassengerCompartment.Value); + var ssmHeating = DoGetSsmInputs(mission, completedVehicle, primaryVehicle, loadingType, + applicableSystemConfigHeating, busAux.HeatPumpTypeHeatingDriverCompartment.Value, + busAux.HeatPumpTypeHeatingPassengerCompartment.Value); - var heatPumpTypeDriverCompartment = busAux.HeatPumpTypeCoolingPassengerCompartment.Value; + return (ssmCooling, ssmHeating); + } - var heatPumpTypePassengerCompartment = busAux.HeatPumpTypeCoolingPassengerCompartment.Value; + private SSMInputs DoGetSsmInputs(Mission mission, IVehicleDeclarationInputData completedVehicle, + IVehicleDeclarationInputData primaryVehicle, LoadingType loadingType, + BusHVACSystemConfiguration hvacConfiguration, HeatPumpType heatPumpTypeDriverCompartment, + HeatPumpType heatPumpTypePassengerCompartment) + { + var isDoubleDecker = completedVehicle.VehicleCode.IsDoubleDeckerBus(); var internalLength = hvacConfiguration == BusHVACSystemConfiguration.Configuration2 ? 2 * Constants.BusParameters.DriverCompartmentLength // OK @@ -782,16 +846,13 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen var internalHeight = DeclarationData.BusAuxiliaries.CalculateInternalHeight(completedVehicle.VehicleCode, completedVehicle.RegisteredClass, completedVehicle.Height); var correctedBusWidth = DeclarationData.BusAuxiliaries.CorrectedBusWidth(completedVehicle.Width); - var coolingPower = CalculateMaxCoolingPower(completedVehicle, primaryVehicle, mission); - - - var floorType = completedVehicle.VehicleCode.GetFloorType(); + var coolingPower = CalculateMaxCoolingPower(completedVehicle, primaryVehicle, mission, hvacConfiguration); var ssmInputs = _primaryBusDataAdapter.GetDefaulSSMInputs(FuelData.Diesel); ssmInputs.BusFloorType = completedVehicle.VehicleCode.GetFloorType(); ssmInputs.Technologies = CreateTechnologyBenefits(completedVehicle, primaryVehicle.Components.BusAuxiliaries); - ssmInputs.FuelFiredHeaterPower = busAux.AuxHeaterPower; + ssmInputs.FuelFiredHeaterPower = completedVehicle.Components.BusAuxiliaries.HVACAux.AuxHeaterPower; ssmInputs.BusWindowSurface = DeclarationData.BusAuxiliaries.WindowHeight(isDoubleDecker) * internalLength + DeclarationData.BusAuxiliaries.FrontAndRearWindowArea(isDoubleDecker); ssmInputs.BusSurfaceArea = 2 * (completedVehicle.Length * correctedBusWidth + internalLength * @@ -801,21 +862,24 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen ssmInputs.UValue = DeclarationData.BusAuxiliaries.UValue(completedVehicle.VehicleCode.GetFloorType()); ssmInputs.NumberOfPassengers = GetNumberOfPassengers( mission, internalLength, correctedBusWidth, - completedVehicle.NumberPassengerSeatsLowerDeck.Value + completedVehicle.NumberPassengerSeatsUpperDeck.Value, - completedVehicle.NumberPassengersStandingLowerDeck.Value + completedVehicle.NumberPassengersStandingUpperDeck.Value, - loadingType) + 1; // add driver for 'heat input' + (completedVehicle.NumberPassengerSeatsLowerDeck ?? 0) + (completedVehicle.NumberPassengerSeatsUpperDeck ?? 0), + (completedVehicle.NumberPassengersStandingLowerDeck ?? 0) + (completedVehicle.NumberPassengersStandingUpperDeck ?? 0), + loadingType) + 1; // add driver for 'heat input' // passenger count can't be null as this is checked in the calling method already. use ?? to avoid compiler warning ssmInputs.VentilationRate = DeclarationData.BusAuxiliaries.VentilationRate(hvacConfiguration, false); ssmInputs.VentilationRateHeating = DeclarationData.BusAuxiliaries.VentilationRate(hvacConfiguration, true); - ssmInputs.HVACMaxCoolingPower = coolingPower.Item1 + coolingPower.Item2; + //ssmInputs.HVACMaxCoolingPower = coolingPower.Item1 + coolingPower.Item2; + ssmInputs.HVACMaxCoolingPowerDriver = coolingPower.Item1; + ssmInputs.HVACMaxCoolingPowerPassenger = coolingPower.Item2; - //ToDo FK COP calculation + //ssmInputs.HeatPumpTypeHeatingDriverCompartment = busAux.HeatPumpTypeHeatingDriverCompartment.Value; + ssmInputs.HeatPumpTypeDriverCompartment = heatPumpTypeDriverCompartment; + //ssmInputs.HeatPumpTypeHeatingPassengerCompartment = busAux.HeatPumpTypeHeatingPassengerCompartment.Value; + ssmInputs.HeatPumpTypePassengerCompartment = heatPumpTypePassengerCompartment; + + ssmInputs.HVACSystemConfiguration = hvacConfiguration; + ssmInputs.HVACCompressorType = heatPumpTypePassengerCompartment; // use passenger compartment - ssmInputs.HVACTechnology = $"{busAux.SystemConfiguration.GetName()} " + - $"({string.Join(", ", heatPumpTypePassengerCompartment.GetName(), heatPumpTypeDriverCompartment.GetName())})"; - ssmInputs.COP = DeclarationData.BusAuxiliaries.CalculateCOP( - coolingPower.Item1, heatPumpTypeDriverCompartment, coolingPower.Item2, heatPumpTypePassengerCompartment /* average */, - floorType); return ssmInputs; } @@ -933,6 +997,9 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen var actuations = DeclarationData.BusAuxiliaries.ActuationsMap.Lookup(runData.Mission.MissionType); var primaryBusAuxiliaries = primaryVehicle.Components.BusAuxiliaries; + var (ssmCooling, ssmHeating) = + GetCompletedSSMInput(mission, completedVehicle, primaryVehicle, runData.Loading); + return new AuxiliaryConfig { InputData = completedVehicle.Components.BusAuxiliaries, @@ -942,7 +1009,8 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen primaryBusAuxiliaries, completedVehicle), PneumaticAuxillariesConfig = _primaryBusDataAdapter.CreatePneumaticAuxConfig(runData.Retarder.Type), Actuations = actuations, - SSMInputs = GetCompletedSSMInput(mission, completedVehicle, primaryVehicle, runData.Loading), + SSMInputsCooling = ssmCooling, + SSMInputsHeating = ssmHeating, VehicleData = runData.VehicleData }; } diff --git a/VectoCore/VectoCore/Models/BusAuxiliaries/AuxiliaryConfig.cs b/VectoCore/VectoCore/Models/BusAuxiliaries/AuxiliaryConfig.cs index 6b22d95990..80170b6a7b 100644 --- a/VectoCore/VectoCore/Models/BusAuxiliaries/AuxiliaryConfig.cs +++ b/VectoCore/VectoCore/Models/BusAuxiliaries/AuxiliaryConfig.cs @@ -31,7 +31,9 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries public IPneumaticsConsumersDemand PneumaticAuxillariesConfig { get; internal set; } - public ISSMInputs SSMInputs { get; internal set; } + public ISSMInputs SSMInputsCooling { get; internal set; } + + public ISSMInputs SSMInputsHeating { get; internal set; } //public IActuationsMap ActuationsMap { get; internal set; } public IActuations Actuations { get; internal set; } diff --git a/VectoCore/VectoCore/Models/BusAuxiliaries/BusAuxiliaries.cs b/VectoCore/VectoCore/Models/BusAuxiliaries/BusAuxiliaries.cs index 03bf3cc354..ab5e99422d 100644 --- a/VectoCore/VectoCore/Models/BusAuxiliaries/BusAuxiliaries.cs +++ b/VectoCore/VectoCore/Models/BusAuxiliaries/BusAuxiliaries.cs @@ -47,9 +47,9 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries // SSM HVAC //var ssmPath = FilePathUtils.ResolveFilePath(vectoDirectory, auxConfig.HvacUserInputsConfig.SSMFilePath); //var BusDatabase = FilePathUtils.ResolveFilePath(vectoDirectory, auxConfig.HvacUserInputsConfig.BusDatabasePath); - ssmTool = auxConfig.SSMInputs is ISSMEngineeringInputs ? - new SimpleSSMTool(auxConfig.SSMInputs) - : (ISSMPowerDemand)new SSMTOOL(auxConfig.SSMInputs); + ssmTool = auxConfig.SSMInputsCooling is ISSMEngineeringInputs ? + new SimpleSSMTool(auxConfig.SSMInputsCooling) + : (ISSMPowerDemand)new SSMTOOL(auxConfig.SSMInputsCooling); var electricUserInputConfigNoAlternator = new ElectricsUserInputsConfig() { @@ -166,12 +166,12 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries throw new VectoException("Auxiliary configuration missing!"); } - if (auxConfig.SSMInputs is ISSMEngineeringInputs ssmEngineeringInputs) { + if (auxConfig.SSMInputsCooling is ISSMEngineeringInputs ssmEngineeringInputs) { var M14eng = new M14bImpl(ssmEngineeringInputs); return M14eng.AuxHeaterDemand(cycleTime, engineWasteHeatTotal); } - var M14 = new M14aImpl(new SSMTOOL(auxConfig.SSMInputs)); + var M14 = new M14aImpl(new SSMTOOL(auxConfig.SSMInputsCooling)); return M14.AuxHeaterDemand(cycleTime, engineWasteHeatTotal); } @@ -185,9 +185,9 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries // SSM HVAC //var ssmPath = FilePathUtils.ResolveFilePath(vectoDirectory, auxConfig.HvacUserInputsConfig.SSMFilePath); //var BusDatabase = FilePathUtils.ResolveFilePath(vectoDirectory, auxConfig.HvacUserInputsConfig.BusDatabasePath); - var ssmTool = auxConfig.SSMInputs is ISSMEngineeringInputs ? - new SimpleSSMTool(auxConfig.SSMInputs) - : (ISSMPowerDemand)new SSMTOOL(auxConfig.SSMInputs); + var ssmTool = auxConfig.SSMInputsCooling is ISSMEngineeringInputs ? + new SimpleSSMTool(auxConfig.SSMInputsCooling) + : (ISSMPowerDemand)new SSMTOOL(auxConfig.SSMInputsCooling); M0 = new M00Impl(auxConfig.ElectricalUserInputsConfig, Signals, ssmTool.ElectricalWAdjusted); diff --git a/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/HVAC/EnvironmentalConditionMapEntry.cs b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/HVAC/EnvironmentalConditionMapEntry.cs index 647a794c95..12884e42c7 100644 --- a/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/HVAC/EnvironmentalConditionMapEntry.cs +++ b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/HVAC/EnvironmentalConditionMapEntry.cs @@ -1,18 +1,30 @@ -using TUGraz.VectoCommon.BusAuxiliaries; +using System.Collections.Generic; +using TUGraz.VectoCommon.BusAuxiliaries; using TUGraz.VectoCommon.Utils; namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC { public class EnvironmentalConditionMapEntry : IEnvironmentalConditionsMapEntry { - - public EnvironmentalConditionMapEntry(Kelvin temperature, WattPerSquareMeter solar, double weight) + public EnvironmentalConditionMapEntry(Kelvin temperature, WattPerSquareMeter solar, double weight) : this( + temperature, solar, weight, new Dictionary<HeatPumpType, double>(), + new Dictionary<HeaterType, double>()) + { } + + public EnvironmentalConditionMapEntry(Kelvin temperature, WattPerSquareMeter solar, double weight, + Dictionary<HeatPumpType, double> heatPumpCoP, Dictionary<HeaterType, double> heaterEfficiency) { Temperature = temperature; Solar = solar; Weighting = weight; + HeatPumpCoP = heatPumpCoP; + HeaterEfficiency = heaterEfficiency; } + public IReadOnlyDictionary<HeaterType, double> HeaterEfficiency { get; } + + public IReadOnlyDictionary<HeatPumpType, double> HeatPumpCoP { get; } + public Kelvin Temperature { get; } public WattPerSquareMeter Solar { get; } diff --git a/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/HVAC/SSMCalculate.cs b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/HVAC/SSMCalculate.cs index f1d2626a4c..353f544600 100644 --- a/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/HVAC/SSMCalculate.cs +++ b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/HVAC/SSMCalculate.cs @@ -3,6 +3,7 @@ using System.Text; using TUGraz.VectoCommon.BusAuxiliaries; using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.Models.BusAuxiliaries.Interfaces.DownstreamModules.HVAC; +using TUGraz.VectoCore.Models.Declaration; namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC { @@ -455,33 +456,71 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC // Dim I94 = BaseCoolingW_ElectricalVentilation // Dim I95 = BaseVentilationW_ElectricalVentilation - + var cop = GetCoP(genInputs, env); + var electricCoolingPower = double.IsNaN(cop) + ? 0.SI<Watt>() + : VectoMath.Min(BaseCoolingW_ElectricalCoolingHeating(env.Temperature, env.Solar), + genInputs.ACSystem.HVACMaxCoolingPower) / + cop; var electricalWBaseCurrentResult = - VectoMath.Min( - BaseCoolingW_ElectricalCoolingHeating(env.Temperature, env.Solar), genInputs.ACSystem.HVACMaxCoolingPower) / - genInputs.ACSystem.COP + BaseHeatingW_ElectricalVentilation(env.Temperature, env.Solar) + + electricCoolingPower + BaseHeatingW_ElectricalVentilation(env.Temperature, env.Solar) + BaseCoolingW_ElectricalVentilation(env.Temperature, env.Solar) + BaseVentilationW_ElectricalVentilation(env.Temperature, env.Solar); return electricalWBaseCurrentResult * env.Weighting; } - private Watt CalculateMechanicalWBase(ISSMDeclarationInputs genInputs, IEnvironmentalConditionsMapEntry env) + private double GetCoP(ISSMDeclarationInputs genInputs, IEnvironmentalConditionsMapEntry env) { - // =MIN(F94,C54*1000)/C59 + var hvacConfig = genInputs.HVACSystemConfiguration; + if (hvacConfig.RequiresDriverAC() && hvacConfig.RequiresPassengerAC()) { + var coolingTechDriver = genInputs.HeatPumpTypeDriverCompartment; + var coolingTechPassenger = genInputs.HeatPumpTypePassengerCompartment; + + var copDriver = env.HeatPumpCoP.ContainsKey(coolingTechDriver) ? env.HeatPumpCoP[coolingTechDriver] : double.NaN; + var copPassenger = env.HeatPumpCoP.ContainsKey(coolingTechPassenger) ? env.HeatPumpCoP[coolingTechPassenger] : double.NaN; + + if (double.IsNaN(copDriver) || double.IsNaN(copPassenger)) { + return double.NaN; + } + + return (genInputs.ACSystem.HVACMaxCoolingPowerDriver * copDriver + genInputs.ACSystem.HVACMaxCoolingPowerPassenger * copPassenger) / + (genInputs.ACSystem.HVACMaxCoolingPowerDriver + genInputs.ACSystem.HVACMaxCoolingPowerPassenger); + } + + if (hvacConfig.RequiresPassengerAC()) { + var coolingTechPassenger = genInputs.HeatPumpTypePassengerCompartment; + var copPassenger = env.HeatPumpCoP.ContainsKey(coolingTechPassenger) ? env.HeatPumpCoP[coolingTechPassenger] : double.NaN; + return copPassenger; + } + if (hvacConfig.RequiresDriverAC()) { + var coolingTechDriver = genInputs.HeatPumpTypeDriverCompartment; + var copDriver = env.HeatPumpCoP.ContainsKey(coolingTechDriver) ? env.HeatPumpCoP[coolingTechDriver] : double.NaN; + return copDriver; + } + + return double.NaN; + } + private Watt CalculateMechanicalWBase(ISSMDeclarationInputs genInputs, IEnvironmentalConditionsMapEntry env) + { + // =MIN(F94,C54*1000)/C59 // Dim F94 = BaseCoolingW_Mechanical // Dim C54 = genInputs.AC_CompressorCapacitykW // Dim C59 = genInputs.AC_COP - var MechanicalWBaseCurrentResult = VectoMath.Min( - BaseCoolingW_Mechanical(env.Temperature, env.Solar), genInputs.ACSystem.HVACMaxCoolingPower) / - genInputs.ACSystem.COP; + var cop = GetCoP(genInputs, env); - return MechanicalWBaseCurrentResult * env.Weighting; + var mechanicalWBaseCurrentResult = double.IsNaN(cop) + ? 0.SI<Watt>() + : VectoMath.Min( + BaseCoolingW_Mechanical(env.Temperature, env.Solar), genInputs.ACSystem.HVACMaxCoolingPower) / + cop; + + return mechanicalWBaseCurrentResult * env.Weighting; } //private KilogramPerSecond CalculateFuelLPerHBase(ISSMInputs genInputs, IEnvironmentalConditionsMapEntry env) @@ -511,7 +550,10 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC var H94 = BaseCoolingW_ElectricalCoolingHeating(env.Temperature, env.Solar); var H100 = TechListAdjustedCoolingW_ElectricalCoolingHeating; var C54 = genInputs.ACSystem.HVACMaxCoolingPower; - var C59 = genInputs.ACSystem.COP; + var C59 = GetCoP(genInputs, env); + if (double.IsNaN(C59) && H94.IsEqual(0)) { + return 0.SI<Watt>(); + } var I93 = BaseHeatingW_ElectricalVentilation(env.Temperature, env.Solar); var I94 = BaseCoolingW_ElectricalVentilation(env.Temperature, env.Solar); @@ -533,8 +575,10 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC var F94 = BaseCoolingW_Mechanical(env.Temperature, env.Solar); var F100 = TechListAdjustedCoolingW_Mechanical; var C54 = genInputs.ACSystem.HVACMaxCoolingPower; - var C59 = genInputs.ACSystem.COP; - + var C59 = GetCoP(genInputs, env); + if (double.IsNaN(C59) && F94.IsEqual(0)) { + return 0.SI<Watt>(); + } var MechanicalWBaseAdjusted = (VectoMath.Min((F94 * (1 - F100)), C54) / C59); return MechanicalWBaseAdjusted * env.Weighting; diff --git a/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/HVAC/SSMInputs.cs b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/HVAC/SSMInputs.cs index ec98baf60b..8eb8d491f9 100644 --- a/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/HVAC/SSMInputs.cs +++ b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/HVAC/SSMInputs.cs @@ -112,14 +112,18 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC // C54 - ( KW ) - public Watt HVACMaxCoolingPower { get; set; } + public Watt HVACMaxCoolingPower => (HVACMaxCoolingPowerDriver ?? 0.SI<Watt>()) + (HVACMaxCoolingPowerPassenger ?? 0.SI<Watt>()); - // C59 - public double COP { get; set; } + public Watt HVACMaxCoolingPowerDriver { get; set; } + public Watt HVACMaxCoolingPowerPassenger { get; set; } - // C62 - Boolean Yes/No - public bool VentilationOnDuringHeating { get; set; } + // C59 + //public double COP { get; set; } + + + // C62 - Boolean Yes/No + public bool VentilationOnDuringHeating { get; set; } // C63 - Boolean Yes/No public bool VentilationWhenBothHeatingAndACInactive { get; set; } @@ -156,7 +160,14 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC public IAuxHeater AuxHeater => this; public ISSMTechnologyBenefits Technologies { get; set; } - public string HVACTechnology { get; set; } + public string HVACTechnology => $"{HVACSystemConfiguration.GetName()} " + + $"({string.Join(", ", HeatPumpTypePassengerCompartment.GetName(), HeatPumpTypeDriverCompartment.GetName())})"; + + //public HeatPumpType HeatPumpTypeHeatingDriverCompartment { get; set; } + public HeatPumpType HeatPumpTypeDriverCompartment { get; set; } + //public HeatPumpType HeatPumpTypeHeatingPassengerCompartment { get; set; } + public HeatPumpType HeatPumpTypePassengerCompartment { get; set; } + public BusHVACSystemConfiguration HVACSystemConfiguration { get; set; } #endregion } diff --git a/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/HVAC/SSMTOOL.cs b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/HVAC/SSMTOOL.cs index 0a4d11e144..edf382359f 100644 --- a/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/HVAC/SSMTOOL.cs +++ b/VectoCore/VectoCore/Models/BusAuxiliaries/DownstreamModules/Impl/HVAC/SSMTOOL.cs @@ -67,7 +67,7 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC public IHVACConstants HVACConstants { get; set; } // Repeat Warning Flags - private bool CompressorCapacityInsufficientWarned; + //private bool CompressorCapacityInsufficientWarned; // Base Values public Watt ElectricalWBase => Calculate.ElectricalWBase; // .SI(Of Watt)() @@ -89,10 +89,10 @@ namespace TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC get { var mechAdjusted = Calculate.MechanicalWBaseAdjusted; - if (CompressorCapacityInsufficientWarned == false && (mechAdjusted) / (1000 * SSMInputs.ACSystem.COP) > SSMInputs.ACSystem.HVACMaxCoolingPower) { - LoggingObject.Logger<SSMTOOL>().Warn("HVAC SSM :AC-Compressor Capacity unable to service cooling, run continues as if capacity was sufficient."); - CompressorCapacityInsufficientWarned = true; - } + //if (CompressorCapacityInsufficientWarned == false && (mechAdjusted) / (1000 * SSMInputs.ACSystem.COP) > SSMInputs.ACSystem.HVACMaxCoolingPower) { + // LoggingObject.Logger<SSMTOOL>().Warn("HVAC SSM :AC-Compressor Capacity unable to service cooling, run continues as if capacity was sufficient."); + // CompressorCapacityInsufficientWarned = true; + //} return mechAdjusted; // .SI(Of Watt)() diff --git a/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs b/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs index f4a18a474d..b3ed546a3f 100644 --- a/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs +++ b/VectoCore/VectoCore/Models/Declaration/DeclarationData.cs @@ -35,6 +35,7 @@ using System.IO; using System.Linq; using Newtonsoft.Json.Linq; using System.Collections.Concurrent; +using Castle.DynamicProxy.Generators.Emitters.SimpleAST; using TUGraz.VectoCommon.BusAuxiliaries; using TUGraz.VectoCommon.Exceptions; using TUGraz.VectoCommon.InputData; @@ -49,11 +50,11 @@ using TUGraz.VectoCore.Models.SimulationComponent.Data.ElectricMotor; using TUGraz.VectoCore.Models.SimulationComponent.Data.Engine; using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox; using TUGraz.VectoCore.Utils; - +using TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC; namespace TUGraz.VectoCore.Models.Declaration { - public static class DeclarationData + public static class DeclarationData { /// <summary> /// The standard acceleration for gravity on earth. @@ -383,19 +384,19 @@ namespace TUGraz.VectoCore.Models.Declaration } } - public static double CalculateCOP(Watt coolingPwrDriver, HeatPumpType comprTypeDriver, Watt coolingPwrPass, HeatPumpType comprTypePass, FloorType floorType) - { - if (coolingPwrDriver.IsGreater(0) && comprTypeDriver == HeatPumpType.none) { - comprTypeDriver = comprTypePass; - } - if (coolingPwrDriver.IsEqual(0) && coolingPwrPass.IsEqual(0)) { - return 1.0; - } - return (coolingPwrDriver * comprTypeDriver.COP(floorType) + coolingPwrPass * comprTypePass.COP(floorType)) / - (coolingPwrDriver + coolingPwrPass); - } - - public static Meter CorrectionLengthDrivetrainVolume(VehicleCode? vehicleCode, bool? lowEntry, int numAxles, bool articulated) + public static double CalculateCOP(Watt coolingPwrDriver, double copDriver, Watt coolingPwrPass, double copPass) + { + if (coolingPwrDriver.IsGreater(0) && copDriver.IsEqual(0)) { + copDriver = copPass; + } + if (coolingPwrDriver.IsEqual(0) && coolingPwrPass.IsEqual(0)) { + return 1.0; + } + return (coolingPwrDriver * copDriver + coolingPwrPass * copPass) / + (coolingPwrDriver + coolingPwrPass); + } + + public static Meter CorrectionLengthDrivetrainVolume(VehicleCode? vehicleCode, bool? lowEntry, int numAxles, bool articulated) { if ((vehicleCode == VehicleCode.CE || vehicleCode == VehicleCode.CG) && (bool)lowEntry) { switch (numAxles) { @@ -407,6 +408,73 @@ namespace TUGraz.VectoCore.Models.Declaration } return 0.SI<Meter>(); } + + public static BusHVACSystemConfiguration GetHVACConfig(BusHVACSystemConfiguration hvacConfigurationInput, HeatPumpType heatPumpDriver, HeatPumpType heatPumpPassenger) + { + var hasDriverHP = heatPumpDriver != HeatPumpType.none; + var hasPassengerHP = heatPumpPassenger != HeatPumpType.none; + + switch (hvacConfigurationInput) { + case BusHVACSystemConfiguration.Unknown: + case BusHVACSystemConfiguration.Configuration0: + throw new VectoException($"Invalid HVAC Configuration {hvacConfigurationInput}"); + case BusHVACSystemConfiguration.Configuration1 when !hasDriverHP && !hasPassengerHP: + return BusHVACSystemConfiguration.Configuration1; + + case BusHVACSystemConfiguration.Configuration2 when !hasDriverHP && !hasPassengerHP: + return BusHVACSystemConfiguration.Configuration1; + case BusHVACSystemConfiguration.Configuration2 when hasDriverHP && !hasPassengerHP: + return BusHVACSystemConfiguration.Configuration2; + + case BusHVACSystemConfiguration.Configuration3 when !hasDriverHP && !hasPassengerHP: + return BusHVACSystemConfiguration.Configuration3; + case BusHVACSystemConfiguration.Configuration4 when !hasDriverHP && !hasPassengerHP: + return BusHVACSystemConfiguration.Configuration3; + + case BusHVACSystemConfiguration.Configuration4 when hasDriverHP && !hasPassengerHP: + return BusHVACSystemConfiguration.Configuration4; + + case BusHVACSystemConfiguration.Configuration5 when !hasDriverHP && !hasPassengerHP: + return BusHVACSystemConfiguration.Configuration3; + case BusHVACSystemConfiguration.Configuration5 when !hasDriverHP && hasPassengerHP: + return BusHVACSystemConfiguration.Configuration5; + + case BusHVACSystemConfiguration.Configuration6 when !hasDriverHP && !hasPassengerHP: + return BusHVACSystemConfiguration.Configuration3; + case BusHVACSystemConfiguration.Configuration6 when !hasDriverHP && hasPassengerHP: + return BusHVACSystemConfiguration.Configuration6; + + case BusHVACSystemConfiguration.Configuration7 when !hasDriverHP && !hasPassengerHP: + return BusHVACSystemConfiguration.Configuration3; + case BusHVACSystemConfiguration.Configuration7 when hasDriverHP && !hasPassengerHP: + return BusHVACSystemConfiguration.Configuration4; + case BusHVACSystemConfiguration.Configuration7 when !hasDriverHP && hasPassengerHP: + return BusHVACSystemConfiguration.Configuration5; + case BusHVACSystemConfiguration.Configuration7 when hasDriverHP && hasPassengerHP: + return BusHVACSystemConfiguration.Configuration7; + + case BusHVACSystemConfiguration.Configuration8 when !hasDriverHP && !hasPassengerHP: + return BusHVACSystemConfiguration.Configuration3; + case BusHVACSystemConfiguration.Configuration8 when !hasDriverHP && hasPassengerHP: + return BusHVACSystemConfiguration.Configuration5; + + case BusHVACSystemConfiguration.Configuration9 when !hasDriverHP && !hasPassengerHP: + return BusHVACSystemConfiguration.Configuration3; + case BusHVACSystemConfiguration.Configuration9 when hasDriverHP && !hasPassengerHP: + return BusHVACSystemConfiguration.Configuration4; + case BusHVACSystemConfiguration.Configuration9 when !hasDriverHP && hasPassengerHP: + return BusHVACSystemConfiguration.Configuration5; + case BusHVACSystemConfiguration.Configuration9 when hasDriverHP && hasPassengerHP: + return BusHVACSystemConfiguration.Configuration7; + + case BusHVACSystemConfiguration.Configuration10 when !hasDriverHP && !hasPassengerHP: + return BusHVACSystemConfiguration.Configuration3; + case BusHVACSystemConfiguration.Configuration10 when !hasDriverHP && hasPassengerHP: + return BusHVACSystemConfiguration.Configuration6; + } + throw new VectoException($"Invalid HVAC combination! System Configuration: {hvacConfigurationInput.GetName()}, Driver HeatPump: {heatPumpDriver.GetLabel()}, Passenger HeatPump: {heatPumpPassenger.GetLabel()}"); + } + } public static class Driver diff --git a/VectoCore/VectoCore/Models/Declaration/HVACCoolingPower.cs b/VectoCore/VectoCore/Models/Declaration/HVACCoolingPower.cs index 5be5e15555..8aabc4c513 100644 --- a/VectoCore/VectoCore/Models/Declaration/HVACCoolingPower.cs +++ b/VectoCore/VectoCore/Models/Declaration/HVACCoolingPower.cs @@ -12,18 +12,18 @@ namespace TUGraz.VectoCore.Models.Declaration { private static HVACLookup DriverCoolingPower = new HVACLookup(".Buses.HVACCoolingPowerDriver.csv"); private static HVACLookup PassengerCoolingPower = new HVACLookup(".Buses.HVACCoolingPowerPassenger.csv"); - public Watt DriverMaxCoolingPower(BusHVACSystemConfiguration? configuration, MissionType mission) + public Watt DriverMaxCoolingPower(BusHVACSystemConfiguration configuration, MissionType mission) { return DriverCoolingPower.Lookup(configuration, mission).SI<Watt>(); } - public Watt PassengerMaxCoolingPower(BusHVACSystemConfiguration? configuration, MissionType mission, CubicMeter volume) + public Watt PassengerMaxCoolingPower(BusHVACSystemConfiguration configuration, MissionType mission, CubicMeter volume) { return PassengerCoolingPower.Lookup(configuration, mission).SI<WattPerCubicMeter>() * volume; } - private class HVACLookup : LookupData<BusHVACSystemConfiguration?, MissionType, double>{ + private class HVACLookup : LookupData<BusHVACSystemConfiguration, MissionType, double>{ public HVACLookup(string resource) { ResourceId = DeclarationData.DeclarationDataResourcePrefix + resource; diff --git a/VectoCore/VectoCore/Models/Declaration/Mission.cs b/VectoCore/VectoCore/Models/Declaration/Mission.cs index 7712016256..369d9555fa 100644 --- a/VectoCore/VectoCore/Models/Declaration/Mission.cs +++ b/VectoCore/VectoCore/Models/Declaration/Mission.cs @@ -137,21 +137,11 @@ namespace TUGraz.VectoCore.Models.Declaration public bool? LowEntry { get; internal set; } - // #### HVAC Model Parameters + public HVACParameters HVACConventional { get; internal set; } - public BusHVACSystemConfiguration? HVACConfiguration { get; internal set; } + public HVACParameters HVACHEV { get; internal set; } - public Watt HVACAuxHeaterPower { get; internal set; } - - public HeatPumpType HVACCompressorType { get; internal set; } - - public bool HVACDoubleGlasing { get; internal set; } - - public bool HVACHeatpump { get; internal set; } - public bool HVACAdjustableAuxHeater { get; internal set; } - - // used for primary bus only - public bool HVACSeparateAirDistributionDucts { get; internal set; } + public HVACParameters HVACPEV { get; internal set; } public PerSquareMeter PassengerDensityLow { get; internal set; } public PerSquareMeter PassengerDensityRef { get; internal set; } @@ -177,7 +167,28 @@ namespace TUGraz.VectoCore.Models.Declaration public Meter EntranceHeight { get; set; } public VehicleCode? VehicleCode { get; set; } public FloorType FloorType { get; set; } - public IList<BusHVACSystemConfiguration?> SeparateAirDistributionDuctsHVACCfg { get; set; } + public IList<BusHVACSystemConfiguration> SeparateAirDistributionDuctsHVACCfg { get; set; } + } + + public class HVACParameters + { + // #### HVAC Model Parameters + + public BusHVACSystemConfiguration HVACConfiguration { get; internal set; } + + public Watt HVACAuxHeaterPower { get; internal set; } + + public HeatPumpType HeatPumpTypePassengerCompartmentCooling { get; internal set; } + + public HeatPumpType HeatPumpTypePassengerCompartmentHeating { get; internal set; } + + public bool HVACDoubleGlasing { get; internal set; } + + public bool WaterElectricHeater { get; internal set; } + public bool HVACAdjustableAuxHeater { get; internal set; } + + // used for primary bus only + public bool HVACSeparateAirDistributionDucts { get; internal set; } } diff --git a/VectoCore/VectoCore/Models/Declaration/PrimaryBusSegments.cs b/VectoCore/VectoCore/Models/Declaration/PrimaryBusSegments.cs index 4fd58baff0..7f54eb239d 100644 --- a/VectoCore/VectoCore/Models/Declaration/PrimaryBusSegments.cs +++ b/VectoCore/VectoCore/Models/Declaration/PrimaryBusSegments.cs @@ -141,13 +141,36 @@ namespace TUGraz.VectoCore.Models.Declaration FloorType = row.Field<string>("floortype").ParseEnum<FloorType>(), EntranceHeight = row.ParseDouble("entranceheight").SI(Unit.SI.Milli.Meter).Cast<Meter>(), VehicleCode = row.Field<string>("vehiclecode").ParseEnum<VehicleCode>(), - HVACConfiguration = BusHVACSystemConfigurationHelper.Parse(row.Field<string>("hvacsystemconfiguration")), - HVACAuxHeaterPower = row.ParseDouble("hvacauxheater").SI(Unit.SI.Kilo.Watt).Cast<Watt>(), - HVACCompressorType = HeatPumpTypeHelper.Parse(row.Field<string>("hvaccompressortype")), - HVACDoubleGlasing = row.ParseBoolean("hvacdoubleglasing"), - HVACHeatpump = row.ParseBoolean("hvacheatpump"), - HVACAdjustableAuxHeater = row.ParseBoolean("hvacadjustableauxiliaryheater"), - HVACSeparateAirDistributionDucts = row.ParseBoolean("hvacseparateairdistributionducts"), + HVACConventional = new HVACParameters() { + HVACConfiguration = BusHVACSystemConfigurationHelper.Parse(row.Field<string>("hvacsystemconfiguration")), + HVACAuxHeaterPower = row.ParseDouble("hvacauxheaterconventional").SI(Unit.SI.Kilo.Watt).Cast<Watt>(), + HeatPumpTypePassengerCompartmentCooling = HeatPumpTypeHelper.Parse(row.Field<string>("heatpumpcoolingpassengerconventional")), + HeatPumpTypePassengerCompartmentHeating = HeatPumpTypeHelper.Parse(row.Field<string>("heatpumpcoolingpassengerconventional")), + HVACDoubleGlasing = row.ParseBoolean("hvacdoubleglasing"), + WaterElectricHeater = row.ParseBoolean("waterelectricheaterconventional"), + HVACAdjustableAuxHeater = row.ParseBoolean("hvacadjustableauxiliaryheater"), + HVACSeparateAirDistributionDucts = row.ParseBoolean("hvacseparateairdistributionducts"), + }, + HVACHEV = new HVACParameters() { + HVACConfiguration = BusHVACSystemConfigurationHelper.Parse(row.Field<string>("hvacsystemconfiguration")), + HVACAuxHeaterPower = row.ParseDouble("hvacauxheaterhev").SI(Unit.SI.Kilo.Watt).Cast<Watt>(), + HeatPumpTypePassengerCompartmentCooling = HeatPumpTypeHelper.Parse(row.Field<string>("heatpumpcoolingpassengerhev")), + HeatPumpTypePassengerCompartmentHeating = HeatPumpTypeHelper.Parse(row.Field<string>("heatpumpheatingpassengerhev")), + HVACDoubleGlasing = row.ParseBoolean("hvacdoubleglasing"), + WaterElectricHeater = row.ParseBoolean("waterelectricheaterhev"), + HVACAdjustableAuxHeater = row.ParseBoolean("hvacadjustableauxiliaryheater"), + HVACSeparateAirDistributionDucts = row.ParseBoolean("hvacseparateairdistributionducts"), + }, + HVACPEV = new HVACParameters() { + HVACConfiguration = BusHVACSystemConfigurationHelper.Parse(row.Field<string>("hvacsystemconfiguration")), + HVACAuxHeaterPower = row.ParseDouble("hvacauxheaterpev").SI(Unit.SI.Kilo.Watt).Cast<Watt>(), + HeatPumpTypePassengerCompartmentCooling = HeatPumpTypeHelper.Parse(row.Field<string>("heatpumpcoolingpassengerpev")), + HeatPumpTypePassengerCompartmentHeating = HeatPumpTypeHelper.Parse(row.Field<string>("heatpumpheatingpassengerpev")), + HVACDoubleGlasing = row.ParseBoolean("hvacdoubleglasing"), + WaterElectricHeater = row.ParseBoolean("waterelectricheaterpev"), + HVACAdjustableAuxHeater = row.ParseBoolean("hvacadjustableauxiliaryheater"), + HVACSeparateAirDistributionDucts = row.ParseBoolean("hvacseparateairdistributionducts"), + }, ElectricalConsumers = GetVehicleEquipment(row) } }; diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory/SimulatorFactory.cs b/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory/SimulatorFactory.cs index dcee463d4e..d13c92dbb6 100644 --- a/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory/SimulatorFactory.cs +++ b/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory/SimulatorFactory.cs @@ -35,18 +35,14 @@ using System.IO; using System.Linq; using System.Reflection; using System.Threading; -using System.Xml; using Newtonsoft.Json; using Ninject; -using NLog.LayoutRenderers; using TUGraz.VectoCommon.BusAuxiliaries; using TUGraz.VectoCommon.Exceptions; using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.InputData; -using TUGraz.VectoCore.InputData.FileIO.XML; -using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider; using TUGraz.VectoCore.InputData.Reader.Impl; using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.Simulation.Data; @@ -54,7 +50,6 @@ using TUGraz.VectoCore.Models.SimulationComponent.Data; using TUGraz.VectoCore.OutputData; using TUGraz.VectoCore.OutputData.FileIO; using TUGraz.VectoCore.OutputData.ModFilter; -using TUGraz.VectoCore.OutputData.XML; using Formatting = Newtonsoft.Json.Formatting; namespace TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory/SimulatorFactoryDeclaration.cs b/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory/SimulatorFactoryDeclaration.cs index 57130ddcfa..4b4a9d1250 100644 --- a/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory/SimulatorFactoryDeclaration.cs +++ b/VectoCore/VectoCore/Models/Simulation/Impl/SimulatorFactory/SimulatorFactoryDeclaration.cs @@ -1,14 +1,8 @@ -using System; -using TUGraz.VectoCommon.Exceptions; -using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; using TUGraz.VectoCore.InputData; using TUGraz.VectoCore.InputData.FileIO.XML; -using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider; -using TUGraz.VectoCore.InputData.Reader; -using TUGraz.VectoCore.InputData.Reader.Impl; using TUGraz.VectoCore.OutputData; -using TUGraz.VectoCore.OutputData.FileIO; using TUGraz.VectoCore.OutputData.XML; namespace TUGraz.VectoCore.Models.Simulation.Impl.SimulatorFactory diff --git a/VectoCore/VectoCore/OutputData/FileIO/BusAuxWriter.cs b/VectoCore/VectoCore/OutputData/FileIO/BusAuxWriter.cs index 0e3fbe7f3d..ae43871f44 100644 --- a/VectoCore/VectoCore/OutputData/FileIO/BusAuxWriter.cs +++ b/VectoCore/VectoCore/OutputData/FileIO/BusAuxWriter.cs @@ -24,7 +24,7 @@ namespace TUGraz.VectoCore.OutputData.FileIO body["PneumaticUserInputsConfig"] = SavePneumaticUserConfig(auxCfg.PneumaticUserInputsConfig, basePath); //body["HvacUserInputsConfig"] = SaveHVACUserConfig(); - if (auxCfg.SSMInputs is ISSMDeclarationInputs ssmInputs) { + if (auxCfg.SSMInputsCooling is ISSMDeclarationInputs ssmInputs) { body["SSMFilePath"] = string.IsNullOrWhiteSpace(ssmInputs.Source) ? "" : JSONFileWriter.GetRelativePath(ssmInputs.Source, basePath); @@ -207,7 +207,7 @@ namespace TUGraz.VectoCore.OutputData.FileIO retVal["EC_Solar"] = ssmInputs.EnvironmentalConditions.DefaultConditions.Solar.Value(); retVal["AC_CompressorType"] = ssmInputs.ACSystem.HVACCompressorType.ToString(); retVal["AC_CompressorCapacitykW"] = ssmInputs.ACSystem.HVACMaxCoolingPower.ConvertToKiloWatt().Value; - retVal["AC_COP"] = ssmInputs.ACSystem.COP; + //retVal["AC_COP"] = ssmInputs.ACSystem.COP; retVal["VEN_VentilationOnDuringHeating"] = ssmInputs.Ventilation.VentilationOnDuringHeating; retVal["VEN_VentilationWhenBothHeatingAndACInactive"] = ssmInputs.Ventilation.VentilationWhenBothHeatingAndACInactive; retVal["VEN_VentilationDuringAC"] = ssmInputs.Ventilation.VentilationDuringAC; diff --git a/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs b/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs index 7d73e77a65..d746bdcaa8 100644 --- a/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs +++ b/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs @@ -1050,7 +1050,7 @@ namespace TUGraz.VectoCore.OutputData } row[string.Format(Fields.AUX_TECH_FORMAT, Constants.Auxiliaries.IDs.HeatingVentilationAirCondition)] = - busAux.SSMInputs is ISSMDeclarationInputs inputs ? inputs.HVACTechnology : "engineering mode"; + busAux.SSMInputsCooling is ISSMDeclarationInputs inputs ? inputs.HVACTechnology : "engineering mode"; row[string.Format(Fields.AUX_TECH_FORMAT, Constants.Auxiliaries.IDs.ElectricSystem)] = busAux.ElectricalUserInputsConfig.AlternatorType.GetLabel(); row[string.Format(Fields.AUX_TECH_FORMAT, Constants.Auxiliaries.IDs.PneumaticSystem)] = runData.JobType == VectoSimulationJobType.BatteryElectricVehicle ? "-" : diff --git a/VectoCore/VectoCore/Resources/Declaration/Buses/DefaultClimatic.aenv b/VectoCore/VectoCore/Resources/Declaration/Buses/DefaultClimatic.aenv index 1af8cbb328..06f5011640 100644 --- a/VectoCore/VectoCore/Resources/Declaration/Buses/DefaultClimatic.aenv +++ b/VectoCore/VectoCore/Resources/Declaration/Buses/DefaultClimatic.aenv @@ -1,12 +1,12 @@ -ID , EnvTemp , Solar , WeightingFactor -1 , -20 , 10 , 0.0053 -2 , -5 , 30 , 0.0826 -3 , 2 , 30 , 0.0826 -4 , 8 , 20 , 0.1661 -5 , 8 , 155 , 0.0826 -6 , 14 , 30 , 0.0826 -7 , 14 , 175 , 0.1243 -8 , 20.5 , 30 , 0.1243 -9 , 20.5 , 200 , 0.1243 -10 , 26 , 150 , 0.0826 -11 , 33 , 150 , 0.0427 +ID , EnvTemp , Solar , WeightingFactor , heating/cooling , R-744 , non R-744 2-stage , non R-744 3-stage , non R-744 4-stage , non R-744 continuous , water electric heater , air electric heater , other electric heater , fuel heater +1 , -20 , 10 , 0.0053 , h , 1.80 , - , - , - , - , 0.93 , 0.93 , 0.93 , 0.80 +2 , -5 , 30 , 0.0826 , h , 2.04 , 1.54 , 1.64 , 1.68 , 1.78 , 0.93 , 0.93 , 0.93 , 0.80 +3 , 2 , 30 , 0.0826 , h , 2.50 , 2.00 , 2.10 , 2.10 , 2.22 , 0.93 , 0.93 , 0.93 , 0.80 +4 , 8 , 20 , 0.1661 , h , 2.98 , 2.70 , 2.80 , 2.82 , 2.94 , 0.93 , 0.93 , 0.93 , 0.80 +5 , 8 , 155 , 0.0826 , h , 2.98 , 2.70 , 2.80 , 2.82 , 2.94 , 0.93 , 0.93 , 0.93 , 0.80 +6 , 14 , 30 , 0.0826 , h , 3.38 , 3.24 , 3.34 , 3.36 , 3.50 , 0.93 , 0.93 , 0.93 , 0.80 +7 , 14 , 175 , 0.1243 , h , 3.38 , 3.24 , 3.34 , 3.36 , 3.50 , 0.93 , 0.93 , 0.93 , 0.80 +8 , 20.5 , 30 , 0.1243 , c , 3.80 , 3.62 , 3.74 , 3.74 , 3.88 , - , - , , - +9 , 20.5 , 200 , 0.1243 , c , 3.80 , 3.62 , 3.74 , 3.74 , 3.88 , - , - , , - +10 , 26 , 150 , 0.0826 , c , 2.82 , 3.12 , 3.22 , 3.24 , 3.36 , - , - , , - +11 , 33 , 150 , 0.0427 , c , 2.14 , 2.50 , 2.60 , 2.62 , 2.74 , - , - , , - diff --git a/VectoCore/VectoCore/Resources/Declaration/PrimaryBusSegmentationTable.csv b/VectoCore/VectoCore/Resources/Declaration/PrimaryBusSegmentationTable.csv index d5d16c7894..8cfc10f5b1 100644 --- a/VectoCore/VectoCore/Resources/Declaration/PrimaryBusSegmentationTable.csv +++ b/VectoCore/VectoCore/Resources/Declaration/PrimaryBusSegmentationTable.csv @@ -1,26 +1,26 @@ -HDV group , Production Stage , Vehicle Category , HDV SuperGroup , Articulated , Num Axles , TPMLM_Min , TPMLM_Max , doubledecker , vehicle code , low entry , floor type , DesignSpeed , Body , .vacc file , Cross Wind Correction , CdxA Standard , AxlesWeights , Width , Length , Body Height , entrance height , CurbMass , PassengersLowerDeck , PassengersUpperDeck , Heavy Urban , Urban , Suburban , Interurban , Coach , ES_External displays , ES_Internal displays , ES_Fridge , ES_Kitchen Standard , HVAC System Configuration , HVAC Compressor type , HVAC Aux Heater , HVAC Double Glasing , HVAC Heatpump , HVAC Adjustable AuxiliaryHeater , HVAC SeparateAirDistributionDucts +HDV group , Production Stage , Vehicle Category , HDV SuperGroup , Articulated , Num Axles , TPMLM_Min , TPMLM_Max , doubledecker , vehicle code , low entry , floor type , DesignSpeed , Body , .vacc file , Cross Wind Correction , CdxA Standard , AxlesWeights , Width , Length , Body Height , entrance height , CurbMass , PassengersLowerDeck , PassengersUpperDeck , Heavy Urban , Urban , Suburban , Interurban , Coach , ES_External displays , ES_Internal displays , ES_Fridge , ES_Kitchen Standard , HVAC System Configuration , HeatPump Cooling Passenger conventional , HeatPump Cooling Passenger HEV , HeatPump Cooling Passenger PEV , HeatPump Heating Passenger conventional , HeatPump Heating Passenger HEV , HeatPump Heating Passenger PEV , HVAC Aux Heater conventional , HVAC Aux Heater HEV , HVAC Aux Heater PEV , WaterElectricHeater conventional , WaterElectricHeater HEV , WaterElectricHeater PEV , HVAC Double Glasing , HVAC Adjustable AuxiliaryHeater , HVAC SeparateAirDistributionDucts ## Heavy Bus Primary Vehicles -P31SD , 1 , HeavyBus , P31_32 , - , 2 , 7.4 , 999 , 0 , CE , 0 , low floor , 100 , , Bus.vacc , CoachBus , 4.9 , 37.5/62.5 , 2.55 , 12 , 2.8 , 340 , 11975 , 80 , 0 , 3 , 3 , 3 , 2.2/1.8 , , 3 , 2 , 0 , 0 , 6 , non R-744 2-stage , 15 , 0 , 0 , 0 , 0 -P31DD , 1 , HeavyBus , P31_32 , - , 2 , 7.4 , 999 , 1 , CF , 0 , low floor , 100 , , Bus.vacc , CoachBus , 6.2 , 37.5/62.5 , 2.55 , 10.5 , 3.8 , 340 , 12350 , 60 , 40 , 3.7 , 3.7 , 3.7 , , , 3 , 3 , 0 , 0 , 6 , non R-744 2-stage , 15 , 0 , 0 , 0 , 0 -P32SD , 1 , HeavyBus , P31_32 , - , 2 , 7.4 , 999 , 0 , CA , - , high floor , 100 , , Bus.vacc , CoachBus , 3.45 , 37.5/62.5 , 2.55 , 12 , 3.15 , 340 , 13150 , 45 , 0 , , , , 2.2/1.8 , 1.4 , 2 , 2 , 0.5 , 0.5 , 6 , non R-744 2-stage , 30 , 1 , 0 , 0 , 1 -P32DD , 1 , HeavyBus , P31_32 , - , 2 , 7.4 , 999 , 1 , CB , - , high floor , 100 , , Bus.vacc , CoachBus , 3.9 , 37.5/62.5 , 2.55 , 10.5 , 3.7 , 340 , 13400 , 25 , 35 , , , , 3/2.5 , 2 , 1 , 2 , 1 , 1 , 6 , non R-744 2-stage , 30 , 1 , 0 , 0 , 1 +P31SD , 1 , HeavyBus , P31_32 , - , 2 , 7.4 , 999 , 0 , CE , 0 , low floor , 100 , , Bus.vacc , CoachBus , 4.9 , 37.5/62.5 , 2.55 , 12 , 2.8 , 340 , 11975 , 80 , 0 , 3 , 3 , 3 , 2.2/1.8 , , 3 , 2 , 0 , 0 , 6 , non R-744 2-stage , non R-744 2-stage , non R-744 continuous , none , none , non R-744 continuous , 15 , 15 , 0 , 0 , 0 , 1 , 0 , 0 , 0 +P31DD , 1 , HeavyBus , P31_32 , - , 2 , 7.4 , 999 , 1 , CF , 0 , low floor , 100 , , Bus.vacc , CoachBus , 6.2 , 37.5/62.5 , 2.55 , 10.5 , 3.8 , 340 , 12350 , 60 , 40 , 3.7 , 3.7 , 3.7 , , , 3 , 3 , 0 , 0 , 6 , non R-744 2-stage , non R-744 2-stage , non R-744 continuous , none , none , non R-744 continuous , 15 , 15 , 0 , 0 , 0 , 1 , 0 , 0 , 0 +P32SD , 1 , HeavyBus , P31_32 , - , 2 , 7.4 , 999 , 0 , CA , - , high floor , 100 , , Bus.vacc , CoachBus , 3.45 , 37.5/62.5 , 2.55 , 12 , 3.15 , 340 , 13150 , 45 , 0 , , , , 2.2/1.8 , 1.4 , 2 , 2 , 0.5 , 0.5 , 6 , non R-744 2-stage , non R-744 2-stage , non R-744 continuous , none , none , non R-744 continuous , 30 , 30 , 0 , 0 , 0 , 1 , 1 , 0 , 1 +P32DD , 1 , HeavyBus , P31_32 , - , 2 , 7.4 , 999 , 1 , CB , - , high floor , 100 , , Bus.vacc , CoachBus , 3.9 , 37.5/62.5 , 2.55 , 10.5 , 3.7 , 340 , 13400 , 25 , 35 , , , , 3/2.5 , 2 , 1 , 2 , 1 , 1 , 6 , non R-744 2-stage , non R-744 2-stage , non R-744 continuous , none , none , non R-744 continuous , 30 , 30 , 0 , 0 , 0 , 1 , 1 , 0 , 1 ## , ----- , ----- , ----- , ----- , ----- , ----- , ----- , ----- , ----- , ----- , ----- , ----- , ----- , ----- , ----- , ----- , ----- -P33SD , 1 , HeavyBus , P33_34 , 0 , 3 , 7.4 , 999 , 0 , CE , 0 , low floor , 100 , , Bus.vacc , CoachBus , 5.0 , 27.3/45.4/27.3 , 2.55 , 14.2 , 2.8 , 340 , 14175 , 104 , 0 , 3 , 3 , 3 , 2.2/1.8 , , 3 , 2 , 0 , 0 , 6 , non R-744 2-stage , 15 , 0 , 0 , 0 , 0 -P33DD , 1 , HeavyBus , P33_34 , 0 , 3 , 7.4 , 999 , 1 , CF , 0 , low floor , 100 , , Bus.vacc , CoachBus , 6.3 , 27.3/45.4/27.3 , 2.55 , 13.5 , 3.8 , 340 , 14725 , 78 , 52 , 3.7 , 3.7 , 3.7 , , , 3 , 3 , 0 , 0 , 6 , non R-744 2-stage , 15 , 0 , 0 , 0 , 0 -P34SD , 1 , HeavyBus , P33_34 , 0 , 3 , 7.4 , 999 , 0 , CA , - , high floor , 100 , , Bus.vacc , CoachBus , 3.53 , 27.3/45.4/27.3 , 2.55 , 13.8 , 3.15 , 340 , 15213 , 59 , 0 , , , , 2.2/1.8 , 1.4 , 2 , 2 , 0.5 , 0.5 , 6 , non R-744 2-stage , 30 , 1 , 0 , 0 , 1 -P34DD , 1 , HeavyBus , P33_34 , 0 , 3 , 7.4 , 999 , 1 , CB , - , high floor , 100 , , Bus.vacc , CoachBus , 3.98 , 27.3/45.4/27.3 , 2.55 , 14 , 3.7 , 340 , 17850 , 33 , 46 , , , , 3/2.5 , 2 , 1 , 4 , 1 , 1.5 , 6 , non R-744 2-stage , 30 , 1 , 0 , 0 , 1 +P33SD , 1 , HeavyBus , P33_34 , 0 , 3 , 7.4 , 999 , 0 , CE , 0 , low floor , 100 , , Bus.vacc , CoachBus , 5.0 , 27.3/45.4/27.3 , 2.55 , 14.2 , 2.8 , 340 , 14175 , 104 , 0 , 3 , 3 , 3 , 2.2/1.8 , , 3 , 2 , 0 , 0 , 6 , non R-744 2-stage , non R-744 2-stage , non R-744 continuous , none , none , non R-744 continuous , 15 , 15 , 0 , 0 , 0 , 1 , 0 , 0 , 0 +P33DD , 1 , HeavyBus , P33_34 , 0 , 3 , 7.4 , 999 , 1 , CF , 0 , low floor , 100 , , Bus.vacc , CoachBus , 6.3 , 27.3/45.4/27.3 , 2.55 , 13.5 , 3.8 , 340 , 14725 , 78 , 52 , 3.7 , 3.7 , 3.7 , , , 3 , 3 , 0 , 0 , 6 , non R-744 2-stage , non R-744 2-stage , non R-744 continuous , none , none , non R-744 continuous , 15 , 15 , 0 , 0 , 0 , 1 , 0 , 0 , 0 +P34SD , 1 , HeavyBus , P33_34 , 0 , 3 , 7.4 , 999 , 0 , CA , - , high floor , 100 , , Bus.vacc , CoachBus , 3.53 , 27.3/45.4/27.3 , 2.55 , 13.8 , 3.15 , 340 , 15213 , 59 , 0 , , , , 2.2/1.8 , 1.4 , 2 , 2 , 0.5 , 0.5 , 6 , non R-744 2-stage , non R-744 2-stage , non R-744 continuous , none , none , non R-744 continuous , 30 , 30 , 0 , 0 , 0 , 1 , 1 , 0 , 1 +P34DD , 1 , HeavyBus , P33_34 , 0 , 3 , 7.4 , 999 , 1 , CB , - , high floor , 100 , , Bus.vacc , CoachBus , 3.98 , 27.03/45.4/27.3 , 2.55 , 14 , 3.7 , 340 , 17850 , 33 , 46 , , , , 3/2.5 , 2 , 1 , 4 , 1 , 1.5 , 6 , non R-744 2-stage , non R-744 2-stage , non R-744 continuous , none , none , non R-744 continuous , 30 , 30 , 0 , 0 , 0 , 1 , 1 , 0 , 1 ## , ----- , ----- , ----- , ----- , ----- , ----- , ----- , ----- , ----- , ----- , ----- , ----- , ----- , ----- , ----- , ----- , ----- -P35SD , 1 , HeavyBus , P35_36 , 1 , 3 , 7.4 , 999 , 0 , CG , 0 , low floor , 100 , , Bus.vacc , CoachBus , 5.1 , 24.3/35.2/40.5 , 2.55 , 18.2 , 2.8 , 340 , 17800 , 104 , 0 , 3 , 3 , 3 , 2.2/1.8 , , 3 , 3 , 0 , 0 , 6 , non R-744 2-stage , 15 , 0 , 0 , 0 , 0 -P35DD , 1 , HeavyBus , P35_36 , 1 , 3 , 7.4 , 999 , 1 , CH , 0 , low floor , 100 , , Bus.vacc , CoachBus , 6.4 , 24.3/35.2/40.5 , 2.55 , 18.2 , 3.8 , 340 , 20250 , 78 , 52 , 3.7 , 3.7 , 3.7 , , , , , , , 6 , non R-744 2-stage , 15 , 0 , 0 , 0 , 0 -P36SD , 1 , HeavyBus , P35_36 , 1 , 3 , 7.4 , 999 , 0 , CC , - , high floor , 100 , , Bus.vacc , CoachBus , 3.60 , 24.3/35.2/40.5 , 2.55 , 18.2 , 3.15 , 340 , 19267 , 59 , 0 , , , , 2.2/1.8 , 1.4 , , , , , 6 , non R-744 2-stage , 30 , 1 , 0 , 0 , 1 -P36DD , 1 , HeavyBus , P35_36 , 1 , 3 , 7.4 , 999 , 1 , CD , - , high floor , 100 , , Bus.vacc , CoachBus , 4.05 , 24.3/35.2/40.5 , 2.55 , 18.2 , 3.7 , 340 , 21375 , 33 , 46 , , , , 3/2.5 , 2 , , , , , 6 , non R-744 2-stage , 30 , 1 , 0 , 0 , 1 +P35SD , 1 , HeavyBus , P35_36 , 1 , 3 , 7.4 , 999 , 0 , CG , 0 , low floor , 100 , , Bus.vacc , CoachBus , 5.1 , 24.3/35.2/40.5 , 2.55 , 18.2 , 2.8 , 340 , 17800 , 104 , 0 , 3 , 3 , 3 , 2.2/1.8 , , 3 , 3 , 0 , 0 , 6 , non R-744 2-stage , non R-744 2-stage , non R-744 continuous , none , none , non R-744 continuous , 15 , 15 , 0 , 0 , 0 , 1 , 0 , 0 , 0 +P35DD , 1 , HeavyBus , P35_36 , 1 , 3 , 7.4 , 999 , 1 , CH , 0 , low floor , 100 , , Bus.vacc , CoachBus , 6.4 , 24.3/35.2/40.5 , 2.55 , 18.2 , 3.8 , 340 , 20250 , 78 , 52 , 3.7 , 3.7 , 3.7 , , , , , , , 6 , non R-744 2-stage , non R-744 2-stage , non R-744 continuous , none , none , non R-744 continuous , 15 , 15 , 0 , 0 , 0 , 1 , 0 , 0 , 0 +P36SD , 1 , HeavyBus , P35_36 , 1 , 3 , 7.4 , 999 , 0 , CC , - , high floor , 100 , , Bus.vacc , CoachBus , 3.60 , 24.3/35.2/40.5 , 2.55 , 18.2 , 3.15 , 340 , 19267 , 59 , 0 , , , , 2.2/1.8 , 1.4 , , , , , 6 , non R-744 2-stage , non R-744 2-stage , non R-744 continuous , none , none , non R-744 continuous , 30 , 30 , 0 , 0 , 0 , 1 , 1 , 0 , 1 +P36DD , 1 , HeavyBus , P35_36 , 1 , 3 , 7.4 , 999 , 1 , CD , - , high floor , 100 , , Bus.vacc , CoachBus , 4.05 , 24.30/35.2/40.5 , 2.55 , 18.2 , 3.7 , 340 , 21375 , 33 , 46 , , , , 3/2.5 , 2 , , , , , 6 , non R-744 2-stage , non R-744 2-stage , non R-744 continuous , none , none , non R-744 continuous , 30 , 30 , 0 , 0 , 0 , 1 , 1 , 0 , 1 +## , ----- , ----- , ----- , ----- , ----- , ----- , ----- , ----- , ----- , ----- , ----- , ----- , ----- , ----- , ----- , ----- , ----- , +P37SD , 1 , HeavyBus , P37_38 , 0 , 4 , 7.4 , 999 , 0 , CE , 0 , low floor , 100 , , Bus.vacc , CoachBus , 5.1 , 21.4/21.4/35.8/21.4 , 2.55 , 15 , 2.8 , 340 , 15000 , 125 , 0 , 3 , 3 , 3 , 2.2/1.8 , , , , , , 6 , non R-744 2-stage , non R-744 2-stage , non R-744 continuous , none , none , non R-744 continuous , 15 , 15 , 0 , 0 , 0 , 1 , 0 , 0 , 0 +P37DD , 1 , HeavyBus , P37_38 , 0 , 4 , 7.4 , 999 , 1 , CF , 0 , low floor , 100 , , Bus.vacc , CoachBus , 6.4 , 21.4/21.4/35.8/21.4 , 2.55 , 15 , 3.8 , 340 , 18700 , 94 , 62 , 3.7 , 3.7 , 3.7 , , , , , , , 6 , non R-744 2-stage , non R-744 2-stage , non R-744 continuous , none , none , non R-744 continuous , 15 , 15 , 0 , 0 , 0 , 1 , 0 , 0 , 0 +P38SD , 1 , HeavyBus , P37_38 , 0 , 4 , 7.4 , 999 , 0 , CA , - , high floor , 100 , , Bus.vacc , CoachBus , 3.60 , 21.4/21.4/35.8/21.4 , 2.55 , 15 , 3.15 , 340 , 17500 , 70 , 0 , , , , 2.2/1.8 , 1.4 , , , , , 6 , non R-744 2-stage , non R-744 2-stage , non R-744 continuous , none , none , non R-744 continuous , 30 , 30 , 0 , 0 , 0 , 1 , 1 , 0 , 1 +P38DD , 1 , HeavyBus , P37_38 , 0 , 4 , 7.4 , 999 , 1 , CB , - , high floor , 100 , , Bus.vacc , CoachBus , 4.05 , 21.4/021.4/35.8/21.4 , 2.55 , 15 , 3.7 , 340 , 21200 , 39 , 55 , , , , 3/2.5 , 2 , , , , , 6 , non R-744 2-stage , non R-744 2-stage , non R-744 continuous , none , none , non R-744 continuous , 30 , 30 , 0 , 0 , 0 , 1 , 1 , 0 , 1 ## , ----- , ----- , ----- , ----- , ----- , ----- , ----- , ----- , ----- , ----- , ----- , ----- , ----- , ----- , ----- , ----- , ----- -P37SD , 1 , HeavyBus , P37_38 , 0 , 4 , 7.4 , 999 , 0 , CE , 0 , low floor , 100 , , Bus.vacc , CoachBus , 5.1 , 21.4/21.4/35.8/21.4 , 2.55 , 15 , 2.8 , 340 , 15000 , 125 , 0 , 3 , 3 , 3 , 2.2/1.8 , , , , , , 6 , non R-744 2-stage , 15 , 0 , 0 , 0 , 0 -P37DD , 1 , HeavyBus , P37_38 , 0 , 4 , 7.4 , 999 , 1 , CF , 0 , low floor , 100 , , Bus.vacc , CoachBus , 6.4 , 21.4/21.4/35.8/21.4 , 2.55 , 15 , 3.8 , 340 , 18700 , 94 , 62 , 3.7 , 3.7 , 3.7 , , , , , , , 6 , non R-744 2-stage , 15 , 0 , 0 , 0 , 0 -P38SD , 1 , HeavyBus , P37_38 , 0 , 4 , 7.4 , 999 , 0 , CA , - , high floor , 100 , , Bus.vacc , CoachBus , 3.60 , 21.4/21.4/35.8/21.4 , 2.55 , 15 , 3.15 , 340 , 17500 , 70 , 0 , , , , 2.2/1.8 , 1.4 , , , , , 6 , non R-744 2-stage , 30 , 1 , 0 , 0 , 1 -P38DD , 1 , HeavyBus , P37_38 , 0 , 4 , 7.4 , 999 , 1 , CB , - , high floor , 100 , , Bus.vacc , CoachBus , 4.05 , 21.4/21.4/35.8/21.4 , 2.55 , 15 , 3.7 , 340 , 21200 , 39 , 55 , , , , 3/2.5 , 2 , , , , , 6 , non R-744 2-stage , 30 , 1 , 0 , 0 , 1 -## , ----- , ----- , ----- , ----- , ----- , ----- , ----- , ----- , ----- , ----- , ----- , ----- , ----- , ----- , ----- , ----- , ----- -P39SD , 1 , HeavyBus , P39_40 , 1 , 4 , 7.4 , 999 , 0 , CG , 0 , low floor , 100 , , Bus.vacc , CoachBus , 5.2 , 20.0/28.2/32.4/19.4 , 2.55 , 21 , 2.6 , 340 , 19600 , 125 , 0 , 3 , 3 , 3 , 2.2/1.8 , , 3 , 3 , 0 , 0 , 6 , non R-744 2-stage , 15 , 0 , 0 , 0 , 0 -P39DD , 1 , HeavyBus , P39_40 , 1 , 4 , 7.4 , 999 , 1 , CH , 0 , low floor , 100 , , Bus.vacc , CoachBus , 6.5 , 20.0/28.2/32.4/19.4 , 2.55 , 21 , 3.8 , 340 , 24800 , 94 , 62 , 3.7 , 3.7 , 3.7 , , , , , , , 6 , non R-744 2-stage , 15 , 0 , 0 , 0 , 0 -P40SD , 1 , HeavyBus , P39_40 , 1 , 4 , 7.4 , 999 , 0 , CC , - , high floor , 100 , , Bus.vacc , CoachBus , 3.68 , 20.0/28.2/32.4/19.4 , 2.55 , 21 , 3.15 , 340 , 20950 , 70 , 0 , , , , 2.2/1.8 , 1.4 , , , , , 6 , non R-744 2-stage , 30 , 1 , 0 , 0 , 1 -P40DD , 1 , HeavyBus , P39_40 , 1 , 4 , 7.4 , 999 , 1 , CD , - , high floor , 100 , , Bus.vacc , CoachBus , 4.13 , 20.0/28.2/32.4/19.4 , 2.55 , 21 , 3.7 , 340 , 24600 , 39 , 55 , , , , 3/2.5 , 2 , , , , , 6 , non R-744 2-stage , 30 , 1 , 0 , 0 , 1 +P39SD , 1 , HeavyBus , P39_40 , 1 , 4 , 7.4 , 999 , 0 , CG , 0 , low floor , 100 , , Bus.vacc , CoachBus , 5.2 , 20.0/28.2/32.4/19.4 , 2.55 , 21 , 2.6 , 340 , 19600 , 125 , 0 , 3 , 3 , 3 , 2.2/1.8 , , 3 , 3 , 0 , 0 , 6 , non R-744 2-stage , non R-744 2-stage , non R-744 continuous , none , none , non R-744 continuous , 15 , 15 , 0 , 0 , 0 , 1 , 0 , 0 , 0 +P39DD , 1 , HeavyBus , P39_40 , 1 , 4 , 7.4 , 999 , 1 , CH , 0 , low floor , 100 , , Bus.vacc , CoachBus , 6.5 , 20.0/28.2/32.4/19.4 , 2.55 , 21 , 3.8 , 340 , 24800 , 94 , 62 , 3.7 , 3.7 , 3.7 , , , , , , , 6 , non R-744 2-stage , non R-744 2-stage , non R-744 continuous , none , none , non R-744 continuous , 15 , 15 , 0 , 0 , 0 , 1 , 0 , 0 , 0 +P40SD , 1 , HeavyBus , P39_40 , 1 , 4 , 7.4 , 999 , 0 , CC , - , high floor , 100 , , Bus.vacc , CoachBus , 3.68 , 20.0/28.2/32.4/19.4 , 2.55 , 21 , 3.15 , 340 , 20950 , 70 , 0 , , , , 2.2/1.8 , 1.4 , , , , , 6 , non R-744 2-stage , non R-744 2-stage , non R-744 continuous , none , none , non R-744 continuous , 30 , 30 , 0 , 0 , 0 , 1 , 1 , 0 , 1 +P40DD , 1 , HeavyBus , P39_40 , 1 , 4 , 7.4 , 999 , 1 , CD , - , high floor , 100 , , Bus.vacc , CoachBus , 4.13 , 20.0/208.2/32.4/19.4 , 2.55 , 21 , 3.7 , 340 , 24600 , 39 , 55 , , , , 3/2.5 , 2 , , , , , 6 , non R-744 2-stage , non R-744 2-stage , non R-744 continuous , none , none , non R-744 continuous , 30 , 30 , 0 , 0 , 0 , 1 , 1 , 0 , 1 diff --git a/VectoCore/VectoCore/VectoCore.csproj b/VectoCore/VectoCore/VectoCore.csproj index e2e18071af..0c90a52c29 100644 --- a/VectoCore/VectoCore/VectoCore.csproj +++ b/VectoCore/VectoCore/VectoCore.csproj @@ -53,6 +53,8 @@ <ItemGroup> <None Remove="Resources\Declaration\Buses\DefaultActuationsMap.apac" /> + <None Remove="Resources\Declaration\Buses\HeatingDistribution.csv" /> + <None Remove="Resources\Declaration\Buses\HeatingDistributionCases.csv" /> <None Remove="Resources\Declaration\VAUXBus\DEFAULT_1-Cylinder_1-Stage_393ccm.acmp" /> <None Remove="Resources\Declaration\VAUXBus\DEFAULT_2-Cylinder_1-Stage_650ccm.acmp" /> <None Remove="Resources\Declaration\VAUXBus\DEFAULT_2-Cylinder_2-Stage_398ccm.acmp" /> diff --git a/VectoCore/VectoCoreTest/Integration/CompletedBus/CompletedBusFactorMethodTest.cs b/VectoCore/VectoCoreTest/Integration/CompletedBus/CompletedBusFactorMethodTest.cs index bdeffa321d..4acc6047b4 100644 --- a/VectoCore/VectoCoreTest/Integration/CompletedBus/CompletedBusFactorMethodTest.cs +++ b/VectoCore/VectoCoreTest/Integration/CompletedBus/CompletedBusFactorMethodTest.cs @@ -657,8 +657,8 @@ namespace TUGraz.VectoCore.Tests.Integration.CompletedBus private void AssertSSMBusParameters(RelatedRun relatedRun, int currentIndex) { - var genericBusParam = (relatedRun.VectoRunDataGenericBody.BusAuxiliaries.SSMInputs as ISSMDeclarationInputs).BusParameters; - var specificBusParam = (relatedRun.VectoRunDataSpezificBody.BusAuxiliaries.SSMInputs as ISSMDeclarationInputs).BusParameters; + var genericBusParam = (relatedRun.VectoRunDataGenericBody.BusAuxiliaries.SSMInputsCooling as ISSMDeclarationInputs).BusParameters; + var specificBusParam = (relatedRun.VectoRunDataSpezificBody.BusAuxiliaries.SSMInputsCooling as ISSMDeclarationInputs).BusParameters; AssertPassengerCount(genericBusParam.NumberOfPassengers, specificBusParam.NumberOfPassengers, currentIndex); @@ -706,8 +706,8 @@ namespace TUGraz.VectoCore.Tests.Integration.CompletedBus private void AssertTechnologyBenefits(RelatedRun relatedRun) { - var genericTechnolgyBenefit = (relatedRun.VectoRunDataGenericBody.BusAuxiliaries.SSMInputs as ISSMDeclarationInputs).Technologies; - var specificTechnolgyBenefit = (relatedRun.VectoRunDataSpezificBody.BusAuxiliaries.SSMInputs as ISSMDeclarationInputs).Technologies; + var genericTechnolgyBenefit = (relatedRun.VectoRunDataGenericBody.BusAuxiliaries.SSMInputsCooling as ISSMDeclarationInputs).Technologies; + var specificTechnolgyBenefit = (relatedRun.VectoRunDataSpezificBody.BusAuxiliaries.SSMInputsCooling as ISSMDeclarationInputs).Technologies; Assert.AreEqual(0.0, genericTechnolgyBenefit.CValueVariation); Assert.AreEqual(0.02, genericTechnolgyBenefit.HValueVariation); @@ -728,8 +728,8 @@ namespace TUGraz.VectoCore.Tests.Integration.CompletedBus private void AssertBoundaryConditions(RelatedRun relatedRun) { - var genericBound = (relatedRun.VectoRunDataGenericBody.BusAuxiliaries.SSMInputs as ISSMDeclarationInputs).BoundaryConditions; - var specificBound = (relatedRun.VectoRunDataGenericBody.BusAuxiliaries.SSMInputs as ISSMDeclarationInputs).BoundaryConditions; + var genericBound = (relatedRun.VectoRunDataGenericBody.BusAuxiliaries.SSMInputsCooling as ISSMDeclarationInputs).BoundaryConditions; + var specificBound = (relatedRun.VectoRunDataGenericBody.BusAuxiliaries.SSMInputsCooling as ISSMDeclarationInputs).BoundaryConditions; Assert.AreEqual(Constants.BusAuxiliaries.SteadyStateModel.GFactor, genericBound.GFactor); Assert.AreEqual(genericBound.GFactor, specificBound.GFactor); @@ -762,8 +762,8 @@ namespace TUGraz.VectoCore.Tests.Integration.CompletedBus private void AssertEnvironmentalConditions(RelatedRun relatedRun) { - var genericEnv = (relatedRun.VectoRunDataGenericBody.BusAuxiliaries.SSMInputs as ISSMDeclarationInputs).EnvironmentalConditions; - var specificEnv = (relatedRun.VectoRunDataSpezificBody.BusAuxiliaries.SSMInputs as ISSMDeclarationInputs).EnvironmentalConditions; + var genericEnv = (relatedRun.VectoRunDataGenericBody.BusAuxiliaries.SSMInputsCooling as ISSMDeclarationInputs).EnvironmentalConditions; + var specificEnv = (relatedRun.VectoRunDataSpezificBody.BusAuxiliaries.SSMInputsCooling as ISSMDeclarationInputs).EnvironmentalConditions; Assert.AreEqual(Constants.BusAuxiliaries.SteadyStateModel.DefaultSolar, genericEnv.DefaultConditions.Solar); Assert.AreEqual(genericEnv.DefaultConditions.Solar, specificEnv.DefaultConditions.Solar); @@ -781,8 +781,8 @@ namespace TUGraz.VectoCore.Tests.Integration.CompletedBus private void AssertSSMInputs(RelatedRun relatedRun, int currentIndex) { - var genericSSMInput = (SSMInputs) relatedRun.VectoRunDataGenericBody.BusAuxiliaries.SSMInputs; - var specificSSMInput = (SSMInputs)relatedRun.VectoRunDataSpezificBody.BusAuxiliaries.SSMInputs; + var genericSSMInput = (SSMInputs) relatedRun.VectoRunDataGenericBody.BusAuxiliaries.SSMInputsCooling; + var specificSSMInput = (SSMInputs)relatedRun.VectoRunDataSpezificBody.BusAuxiliaries.SSMInputsCooling; AssertPassengerCount(genericSSMInput.NumberOfPassengers, specificSSMInput.NumberOfPassengers, currentIndex); @@ -790,7 +790,7 @@ namespace TUGraz.VectoCore.Tests.Integration.CompletedBus AssertHVACMaxCoolingPower(genericSSMInput.HVACMaxCoolingPower.Value(), specificSSMInput.HVACMaxCoolingPower.Value(), currentIndex); - AssertCOP(genericSSMInput.COP, specificSSMInput.COP, currentIndex); + //AssertCOP(genericSSMInput.COP, specificSSMInput.COP, currentIndex); Assert.AreEqual(true, genericSSMInput.VentilationOnDuringHeating); Assert.AreEqual(true, specificSSMInput.VentilationOnDuringHeating); @@ -1210,7 +1210,7 @@ namespace TUGraz.VectoCore.Tests.Integration.CompletedBus Assert.NotNull(run.VehicleData.PassengerCount); Assert.AreEqual(expectedPassengers, run.VehicleData.PassengerCount.Value, 1e-3); - var ssmInputs = run.BusAuxiliaries.SSMInputs as ISSMDeclarationInputs; + var ssmInputs = run.BusAuxiliaries.SSMInputsCooling as ISSMDeclarationInputs; Assert.NotNull(ssmInputs); Assert.AreEqual(expectedPassengers + 1, ssmInputs.NumberOfPassengers, 1e-3); // adding driver for SSM } @@ -1247,7 +1247,7 @@ namespace TUGraz.VectoCore.Tests.Integration.CompletedBus Assert.NotNull(run.VehicleData.PassengerCount); Assert.AreEqual(expectedPassengers, run.VehicleData.PassengerCount.Value, 1e-3); - var ssmInputs = run.BusAuxiliaries.SSMInputs as ISSMDeclarationInputs; + var ssmInputs = run.BusAuxiliaries.SSMInputsCooling as ISSMDeclarationInputs; Assert.NotNull(ssmInputs); Assert.AreEqual(expectedPassengers + 1, ssmInputs.NumberOfPassengers, 1e-3); // adding driver for SSM } diff --git a/VectoCore/VectoCoreTest/Models/EngineeringMode/EngineeringModeBusAuxTest.cs b/VectoCore/VectoCoreTest/Models/EngineeringMode/EngineeringModeBusAuxTest.cs index 5b6137b0ed..71f9c77df6 100644 --- a/VectoCore/VectoCoreTest/Models/EngineeringMode/EngineeringModeBusAuxTest.cs +++ b/VectoCore/VectoCoreTest/Models/EngineeringMode/EngineeringModeBusAuxTest.cs @@ -1036,7 +1036,7 @@ namespace TUGraz.VectoCore.Tests.Models.EngineeringMode ParkBrakeAndDoors = 0, CycleTime = 1.SI<Second>() }, - SSMInputs = new SSMEngineeringInputs() { + SSMInputsCooling = new SSMEngineeringInputs() { MechanicalPower = MechanicalPowerDemand, ElectricPower = ElectricPowerDemand, AuxHeaterPower = AuxHeaterPower, -- GitLab