diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterPrimaryBus.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterPrimaryBus.cs index d1bcd8274fbbc00de7e09fbc81bc4d0470dbb2b6..066284b7cbab2e797014b09435a568b26661aad7 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterPrimaryBus.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterPrimaryBus.cs @@ -136,6 +136,28 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter return pneumaticUI; } + public void SetSSMBusParameters(SSMInputs ssmInputs, Mission mission) + { + var busParams = mission.BusParameter; + + var hvacBusLength = busParams.HVACConfiguration == BusHVACSystemConfiguration.Configuration2 + ? 2 * Constants.BusParameters.DriverCompartmentLength + : busParams.VehicleLength; + + var hvacBusHeight = DeclarationData.BusAuxiliaries.CalculateInternalHeight(busParams.FloorType, + busParams.DoubleDecker, busParams.BodyHeight); + + ssmInputs.NumberOfPassengers = mission.RefLoad.Value(); + ssmInputs.BusFloorType = busParams.FloorType; + + ssmInputs.BusWindowSurface = DeclarationData.BusAuxiliaries.WindowHeight(busParams.DoubleDecker) * hvacBusLength + + DeclarationData.BusAuxiliaries.FrontAndRearWindowArea(busParams.DoubleDecker); + ssmInputs.BusSurfaceArea = 2 * (hvacBusLength * busParams.VehicleWidth + hvacBusLength * + busParams.BodyHeight + busParams.VehicleWidth * busParams.BodyHeight); + ssmInputs.BusVolume = hvacBusLength * busParams.VehicleWidth * hvacBusHeight; + } + + public override AirdragData CreateAirdragData(IAirdragDeclarationInputData airdragInputData, Mission mission, Segment segment) diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationDataAdapterCompletedBus.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationDataAdapterCompletedBus.cs index e585529ffe63e9335f2e249bb14235568f429b4f..9bd2db4ac20122a46f06f052349d55517328fea0 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationDataAdapterCompletedBus.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationDataAdapterCompletedBus.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; using TUGraz.VectoCommon.BusAuxiliaries; using TUGraz.VectoCommon.Exceptions; using TUGraz.VectoCommon.InputData; @@ -12,6 +13,7 @@ using TUGraz.VectoCore.Models.SimulationComponent.Data; using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter; using TUGraz.VectoCore.Models.BusAuxiliaries; using TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Electrics; +using TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC; using TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Pneumatics; using TUGraz.VectoCore.Models.BusAuxiliaries.Interfaces.DownstreamModules.Electrics; @@ -136,22 +138,29 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl } - - - public PneumaticUserInputsConfig SetPneumaticUserInputsConfig(PneumaticUserInputsConfig pneumaticUserInputsConfig, - IVehicleDeclarationInputData completedVehicle) + public void SetSSMBusParameters(SSMInputs ssmInputs, IVehicleDeclarationInputData completedVehicle, Mission mission, + KeyValuePair<LoadingType, Kilogram> loading) { + var busAuxiliaries = completedVehicle.Components.BusAuxiliaries; + var isDoubleDecker = completedVehicle.VehicleCode.IsDoubleDeckBus(); + var floorType = GetFloorType(completedVehicle.VehicleCode); - pneumaticUserInputsConfig.KneelingHeight = VectoMath.Max(0.SI<Meter>(), - completedVehicle.EntranceHeight - Constants.BusParameters.EntranceHeight); - pneumaticUserInputsConfig.Doors = - completedVehicle.Components.BusAuxiliaries.PneumaticConsumers.DoorDriveTechnology; - - return pneumaticUserInputsConfig; - } - + var hvacBusLength = busAuxiliaries.HVACAux.SystemConfiguration == BusHVACSystemConfiguration.Configuration2 + ? 2 * Constants.BusParameters.DriverCompartmentLength + : completedVehicle.Length; + var hvacBusHeight = DeclarationData.BusAuxiliaries.CalculateInternalHeight(GetFloorType(completedVehicle.VehicleCode), + isDoubleDecker, completedVehicle.Height); + ssmInputs.NumberOfPassengers = GetLoading(completedVehicle, mission, loading).Value(); + ssmInputs.BusFloorType = floorType; + + ssmInputs.BusWindowSurface = DeclarationData.BusAuxiliaries.WindowHeight(isDoubleDecker) * hvacBusLength + + DeclarationData.BusAuxiliaries.FrontAndRearWindowArea(isDoubleDecker); + ssmInputs.BusSurfaceArea = 2 * (hvacBusLength * completedVehicle.Width + hvacBusLength * + completedVehicle.Height + completedVehicle.Width * completedVehicle.Height); + ssmInputs.BusVolume = hvacBusLength * completedVehicle.Width * hvacBusHeight; + } public IEnumerable<VectoRunData.AuxData> CreateAuxiliaryData( IAuxiliariesDeclarationInputData auxiliaryInputData, IBusAuxiliariesDeclarationData mergedBusAux, diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeCompletedBusVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeCompletedBusVectoRunDataFactory.cs index f76e24248758d08f7b204809270aac5ccac44c6d..a5ad452c3df3182f284bd1c3ae0f2f1a994a8140 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeCompletedBusVectoRunDataFactory.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeCompletedBusVectoRunDataFactory.cs @@ -13,6 +13,7 @@ using TUGraz.VectoCore.InputData.Reader.ComponentData; using TUGraz.VectoCore.InputData.Reader.DataObjectAdapter; using TUGraz.VectoCore.Models.BusAuxiliaries; using TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Electrics; +using TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.HVAC; using TUGraz.VectoCore.Models.BusAuxiliaries.DownstreamModules.Impl.Pneumatics; using TUGraz.VectoCore.Models.BusAuxiliaries.Interfaces.DownstreamModules.Electrics; using TUGraz.VectoCore.Models.Declaration; @@ -287,10 +288,20 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl primaryBusAuxiliaries, completedVehicle, _compressorMap), PneumaticAuxillariesConfig = _consumersDeclarationData + + + }; - + + var ssmInputs = new SSMInputs(null); + DataAdapterCompleted.SetSSMBusParameters(ssmInputs, completedVehicle, mission, loading); + + + auxiliaryConfig.SSMInputs = ssmInputs; + simulationRunData.BusAuxiliaries = auxiliaryConfig; + simulationRunData.Cycle = new DrivingCycleProxy(cycle, mission.MissionType.ToString()); @@ -370,6 +381,12 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl PneumaticAuxillariesConfig = _consumersDeclarationData }; + var ssmInputs = new SSMInputs(null); + DataAdapterPrimary.SetSSMBusParameters(ssmInputs, mission); + + + auxiliaryConfig.SSMInputs = ssmInputs; + simulationRunData.BusAuxiliaries = auxiliaryConfig; diff --git a/VectoCore/VectoCoreTest/Integration/CompletedBus/CompletedBusFactorMethodTest.cs b/VectoCore/VectoCoreTest/Integration/CompletedBus/CompletedBusFactorMethodTest.cs index 7df8416913725cf300ce915951d51d23d1d61599..ce83f04ce25d6094a5668aea3791e616cdf2e17d 100644 --- a/VectoCore/VectoCoreTest/Integration/CompletedBus/CompletedBusFactorMethodTest.cs +++ b/VectoCore/VectoCoreTest/Integration/CompletedBus/CompletedBusFactorMethodTest.cs @@ -105,10 +105,9 @@ namespace TUGraz.VectoCore.Tests.Integration.CompletedBus SetRelatedVehicleParts(runs); - var index = 0; for (int i = 0; i < relatedRuns.Count; i++) { - AssertVehicleData(relatedRuns[i], ref index); + AssertVehicleData(relatedRuns[i],i); AssertAirdragData(relatedRuns[i]); AssertEngineData(relatedRuns[i]); AssertGearbox(relatedRuns[i]); @@ -120,13 +119,14 @@ namespace TUGraz.VectoCore.Tests.Integration.CompletedBus AssertElectricalUserInputConfig(relatedRuns[i]); AssertPneumaticUserInputsConfig(relatedRuns[i]); AssertPneumaticConsumerDemand(relatedRuns[i]); + AssertSSMBusParameters(relatedRuns[i], i); } } #region Vehicle Data Asserts - private void AssertVehicleData(RelatedRun relatedRun, ref int index) + private void AssertVehicleData(RelatedRun relatedRun, int currentIndex) { var genericVehicleData = relatedRun.VectoRunDataGenericBody.VehicleData; var specificVehicleData = relatedRun.VectoRunDataSpezificBody.VehicleData; @@ -140,7 +140,7 @@ namespace TUGraz.VectoCore.Tests.Integration.CompletedBus Assert.AreEqual(0, genericVehicleData.BodyAndTrailerMass.Value()); Assert.AreEqual(genericVehicleData.BodyAndTrailerMass, specificVehicleData.BodyAndTrailerMass); - AssertLoading(genericVehicleData.Loading, specificVehicleData.Loading, ref index); + AssertLoading(genericVehicleData.Loading, specificVehicleData.Loading, currentIndex); Assert.AreEqual(0.4992, genericVehicleData.DynamicTyreRadius.Value(), 1e-0); Assert.AreEqual(genericVehicleData.DynamicTyreRadius, specificVehicleData.DynamicTyreRadius); @@ -150,28 +150,27 @@ namespace TUGraz.VectoCore.Tests.Integration.CompletedBus AssertAxles(genericVehicleData.AxleData, specificVehicleData.AxleData); } - private void AssertLoading(Kilogram genericLoading, Kilogram specificLoading, ref int index) + private void AssertLoading(Kilogram genericLoading, Kilogram specificLoading, int index) { switch (index) { case 0: - Assert.AreEqual(5051.2950, genericLoading.Value(), 1e-0); - Assert.AreEqual(2309.4738, specificLoading.Value(), 1e-0);//lowLoading + Assert.AreEqual(5051.2950, genericLoading.Value(), 1e-4); + Assert.AreEqual(2309.4738, specificLoading.Value(), 1e-4); break; case 1: - Assert.AreEqual(5051.2950, genericLoading.Value(), 1e-0); + Assert.AreEqual(5051.2950, genericLoading.Value(), 1e-4); Assert.AreEqual(2130, specificLoading.Value(), 1e-0); break; case 2: - Assert.AreEqual(3367.53, genericLoading.Value(), 1e-0); - Assert.AreEqual(1539.6492, specificLoading.Value(), 1e-0); + Assert.AreEqual(3367.53, genericLoading.Value(), 1e-2); + Assert.AreEqual(1539.6492, specificLoading.Value(), 1e-4); break; case 3: - Assert.AreEqual(3367.53, genericLoading.Value(), 1e-0); + Assert.AreEqual(3367.53, genericLoading.Value(), 1e-2); Assert.AreEqual(2130.0, specificLoading.Value(), 1e-0); break; } - index++; } private void AssertADASData(VehicleData.ADASData genericAdasData, VehicleData.ADASData specificAdasData) @@ -624,6 +623,31 @@ namespace TUGraz.VectoCore.Tests.Integration.CompletedBus #endregion + #region SSMBusParameters Asserts + + private void AssertSSMBusParameters(RelatedRun relatedRun, int currentIndex) + { + var genericBusParam = relatedRun.VectoRunDataGenericBody.BusAuxiliaries.SSMInputs.BusParameters; + var specificBusParam = relatedRun.VectoRunDataSpezificBody.BusAuxiliaries.SSMInputs.BusParameters; + + AssertLoading(genericBusParam.NumberOfPassengers.SI<Kilogram>(), + specificBusParam.NumberOfPassengers.SI<Kilogram>(), currentIndex); + + Assert.AreEqual(FloorType.HighFloor, genericBusParam.BusFloorType); + Assert.AreEqual(FloorType.HighFloor, specificBusParam.BusFloorType); + + Assert.AreEqual(34.2500, genericBusParam.BusWindowSurface.Value()); + Assert.AreEqual(37.5750, specificBusParam.BusWindowSurface.Value()); + + Assert.AreEqual(150.1200, genericBusParam.BusSurfaceArea.Value()); + Assert.AreEqual(146.6130, specificBusParam.BusSurfaceArea.Value()); + + Assert.AreEqual(48.1950, genericBusParam.BusVolume.Value()); + Assert.AreEqual(54.2997, specificBusParam.BusVolume.Value()); + } + + #endregion + private CrosswindCorrectionCdxALookup GetCrosswindCorrection(string crossWindCorrectionParams, SquareMeter aerodynamicDragArea, Meter vehicleHeight) {