From 2113437751d3f0c3f7664e2793ab91bcd9e51347 Mon Sep 17 00:00:00 2001 From: Markus Quaritsch <markus.quaritsch@tugraz.at> Date: Thu, 16 Apr 2020 08:32:42 +0200 Subject: [PATCH] started work on manufacturer report completed vehicle --- .../InputData/IInputDataProvider.cs | 4 + VectoCommon/VectoCommon/Utils/SI.cs | 5 + .../Utils/SIConvertExtensionMethods.cs | 5 + .../XMLDeclarationInputDataProvider.cs | 12 + ...clarationDataAdapterCompletedBusGeneric.cs | 4 +- .../DeclarationDataAdapterPrimaryBus.cs | 11 +- .../DeclarationDataAdapterSingleBus.cs | 9 + ...tionModeCompletedBusVectoRunDataFactory.cs | 78 +++- .../GenericModelData/GenericBusEngineData.cs | 16 +- .../Models/Simulation/Data/VectoRunData.cs | 4 + .../OutputData/SummaryDataContainer.cs | 5 +- .../XML/AbstractXMLManufacturerReport.cs | 2 +- .../OutputData/XML/XMLDeclarationReport.cs | 6 + .../XMLDeclarationReportCompletedVehicle.cs | 25 +- .../XML/XMLManufacturerReportCompletedBus.cs | 423 ++++++++++++++++++ .../XML/XMLManufacturerReportPrimaryBus.cs | 70 +-- .../OutputData/XML/XMLPrimaryVehicleReport.cs | 4 +- .../Declaration/Buses/ElectricConsumers.csv | 2 +- VectoCore/VectoCore/VectoCore.csproj | 1 + .../CompletedBusFactorMethodTest.cs | 1 + .../FactorMethod/SingleBus_41-32b_AT-P.vecto | 12 + ...mary_heavyBus group42_SmartPS.RSLT_PIF.xml | 134 +++--- .../primary_heavyBus group42_SmartPS.xml | 12 +- VectoCore/VectoCoreTest/VectoCoreTest.csproj | 3 + 24 files changed, 653 insertions(+), 195 deletions(-) create mode 100644 VectoCore/VectoCore/OutputData/XML/XMLManufacturerReportCompletedBus.cs create mode 100644 VectoCore/VectoCoreTest/TestData/Integration/Buses/FactorMethod/SingleBus_41-32b_AT-P.vecto diff --git a/VectoCommon/VectoCommon/InputData/IInputDataProvider.cs b/VectoCommon/VectoCommon/InputData/IInputDataProvider.cs index 15890e7a8c..7533af593c 100644 --- a/VectoCommon/VectoCommon/InputData/IInputDataProvider.cs +++ b/VectoCommon/VectoCommon/InputData/IInputDataProvider.cs @@ -30,6 +30,8 @@ */ using System.Xml.Linq; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Utils; namespace TUGraz.VectoCommon.InputData { @@ -67,6 +69,8 @@ namespace TUGraz.VectoCommon.InputData IApplicationInformation ApplicationInformation { get; } DigestData ManufacturerHash { get; } + + IResult GetResult(VehicleClass vehicleClass, MissionType mission, string fuelMode, Kilogram payload); } public interface ISingleBusInputDataProvider : IDeclarationInputDataProvider diff --git a/VectoCommon/VectoCommon/Utils/SI.cs b/VectoCommon/VectoCommon/Utils/SI.cs index 69bb2e1dc6..bd533a54eb 100644 --- a/VectoCommon/VectoCommon/Utils/SI.cs +++ b/VectoCommon/VectoCommon/Utils/SI.cs @@ -824,6 +824,11 @@ namespace TUGraz.VectoCommon.Utils private JoulePerMeter(double val) : base(val, Units) { } public override string UnitString { get { return "J/m"; } } + + public static KilogramPerMeter operator /(JoulePerMeter jpm, JoulePerKilogramm jpkg) + { + return SIBase<KilogramPerMeter>.Create(jpm.Val / jpkg.Value()); + } } /// <summary> diff --git a/VectoCommon/VectoCommon/Utils/SIConvertExtensionMethods.cs b/VectoCommon/VectoCommon/Utils/SIConvertExtensionMethods.cs index 3bbd12d234..553964b2fb 100644 --- a/VectoCommon/VectoCommon/Utils/SIConvertExtensionMethods.cs +++ b/VectoCommon/VectoCommon/Utils/SIConvertExtensionMethods.cs @@ -236,6 +236,11 @@ namespace TUGraz.VectoCommon.Utils { return new ConvertedSI(nlps.Value() * 60.0, "Nl/min"); } + + public static ConvertedSI ConvertToMegaJouleperKilometer(this JoulePerMeter jpm) + { + return new ConvertedSI(jpm.Value() * 1e-3, "MJ/km"); + } } } diff --git a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationInputDataProvider.cs b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationInputDataProvider.cs index bae1003efd..b9282412d5 100644 --- a/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationInputDataProvider.cs +++ b/VectoCore/VectoCore/InputData/FileIO/XML/Declaration/DataProvider/XMLDeclarationInputDataProvider.cs @@ -29,11 +29,15 @@ * Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology */ +using System; +using System.Linq; using System.Xml; using System.Xml.Linq; using Castle.Components.DictionaryAdapter.Xml; using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.InputData.FileIO.XML.Common; using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces; using TUGraz.VectoCore.Utils; @@ -156,6 +160,14 @@ namespace TUGraz.VectoCore.InputData.FileIO.XML.Declaration get { return Reader.GetDigestData(Document.LastChild.LastChild); } } + public IResult GetResult(VehicleClass vehicleClass, MissionType mission, string fuelMode, Kilogram payload) + { + return ResultsInputData.Results.FirstOrDefault( + x => x.VehicleGroup == vehicleClass && + (x.SimulationParameter.Payload - payload).IsEqual(0, 1) && x.Mission == mission && + x.SimulationParameter.FuelMode.Equals(fuelMode, StringComparison.InvariantCultureIgnoreCase)); + } + public IResultsInputData ResultsInputData { get { return _resultsInputData ?? (_resultsInputData = Reader.ResultsInputData); } diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterCompletedBusGeneric.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterCompletedBusGeneric.cs index 50c8a93962..451b761a54 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterCompletedBusGeneric.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterCompletedBusGeneric.cs @@ -38,9 +38,9 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter // only powertrain components are different - public CombustionEngineData CreateEngineData(IVehicleDeclarationInputData primaryVehicle) + public CombustionEngineData CreateEngineData(IVehicleDeclarationInputData primaryVehicle, int modeIdx) { - return GenericBusEngineData.Instance.CreateGenericBusEngineData(primaryVehicle); + return GenericBusEngineData.Instance.CreateGenericBusEngineData(primaryVehicle, modeIdx); } #region Overrides of DeclarationDataAdapterHeavyLorry diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterPrimaryBus.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterPrimaryBus.cs index 3434093cbf..a2ef8aa194 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterPrimaryBus.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterPrimaryBus.cs @@ -21,8 +21,15 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter { public class DeclarationDataAdapterPrimaryBus : DeclarationDataAdapterHeavyLorry { - - #region Overrides of DeclarationDataAdapterTruck + #region Overrides of DeclarationDataAdapterHeavyLorry + + public override DriverData CreateDriverData() + { + var retVal = base.CreateDriverData(); + retVal.LookAheadCoasting.Enabled = false; + return retVal; + } + public override VehicleData CreateVehicleData(IVehicleDeclarationInputData data, Mission mission, KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading) { diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterSingleBus.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterSingleBus.cs index 5c4288d039..22630f9f2b 100644 --- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterSingleBus.cs +++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/DeclarationDataAdapterSingleBus.cs @@ -77,6 +77,15 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter return retVal; } + #region Overrides of DeclarationDataAdapterCompletedBusGeneric + + public override RetarderData CreateRetarderData(IRetarderInputData retarder) + { + return SetCommonRetarderData(retarder); + } + + #endregion + public ISingleBusInputDataProvider SingleBusInputData { get; set; } protected IVehicleDeclarationInputData CompletedVehicle diff --git a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeCompletedBusVectoRunDataFactory.cs b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeCompletedBusVectoRunDataFactory.cs index 04a1e5f61a..eb0ce95dcb 100644 --- a/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeCompletedBusVectoRunDataFactory.cs +++ b/VectoCore/VectoCore/InputData/Reader/Impl/DeclarationModeCompletedBusVectoRunDataFactory.cs @@ -48,7 +48,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl protected ICompressorMap _compressorMap; //protected IPneumaticsConsumersDemand _consumersDeclarationData; - protected CombustionEngineData _combustionEngineData; + //protected CombustionEngineData _combustionEngineData; //protected Exception InitException; protected ShiftStrategyParameters _gearshiftData; @@ -93,7 +93,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl { var powertrainConfig = _segmentCompletedBus.Missions.Select( mission => CreateVectoRunDataSpecific( - mission, mission.Loadings.First())) + mission, mission.Loadings.First(), 0)) .FirstOrDefault(x => x != null); Report.InitializeReport(powertrainConfig, new List<List<FuelData.Entry>>()); @@ -113,7 +113,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl _segmentCompletedBus.Missions.First().Loadings.First()); tmpVehicleData.VehicleCategory = VehicleCategory.GenericBusVehicle; - _combustionEngineData = DataAdapterGeneric.CreateEngineData(PrimaryVehicle); + var combustionEngineData = DataAdapterGeneric.CreateEngineData(PrimaryVehicle, 0); _axlegearData = DataAdapterGeneric.CreateAxleGearData(PrimaryVehicle.Components.AxleGearInputData); @@ -127,11 +127,11 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl }; var tmpStrategy = PowertrainBuilder.GetShiftStrategy(tmpRunData, new SimplePowertrainContainer(tmpRunData)); - _gearboxData = DataAdapterGeneric.CreateGearboxData(PrimaryVehicle, new VectoRunData() { EngineData = _combustionEngineData, AxleGearData = _axlegearData, VehicleData = tmpVehicleData }, + _gearboxData = DataAdapterGeneric.CreateGearboxData(PrimaryVehicle, new VectoRunData() { EngineData = combustionEngineData, AxleGearData = _axlegearData, VehicleData = tmpVehicleData }, tmpStrategy); _gearshiftData = DataAdapterGeneric.CreateGearshiftData( - _gearboxData, _axlegearData.AxleGear.Ratio * (_angledriveData?.Angledrive.Ratio ?? 1.0), _combustionEngineData.IdleSpeed); + _gearboxData, _axlegearData.AxleGear.Ratio * (_angledriveData?.Angledrive.Ratio ?? 1.0), combustionEngineData.IdleSpeed); _retarderData = DataAdapterGeneric.CreateRetarderData(PrimaryVehicle.Components.RetarderInputData); @@ -151,23 +151,53 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl private IEnumerable<VectoRunData> VectoRunDataHeavyBusCompleted() { - foreach (var mission in _segmentCompletedBus.Missions) { - foreach (var loading in mission.Loadings) { - var simulationRunData = CreateVectoRunDataSpecific(mission, loading); - if (simulationRunData != null) { + var engineModes = InputDataProvider.PrimaryVehicleData.Vehicle.Components.EngineInputData.EngineModes; + + for (var modeIdx = 0; modeIdx < engineModes.Count; modeIdx++) { + var fuelMode = "single fuel mode"; + if (engineModes[modeIdx].Fuels.Count > 1) { + fuelMode = "dual fuel mode"; + } + foreach (var mission in _segmentCompletedBus.Missions) { + foreach (var loading in mission.Loadings) { + var simulationRunData = CreateVectoRunDataSpecific(mission, loading, modeIdx); + if (simulationRunData != null) { + yield return simulationRunData; + } + + var primarySegment = GetPrimarySegment(PrimaryVehicle); + var primaryMission = primarySegment.Missions.Where( + m => { + return m.BusParameter.DoubleDecker == CompletedVehicle.VehicleCode.IsDoubleDeckerBus() && + m.MissionType == mission.MissionType; + }).First(); + simulationRunData = CreateVectoRunDataGeneric( + primaryMission, + new KeyValuePair<LoadingType, Tuple<Kilogram, double?>>(loading.Key, primaryMission.Loadings[loading.Key]), + primarySegment, modeIdx); + + + var primaryResult = InputDataProvider.PrimaryVehicleData.GetResult( + simulationRunData.Mission.BusParameter.BusGroup, simulationRunData.Mission.MissionType, fuelMode, + simulationRunData.VehicleData.Loading); + if (primaryResult == null) { + throw new VectoException( + "Failed to find results in PrimaryVehicleReport for vehicle group: {0}, mission: {1}, fuel mode: '{2}', payload: {3}. Make sure PIF and completed vehicle data match!", + simulationRunData.Mission.BusParameter.BusGroup, simulationRunData.Mission.MissionType, fuelMode, + simulationRunData.VehicleData.Loading); + } + + if (primaryResult.ResultStatus != "success") { + throw new VectoException( + "Simulation results in PrimaryVehicleReport for vehicle group: {0}, mission: {1}, fuel mode: '{2}', payload: {3} not finished successfully.", + simulationRunData.Mission.BusParameter.BusGroup, simulationRunData.Mission.MissionType, fuelMode, + simulationRunData.VehicleData.Loading); + } + + simulationRunData.PrimaryResult = primaryResult; + yield return simulationRunData; } - - var primarySegment = GetPrimarySegment(PrimaryVehicle); - var primaryMission = primarySegment.Missions.Where( - m => { - return m.BusParameter.DoubleDecker == CompletedVehicle.VehicleCode.IsDoubleDeckerBus() && - m.MissionType == mission.MissionType; - }).First(); - simulationRunData = CreateVectoRunDataGeneric( - primaryMission, new KeyValuePair<LoadingType, Tuple<Kilogram, double?>>(loading.Key, primaryMission.Loadings[loading.Key]), - primarySegment); - yield return simulationRunData; } } } @@ -205,7 +235,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl } - protected VectoRunData CreateVectoRunDataSpecific(Mission mission, KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading) + protected VectoRunData CreateVectoRunDataSpecific(Mission mission, KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading, int modeIdx) { DrivingCycleData cycle; lock (CyclesCacheLock) { @@ -224,7 +254,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl VehicleData = DataAdapterSpecific.CreateVehicleData(PrimaryVehicle, CompletedVehicle, mission, loading), AirdragData = DataAdapterSpecific.CreateAirdragData(CompletedVehicle, mission), - EngineData = _combustionEngineData, + EngineData = DataAdapterSpecific.CreateEngineData(PrimaryVehicle, modeIdx), GearboxData = _gearboxData, AxleGearData = _axlegearData, AngledriveData = _angledriveData, @@ -251,7 +281,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl } - protected VectoRunData CreateVectoRunDataGeneric(Mission mission, KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading, Segment primarySegment) + protected VectoRunData CreateVectoRunDataGeneric(Mission mission, KeyValuePair<LoadingType, Tuple<Kilogram, double?>> loading, Segment primarySegment, int modeIdx) { DrivingCycleData cycle; lock (CyclesCacheLock) { @@ -269,7 +299,7 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl Loading = loading.Key, VehicleData = DataAdapterGeneric.CreateVehicleData(PrimaryVehicle, mission, loading), AirdragData = DataAdapterGeneric.CreateAirdragData(null, mission, new Segment()), - EngineData = _combustionEngineData, + EngineData = DataAdapterGeneric.CreateEngineData(PrimaryVehicle, modeIdx), GearboxData = _gearboxData, AxleGearData = _axlegearData, AngledriveData = _angledriveData, diff --git a/VectoCore/VectoCore/Models/GenericModelData/GenericBusEngineData.cs b/VectoCore/VectoCore/Models/GenericModelData/GenericBusEngineData.cs index 1de3adf980..9498cb77d2 100644 --- a/VectoCore/VectoCore/Models/GenericModelData/GenericBusEngineData.cs +++ b/VectoCore/VectoCore/Models/GenericModelData/GenericBusEngineData.cs @@ -4,6 +4,7 @@ using System.Data; using System.Linq; using System.Runtime.CompilerServices; using TUGraz.VectoCommon.BusAuxiliaries; +using TUGraz.VectoCommon.Exceptions; using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Utils; @@ -39,13 +40,18 @@ namespace TUGraz.VectoCore.Models.Declaration } - public CombustionEngineData CreateGenericBusEngineData(IVehicleDeclarationInputData primaryVehicle) + public CombustionEngineData CreateGenericBusEngineData(IVehicleDeclarationInputData primaryVehicle, int modeIdx) { + if (modeIdx >= primaryVehicle.Components.EngineInputData.EngineModes.Count) { + throw new VectoException( + "requested engine mode {0}, only {1} modes in engine of primary vehicle available!", modeIdx, + primaryVehicle.Components.EngineInputData.EngineModes.Count); + } var engineData = primaryVehicle.Components.EngineInputData; var gearbox = primaryVehicle.Components.GearboxInputData; var engine = new CombustionEngineData { - IdleSpeed = engineData.EngineModes[0].IdleSpeed, + IdleSpeed = engineData.EngineModes[modeIdx].IdleSpeed, Displacement = engineData.Displacement, WHRType = WHRType.None, Inertia = DeclarationData.Engine.EngineInertia(engineData.Displacement, gearbox.Type), @@ -55,10 +61,10 @@ namespace TUGraz.VectoCore.Models.Declaration MaxTorqueDeclared = engineData.MaxTorqueDeclared, }; - var limits = primaryVehicle.TorqueLimits.ToDictionary(e => e.Gear); + var limits = primaryVehicle.TorqueLimits.ToDictionary(e => e.Gear); var numGears = gearbox.Gears.Count; var fullLoadCurves = new Dictionary<uint, EngineFullLoadCurve>(numGears + 1); - fullLoadCurves[0] = FullLoadCurveReader.Create(engineData.EngineModes.First().FullLoadCurve, true); + fullLoadCurves[0] = FullLoadCurveReader.Create(engineData.EngineModes[modeIdx].FullLoadCurve, true); fullLoadCurves[0].EngineData = engine; foreach (var gear in gearbox.Gears) { @@ -71,7 +77,7 @@ namespace TUGraz.VectoCore.Models.Declaration engine.FullLoadCurves = fullLoadCurves; - var fuel = GetCombustionEngineFuelData(primaryVehicle.Components.EngineInputData.EngineModes.First(), fullLoadCurves[0]); + var fuel = GetCombustionEngineFuelData(primaryVehicle.Components.EngineInputData.EngineModes[modeIdx], fullLoadCurves[0]); diff --git a/VectoCore/VectoCore/Models/Simulation/Data/VectoRunData.cs b/VectoCore/VectoCore/Models/Simulation/Data/VectoRunData.cs index 56f4358033..7e8e66d353 100644 --- a/VectoCore/VectoCore/Models/Simulation/Data/VectoRunData.cs +++ b/VectoCore/VectoCore/Models/Simulation/Data/VectoRunData.cs @@ -36,6 +36,7 @@ using System.Xml.Linq; using Newtonsoft.Json; using TUGraz.VectoCommon.BusAuxiliaries; using TUGraz.VectoCommon.Exceptions; +using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.Configuration; @@ -127,6 +128,9 @@ namespace TUGraz.VectoCore.Models.Simulation.Data public string ShiftStrategy { get; set; } public MeterPerSecond VehicleDesignSpeed { get; internal set; } + // only used for factor method + public IResult PrimaryResult { get; set; } + public class AuxData { // ReSharper disable once InconsistentNaming diff --git a/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs b/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs index a598007435..c09dd9b617 100644 --- a/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs +++ b/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs @@ -369,8 +369,8 @@ namespace TUGraz.VectoCore.OutputData var workBusAuxESMech = 0.SI<WattSecond>(); if (runData.BusAuxiliaries != null) { var workBusAuxPSCompOff = modData.EnergyPneumaticCompressorPowerOff(); - var workBusAuxPSCompOn = modData.EnergyPneumaticCompressorOn(); - var airBusAuxPSON = modData.AirGenerated(); + var workBusAuxPSCompOn = modData.EnergyPneumaticCompressorAlwaysOn(); + var airBusAuxPSON = modData.AirGeneratedAlwaysOn(); var deltaAir = modData.AirConsumed() - modData.AirGenerated(); var kAir = (workBusAuxPSCompOn - workBusAuxPSCompOff) / (airBusAuxPSON - 0.SI<NormLiter>()); @@ -381,6 +381,7 @@ namespace TUGraz.VectoCore.OutputData runData.BusAuxiliaries.ElectricalUserInputsConfig.AlternatorMap.GetEfficiency(0.RPMtoRad(), 0.SI<Ampere>()) / runData.BusAuxiliaries.ElectricalUserInputsConfig.AlternatorGearEfficiency; + } row[Fields.E_BusAux_PS_corr] = workBusAuxPSCorr.ConvertToKiloWattHour(); row[Fields.E_BusAux_ES_mech_corr] = workBusAuxESMech.ConvertToKiloWattHour(); diff --git a/VectoCore/VectoCore/OutputData/XML/AbstractXMLManufacturerReport.cs b/VectoCore/VectoCore/OutputData/XML/AbstractXMLManufacturerReport.cs index d441b77113..6879eab7b2 100644 --- a/VectoCore/VectoCore/OutputData/XML/AbstractXMLManufacturerReport.cs +++ b/VectoCore/VectoCore/OutputData/XML/AbstractXMLManufacturerReport.cs @@ -34,7 +34,7 @@ namespace TUGraz.VectoCore.OutputData.XML protected XElement Results; protected XElement InputDataIntegrity; - private bool _allSuccess = true; + protected bool _allSuccess = true; protected XNamespace xsi = XNamespace.Get("http://www.w3.org/2001/XMLSchema-instance"); protected XNamespace tns = "urn:tugraz:ivt:VectoAPI:DeclarationOutput:v0.8"; diff --git a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs index 8b1e8bcff5..8096a70821 100644 --- a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs +++ b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs @@ -38,6 +38,7 @@ using System.Xml; using System.Xml.Linq; using System.Xml.XPath; using TUGraz.VectoCommon.BusAuxiliaries; +using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Resources; using TUGraz.VectoCommon.Utils; @@ -123,6 +124,9 @@ namespace TUGraz.VectoCore.OutputData.XML public double WeightingFactor { get; set; } + // used for factor method + public IResult PrimaryResult { get; set; } + public virtual void SetResultData(VectoRunData runData, IModalDataContainer data, double weightingFactor) { @@ -206,6 +210,8 @@ namespace TUGraz.VectoCore.OutputData.XML AverageAxlegearEfficiency = eAxlOut / eAxlIn; WeightingFactor = weightingFactor; + + PrimaryResult = runData.PrimaryResult; } private static WattSecond WorkWHRCorrection(IModalDataContainer data) diff --git a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportCompletedVehicle.cs b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportCompletedVehicle.cs index aae61d59a9..5c906d13f3 100644 --- a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportCompletedVehicle.cs +++ b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportCompletedVehicle.cs @@ -1,5 +1,6 @@ using System; using System.Linq; +using TUGraz.VectoCommon.Exceptions; using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; using TUGraz.VectoCore.Models.Declaration; @@ -16,7 +17,9 @@ namespace TUGraz.VectoCore.OutputData.XML { protected override void InstantiateReports(VectoRunData modelData) { - ManufacturerRpt = new XMLManufacturerReportCompletedBus(); + ManufacturerRpt = new XMLManufacturerReportCompletedBus() { + PrimaryVehicle = PrimaryResults.Vehicle + }; CustomerRpt = new XMLCustomerReportCompletedBus(); } @@ -29,7 +32,12 @@ namespace TUGraz.VectoCore.OutputData.XML { var genericResult = Results.First(x => x.VehicleClass.IsPrimaryBus() && x.FuelMode == specificResult.FuelMode && x.Mission == specificResult.Mission && x.LoadingType == specificResult.LoadingType); - var primaryResult = SelectPrimaryResult(genericResult); + var primaryResult = genericResult.PrimaryResult ?? specificResult.PrimaryResult; + if (primaryResult == null) { + throw new VectoException( + "no primary result entry set for simulation run vehicle class: {0}, mission: {1}, payload: {2}", + genericResult.VehicleClass, genericResult.Mission, genericResult.Payload); + } (ManufacturerRpt as XMLManufacturerReportCompletedBus).WriteResult(genericResult, specificResult, primaryResult); (CustomerRpt as XMLCustomerReportCompletedBus).WriteResult(genericResult, specificResult, primaryResult); @@ -41,18 +49,5 @@ namespace TUGraz.VectoCore.OutputData.XML { OutputReports(); } } - - private IResult SelectPrimaryResult(ResultEntry genericResult) - { - var isDualModeEngine = Results.Select(x => x.FuelMode).Distinct().Count() > 1; - var fuelMode = "single fuel mode"; - if (isDualModeEngine && genericResult.FuelMode > 0) { - fuelMode = "dual fuel mode"; - } - return PrimaryResults.ResultsInputData.Results.First( - x => x.VehicleGroup == genericResult.VehicleClass && - (x.SimulationParameter.Payload - genericResult.Payload).IsEqual(0, 1) && x.Mission == genericResult.Mission && - x.SimulationParameter.FuelMode.Equals(fuelMode, StringComparison.InvariantCultureIgnoreCase)); - } } } \ No newline at end of file diff --git a/VectoCore/VectoCore/OutputData/XML/XMLManufacturerReportCompletedBus.cs b/VectoCore/VectoCore/OutputData/XML/XMLManufacturerReportCompletedBus.cs new file mode 100644 index 0000000000..741060ee39 --- /dev/null +++ b/VectoCore/VectoCore/OutputData/XML/XMLManufacturerReportCompletedBus.cs @@ -0,0 +1,423 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Xml.Linq; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Resources; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.Models.Declaration; +using TUGraz.VectoCore.Models.Simulation.Data; +using TUGraz.VectoCore.Models.Simulation.Impl; +using TUGraz.VectoCore.Models.SimulationComponent.Data; +using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.OutputData.XML { + public class XMLManufacturerReportCompletedBus : AbstractXMLManufacturerReport + { + + public IVehicleDeclarationInputData PrimaryVehicle { get; set; } + + + #region Overrides of AbstractXMLManufacturerReport + + public override void Initialize(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes) + { + VehiclePart.Add( + new XAttribute(xsi + "type", "VehiclePrimaryBusType"), + new XElement(tns + XMLNames.Component_Model, modelData.VehicleData.ModelName), + new XElement(tns + XMLNames.Component_Manufacturer, modelData.VehicleData.Manufacturer), + new XElement(tns + XMLNames.Component_ManufacturerAddress, modelData.VehicleData.ManufacturerAddress), + new XElement(tns + XMLNames.Vehicle_VIN, modelData.VehicleData.VIN), + new XElement( + tns + XMLNames.Vehicle_GrossVehicleMass, + XMLHelper.ValueAsUnit(modelData.VehicleData.GrossVehicleMass, XMLNames.Unit_t, 1)), + new XElement( + tns + XMLNames.Vehicle_CurbMassChassis, XMLHelper.ValueAsUnit(modelData.VehicleData.CurbMass, XMLNames.Unit_kg)), + new XElement(tns + XMLNames.Vehicle_ZeroEmissionVehicle, modelData.VehicleData.ZeroEmissionVehicle), + new XElement(tns + XMLNames.Vehicle_HybridElectricHDV, modelData.VehicleData.HybridElectricHDV), + new XElement(tns + XMLNames.Vehicle_DualFuelVehicle, modelData.VehicleData.DualFuelVehicle), + new XElement(tns + XMLNames.Vehicle_AxleConfiguration, modelData.VehicleData.AxleConfiguration.GetName()), + new XElement(tns + XMLNames.Report_Vehicle_VehicleGroup, modelData.VehicleData.VehicleClass.GetClassNumber()), + + GetADAS(modelData.VehicleData.ADAS), + GetTorqueLimits(modelData.EngineData), + VehicleComponents(modelData, fuelModes) + + ); + + InputDataIntegrity = GetInputDataSignature(modelData); + } + + public virtual void WriteResult(XMLDeclarationReport.ResultEntry genericResult, XMLDeclarationReport.ResultEntry specificResult, IResult primaryResult) + { + + _allSuccess &= genericResult.Status == VectoRun.Status.Success; + _allSuccess &= specificResult.Status == VectoRun.Status.Success; + Results.Add( + new XElement( + tns + XMLNames.Report_Result_Result, + new XAttribute( + XMLNames.Report_Result_Status_Attr, + genericResult.Status == VectoRun.Status.Success && specificResult.Status == VectoRun.Status.Success ? "success" : "error"), + new XElement(tns + XMLNames.Report_Result_Mission, genericResult.Mission.ToXMLFormat()), + GetResults(genericResult, specificResult, primaryResult))); + } + + private object GetResults(XMLDeclarationReport.ResultEntry genericResult, XMLDeclarationReport.ResultEntry specificResult, IResult primaryResult) + { + if (genericResult.Status == VectoRun.Status.Pending || genericResult.Status == VectoRun.Status.Running || + specificResult.Status == VectoRun.Status.Pending || specificResult.Status == VectoRun.Status.Running) { + return new object[] { + GetSimulationParameters(specificResult), + new XElement( + tns + XMLNames.Report_Results_Error, + string.Format("Simulation not finished! Status: {0} / {1}", genericResult.Status, specificResult.Status)), + new XElement(tns + XMLNames.Report_Results_ErrorDetails, ""), + }; // should not happen! + } + + if (genericResult.Status == VectoRun.Status.Canceled || genericResult.Status == VectoRun.Status.Aborted || specificResult.Status == VectoRun.Status.Canceled || specificResult.Status == VectoRun.Status.Aborted) { + return new object[] { + GetSimulationParameters(specificResult), + new XElement(tns + XMLNames.Report_Results_Error, genericResult.Error ?? "" + Environment.NewLine + specificResult.Error ?? ""), + new XElement(tns + XMLNames.Report_Results_ErrorDetails, genericResult.StackTrace ?? "" + Environment.NewLine + specificResult.StackTrace ?? ""), + }; + } + + if (genericResult.Status == VectoRun.Status.Success && specificResult.Status == VectoRun.Status.Success) { + return GetSuccessResultEntry(genericResult, specificResult, primaryResult); + } + throw new ArgumentOutOfRangeException(); + } + + private object GetSuccessResultEntry(XMLDeclarationReport.ResultEntry genericResult, XMLDeclarationReport.ResultEntry specificResult, IResult primaryResult) + { + return new object[] { + new XElement( + tns + XMLNames.Report_ResultEntry_Distance, new XAttribute(XMLNames.Report_Results_Unit_Attr, XMLNames.Unit_km), + specificResult.Distance.ConvertToKiloMeter().ToXMLFormat(3)), + GetSimulationParameters(specificResult), + new XElement( + tns + XMLNames.Report_ResultEntry_VehiclePerformance, + new XElement( + tns + XMLNames.Report_ResultEntry_AverageSpeed, + XMLHelper.ValueAsUnit(specificResult.AverageSpeed, XMLNames.Unit_kmph, 1)), + new XElement( + tns + XMLNames.Report_ResultEntry_AvgDrivingSpeed, + XMLHelper.ValueAsUnit(specificResult.AverageDrivingSpeed, XMLNames.Unit_kmph, 1)), + new XElement( + tns + XMLNames.Report_ResultEntry_MinSpeed, XMLHelper.ValueAsUnit(specificResult.MinSpeed, XMLNames.Unit_kmph, 1)), + new XElement( + tns + XMLNames.Report_ResultEntry_MaxSpeed, XMLHelper.ValueAsUnit(specificResult.MaxSpeed, XMLNames.Unit_kmph, 1)), + new XElement( + tns + XMLNames.Report_ResultEntry_MaxDeceleration, + XMLHelper.ValueAsUnit(specificResult.MaxDeceleration, XMLNames.Unit_mps2, 2)), + new XElement( + tns + XMLNames.Report_ResultEntry_MaxAcceleration, + XMLHelper.ValueAsUnit(specificResult.MaxAcceleration, XMLNames.Unit_mps2, 2)), + new XElement( + tns + XMLNames.Report_ResultEntry_FullLoadDrivingtimePercentage, + specificResult.FullLoadPercentage.ToXMLFormat(2)), + new XElement(tns + XMLNames.Report_ResultEntry_GearshiftCount, specificResult.GearshiftCount.ToXMLFormat(0)), + new XElement( + tns + XMLNames.Report_ResultEntry_EngineSpeedDriving, + new XElement( + tns + XMLNames.Report_ResultEntry_EngineSpeedDriving_Min, + XMLHelper.ValueAsUnit(specificResult.EngineSpeedDrivingMin, XMLNames.Unit_RPM, 1)), + new XElement( + tns + XMLNames.Report_ResultEntry_EngineSpeedDriving_Avg, + XMLHelper.ValueAsUnit(specificResult.EngineSpeedDrivingAvg, XMLNames.Unit_RPM, 1)), + new XElement( + tns + XMLNames.Report_ResultEntry_EngineSpeedDriving_Max, + XMLHelper.ValueAsUnit(specificResult.EngineSpeedDrivingMax, XMLNames.Unit_RPM, 1)) + ), + new XElement( + tns + XMLNames.Report_Results_AverageGearboxEfficiency, + XMLHelper.ValueAsUnit(specificResult.AverageGearboxEfficiency, XMLNames.UnitPercent, 2)), + new XElement( + tns + XMLNames.Report_Results_AverageAxlegearEfficiency, + XMLHelper.ValueAsUnit(specificResult.AverageAxlegearEfficiency, XMLNames.UnitPercent, 2)) + ), + + //FC + GetFuelConsumptionResults(genericResult, specificResult, primaryResult) + }; + + } + + private XElement[] GetFuelConsumptionResults(XMLDeclarationReport.ResultEntry genericResult, XMLDeclarationReport.ResultEntry specificResult, IResult primaryResult) + { + var factor = specificResult.EnergyConsumptionTotal.Value() / genericResult.EnergyConsumptionTotal.Value(); + var retVal = new List<XElement>(); + + var co2Sum = 0.SI<KilogramPerMeter>(); + + foreach (var entry in primaryResult.EnergyConsumption) { + var fcEnergy = entry.Value * factor; // J/m + var fuelData = FuelData.Instance().Lookup(entry.Key); + var fcMass = fcEnergy / fuelData.LowerHeatingValueVecto; // kg/m + co2Sum += fcMass * fuelData.CO2PerFuelWeight; + + var fcResult = new XElement(tns + XMLNames.Report_Results_Fuel, new XAttribute(XMLNames.Report_Results_Fuel_Type_Attr, fuelData.FuelType.ToXMLFormat())); + fcResult.Add( + new XElement( + tns + XMLNames.Report_Results_FuelConsumption, + new XAttribute(XMLNames.Report_Results_Unit_Attr, "g/km"), + fcMass.ConvertToGrammPerKiloMeter().ToMinSignificantDigits(3, 1)), + new XElement( + tns + XMLNames.Report_Results_FuelConsumption, + new XAttribute(XMLNames.Report_Results_Unit_Attr, "g/t-km"), + (fcMass / specificResult.Payload) + .ConvertToGrammPerTonKilometer().ToMinSignificantDigits(3, 1)), + specificResult.CargoVolume > 0 + ? new XElement( + tns + XMLNames.Report_Results_FuelConsumption, + new XAttribute(XMLNames.Report_Results_Unit_Attr, "g/m³-km"), + (fcMass.ConvertToGrammPerKiloMeter() / specificResult.CargoVolume) + .Value().ToMinSignificantDigits(3, 1)) + : null, + specificResult.PassengerCount.HasValue && specificResult.PassengerCount.Value > 0 + ? new XElement( + tns + XMLNames.Report_Results_FuelConsumption, + new XAttribute(XMLNames.Report_Results_Unit_Attr, "g/p-km"), + (fcMass.ConvertToGrammPerKiloMeter() / specificResult.PassengerCount.Value).ToMinSignificantDigits(3, 1)) + : null, + new XElement( + tns + XMLNames.Report_Results_FuelConsumption, + new XAttribute(XMLNames.Report_Results_Unit_Attr, "MJ/km"), + fcEnergy.ConvertToMegaJouleperKilometer().ToMinSignificantDigits(3, 1)), + new XElement( + tns + XMLNames.Report_Results_FuelConsumption, + new XAttribute(XMLNames.Report_Results_Unit_Attr, "MJ/t-km"), + (fcEnergy.ConvertToMegaJouleperKilometer() / specificResult.Payload.ConvertToTon()) + .ToMinSignificantDigits(3, 1)), + specificResult.CargoVolume > 0 + ? new XElement( + tns + XMLNames.Report_Results_FuelConsumption, + new XAttribute(XMLNames.Report_Results_Unit_Attr, "MJ/m³-km"), + (fcEnergy.ConvertToMegaJouleperKilometer() / specificResult.CargoVolume.Value()).ToMinSignificantDigits(3, 1)) + : null, + specificResult.PassengerCount.HasValue && specificResult.PassengerCount.Value > 0 + ? new XElement( + tns + XMLNames.Report_Results_FuelConsumption, + new XAttribute(XMLNames.Report_Results_Unit_Attr, "MJ/p-km"), + (fcEnergy.ConvertToMegaJouleperKilometer() / specificResult.PassengerCount.Value).ToMinSignificantDigits(3, 1)) + : null + ); + if (fuelData.FuelDensity != null) { + fcResult.Add( + new XElement( + tns + XMLNames.Report_Results_FuelConsumption, + new XAttribute(XMLNames.Report_Results_Unit_Attr, "l/100km"), + (fcMass.ConvertToGrammPerKiloMeter() / fuelData.FuelDensity * 100).Value().ToMinSignificantDigits(3, 1)), + new XElement( + tns + XMLNames.Report_Results_FuelConsumption, + new XAttribute(XMLNames.Report_Results_Unit_Attr, "l/t-km"), + (fcMass.ConvertToGrammPerKiloMeter() / fuelData.FuelDensity / + specificResult.Payload.ConvertToTon()).Value().ToMinSignificantDigits(3, 1))); + if (specificResult.CargoVolume > 0) { + fcResult.Add( + new XElement( + tns + XMLNames.Report_Results_FuelConsumption, + new XAttribute(XMLNames.Report_Results_Unit_Attr, "l/m³-km"), + (fcMass.ConvertToGrammPerKiloMeter() / fuelData.FuelDensity / + specificResult.CargoVolume).Value().ToMinSignificantDigits(3, 1))); + } + if (specificResult.PassengerCount.HasValue && specificResult.PassengerCount.Value > 0) { + fcResult.Add( + new XElement( + tns + XMLNames.Report_Results_FuelConsumption, + new XAttribute(XMLNames.Report_Results_Unit_Attr, "l/p-km"), + (fcMass.ConvertToGrammPerKiloMeter() / fuelData.FuelDensity / + specificResult.PassengerCount.Value).Value().ToMinSignificantDigits(3, 1)) + ); + } + } + retVal.Add(fcResult); + } + + //CO2 + retVal.Add( + new XElement( + tns + XMLNames.Report_Results_CO2, new XAttribute(XMLNames.Report_Results_Unit_Attr, "g/km"), + co2Sum.ConvertToGrammPerKiloMeter().ToMinSignificantDigits(3, 1))); + retVal.Add( + new XElement( + tns + XMLNames.Report_Results_CO2, + new XAttribute(XMLNames.Report_Results_Unit_Attr, "g/t-km"), + (co2Sum.ConvertToGrammPerKiloMeter() / specificResult.Payload.ConvertToTon()).ToMinSignificantDigits(3, 1))); + if (specificResult.CargoVolume > 0) + retVal.Add( + new XElement( + tns + XMLNames.Report_Results_CO2, + new XAttribute(XMLNames.Report_Results_Unit_Attr, "g/m³-km"), + (co2Sum.ConvertToGrammPerKiloMeter() / specificResult.CargoVolume).Value().ToMinSignificantDigits(3, 1))); + if (specificResult.PassengerCount.HasValue && specificResult.PassengerCount.Value > 0) { + retVal.Add( + new XElement( + tns + XMLNames.Report_Results_CO2, + new XAttribute(XMLNames.Report_Results_Unit_Attr, "g/p-km"), + (co2Sum.ConvertToGrammPerKiloMeter() / specificResult.PassengerCount.Value).ToMinSignificantDigits(3, 1))); + } + + return retVal.ToArray(); + } + + protected override XElement VehicleComponents(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes) + { + return new XElement( + tns + XMLNames.Vehicle_Components, + new XAttribute(xsi + "type", "ComponentsPrimaryBusType"), + GetEngineDescription(modelData.EngineData, fuelModes), + GetGearboxDescription(modelData.GearboxData), + GetTorqueConverterDescription(modelData.GearboxData.TorqueConverterData), + GetRetarderDescription(modelData.Retarder), + GetAngledriveDescription(modelData.AngledriveData), + GetAxlegearDescription(modelData.AxleGearData), + GetAxleWheelsDescription(modelData.VehicleData), + GetAuxiliariesDescription(modelData) + ); + } + + protected override XElement GetEngineDescription(CombustionEngineData engineData, List<List<FuelData.Entry>> fuelModes) + { + return new XElement( + tns + XMLNames.Component_Engine, + GetCommonDescription(PrimaryVehicle.Components.EngineInputData), + new XElement( + tns + XMLNames.Engine_RatedPower, XMLHelper.ValueAsUnit(engineData.RatedPowerDeclared, XMLNames.Unit_kW)), + new XElement(tns + XMLNames.Engine_IdlingSpeed, XMLHelper.ValueAsUnit(engineData.IdleSpeed, XMLNames.Unit_RPM)), + new XElement( + tns + XMLNames.Engine_RatedSpeed, XMLHelper.ValueAsUnit(engineData.RatedSpeedDeclared, XMLNames.Unit_RPM)), + new XElement( + tns + XMLNames.Engine_Displacement, XMLHelper.ValueAsUnit(engineData.Displacement, XMLNames.Unit_ltr, 1)), + new XElement(tns + XMLNames.Engine_WHRType, engineData.WHRType.ToXMLFormat()), + PrimaryVehicle.Components.EngineInputData.EngineModes.Select( + x => new XElement( + tns + XMLNames.Report_Engine_FuelMode, + x.Fuels.Select(f => new XElement(tns + XMLNames.Engine_FuelType, f.FuelType.ToXMLFormat())))) + ); + } + + protected override XElement GetGearboxDescription(GearboxData gearboxData) + { + return new XElement( + tns + XMLNames.Component_Gearbox, + GetCommonDescription(PrimaryVehicle.Components.GearboxInputData), + new XElement(tns + XMLNames.Gearbox_TransmissionType, gearboxData.Type.ToXMLFormat()), + new XElement(tns + XMLNames.Report_GetGearbox_GearsCount, gearboxData.Gears.Count), + new XElement( + tns + XMLNames.Report_Gearbox_TransmissionRatioFinalGear, + gearboxData.Gears[gearboxData.Gears.Keys.Max()].Ratio.ToXMLFormat(3)) + ); + } + + protected override XElement GetGearboxDescription(GearboxData gearboxData, AxleGearData axlegearData) + { + return new XElement( + tns + XMLNames.Component_Gearbox, + GetCommonDescription(PrimaryVehicle.Components.GearboxInputData), + new XElement(tns + XMLNames.Gearbox_TransmissionType, gearboxData.Type.ToXMLFormat()), + new XElement(tns + XMLNames.Report_GetGearbox_GearsCount, gearboxData.Gears.Count), + new XElement(tns + XMLNames.Gearbox_AxlegearRatio, axlegearData.AxleGear.Ratio.ToXMLFormat(3)), + new XElement( + tns + XMLNames.Report_Gearbox_TransmissionRatioFinalGear, + gearboxData.Gears[gearboxData.Gears.Keys.Max()].Ratio.ToXMLFormat(3)) + ); + } + + + protected override XElement GetTorqueConverterDescription(TorqueConverterData torqueConverterData) + { + if (torqueConverterData == null) { + return null; + } + + return new XElement( + tns + XMLNames.Component_TorqueConverter, + GetCommonDescription(PrimaryVehicle.Components.TorqueConverterInputData)); + } + + protected override XElement GetRetarderDescription(RetarderData retarder) + { + return new XElement( + tns + XMLNames.Component_Retarder, + new XElement(tns + XMLNames.Vehicle_RetarderType, retarder.Type.ToXMLFormat()) + //retarder.Type.IsDedicatedComponent() ? GetCommonDescription(PrimaryVehicle.Components.RetarderInputData) : null + ); + } + + protected override XElement GetAngledriveDescription(AngledriveData angledriveData) + { + if (angledriveData == null) { + return null; + } + + return new XElement( + tns + XMLNames.Component_Angledrive, + GetCommonDescription(PrimaryVehicle.Components.AngledriveInputData), + new XElement(tns + XMLNames.AngleDrive_Ratio, angledriveData.Angledrive.Ratio.ToXMLFormat(3))); + } + + protected override XElement GetAxlegearDescription(AxleGearData axleGearData) + { + return new XElement( + tns + XMLNames.Component_Axlegear, + GetCommonDescription(PrimaryVehicle.Components.AxleGearInputData), + new XElement(tns + XMLNames.Axlegear_LineType, axleGearData.LineType.ToXMLFormat()), + new XElement(tns + XMLNames.Axlegear_Ratio, axleGearData.AxleGear.Ratio.ToXMLFormat(3))); + } + + protected override XElement GetAirDragDescription(AirdragData airdragData) + { + if (airdragData.CertificationMethod == CertificationMethod.StandardValues) { + return new XElement( + tns + XMLNames.Component_AirDrag, + new XElement(tns + XMLNames.Report_Component_CertificationMethod, airdragData.CertificationMethod.ToXMLFormat()), + new XElement(tns + XMLNames.Report_AirDrag_CdxA, airdragData.DeclaredAirdragArea.ToXMLFormat(2)) + ); + } + + return new XElement( + tns + XMLNames.Component_AirDrag, + new XElement(tns + XMLNames.Component_Model, airdragData.ModelName), + new XElement(tns + XMLNames.Report_Component_CertificationMethod, airdragData.CertificationMethod.ToXMLFormat()), + new XElement(tns + XMLNames.Report_Component_CertificationNumber, airdragData.CertificationNumber), + new XElement(tns + XMLNames.DI_Signature_Reference_DigestValue, airdragData.DigestValueInput), + new XElement(tns + XMLNames.Report_AirDrag_CdxA, airdragData.DeclaredAirdragArea.ToXMLFormat(2)) + ); + } + + + protected virtual object[] GetCommonDescription(IEngineDeclarationInputData data) + { + return new object[] { + new XElement(tns + XMLNames.Component_Model, data.Model), + new XElement(tns + XMLNames.Report_Component_CertificationNumber, data.CertificationNumber), + new XElement(tns + XMLNames.DI_Signature_Reference_DigestValue, data.DigestValue.DigestValue) + }; + } + + protected virtual object[] GetCommonDescription(IComponentInputData data) + { + return new object[] { + new XElement(tns + XMLNames.Component_Model, data.Model), + new XElement(tns + XMLNames.Report_Component_CertificationMethod, data.CertificationMethod.ToXMLFormat()), + data.CertificationMethod == CertificationMethod.StandardValues + ? null + : new XElement(tns + XMLNames.Report_Component_CertificationNumber, data.CertificationNumber), + new XElement(tns + XMLNames.DI_Signature_Reference_DigestValue, data.DigestValue.DigestValue) + }; + } + #endregion + + public override void WriteResult(XMLDeclarationReport.ResultEntry resultEntry) + { + throw new NotSupportedException(); + } + + + } +} \ No newline at end of file diff --git a/VectoCore/VectoCore/OutputData/XML/XMLManufacturerReportPrimaryBus.cs b/VectoCore/VectoCore/OutputData/XML/XMLManufacturerReportPrimaryBus.cs index 679a0c0f21..ccd4d9ae6d 100644 --- a/VectoCore/VectoCore/OutputData/XML/XMLManufacturerReportPrimaryBus.cs +++ b/VectoCore/VectoCore/OutputData/XML/XMLManufacturerReportPrimaryBus.cs @@ -1,7 +1,6 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; +using System.Linq; using System.Xml.Linq; -using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Resources; using TUGraz.VectoCore.Models.Declaration; @@ -9,71 +8,6 @@ using TUGraz.VectoCore.Models.Simulation.Data; using TUGraz.VectoCore.Utils; namespace TUGraz.VectoCore.OutputData.XML { - - public class XMLManufacturerReportCompletedBus : AbstractXMLManufacturerReport - { - #region Overrides of AbstractXMLManufacturerReport - - public override void Initialize(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes) - { - VehiclePart.Add( - new XAttribute(xsi + "type", "VehiclePrimaryBusType"), - new XElement(tns + XMLNames.Component_Model, modelData.VehicleData.ModelName), - new XElement(tns + XMLNames.Component_Manufacturer, modelData.VehicleData.Manufacturer), - new XElement(tns + XMLNames.Component_ManufacturerAddress, modelData.VehicleData.ManufacturerAddress), - new XElement(tns + XMLNames.Vehicle_VIN, modelData.VehicleData.VIN), - new XElement( - tns + XMLNames.Vehicle_GrossVehicleMass, - XMLHelper.ValueAsUnit(modelData.VehicleData.GrossVehicleMass, XMLNames.Unit_t, 1)), - new XElement( - tns + XMLNames.Vehicle_CurbMassChassis, XMLHelper.ValueAsUnit(modelData.VehicleData.CurbMass, XMLNames.Unit_kg)), - new XElement(tns + XMLNames.Vehicle_ZeroEmissionVehicle, modelData.VehicleData.ZeroEmissionVehicle), - new XElement(tns + XMLNames.Vehicle_HybridElectricHDV, modelData.VehicleData.HybridElectricHDV), - new XElement(tns + XMLNames.Vehicle_DualFuelVehicle, modelData.VehicleData.DualFuelVehicle), - new XElement(tns + XMLNames.Vehicle_AxleConfiguration, modelData.VehicleData.AxleConfiguration.GetName()), - new XElement(tns + XMLNames.Report_Vehicle_VehicleGroup, modelData.VehicleData.VehicleClass.GetClassNumber()), - - GetADAS(modelData.VehicleData.ADAS), - GetTorqueLimits(modelData.EngineData), - VehicleComponents(modelData, fuelModes) - - ); - - InputDataIntegrity = GetInputDataSignature(modelData); - } - - public virtual void WriteResult(XMLDeclarationReport.ResultEntry genericResult, XMLDeclarationReport.ResultEntry specificResult, IResult primaryResult) - { - foreach (var entry in primaryResult.EnergyConsumption) { - - } - } - - protected override XElement VehicleComponents(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes) - { - return new XElement( - tns + XMLNames.Vehicle_Components, - new XAttribute(xsi + "type", "ComponentsPrimaryBusType"), - GetEngineDescription(modelData.EngineData, fuelModes), - GetGearboxDescription(modelData.GearboxData), - GetTorqueConverterDescription(modelData.GearboxData.TorqueConverterData), - GetRetarderDescription(modelData.Retarder), - GetAngledriveDescription(modelData.AngledriveData), - GetAxlegearDescription(modelData.AxleGearData), - GetAxleWheelsDescription(modelData.VehicleData), - GetAuxiliariesDescription(modelData) - ); - } - - #endregion - - public override void WriteResult(XMLDeclarationReport.ResultEntry resultEntry) - { - throw new NotSupportedException(); - } - - } - public class XMLManufacturerReportPrimaryBus : AbstractXMLManufacturerReport { public override void Initialize(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes) diff --git a/VectoCore/VectoCore/OutputData/XML/XMLPrimaryVehicleReport.cs b/VectoCore/VectoCore/OutputData/XML/XMLPrimaryVehicleReport.cs index 4ab7de225f..4ee33626f1 100644 --- a/VectoCore/VectoCore/OutputData/XML/XMLPrimaryVehicleReport.cs +++ b/VectoCore/VectoCore/OutputData/XML/XMLPrimaryVehicleReport.cs @@ -386,7 +386,7 @@ namespace TUGraz.VectoCore.OutputData.XML tns + XMLNames.Report_Result_Payload, XMLHelper.ValueAsUnit(resultEntry.Payload, XMLNames.Unit_kg, 2)), new XElement( tns + XMLNames.Report_ResultEntry_PassengerCount, - resultEntry.PassengerCount), + resultEntry.PassengerCount?.ToXMLFormat(2) ?? "NaN"), new XElement( tns + XMLNames.Report_Result_FuelMode, resultEntry.FuelData.Count > 1 @@ -425,7 +425,7 @@ namespace TUGraz.VectoCore.OutputData.XML new XAttribute(XMLNames.Report_Results_Unit_Attr, "MJ/km"), (result.FuelConsumptionFinal[fuel.FuelType] * fuel.LowerHeatingValueVecto / result.Distance.ConvertToKiloMeter() / 1e6) - .Value().ToMinSignificantDigits(3, 3))); + .Value().ToMinSignificantDigits(5, 5))); retVal.Add(fcResult); } diff --git a/VectoCore/VectoCore/Resources/Declaration/Buses/ElectricConsumers.csv b/VectoCore/VectoCore/Resources/Declaration/Buses/ElectricConsumers.csv index d6bd7019a7..3e404525c0 100644 --- a/VectoCore/VectoCore/Resources/Declaration/Buses/ElectricConsumers.csv +++ b/VectoCore/VectoCore/Resources/Declaration/Buses/ElectricConsumers.csv @@ -7,7 +7,7 @@ Vehicle basic equipment , Interior lights per meter , 0 Vehicle basic equipment , Interior lights LED bonus , 0 , 0 , 1 , -0.4 , -0.4 , -0.4 , -0.4 , -0.4 , 0.7 , f_IntLight(L_CoC) , per meter vehicle length Customer specific equipm. , External displays , 0 , 0 , 0 , 2.7 , 2.7 , 2.7 , 2.7 , 2.7 , 1.0 , 2.0 , Customer specific equipm. , Internal displays , 0 , 0 , 0 , 1.1 , 1.1 , 1.1 , 1.1 , 1.1 , 1.0 , 1.0 , -Customer specific equipm. , Citybus customer specific value (EBSF) , 0 , 0 , 0 , 9.3 , 9.3 , 9.3 , 0.0 , 0.0 , 1.0 , 1.0 , +Customer specific equipm. , Citybus customer specific value (EBSF) , 0 , 1 , 0 , 9.3 , 9.3 , 9.3 , 0.0 , 0.0 , 1.0 , 1.0 , Lights , Exterior lights (bulb) , 1 , 1 , 0 , 7.4 , 7.4 , 7.4 , 7.4 , 7.4 , 1.0 , 1.0 , Lights , Day running lights LED bonus , 0 , 0 , 1 , -0.7 , -0.7 , -0.7 , -0.7 , -0.7 , 1.0 , 1.0 , Lights , Position lights LED bonus , 0 , 0 , 1 , -1.2 , -1.2 , -1.2 , -1.2 , -1.2 , 1.0 , 1.0 , diff --git a/VectoCore/VectoCore/VectoCore.csproj b/VectoCore/VectoCore/VectoCore.csproj index 232cc3e90b..54bc445712 100644 --- a/VectoCore/VectoCore/VectoCore.csproj +++ b/VectoCore/VectoCore/VectoCore.csproj @@ -424,6 +424,7 @@ <Compile Include="OutputData\XML\XMLCustomerReportCompletedBus.cs" /> <Compile Include="OutputData\XML\XMLDeclarationReportCompletedVehicle.cs" /> <Compile Include="OutputData\XML\XMLDeclarationReportPrimaryVehicle.cs" /> + <Compile Include="OutputData\XML\XMLManufacturerReportCompletedBus.cs" /> <Compile Include="OutputData\XML\XMLManufacturerReportExemptedTruck.cs" /> <Compile Include="OutputData\XML\XMLManufacturerReportPrimaryBus.cs" /> <Compile Include="OutputData\XML\XMLPrimaryVehicleReport.cs" /> diff --git a/VectoCore/VectoCoreTest/Integration/CompletedBus/CompletedBusFactorMethodTest.cs b/VectoCore/VectoCoreTest/Integration/CompletedBus/CompletedBusFactorMethodTest.cs index 3ddc3f06ab..6721219de6 100644 --- a/VectoCore/VectoCoreTest/Integration/CompletedBus/CompletedBusFactorMethodTest.cs +++ b/VectoCore/VectoCoreTest/Integration/CompletedBus/CompletedBusFactorMethodTest.cs @@ -1014,6 +1014,7 @@ namespace TUGraz.VectoCore.Tests.Integration.CompletedBus TestCase(JobFilePrimary42, TestName = "RunPrimaryBusSimulation Group42"), TestCase(@"TestData\Integration\Buses\FactorMethod\SingleBus_41-32b.vecto", TestName = "RunSingleBusSimulation Group 41/32b"), TestCase(@"TestData\Integration\Buses\FactorMethod\SingleBus_42-33b.vecto", TestName = "RunSingleBusSimulation Group 42/33b"), + TestCase(@"TestData\Integration\Buses\FactorMethod\SingleBus_41-32b_AT-P.vecto", TestName = "RunSingleBusSimulation Group 41/32b AT-P"), ] public void TestRunCompletedBusSimulation(string jobName) { diff --git a/VectoCore/VectoCoreTest/TestData/Integration/Buses/FactorMethod/SingleBus_41-32b_AT-P.vecto b/VectoCore/VectoCoreTest/TestData/Integration/Buses/FactorMethod/SingleBus_41-32b_AT-P.vecto new file mode 100644 index 0000000000..274154b0fc --- /dev/null +++ b/VectoCore/VectoCoreTest/TestData/Integration/Buses/FactorMethod/SingleBus_41-32b_AT-P.vecto @@ -0,0 +1,12 @@ +{ + "Header": { + "CreatedBy": "Markus Quaritsch, IVT, Graz University of Technology", + "Date": "2020-02-07T15:06:30.9725917Z", + "AppVersion": "2.2", + "FileVersion": 6 + }, + "Body": { + "PrimaryVehicle": "primary_heavyBus group41_nonSmart_AT-P.xml", + "CompletedVehicle": "vecto_vehicle-completed_heavyBus_41.xml" + } +} \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/TestData/Integration/Buses/FactorMethod/primary_heavyBus group42_SmartPS.RSLT_PIF.xml b/VectoCore/VectoCoreTest/TestData/Integration/Buses/FactorMethod/primary_heavyBus group42_SmartPS.RSLT_PIF.xml index 34acaf8f30..edb50f75f4 100644 --- a/VectoCore/VectoCoreTest/TestData/Integration/Buses/FactorMethod/primary_heavyBus group42_SmartPS.RSLT_PIF.xml +++ b/VectoCore/VectoCoreTest/TestData/Integration/Buses/FactorMethod/primary_heavyBus group42_SmartPS.RSLT_PIF.xml @@ -1,10 +1,10 @@ <?xml version="1.0" encoding="utf-8"?> <pif:VectoOutputPrimaryVehicle xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:tugraz:ivt:VectoAPI:DeclarationOutput:PrimaryVehicleInformation:HeavyBus:v0.1" xmlns:pif="urn:tugraz:ivt:VectoAPI:DeclarationOutput:PrimaryVehicleInformation" xmlns:di="http://www.w3.org/2000/09/xmldsig#" xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:DeclarationOutput:PrimaryVehicleInformation https://webgate.ec.europa.eu/CITnet/svn/VECTO/trunk/Share/XML/XSD//DEV/VectoOutputPrimaryVehicleInformation.xsd"> - <pif:Data xsi:type="PrimaryVehicleHeavyBusDataType" id="PIF-bef5aabfa8f44ed1b8ad"> + <pif:Data xsi:type="PrimaryVehicleHeavyBusDataType" id="PIF-b1f9a6097ed74a6b82de"> <Vehicle xsi:type="VehiclePIFType"> <ManufacturerPrimaryVehicle>Generic Truck Manufacturer</ManufacturerPrimaryVehicle> <ManufacturerAddressPrimaryVehicle>Street, ZIP City</ManufacturerAddressPrimaryVehicle> - <Model>Generic Model</Model> + <Model>Generic Model Primary</Model> <VIN>VEH-1234567890_SmartPS</VIN> <Date>2017-02-15T11:00:00Z</Date> <VehicleCategory>Bus</VehicleCategory> @@ -30,8 +30,8 @@ <Components xsi:type="VehicleComponentsPIFType"> <Engine> <Data xsi:type="EngineDataPIFType"> - <Manufacturer>Generic Engine Manufacturer</Manufacturer> - <Model>Bus 6x2</Model> + <Manufacturer>Generic Engine Manufacturer Primary</Manufacturer> + <Model>Bus 6x2 Engine</Model> <CertificationNumber>e12*0815/8051*2017/05E0000*00</CertificationNumber> <Date>2017-02-15T11:00:00Z</Date> <AppVersion>VectoEngine x.y</AppVersion> @@ -66,8 +66,8 @@ </Engine> <Transmission> <Data xsi:type="TransmissionDataPIFType"> - <Manufacturer>Generic Gearbox Manufacturer</Manufacturer> - <Model>Generic 40t Long Haul Truck Gearbox</Model> + <Manufacturer>Generic Gearbox Manufacturer Primary</Manufacturer> + <Model>Generic 40t Long Haul Truck Gearbox Primary</Model> <MainCertificationMethod>Standard values</MainCertificationMethod> <Date>2017-01-11T11:00:00Z</Date> <AppVersion>3.0.1</AppVersion> @@ -127,7 +127,7 @@ </Transmission> <Axlegear> <Data xsi:type="AxlegearDataPIFType"> - <Manufacturer>Generic Gearbox Manufacturer</Manufacturer> + <Manufacturer>Generic Gearbox Manufacturer Primary</Manufacturer> <Model>Generic 40t Long Haul Truck AxleGear</Model> <CertificationMethod>Standard values</CertificationMethod> <Date>2017-01-11T11:00:00Z</Date> @@ -255,13 +255,13 @@ </Components> </Vehicle> <ResultDataSignature> - <di:Reference URI="#RESULT-a52e27d5dcfa45809a15"> + <di:Reference URI="#RESULT-f61bd2ce3c3341eb8048"> <di:Transforms> <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /> </di:Transforms> <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> - <di:DigestValue>N2rLz4OswTYm2BXlnnIUcNNKumZ3Y5jrcT66OO7E/bU=</di:DigestValue> + <di:DigestValue>heugWRk0GnYtGPjosKwy3WhcNUMVeLC6nTE69GzCYnY=</di:DigestValue> </di:Reference> </ResultDataSignature> <Results> @@ -276,9 +276,9 @@ <FuelMode>single fuel mode</FuelMode> </SimulationParameters> <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">20.576</EnergyConsumption> + <EnergyConsumption unit="MJ/km">20.88156</EnergyConsumption> </Fuel> - <CO2 unit="g/km">1508.3</CO2> + <CO2 unit="g/km">1530.7</CO2> </Result> <Result status="success"> <VehicleGroup>P33SD</VehicleGroup> @@ -286,13 +286,13 @@ <SimulationParameters> <TotalVehicleMass unit="kg">18762.60</TotalVehicleMass> <Payload unit="kg">6762.60</Payload> - <PassengerCount>99.449999999999989</PassengerCount> + <PassengerCount>99.45</PassengerCount> <FuelMode>single fuel mode</FuelMode> </SimulationParameters> <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">24.818</EnergyConsumption> + <EnergyConsumption unit="MJ/km">25.19313</EnergyConsumption> </Fuel> - <CO2 unit="g/km">1819.2</CO2> + <CO2 unit="g/km">1846.7</CO2> </Result> <Result status="success"> <VehicleGroup>P33SD</VehicleGroup> @@ -304,9 +304,9 @@ <FuelMode>single fuel mode</FuelMode> </SimulationParameters> <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">15.985</EnergyConsumption> + <EnergyConsumption unit="MJ/km">16.27847</EnergyConsumption> </Fuel> - <CO2 unit="g/km">1171.7</CO2> + <CO2 unit="g/km">1193.2</CO2> </Result> <Result status="success"> <VehicleGroup>P33SD</VehicleGroup> @@ -314,13 +314,13 @@ <SimulationParameters> <TotalVehicleMass unit="kg">18762.60</TotalVehicleMass> <Payload unit="kg">6762.60</Payload> - <PassengerCount>99.449999999999989</PassengerCount> + <PassengerCount>99.45</PassengerCount> <FuelMode>single fuel mode</FuelMode> </SimulationParameters> <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">19.482</EnergyConsumption> + <EnergyConsumption unit="MJ/km">19.84642</EnergyConsumption> </Fuel> - <CO2 unit="g/km">1428.1</CO2> + <CO2 unit="g/km">1454.8</CO2> </Result> <Result status="success"> <VehicleGroup>P33SD</VehicleGroup> @@ -332,9 +332,9 @@ <FuelMode>single fuel mode</FuelMode> </SimulationParameters> <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">13.271</EnergyConsumption> + <EnergyConsumption unit="MJ/km">13.77284</EnergyConsumption> </Fuel> - <CO2 unit="g/km">972.8</CO2> + <CO2 unit="g/km">1009.6</CO2> </Result> <Result status="success"> <VehicleGroup>P33SD</VehicleGroup> @@ -342,13 +342,13 @@ <SimulationParameters> <TotalVehicleMass unit="kg">18762.60</TotalVehicleMass> <Payload unit="kg">6762.60</Payload> - <PassengerCount>99.449999999999989</PassengerCount> + <PassengerCount>99.45</PassengerCount> <FuelMode>single fuel mode</FuelMode> </SimulationParameters> <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">16.445</EnergyConsumption> + <EnergyConsumption unit="MJ/km">17.16015</EnergyConsumption> </Fuel> - <CO2 unit="g/km">1205.5</CO2> + <CO2 unit="g/km">1257.9</CO2> </Result> <Result status="success"> <VehicleGroup>P33DD</VehicleGroup> @@ -356,13 +356,13 @@ <SimulationParameters> <TotalVehicleMass unit="kg">13578.29</TotalVehicleMass> <Payload unit="kg">1578.29</Payload> - <PassengerCount>23.2101</PassengerCount> + <PassengerCount>23.21</PassengerCount> <FuelMode>single fuel mode</FuelMode> </SimulationParameters> <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">20.921</EnergyConsumption> + <EnergyConsumption unit="MJ/km">21.20835</EnergyConsumption> </Fuel> - <CO2 unit="g/km">1533.6</CO2> + <CO2 unit="g/km">1554.6</CO2> </Result> <Result status="success"> <VehicleGroup>P33DD</VehicleGroup> @@ -370,13 +370,13 @@ <SimulationParameters> <TotalVehicleMass unit="kg">19891.43</TotalVehicleMass> <Payload unit="kg">7891.43</Payload> - <PassengerCount>116.0505</PassengerCount> + <PassengerCount>116.05</PassengerCount> <FuelMode>single fuel mode</FuelMode> </SimulationParameters> <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">25.759</EnergyConsumption> + <EnergyConsumption unit="MJ/km">26.15141</EnergyConsumption> </Fuel> - <CO2 unit="g/km">1888.2</CO2> + <CO2 unit="g/km">1917.0</CO2> </Result> <Result status="success"> <VehicleGroup>P33DD</VehicleGroup> @@ -384,13 +384,13 @@ <SimulationParameters> <TotalVehicleMass unit="kg">13578.29</TotalVehicleMass> <Payload unit="kg">1578.29</Payload> - <PassengerCount>23.2101</PassengerCount> + <PassengerCount>23.21</PassengerCount> <FuelMode>single fuel mode</FuelMode> </SimulationParameters> <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">16.318</EnergyConsumption> + <EnergyConsumption unit="MJ/km">16.61571</EnergyConsumption> </Fuel> - <CO2 unit="g/km">1196.1</CO2> + <CO2 unit="g/km">1218.0</CO2> </Result> <Result status="success"> <VehicleGroup>P33DD</VehicleGroup> @@ -398,13 +398,13 @@ <SimulationParameters> <TotalVehicleMass unit="kg">19891.43</TotalVehicleMass> <Payload unit="kg">7891.43</Payload> - <PassengerCount>116.0505</PassengerCount> + <PassengerCount>116.05</PassengerCount> <FuelMode>single fuel mode</FuelMode> </SimulationParameters> <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">20.349</EnergyConsumption> + <EnergyConsumption unit="MJ/km">20.72374</EnergyConsumption> </Fuel> - <CO2 unit="g/km">1491.6</CO2> + <CO2 unit="g/km">1519.1</CO2> </Result> <Result status="success"> <VehicleGroup>P33DD</VehicleGroup> @@ -412,13 +412,13 @@ <SimulationParameters> <TotalVehicleMass unit="kg">13578.29</TotalVehicleMass> <Payload unit="kg">1578.29</Payload> - <PassengerCount>23.2101</PassengerCount> + <PassengerCount>23.21</PassengerCount> <FuelMode>single fuel mode</FuelMode> </SimulationParameters> <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">13.627</EnergyConsumption> + <EnergyConsumption unit="MJ/km">14.11255</EnergyConsumption> </Fuel> - <CO2 unit="g/km">998.9</CO2> + <CO2 unit="g/km">1034.5</CO2> </Result> <Result status="success"> <VehicleGroup>P33DD</VehicleGroup> @@ -426,13 +426,13 @@ <SimulationParameters> <TotalVehicleMass unit="kg">19891.43</TotalVehicleMass> <Payload unit="kg">7891.43</Payload> - <PassengerCount>116.0505</PassengerCount> + <PassengerCount>116.05</PassengerCount> <FuelMode>single fuel mode</FuelMode> </SimulationParameters> <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">17.218</EnergyConsumption> + <EnergyConsumption unit="MJ/km">18.01528</EnergyConsumption> </Fuel> - <CO2 unit="g/km">1262.1</CO2> + <CO2 unit="g/km">1320.6</CO2> </Result> <Result status="success"> <VehicleGroup>P34SD</VehicleGroup> @@ -440,13 +440,13 @@ <SimulationParameters> <TotalVehicleMass unit="kg">14007.48</TotalVehicleMass> <Payload unit="kg">2007.48</Payload> - <PassengerCount>28.274400000000004</PassengerCount> + <PassengerCount>28.27</PassengerCount> <FuelMode>single fuel mode</FuelMode> </SimulationParameters> <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">11.200</EnergyConsumption> + <EnergyConsumption unit="MJ/km">11.47502</EnergyConsumption> </Fuel> - <CO2 unit="g/km">821.0</CO2> + <CO2 unit="g/km">841.1</CO2> </Result> <Result status="success"> <VehicleGroup>P34SD</VehicleGroup> @@ -454,13 +454,13 @@ <SimulationParameters> <TotalVehicleMass unit="kg">17018.71</TotalVehicleMass> <Payload unit="kg">5018.71</Payload> - <PassengerCount>70.686</PassengerCount> + <PassengerCount>70.69</PassengerCount> <FuelMode>single fuel mode</FuelMode> </SimulationParameters> <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">12.592</EnergyConsumption> + <EnergyConsumption unit="MJ/km">12.95176</EnergyConsumption> </Fuel> - <CO2 unit="g/km">923.0</CO2> + <CO2 unit="g/km">949.4</CO2> </Result> <Result status="success"> <VehicleGroup>P34SD</VehicleGroup> @@ -468,13 +468,13 @@ <SimulationParameters> <TotalVehicleMass unit="kg">13277.49</TotalVehicleMass> <Payload unit="kg">1277.49</Payload> - <PassengerCount>17.9928</PassengerCount> + <PassengerCount>17.99</PassengerCount> <FuelMode>single fuel mode</FuelMode> </SimulationParameters> <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">8.713</EnergyConsumption> + <EnergyConsumption unit="MJ/km">8.74194</EnergyConsumption> </Fuel> - <CO2 unit="g/km">638.7</CO2> + <CO2 unit="g/km">640.8</CO2> </Result> <Result status="success"> <VehicleGroup>P34SD</VehicleGroup> @@ -482,13 +482,13 @@ <SimulationParameters> <TotalVehicleMass unit="kg">15193.72</TotalVehicleMass> <Payload unit="kg">3193.72</Payload> - <PassengerCount>44.982</PassengerCount> + <PassengerCount>44.98</PassengerCount> <FuelMode>single fuel mode</FuelMode> </SimulationParameters> <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">9.175</EnergyConsumption> + <EnergyConsumption unit="MJ/km">9.21875</EnergyConsumption> </Fuel> - <CO2 unit="g/km">672.6</CO2> + <CO2 unit="g/km">675.8</CO2> </Result> <Result status="success"> <VehicleGroup>P34DD</VehicleGroup> @@ -496,13 +496,13 @@ <SimulationParameters> <TotalVehicleMass unit="kg">14780.93</TotalVehicleMass> <Payload unit="kg">2780.93</Payload> - <PassengerCount>39.168000000000006</PassengerCount> + <PassengerCount>39.17</PassengerCount> <FuelMode>single fuel mode</FuelMode> </SimulationParameters> <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">11.720</EnergyConsumption> + <EnergyConsumption unit="MJ/km">12.01195</EnergyConsumption> </Fuel> - <CO2 unit="g/km">859.1</CO2> + <CO2 unit="g/km">880.5</CO2> </Result> <Result status="success"> <VehicleGroup>P34DD</VehicleGroup> @@ -514,9 +514,9 @@ <FuelMode>single fuel mode</FuelMode> </SimulationParameters> <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">13.656</EnergyConsumption> + <EnergyConsumption unit="MJ/km">14.07047</EnergyConsumption> </Fuel> - <CO2 unit="g/km">1001.0</CO2> + <CO2 unit="g/km">1031.4</CO2> </Result> <Result status="success"> <VehicleGroup>P34DD</VehicleGroup> @@ -524,13 +524,13 @@ <SimulationParameters> <TotalVehicleMass unit="kg">13853.95</TotalVehicleMass> <Payload unit="kg">1853.95</Payload> - <PassengerCount>26.112000000000002</PassengerCount> + <PassengerCount>26.11</PassengerCount> <FuelMode>single fuel mode</FuelMode> </SimulationParameters> <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">9.247</EnergyConsumption> + <EnergyConsumption unit="MJ/km">9.27959</EnergyConsumption> </Fuel> - <CO2 unit="g/km">677.8</CO2> + <CO2 unit="g/km">680.2</CO2> </Result> <Result status="success"> <VehicleGroup>P34DD</VehicleGroup> @@ -542,24 +542,24 @@ <FuelMode>single fuel mode</FuelMode> </SimulationParameters> <Fuel type="Diesel CI"> - <EnergyConsumption unit="MJ/km">9.908</EnergyConsumption> + <EnergyConsumption unit="MJ/km">9.95462</EnergyConsumption> </Fuel> - <CO2 unit="g/km">726.3</CO2> + <CO2 unit="g/km">729.7</CO2> </Result> </Results> <ApplicationInformation> <SimulationToolVersion>0.6.0.1884-DEV !!NOT FOR CERTIFICATION!!</SimulationToolVersion> - <Date>2020-04-14T18:12:14.4272157Z</Date> + <Date>2020-04-16T05:38:26.8930564Z</Date> </ApplicationInformation> </pif:Data> <pif:Signature> - <di:Reference URI="#PIF-bef5aabfa8f44ed1b8ad"> + <di:Reference URI="#PIF-b1f9a6097ed74a6b82de"> <di:Transforms> <di:Transform Algorithm="urn:vecto:xml:2017:canonicalization" /> <di:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /> </di:Transforms> <di:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /> - <di:DigestValue>hSBXQqP35eesjLIzipHtocUgivICfUAlZ0QRgf4GrD8=</di:DigestValue> + <di:DigestValue>igtEc9rHHfZ+4xt2XsbxYnD7yW0qLkrVe/UJL/bMZ5U=</di:DigestValue> </di:Reference> </pif:Signature> </pif:VectoOutputPrimaryVehicle> \ No newline at end of file diff --git a/VectoCore/VectoCoreTest/TestData/Integration/Buses/FactorMethod/primary_heavyBus group42_SmartPS.xml b/VectoCore/VectoCoreTest/TestData/Integration/Buses/FactorMethod/primary_heavyBus group42_SmartPS.xml index 48caa0c3f0..6bf1c79c66 100644 --- a/VectoCore/VectoCoreTest/TestData/Integration/Buses/FactorMethod/primary_heavyBus group42_SmartPS.xml +++ b/VectoCore/VectoCoreTest/TestData/Integration/Buses/FactorMethod/primary_heavyBus group42_SmartPS.xml @@ -3,7 +3,7 @@ <v2.0:Vehicle id="VEH-PrimaryBus_SmartPS" xsi:type="PrimaryVehicleDeclarationType" xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:DEV:v2.6"> <Manufacturer>Generic Truck Manufacturer</Manufacturer> <ManufacturerAddress>Street, ZIP City</ManufacturerAddress> - <Model>Generic Model</Model> + <Model>Generic Model Primary</Model> <VIN>VEH-1234567890_SmartPS</VIN> <Date>2017-02-15T11:00:00Z</Date> <VehicleCategory>Bus</VehicleCategory> @@ -29,8 +29,8 @@ <Components xsi:type="PrimaryVehicleComponentsDeclarationType"> <v2.6:Engine xsi:type="v2.0:EngineComponentDeclarationType" xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0"> <v2.0:Data id="ENG-gooZah3D" xsi:type="v2.1:EngineDataDeclarationType" xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.1"> - <Manufacturer>Generic Engine Manufacturer</Manufacturer> - <Model>Bus 6x2</Model> + <Manufacturer>Generic Engine Manufacturer Primary</Manufacturer> + <Model>Bus 6x2 Engine</Model> <CertificationNumber>e12*0815/8051*2017/05E0000*00</CertificationNumber> <Date>2017-02-15T11:00:00Z</Date> <AppVersion>VectoEngine x.y</AppVersion> @@ -194,8 +194,8 @@ </v2.6:Engine> <v2.6:Gearbox xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0" xsi:type="GearboxComponentDeclarationType"> <Data id="gbx-vi2Oak2N" xsi:type="GearboxDataDeclarationType"> - <Manufacturer>Generic Gearbox Manufacturer</Manufacturer> - <Model>Generic 40t Long Haul Truck Gearbox</Model> + <Manufacturer>Generic Gearbox Manufacturer Primary</Manufacturer> + <Model>Generic 40t Long Haul Truck Gearbox Primary</Model> <CertificationNumber>e12*0815/8051*2017/05E0000*00</CertificationNumber> <Date>2017-01-11T11:00:00Z</Date> <AppVersion>3.0.1</AppVersion> @@ -2728,7 +2728,7 @@ <v2.6:Axlegear xmlns="urn:tugraz:ivt:VectoAPI:DeclarationDefinitions:v2.0" xsi:type="AxlegearComponentDeclarationType"> <Data id="AXL-EC3ohnoh" xsi:type="AxlegearDataDeclarationType"> <Manufacturer>Generic Gearbox Manufacturer</Manufacturer> - <Model>Generic 40t Long Haul Truck AxleGear</Model> + <Model>Generic 40t Long Haul Truck AxleGear Primary</Model> <CertificationNumber>e12*0815/8051*2017/05E0000*00</CertificationNumber> <Date>2017-01-11T11:00:00Z</Date> <AppVersion>3.0.1</AppVersion> diff --git a/VectoCore/VectoCoreTest/VectoCoreTest.csproj b/VectoCore/VectoCoreTest/VectoCoreTest.csproj index ab8d082f9f..2ab230b8f3 100644 --- a/VectoCore/VectoCoreTest/VectoCoreTest.csproj +++ b/VectoCore/VectoCoreTest/VectoCoreTest.csproj @@ -307,6 +307,9 @@ <None Include="TestData\Integration\Buses\FactorMethod\CompletedBus_42-33b.vecto"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None> + <None Include="TestData\Integration\Buses\FactorMethod\SingleBus_41-32b_AT-P.vecto"> + <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> + </None> <None Include="TestData\Integration\Buses\FactorMethod\SingleBus_42-33b.vecto"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None> -- GitLab