Code development platform for open source projects from the European Union institutions :large_blue_circle: EU Login authentication by SMS has been phased out. To see alternatives please check here

Skip to content
Snippets Groups Projects
Commit 4057653d authored by David AMO GONZALEZ's avatar David AMO GONZALEZ
Browse files

Implement subgroup allocations for PEVs

parent a1ca0369
No related branches found
No related tags found
No related merge requests found
Showing
with 284 additions and 152 deletions
...@@ -73,6 +73,11 @@ namespace TUGraz.VectoCommon.InputData ...@@ -73,6 +73,11 @@ namespace TUGraz.VectoCommon.InputData
public const string Hybrid = "Hybrid"; public const string Hybrid = "Hybrid";
public const string PureElectric = "PureElectric"; public const string PureElectric = "PureElectric";
public static bool IsBatteryElectric(this VectoSimulationJobType jobType)
{
return jobType == VectoSimulationJobType.BatteryElectricVehicle || jobType == VectoSimulationJobType.IEPC_E;
}
public static string GetPowertrainArchitectureType(this VectoSimulationJobType jobType) public static string GetPowertrainArchitectureType(this VectoSimulationJobType jobType)
{ {
switch (jobType) { switch (jobType) {
......
...@@ -180,27 +180,40 @@ namespace TUGraz.VectoCore.Models.Declaration ...@@ -180,27 +180,40 @@ namespace TUGraz.VectoCore.Models.Declaration
case VehicleCategory.RigidTruck: case VehicleCategory.RigidTruck:
case VehicleCategory.Tractor: case VehicleCategory.Tractor:
try { try {
var truckSegment = DeclarationData.TruckSegments.Lookup(vehicleData.VehicleCategory, var truckSegment = DeclarationData.TruckSegments.Lookup(
vehicleData.AxleConfiguration, vehicleData.GrossVehicleMassRating, vehicleData.VehicleCategory,
vehicleData.AxleConfiguration,
vehicleData.GrossVehicleMassRating,
vehicleData.CurbMassChassis, vehicleData.CurbMassChassis,
vehicleData.VocationalVehicle); vehicleData.VocationalVehicle);
return Tuple.Create(truckSegment.VehicleClass, (bool?)vehicleData.VocationalVehicle); return Tuple.Create(truckSegment.VehicleClass, (bool?)vehicleData.VocationalVehicle);
} catch (VectoException) { } catch (VectoException) {
var truckSegment = DeclarationData.TruckSegments.Lookup(vehicleData.VehicleCategory, var truckSegment = DeclarationData.TruckSegments.Lookup(
vehicleData.AxleConfiguration, vehicleData.GrossVehicleMassRating, vehicleData.VehicleCategory,
vehicleData.AxleConfiguration,
vehicleData.GrossVehicleMassRating,
vehicleData.CurbMassChassis, vehicleData.CurbMassChassis,
false); false);
return Tuple.Create(truckSegment.VehicleClass, (bool?)false); return Tuple.Create(truckSegment.VehicleClass, (bool?)false);
} }
case VehicleCategory.HeavyBusPrimaryVehicle: case VehicleCategory.HeavyBusPrimaryVehicle:
var primarySegment = DeclarationData.PrimaryBusSegments.Lookup(vehicleData.VehicleCategory, var primarySegment = DeclarationData.PrimaryBusSegments.Lookup(
vehicleData.AxleConfiguration, vehicleData.Articulated); vehicleData.VehicleCategory,
vehicleData.AxleConfiguration,
vehicleData.Articulated);
return Tuple.Create(primarySegment.VehicleClass, (bool?)null); return Tuple.Create(primarySegment.VehicleClass, (bool?)null);
case VehicleCategory.HeavyBusCompletedVehicle: case VehicleCategory.HeavyBusCompletedVehicle:
var segment = DeclarationData.CompletedBusSegments.Lookup(vehicleData.AxleConfiguration.NumAxles(), var segment = DeclarationData.CompletedBusSegments.Lookup(
vehicleData.AxleConfiguration.NumAxles(),
vehicleData.VehicleCode, vehicleData.VehicleCode,
vehicleData.RegisteredClass, vehicleData.NumberPassengerSeatsLowerDeck, vehicleData.Height, vehicleData.RegisteredClass,
vehicleData.NumberPassengerSeatsLowerDeck,
vehicleData.Height,
vehicleData.LowEntry); vehicleData.LowEntry);
return Tuple.Create(segment.VehicleClass, (bool?)null); return Tuple.Create(segment.VehicleClass, (bool?)null);
} }
...@@ -246,21 +259,39 @@ namespace TUGraz.VectoCore.Models.Declaration ...@@ -246,21 +259,39 @@ namespace TUGraz.VectoCore.Models.Declaration
public bool AllowVocational { get; set; } public bool AllowVocational { get; set; }
} }
/// <summary>
/// Checks whether the LH subgroup conditions are met, otherwise RD allocation needs to be carried out.
/// </summary>
/// <param name="result">Simulation cycle result entry.</param>
/// <returns>True if RD allocation is needed; false otherwise.</returns>
public static bool EvaluateLHSubgroupConditions(IResultEntry result)
{
Meter electricOprerationalRange = result.VectoRunData.JobType.IsBatteryElectric() ?
(result.ActualChargeDepletingRange ?? 0.SI<Meter>()) :
double.MaxValue.SI<Meter>();
return result.Mission == MissionType.LongHaul &&
result.LoadingType == LoadingType.ReferenceLoad &&
electricOprerationalRange < 350000.SI<Meter>();
}
public static WeightingGroup GetVehicleGroupCO2StandardsGroup(IVehicleDeclarationInputData vehicleData) public static WeightingGroup GetVehicleGroupCO2StandardsGroup(IVehicleDeclarationInputData vehicleData, double? electricRange = null)
{ {
switch (vehicleData.VehicleCategory) { switch (vehicleData.VehicleCategory) {
case VehicleCategory.Van: case VehicleCategory.Van:
case VehicleCategory.RigidTruck: case VehicleCategory.RigidTruck:
case VehicleCategory.Tractor: case VehicleCategory.Tractor:
var vehicleGroup = GetVehicleGroupGroup(vehicleData); var vehicleGroup = GetVehicleGroupGroup(vehicleData);
var propulsionPower = GetReferencePropulsionPower(vehicleData); var co2Group = WeightingGroup.Lookup(
var co2Group = WeightingGroup.Lookup(vehicleGroup.Item1, vehicleData.SleeperCab ?? false, propulsionPower); vehicleGroup.Item1,
vehicleData.SleeperCab ?? false,
GetReferencePropulsionPower(vehicleData),
vehicleData.VehicleType.IsBatteryElectric(),
electricRange);
return co2Group; return co2Group;
default: default:
return Declaration.WeightingGroup.Unknown; return Declaration.WeightingGroup.Unknown;
} }
//throw new VectoException("No CO2 Group found for vehicle");
} }
public static Watt GetReferencePropulsionPower(IVehicleDeclarationInputData vehicleData) public static Watt GetReferencePropulsionPower(IVehicleDeclarationInputData vehicleData)
......
...@@ -43,6 +43,9 @@ namespace TUGraz.VectoCore.Models.Declaration ...@@ -43,6 +43,9 @@ namespace TUGraz.VectoCore.Models.Declaration
{ {
public sealed class WeightingFactors : LookupData public sealed class WeightingFactors : LookupData
{ {
private const double VocationalFactorsSum = 2.0;
private const double NonVocationalFactorsSum = 1.0;
private readonly Dictionary<WeightingGroup, Dictionary<Tuple<MissionType, LoadingType>, double>> Data = new Dictionary<WeightingGroup, Dictionary<Tuple<MissionType, LoadingType>, double>>(); private readonly Dictionary<WeightingGroup, Dictionary<Tuple<MissionType, LoadingType>, double>> Data = new Dictionary<WeightingGroup, Dictionary<Tuple<MissionType, LoadingType>, double>>();
public IDictionary<Tuple<MissionType, LoadingType>, double> Lookup(WeightingGroup group) public IDictionary<Tuple<MissionType, LoadingType>, double> Lookup(WeightingGroup group)
...@@ -91,8 +94,8 @@ namespace TUGraz.VectoCore.Models.Declaration ...@@ -91,8 +94,8 @@ namespace TUGraz.VectoCore.Models.Declaration
foreach (var entry in Data) { foreach (var entry in Data) {
var sum = entry.Value.Sum(item => item.Value); var sum = entry.Value.Sum(item => item.Value);
bool hasVocationalWeights = sum.IsEqual(2.0, 1e-12); bool hasVocationalWeights = sum.IsEqual(VocationalFactorsSum, 1e-12);
bool isNormalWeights = sum.IsEqual(1.0, 1e-12); bool isNormalWeights = sum.IsEqual(NonVocationalFactorsSum, 1e-12);
if (!isNormalWeights && !hasVocationalWeights) if (!isNormalWeights && !hasVocationalWeights)
{ {
......
...@@ -50,16 +50,12 @@ namespace TUGraz.VectoCore.Models.Declaration ...@@ -50,16 +50,12 @@ namespace TUGraz.VectoCore.Models.Declaration
Group4UD, Group4UD,
Group4RD, Group4RD,
Group4LH, Group4LH,
Group4V,
Group5RD, Group5RD,
Group5LH, Group5LH,
Group5V,
Group9RD, Group9RD,
Group9LH, Group9LH,
Group9V,
Group10RD, Group10RD,
Group10LH, Group10LH,
Group10V,
Group11, Group11,
Group12, Group12,
...@@ -160,16 +156,12 @@ namespace TUGraz.VectoCore.Models.Declaration ...@@ -160,16 +156,12 @@ namespace TUGraz.VectoCore.Models.Declaration
case WeightingGroup.Group4UD: case WeightingGroup.Group4UD:
case WeightingGroup.Group4RD: case WeightingGroup.Group4RD:
case WeightingGroup.Group4LH: case WeightingGroup.Group4LH:
case WeightingGroup.Group4V:
case WeightingGroup.Group5RD: case WeightingGroup.Group5RD:
case WeightingGroup.Group5LH: case WeightingGroup.Group5LH:
case WeightingGroup.Group5V:
case WeightingGroup.Group9RD: case WeightingGroup.Group9RD:
case WeightingGroup.Group9LH: case WeightingGroup.Group9LH:
case WeightingGroup.Group9V:
case WeightingGroup.Group10RD: case WeightingGroup.Group10RD:
case WeightingGroup.Group10LH: case WeightingGroup.Group10LH:
case WeightingGroup.Group10V:
return Regex.Split(group.ToString().Replace(Prefix, ""), @"(\d+|\w+)").Where(x => !string.IsNullOrWhiteSpace(x)).Join("-"); return Regex.Split(group.ToString().Replace(Prefix, ""), @"(\d+|\w+)").Where(x => !string.IsNullOrWhiteSpace(x)).Join("-");
default: default:
return Constants.NOT_AVAILABLE; return Constants.NOT_AVAILABLE;
...@@ -177,7 +169,7 @@ namespace TUGraz.VectoCore.Models.Declaration ...@@ -177,7 +169,7 @@ namespace TUGraz.VectoCore.Models.Declaration
} }
} }
public class WeightingGroups : LookupData<VehicleClass, bool, Watt, WeightingGroup> public class WeightingGroups : LookupData<VehicleClass, bool, Watt, bool, double?, WeightingGroup>
{ {
protected readonly List<Entry> Entries = new List<Entry>(); protected readonly List<Entry> Entries = new List<Entry>();
...@@ -192,31 +184,55 @@ namespace TUGraz.VectoCore.Models.Declaration ...@@ -192,31 +184,55 @@ namespace TUGraz.VectoCore.Models.Declaration
foreach (DataRow row in table.Rows) { foreach (DataRow row in table.Rows) {
Entries.Add(new Entry() { Entries.Add(new Entry() {
VehicleGroup = VehicleClassHelper.Parse(row.Field<string>("vehiclegroup")), VehicleGroup = VehicleClassHelper.Parse(row.Field<string>("vehiclegroup")),
IsElectric = "1".Equals(row.Field<string>("iselectric"), StringComparison.InvariantCultureIgnoreCase),
SleeperCab = "SleeperCab".Equals(row.Field<string>("cabintype"), StringComparison.InvariantCultureIgnoreCase), SleeperCab = "SleeperCab".Equals(row.Field<string>("cabintype"), StringComparison.InvariantCultureIgnoreCase),
RatedPowerMin = row.ParseDouble("engineratedpowermin").SI(Unit.SI.Kilo.Watt).Cast<Watt>(), RatedPowerMin = row.ParseDouble("engineratedpowermin").SI(Unit.SI.Kilo.Watt).Cast<Watt>(),
RatedPowerMax = row.ParseDouble("engineratedpowermax").SI(Unit.SI.Kilo.Watt).Cast<Watt>(), RatedPowerMax = row.ParseDouble("engineratedpowermax").SI(Unit.SI.Kilo.Watt).Cast<Watt>(),
WeightingGroup = WeightingGroupHelper.Parse(row.Field<string>("weightinggroup")) ElectricRange = row.ParseDouble("electricrange").SI<Meter>(),
WeightingGroup = WeightingGroupHelper.Parse(row.Field<string>("weightinggroup")),
}); });
} }
} }
public override WeightingGroup Lookup(VehicleClass group, bool sleeperCab, Watt engineRatedPower) public override WeightingGroup Lookup(VehicleClass group, bool sleeperCab, Watt engineRatedPower, bool isElectric = false, double? electricRange = null)
{
WeightingGroup Lookup()
{ {
var rows = Entries.FindAll( var rows = Entries.FindAll(
x => x.VehicleGroup == group && x.SleeperCab == sleeperCab && engineRatedPower >= x.RatedPowerMin && e => e.VehicleGroup == group &&
engineRatedPower < x.RatedPowerMax); e.IsElectric == false &&
e.SleeperCab == sleeperCab &&
engineRatedPower >= e.RatedPowerMin &&
engineRatedPower < e.RatedPowerMax);
return rows.Count == 0 ? WeightingGroup.Unknown : rows.First().WeightingGroup; return rows.Count == 0 ? WeightingGroup.Unknown : rows.First().WeightingGroup;
} }
/// Never meet the conditions for Electric Range if null.
var operationalRange = electricRange == null ? double.MaxValue : electricRange.Value;
var electricRows = Entries.FindAll(
e => e.VehicleGroup == group &&
e.IsElectric == isElectric &&
e.SleeperCab == sleeperCab &&
engineRatedPower >= e.RatedPowerMin &&
engineRatedPower < e.RatedPowerMax &&
operationalRange < e.ElectricRange);
return electricRows.Count == 0 ? Lookup() : electricRows.First().WeightingGroup;
}
#endregion #endregion
protected class Entry protected class Entry
{ {
public VehicleClass VehicleGroup; public VehicleClass VehicleGroup;
public bool Vocational; public bool IsElectric;
public bool SleeperCab; public bool SleeperCab;
public Watt RatedPowerMin; public Watt RatedPowerMin;
public Watt RatedPowerMax; public Watt RatedPowerMax;
public Meter ElectricRange;
public WeightingGroup WeightingGroup; public WeightingGroup WeightingGroup;
} }
} }
......
...@@ -29,6 +29,8 @@ ...@@ -29,6 +29,8 @@
* Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology * Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
*/ */
using System;
using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
...@@ -75,6 +77,8 @@ namespace TUGraz.VectoCore.OutputData ...@@ -75,6 +77,8 @@ namespace TUGraz.VectoCore.OutputData
{ {
void Initialize(VectoRunData vectoRunData); void Initialize(VectoRunData vectoRunData);
void Initialize(VectoRunData vectoRunData, IModalDataContainer modalData);
VectoRunData VectoRunData { get; } VectoRunData VectoRunData { get; }
VectoRun.Status Status { get; } VectoRun.Status Status { get; }
...@@ -120,7 +124,7 @@ namespace TUGraz.VectoCore.OutputData ...@@ -120,7 +124,7 @@ namespace TUGraz.VectoCore.OutputData
Watt MaxChargingPower { get; } Watt MaxChargingPower { get; }
double WeightingFactor { get; } double WeightingFactor { get; set; }
Meter ActualChargeDepletingRange { get; } Meter ActualChargeDepletingRange { get; }
...@@ -250,25 +254,29 @@ namespace TUGraz.VectoCore.OutputData ...@@ -250,25 +254,29 @@ namespace TUGraz.VectoCore.OutputData
} }
} }
List<Tuple<T, VectoRunData, IModalDataContainer>> StoredResults = new List<Tuple<T, VectoRunData, IModalDataContainer>>();
public void AddResult(VectoRunData runData, public void AddResult(VectoRunData runData,
IModalDataContainer modData) IModalDataContainer modData)
{ {
//return; //return;
if (runData.Mission.MissionType != MissionType.ExemptedMission) { if (runData.Mission.MissionType != MissionType.ExemptedMission) {
var entry = new T(); var entry = new T();
entry.Initialize(runData); entry.Initialize(runData, modData);
lock (Results) { lock (Results) {
var exístingResult = Results.SingleOrDefault(e => var existingResults = Results.Where(e =>
e.Mission == entry.Mission && e.LoadingType == entry.LoadingType && e.OVCMode == entry.OVCMode && e.VehicleClass == entry.VehicleClass); e.Mission == entry.Mission && e.LoadingType == entry.LoadingType && e.OVCMode == entry.OVCMode && e.VehicleClass == entry.VehicleClass).ToList();
if (exístingResult != null) { bool areElectric = existingResults.All(e => e.LoadingType == LoadingType.ReferenceLoad);
if (existingResults.Count > 1)
{
//We already have a result for this run stored, this can happen with iterative runs, in this case we have to remove the old result //We already have a result for this run stored, this can happen with iterative runs, in this case we have to remove the old result
Results.Remove(exístingResult); Results.RemoveRange(1, existingResults.Count - 1);
} }
Results.Add(entry); Results.Add(entry);
} }
DoStoreResult(entry, runData, modData); StoredResults.Add(Tuple.Create(entry, runData, modData));
} }
WriteResults(); WriteResults();
...@@ -297,8 +305,19 @@ namespace TUGraz.VectoCore.OutputData ...@@ -297,8 +305,19 @@ namespace TUGraz.VectoCore.OutputData
protected internal virtual void DoWriteReport() protected internal virtual void DoWriteReport()
{ {
foreach (var result in OrderedResults) { /// Check if LH does not meet LH requierements, i.e. ReferenceLoad and OperationalRange > 350km.
WriteResult(result); var RDGroupEntry = StoredResults.SingleOrDefault(e => DeclarationData.EvaluateLHSubgroupConditions(e.Item1));
foreach (var resultEntry in OrderedResults)
{
var rdResultEntry = RDGroupEntry != null ? RDGroupEntry.Item1 : resultEntry;
var vectoRun = RDGroupEntry != null ? RDGroupEntry.Item2 : resultEntry.VectoRunData;
/// Set new weighting factors according to new RD group.
SetWeightingFactors(vectoRun, OrderedResults, rdResultEntry != null ? rdResultEntry.ActualChargeDepletingRange?.Value() : null);
/// Update results with newest weighting factors (WFs), i.e. RD WFs if updated otherwise if else.
WriteResult(resultEntry);
} }
GenerateReports(); GenerateReports();
...@@ -315,5 +334,7 @@ namespace TUGraz.VectoCore.OutputData ...@@ -315,5 +334,7 @@ namespace TUGraz.VectoCore.OutputData
protected abstract void WriteResult(T result); protected abstract void WriteResult(T result);
public abstract void InitializeReport(VectoRunData modelData); public abstract void InitializeReport(VectoRunData modelData);
public abstract void SetWeightingFactors(VectoRunData runData, IEnumerable<IResultEntry> orderedeResults, double? electricRange);
} }
} }
...@@ -10,6 +10,7 @@ using System.Xml.XPath; ...@@ -10,6 +10,7 @@ using System.Xml.XPath;
using TUGraz.VectoCommon.InputData; using TUGraz.VectoCommon.InputData;
using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Models;
using TUGraz.VectoCommon.Resources; using TUGraz.VectoCommon.Resources;
using TUGraz.VectoCommon.Utils;
using TUGraz.VectoCore.Models.Declaration; using TUGraz.VectoCore.Models.Declaration;
using TUGraz.VectoCore.Models.Simulation.Data; using TUGraz.VectoCore.Models.Simulation.Data;
using TUGraz.VectoCore.Models.SimulationComponent; using TUGraz.VectoCore.Models.SimulationComponent;
...@@ -96,9 +97,11 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation ...@@ -96,9 +97,11 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
) )
); );
var RDGroupEntry = _results.SingleOrDefault(e => DeclarationData.EvaluateLHSubgroupConditions(e));
// ReSharper disable once PossibleNullReferenceException // ReSharper disable once PossibleNullReferenceException
Vehicle.XPathSelectElement($"//*[local-name()='{XMLNames.VehicleGroupCO2}']").Value = DeclarationData Vehicle.XPathSelectElement($"//*[local-name()='{XMLNames.VehicleGroupCO2}']").Value =
.GetVehicleGroupCO2StandardsGroup(Input).ToXMLFormat(); DeclarationData.GetVehicleGroupCO2StandardsGroup(Input, RDGroupEntry != null ? RDGroupEntry.ActualChargeDepletingRange?.Value() : null).ToXMLFormat();
var stream = new MemoryStream(); var stream = new MemoryStream();
var writer = new StreamWriter(stream); var writer = new StreamWriter(stream);
......
...@@ -112,10 +112,11 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport. ...@@ -112,10 +112,11 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport.
) )
); );
//var lh = _results.SingleOrDefault(res => res.Mission == MissionType.LongHaul && res.LoadingType == LoadingType.ReferenceLoad); var RDGroupEntry = _results.SingleOrDefault(e => DeclarationData.EvaluateLHSubgroupConditions(e));
double? LHOperationalRange = RDGroupEntry != null ? RDGroupEntry.ActualChargeDepletingRange?.Value() : null;
Vehicle.XPathSelectElement($"//*[local-name()='{XMLNames.VehicleGroupCO2}']").Value = DeclarationData Vehicle.XPathSelectElement($"//*[local-name()='{XMLNames.VehicleGroupCO2}']").Value =
.GetVehicleGroupCO2StandardsGroup(Input).ToXMLFormat(); DeclarationData.GetVehicleGroupCO2StandardsGroup(Input, LHOperationalRange).ToXMLFormat();
var stream = new MemoryStream(); var stream = new MemoryStream();
var writer = new StreamWriter(stream); var writer = new StreamWriter(stream);
......
...@@ -1000,6 +1000,11 @@ namespace TUGraz.VectoCore.OutputData.XML ...@@ -1000,6 +1000,11 @@ namespace TUGraz.VectoCore.OutputData.XML
}; };
} }
public override void SetWeightingFactors(VectoRunData runData, IEnumerable<IResultEntry> orderedeResults, double? electricRange)
{
throw new NotImplementedException();
}
#region Implementation of IVTPReport #region Implementation of IVTPReport
public IVectoHash InputDataHash { protected get; set; } public IVectoHash InputDataHash { protected get; set; }
......
...@@ -47,6 +47,7 @@ using TUGraz.VectoCore.Models.Simulation.Data; ...@@ -47,6 +47,7 @@ using TUGraz.VectoCore.Models.Simulation.Data;
using TUGraz.VectoCore.Models.Simulation.Impl; using TUGraz.VectoCore.Models.Simulation.Impl;
using TUGraz.VectoCore.Models.SimulationComponent.Data.ElectricComponents.Battery; using TUGraz.VectoCore.Models.SimulationComponent.Data.ElectricComponents.Battery;
using TUGraz.VectoCore.OutputData.ModDataPostprocessing; using TUGraz.VectoCore.OutputData.ModDataPostprocessing;
using TUGraz.VectoCore.OutputData.XML.DeclarationReports.Common;
using TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformationFile; using TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformationFile;
using TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformationFile.CustomerInformationFile_0_9; using TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformationFile.CustomerInformationFile_0_9;
using TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport; using TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport;
...@@ -99,9 +100,25 @@ namespace TUGraz.VectoCore.OutputData.XML ...@@ -99,9 +100,25 @@ namespace TUGraz.VectoCore.OutputData.XML
BatteryData = runData.BatteryData; BatteryData = runData.BatteryData;
OVCMode = runData.OVCMode; OVCMode = runData.OVCMode;
VectoRunData = runData; VectoRunData = runData;
}
public void Initialize(VectoRunData runData, IModalDataContainer modalData)
{
Mission = runData.Mission.MissionType;
LoadingType = runData.Loading;
FuelMode = runData.EngineData?.FuelMode ?? 0;
FuelData = runData.EngineData?.Fuels.Select(x => x.FuelData).ToList() ?? new List<IFuelProperties>();
Payload = runData.VehicleData.Loading;
TotalVehicleMass = runData.VehicleData.TotalVehicleMass;
CargoVolume = runData.VehicleData.CargoVolume;
VehicleClass = runData.Mission?.BusParameter?.BusGroup ?? runData.VehicleData.VehicleClass;
PassengerCount = runData.VehicleData.PassengerCount;
MaxChargingPower = runData.MaxChargingPower;
BatteryData = runData.BatteryData;
OVCMode = runData.OVCMode;
VectoRunData = runData;
//VehicleCode = runData.VehicleData.VehicleCode; SetResultData(runData, modalData, 0.0);
} }
public VectoRunData VectoRunData { get; private set; } public VectoRunData VectoRunData { get; private set; }
...@@ -267,11 +284,7 @@ namespace TUGraz.VectoCore.OutputData.XML ...@@ -267,11 +284,7 @@ namespace TUGraz.VectoCore.OutputData.XML
} }
WeightingFactor = weightingFactor; WeightingFactor = weightingFactor;
PrimaryResult = runData.PrimaryResult;
} }
} }
...@@ -312,6 +325,24 @@ namespace TUGraz.VectoCore.OutputData.XML ...@@ -312,6 +325,24 @@ namespace TUGraz.VectoCore.OutputData.XML
_monitoringReport.GenerateReport(); _monitoringReport.GenerateReport();
} }
public override void SetWeightingFactors(VectoRunData runData, IEnumerable<IResultEntry> orderedeResults, double? electricRange)
{
WeightingGroup = DeclarationData.WeightingGroup.Lookup(
runData.VehicleData.VehicleClass,
runData.VehicleData.SleeperCab.Value,
DeclarationData.GetReferencePropulsionPower(runData.VehicleData.InputData),
runData.JobType.IsBatteryElectric(),
electricRange);
_weightingFactors = WeightingGroup == WeightingGroup.Unknown
? ZeroWeighting
: DeclarationData.WeightingFactors.Lookup(WeightingGroup);
foreach(var result in orderedeResults)
{
result.WeightingFactor = _weightingFactors[Tuple.Create(result.Mission, result.LoadingType)];
}
}
protected override void OutputReports() protected override void OutputReports()
{ {
...@@ -332,10 +363,14 @@ namespace TUGraz.VectoCore.OutputData.XML ...@@ -332,10 +363,14 @@ namespace TUGraz.VectoCore.OutputData.XML
public override void InitializeReport(VectoRunData modelData) public override void InitializeReport(VectoRunData modelData)
{ {
if (modelData.Exempted) { if (modelData.Exempted)
{
WeightingGroup = WeightingGroup.Unknown; WeightingGroup = WeightingGroup.Unknown;
} else { }
if (modelData.VehicleData.SleeperCab == null) { else
{
if (modelData.VehicleData.SleeperCab == null)
{
throw new VectoException("SleeperCab parameter is required"); throw new VectoException("SleeperCab parameter is required");
} }
...@@ -350,7 +385,6 @@ namespace TUGraz.VectoCore.OutputData.XML ...@@ -350,7 +385,6 @@ namespace TUGraz.VectoCore.OutputData.XML
? ZeroWeighting ? ZeroWeighting
: DeclarationData.WeightingFactors.Lookup(WeightingGroup); : DeclarationData.WeightingFactors.Lookup(WeightingGroup);
InstantiateReports(modelData); InstantiateReports(modelData);
ManufacturerRpt.Initialize(modelData); ManufacturerRpt.Initialize(modelData);
......
...@@ -338,6 +338,11 @@ namespace TUGraz.VectoCore.OutputData.XML ...@@ -338,6 +338,11 @@ namespace TUGraz.VectoCore.OutputData.XML
public Kilogram ZEV_CO2 { get; set; } public Kilogram ZEV_CO2 { get; set; }
public void SetResultData(VectoRunData runData, IModalDataContainer data, double weightingFactor) public void SetResultData(VectoRunData runData, IModalDataContainer data, double weightingFactor)
{
throw new NotImplementedException();
}
public void Initialize(VectoRunData vectoRunData, IModalDataContainer modalData)
{ {
throw new NotImplementedException(); throw new NotImplementedException();
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment