diff --git a/VectoCommon/VectoCommon/Resources/XMLNames.Designer.cs b/VectoCommon/VectoCommon/Resources/XMLNames.Designer.cs index e77666415872ab32c46c7b7aeedc013904e1eb2a..4c1a2dc36e92f5a00b95c20d5731aa8bec06b850 100644 --- a/VectoCommon/VectoCommon/Resources/XMLNames.Designer.cs +++ b/VectoCommon/VectoCommon/Resources/XMLNames.Designer.cs @@ -2256,6 +2256,15 @@ namespace TUGraz.VectoCommon.Resources { } } + /// <summary> + /// Looks up a localized string similar to EnergyConsumption. + /// </summary> + public static string Report_Result_EnergyConsumption { + get { + return ResourceManager.GetString("Report_Result_EnergyConsumption", resourceCulture); + } + } + /// <summary> /// Looks up a localized string similar to FuelMode. /// </summary> @@ -2463,6 +2472,15 @@ namespace TUGraz.VectoCommon.Resources { } } + /// <summary> + /// Looks up a localized string similar to PassengerCount. + /// </summary> + public static string Report_ResultEntry_PassengerCount { + get { + return ResourceManager.GetString("Report_ResultEntry_PassengerCount", resourceCulture); + } + } + /// <summary> /// Looks up a localized string similar to Payload. /// </summary> diff --git a/VectoCommon/VectoCommon/Resources/XMLNames.resx b/VectoCommon/VectoCommon/Resources/XMLNames.resx index 9f03a15cde555d8470e49e62754add96f2e5451d..eb3dce1849cf7a251342ccab6c1183220fe34e78 100644 --- a/VectoCommon/VectoCommon/Resources/XMLNames.resx +++ b/VectoCommon/VectoCommon/Resources/XMLNames.resx @@ -1362,4 +1362,10 @@ <data name="Vehicle_Articulated" xml:space="preserve"> <value>Articulated</value> </data> + <data name="Report_ResultEntry_PassengerCount" xml:space="preserve"> + <value>PassengerCount</value> + </data> + <data name="Report_Result_EnergyConsumption" xml:space="preserve"> + <value>EnergyConsumption</value> + </data> </root> \ No newline at end of file diff --git a/VectoCore/VectoCore/OutputData/DeclarationReport.cs b/VectoCore/VectoCore/OutputData/DeclarationReport.cs index d300f28745a2b4fa7f5514916006b77ba825ea50..c3f6109b4a90934f196a66238f01fe4040e673d4 100644 --- a/VectoCore/VectoCore/OutputData/DeclarationReport.cs +++ b/VectoCore/VectoCore/OutputData/DeclarationReport.cs @@ -68,10 +68,19 @@ namespace TUGraz.VectoCore.OutputData public interface IResultEntry { + MissionType Mission { get; set; } + + LoadingType LoadingType { get; set; } + + int FuelMode { get; set; } IList<IFuelProperties> FuelData { get; set; } Kilogram Payload { get; set; } Kilogram TotalVehicleWeight { get; set; } CubicMeter CargoVolume { get; set; } + + double PassengerCount { get; set; } + VehicleClass VehicleClass { get; set; } + void SetResultData(VectoRunData runData, IModalDataContainer data, double weightingFactor); } @@ -93,13 +102,15 @@ namespace TUGraz.VectoCore.OutputData /// </summary> //protected readonly Dictionary<MissionType, ResultContainer<T>> Missions = // new Dictionary<MissionType, ResultContainer<T>>(); - protected readonly Dictionary<int, Dictionary<MissionType, ResultContainer<T>>> Missions = - new Dictionary<int, Dictionary<MissionType, ResultContainer<T>>>(); + //protected readonly Dictionary<int, Dictionary<MissionType, ResultContainer<T>>> Missions = + //new Dictionary<int, Dictionary<MissionType, ResultContainer<T>>>(); + + protected readonly List<T> Results = new List<T>(); /// <summary> /// The full load curve. /// </summary> - internal Dictionary<uint, EngineFullLoadCurve> Flc { get; set; } + //internal Dictionary<uint, EngineFullLoadCurve> Flc { get; set; } ///// <summary> ///// The declaration segment from the segment table @@ -123,27 +134,29 @@ namespace TUGraz.VectoCore.OutputData [MethodImpl(MethodImplOptions.Synchronized)] public void PrepareResult(LoadingType loading, Mission mission, int fuelMode, VectoRunData runData) { - if (!Missions.ContainsKey(fuelMode)) { - Missions[fuelMode] = new Dictionary<MissionType, ResultContainer<T>>(); - } - var missions = Missions[fuelMode]; - - var missionType = mission.MissionType; - if (!missions.ContainsKey(missionType)) { - missions[missionType] = new ResultContainer<T>() { - Mission = missionType, - ResultEntry = new Dictionary<LoadingType, T>(), - }; - } - if (missionType != MissionType.ExemptedMission) { - var entry = new T(); - entry.FuelData = runData.EngineData.Fuels.Select(x => x.FuelData).ToList(); - entry.Payload = runData.VehicleData.Loading; - entry.TotalVehicleWeight = runData.VehicleData.TotalVehicleMass; - entry.CargoVolume = runData.VehicleData.CargoVolume; - - missions[mission.MissionType].ResultEntry[loading] = entry; - } + //if (!Missions.ContainsKey(fuelMode)) { + // Missions[fuelMode] = new Dictionary<MissionType, ResultContainer<T>>(); + //} + //var missions = Missions[fuelMode]; + + //var missionType = mission.MissionType; + //if (!missions.ContainsKey(missionType)) { + // missions[missionType] = new ResultContainer<T>() { + // Mission = missionType, + // ResultEntry = new Dictionary<LoadingType, T>(), + // }; + //} + //if (missionType != MissionType.ExemptedMission) { + // var entry = new T(); + // entry.FuelData = runData.EngineData.Fuels.Select(x => x.FuelData).ToList(); + // entry.Payload = runData.VehicleData.Loading; + // entry.TotalVehicleWeight = runData.VehicleData.TotalVehicleMass; + // entry.CargoVolume = runData.VehicleData.CargoVolume; + // // subtract driver! + // entry.PassengerCount = runData.BusAuxiliaries?.SSMInputs.NumberOfPassengers ?? 0 - 1; + + // missions[mission.MissionType].ResultEntry[loading] = entry; + //} _resultCount++; } @@ -154,39 +167,63 @@ namespace TUGraz.VectoCore.OutputData _resultCount--; if (_resultCount == 0) { DoWriteReport(); - Flc = null; + //Flc = null; } } public void AddResult(LoadingType loadingType, Mission mission, int fuelMode, VectoRunData runData, IModalDataContainer modData) { - if (!Missions.ContainsKey(fuelMode)) { - throw new VectoException("Unknown fuel mode {0} for generating declaration report", fuelMode); - } - if (!Missions[fuelMode].ContainsKey(mission.MissionType)) { - throw new VectoException("Unknown mission type {0} for generating declaration report", mission.MissionType); - } - if (mission.MissionType != MissionType.ExemptedMission && !Missions[fuelMode][mission.MissionType].ResultEntry.ContainsKey(loadingType)) { - throw new VectoException("Unknown loading type {0} for mission {1}", loadingType, mission.MissionType); - } - + //if (!Missions.ContainsKey(fuelMode)) { + // throw new VectoException("Unknown fuel mode {0} for generating declaration report", fuelMode); + //} + //if (!Missions[fuelMode].ContainsKey(mission.MissionType)) { + // throw new VectoException("Unknown mission type {0} for generating declaration report", mission.MissionType); + //} + //if (mission.MissionType != MissionType.ExemptedMission && !Missions[fuelMode][mission.MissionType].ResultEntry.ContainsKey(loadingType)) { + // throw new VectoException("Unknown loading type {0} for mission {1}", loadingType, mission.MissionType); + //} + + + //if (mission.MissionType != MissionType.ExemptedMission) { + // DoAddResult(Missions[fuelMode][mission.MissionType].ResultEntry[loadingType], runData, modData); + //} if (mission.MissionType != MissionType.ExemptedMission) { - DoAddResult(Missions[fuelMode][mission.MissionType].ResultEntry[loadingType], runData, modData); + var entry = new T(); + entry.Mission = mission.MissionType; + entry.LoadingType = loadingType; + entry.FuelMode = fuelMode; + entry.FuelData = runData.EngineData.Fuels.Select(x => x.FuelData).ToList(); + entry.Payload = runData.VehicleData.Loading; + entry.TotalVehicleWeight = runData.VehicleData.TotalVehicleMass; + entry.CargoVolume = runData.VehicleData.CargoVolume; + entry.VehicleClass = runData.VehicleData.VehicleClass; + // subtract driver! + entry.PassengerCount = (runData.BusAuxiliaries?.SSMInputs.NumberOfPassengers ?? 0) - 1; + Results.Add(entry); + DoStoreResult(entry, runData, modData); } WriteResults(); } + protected IEnumerable<T> OrderedResults + { + get { + return Results.OrderBy(x => x.VehicleClass).ThenBy(x => x.FuelMode).ThenBy(x => x.Mission) + .ThenBy(x => x.LoadingType); + } + } + /// <summary> - /// Adds the result of one run for the specific mission and loading. If all runs finished (given by the resultCount) the report will be written. + /// Adds the result of one run for the specific mission and loading. /// </summary> /// <param name="entry"></param> /// <param name="runData"></param> /// <param name="modData">The mod data.</param> - [MethodImpl(MethodImplOptions.Synchronized)] - protected abstract void DoAddResult(T entry, VectoRunData runData, IModalDataContainer modData); + //[MethodImpl(MethodImplOptions.Synchronized)] + protected abstract void DoStoreResult(T entry, VectoRunData runData, IModalDataContainer modData); protected internal abstract void DoWriteReport(); diff --git a/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs b/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs index 6285f098aa1af3262da918968a9ad5efa74f431d..ee350ca28cbf380e062adaaac822878f7e1abd1e 100644 --- a/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs +++ b/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs @@ -384,8 +384,6 @@ namespace TUGraz.VectoCore.OutputData var kilogramCO2PerMeter = 0.SI<KilogramPerMeter>(); - // TODO: Correct for fuel-fired heater - var engineWasteheatSum = modData.FuelData.Aggregate( 0.SI<Joule>(), (current, fuel) => current + modData.TotalFuelConsumption(ModalResultField.FCFinal, fuel) * diff --git a/VectoCore/VectoCore/OutputData/XML/AbstractXMLManufacturerReport.cs b/VectoCore/VectoCore/OutputData/XML/AbstractXMLManufacturerReport.cs index e610e3c1489fdbdae15e4224684da90f0b205c0b..c3e1fce689ba8daed9f43f079dcaa430f05d6e2e 100644 --- a/VectoCore/VectoCore/OutputData/XML/AbstractXMLManufacturerReport.cs +++ b/VectoCore/VectoCore/OutputData/XML/AbstractXMLManufacturerReport.cs @@ -24,7 +24,7 @@ namespace TUGraz.VectoCore.OutputData.XML { void Initialize(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes); XDocument Report { get; } - void WriteResult(DeclarationReport<XMLDeclarationReport.ResultEntry>.ResultContainer<XMLDeclarationReport.ResultEntry> resultValue); + void WriteResult(XMLDeclarationReport.ResultEntry resultValue); void GenerateReport(); } @@ -107,41 +107,39 @@ namespace TUGraz.VectoCore.OutputData.XML } - public virtual void WriteResult( - DeclarationReport<XMLDeclarationReport.ResultEntry>.ResultContainer<XMLDeclarationReport.ResultEntry> entry) + public virtual void WriteResult(XMLDeclarationReport.ResultEntry resultEntry) { - foreach (var resultEntry in entry.ResultEntry) { - _allSuccess &= resultEntry.Value.Status == VectoRun.Status.Success; + _allSuccess &= resultEntry.Status == VectoRun.Status.Success; Results.Add( new XElement( tns + XMLNames.Report_Result_Result, new XAttribute( XMLNames.Report_Result_Status_Attr, - resultEntry.Value.Status == VectoRun.Status.Success ? "success" : "error"), - new XElement(tns + XMLNames.Report_Result_Mission, entry.Mission.ToXMLFormat()), + resultEntry.Status == VectoRun.Status.Success ? "success" : "error"), + new XElement(tns + XMLNames.Report_Result_Mission, resultEntry.Mission.ToXMLFormat()), GetResults(resultEntry))); - } + } - protected virtual object[] GetResults(KeyValuePair<LoadingType, XMLDeclarationReport.ResultEntry> resultEntry) + protected virtual object[] GetResults( XMLDeclarationReport.ResultEntry resultEntry) { - switch (resultEntry.Value.Status) { + switch (resultEntry.Status) { case VectoRun.Status.Pending: case VectoRun.Status.Running: return new object[] { - GetSimulationParameters(resultEntry.Value), + GetSimulationParameters(resultEntry), new XElement( tns + XMLNames.Report_Results_Error, - string.Format("Simulation not finished! Status: {0}", resultEntry.Value.Status)), + string.Format("Simulation not finished! Status: {0}", resultEntry.Status)), new XElement(tns + XMLNames.Report_Results_ErrorDetails, ""), }; // should not happen! - case VectoRun.Status.Success: return GetSuccessResultEntry(resultEntry.Value); + case VectoRun.Status.Success: return GetSuccessResultEntry(resultEntry); case VectoRun.Status.Canceled: case VectoRun.Status.Aborted: return new object[] { - GetSimulationParameters(resultEntry.Value), - new XElement(tns + XMLNames.Report_Results_Error, resultEntry.Value.Error), - new XElement(tns + XMLNames.Report_Results_ErrorDetails, resultEntry.Value.StackTrace), + GetSimulationParameters(resultEntry), + new XElement(tns + XMLNames.Report_Results_Error, resultEntry.Error), + new XElement(tns + XMLNames.Report_Results_ErrorDetails, resultEntry.StackTrace), }; default: throw new ArgumentOutOfRangeException(); } @@ -209,6 +207,7 @@ namespace TUGraz.VectoCore.OutputData.XML tns + XMLNames.Report_ResultEntry_TotalVehicleMass, XMLHelper.ValueAsUnit(result.TotalVehicleWeight, XMLNames.Unit_kg)), new XElement(tns + XMLNames.Report_ResultEntry_Payload, XMLHelper.ValueAsUnit(result.Payload, XMLNames.Unit_kg)), + result.PassengerCount > 0 ? new XElement(tns + "PassengerCount", result.PassengerCount.ToMinSignificantDigits(3,1)) : null, new XElement( tns + XMLNames.Report_Result_FuelMode, result.FuelData.Count > 1 ? XMLNames.Report_Result_FuelMode_Val_Dual : XMLNames.Report_Result_FuelMode_Val_Single) diff --git a/VectoCore/VectoCore/OutputData/XML/XMLCustomerReport.cs b/VectoCore/VectoCore/OutputData/XML/XMLCustomerReport.cs index 8b0c306e89310b9dc9bd106d7498ebf09bd69ea5..4973b3f4e9664241521fefbd0069f21672864bf6 100644 --- a/VectoCore/VectoCore/OutputData/XML/XMLCustomerReport.cs +++ b/VectoCore/VectoCore/OutputData/XML/XMLCustomerReport.cs @@ -162,35 +162,34 @@ namespace TUGraz.VectoCore.OutputData.XML ); } - public void WriteResult( - DeclarationReport<XMLDeclarationReport.ResultEntry>.ResultContainer<XMLDeclarationReport.ResultEntry> entry) + public void WriteResult(XMLDeclarationReport.ResultEntry resultEntry) { - foreach (var resultEntry in entry.ResultEntry) { - _allSuccess &= resultEntry.Value.Status == VectoRun.Status.Success; - if (resultEntry.Value.Status == VectoRun.Status.Success) { - _weightedPayload += resultEntry.Value.Payload * resultEntry.Value.WeightingFactor; - _weightedCo2 += resultEntry.Value.CO2Total / resultEntry.Value.Distance * resultEntry.Value.WeightingFactor; + //foreach (var resultEntry in entry.ResultEntry) { + _allSuccess &= resultEntry.Status == VectoRun.Status.Success; + if (resultEntry.Status == VectoRun.Status.Success) { + _weightedPayload += resultEntry.Payload * resultEntry.WeightingFactor; + _weightedCo2 += resultEntry.CO2Total / resultEntry.Distance * resultEntry.WeightingFactor; } Results.Add(new XElement(tns + XMLNames.Report_Result_Result, new XAttribute(XMLNames.Report_Result_Status_Attr, - resultEntry.Value.Status == VectoRun.Status.Success ? "success" : "error"), - new XElement(tns + XMLNames.Report_Result_Mission, entry.Mission.ToXMLFormat()), + resultEntry.Status == VectoRun.Status.Success ? "success" : "error"), + new XElement(tns + XMLNames.Report_Result_Mission, resultEntry.Mission.ToXMLFormat()), GetResults(resultEntry))); - } + //} } - private object[] GetResults(KeyValuePair<LoadingType, XMLDeclarationReport.ResultEntry> resultEntry) + private object[] GetResults(XMLDeclarationReport.ResultEntry resultEntry) { - switch (resultEntry.Value.Status) { + switch (resultEntry.Status) { case VectoRun.Status.Pending: case VectoRun.Status.Running: return null; // should not happen! case VectoRun.Status.Success: - return GetSuccessResultEntry(resultEntry.Value); + return GetSuccessResultEntry(resultEntry); case VectoRun.Status.Canceled: case VectoRun.Status.Aborted: return new object[] { - new XElement(tns + "Error", resultEntry.Value.Error) + new XElement(tns + "Error", resultEntry.Error) }; default: throw new ArgumentOutOfRangeException(); diff --git a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs index 4850ec9a210ef3ccec8e1a4e7bfeeb770e04e72d..43ccbc3dbe6994407a2c5320ba87f62957213949 100644 --- a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs +++ b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReport.cs @@ -75,6 +75,9 @@ namespace TUGraz.VectoCore.OutputData.XML Distance = double.MaxValue.SI<Meter>(); } + public MissionType Mission { get; set; } + public LoadingType LoadingType { get; set; } + public int FuelMode { get; set; } public IList<IFuelProperties> FuelData { get; set; } @@ -84,6 +87,9 @@ namespace TUGraz.VectoCore.OutputData.XML public CubicMeter CargoVolume { get; set; } + public double PassengerCount { get; set; } + public VehicleClass VehicleClass { get; set; } + public MeterPerSecond AverageSpeed { get; private set; } public MeterPerSecond AverageDrivingSpeed { get; private set; } @@ -154,26 +160,40 @@ namespace TUGraz.VectoCore.OutputData.XML Distance = data.Distance; var workESS = data.WorkAuxiliariesDuringEngineStop() + data.WorkEngineStart(); - var workWHRel = data.TimeIntegral<WattSecond>(ModalResultField.P_WHR_el_corr); - var workWHRelMech = -workWHRel / DeclarationData.AlternaterEfficiency; - - var workWHRmech = -data.TimeIntegral<WattSecond>(ModalResultField.P_WHR_mech_corr); + var workWHR = WorkWHRCorrection(data); - var workWHR = workWHRelMech + workWHRmech; + var workBusAuxCorr = 0.SI<WattSecond>(); + if (runData.BusAuxiliaries != null) { + workBusAuxCorr = WorkBusAuxCorrection(runData, data); + } + FuelConsumptionFinal = new Dictionary<FuelType, Kilogram>(); CO2Total = 0.SI<Kilogram>(); EnergyConsumptionTotal = 0.SI<Joule>(); + var engineWasteheatSum = data.FuelData.Aggregate( + 0.SI<Joule>(), + (current, fuel) => current + data.TotalFuelConsumption(ModalResultField.FCFinal, fuel) * + fuel.LowerHeatingValueVecto); + + var auxHeaterDemand = data.AuxHeaterDemandCalc(data.Duration, engineWasteheatSum); + + var firstFuel = true; foreach (var entry in data.FuelData) { var col = data.GetColumnName(entry, ModalResultField.FCFinal); var fcSum = data.TimeIntegral<Kilogram>(col); var correction = 0.SI<KilogramPerWattSecond>(); - if (!(workWHR + workESS).IsEqual(0)) { + if (!(workWHR + workESS + workBusAuxCorr).IsEqual(0)) { correction = data.VehicleLineCorrectionFactor(entry); } - var fcTotalcorr = fcSum + correction * (workESS + workWHR); + var fcAuxHtr = 0.SI<Kilogram>(); + if (firstFuel) { + firstFuel = false; + fcAuxHtr = auxHeaterDemand / entry.LowerHeatingValueVecto; + } + var fcTotalcorr = fcSum + correction * (workESS + workWHR + workBusAuxCorr) + fcAuxHtr; FuelConsumptionFinal[entry.FuelType] = fcTotalcorr; CO2Total += fcTotalcorr * entry.CO2PerFuelWeight; EnergyConsumptionTotal += fcTotalcorr * entry.LowerHeatingValueVecto; @@ -192,6 +212,37 @@ namespace TUGraz.VectoCore.OutputData.XML WeightingFactor = weightingFactor; } + + private static WattSecond WorkWHRCorrection(IModalDataContainer data) + { + var workWHRel = data.TimeIntegral<WattSecond>(ModalResultField.P_WHR_el_corr); + var workWHRelMech = -workWHRel / DeclarationData.AlternaterEfficiency; + + var workWHRmech = -data.TimeIntegral<WattSecond>(ModalResultField.P_WHR_mech_corr); + + var workWHR = workWHRelMech + workWHRmech; + return workWHR; + } + + private static WattSecond WorkBusAuxCorrection(VectoRunData runData, IModalDataContainer data) + { + var workBusAuxPSCompOff = data.EnergyPneumaticCompressorPowerOff(); + var workBusAuxPSCompOn = data.EnergyPneumaticCompressorOn(); + var airBusAuxPSON = data.AirGenerated(); + var deltaAir = data.AirConsumed() - data.AirGenerated(); + + var kAir = (workBusAuxPSCompOn - workBusAuxPSCompOff) / (airBusAuxPSON - 0.SI<NormLiter>()); + var workBusAuxPSCorr = (kAir * deltaAir).Cast<WattSecond>(); + + var workBusAuxES = data.EnergyBusAuxESConsumed() - data.EnergyBusAuxESGenerated(); + var workBatterySOC = data.DeltaSOCBusAuxBattery() * + runData.BusAuxiliaries.ElectricalUserInputsConfig.ElectricStorageCapacity; + + var workBusAuxESMech = (workBusAuxES + workBatterySOC) / + runData.BusAuxiliaries.ElectricalUserInputsConfig.AlternatorMap.GetEfficiency(0.RPMtoRad(), 0.SI<Ampere>()) / + runData.BusAuxiliaries.ElectricalUserInputsConfig.AlternatorGearEfficiency; + return workBusAuxPSCorr + workBusAuxESMech; + } } @@ -217,7 +268,7 @@ namespace TUGraz.VectoCore.OutputData.XML } - protected override void DoAddResult(ResultEntry entry, VectoRunData runData, IModalDataContainer modData) + protected override void DoStoreResult(ResultEntry entry, VectoRunData runData, IModalDataContainer modData) { var factor = _weightingFactors[Tuple.Create(runData.Mission.MissionType, runData.Loading)]; entry.SetResultData(runData, modData, factor); @@ -225,13 +276,21 @@ namespace TUGraz.VectoCore.OutputData.XML protected internal override void DoWriteReport() { - foreach (var fuelMode in Missions.OrderBy(f => f.Key)) { - foreach (var result in fuelMode.Value.OrderBy(m => m.Key)) { - _manufacturerReport.WriteResult(result.Value); - _customerReport.WriteResult(result.Value); - } + foreach (var result in OrderedResults) { + _manufacturerReport.WriteResult(result); + _customerReport.WriteResult(result); + if (_primaryReport != null) { + _primaryReport.WriteResult(result); + } } + //foreach (var fuelMode in Missions.OrderBy(f => f.Key)) { + // foreach (var result in fuelMode.Value.OrderBy(m => m.Key)) { + // _manufacturerReport.WriteResult(result.Value); + // _customerReport.WriteResult(result.Value); + // } + //} + _manufacturerReport.GenerateReport(); var fullReportHash = GetSignature(_manufacturerReport.Report); _customerReport.GenerateReport(fullReportHash); @@ -240,7 +299,7 @@ namespace TUGraz.VectoCore.OutputData.XML if (Writer != null) { Writer.WriteReport(ReportType.DeclarationReportCustomerXML, _customerReport.Report); Writer.WriteReport(ReportType.DeclarationReportManufacturerXML, _manufacturerReport.Report); - Writer.WriteReport(ReportType.DeclarationReportMonitoringXML, _monitoringReport.Report); + //Writer.WriteReport(ReportType.DeclarationReportMonitoringXML, _monitoringReport.Report); if (_primaryReport != null) { Writer.WriteReport(ReportType.DeclarationReportPrimaryVehicleXML, _primaryReport.Report); } @@ -347,8 +406,14 @@ namespace TUGraz.VectoCore.OutputData.XML new XAttribute(XMLNames.Report_Results_Unit_Attr, "g/m³-km"), (result.FuelConsumptionFinal[fuel.FuelType].ConvertToGramm() / result.Distance.ConvertToKiloMeter() / result.CargoVolume) - .Value - ().ToMinSignificantDigits(3, 1)) + .Value().ToMinSignificantDigits(3, 1)) + : null, + result.PassengerCount > 0 + ? new XElement( + tns + XMLNames.Report_Results_FuelConsumption, + new XAttribute(XMLNames.Report_Results_Unit_Attr, "g/p-km"), + (result.FuelConsumptionFinal[fuel.FuelType].ConvertToGramm() / result.Distance.ConvertToKiloMeter() / + result.PassengerCount).ToMinSignificantDigits(3, 1)) : null ); @@ -376,6 +441,15 @@ namespace TUGraz.VectoCore.OutputData.XML (result.FuelConsumptionFinal[fuel.FuelType] * fuel.LowerHeatingValueVecto / result.Distance.ConvertToKiloMeter() / result.CargoVolume / 1e6).Value().ToMinSignificantDigits(3, 1))); } + if (result.PassengerCount > 0) { + fcResult.Add( + new XElement( + tns + XMLNames.Report_Results_FuelConsumption, + new XAttribute(XMLNames.Report_Results_Unit_Attr, "MJ/p-km"), + (result.FuelConsumptionFinal[fuel.FuelType] * fuel.LowerHeatingValueVecto / + result.Distance.ConvertToKiloMeter() / result.PassengerCount / 1e6).Value().ToMinSignificantDigits(3, 1)) + ); + } } if (fuel.FuelDensity != null) { fcResult.Add( @@ -400,6 +474,15 @@ namespace TUGraz.VectoCore.OutputData.XML result.Distance.ConvertToKiloMeter() / result.CargoVolume).Value().ToMinSignificantDigits(3, 1))); } + if (result.PassengerCount > 0) { + fcResult.Add( + new XElement( + tns + XMLNames.Report_Results_FuelConsumption, + new XAttribute(XMLNames.Report_Results_Unit_Attr, "l/p-km"), + (result.FuelConsumptionFinal[fuel.FuelType].ConvertToGramm() / fuel.FuelDensity / + result.Distance.ConvertToKiloMeter() / result.PassengerCount).Value().ToMinSignificantDigits(3, 1)) + ); + } } retVal.Add(fcResult); } diff --git a/VectoCore/VectoCore/OutputData/XML/XMLManufacturerReport.cs b/VectoCore/VectoCore/OutputData/XML/XMLManufacturerReport.cs index b1e4a42607e22d3d7f5aa91bfdef27f166db1431..cf93db46a51d80c07112de72f4ceaf1bf0d03c52 100644 --- a/VectoCore/VectoCore/OutputData/XML/XMLManufacturerReport.cs +++ b/VectoCore/VectoCore/OutputData/XML/XMLManufacturerReport.cs @@ -29,25 +29,14 @@ * Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology */ -using System; using System.Collections.Generic; -using System.IO; using System.Linq; -using System.Xml; using System.Xml.Linq; -using TUGraz.IVT.VectoXML.Writer; -using TUGraz.VectoCommon.BusAuxiliaries; -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; -using TUGraz.VectoHashing; namespace TUGraz.VectoCore.OutputData.XML { diff --git a/VectoCore/VectoCore/OutputData/XML/XMLPrimaryVehicleReport.cs b/VectoCore/VectoCore/OutputData/XML/XMLPrimaryVehicleReport.cs index 795753f237cec86300f32b8e48472777060ce413..0c36194bf370d4b7c261925d76db5a21514a208e 100644 --- a/VectoCore/VectoCore/OutputData/XML/XMLPrimaryVehicleReport.cs +++ b/VectoCore/VectoCore/OutputData/XML/XMLPrimaryVehicleReport.cs @@ -13,6 +13,7 @@ using TUGraz.VectoCommon.Utils; using TUGraz.VectoCore.InputData.Reader.ComponentData; 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.Utils; using TUGraz.VectoHashing; @@ -33,6 +34,9 @@ namespace TUGraz.VectoCore.OutputData.XML protected XElement Results; + private bool _allSuccess = true; + + public XMLPrimaryVehicleReport() { VehiclePart = new XElement(tns + XMLNames.Component_Vehicle); @@ -47,6 +51,7 @@ namespace TUGraz.VectoCore.OutputData.XML var xsi = XNamespace.Get("http://www.w3.org/2001/XMLSchema-instance"); var retVal = new XDocument(); var results = new XElement(Results); + results.AddFirst(new XElement(tns + XMLNames.Report_Result_Status, _allSuccess ? "success" : "error")); //retVal.Add(new XProcessingInstruction("xml-stylesheet", "href=\"https://webgate.ec.europa.eu/CITnet/svn/VECTO/trunk/Share/XML/CSS/VectoReports.css\"")); retVal.Add( @@ -56,12 +61,13 @@ namespace TUGraz.VectoCore.OutputData.XML //new XAttribute("schemaVersion", CURRENT_SCHEMA_VERSION), new XAttribute(XNamespace.Xmlns + "xsi", xsi.NamespaceName), new XAttribute("xmlns", tns), + //new XAttribute(XNamespace.Xmlns + "pbus", tns), new XAttribute(XNamespace.Xmlns + "pif", RootNS), new XAttribute(XNamespace.Xmlns + "di", di), new XAttribute( xsi + "schemaLocation", - string.Format("{0} {1}VectoOutputPrimaryVehicleInformation.xsd", tns, AbstractXMLWriter.SchemaLocationBaseUrl)), + string.Format("{0} {1}/DEV/VectoOutputPrimaryVehicleInformation.xsd", RootNS, AbstractXMLWriter.SchemaLocationBaseUrl)), new XElement( RootNS + XMLNames.Report_DataWrap, new XAttribute(xsi + "type", "PrimaryVehicleHeavyBusDataType"), @@ -173,11 +179,13 @@ namespace TUGraz.VectoCore.OutputData.XML protected virtual XElement GetAxleWheelsDescription(VectoRunData modeldData) { var axles = modeldData.VehicleData.InputData.Components.AxleWheels.XMLSource; - + var ns = XNamespace.Get(axles.SchemaInfo.SchemaType.QualifiedName.Namespace); + //const string adasPrefix = "axl"; return new XElement( tns + XMLNames.Component_AxleWheels, + //new XAttribute(XNamespace.Xmlns + adasPrefix, ns.NamespaceName), new XAttribute(XNamespace.Xmlns + "pbus", tns), new XAttribute("xmlns", ns.NamespaceName), @@ -187,7 +195,7 @@ namespace TUGraz.VectoCore.OutputData.XML ); } - + private XElement GetAuxiliariesDescription(VectoRunData modelData) { @@ -195,17 +203,21 @@ namespace TUGraz.VectoCore.OutputData.XML var busAuxXML = busAuxiliaries.InputData.XMLSource; var ns = XNamespace.Get(busAuxXML.FirstChild.SchemaInfo.SchemaType.QualifiedName.Namespace); const string auxPrefix = "aux"; - return new XElement(tns + XMLNames.Component_Auxiliaries, - new XElement(tns + XMLNames.ComponentDataWrapper, - new XAttribute(XNamespace.Xmlns + auxPrefix, ns.NamespaceName), - new XAttribute(xsi + "type", string.Format("{0}:{1}", auxPrefix, busAuxXML.FirstChild.SchemaInfo.SchemaType.QualifiedName.Name)), - XElement.Parse(busAuxXML.InnerXml).Elements() - )); + return new XElement( + tns + XMLNames.Component_Auxiliaries, + new XElement( + tns + XMLNames.ComponentDataWrapper, + new XAttribute(XNamespace.Xmlns + auxPrefix, ns.NamespaceName), + new XAttribute( + xsi + "type", string.Format("{0}:{1}", auxPrefix, busAuxXML.FirstChild.SchemaInfo.SchemaType.QualifiedName.Name)), + XElement.Parse(busAuxXML.InnerXml).Elements() + )); } private XElement GetAxlegearDescription(AxleGearData axleGearData) { - return WrapComponent(XMLNames.Component_Axlegear, "AxlegearDataPIFType", + return WrapComponent( + XMLNames.Component_Axlegear, "AxlegearDataPIFType", GetCommonDescription(axleGearData), new XElement(tns + XMLNames.Component_AppVersion, axleGearData.InputData.AppVersion), new XElement(tns + XMLNames.Axlegear_LineType, axleGearData.LineType.ToXMLFormat()), @@ -231,14 +243,21 @@ namespace TUGraz.VectoCore.OutputData.XML "Transmission", "TransmissionDataPIFType", GetCommonDescription(gearboxData), new XElement(tns + XMLNames.Gearbox_TransmissionType, gearboxData.Type.ToXMLFormat()), - new XElement(tns + XMLNames.Gearbox_Gears, + new XElement( + tns + XMLNames.Gearbox_Gears, new XAttribute(xsi + "type", "TransmissionGearsPIFType"), - gearboxData.Gears.Select(x => - new XElement(tns + XMLNames.Gearbox_Gears_Gear, - new XAttribute(XMLNames.Gearbox_Gear_GearNumber_Attr, x.Key), - new XElement(tns + XMLNames.Gearbox_Gear_Ratio, x.Value.Ratio.ToXMLFormat(3)), - x.Value.MaxTorque != null ? new XElement(tns + XMLNames.Gearbox_Gears_MaxTorque, x.Value.MaxTorque.ToXMLFormat(0)) : null, - x.Value.MaxSpeed != null ? new XElement(tns + XMLNames.Gearbox_Gear_MaxSpeed, x.Value.MaxSpeed.ToXMLFormat(0)) : null))) + gearboxData.Gears.Select( + x => + new XElement( + tns + XMLNames.Gearbox_Gears_Gear, + new XAttribute(XMLNames.Gearbox_Gear_GearNumber_Attr, x.Key), + new XElement(tns + XMLNames.Gearbox_Gear_Ratio, x.Value.Ratio.ToXMLFormat(3)), + x.Value.MaxTorque != null + ? new XElement(tns + XMLNames.Gearbox_Gears_MaxTorque, x.Value.MaxTorque.ToXMLFormat(0)) + : null, + x.Value.MaxSpeed != null + ? new XElement(tns + XMLNames.Gearbox_Gear_MaxSpeed, x.Value.MaxSpeed.ToXMLFormat(0)) + : null))) ); return retVal; @@ -341,5 +360,82 @@ namespace TUGraz.VectoCore.OutputData.XML new XElement(tns + XMLNames.Component_Date, XmlConvert.ToString(data.Date, XmlDateTimeSerializationMode.Utc)), }; } + + public void WriteResult(XMLDeclarationReport.ResultEntry resultEntry) + { + _allSuccess &= resultEntry.Status == VectoRun.Status.Success; + + //if (resultEntry.Status == VectoRun.Status.Success) { + // _weightedPayload += resultEntry.Payload * resultEntry.WeightingFactor; + // _weightedCo2 += resultEntry.CO2Total / resultEntry.Distance * resultEntry.WeightingFactor; + //} + Results.Add( + new XElement( + tns + XMLNames.Report_Result_Result, + new XAttribute( + XMLNames.Report_Result_Status_Attr, + resultEntry.Status == VectoRun.Status.Success ? "success" : "error"), + new XElement(tns + XMLNames.Report_Vehicle_VehicleGroup, resultEntry.VehicleClass.GetClassNumber()), + new XElement(tns + XMLNames.Report_Result_Mission, resultEntry.Mission.ToXMLFormat()), + new XElement( + tns + XMLNames.Report_ResultEntry_SimulationParameters, + new XElement( + tns + XMLNames.Report_ResultEntry_TotalVehicleMass, + XMLHelper.ValueAsUnit(resultEntry.Payload, XMLNames.Unit_kg, 0)), + new XElement( + tns + XMLNames.Report_Result_Payload, XMLHelper.ValueAsUnit(resultEntry.Payload, XMLNames.Unit_kg, 0)), + new XElement( + tns + XMLNames.Report_ResultEntry_PassengerCount, + resultEntry.PassengerCount), + new XElement( + tns + XMLNames.Report_Result_FuelMode, + resultEntry.FuelData.Count > 1 + ? XMLNames.Report_Result_FuelMode_Val_Dual + : XMLNames.Report_Result_FuelMode_Val_Single) + ), + GetResults(resultEntry))); + } + + private object[] GetResults(XMLDeclarationReport.ResultEntry resultEntry) + { + switch (resultEntry.Status) { + case VectoRun.Status.Pending: + case VectoRun.Status.Running: return null; // should not happen! + case VectoRun.Status.Success: return GetSuccessResultEntry(resultEntry); + case VectoRun.Status.Canceled: + case VectoRun.Status.Aborted: + return new object[] { + new XElement(tns + "Error", resultEntry.Error) + }; + default: throw new ArgumentOutOfRangeException(); + } + } + + private object[] GetSuccessResultEntry(XMLDeclarationReport.ResultEntry result) + { + var retVal = new List<XElement>(); + + foreach (var fuel in result.FuelData) { + var fcResult = new XElement( + tns + XMLNames.Report_Results_Fuel, + new XAttribute(XMLNames.Report_Results_Fuel_Type_Attr, fuel.FuelType.ToXMLFormat())); + fcResult.Add( + new XElement( + tns + XMLNames.Report_Result_EnergyConsumption, + new XAttribute(XMLNames.Report_Results_Unit_Attr, "MJ/km"), + (result.FuelConsumptionFinal[fuel.FuelType] * fuel.LowerHeatingValueVecto / + result.Distance.ConvertToKiloMeter() / 1e6) + .Value().ToMinSignificantDigits(3, 1))); + retVal.Add(fcResult); + } + + retVal.Add( + new XElement( + tns + XMLNames.Report_Results_CO2, new XAttribute(XMLNames.Report_Results_Unit_Attr, "g/km"), + (result.CO2Total.ConvertToGramm() / result.Distance.ConvertToKiloMeter()).ToMinSignificantDigits(3, 1))); + + return retVal.Cast<object>().ToArray(); + } } + } diff --git a/VectoCore/VectoCore/OutputData/XML/XMLVTPReport.cs b/VectoCore/VectoCore/OutputData/XML/XMLVTPReport.cs index 0614e777ac2c6a5e8cfc8280e480ccf292010af2..ae314d2d8fcc8070117c823d1637f8fed2a1816c 100644 --- a/VectoCore/VectoCore/OutputData/XML/XMLVTPReport.cs +++ b/VectoCore/VectoCore/OutputData/XML/XMLVTPReport.cs @@ -51,6 +51,7 @@ using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox; using TUGraz.VectoCore.Utils; using TUGraz.VectoHashing; using NLog; +using TUGraz.VectoCommon.Exceptions; using TUGraz.VectoCore.Models.SimulationComponent.Impl; using LogManager = NLog.LogManager; @@ -67,7 +68,7 @@ namespace TUGraz.VectoCore.OutputData.XML protected XElement DataIntegrityPart; protected XElement TestConditionsPart; - protected XElement Results; + protected XElement ResultsPart; protected XNamespace tns; @@ -122,7 +123,7 @@ namespace TUGraz.VectoCore.OutputData.XML GeneralPart = new XElement(tns + "General"); DataIntegrityPart = new XElement(tns + "DataIntegrityCheck"); TestConditionsPart = new XElement(tns + "TestConditions"); - Results = new XElement(tns + "Results"); + ResultsPart = new XElement(tns + "Results"); AddLogging(); } @@ -155,7 +156,7 @@ namespace TUGraz.VectoCore.OutputData.XML #region Overrides of DeclarationReport<ResultEntry> - protected override void DoAddResult( + protected override void DoStoreResult( ResultEntry entry, VectoRunData runData, IModalDataContainer modData) { entry.SetResultData(runData, modData, 0.0); @@ -178,13 +179,21 @@ namespace TUGraz.VectoCore.OutputData.XML private void GenerateResults() { - var vtpResult = Missions.First().Value.FirstOrDefault(x => x.Key == MissionType.VerificationTest).Value.ResultEntry - .FirstOrDefault().Value; + //var vtpResult = Missions.First().Value.FirstOrDefault(x => x.Key == MissionType.VerificationTest).Value.ResultEntry + // .FirstOrDefault().Value; + var vtpResult = Results.OrderBy(x => x.FuelMode).FirstOrDefault(x => x.Mission == MissionType.VerificationTest); const MissionType selectedMission = DeclarationData.VTPMode.SelectedMission; const LoadingType selectedLoading = DeclarationData.VTPMode.SelectedLoading; - var result = Missions.First().Value.FirstOrDefault(x => x.Key == selectedMission).Value.ResultEntry - .FirstOrDefault(x => x.Key == selectedLoading).Value; + var result = Results.OrderBy(x => x.FuelMode).FirstOrDefault(x => x.Mission == selectedMission && x.LoadingType == selectedLoading); + + if (vtpResult == null) { + throw new VectoException("no vtp result found for generating vtp report"); + } + if (result == null) { + throw new VectoException("no corresponding simulation result found for generating vtp report"); + } + var vtpFcMeasured = vtpResult.VTPFcMeasured / vtpResult.VTPWorkPWheelPos; var vtpFcMeasuredCorr = vtpResult.VTPFcMeasured / vtpResult.VTPWorkPWheelPos * vtpResult.VTPFcCorrectionFactor; var vtpFcSimulated = vtpResult.VTPFcFinalSimulated / vtpResult.VTPWorPWheelSimPos; @@ -193,7 +202,7 @@ namespace TUGraz.VectoCore.OutputData.XML var declaredCO2 = result.FuelConsumptionFinal.Sum(x => x.Value) / result.Distance / result.Payload; var verifiedCO2 = declaredCO2 * cVtp; - Results.Add( + ResultsPart.Add( new XElement(tns + "Status", cVtp < 1.075 ? "Passed" : "Failed"), new XElement( tns + "AverageFanPower", @@ -237,7 +246,7 @@ namespace TUGraz.VectoCore.OutputData.XML ), new XElement(tns + "VTRatio", cVtp.ToXMLFormat(4))); if (LogList.Any()) { - Results.Add(new XElement(tns + "Warnings", LogList.Select(x => new XElement(tns + "Warning", x)))); + ResultsPart.Add(new XElement(tns + "Warnings", LogList.Select(x => new XElement(tns + "Warning", x)))); } } @@ -265,7 +274,7 @@ namespace TUGraz.VectoCore.OutputData.XML new XElement(VehiclePart), new XElement(DataIntegrityPart), new XElement(TestConditionsPart), - new XElement(Results), + new XElement(ResultsPart), GetApplicationInfo() ) ) diff --git a/VectoCore/VectoCore/Resources/XSD/VectoOutputManufacturer.0.8.xsd b/VectoCore/VectoCore/Resources/XSD/VectoOutputManufacturer.0.8.xsd index 056ff58cdabce849134fb40ebecf2d8573d40966..39c995c1f11802ad1d54f5d9f4b3a03a04e0afa0 100644 --- a/VectoCore/VectoCore/Resources/XSD/VectoOutputManufacturer.0.8.xsd +++ b/VectoCore/VectoCore/Resources/XSD/VectoOutputManufacturer.0.8.xsd @@ -434,6 +434,7 @@ </xs:simpleContent> </xs:complexType> </xs:element> + <xs:element name="PassengerCount" type="xs:double"/> <xs:element name="FuelMode"> <xs:simpleType> <xs:restriction base="xs:string"> @@ -998,6 +999,7 @@ <xs:enumeration value="MJ/km"/> <xs:enumeration value="MJ/t-km"/> <xs:enumeration value="MJ/m³-km"/> + <xs:enumeration value="MJ/p-km"/> </xs:restriction> </xs:simpleType> <xs:simpleType name="MassUnitType"> diff --git a/VectoCore/VectoCore/Resources/XSD/VectoOutputPrimaryBus.xsd b/VectoCore/VectoCore/Resources/XSD/VectoOutputPrimaryBus.xsd index 311ca5a816dc1112c5c3f7c3c25d1b24c714846a..34e6f5b79272d5c7c4001422de4abd6e31321e24 100644 --- a/VectoCore/VectoCore/Resources/XSD/VectoOutputPrimaryBus.xsd +++ b/VectoCore/VectoCore/Resources/XSD/VectoOutputPrimaryBus.xsd @@ -244,7 +244,7 @@ <xs:complexType name="FuelConsumptionType"> <xs:simpleContent> <xs:extension base="xs:double"> - <xs:attribute name="unit" type="FuelConsumptionUnitType" use="required"/> + <xs:attribute name="unit" type="EnergyConsumptionUnitType" use="required"/> </xs:extension> </xs:simpleContent> </xs:complexType> @@ -281,7 +281,7 @@ <xs:element name="Fuel" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> - <xs:element name="FuelConsumption" type="FuelConsumptionType" maxOccurs="unbounded"> + <xs:element name="EnergyConsumption" type="FuelConsumptionType" maxOccurs="unbounded"> <xs:annotation> <xs:documentation>I.2.3.1 - I.2.3.12 / #69</xs:documentation> </xs:annotation> @@ -338,7 +338,7 @@ </xs:element> <xs:element name="PassengerCount"> <xs:simpleType> - <xs:restriction base="xs:int"> + <xs:restriction base="xs:double"> <xs:minExclusive value="0"/> </xs:restriction> </xs:simpleType> @@ -601,19 +601,9 @@ <xs:enumeration value="km"/> </xs:restriction> </xs:simpleType> - <xs:simpleType name="FuelConsumptionUnitType"> + <xs:simpleType name="EnergyConsumptionUnitType"> <xs:restriction base="xs:string"> - <xs:enumeration value="g/km"/> - <xs:enumeration value="g/t-km"/> - <xs:enumeration value="g/p-km"/> - <xs:enumeration value="g/m³-km"/> - <xs:enumeration value="l/100km"/> - <xs:enumeration value="l/t-km"/> - <xs:enumeration value="l/p-km"/> - <xs:enumeration value="l/m³-km"/> <xs:enumeration value="MJ/km"/> - <xs:enumeration value="MJ/t-km"/> - <xs:enumeration value="MJ/m³-km"/> </xs:restriction> </xs:simpleType> <xs:simpleType name="MassUnitType"> @@ -631,6 +621,11 @@ <xs:enumeration value="Urban Delivery"/> <xs:enumeration value="Municipal Utility"/> <xs:enumeration value="Construction"/> + <xs:enumeration value="Heavy Urban"/> + <xs:enumeration value="Urban"/> + <xs:enumeration value="Suburban"/> + <xs:enumeration value="Interurban"/> + <xs:enumeration value="Coach"/> </xs:restriction> </xs:simpleType> <xs:simpleType name="PercentType"> diff --git a/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.6_Buses/example_heavyBus_PIF.xml b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.6_Buses/example_heavyBus_PIF.xml index ae29a1f7fba696c5237cd44e323536b32f3072bb..b86d492991c63a18c9bc34d892212cb7ef7d01d1 100644 --- a/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.6_Buses/example_heavyBus_PIF.xml +++ b/VectoCore/VectoCoreTest/TestData/XML/XMLReaderDeclaration/SchemaVersion2.6_Buses/example_heavyBus_PIF.xml @@ -267,19 +267,9 @@ xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:PrimaryVehicleInformation E:\QUAM\Wo <FuelMode>single fuel mode</FuelMode> </SimulationParameters> <Fuel type="Diesel CI"> - <FuelConsumption unit="g/km">210.5</FuelConsumption> - <FuelConsumption unit="g/t-km">228.8</FuelConsumption> - <FuelConsumption unit="g/m³-km">4.41</FuelConsumption> - <FuelConsumption unit="MJ/km">8.99</FuelConsumption> - <FuelConsumption unit="MJ/t-km">9.77</FuelConsumption> - <FuelConsumption unit="MJ/m³-km">0.188</FuelConsumption> - <FuelConsumption unit="l/100km">25.2</FuelConsumption> - <FuelConsumption unit="l/t-km">0.274</FuelConsumption> - <FuelConsumption unit="l/m³-km">0.00528</FuelConsumption> + <EnergyConsumption unit="MJ/km">8.99</EnergyConsumption> </Fuel> <CO2 unit="g/km">658.9</CO2> - <CO2 unit="g/t-km">716.2</CO2> - <CO2 unit="g/m³-km">13.8</CO2> </Result> <Result status="success"> <VehicleGroup>P31SD</VehicleGroup> @@ -291,19 +281,9 @@ xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:PrimaryVehicleInformation E:\QUAM\Wo <FuelMode>single fuel mode</FuelMode> </SimulationParameters> <Fuel type="Diesel CI"> - <FuelConsumption unit="g/km">231.4</FuelConsumption> - <FuelConsumption unit="g/t-km">50.3</FuelConsumption> - <FuelConsumption unit="g/m³-km">4.85</FuelConsumption> - <FuelConsumption unit="MJ/km">9.88</FuelConsumption> - <FuelConsumption unit="MJ/t-km">2.15</FuelConsumption> - <FuelConsumption unit="MJ/m³-km">0.207</FuelConsumption> - <FuelConsumption unit="l/100km">27.7</FuelConsumption> - <FuelConsumption unit="l/t-km">0.0602</FuelConsumption> - <FuelConsumption unit="l/m³-km">0.00580</FuelConsumption> + <EnergyConsumption unit="MJ/km">9.88</EnergyConsumption> </Fuel> <CO2 unit="g/km">724.4</CO2> - <CO2 unit="g/t-km">157.5</CO2> - <CO2 unit="g/m³-km">15.2</CO2> </Result> <Result status="success"> <VehicleGroup>P31DD</VehicleGroup> @@ -315,19 +295,9 @@ xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:PrimaryVehicleInformation E:\QUAM\Wo <FuelMode>single fuel mode</FuelMode> </SimulationParameters> <Fuel type="Diesel CI"> - <FuelConsumption unit="g/km">244.1</FuelConsumption> - <FuelConsumption unit="g/t-km">265.3</FuelConsumption> - <FuelConsumption unit="g/m³-km">5.12</FuelConsumption> - <FuelConsumption unit="MJ/km">10.4</FuelConsumption> - <FuelConsumption unit="MJ/t-km">11.3</FuelConsumption> - <FuelConsumption unit="MJ/m³-km">0.218</FuelConsumption> - <FuelConsumption unit="l/100km">29.2</FuelConsumption> - <FuelConsumption unit="l/t-km">0.317</FuelConsumption> - <FuelConsumption unit="l/m³-km">0.00612</FuelConsumption> + <EnergyConsumption unit="MJ/km">10.4</EnergyConsumption> </Fuel> <CO2 unit="g/km">763.9</CO2> - <CO2 unit="g/t-km">830.3</CO2> - <CO2 unit="g/m³-km">16.0</CO2> </Result> <Result status="success"> <VehicleGroup>P31DD</VehicleGroup> @@ -339,19 +309,9 @@ xsi:schemaLocation="urn:tugraz:ivt:VectoAPI:PrimaryVehicleInformation E:\QUAM\Wo <FuelMode>single fuel mode</FuelMode> </SimulationParameters> <Fuel type="Diesel CI"> - <FuelConsumption unit="g/km">296.4</FuelConsumption> - <FuelConsumption unit="g/t-km">64.4</FuelConsumption> - <FuelConsumption unit="g/m³-km">6.21</FuelConsumption> - <FuelConsumption unit="MJ/km">12.7</FuelConsumption> - <FuelConsumption unit="MJ/t-km">2.75</FuelConsumption> - <FuelConsumption unit="MJ/m³-km">0.265</FuelConsumption> - <FuelConsumption unit="l/100km">35.5</FuelConsumption> - <FuelConsumption unit="l/t-km">0.0771</FuelConsumption> - <FuelConsumption unit="l/m³-km">0.00743</FuelConsumption> + <EnergyConsumption unit="MJ/km">12.7</EnergyConsumption> </Fuel> <CO2 unit="g/km">927.7</CO2> - <CO2 unit="g/t-km">201.7</CO2> - <CO2 unit="g/m³-km">19.4</CO2> </Result> </Results> <ApplicationInformation>