diff --git a/VectoConsole/Program.cs b/VectoConsole/Program.cs index ea23e4f5e2508117bd11d6be580376db0b009c92..8d8845cd219691711bde6485f6c2b971b2ba2f00 100644 --- a/VectoConsole/Program.cs +++ b/VectoConsole/Program.cs @@ -131,7 +131,7 @@ Examples: stopWatch.Start(); foreach (var file in fileList.Where(f => Path.GetExtension(f) == Constants.FileExtensions.VectoJobFile)) { var dataProvider = JSONInputDataFactory.ReadJsonJob(file); - var runsFactory = new SimulatorFactory(mode, dataProvider, fileWriter) { ModWriter = fileWriter }; + var runsFactory = new SimulatorFactory(mode, dataProvider, fileWriter); if (args.Contains("-mod")) { runsFactory.WriteModalResults = true; } diff --git a/VectoCore/InputData/FileIO/JSON/JSONEngineData.cs b/VectoCore/InputData/FileIO/JSON/JSONEngineData.cs index 1ac945f9a8e701839a2d3ec91efa2fd81c0b2150..d7602a0b052a8677d866e93d9527f0943a75d20e 100644 --- a/VectoCore/InputData/FileIO/JSON/JSONEngineData.cs +++ b/VectoCore/InputData/FileIO/JSON/JSONEngineData.cs @@ -19,9 +19,9 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON // convert vom ccm to m^3} } - public RoundsPerMinute IdleSpeed + public PerSecond IdleSpeed { - get { return Body[JsonKeys.Engine_IdleSpeed].Value<double>().SI<RoundsPerMinute>(); } + get { return Body[JsonKeys.Engine_IdleSpeed].Value<double>().RPMtoRad(); } } public DataTable FuelConsumptionMap diff --git a/VectoCore/InputData/FileIO/JSON/JSONGearboxData.cs b/VectoCore/InputData/FileIO/JSON/JSONGearboxData.cs index 38a760b7533a0f891082be4db45b5f76c8c037bf..31f15d3e088adf5b17be5cded8b53b06014c26c4 100644 --- a/VectoCore/InputData/FileIO/JSON/JSONGearboxData.cs +++ b/VectoCore/InputData/FileIO/JSON/JSONGearboxData.cs @@ -123,7 +123,10 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON public bool Enabled { - get { throw new System.NotImplementedException(); } + get + { + return false; // TODO @@@ + } } public RoundsPerMinute ReferenceRPM diff --git a/VectoCore/InputData/FileIO/JSON/JSONInputData.cs b/VectoCore/InputData/FileIO/JSON/JSONInputData.cs index 9a7a4bde2a35352730252c778e7af3e9df9d6b0d..6da3fb45c6726dd6fb324723cd9405e55157e425 100644 --- a/VectoCore/InputData/FileIO/JSON/JSONInputData.cs +++ b/VectoCore/InputData/FileIO/JSON/JSONInputData.cs @@ -44,13 +44,20 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON protected DataTable ReadTableData(string filename, string tableType, bool required = true) { - if (filename == null || !filename.Any() || filename.Equals("<NOFILE>", StringComparison.InvariantCultureIgnoreCase)) { - if (required) { - throw new VectoException("Invalid {0}: {1}", tableType, filename); - } - return null; + if (!EmptyOrInvalidFileName(filename)) { + return VectoCSVFile.Read(Path.Combine(BasePath, filename), true); + } + if (required) { + throw new VectoException("Invalid {0}: {1}", tableType, filename); } - return VectoCSVFile.Read(Path.Combine(BasePath, filename)); + return null; + } + + internal static bool EmptyOrInvalidFileName(string filename) + { + return filename == null || !filename.Any() || + filename.Equals("<NOFILE>", StringComparison.InvariantCultureIgnoreCase) + || filename.Equals("-"); } } @@ -70,17 +77,23 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON public JSONInputDataV2(JObject data, string filename) : base(data, filename) { - _jobname = filename; - Gearbox = JSONInputDataFactory.ReadGearbox( - Path.Combine(BasePath, Body[JsonKeys.Vehicle_GearboxFile].Value<string>())); + _jobname = Path.GetFileName(filename); + var gearboxFile = Body[JsonKeys.Vehicle_GearboxFile].Value<string>(); + if (!EmptyOrInvalidFileName(gearboxFile)) { + Gearbox = JSONInputDataFactory.ReadGearbox(Path.Combine(BasePath, gearboxFile)); + } var axleGear = Gearbox as IAxleGearInputData; if (axleGear != null) { AxleGear = axleGear; } Engine = JSONInputDataFactory.ReadEngine( Path.Combine(BasePath, Body[JsonKeys.Vehicle_EngineFile].Value<string>())); - VehicleData = JSONInputDataFactory.ReadJsonVehicle( - Path.Combine(BasePath, Body[JsonKeys.Vehicle_VehicleFile].Value<string>())); + var vehicleFile = Body[JsonKeys.Vehicle_VehicleFile].Value<string>(); + if (!EmptyOrInvalidFileName(vehicleFile)) { + VehicleData = JSONInputDataFactory.ReadJsonVehicle( + Path.Combine(BasePath, vehicleFile)); + } + var retarder = VehicleData as IRetarderInputData; if (retarder != null) { Retarder = retarder; @@ -143,7 +156,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON get { return Body[JsonKeys.Job_Cycles].Select(cycle => new CycleInputData() { - Name = cycle.Value<string>(), + Name = Path.GetFileNameWithoutExtension(cycle.Value<string>()), CycleData = VectoCSVFile.Read(Path.Combine(BasePath, cycle.Value<string>())) }).Cast<ICycleData>().ToList(); } @@ -227,8 +240,16 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON { var retVal = new List<IAuxiliaryInputData>(); foreach (var aux in Body["Aux"]) { - var auxData = new AuxiliaryDataInputData(); - var stream = new StreamReader(aux["Path"].Value<string>()); + var auxData = new AuxiliaryDataInputData { + ID = aux["ID"].Value<string>(), + Type = aux["Type"].Value<string>(), + Technology = aux["Technology"].Value<string>() + }; + var auxFile = aux["Path"].Value<string>(); + if (EmptyOrInvalidFileName(auxFile)) { + continue; + } + var stream = new StreamReader(Path.Combine(BasePath, auxFile)); stream.ReadLine(); // skip header "Transmission ration to engine rpm [-]" auxData.TransmissionRatio = stream.ReadLine().IndulgentParse(); stream.ReadLine(); // skip header "Efficiency to engine [-]" diff --git a/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs b/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs index 10ba4d2f48e0ddf23834d7dba0a19f275dd54e11..ff8ddc16c0f0beca11c841859479423c7fcc442e 100644 --- a/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs +++ b/VectoCore/InputData/FileIO/JSON/JSONVehicleData.cs @@ -61,7 +61,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON public CrossWindCorrectionMode CrossWindCorrectionMode { - get { throw new NotImplementedException(); } + get { return CrossWindCorrectionModeHelper.Parse(Body["CdCorrMode"].Value<string>()); } } public string Rim diff --git a/VectoCore/InputData/FileIO/Reader/DataObjectAdaper/AbstractSimulationDataAdapter.cs b/VectoCore/InputData/FileIO/Reader/DataObjectAdaper/AbstractSimulationDataAdapter.cs index 531fca73892fc381907c007eb2a7a24a82c7dfbf..cea74a4a0763a3c63db13b573ac2b4cb4c132cf4 100644 --- a/VectoCore/InputData/FileIO/Reader/DataObjectAdaper/AbstractSimulationDataAdapter.cs +++ b/VectoCore/InputData/FileIO/Reader/DataObjectAdaper/AbstractSimulationDataAdapter.cs @@ -54,7 +54,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.Reader.DataObjectAdaper SavedInDeclarationMode = data.SavedInDeclarationMode, ModelName = data.ModelName, Displacement = data.Displacement, - IdleSpeed = data.IdleSpeed.Value().RPMtoRad(), + IdleSpeed = data.IdleSpeed, ConsumptionMap = FuelConsumptionMap.Create(data.FuelConsumptionMap), WHTCUrban = data.WHTCUrban, WHTCMotorway = data.WHTCMotorway, @@ -86,6 +86,9 @@ namespace TUGraz.VectoCore.InputData.FileIO.Reader.DataObjectAdaper /// <returns>A combined EngineFullLoadCurve with the minimum full load torque over all inputs curves.</returns> internal static EngineFullLoadCurve IntersectFullLoadCurves(EngineFullLoadCurve engineCurve, FullLoadCurve gearCurve) { + if (gearCurve == null) { + return engineCurve; + } var entries = gearCurve.FullLoadEntries.Concat(engineCurve.FullLoadEntries) .Select(entry => entry.EngineSpeed) .OrderBy(engineSpeed => engineSpeed) diff --git a/VectoCore/InputData/FileIO/Reader/DataObjectAdaper/DeclarationDataAdapter.cs b/VectoCore/InputData/FileIO/Reader/DataObjectAdaper/DeclarationDataAdapter.cs index 24efa1a9569f6d66e0c07a3ac9ff7c01b6b4dd5a..56ad24e0fe69c3ad50e75443f1ff2bc6f1ab0afe 100644 --- a/VectoCore/InputData/FileIO/Reader/DataObjectAdaper/DeclarationDataAdapter.cs +++ b/VectoCore/InputData/FileIO/Reader/DataObjectAdaper/DeclarationDataAdapter.cs @@ -175,7 +175,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.Reader.DataObjectAdaper foreach (var auxData in auxInputData.Auxiliaries) { var aux = new VectoRunData.AuxData { DemandType = AuxiliaryDemandType.Constant }; - switch (auxData.Type) { + switch (AuxiliaryTypeHelper.Parse(auxData.Type)) { case AuxiliaryType.Fan: aux.PowerDemand = DeclarationData.Fan.Lookup(mission, auxData.Technology); aux.ID = Constants.Auxiliaries.IDs.Fan; @@ -208,5 +208,10 @@ namespace TUGraz.VectoCore.InputData.FileIO.Reader.DataObjectAdaper { Log.Warn("{0} not in Declaration Mode!", inputData); } + + public RetarderData CreateRetarderData(IRetarderInputData retarder) + { + return SetCommonRetarderData(retarder); + } } } \ No newline at end of file diff --git a/VectoCore/InputData/FileIO/Reader/DataObjectAdaper/EngineeringDataAdapter.cs b/VectoCore/InputData/FileIO/Reader/DataObjectAdaper/EngineeringDataAdapter.cs index 2d90464818d61595f7d48e83845169befd67c2a4..5f3a1aab844ebf4dd1039830c46966255ab71d72 100644 --- a/VectoCore/InputData/FileIO/Reader/DataObjectAdaper/EngineeringDataAdapter.cs +++ b/VectoCore/InputData/FileIO/Reader/DataObjectAdaper/EngineeringDataAdapter.cs @@ -162,5 +162,9 @@ namespace TUGraz.VectoCore.InputData.FileIO.Reader.DataObjectAdaper } //================================= + public RetarderData CreateRetarderData(IRetarderInputData retarder) + { + return SetCommonRetarderData(retarder); + } } } \ No newline at end of file diff --git a/VectoCore/InputData/FileIO/Reader/Impl/DeclarationModeVectoRunDataFactory.cs b/VectoCore/InputData/FileIO/Reader/Impl/DeclarationModeVectoRunDataFactory.cs index a3c2f24cffbd988d5429e0b52c8e913f64f65e41..fa1eb4c339f9835c657fc69d41eabfe20bfc6b8e 100644 --- a/VectoCore/InputData/FileIO/Reader/Impl/DeclarationModeVectoRunDataFactory.cs +++ b/VectoCore/InputData/FileIO/Reader/Impl/DeclarationModeVectoRunDataFactory.cs @@ -63,10 +63,12 @@ namespace TUGraz.VectoCore.InputData.FileIO.Reader.Impl VehicleData = dao.CreateVehicleData(InputDataProvider.VehicleInputData, mission, loading.Value), EngineData = engineData, GearboxData = dao.CreateGearboxData(InputDataProvider.GearboxInputData, engineData), + AxleGearData = dao.CreateAxleGearData(InputDataProvider.AxleGearInputData), Aux = dao.CreateAuxiliaryData(InputDataProvider.AuxiliaryInputData(), mission.MissionType, segment.VehicleClass), Cycle = cycle, + Retarder = dao.CreateRetarderData(InputDataProvider.RetarderInputData), DriverData = driverdata, IsEngineOnly = false, // InputDataProvider.JobInputData().EngineOnlyMode, JobName = InputDataProvider.JobInputData().JobName, diff --git a/VectoCore/InputData/FileIO/Reader/Impl/EngineOnlyVectoRunDataFactory.cs b/VectoCore/InputData/FileIO/Reader/Impl/EngineOnlyVectoRunDataFactory.cs index 0b285ec17d15cafde26f600a594037a3c4d631cb..d7dc46563772289eae4348c64192526452823d38 100644 --- a/VectoCore/InputData/FileIO/Reader/Impl/EngineOnlyVectoRunDataFactory.cs +++ b/VectoCore/InputData/FileIO/Reader/Impl/EngineOnlyVectoRunDataFactory.cs @@ -12,7 +12,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.Reader.Impl { internal EngineOnlyVectoRunDataFactory(IInputDataProvider dataProvider) : base(dataProvider) {} - public new IEnumerable<VectoRunData> NextRun() + public override IEnumerable<VectoRunData> NextRun() { if (InputDataProvider == null) { Log.Warn("No valid data provider given"); diff --git a/VectoCore/InputData/FileIO/Reader/Impl/EngineeringModeVectoRunDataFactory.cs b/VectoCore/InputData/FileIO/Reader/Impl/EngineeringModeVectoRunDataFactory.cs index efc3932b5560dbf167abf5bd7a847a2da2318aab..6dc9a3456bbb2ea92e702fb98c6871688502f316 100644 --- a/VectoCore/InputData/FileIO/Reader/Impl/EngineeringModeVectoRunDataFactory.cs +++ b/VectoCore/InputData/FileIO/Reader/Impl/EngineeringModeVectoRunDataFactory.cs @@ -94,7 +94,7 @@ namespace TUGraz.VectoCore.InputData.FileIO.Reader.Impl /// Iterate over all cycles defined in the JobFile and create a container with all data required for creating a simulation run /// </summary> /// <returns>VectoRunData instance for initializing the powertrain.</returns> - public IEnumerable<VectoRunData> NextRun() + public virtual IEnumerable<VectoRunData> NextRun() { var dao = new EngineeringDataAdapter(); var driver = dao.CreateDriverData(InputDataProvider.DriverInputData); @@ -106,9 +106,11 @@ namespace TUGraz.VectoCore.InputData.FileIO.Reader.Impl JobName = InputDataProvider.JobInputData().JobName, EngineData = engineData, GearboxData = dao.CreateGearboxData(InputDataProvider.GearboxInputData, engineData), + AxleGearData = dao.CreateAxleGearData(InputDataProvider.AxleGearInputData), VehicleData = dao.CreateVehicleData(InputDataProvider.VehicleInputData), DriverData = driver, Aux = dao.CreateAuxiliaryData(InputDataProvider.AuxiliaryInputData()), + Retarder = dao.CreateRetarderData(InputDataProvider.RetarderInputData), // TODO: distance or time-based cycle! Cycle = DrivingCycleDataReader.Create(cycle.CycleData, cycle.Name, CycleType.DistanceBased), diff --git a/VectoCore/InputData/Impl/InputData.cs b/VectoCore/InputData/Impl/InputData.cs index 95bb700367fd26542374d01d6911cb9077c3a41b..941dd5ace6dc54fbf8dba02d0df938d49730c51f 100644 --- a/VectoCore/InputData/Impl/InputData.cs +++ b/VectoCore/InputData/Impl/InputData.cs @@ -49,7 +49,7 @@ namespace TUGraz.VectoCore.InputData.Impl public string ID { get; internal set; } - public AuxiliaryType Type { get; internal set; } + public string Type { get; internal set; } public string Technology { get; internal set; } diff --git a/VectoCore/InputData/InputData.cs b/VectoCore/InputData/InputData.cs index 2263d24cf09d3b51b50b076bb89cc987380754c1..eb14b4d05a8a22a1fbeae6d9f00b1b3c6e5aa9f8 100644 --- a/VectoCore/InputData/InputData.cs +++ b/VectoCore/InputData/InputData.cs @@ -151,7 +151,7 @@ namespace TUGraz.VectoCore.InputData string ModelName { get; } CubicMeter Displacement { get; } - RoundsPerMinute IdleSpeed { get; } + PerSecond IdleSpeed { get; } /// <summary> /// engine speed in rpm, torque in NM, fuel consumption in g/h @@ -220,7 +220,7 @@ namespace TUGraz.VectoCore.InputData string ID { get; } - AuxiliaryType Type { get; } + string Type { get; } string Technology { get; } diff --git a/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs b/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs index b6b838ae6668bb639a0822aeb00149935ca9c8fb..5d49290167770b01de8bd7cd73c4f15fa5b14777 100644 --- a/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs +++ b/VectoCore/Models/Simulation/Impl/SimulatorFactory.cs @@ -28,11 +28,12 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl private FactoryMode _mode; - public SimulatorFactory(FactoryMode mode, IInputDataProvider dataProvider, IReportWriter writer) + public SimulatorFactory(FactoryMode mode, IInputDataProvider dataProvider, IOutputDataWriter writer) { Log.Fatal("########## VectoCore Version {0} ##########", Assembly.GetExecutingAssembly().GetName().Version); JobNumber = Interlocked.Increment(ref _jobNumberCounter); _mode = mode; + ModWriter = writer; switch (mode) { case FactoryMode.DeclarationMode: var report = new DeclarationReport(WindowsIdentity.GetCurrent().Name, @@ -56,7 +57,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl public SummaryDataContainer SumData { get; set; } - public IModalDataWriter ModWriter { get; set; } + public IOutputDataWriter ModWriter { get; private set; } public int JobNumber { get; set; } diff --git a/VectoCore/OutputData/FileIO/FileOutputWriter.cs b/VectoCore/OutputData/FileIO/FileOutputWriter.cs index f6a3895072168d1e325d1ea8ed2f9541f90eb9dc..9f6df3241c4a5a5958fa0e505115125911be51bc 100644 --- a/VectoCore/OutputData/FileIO/FileOutputWriter.cs +++ b/VectoCore/OutputData/FileIO/FileOutputWriter.cs @@ -9,7 +9,7 @@ using TUGraz.VectoCore.Utils; namespace TUGraz.VectoCore.OutputData.FileIO { - public class FileOutputWriter : LoggingObject, IModalDataWriter, ISummaryWriter, IReportWriter + public class FileOutputWriter : LoggingObject, IOutputDataWriter { private readonly string _basePath; private readonly string _jobName; diff --git a/VectoCore/OutputData/IDataWriter.cs b/VectoCore/OutputData/IDataWriter.cs index 4e15d411b5a9396f2af71ea8a709856572da2a5a..67584112e84edb79949f338a952913f65b71e496 100644 --- a/VectoCore/OutputData/IDataWriter.cs +++ b/VectoCore/OutputData/IDataWriter.cs @@ -4,6 +4,8 @@ using TUGraz.VectoCore.Models.Simulation.Data; namespace TUGraz.VectoCore.OutputData { + public interface IOutputDataWriter : IModalDataWriter, ISummaryWriter, IReportWriter {} + public interface IModalDataWriter { void WriteModData(string runName, string cycleName, string runSuffix, DataTable modData); diff --git a/VectoCore/OutputData/IModalDataContainer.cs b/VectoCore/OutputData/IModalDataContainer.cs index 563a260811112e99590f2a9ca90f4833fcc5eb3d..c9f169a12831b03654aa06f85a673ab0a4eb7bbc 100644 --- a/VectoCore/OutputData/IModalDataContainer.cs +++ b/VectoCore/OutputData/IModalDataContainer.cs @@ -137,7 +137,7 @@ namespace TUGraz.VectoCore.OutputData { var stopTime = data.GetValues<MeterPerSecond>(ModalResultField.v_act) .Zip(data.SimulationIntervals(), (v, dt) => new { v, dt }) - .Where(x => x.v < 0.1).Select(x => x.dt).Sum(); + .Where(x => x.v < 0.1).Select(x => x.dt).Sum() ?? 0.SI<Second>(); return 100 * (stopTime / data.Duration()).Cast<Scalar>(); } diff --git a/VectoCore/OutputData/SummaryDataContainer.cs b/VectoCore/OutputData/SummaryDataContainer.cs index 293b03a30a6f66d1d7ac4c269bbff5d53ce1f5d3..99bcd7fcf1943d9ee0496ea0359f3d3d1893dfba 100644 --- a/VectoCore/OutputData/SummaryDataContainer.cs +++ b/VectoCore/OutputData/SummaryDataContainer.cs @@ -144,7 +144,7 @@ namespace TUGraz.VectoCore.OutputData row[PNEG] = data.EnginePowerNegativeAverage().ConvertTo().Kilo.Watt; row[FCFINAL] = data.FuelConsumptionFinal().ConvertTo().Gramm.Per.Kilo.Meter; row[FCFINAL_LITERPER100KM] = data.FuelConsumptionFinalLiterPer100Kilometer(); - if (!vehicleLoading.IsEqual(0)) { + if (vehicleLoading != null && !vehicleLoading.IsEqual(0)) { row[FCFINAL_LITERPER100TKM] = data.FuelConsumptionFinalLiterPer100Kilometer() / vehicleLoading.ConvertTo().Ton; } row[FCMAP] = data.FuelConsumptionPerSecond().ConvertTo().Gramm.Per.Hour; @@ -154,7 +154,7 @@ namespace TUGraz.VectoCore.OutputData row[FCWHTCC] = data.FuelConsumptionWHTCCorrectedPerSecond().ConvertTo().Gramm.Per.Hour; row[FCWHTCCKM] = data.FuelConsumptionWHTCCorrected().ConvertTo().Gramm.Per.Kilo.Meter; row[CO2KM] = data.CO2PerMeter().ConvertTo().Gramm.Per.Kilo.Meter; - if (!vehicleLoading.IsEqual(0)) { + if (vehicleLoading != null && !vehicleLoading.IsEqual(0)) { row[CO2TKM] = data.CO2PerMeter().ConvertTo().Gramm.Per.Kilo.Meter / vehicleLoading.ConvertTo().Ton; } row[PWHEELPOS] = data.PowerWheelPositive().ConvertTo().Kilo.Watt; diff --git a/VectoCore/Utils/VectoCSVFile.cs b/VectoCore/Utils/VectoCSVFile.cs index 388e743c9ff28a111bc768e54feaab63e1c1c1a2..67f9f6968644aa3b0d58c38a808f4931b0ca0f42 100644 --- a/VectoCore/Utils/VectoCSVFile.cs +++ b/VectoCore/Utils/VectoCSVFile.cs @@ -150,16 +150,25 @@ namespace TUGraz.VectoCore.Utils /// <param name="table">The Datatable.</param> public static void Write(string fileName, DataTable table) { - Write(new StreamWriter(fileName), table); + var stream = new StreamWriter(fileName); + Write(stream, table); + stream.Close(); } + /// <summary> + /// writes the datatable to a csv file. + /// Uses the column caption as header (with fallback to column name) for the csv header. + /// <remarks>Note: the callee has to make suree to close the stream after use.</remarks> + /// </summary> + /// <param name="writer"></param> + /// <param name="table"></param> public static void Write(StreamWriter writer, DataTable table) { if (writer == null) { return; } var header = table.Columns.Cast<DataColumn>().Select(col => col.Caption ?? col.ColumnName); - writer.WriteLineAsync(string.Join(Delimiter.ToString(), header)); + writer.WriteLine(string.Join(Delimiter.ToString(), header)); foreach (DataRow row in table.Rows) { var row1 = row; @@ -175,7 +184,7 @@ namespace TUGraz.VectoCore.Utils : string.Format(CultureInfo.InvariantCulture, "{0}", item)); }); - writer.WriteLineAsync(string.Join(Delimiter.ToString(), formattedList)); + writer.WriteLine(string.Join(Delimiter.ToString(), formattedList)); } } } diff --git a/VectoCore/VectoCore.csproj b/VectoCore/VectoCore.csproj index 502f85d008420c7ad2bfcc73a2000df84675f53f..2c6e1b1c6b477533a1edab83997d5431e14381f7 100644 --- a/VectoCore/VectoCore.csproj +++ b/VectoCore/VectoCore.csproj @@ -117,10 +117,10 @@ <Compile Include="InputData\FileIO\EngineeringFile\GearboxFileEng.cs" /> <Compile Include="InputData\FileIO\EngineeringFile\JobFileEng.cs" /> <Compile Include="InputData\FileIO\EngineeringFile\VehicleFileEng.cs" /> + <Compile Include="InputData\FileIO\Reader\DataObjectAdaper\EngineOnlyDataAdapter.cs" /> <Compile Include="InputData\Impl\InputData.cs" /> <Compile Include="InputData\FileIO\InputFileReader.cs" /> <Compile Include="InputData\FileIO\JsonDataHeader.cs" /> - <Compile Include="InputData\FileIO\JsonInputDataProviderDEPRECATED.cs" /> <Compile Include="InputData\FileIO\JSON\JSONEngineData.cs" /> <Compile Include="InputData\FileIO\JSON\JSONGearboxData.cs" /> <Compile Include="InputData\FileIO\JSON\JSONInputData.cs" /> diff --git a/VectoCoreTest/Integration/DeclarationReportTest.cs b/VectoCoreTest/Integration/DeclarationReportTest.cs index c539159d289c4e05fa8c81401b3b88891362ab37..6633bde89c741f93f3dbc635a490e71be81164ee 100644 --- a/VectoCoreTest/Integration/DeclarationReportTest.cs +++ b/VectoCoreTest/Integration/DeclarationReportTest.cs @@ -15,18 +15,20 @@ namespace TUGraz.VectoCore.Tests.Integration [TestMethod] public void DeclarationReport_Test() { - if (File.Exists("job-report.vsum")) { - File.Delete("job-report.vsum"); + const string jobFile = @"TestData\Jobs\job-report.vecto"; + + if (File.Exists(@"TestData\Jobs\job-report.vsum")) { + File.Delete(@"TestData\Jobs\job-report.vsum"); } - if (File.Exists("job-report.pdf")) { - File.Delete("job-report.pdf"); + if (File.Exists(@"TestData\Jobs\job-report.pdf")) { + File.Delete(@"TestData\Jobs\job-report.pdf"); } - var fileWriter = new FileOutputWriter("job-report", ""); + var fileWriter = new FileOutputWriter(jobFile); var sumData = new SummaryDataContainer(fileWriter); var jobContainer = new JobContainer(sumData); - var inputData = JSONInputDataFactory.ReadJsonJob(@"TestData\Jobs\job-report.vecto"); + var inputData = JSONInputDataFactory.ReadJsonJob(jobFile); var factory = new SimulatorFactory(SimulatorFactory.FactoryMode.DeclarationMode, inputData, fileWriter); jobContainer.AddRuns(factory); @@ -34,7 +36,7 @@ namespace TUGraz.VectoCore.Tests.Integration jobContainer.WaitFinished(); - Assert.IsTrue(File.Exists(@"job-report.vsum")); + Assert.IsTrue(File.Exists(@"TestData\Jobs\job-report.vsum")); Assert.IsTrue(File.Exists(@"TestData\Jobs\job-report.pdf")); } } diff --git a/VectoCoreTest/Integration/EngineOnlyCycle/EngineOnlyCycleTest.cs b/VectoCoreTest/Integration/EngineOnlyCycle/EngineOnlyCycleTest.cs index 2f2b85ab158fc03b3990667fb4120df03d974eb0..fb2ed49904a0954f7a06de16c1d5f6197f72216a 100644 --- a/VectoCoreTest/Integration/EngineOnlyCycle/EngineOnlyCycleTest.cs +++ b/VectoCoreTest/Integration/EngineOnlyCycle/EngineOnlyCycleTest.cs @@ -2,6 +2,7 @@ using System.Data; using System.IO; using System.Linq; using Microsoft.VisualStudio.TestTools.UnitTesting; +using TUGraz.VectoCore.Configuration; using TUGraz.VectoCore.InputData.FileIO.Reader; using TUGraz.VectoCore.InputData.FileIO.Reader.Impl; using TUGraz.VectoCore.Models.Connector.Ports.Impl; @@ -46,7 +47,7 @@ namespace TUGraz.VectoCore.Tests.Integration.EngineOnlyCycle var absTime = 0.SI<Second>(); var dt = 1.SI<Second>(); - var modFile = Path.GetRandomFileName(); // + ".vmod"; + var modFile = Path.GetFileNameWithoutExtension(Path.GetRandomFileName()); // + ".vmod"; var fileWriter = new FileOutputWriter(modFile, ""); var modData = new ModalDataContainer(modFile, fileWriter, SimulatorFactory.FactoryMode.EngineOnlyMode); @@ -63,7 +64,8 @@ namespace TUGraz.VectoCore.Tests.Integration.EngineOnlyCycle } modData.Finish(VectoRun.Status.Success); - ResultFileHelper.TestModFile(TestContext.DataRow["ModalResultFile"].ToString(), modFile); + ResultFileHelper.TestModFile(TestContext.DataRow["ModalResultFile"].ToString(), + modFile + Constants.FileExtensions.ModDataFile); } [TestMethod] diff --git a/VectoCoreTest/Integration/SimulationRuns/FullPowertrain.cs b/VectoCoreTest/Integration/SimulationRuns/FullPowertrain.cs index 6219663955f036026a92a959c7ccfc745249f418..563d047a9d6661af784df9f86fa3d61cc6b75258 100644 --- a/VectoCoreTest/Integration/SimulationRuns/FullPowertrain.cs +++ b/VectoCoreTest/Integration/SimulationRuns/FullPowertrain.cs @@ -253,18 +253,19 @@ namespace TUGraz.VectoCore.Tests.Integration.SimulationRuns [TestMethod] public void Test_FullPowerTrain_JobFile() { - var fileWriter = new FileOutputWriter("job", ""); + const string jobFile = @"TestData\job.vecto"; + var fileWriter = new FileOutputWriter(jobFile); var sumData = new SummaryDataContainer(fileWriter); var jobContainer = new JobContainer(sumData); - var inputData = JSONInputDataFactory.ReadJsonJob(@"TestData\job.vecto"); + var inputData = JSONInputDataFactory.ReadJsonJob(jobFile); var factory = new SimulatorFactory(SimulatorFactory.FactoryMode.EngineeringMode, inputData, fileWriter); jobContainer.AddRuns(factory); jobContainer.Execute(); jobContainer.WaitFinished(); - ResultFileHelper.TestSumFile(@"TestData\Results\Integration\job.vsum", @"job.vsum"); + ResultFileHelper.TestSumFile(@"TestData\Results\Integration\job.vsum", @"TestData\job.vsum"); ResultFileHelper.TestModFile(@"TestData\Results\Integration\job_1-Gear-Test-dist.vmod", @"TestData\job_1-Gear-Test-dist.vmod", testRowCount: false); diff --git a/VectoCoreTest/Models/Simulation/SimulationTests.cs b/VectoCoreTest/Models/Simulation/SimulationTests.cs index fbffe930362aca6baf52aef5b7d0170f9bcc9733..d06e38885058920d6ae7fbacba1872b9242e9202 100644 --- a/VectoCoreTest/Models/Simulation/SimulationTests.cs +++ b/VectoCoreTest/Models/Simulation/SimulationTests.cs @@ -89,11 +89,12 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation [TestMethod] public void Test_VectoJob() { - var fileWriter = new FileOutputWriter(@"24t Coach.vsum", ""); + var jobFile = @"TestData\Jobs\24t Coach EngineOnly.vecto"; + var fileWriter = new FileOutputWriter(jobFile); var sumWriter = new SummaryDataContainer(fileWriter); var jobContainer = new JobContainer(sumWriter); - var inputData = JSONInputDataFactory.ReadJsonJob(@"TestData\Jobs\24t Coach EngineOnly.vecto"); + var inputData = JSONInputDataFactory.ReadJsonJob(jobFile); var runsFactory = new SimulatorFactory(SimulatorFactory.FactoryMode.EngineOnlyMode, inputData, fileWriter); diff --git a/VectoCoreTest/Models/SimulationComponent/GearboxTest.cs b/VectoCoreTest/Models/SimulationComponent/GearboxTest.cs index 3b56f72e028c74266e93370879720faed969ff7f..0395fac3fd4307805fd1947bb6d6869e9ef590a4 100644 --- a/VectoCoreTest/Models/SimulationComponent/GearboxTest.cs +++ b/VectoCoreTest/Models/SimulationComponent/GearboxTest.cs @@ -107,7 +107,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent var wrongFile = @"TestData\Components\24t Coach LessThanTwoGears.vgbx"; AssertHelper.Exception<VectoSimulationException>( () => MockSimulationDataFactory.CreateGearboxDataFromFile(wrongFile, EngineDataFile), - "At least two Gear-Entries must be defined in Gearbox: 1 Axle-Gear and at least 1 Gearbox-Gear!"); + "At least one Gear-Entry must be defined in Gearbox!"); } [TestMethod] diff --git a/VectoCoreTest/Models/SimulationComponent/VehicleTest.cs b/VectoCoreTest/Models/SimulationComponent/VehicleTest.cs index 0353577558c6d3f94816896eb235216c9554cb3c..b7f1d6f257a5ceca1c19417d90c82d6f112d8f10 100644 --- a/VectoCoreTest/Models/SimulationComponent/VehicleTest.cs +++ b/VectoCoreTest/Models/SimulationComponent/VehicleTest.cs @@ -27,7 +27,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent //var reader = new EngineeringModeSimulationDataReader(); var vehicleData = MockSimulationDataFactory.CreateVehicleDataFromFile(VehicleDataFileCoach); //VehicleData.ReadFromFile(VehicleDataFile); - //vehicleData.CrossWindCorrection = VehicleData.CrossWindCorrectionMode.NoCorrection; + //vehicleData.CrossWindCorrectionMode = CrossWindCorrectionMode.NoCorrection; var vehicle = new Vehicle(container, vehicleData); var mockPort = new MockFvOutPort(); diff --git a/VectoCoreTest/Models/SimulationComponentData/GearboxDataTest.cs b/VectoCoreTest/Models/SimulationComponentData/GearboxDataTest.cs index 668c1c1f3ebccb4b531d783dcfac1d6fbdebee4d..129af00859f5a321f8dc74ab92ad8fbf089646a2 100644 --- a/VectoCoreTest/Models/SimulationComponentData/GearboxDataTest.cs +++ b/VectoCoreTest/Models/SimulationComponentData/GearboxDataTest.cs @@ -20,7 +20,7 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData [TestMethod] public void TestGearboxDataReadTest() { - var gbxData = MockSimulationDataFactory.CreateGearboxDataFromFile(GearboxFile, EngineFile); + var gbxData = MockSimulationDataFactory.CreateGearboxDataFromFile(GearboxFile, EngineFile, false); Assert.AreEqual(GearboxType.AMT, gbxData.Type); Assert.AreEqual(1.0, gbxData.TractionInterruption.Value(), 0.0001); diff --git a/VectoCoreTest/Utils/MockSimulationDataFactory.cs b/VectoCoreTest/Utils/MockSimulationDataFactory.cs index d7d9ed40bd19540ac7a9b8a313fd445827e0853f..000c45b9b3a171bd46830dffad6a133e4d8be0cb 100644 --- a/VectoCoreTest/Utils/MockSimulationDataFactory.cs +++ b/VectoCoreTest/Utils/MockSimulationDataFactory.cs @@ -12,14 +12,21 @@ namespace TUGraz.VectoCore.Tests.Utils /// </summary> /// <param name="gearBoxFile"></param> /// <param name="engineFile"></param> + /// <param name="declarationMode"></param> /// <returns>GearboxData instance</returns> - public static GearboxData CreateGearboxDataFromFile(string gearBoxFile, string engineFile) + public static GearboxData CreateGearboxDataFromFile(string gearBoxFile, string engineFile, bool declarationMode = true) { var gearboxInput = JSONInputDataFactory.ReadGearbox(gearBoxFile); var engineInput = JSONInputDataFactory.ReadEngine(engineFile); - var dao = new DeclarationDataAdapter(); - var engineData = dao.CreateEngineData(engineInput); - return dao.CreateGearboxData(gearboxInput, engineData); + if (declarationMode) { + var dao = new DeclarationDataAdapter(); + var engineData = dao.CreateEngineData(engineInput); + return dao.CreateGearboxData(gearboxInput, engineData); + } else { + var dao = new EngineeringDataAdapter(); + var engineData = dao.CreateEngineData(engineInput); + return dao.CreateGearboxData(gearboxInput, engineData); + } } public static AxleGearData CreateAxleGearDataFromFile(string axleGearFile)