From 1a9a5b4722d4b467e9e1bc9e65532a7d3b3da298 Mon Sep 17 00:00:00 2001
From: "VKMTHD\\haraldmartini" <harald.martini@student.tugraz.at>
Date: Fri, 20 Jan 2023 16:31:16 +0100
Subject: [PATCH] extrapolate iepc map with factor 1.2 from fld entry

---
 .../Reader/ComponentData/IEPCMapReader.cs     | 118 ++-
 .../ElectricMachinesDataAdapter.cs            |   6 +-
 .../SimulationComponents/EngineDataAdapter.cs |   9 +
 .../ElectricMotorRatedSpeedHelper.cs          |  71 ++
 .../InputData/IEPCMapReaderTest.cs            | 245 +++++
 .../ElectricMotorRatedSpeedHelperTest.cs      | 177 ++++
 ...C_Gbx3_1_different_number_of_points.viepco | 909 ++++++++++++++++++
 .../IEPC_Gbx3_1_following_curve.viepco        | 837 ++++++++++++++++
 .../IEPCMapReader/IEPC_Gbx3_FLD_max.viepcp    |  24 +
 VectoCore/VectoCoreTest/VectoCoreTest.csproj  |   9 +
 10 files changed, 2396 insertions(+), 9 deletions(-)
 create mode 100644 VectoCore/VectoCore/Models/SimulationComponent/Data/ElectricComponents/ElectricMotor/ElectricMotorRatedSpeedHelper.cs
 create mode 100644 VectoCore/VectoCoreTest/InputData/IEPCMapReaderTest.cs
 create mode 100644 VectoCore/VectoCoreTest/Models/Declaration/ElectricMotorRatedSpeedHelperTest.cs
 create mode 100644 VectoCore/VectoCoreTest/TestData/Components/IEPC/IEPCMapReader/IEPC_Gbx3_1_different_number_of_points.viepco
 create mode 100644 VectoCore/VectoCoreTest/TestData/Components/IEPC/IEPCMapReader/IEPC_Gbx3_1_following_curve.viepco
 create mode 100644 VectoCore/VectoCoreTest/TestData/Components/IEPC/IEPCMapReader/IEPC_Gbx3_FLD_max.viepcp

diff --git a/VectoCore/VectoCore/InputData/Reader/ComponentData/IEPCMapReader.cs b/VectoCore/VectoCore/InputData/Reader/ComponentData/IEPCMapReader.cs
index ee3b46524f..f6db8cf4b0 100644
--- a/VectoCore/VectoCore/InputData/Reader/ComponentData/IEPCMapReader.cs
+++ b/VectoCore/VectoCore/InputData/Reader/ComponentData/IEPCMapReader.cs
@@ -1,24 +1,31 @@
 using System;
 using System.Collections.Generic;
+using System.ComponentModel;
 using System.Data;
 using System.IO;
 using System.Linq;
 using TUGraz.VectoCommon.Exceptions;
 using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.Configuration;
+using TUGraz.VectoCore.Models.Declaration;
+using TUGraz.VectoCore.Models.SimulationComponent.Data.ElectricComponents.ElectricMotor;
 using TUGraz.VectoCore.Models.SimulationComponent.Data.ElectricMotor;
+using TUGraz.VectoCore.Models.SimulationComponent.Data.Engine;
 using TUGraz.VectoCore.Utils;
 
 namespace TUGraz.VectoCore.InputData.Reader.ComponentData
 {
 	public class IEPCMapReader
 	{
-		public static EfficiencyMap Create(Stream data, int count, double ratio)
+		public static EfficiencyMap Create(Stream data, int count, double ratio,
+			ElectricMotorFullLoadCurve fullLoadCurve)
 		{
-			return Create(VectoCSVFile.ReadStream(data), count, ratio);
+			return Create(VectoCSVFile.ReadStream(data), count, ratio, fullLoadCurve);
 		}
 
-		public static EfficiencyMap Create(DataTable data, int count, double ratio)
+		public static EfficiencyMap Create(DataTable data, int count, double ratio,
+			ElectricMotorFullLoadCurve fullLoadCurve)
 		{
 			var headerValid = HeaderIsValid(data.Columns);
 			if (!headerValid) {
@@ -33,7 +40,8 @@ namespace TUGraz.VectoCore.InputData.Reader.ComponentData
 				data.Columns[2].ColumnName = Fields.PowerElectrical;
 			}
 
-			var entries = (from DataRow row in data.Rows select CreateEntry(row, ratio)).ToList();
+			var entries = GetEntries(data, ratio);
+			entries = ExtendEfficiencyMap(entries, fullLoadCurve);
 			var entriesZero = GetEntriesAtZeroRpm(entries);
 
 			var delaunayMap = new DelaunayMap("ElectricMotorEfficiencyMap Mechanical to Electric");
@@ -64,7 +72,7 @@ namespace TUGraz.VectoCore.InputData.Reader.ComponentData
 			return retVal;
 		}
 
-		private static List<EfficiencyMap.Entry> GetEntriesAtZeroRpm(List<EfficiencyMap.Entry> entries)
+		private static List<EfficiencyMap.Entry> GetEntriesAtZeroRpm(IList<EfficiencyMap.Entry> entries)
 		{
 			// find entries at first grid point above 0. em-speed might vary slightly,
 			// so apply clustering, and use distance between first clusters to select all entries at lowest speed grid point
@@ -125,6 +133,98 @@ namespace TUGraz.VectoCore.InputData.Reader.ComponentData
 			return entriesZero;
 		}
 
+		private static IList<EfficiencyMap.Entry> ExtendEfficiencyMap(
+			IList<EfficiencyMap.Entry> entries, ElectricMotorFullLoadCurve fullLoadCurve)
+		{
+			var clusterer = new MeanShiftClustering();
+			var clusterTolerance = 1e-1;
+			var extrapolationfactor = Constants.PowerMapSettings.EfficiencyMapExtrapolationFactor;
+
+			//ignore entries where speed is 0, added manually to speed bucket (clustering doesn't work because the distance is too small)
+			var cluster = clusterer.FindClusters(entries.Where(x => x.MotorSpeed.IsGreater(0)).Select(x => x.MotorSpeed.Value()).ToArray(), clusterTolerance);
+			var minDistance = cluster.Pairwise((x, y) => Math.Abs(y - x)).Min();
+
+			var speedBuckets = new Dictionary<PerSecond, List<EfficiencyMap.Entry>>(cluster.Length + 1);
+			
+			foreach (var c in cluster)
+			{
+				speedBuckets.Add(c.SI<PerSecond>(), new List<EfficiencyMap.Entry>());
+			}
+			foreach (var entry in entries.Where(x => x.MotorSpeed.IsGreater(0)))
+			{
+				foreach (var speed in speedBuckets.Keys.ToDouble())
+				{
+					if (Math.Abs(speed - entry.MotorSpeed.Value()) < minDistance / 2.0) {
+						speedBuckets[speed.SI<PerSecond>()].Add(entry);
+					}
+				}
+			}
+
+			//Add zero rpm entries
+			speedBuckets.Add(0.SI<PerSecond>(), new List<EfficiencyMap.Entry>());
+			foreach (var entry in entries.Where(x => x.MotorSpeed.IsEqual(0))) {
+				speedBuckets[0.SI<PerSecond>()].Add(entry);
+			}
+
+
+			
+			var maxTargetTorque = fullLoadCurve.MaxGenerationTorque * extrapolationfactor;
+			var minTargetTorque = fullLoadCurve.MaxDriveTorque * extrapolationfactor;
+			var ratedSpeed = ElectricMotorRatedSpeedHelper.GetRatedSpeed(fullLoadCurve.FullLoadEntries,
+				e => e.MotorSpeed, e => e.FullDriveTorque);
+			PerSecond prevSpeed = null;
+			foreach (var speedBucket in speedBuckets.OrderBy(x => x.Key))
+			{
+				var maxRecuperationEntry = speedBucket.Value.MaxBy(x => x.Torque);
+				var maxDriveEntry = speedBucket.Value.MinBy(x => x.Torque); //drive torque < 0
+				var recuperationFactor = maxTargetTorque / maxRecuperationEntry.Torque;
+				var driveFactor = minTargetTorque / maxDriveEntry.Torque;
+
+				if (!recuperationFactor.IsSmallerOrEqual(1)) {
+					var nrExtrapolationPointsRecuperation = (uint)Math.Ceiling(speedBucket.Value.Count(x => x.Torque.IsGreater(0)) * (recuperationFactor - 1));
+					for (var i = 1; i <= nrExtrapolationPointsRecuperation; i++)
+					{
+						var factor = CalculateExtrapolationFactor(recuperationFactor, i, nrExtrapolationPointsRecuperation);
+
+						entries.Add(new EfficiencyMap.Entry(speedBucket.Key, maxRecuperationEntry.Torque * factor, maxRecuperationEntry.PowerElectrical * factor));
+					}
+				}
+
+				if (!driveFactor.IsSmallerOrEqual(1)) {
+					var nrExtrapolationPointsDrive = (uint)Math.Ceiling(speedBucket.Value.Count(x => x.Torque.IsSmaller(0)) * (driveFactor - 1));
+
+					for (var i = 1; i <= nrExtrapolationPointsDrive; i++)
+					{
+						var factor = CalculateExtrapolationFactor(driveFactor, i, nrExtrapolationPointsDrive);
+
+						entries.Add(new EfficiencyMap.Entry(speedBucket.Key, maxDriveEntry.Torque * factor, maxDriveEntry.PowerElectrical * factor));
+					}
+				}
+
+
+				if (prevSpeed != null && prevSpeed.IsGreaterOrEqual(ratedSpeed))
+				{
+					//update target values for next speed entry, 1 entry after rated speed should still be extrapolated to maxtorque * 1.2
+					maxTargetTorque = fullLoadCurve.FullGenerationTorque(speedBucket.Key) * extrapolationfactor;
+					minTargetTorque = fullLoadCurve.FullLoadDriveTorque(speedBucket.Key) * extrapolationfactor;
+				}
+				prevSpeed = speedBucket.Key;
+			}
+
+			return entries;
+		}
+
+		private static Scalar CalculateExtrapolationFactor(Scalar targetFactor, int currentStep,
+			uint nrOfSteps)
+		{
+			if (currentStep < 1) {
+				throw new ArgumentException($"{nameof(currentStep)} must be >= 1");
+			}
+			var factor = 1 + ((targetFactor - 1)) * (currentStep / (double)nrOfSteps);
+			return factor;
+		}
+
+
 		private static EfficiencyMap.Entry CreateEntry(DataRow row, double ratio)
 		{
 			return new EfficiencyMap.Entry(
@@ -133,6 +233,10 @@ namespace TUGraz.VectoCore.InputData.Reader.ComponentData
 				powerElectrical: row.ParseDouble(Fields.PowerElectrical).SI<Watt>());
 		}
 
+		internal static IList<EfficiencyMap.Entry> GetEntries(DataTable data, double ratio)
+		{
+			return (from DataRow row in data.Rows select CreateEntry(row, ratio)).ToList();
+		}
 
 		private static bool HeaderIsValid(DataColumnCollection columns)
 		{
@@ -142,8 +246,8 @@ namespace TUGraz.VectoCore.InputData.Reader.ComponentData
 
 		public static class Fields
 		{
-			public const string MotorSpeed = "n_out";
-			public const string Torque = "T_out";
+			public const string MotorSpeed = "n";// = "n_out";
+			public const string Torque = "T";// "_out";
 			public const string PowerElectrical = "P_el";
 		}
 
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/ElectricMachinesDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/ElectricMachinesDataAdapter.cs
index 0c37935c79..0486765ef3 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/ElectricMachinesDataAdapter.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/ElectricMachinesDataAdapter.cs
@@ -282,16 +282,18 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 			foreach (var entry in iepc.VoltageLevels.OrderBy(x => x.VoltageLevel))
 			{
 				var effMap = new Dictionary<uint, EfficiencyMap>();
+				var fldCurve =
+					IEPCFullLoadCurveReader.Create(entry.FullLoadCurve, count, gearRatioUsedForMeasurement.Ratio);
 				for (var i = 0u; i < entry.PowerMap.Count; i++)
 				{
 					var ratio = iepc.Gears.First(x => x.GearNumber == i + 1).Ratio;
-					effMap.Add(i + 1, IEPCMapReader.Create(entry.PowerMap[(int)i].PowerMap, count, ratio));
+					effMap.Add(i + 1, IEPCMapReader.Create(entry.PowerMap[(int)i].PowerMap, count, ratio, fldCurve));
 					//fullLoadCurves.Add(i + 1, IEPCFullLoadCurveReader.Create(entry.FullLoadCurve, count, ratio));
 				}
 				voltageLevels.Add(new IEPCVoltageLevelData()
 				{
 					Voltage = entry.VoltageLevel,
-					FullLoadCurve = IEPCFullLoadCurveReader.Create(entry.FullLoadCurve, count, gearRatioUsedForMeasurement.Ratio),
+					FullLoadCurve = fldCurve,
 					EfficiencyMaps = effMap,
 				});
 			}
diff --git a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/EngineDataAdapter.cs b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/EngineDataAdapter.cs
index 39c0521b2b..78dedc1c91 100644
--- a/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/EngineDataAdapter.cs
+++ b/VectoCore/VectoCore/InputData/Reader/DataObjectAdapter/SimulationComponents/EngineDataAdapter.cs
@@ -208,6 +208,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 			var fullLoadCurves = new Dictionary<uint, EngineFullLoadCurve>(numGears + 1);
 			fullLoadCurves[0] = FullLoadCurveReader.Create(mode.FullLoadCurve, true);
 			fullLoadCurves[0].EngineData = retVal;
+			
 			foreach (var gear in gearbox?.Gears ?? new List<ITransmissionInputData>(0))
 			{
 				var maxTorque = VectoMath.Min(
@@ -216,6 +217,14 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter.SimulationComponen
 				fullLoadCurves[(uint)gear.Gear] = IntersectFullLoadCurves(fullLoadCurves[0], maxTorque);
 			}
 
+			//Add first full load curve for every gear present in iepc
+
+			if (vehicle.Components.IEPC?.Gears != null)
+				foreach (var gear in vehicle.Components.IEPC.Gears) {
+					fullLoadCurves[(uint)gear.GearNumber] = fullLoadCurves[0];
+				}
+
+
 			retVal.FullLoadCurves = fullLoadCurves;
 
 			retVal.WHRType = engine.WHRType;
diff --git a/VectoCore/VectoCore/Models/SimulationComponent/Data/ElectricComponents/ElectricMotor/ElectricMotorRatedSpeedHelper.cs b/VectoCore/VectoCore/Models/SimulationComponent/Data/ElectricComponents/ElectricMotor/ElectricMotorRatedSpeedHelper.cs
new file mode 100644
index 0000000000..2f6d96c5bb
--- /dev/null
+++ b/VectoCore/VectoCore/Models/SimulationComponent/Data/ElectricComponents/ElectricMotor/ElectricMotorRatedSpeedHelper.cs
@@ -0,0 +1,71 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using TUGraz.VectoCommon.Exceptions;
+using TUGraz.VectoCommon.InputData;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.Configuration;
+
+namespace TUGraz.VectoCore.Models.SimulationComponent.Data.ElectricComponents.ElectricMotor
+{
+	public static class ElectricMotorRatedSpeedHelper
+	{
+		private class FullLoadCurveEntry
+		{
+			public PerSecond speed;
+			public NewtonMeter torque;
+			public Watt power;
+		}
+
+		public static PerSecond GetRatedSpeed<TEntry>(IEnumerable<TEntry> entries,
+			Func<TEntry, PerSecond> getSpeed, Func<TEntry, NewtonMeter> getTorque)
+		{
+			var enumEntries = entries as TEntry[] ?? entries.ToArray();
+			AssertDifferentSpeeds(enumEntries.Select(getSpeed));
+			AssertZeroRPM(enumEntries.Select(getSpeed));
+			//speed power
+			var orderedEntries = enumEntries.OrderBy(getSpeed).Select(e => new FullLoadCurveEntry() {
+				speed = getSpeed(e),
+				torque = getTorque(e),
+				power = getSpeed(e) * getTorque(e),
+			}).ToArray();
+
+			
+
+			double[] gradients = new double[orderedEntries.Length];
+			gradients[0] = 0;
+			double[] deltaStartGradient = new double[orderedEntries.Length];
+			deltaStartGradient[0] = 0;
+
+			for (var i = 1; i < orderedEntries.Length; i++) {
+				gradients[i] = (orderedEntries[i].power - orderedEntries[i - 1].power).Value() /
+								(orderedEntries[i].speed - orderedEntries[i - 1].speed).Value();
+				if (gradients[1].IsEqual(0)) {
+					throw new VectoException("Invalid map");
+				}
+				deltaStartGradient[i] = gradients[i] / gradients[1] - 1;
+				if(Math.Abs(deltaStartGradient[i]) > Constants.EMFullLoadCurveSettings.RatedSpeedGradientDelta) {
+					return orderedEntries[i - 1].speed;
+				}
+			}
+			throw new VectoException("Rated speed not found");
+			
+		}
+
+		private static void AssertDifferentSpeeds(IEnumerable<PerSecond> speeds)
+		{
+			var speedsArray = speeds as PerSecond[] ?? speeds.ToArray();
+			HashSet<PerSecond> difSpeeds = new HashSet<PerSecond>(speedsArray);
+			if (difSpeeds.Count != speedsArray.Count()) {
+				throw new VectoException("Only one entry per speed allowed");
+			}
+		}
+
+		private static void AssertZeroRPM(IEnumerable<PerSecond> speeds)
+		{
+			if (!speeds.Min().IsEqual(0)) {
+				throw new VectoException("Entries at 0 rpm missing");
+			}
+		}
+	}
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCoreTest/InputData/IEPCMapReaderTest.cs b/VectoCore/VectoCoreTest/InputData/IEPCMapReaderTest.cs
new file mode 100644
index 0000000000..152c3c432e
--- /dev/null
+++ b/VectoCore/VectoCoreTest/InputData/IEPCMapReaderTest.cs
@@ -0,0 +1,245 @@
+
+#if TRACE
+using System.Windows.Forms.DataVisualization.Charting;
+#endif
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Data;
+using System.Diagnostics;
+using System.Drawing;
+using System.IO;
+using System.Linq;
+using System.Reflection;
+
+using NUnit.Framework;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.Configuration;
+using TUGraz.VectoCore.InputData.Reader.ComponentData;
+using TUGraz.VectoCore.Models.Declaration;
+using TUGraz.VectoCore.Models.SimulationComponent.Data.ElectricMotor;
+using TUGraz.VectoCore.Models.SimulationComponent.Impl;
+using TUGraz.VectoCore.Utils;
+
+
+namespace TUGraz.VectoCore.Tests.InputData
+{
+	[TestFixture]
+	public class IEPCMapReaderTest
+	{
+		public const string basePath = "../../../../../"; //from cwd to repo root
+
+
+
+
+
+		[OneTimeSetUp]
+		public void OneTimeSetup()
+		{
+			
+		}
+
+
+		[TestCase(@$"{basePath}Generic Vehicles/Engineering Mode/GenericIEPC-S/IEPC-S_Gbx3Speed/IEPC_Gbx3_FLD_max.viepcp", @$"{basePath}Generic Vehicles/Engineering Mode/GenericIEPC-S/IEPC-S_Gbx3Speed/IEPC_Gbx3_2.viepco", 4.65f, 2.74f)]
+		[TestCase(@$"{basePath}Generic Vehicles/Engineering Mode/GenericIEPC-S/IEPC-S_Gbx3Speed/IEPC_Gbx3_FLD_max.viepcp", @$"{basePath}Generic Vehicles/Engineering Mode/GenericIEPC-S/IEPC-S_Gbx3Speed/IEPC_Gbx3_1.viepco", 8.31f, 2.74f)]
+		[TestCase(@$"{basePath}Generic Vehicles/Engineering Mode/GenericIEPC-S/IEPC-S_Gbx3Speed/IEPC_Gbx3_FLD_max.viepcp", @$"{basePath}Generic Vehicles/Engineering Mode/GenericIEPC-S/IEPC-S_Gbx3Speed/IEPC_Gbx3_3.viepco", 2.74f, 2.74f)]
+
+
+		[TestCase(@$"{basePath}Generic Vehicles/Engineering Mode/GenericIEPC-S/IEPC-S_Gbx3Speed/IEPC_Gbx3_FLD_max.viepcp", @$"{basePath}VectoCore/VectoCoreTest/TestData/Components/IEPC/IEPCMapReader/IEPC_Gbx3_1_different_number_of_points.viepco", 8.31f, 2.74f)]
+		[TestCase(@$"{basePath}Generic Vehicles/Engineering Mode/GenericIEPC-S/IEPC-S_Gbx3Speed/IEPC_Gbx3_FLD_max.viepcp", @$"{basePath}VectoCore/VectoCoreTest/TestData/Components/IEPC/IEPCMapReader/IEPC_Gbx3_1_following_curve.viepco", 8.31f, 2.74f)]
+		public void ReadIEPCMap(string fullLoadCurvePath, string powerMapPath, double ratio, double fldMeasuredRatio)
+		{
+			Assert.That(File.Exists(fullLoadCurvePath), Path.GetFullPath(fullLoadCurvePath));
+			Assert.That(File.Exists(powerMapPath), Path.GetFullPath(fullLoadCurvePath));
+
+
+
+			var fullLoadCurveData = VectoCSVFile.Read(fullLoadCurvePath);
+			var powerMapData = VectoCSVFile.Read(powerMapPath);
+			powerMapData.Columns[0].ColumnName = IEPCMapReader.Fields.MotorSpeed;
+			powerMapData.Columns[1].ColumnName = IEPCMapReader.Fields.Torque;
+			powerMapData.Columns[2].ColumnName = IEPCMapReader.Fields.PowerElectrical;
+
+			var fld = IEPCFullLoadCurveReader.Create(fullLoadCurveData, 1, fldMeasuredRatio);
+			var powerMapInput = IEPCMapReader.GetEntries(powerMapData, ratio);
+			//PrintMaps("powerMapInput", powerMapInput, "powerMapInput", x => x.MotorSpeed.AsRPM, y => y.Torque.Value());
+
+
+			var effMap = IEPCMapReader.Create(powerMapData, 1, ratio, fld);
+#if TRACE
+			PrintMaps("FLD.png", 
+				new SeriesProperties<ElectricMotorFullLoadCurve.FullLoadEntry>() {
+					xSelector = (x => x.MotorSpeed.AsRPM),
+					ySelector = (y => y.FullDriveTorque.Value()),
+					color = Color.Red,
+					entries = fld.FullLoadEntries,
+				}, new SeriesProperties<ElectricMotorFullLoadCurve.FullLoadEntry>()
+				{
+					xSelector = (x => x.MotorSpeed.AsRPM),
+					ySelector = (y => y.FullGenerationTorque.Value()),
+					color = Color.Red,
+					entries = fld.FullLoadEntries
+				});
+
+
+
+
+			//PrintMaps("powerMap", effMap.Entries, "powerMap", x => x.MotorSpeed.AsRPM, y => y.Torque.Value());
+
+
+			PrintMaps("FLD_input_powermap.png",
+				new SeriesProperties<ElectricMotorFullLoadCurve.FullLoadEntry>()
+				{
+					xSelector = (x => x.MotorSpeed.AsRPM),
+					ySelector = (y => y.FullDriveTorque.Value()),
+					color = Color.Red,
+					entries = fld.FullLoadEntries,
+				}, new SeriesProperties<ElectricMotorFullLoadCurve.FullLoadEntry>()
+				{
+					xSelector = (x => x.MotorSpeed.AsRPM),
+					ySelector = (y => y.FullGenerationTorque.Value()),
+					color = Color.Red,
+					entries = fld.FullLoadEntries
+				}, new SeriesProperties<EfficiencyMap.Entry>()
+				{
+					xSelector = (x => x.MotorSpeed.AsRPM),
+					ySelector = (y => y.Torque.Value()),
+					color = Color.Blue,
+					entries = powerMapInput,
+				});
+
+
+			PrintMaps("FLD_powermap_extrapolated.png",
+				new SeriesProperties<ElectricMotorFullLoadCurve.FullLoadEntry>()
+				{
+					xSelector = (x => x.MotorSpeed.AsRPM),
+					ySelector = (y => y.FullDriveTorque.Value()),
+					color = Color.Red,
+					entries = fld.FullLoadEntries,
+				}, new SeriesProperties<ElectricMotorFullLoadCurve.FullLoadEntry>()
+				{
+					xSelector = (x => x.MotorSpeed.AsRPM),
+					ySelector = (y => y.FullGenerationTorque.Value()),
+					color = Color.Red,
+					entries = fld.FullLoadEntries,
+				}, new SeriesProperties<EfficiencyMap.Entry>()
+				{
+					xSelector = (x => x.MotorSpeed.AsRPM),
+					ySelector = (y => y.Torque.Value() * (-1)),
+					color = Color.Blue,
+					entries = powerMapInput,
+				}, new SeriesProperties<EfficiencyMap.Entry>()
+				{
+					xSelector = (x => x.MotorSpeed.AsRPM),
+					ySelector = (y => y.Torque.Value()),
+					color = Color.LightCoral,
+					entries = effMap.Entries,
+				});
+
+#endif
+
+			//Drive
+			foreach (var entry in fld.FullLoadEntries) {
+				//Assert that this functions returns null when the battery is not restricting the EM
+				Assert.IsNull(effMap.LookupTorque(double.MaxValue.SI<Watt>(), entry.MotorSpeed,
+					entry.FullDriveTorque * Constants.PowerMapSettings.EfficiencyMapExtrapolationFactor * -1));
+				var power_extended = effMap.LookupElectricPower(entry.MotorSpeed, entry.FullDriveTorque * -1 * Constants.PowerMapSettings.EfficiencyMapExtrapolationFactor, true);
+				var power = effMap.LookupElectricPower(entry.MotorSpeed, entry.FullDriveTorque * -1, true);
+				Assert.IsFalse(power_extended.Extrapolated);
+				Assert.AreEqual(power.ElectricalPower.Value() * Constants.PowerMapSettings.EfficiencyMapExtrapolationFactor, power_extended.ElectricalPower.Value(), 1e6);
+			}
+			//Recuperation
+			foreach (var entry in fld.FullLoadEntries)
+			{
+				//Assert that this functions returns null when the battery is not restricting the EM
+				Assert.IsNull(effMap.LookupTorque(double.MinValue.SI<Watt>(), entry.MotorSpeed, entry.FullGenerationTorque * Constants.PowerMapSettings.EfficiencyMapExtrapolationFactor * -1));
+				var power_extended = effMap.LookupElectricPower(entry.MotorSpeed, entry.FullGenerationTorque * -1 * Constants.PowerMapSettings.EfficiencyMapExtrapolationFactor, true);
+				var power = effMap.LookupElectricPower(entry.MotorSpeed, entry.FullGenerationTorque * -1, true);
+				Assert.IsFalse(power_extended.Extrapolated);
+				Assert.AreEqual(power.ElectricalPower.Value() * Constants.PowerMapSettings.EfficiencyMapExtrapolationFactor, power_extended.ElectricalPower.Value(), 1e6);
+
+			}
+		}
+
+#if TRACE
+		public abstract class SeriesProperties
+		{
+			public abstract IEnumerable<(double x, double y)> GetPoints();
+			public Color color;
+			public SeriesChartType chartType = SeriesChartType.FastPoint;
+			public string legend;
+		}
+
+
+		public class SeriesProperties<T> : SeriesProperties
+		{
+			public IEnumerable<T> entries;
+			public Func<T, double> xSelector;
+			public Func<T, double> ySelector;
+			
+
+
+		#region Overrides of SeriesProperties
+
+			public override IEnumerable<(double x, double y)> GetPoints()
+			{
+				foreach (var entry in entries) {
+					yield return (xSelector(entry), ySelector(entry));
+				}
+			}
+
+		#endregion
+		}
+
+
+        public void PrintMaps(string fileName, params SeriesProperties[] series)
+        {
+			if (File.Exists(fileName)) {
+				File.Delete(fileName);
+			}
+
+			//x ... speed
+		
+			using (var chart = new Chart()) {
+				chart.Size = new Size(1000, 1000);
+				chart.Legends.Add(new Legend("legend 1"));
+				chart.ChartAreas.Add(new ChartArea("maps")
+				{
+					AxisX = new Axis {  Crossing = 0},
+					AxisY = new Axis {  Crossing = 0},
+				});
+
+				foreach (var ser in series) {
+					var chartSeries = new Series
+					{
+						ChartType = SeriesChartType.FastPoint,
+						Color = ser.color,
+						MarkerSize = 10,
+					};
+					foreach (var entry in ser.GetPoints())
+					{
+						chartSeries.Points.AddXY(entry.x, entry.y);
+					}
+					chart.Series.Add(chartSeries);
+				}
+				
+				
+		
+				
+
+
+				var dirInfo = Directory.CreateDirectory($@"{nameof(IEPCMapReaderTest)}//{String.Join("", TestContext.CurrentContext.Test.Name.Replace(basePath, "").Split(Path.GetInvalidFileNameChars()))}");
+				chart.SaveImage($"{dirInfo.FullName}\\{(fileName.EndsWith(".png") ? fileName : fileName + ".png")}",
+					ChartImageFormat.Png);
+				TestContext.WriteLine($"{dirInfo.FullName}");
+			}
+	
+
+
+
+			TestContext.WriteLine($"Map written to {fileName}");
+        }
+#endif
+	}
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCoreTest/Models/Declaration/ElectricMotorRatedSpeedHelperTest.cs b/VectoCore/VectoCoreTest/Models/Declaration/ElectricMotorRatedSpeedHelperTest.cs
new file mode 100644
index 0000000000..e6dba04ab8
--- /dev/null
+++ b/VectoCore/VectoCoreTest/Models/Declaration/ElectricMotorRatedSpeedHelperTest.cs
@@ -0,0 +1,177 @@
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using NUnit.Framework;
+using TUGraz.VectoCommon.Exceptions;
+using TUGraz.VectoCommon.Utils;
+using TUGraz.VectoCore.InputData.Reader.ComponentData;
+using TUGraz.VectoCore.Models.SimulationComponent.Data.ElectricComponents.ElectricMotor;
+using TUGraz.VectoCore.Models.SimulationComponent.Data.ElectricMotor;
+using TUGraz.VectoCore.Utils;
+
+namespace TUGraz.VectoCore.Tests.Models.Declaration
+{
+	[TestFixture]
+	internal class ElectricMotorRatedSpeedHelperTest
+	{
+
+		[TestCase(755.11f)]
+		public void GetRatedSpeedPass(double expectedSpeedRpm)
+		{
+
+
+
+			(string speed, string torque)[] entries = new (string speedd, string torque)[] {
+				("0.00	  ", "4027.80"),
+				("14.96   ", "4010.00"),
+				("151.09  ", "3980.00"),
+				("302.19  ", "4010.00"),
+				("452.92  ", "3950.00"),
+				("604.01  ", "3900.00"),
+				("755.11  ", "3950.00"),
+				("906.20  ", "3356.50"),
+				("1057.30 ", "2876.98"),
+				("1208.03 ", "2517.38"),
+				("1359.12 ", "2237.68"),
+				("1510.22 ", "2013.90"),
+				("1661.31 ", "1830.82"),
+				("1812.41 ", "1678.25"),
+				("1963.14 ", "1549.15"),
+				("2114.23 ", "1438.52"),
+				("2265.33 ", "1342.60"),
+				("2416.42", "1258.71"),
+				("2567.52 ", "1184.66"),
+				("2718.25 ", "1118.82"),
+				("2869.34 ", "1059.96"),
+				("3020.44 ", "1006.95"),
+			};
+			{
+				var speedCol = "n";
+				var torqueCol = "T_drive";
+				var data = CreateDataTable(entries, speedCol, torqueCol);
+
+				var ratedSpeed = ElectricMotorRatedSpeedHelper.GetRatedSpeed(data.AsEnumerable(),
+					row => row.ParseDouble(speedCol).RPMtoRad(),
+					row => row.ParseDouble(torqueCol).SI<NewtonMeter>());
+
+				Assert.AreEqual(ratedSpeed.AsRPM, expectedSpeedRpm, expectedSpeedRpm);
+			}
+		}
+
+		[TestCase(755.11f)]
+		public void GetRatedSpeedDivisionByZero(double expectedSpeedRpm)
+		{
+			(string speed, string torque)[] entries = new (string speedd, string torque)[] {
+				("0.00	  ", "4027.00"), 
+				("14.96   ", "0.00"), //<- this should lead to a division by zero, 
+				("151.09  ", "3980.00"),
+				("302.19  ", "4010.00"),
+				("452.92  ", "3950.00"),
+				("604.01  ", "3900.00"),
+				("755.11  ", "3950.00"),
+				("906.20  ", "3356.50"),
+				("1057.30 ", "2876.98"),
+				("1208.03 ", "2517.38"),
+				("1359.12 ", "2237.68"),
+				("1510.22 ", "2013.90"),
+				("1661.31 ", "1830.82"),
+				("1812.41 ", "1678.25"),
+				("1963.14 ", "1549.15"),
+				("2114.23 ", "1438.52"),
+				("2265.33 ", "1342.60"),
+				("2416.42", "1258.71"),
+				("2567.52 ", "1184.66"),
+				("2718.25 ", "1118.82"),
+				("2869.34 ", "1059.96"),
+				("3020.44 ", "1006.95"),
+			};
+			
+				var speedCol = "n";
+				var torqueCol = "T_drive";
+				var data = CreateDataTable(entries, speedCol, torqueCol);
+
+				Assert.Throws<VectoException>(() => {
+					ElectricMotorRatedSpeedHelper.GetRatedSpeed(data.AsEnumerable(),
+						row => row.ParseDouble(speedCol).RPMtoRad(),
+						row => row.ParseDouble(torqueCol).SI<NewtonMeter>());
+
+				});
+				//Assert.AreEqual(ratedSpeed.AsRPM, expectedSpeedRpm, expectedSpeedRpm);
+
+		}
+
+		[TestCase(755.11f)]
+		public void GetRatedSpeedMissingZeroRPM(double expectedSpeedRpm)
+		{
+			(string speed, string torque)[] entries = new (string speedd, string torque)[] {
+				("1.00	  ", "4027.00"),
+				("14.96   ", "4027.00"), //<- this should lead to a division by zero, 
+				("151.09  ", "3980.00"),
+				("302.19  ", "4010.00"),
+				("452.92  ", "3950.00"),
+				("604.01  ", "3900.00"),
+				("755.11  ", "3950.00"),
+				("906.20  ", "3356.50"),
+				("1057.30 ", "2876.98"),
+				("1208.03 ", "2517.38"),
+				("1359.12 ", "2237.68"),
+				("1510.22 ", "2013.90"),
+				("1661.31 ", "1830.82"),
+				("1812.41 ", "1678.25"),
+				("1963.14 ", "1549.15"),
+				("2114.23 ", "1438.52"),
+				("2265.33 ", "1342.60"),
+				("2416.42", "1258.71"),
+				("2567.52 ", "1184.66"),
+				("2718.25 ", "1118.82"),
+				("2869.34 ", "1059.96"),
+				("3020.44 ", "1006.95"),
+			};
+
+			var speedCol = "n";
+			var torqueCol = "T_drive";
+			var data = CreateDataTable(entries, speedCol, torqueCol);
+
+			Assert.Throws<VectoException>(() => {
+				ElectricMotorRatedSpeedHelper.GetRatedSpeed(data.AsEnumerable(),
+					row => row.ParseDouble(speedCol).RPMtoRad(),
+					row => row.ParseDouble(torqueCol).SI<NewtonMeter>());
+
+			});
+			//Assert.AreEqual(ratedSpeed.AsRPM, expectedSpeedRpm, expectedSpeedRpm);
+
+		}
+
+		[TestCase(1850f, 1f)]
+		public void IEPCFld(double expectedSpeedRpm, double ratio)
+		{
+			var fldCruveData = VectoCSVFile.Read(@"TestData\BatteryElectric\IEPC\GenericFld.viepcp");
+			var fld = IEPCFullLoadCurveReader.Create(fldCruveData, 1, ratio);
+
+			Assert.AreEqual(1850 * ratio, ElectricMotorRatedSpeedHelper.GetRatedSpeed(fld.FullLoadEntries, entry => entry.MotorSpeed,
+				entry => entry.FullDriveTorque).AsRPM);
+		}
+		
+		private static DataTable CreateDataTable((string speed, string torque)[] entries, string firstCol,
+			string secondCol)
+		{
+
+			var data = new DataTable();
+			data.Columns.Add(firstCol, typeof(string));
+			data.Columns.Add(secondCol, typeof(string));
+			foreach (var entry in entries) {
+				var row = data.NewRow();
+				row[firstCol] = entry.speed;
+				row[secondCol] = entry.torque;
+				data.Rows.Add(row);
+			}
+
+			return data;
+		}
+
+
+	}
+}
\ No newline at end of file
diff --git a/VectoCore/VectoCoreTest/TestData/Components/IEPC/IEPCMapReader/IEPC_Gbx3_1_different_number_of_points.viepco b/VectoCore/VectoCoreTest/TestData/Components/IEPC/IEPCMapReader/IEPC_Gbx3_1_different_number_of_points.viepco
new file mode 100644
index 0000000000..d6ee1698b2
--- /dev/null
+++ b/VectoCore/VectoCoreTest/TestData/Components/IEPC/IEPCMapReader/IEPC_Gbx3_1_different_number_of_points.viepco
@@ -0,0 +1,909 @@
+n_out  , T_out     , P_el
+0.00   , -12984.38 , 0.00
+0.00   , -12335.16 , 0.00
+0.00   , -11685.94 , 0.00
+0.00   , -11036.72 , 0.00
+0.00   , -10387.50 , 0.00
+0.00   , -9738.28  , 0.00
+0.00   , -9089.06  , -0.13
+0.00   , -8439.84  , -0.66
+0.00   , -7790.63  , -0.98
+0.00   , -7141.41  , -1.19
+0.00   , -6492.19  , -1.32
+0.00   , -5842.97  , -1.38
+0.00   , -5193.75  , -1.39
+0.00   , -4544.53  , -1.35
+0.00   , -3895.31  , -1.26
+0.00   , -3246.09  , -1.13
+0.00   , -2596.88  , -0.97
+0.00   , -1947.66  , -0.77
+0.00   , -1298.44  , -0.53
+0.00   , -649.22   , -0.27
+0.00   , -129.84   , -0.02
+0.00   , 119.66    , 0.13
+0.00   , 598.32    , 0.56
+0.00   , 1196.64   , 1.12
+0.00   , 1794.96   , 1.70
+0.00   , 2393.28   , 2.31
+0.00   , 2991.60   , 2.93
+0.00   , 3589.92   , 3.58
+0.00   , 4188.24   , 4.25
+0.00   , 4786.56   , 4.93
+0.00   , 5384.88   , 5.64
+0.00   , 5983.20   , 6.37
+0.00   , 6581.52   , 7.12
+0.00   , 7179.84   , 7.88
+0.00   , 7778.16   , 8.67
+0.00   , 8376.48   , 9.47
+0.00   , 8974.80   , 10.29
+0.00   , 9573.12   , 11.13
+0.00   , 10171.44  , 11.99
+0.00   , 10769.76  , 12.87
+0.00   , 11368.08  , 13.76
+0.00   , 11966.40  , 14.67
+4.98   , -12984.38 , 0.00
+4.98   , -12335.16 , 0.00
+4.98   , -11685.94 , 0.00
+4.98   , -11036.72 , 0.00
+4.98   , -10387.50 , 0.00
+4.98   , -9738.28  , 0.00
+4.98   , -9089.06  , -0.50
+4.98   , -8439.84  , -0.84
+4.98   , -7790.63  , -1.04
+4.98   , -7141.41  , -1.16
+4.98   , -6492.19  , -1.22
+4.98   , -5842.97  , -1.24
+4.98   , -5193.75  , -1.21
+4.98   , -4544.53  , -1.15
+4.98   , -3895.31  , -1.06
+4.98   , -3246.09  , -0.94
+4.98   , -2596.88  , -0.80
+4.98   , -1947.66  , -0.62
+4.98   , -1298.44  , -0.43
+4.98   , -649.22   , -0.21
+4.98   , -129.84   , -0.02
+4.98   , 119.66    , 0.10
+4.98   , 598.32    , 0.43
+4.98   , 1196.64   , 0.85
+4.98   , 1794.96   , 1.30
+4.98   , 2393.28   , 1.75
+4.98   , 2991.60   , 2.23
+4.98   , 3589.92   , 2.71
+4.98   , 4188.24   , 3.21
+4.98   , 4786.56   , 3.73
+4.98   , 5384.88   , 4.26
+4.98   , 5983.20   , 4.80
+4.98   , 6581.52   , 5.36
+4.98   , 7179.84   , 5.93
+4.98   , 7778.16   , 6.52
+4.98   , 8376.48   , 7.12
+4.98   , 8974.80   , 7.73
+4.98   , 9573.12   , 8.35
+4.98   , 10171.44  , 8.99
+4.98   , 10769.76  , 9.64
+4.98   , 11368.08  , 10.30
+4.98   , 11966.40  , 10.98
+49.80  , -12984.38 , -58.10
+49.80  , -12335.16 , -55.37
+49.80  , -11685.94 , -52.62
+49.80  , -11036.72 , -49.85
+49.80  , -10387.50 , -47.06
+49.80  , -9738.28  , -44.25
+49.80  , -9089.06  , -41.42
+49.80  , -8439.84  , -38.57
+49.80  , -7790.63  , -35.70
+49.80  , -7141.41  , -32.81
+49.80  , -6492.19  , -29.90
+49.80  , -5842.97  , -26.98
+49.80  , -5193.75  , -24.03
+49.80  , -4544.53  , -21.07
+49.80  , -3895.31  , -18.08
+49.80  , -3246.09  , -15.08
+49.80  , -2596.88  , -12.06
+49.80  , -1947.66  , -9.02
+49.80  , -1298.44  , -5.96
+49.80  , -649.22   , -2.88
+49.80  , -129.84   , -0.37
+49.80  , 119.66    , 0.90
+49.80  , 598.32    , 3.68
+49.80  , 1196.64   , 7.16
+49.80  , 1794.96   , 10.66
+49.80  , 2393.28   , 14.17
+49.80  , 2991.60   , 17.71
+49.80  , 3589.92   , 21.26
+49.80  , 4188.24   , 24.84
+49.80  , 4786.56   , 28.43
+49.80  , 5384.88   , 32.04
+49.80  , 5983.20   , 35.67
+49.80  , 6581.52   , 39.32
+49.80  , 7179.84   , 42.99
+49.80  , 7778.16   , 46.68
+49.80  , 8376.48   , 50.38
+49.80  , 8974.80   , 54.11
+49.80  , 9573.12   , 57.85
+49.80  , 10171.44  , 61.61
+49.80  , 10769.76  , 65.39
+49.80  , 11368.08  , 69.19
+49.80  , 11966.40  , 73.01
+99.59  , -12984.38 , -120.57
+99.59  , -12335.16 , -114.73
+99.59  , -11685.94 , -108.87
+99.59  , -11036.72 , -102.99
+99.59  , -10387.50 , -97.08
+99.59  , -9738.28  , -91.15
+99.59  , -9089.06  , -85.20
+99.59  , -8439.84  , -79.23
+99.59  , -7790.63  , -73.23
+99.59  , -7141.41  , -67.21
+99.59  , -6492.19  , -61.17
+99.59  , -5842.97  , -55.10
+99.59  , -5193.75  , -49.01
+99.59  , -4544.53  , -42.90
+99.59  , -3895.31  , -36.77
+99.59  , -3246.09  , -30.61
+99.59  , -2596.88  , -24.43
+99.59  , -1947.66  , -18.23
+99.59  , -1298.44  , -12.01
+99.59  , -649.22   , -5.76
+99.59  , -129.84   , -0.66
+99.59  , 119.66    , 1.84
+99.59  , 598.32    , 7.35
+99.59  , 1196.64   , 14.22
+99.59  , 1794.96   , 21.11
+99.59  , 2393.28   , 28.02
+99.59  , 2991.60   , 34.96
+99.59  , 3589.92   , 41.92
+99.59  , 4188.24   , 48.90
+99.59  , 4786.56   , 55.90
+99.59  , 5384.88   , 62.93
+99.59  , 5983.20   , 69.98
+99.59  , 6581.52   , 77.05
+99.59  , 7179.84   , 84.15
+99.59  , 7778.16   , 91.27
+99.59  , 8376.48   , 98.41
+99.59  , 8974.80   , 105.58
+99.59  , 9573.12   , 112.76
+99.59  , 10171.44  , 119.97
+99.59  , 10769.76  , 127.21
+99.59  , 11368.08  , 134.46
+99.59  , 11966.40  , 141.74
+149.39 , -12984.38 , -182.44
+149.39 , -12335.16 , -173.55
+149.39 , -11685.94 , -164.62
+149.39 , -11036.72 , -155.67
+149.39 , -10387.50 , -146.69
+149.39 , -9738.28  , -137.68
+149.39 , -9089.06  , -128.65
+149.39 , -8439.84  , -119.58
+149.39 , -7790.63  , -110.49
+149.39 , -7141.41  , -101.36
+149.39 , -6492.19  , -92.21
+149.39 , -5842.97  , -83.03
+149.39 , -5193.75  , -73.82
+149.39 , -4544.53  , -64.58
+149.39 , -3895.31  , -55.31
+149.39 , -3246.09  , -46.02
+149.39 , -2596.88  , -36.70
+149.39 , -1947.66  , -27.34
+149.39 , -1298.44  , -17.96
+149.39 , -649.22   , -8.54
+149.39 , -129.84   , -0.79
+149.39 , 119.66    , 2.86
+149.39 , 598.32    , 11.12
+149.39 , 1196.64   , 21.39
+149.39 , 1794.96   , 31.68
+149.39 , 2393.28   , 41.99
+149.39 , 2991.60   , 52.34
+149.39 , 3589.92   , 62.71
+149.39 , 4188.24   , 73.12
+149.39 , 4786.56   , 83.55
+149.39 , 5384.88   , 94.01
+149.39 , 5983.20   , 104.50
+149.39 , 6581.52   , 115.02
+149.39 , 7179.84   , 125.57
+149.39 , 7778.16   , 136.15
+149.39 , 8376.48   , 146.76
+149.39 , 8974.80   , 157.40
+149.39 , 9573.12   , 168.06
+149.39 , 10171.44  , 178.76
+149.39 , 10769.76  , 189.48
+149.39 , 11368.08  , 200.23
+149.39 , 11966.40  , 211.02
+199.18 , -12984.38 , -243.71
+199.18 , -12335.16 , -231.81
+199.18 , -11685.94 , -219.87
+199.18 , -11036.72 , -207.89
+199.18 , -10387.50 , -195.88
+199.18 , -9738.28  , -183.83
+199.18 , -9089.06  , -171.74
+199.18 , -8439.84  , -159.61
+199.18 , -7790.63  , -147.45
+199.18 , -7141.41  , -135.25
+199.18 , -6492.19  , -123.01
+199.18 , -5842.97  , -110.74
+199.18 , -5193.75  , -98.43
+199.18 , -4544.53  , -86.08
+199.18 , -3895.31  , -73.70
+199.18 , -3246.09  , -61.27
+199.18 , -2596.88  , -48.82
+199.18 , -1947.66  , -36.32
+199.18 , -1298.44  , -23.78
+199.18 , -649.22   , -11.19
+199.18 , -129.84   , -0.63
+199.18 , 119.66    , 3.98
+199.18 , 598.32    , 15.01
+199.18 , 1196.64   , 28.68
+199.18 , 1794.96   , 42.37
+199.18 , 2393.28   , 56.10
+199.18 , 2991.60   , 69.87
+199.18 , 3589.92   , 83.67
+199.18 , 4188.24   , 97.52
+199.18 , 4786.56   , 111.40
+199.18 , 5384.88   , 125.31
+199.18 , 5983.20   , 139.27
+199.18 , 6581.52   , 153.26
+199.18 , 7179.84   , 167.29
+199.18 , 7778.16   , 181.36
+199.18 , 8376.48   , 195.46
+199.18 , 8974.80   , 209.61
+199.18 , 9573.12   , 223.79
+199.18 , 10171.44  , 238.01
+199.18 , 10769.76  , 252.26
+199.18 , 11368.08  , 266.56
+199.18 , 11966.40  , 280.89
+248.98 , -12984.38 , -304.37
+248.98 , -12335.16 , -289.50
+248.98 , -11685.94 , -274.59
+248.98 , -11036.72 , -259.63
+248.98 , -10387.50 , -244.61
+248.98 , -9738.28  , -229.56
+248.98 , -9089.06  , -214.45
+248.98 , -8439.84  , -199.30
+248.98 , -7790.63  , -184.10
+248.98 , -7141.41  , -168.85
+248.98 , -6492.19  , -153.55
+248.98 , -5842.97  , -138.20
+248.98 , -5193.75  , -122.81
+248.98 , -4544.53  , -107.37
+248.98 , -3895.31  , -91.88
+248.98 , -3246.09  , -76.35
+248.98 , -2596.88  , -60.76
+248.98 , -1947.66  , -45.13
+248.98 , -1298.44  , -29.44
+248.98 , -649.22   , -13.67
+248.98 , -129.84   , 0.00
+248.98 , 119.66    , 5.21
+248.98 , 598.32    , 19.04
+248.98 , 1196.64   , 36.13
+248.98 , 1794.96   , 53.24
+248.98 , 2393.28   , 70.39
+248.98 , 2991.60   , 87.59
+248.98 , 3589.92   , 104.83
+248.98 , 4188.24   , 122.13
+248.98 , 4786.56   , 139.47
+248.98 , 5384.88   , 156.87
+248.98 , 5983.20   , 174.31
+248.98 , 6581.52   , 191.80
+248.98 , 7179.84   , 209.33
+248.98 , 7778.16   , 226.92
+248.98 , 8376.48   , 244.56
+248.98 , 8974.80   , 262.24
+248.98 , 9573.12   , 279.97
+248.98 , 10171.44  , 297.76
+248.98 , 10769.76  , 315.58
+248.98 , 11368.08  , 333.46
+248.98 , 11966.40  , 351.39
+298.77 , -12984.38 , -364.37
+298.77 , -12335.16 , -346.59
+298.77 , -11685.94 , -328.74
+298.77 , -11036.72 , -310.84
+298.77 , -10387.50 , -292.87
+298.77 , -9738.28  , -274.84
+298.77 , -9089.06  , -256.75
+298.77 , -8439.84  , -238.60
+298.77 , -7790.63  , -220.39
+298.77 , -7141.41  , -202.12
+298.77 , -6492.19  , -183.79
+298.77 , -5842.97  , -165.40
+298.77 , -5193.75  , -146.94
+298.77 , -4544.53  , -128.43
+298.77 , -3895.31  , -109.85
+298.77 , -3246.09  , -91.21
+298.77 , -2596.88  , -72.51
+298.77 , -1947.66  , -53.75
+298.77 , -1298.44  , -34.91
+298.77 , -649.22   , -15.95
+298.77 , -129.84   , 0.00
+298.77 , 119.66    , 6.58
+298.77 , 598.32    , 23.25
+298.77 , 1196.64   , 43.76
+298.77 , 1794.96   , 64.29
+298.77 , 2393.28   , 84.87
+298.77 , 2991.60   , 105.52
+298.77 , 3589.92   , 126.22
+298.77 , 4188.24   , 146.98
+298.77 , 4786.56   , 167.81
+298.77 , 5384.88   , 188.70
+298.77 , 5983.20   , 209.65
+298.77 , 6581.52   , 230.66
+298.77 , 7179.84   , 251.73
+298.77 , 7778.16   , 272.87
+298.77 , 8376.48   , 294.07
+298.77 , 8974.80   , 315.33
+298.77 , 9573.12   , 336.65
+298.77 , 10171.44  , 358.03
+298.77 , 10769.76  , 379.47
+298.77 , 11368.08  , 400.98
+298.77 , 11966.40  , 422.54
+348.57 , -12984.38 , -423.69
+348.57 , -12335.16 , -403.04
+348.57 , -11685.94 , -382.31
+348.57 , -11036.72 , -361.50
+348.57 , -10387.50 , -340.62
+348.57 , -9738.28  , -319.66
+348.57 , -9089.06  , -298.62
+348.57 , -8439.84  , -277.51
+348.57 , -7790.63  , -256.31
+348.57 , -7141.41  , -235.05
+348.57 , -6492.19  , -213.70
+348.57 , -5842.97  , -192.28
+348.57 , -5193.75  , -170.79
+348.57 , -4544.53  , -149.21
+348.57 , -3895.31  , -127.57
+348.57 , -3246.09  , -105.84
+348.57 , -2596.88  , -84.03
+348.57 , -1947.66  , -62.14
+348.57 , -1298.44  , -40.16
+348.57 , -649.22   , -18.00
+348.57 , -129.84   , 0.00
+348.57 , 119.66    , 8.09
+348.57 , 598.32    , 27.64
+348.57 , 1196.64   , 51.59
+348.57 , 1794.96   , 75.56
+348.57 , 2393.28   , 99.58
+348.57 , 2991.60   , 123.68
+348.57 , 3589.92   , 147.86
+348.57 , 4188.24   , 172.10
+348.57 , 4786.56   , 196.43
+348.57 , 5384.88   , 220.84
+348.57 , 5983.20   , 245.32
+348.57 , 6581.52   , 269.88
+348.57 , 7179.84   , 294.51
+348.57 , 7778.16   , 319.23
+348.57 , 8376.48   , 344.02
+348.57 , 8974.80   , 368.89
+348.57 , 9573.12   , 393.83
+348.57 , 10171.44  , 418.85
+348.57 , 10769.76  , 443.95
+348.57 , 11368.08  , 469.13
+348.57 , 11966.40  , 494.38
+398.37 , -12984.38 , -482.31
+398.37 , -12335.16 , -458.83
+398.37 , -11685.94 , -435.26
+398.37 , -11036.72 , -411.59
+398.37 , -10387.50 , -387.83
+398.37 , -9738.28  , -363.97
+398.37 , -9089.06  , -340.02
+398.37 , -8439.84  , -315.97
+398.37 , -7790.63  , -291.83
+398.37 , -7141.41  , -267.59
+398.37 , -6492.19  , -243.26
+398.37 , -5842.97  , -218.84
+398.37 , -5193.75  , -194.32
+398.37 , -4544.53  , -169.71
+398.37 , -3895.31  , -145.00
+398.37 , -3246.09  , -120.19
+398.37 , -2596.88  , -95.29
+398.37 , -1947.66  , -70.28
+398.37 , -1298.44  , -45.14
+398.37 , -649.22   , -19.76
+398.37 , -129.84   , 0.00
+398.37 , 119.66    , 9.76
+398.37 , 598.32    , 32.25
+398.37 , 1196.64   , 59.66
+398.37 , 1794.96   , 87.07
+398.37 , 2393.28   , 114.55
+398.37 , 2991.60   , 142.11
+398.37 , 3589.92   , 169.77
+398.37 , 4188.24   , 197.52
+398.37 , 4786.56   , 225.37
+398.37 , 5384.88   , 253.31
+398.37 , 5983.20   , 281.34
+398.37 , 6581.52   , 309.47
+398.37 , 7179.84   , 337.70
+398.37 , 7778.16   , 366.02
+398.37 , 8376.48   , 394.44
+398.37 , 8974.80   , 422.95
+398.37 , 9573.12   , 451.56
+398.37 , 10171.44  , 480.26
+398.37 , 10769.76  , 509.05
+398.37 , 11368.08  , 537.94
+398.37 , 11966.40  , 566.93
+448.16 , -12984.38 , -540.17
+448.16 , -12335.16 , -513.92
+448.16 , -11685.94 , -487.55
+448.16 , -11036.72 , -461.06
+448.16 , -10387.50 , -434.46
+448.16 , -9738.28  , -407.75
+448.16 , -9089.06  , -380.92
+448.16 , -8439.84  , -353.97
+448.16 , -7790.63  , -326.91
+448.16 , -7141.41  , -299.73
+448.16 , -6492.19  , -272.44
+448.16 , -5842.97  , -245.03
+448.16 , -5193.75  , -217.51
+448.16 , -4544.53  , -189.87
+448.16 , -3895.31  , -162.12
+448.16 , -3246.09  , -134.25
+448.16 , -2596.88  , -106.26
+448.16 , -1947.66  , -78.13
+448.16 , -1298.44  , -49.84
+448.16 , -649.22   , -21.19
+448.16 , -129.84   , 0.00
+448.16 , 119.66    , 11.59
+448.16 , 598.32    , 37.10
+448.16 , 1196.64   , 67.98
+448.16 , 1794.96   , 98.85
+448.16 , 2393.28   , 129.79
+448.16 , 2991.60   , 160.84
+448.16 , 3589.92   , 191.99
+448.16 , 4188.24   , 223.26
+448.16 , 4786.56   , 254.64
+448.16 , 5384.88   , 286.14
+448.16 , 5983.20   , 317.75
+448.16 , 6581.52   , 349.48
+448.16 , 7179.84   , 381.32
+448.16 , 7778.16   , 413.28
+448.16 , 8376.48   , 445.36
+448.16 , 8974.80   , 477.54
+448.16 , 9573.12   , 509.85
+448.16 , 10171.44  , 542.27
+448.16 , 10769.76  , 574.80
+448.16 , 11368.08  , 607.45
+448.16 , 11966.40  , 640.21
+497.96 , -12984.38 , -597.26
+497.96 , -12335.16 , -568.28
+497.96 , -11685.94 , -539.16
+497.96 , -11036.72 , -509.90
+497.96 , -10387.50 , -480.50
+497.96 , -9738.28  , -450.96
+497.96 , -9089.06  , -421.28
+497.96 , -8439.84  , -391.47
+497.96 , -7790.63  , -361.52
+497.96 , -7141.41  , -331.43
+497.96 , -6492.19  , -301.20
+497.96 , -5842.97  , -270.83
+497.96 , -5193.75  , -240.33
+497.96 , -4544.53  , -209.68
+497.96 , -3895.31  , -178.90
+497.96 , -3246.09  , -147.97
+497.96 , -2596.88  , -116.90
+497.96 , -1947.66  , -85.66
+497.96 , -1298.44  , -54.21
+497.96 , -649.22   , -22.23
+497.96 , -129.84   , 0.00
+497.96 , 119.66    , 13.60
+497.96 , 598.32    , 42.20
+497.96 , 1196.64   , 76.58
+497.96 , 1794.96   , 110.92
+497.96 , 2393.28   , 145.34
+497.96 , 2991.60   , 179.88
+497.96 , 3589.92   , 214.55
+497.96 , 4188.24   , 249.35
+497.96 , 4786.56   , 284.29
+497.96 , 5384.88   , 319.36
+497.96 , 5983.20   , 354.57
+497.96 , 6581.52   , 389.92
+497.96 , 7179.84   , 425.41
+497.96 , 7778.16   , 461.03
+497.96 , 8376.48   , 496.79
+497.96 , 8974.80   , 532.69
+497.96 , 9573.12   , 568.73
+497.96 , 10171.44  , 604.90
+497.96 , 10769.76  , 641.21
+497.96 , 11368.08  , 677.66
+497.96 , 11966.40  , 714.24
+547.75 , -12984.38 , -653.54
+547.75 , -12335.16 , -621.88
+547.75 , -11685.94 , -590.05
+547.75 , -11036.72 , -558.06
+547.75 , -10387.50 , -525.90
+547.75 , -9738.28  , -493.58
+547.75 , -9089.06  , -461.09
+547.75 , -8439.84  , -428.44
+547.75 , -7790.63  , -395.63
+547.75 , -7141.41  , -362.65
+547.75 , -6492.19  , -329.51
+547.75 , -5842.97  , -296.21
+547.75 , -5193.75  , -262.74
+547.75 , -4544.53  , -229.11
+547.75 , -3895.31  , -195.31
+547.75 , -3246.09  , -161.34
+547.75 , -2596.88  , -127.18
+547.75 , -1947.66  , -92.83
+547.75 , -1298.44  , -58.20
+547.75 , -649.22   , -22.82
+547.75 , -129.84   , 0.00
+547.75 , 119.66    , 15.79
+547.75 , 598.32    , 47.58
+547.75 , 1196.64   , 85.48
+547.75 , 1794.96   , 123.30
+547.75 , 2393.28   , 161.22
+547.75 , 2991.60   , 199.26
+547.75 , 3589.92   , 237.46
+547.75 , 4188.24   , 275.81
+547.75 , 4786.56   , 314.32
+547.75 , 5384.88   , 352.99
+547.75 , 5983.20   , 391.83
+547.75 , 6581.52   , 430.82
+547.75 , 7179.84   , 469.98
+547.75 , 7778.16   , 509.30
+547.75 , 8376.48   , 548.78
+547.75 , 8974.80   , 588.42
+547.75 , 9573.12   , 628.23
+547.75 , 10171.44  , 668.20
+547.75 , 10769.76  , 708.32
+547.75 , 11368.08  , 748.61
+547.75 , 11966.40  , 789.06
+597.55 , -12984.38 , -708.97
+597.55 , -12335.16 , -674.68
+597.55 , -11685.94 , -640.19
+597.55 , -11036.72 , -605.51
+597.55 , -10387.50 , -570.63
+597.55 , -9738.28  , -535.56
+597.55 , -9089.06  , -500.30
+597.55 , -8439.84  , -464.85
+597.55 , -7790.63  , -429.21
+597.55 , -7141.41  , -393.37
+597.55 , -6492.19  , -357.35
+597.55 , -5842.97  , -321.13
+597.55 , -5193.75  , -284.71
+597.55 , -4544.53  , -248.11
+597.55 , -3895.31  , -211.31
+597.55 , -3246.09  , -174.30
+597.55 , -2596.88  , -137.08
+597.55 , -1947.66  , -99.61
+597.55 , -1298.44  , -61.78
+597.55 , -649.22   , -22.86
+597.55 , -129.84   , 0.00
+597.55 , 119.66    , 18.17
+597.55 , 598.32    , 53.24
+597.55 , 1196.64   , 94.71
+597.55 , 1794.96   , 136.03
+597.55 , 2393.28   , 177.45
+597.55 , 2991.60   , 219.01
+597.55 , 3589.92   , 260.75
+597.55 , 4188.24   , 302.67
+597.55 , 4786.56   , 344.78
+597.55 , 5384.88   , 387.07
+597.55 , 5983.20   , 429.54
+597.55 , 6581.52   , 472.21
+597.55 , 7179.84   , 515.06
+597.55 , 7778.16   , 558.11
+597.55 , 8376.48   , 601.34
+597.55 , 8974.80   , 644.76
+597.55 , 9573.12   , 688.37
+597.55 , 10171.44  , 732.17
+597.55 , 10769.76  , 776.15
+597.55 , 11368.08  , 820.33
+597.55 , 11966.40  , 864.69
+647.35 , -12984.38 , -763.53
+647.35 , -12335.16 , -726.65
+647.35 , -11685.94 , -689.55
+647.35 , -11036.72 , -652.22
+647.35 , -10387.50 , -614.67
+647.35 , -9738.28  , -576.89
+647.35 , -9089.06  , -538.89
+647.35 , -8439.84  , -500.67
+647.35 , -7790.63  , -462.22
+647.35 , -7141.41  , -423.56
+647.35 , -6492.19  , -384.67
+647.35 , -5842.97  , -345.56
+647.35 , -5193.75  , -306.22
+647.35 , -4544.53  , -266.66
+647.35 , -3895.31  , -226.86
+647.35 , -3246.09  , -186.83
+647.35 , -2596.88  , -146.54
+647.35 , -1947.66  , -105.95
+647.35 , -1298.44  , -64.90
+647.35 , -649.22   , -22.24
+647.35 , -129.84   , 0.00
+647.35 , 119.66    , 20.74
+647.35 , 598.32    , 59.20
+647.35 , 1196.64   , 104.27
+647.35 , 1794.96   , 149.12
+647.35 , 2393.28   , 194.05
+647.35 , 2991.60   , 239.16
+647.35 , 3589.92   , 284.45
+647.35 , 4188.24   , 329.96
+647.35 , 4786.56   , 375.67
+647.35 , 5384.88   , 421.60
+647.35 , 5983.20   , 467.75
+647.35 , 6581.52   , 514.11
+647.35 , 7179.84   , 560.69
+647.35 , 7778.16   , 607.48
+647.35 , 8376.48   , 654.50
+647.35 , 8974.80   , 701.73
+647.35 , 9573.12   , 749.18
+647.35 , 10171.44  , 796.84
+647.35 , 10769.76  , 844.73
+647.35 , 11368.08  , 892.83
+647.35 , 11966.40  , 941.14
+697.14 , -12984.38 , -817.17
+697.14 , -12335.16 , -777.76
+697.14 , -11685.94 , -738.08
+697.14 , -11036.72 , -698.15
+697.14 , -10387.50 , -657.96
+697.14 , -9738.28  , -617.52
+697.14 , -9089.06  , -576.82
+697.14 , -8439.84  , -535.86
+697.14 , -7790.63  , -494.65
+697.14 , -7141.41  , -453.18
+697.14 , -6492.19  , -411.45
+697.14 , -5842.97  , -369.47
+697.14 , -5193.75  , -327.22
+697.14 , -4544.53  , -284.72
+697.14 , -3895.31  , -241.95
+697.14 , -3246.09  , -198.90
+697.14 , -2596.88  , -155.54
+697.14 , -1947.66  , -111.82
+697.14 , -1298.44  , -67.51
+697.14 , -649.22   , -20.80
+697.14 , -129.84   , 0.00
+697.14 , 119.66    , 23.52
+697.14 , 598.32    , 65.48
+697.14 , 1196.64   , 114.20
+697.14 , 1794.96   , 162.59
+697.14 , 2393.28   , 211.06
+697.14 , 2991.60   , 259.72
+697.14 , 3589.92   , 308.59
+697.14 , 4188.24   , 357.69
+697.14 , 4786.56   , 407.04
+697.14 , 5384.88   , 456.62
+697.14 , 5983.20   , 506.46
+697.14 , 6581.52   , 556.54
+697.14 , 7179.84   , 606.87
+697.14 , 7778.16   , 657.45
+697.14 , 8376.48   , 708.28
+697.14 , 8974.80   , 759.35
+697.14 , 9573.12   , 810.68
+697.14 , 10171.44  , 862.25
+697.14 , 10769.76  , 914.07
+697.14 , 11368.08  , 966.13
+697.14 , 11966.40  , 1018.44
+746.94 , -12984.38 , -869.86
+746.94 , -12335.16 , -827.96
+746.94 , -11685.94 , -785.77
+746.94 , -11036.72 , -743.28
+746.94 , -10387.50 , -700.50
+746.94 , -9738.28  , -657.42
+746.94 , -9089.06  , -614.05
+746.94 , -8439.84  , -570.39
+746.94 , -7790.63  , -526.44
+746.94 , -7141.41  , -482.19
+746.94 , -6492.19  , -437.65
+746.94 , -5842.97  , -392.82
+746.94 , -5193.75  , -347.69
+746.94 , -4544.53  , -302.26
+746.94 , -3895.31  , -256.52
+746.94 , -3246.09  , -210.46
+746.94 , -2596.88  , -164.04
+746.94 , -1947.66  , -117.17
+746.94 , -1298.44  , -69.54
+746.94 , -649.22   , -18.27
+746.94 , -129.84   , 0.00
+746.94 , 119.66    , 26.49
+746.94 , 598.32    , 72.10
+746.94 , 1196.64   , 124.50
+746.94 , 1794.96   , 176.46
+746.94 , 2393.28   , 228.49
+746.94 , 2991.60   , 280.71
+746.94 , 3589.92   , 333.18
+746.94 , 4188.24   , 385.90
+746.94 , 4786.56   , 438.89
+746.94 , 5384.88   , 492.16
+746.94 , 5983.20   , 545.71
+746.94 , 6581.52   , 599.54
+746.94 , 7179.84   , 653.64
+746.94 , 7778.16   , 708.03
+746.94 , 8376.48   , 762.71
+746.94 , 8974.80   , 817.66
+746.94 , 9573.12   , 872.89
+746.94 , 10171.44  , 928.41
+746.94 , 10769.76  , 984.20
+746.94 , 11368.08  , 1040.27
+746.94 , 11966.40  , 1096.63
+796.73 , -12984.38 , -921.56
+796.73 , -12335.16 , -877.23
+796.73 , -11685.94 , -832.56
+796.73 , -11036.72 , -787.56
+796.73 , -10387.50 , -742.22
+796.73 , -9738.28  , -696.56
+796.73 , -9089.06  , -650.56
+796.73 , -8439.84  , -604.23
+796.73 , -7790.63  , -557.56
+796.73 , -7141.41  , -510.57
+796.73 , -6492.19  , -463.24
+796.73 , -5842.97  , -415.58
+796.73 , -5193.75  , -367.58
+796.73 , -4544.53  , -319.24
+796.73 , -3895.31  , -270.55
+796.73 , -3246.09  , -221.48
+796.73 , -2596.88  , -171.99
+796.73 , -1947.66  , -121.95
+796.73 , -1298.44  , -70.93
+796.73 , -649.22   , -14.10
+796.73 , -129.84   , 0.00
+796.73 , 119.66    , 29.68
+796.73 , 598.32    , 79.05
+796.73 , 1196.64   , 135.20
+796.73 , 1794.96   , 190.76
+796.73 , 2393.28   , 246.36
+796.73 , 2991.60   , 302.17
+796.73 , 3589.92   , 358.24
+796.73 , 4188.24   , 414.60
+796.73 , 4786.56   , 471.27
+796.73 , 5384.88   , 528.24
+796.73 , 5983.20   , 585.52
+796.73 , 6581.52   , 643.12
+796.73 , 7179.84   , 701.03
+796.73 , 7778.16   , 759.26
+796.73 , 8376.48   , 817.80
+796.73 , 8974.80   , 876.66
+796.73 , 9573.12   , 935.84
+796.73 , 10171.44  , 995.34
+796.73 , 10769.76  , 1055.15
+796.73 , 11368.08  , 1115.27
+796.73 , 11966.40  , 1175.71
+846.53 , -12984.38 , -972.24
+846.53 , -12335.16 , -925.52
+846.53 , -11685.94 , -878.43
+846.53 , -11036.72 , -830.96
+846.53 , -10387.50 , -783.11
+846.53 , -9738.28  , -734.89
+846.53 , -9089.06  , -686.30
+846.53 , -8439.84  , -637.33
+846.53 , -7790.63  , -587.99
+846.53 , -7141.41  , -538.28
+846.53 , -6492.19  , -488.19
+846.53 , -5842.97  , -437.72
+846.53 , -5193.75  , -386.87
+846.53 , -4544.53  , -335.63
+846.53 , -3895.31  , -283.99
+846.53 , -3246.09  , -231.92
+846.53 , -2596.88  , -179.35
+846.53 , -1947.66  , -126.12
+846.53 , -1298.44  , -71.60
+846.53 , -649.22   , -6.45
+846.53 , -129.84   , 0.00
+846.53 , 119.66    , 33.08
+846.53 , 598.32    , 86.37
+846.53 , 1196.64   , 146.31
+846.53 , 1794.96   , 205.50
+846.53 , 2393.28   , 264.70
+846.53 , 2991.60   , 324.11
+846.53 , 3589.92   , 383.81
+846.53 , 4188.24   , 443.83
+846.53 , 4786.56   , 504.18
+846.53 , 5384.88   , 564.87
+846.53 , 5983.20   , 625.91
+846.53 , 6581.52   , 687.30
+846.53 , 7179.84   , 749.05
+846.53 , 7778.16   , 811.14
+846.53 , 8376.48   , 873.59
+846.53 , 8974.80   , 936.40
+846.53 , 9573.12   , 999.56
+846.53 , 10171.44  , 1063.07
+846.53 , 10769.76  , 1126.93
+846.53 , 11368.08  , 1191.14
+846.53 , 11966.40  , 1255.71
+896.32 , -12984.38 , -1021.86
+896.32 , -12335.16 , -972.81
+896.32 , -11685.94 , -923.33
+896.32 , -11036.72 , -873.44
+896.32 , -10387.50 , -823.13
+896.32 , -9738.28  , -772.39
+896.32 , -9089.06  , -721.24
+896.32 , -8439.84  , -669.67
+896.32 , -7790.63  , -617.68
+896.32 , -7141.41  , -565.27
+896.32 , -6492.19  , -512.45
+896.32 , -5842.97  , -459.19
+896.32 , -5193.75  , -405.51
+896.32 , -4544.53  , -351.39
+896.32 , -3895.31  , -296.81
+896.32 , -3246.09  , -241.73
+896.32 , -2596.88  , -186.07
+896.32 , -1947.66  , -129.61
+896.32 , -1298.44  , -71.46
+896.32 , -649.22   , 0.00
+896.32 , -129.84   , 0.00
+896.32 , 119.66    , 36.70
+896.32 , 598.32    , 94.04
+896.32 , 1196.64   , 157.85
+896.32 , 1794.96   , 220.70
+896.32 , 2393.28   , 283.52
+896.32 , 2991.60   , 346.56
+896.32 , 3589.92   , 409.90
+896.32 , 4188.24   , 473.59
+896.32 , 4786.56   , 537.65
+896.32 , 5384.88   , 602.09
+896.32 , 5983.20   , 666.91
+896.32 , 6581.52   , 732.12
+896.32 , 7179.84   , 797.72
+896.32 , 7778.16   , 863.72
+896.32 , 8376.48   , 930.10
+896.32 , 8974.80   , 996.88
+896.32 , 9573.12   , 1064.05
+896.32 , 10171.44  , 1131.62
+896.32 , 10769.76  , 1199.57
+896.32 , 11368.08  , 1267.92
+896.32 , 11966.40  , 1336.65
+946.12 , -12984.38 , -1070.37
+946.12 , -12335.16 , -1019.04
+946.12 , -11685.94 , -967.24
+946.12 , -11036.72 , -914.96
+946.12 , -10387.50 , -862.23
+946.12 , -9738.28  , -809.02
+946.12 , -9089.06  , -755.35
+946.12 , -8439.84  , -701.21
+946.12 , -7790.63  , -646.60
+946.12 , -7141.41  , -591.53
+946.12 , -6492.19  , -535.99
+946.12 , -5842.97  , -479.97
+946.12 , -5193.75  , -423.47
+946.12 , -4544.53  , -366.48
+946.12 , -3895.31  , -308.96
+946.12 , -3246.09  , -250.88
+946.12 , -2596.88  , -192.11
+946.12 , -1947.66  , -132.36
+946.12 , -1298.44  , -70.38
+946.12 , -649.22   , 0.00
+946.12 , -129.84   , 0.00
+946.12 , 119.66    , 40.53
+946.12 , 598.32    , 102.10
+946.12 , 1196.64   , 169.83
+946.12 , 1794.96   , 236.37
+946.12 , 2393.28   , 302.84
+946.12 , 2991.60   , 369.53
+946.12 , 3589.92   , 436.54
+946.12 , 4188.24   , 503.92
+946.12 , 4786.56   , 571.71
+946.12 , 5384.88   , 639.91
+946.12 , 5983.20   , 708.54
+946.12 , 6581.52   , 777.59
+946.12 , 7179.84   , 847.08
+946.12 , 7778.16   , 917.00
+946.12 , 8376.48   , 987.35
+946.12 , 8974.80   , 1058.14
+946.12 , 9573.12   , 1129.36
+946.12 , 10171.44  , 1201.01
+946.12 , 10769.76  , 1273.09
+946.12 , 11368.08  , 1345.61
+946.12 , 11966.40  , 1418.56
+995.92 , -12984.38 , -1117.74
+995.92 , -12335.16 , -1064.18
+995.92 , -11685.94 , -1010.10
+995.92 , -11036.72 , -955.49
+995.92 , -10387.50 , -900.37
+995.92 , -9738.28  , -844.73
+995.92 , -9089.06  , -788.58
+995.92 , -8439.84  , -731.90
+995.92 , -7790.63  , -674.71
+995.92 , -7141.41  , -617.00
+995.92 , -6492.19  , -558.77
+995.92 , -5842.97  , -500.01
+995.92 , -5193.75  , -440.71
+995.92 , -4544.53  , -380.85
+995.92 , -3895.31  , -320.40
+995.92 , -3246.09  , -259.31
+995.92 , -2596.88  , -197.41
+995.92 , -1947.66  , -134.30
+995.92 , -1298.44  , -68.24
+995.92 , -649.22   , 0.00
+995.92 , -129.84   , 0.00
+995.92 , 119.66    , 44.59
+995.92 , 598.32    , 110.53
+995.92 , 1196.64   , 182.27
+995.92 , 1794.96   , 252.55
+
diff --git a/VectoCore/VectoCoreTest/TestData/Components/IEPC/IEPCMapReader/IEPC_Gbx3_1_following_curve.viepco b/VectoCore/VectoCoreTest/TestData/Components/IEPC/IEPCMapReader/IEPC_Gbx3_1_following_curve.viepco
new file mode 100644
index 0000000000..5f8617cdc6
--- /dev/null
+++ b/VectoCore/VectoCoreTest/TestData/Components/IEPC/IEPCMapReader/IEPC_Gbx3_1_following_curve.viepco
@@ -0,0 +1,837 @@
+n_out  , T_out     , P_el
+0.00   , -12984.38 , 0.00
+0.00   , -12335.16 , 0.00
+0.00   , -11685.94 , 0.00
+0.00   , -11036.72 , 0.00
+0.00   , -10387.50 , 0.00
+0.00   , -9738.28  , 0.00
+0.00   , -9089.06  , -0.13
+0.00   , -8439.84  , -0.66
+0.00   , -7790.63  , -0.98
+0.00   , -7141.41  , -1.19
+0.00   , -6492.19  , -1.32
+0.00   , -5842.97  , -1.38
+0.00   , -5193.75  , -1.39
+0.00   , -4544.53  , -1.35
+0.00   , -3895.31  , -1.26
+0.00   , -3246.09  , -1.13
+0.00   , -2596.88  , -0.97
+0.00   , -1947.66  , -0.77
+0.00   , -1298.44  , -0.53
+0.00   , -649.22   , -0.27
+0.00   , -129.84   , -0.02
+0.00   , 119.66    , 0.13
+0.00   , 598.32    , 0.56
+0.00   , 1196.64   , 1.12
+0.00   , 1794.96   , 1.70
+0.00   , 2393.28   , 2.31
+0.00   , 2991.60   , 2.93
+0.00   , 3589.92   , 3.58
+0.00   , 4188.24   , 4.25
+0.00   , 4786.56   , 4.93
+0.00   , 5384.88   , 5.64
+0.00   , 5983.20   , 6.37
+0.00   , 6581.52   , 7.12
+0.00   , 7179.84   , 7.88
+0.00   , 7778.16   , 8.67
+0.00   , 8376.48   , 9.47
+0.00   , 8974.80   , 10.29
+0.00   , 9573.12   , 11.13
+0.00   , 10171.44  , 11.99
+0.00   , 10769.76  , 12.87
+0.00   , 11368.08  , 13.76
+0.00   , 11966.40  , 14.67
+4.98   , -12984.38 , 0.00
+4.98   , -12335.16 , 0.00
+4.98   , -11685.94 , 0.00
+4.98   , -11036.72 , 0.00
+4.98   , -10387.50 , 0.00
+4.98   , -9738.28  , 0.00
+4.98   , -9089.06  , -0.50
+4.98   , -8439.84  , -0.84
+4.98   , -7790.63  , -1.04
+4.98   , -7141.41  , -1.16
+4.98   , -6492.19  , -1.22
+4.98   , -5842.97  , -1.24
+4.98   , -5193.75  , -1.21
+4.98   , -4544.53  , -1.15
+4.98   , -3895.31  , -1.06
+4.98   , -3246.09  , -0.94
+4.98   , -2596.88  , -0.80
+4.98   , -1947.66  , -0.62
+4.98   , -1298.44  , -0.43
+4.98   , -649.22   , -0.21
+4.98   , -129.84   , -0.02
+4.98   , 119.66    , 0.10
+4.98   , 598.32    , 0.43
+4.98   , 1196.64   , 0.85
+4.98   , 1794.96   , 1.30
+4.98   , 2393.28   , 1.75
+4.98   , 2991.60   , 2.23
+4.98   , 3589.92   , 2.71
+4.98   , 4188.24   , 3.21
+4.98   , 4786.56   , 3.73
+4.98   , 5384.88   , 4.26
+4.98   , 5983.20   , 4.80
+4.98   , 6581.52   , 5.36
+4.98   , 7179.84   , 5.93
+4.98   , 7778.16   , 6.52
+4.98   , 8376.48   , 7.12
+4.98   , 8974.80   , 7.73
+4.98   , 9573.12   , 8.35
+4.98   , 10171.44  , 8.99
+4.98   , 10769.76  , 9.64
+4.98   , 11368.08  , 10.30
+4.98   , 11966.40  , 10.98
+49.80  , -12984.38 , -58.10
+49.80  , -12335.16 , -55.37
+49.80  , -11685.94 , -52.62
+49.80  , -11036.72 , -49.85
+49.80  , -10387.50 , -47.06
+49.80  , -9738.28  , -44.25
+49.80  , -9089.06  , -41.42
+49.80  , -8439.84  , -38.57
+49.80  , -7790.63  , -35.70
+49.80  , -7141.41  , -32.81
+49.80  , -6492.19  , -29.90
+49.80  , -5842.97  , -26.98
+49.80  , -5193.75  , -24.03
+49.80  , -4544.53  , -21.07
+49.80  , -3895.31  , -18.08
+49.80  , -3246.09  , -15.08
+49.80  , -2596.88  , -12.06
+49.80  , -1947.66  , -9.02
+49.80  , -1298.44  , -5.96
+49.80  , -649.22   , -2.88
+49.80  , -129.84   , -0.37
+49.80  , 119.66    , 0.90
+49.80  , 598.32    , 3.68
+49.80  , 1196.64   , 7.16
+49.80  , 1794.96   , 10.66
+49.80  , 2393.28   , 14.17
+49.80  , 2991.60   , 17.71
+49.80  , 3589.92   , 21.26
+49.80  , 4188.24   , 24.84
+49.80  , 4786.56   , 28.43
+49.80  , 5384.88   , 32.04
+49.80  , 5983.20   , 35.67
+49.80  , 6581.52   , 39.32
+49.80  , 7179.84   , 42.99
+49.80  , 7778.16   , 46.68
+49.80  , 8376.48   , 50.38
+49.80  , 8974.80   , 54.11
+49.80  , 9573.12   , 57.85
+49.80  , 10171.44  , 61.61
+49.80  , 10769.76  , 65.39
+49.80  , 11368.08  , 69.19
+49.80  , 11966.40  , 73.01
+99.59  , -12984.38 , -120.57
+99.59  , -12335.16 , -114.73
+99.59  , -11685.94 , -108.87
+99.59  , -11036.72 , -102.99
+99.59  , -10387.50 , -97.08
+99.59  , -9738.28  , -91.15
+99.59  , -9089.06  , -85.20
+99.59  , -8439.84  , -79.23
+99.59  , -7790.63  , -73.23
+99.59  , -7141.41  , -67.21
+99.59  , -6492.19  , -61.17
+99.59  , -5842.97  , -55.10
+99.59  , -5193.75  , -49.01
+99.59  , -4544.53  , -42.90
+99.59  , -3895.31  , -36.77
+99.59  , -3246.09  , -30.61
+99.59  , -2596.88  , -24.43
+99.59  , -1947.66  , -18.23
+99.59  , -1298.44  , -12.01
+99.59  , -649.22   , -5.76
+99.59  , -129.84   , -0.66
+99.59  , 119.66    , 1.84
+99.59  , 598.32    , 7.35
+99.59  , 1196.64   , 14.22
+99.59  , 1794.96   , 21.11
+99.59  , 2393.28   , 28.02
+99.59  , 2991.60   , 34.96
+99.59  , 3589.92   , 41.92
+99.59  , 4188.24   , 48.90
+99.59  , 4786.56   , 55.90
+99.59  , 5384.88   , 62.93
+99.59  , 5983.20   , 69.98
+99.59  , 6581.52   , 77.05
+99.59  , 7179.84   , 84.15
+99.59  , 7778.16   , 91.27
+99.59  , 8376.48   , 98.41
+99.59  , 8974.80   , 105.58
+99.59  , 9573.12   , 112.76
+99.59  , 10171.44  , 119.97
+99.59  , 10769.76  , 127.21
+99.59  , 11368.08  , 134.46
+99.59  , 11966.40  , 141.74
+149.39 , -12984.38 , -182.44
+149.39 , -12335.16 , -173.55
+149.39 , -11685.94 , -164.62
+149.39 , -11036.72 , -155.67
+149.39 , -10387.50 , -146.69
+149.39 , -9738.28  , -137.68
+149.39 , -9089.06  , -128.65
+149.39 , -8439.84  , -119.58
+149.39 , -7790.63  , -110.49
+149.39 , -7141.41  , -101.36
+149.39 , -6492.19  , -92.21
+149.39 , -5842.97  , -83.03
+149.39 , -5193.75  , -73.82
+149.39 , -4544.53  , -64.58
+149.39 , -3895.31  , -55.31
+149.39 , -3246.09  , -46.02
+149.39 , -2596.88  , -36.70
+149.39 , -1947.66  , -27.34
+149.39 , -1298.44  , -17.96
+149.39 , -649.22   , -8.54
+149.39 , -129.84   , -0.79
+149.39 , 119.66    , 2.86
+149.39 , 598.32    , 11.12
+149.39 , 1196.64   , 21.39
+149.39 , 1794.96   , 31.68
+149.39 , 2393.28   , 41.99
+149.39 , 2991.60   , 52.34
+149.39 , 3589.92   , 62.71
+149.39 , 4188.24   , 73.12
+149.39 , 4786.56   , 83.55
+149.39 , 5384.88   , 94.01
+149.39 , 5983.20   , 104.50
+149.39 , 6581.52   , 115.02
+149.39 , 7179.84   , 125.57
+149.39 , 7778.16   , 136.15
+149.39 , 8376.48   , 146.76
+149.39 , 8974.80   , 157.40
+149.39 , 9573.12   , 168.06
+149.39 , 10171.44  , 178.76
+149.39 , 10769.76  , 189.48
+149.39 , 11368.08  , 200.23
+149.39 , 11966.40  , 211.02
+199.18 , -12984.38 , -243.71
+199.18 , -12335.16 , -231.81
+199.18 , -11685.94 , -219.87
+199.18 , -11036.72 , -207.89
+199.18 , -10387.50 , -195.88
+199.18 , -9738.28  , -183.83
+199.18 , -9089.06  , -171.74
+199.18 , -8439.84  , -159.61
+199.18 , -7790.63  , -147.45
+199.18 , -7141.41  , -135.25
+199.18 , -6492.19  , -123.01
+199.18 , -5842.97  , -110.74
+199.18 , -5193.75  , -98.43
+199.18 , -4544.53  , -86.08
+199.18 , -3895.31  , -73.70
+199.18 , -3246.09  , -61.27
+199.18 , -2596.88  , -48.82
+199.18 , -1947.66  , -36.32
+199.18 , -1298.44  , -23.78
+199.18 , -649.22   , -11.19
+199.18 , -129.84   , -0.63
+199.18 , 119.66    , 3.98
+199.18 , 598.32    , 15.01
+199.18 , 1196.64   , 28.68
+199.18 , 1794.96   , 42.37
+199.18 , 2393.28   , 56.10
+199.18 , 2991.60   , 69.87
+199.18 , 3589.92   , 83.67
+199.18 , 4188.24   , 97.52
+199.18 , 4786.56   , 111.40
+199.18 , 5384.88   , 125.31
+199.18 , 5983.20   , 139.27
+199.18 , 6581.52   , 153.26
+199.18 , 7179.84   , 167.29
+199.18 , 7778.16   , 181.36
+199.18 , 8376.48   , 195.46
+199.18 , 8974.80   , 209.61
+199.18 , 9573.12   , 223.79
+199.18 , 10171.44  , 238.01
+199.18 , 10769.76  , 252.26
+199.18 , 11368.08  , 266.56
+199.18 , 11966.40  , 280.89
+248.98 , -12984.38 , -304.37
+248.98 , -12335.16 , -289.50
+248.98 , -11685.94 , -274.59
+248.98 , -11036.72 , -259.63
+248.98 , -10387.50 , -244.61
+248.98 , -9738.28  , -229.56
+248.98 , -9089.06  , -214.45
+248.98 , -8439.84  , -199.30
+248.98 , -7790.63  , -184.10
+248.98 , -7141.41  , -168.85
+248.98 , -6492.19  , -153.55
+248.98 , -5842.97  , -138.20
+248.98 , -5193.75  , -122.81
+248.98 , -4544.53  , -107.37
+248.98 , -3895.31  , -91.88
+248.98 , -3246.09  , -76.35
+248.98 , -2596.88  , -60.76
+248.98 , -1947.66  , -45.13
+248.98 , -1298.44  , -29.44
+248.98 , -649.22   , -13.67
+248.98 , -129.84   , 0.00
+248.98 , 119.66    , 5.21
+248.98 , 598.32    , 19.04
+248.98 , 1196.64   , 36.13
+248.98 , 1794.96   , 53.24
+248.98 , 2393.28   , 70.39
+248.98 , 2991.60   , 87.59
+248.98 , 3589.92   , 104.83
+248.98 , 4188.24   , 122.13
+248.98 , 4786.56   , 139.47
+248.98 , 5384.88   , 156.87
+248.98 , 5983.20   , 174.31
+248.98 , 6581.52   , 191.80
+248.98 , 7179.84   , 209.33
+248.98 , 7778.16   , 226.92
+248.98 , 8376.48   , 244.56
+248.98 , 8974.80   , 262.24
+248.98 , 9573.12   , 279.97
+248.98 , 10171.44  , 297.76
+248.98 , 10769.76  , 315.58
+248.98 , 11368.08  , 333.46
+248.98 , 11966.40  , 351.39
+298.77 , -12984.38 , -364.37
+298.77 , -12335.16 , -346.59
+298.77 , -11685.94 , -328.74
+298.77 , -11036.72 , -310.84
+298.77 , -10387.50 , -292.87
+298.77 , -9738.28  , -274.84
+298.77 , -9089.06  , -256.75
+298.77 , -8439.84  , -238.60
+298.77 , -7790.63  , -220.39
+298.77 , -7141.41  , -202.12
+298.77 , -6492.19  , -183.79
+298.77 , -5842.97  , -165.40
+298.77 , -5193.75  , -146.94
+298.77 , -4544.53  , -128.43
+298.77 , -3895.31  , -109.85
+298.77 , -3246.09  , -91.21
+298.77 , -2596.88  , -72.51
+298.77 , -1947.66  , -53.75
+298.77 , -1298.44  , -34.91
+298.77 , -649.22   , -15.95
+298.77 , -129.84   , 0.00
+298.77 , 119.66    , 6.58
+298.77 , 598.32    , 23.25
+298.77 , 1196.64   , 43.76
+298.77 , 1794.96   , 64.29
+298.77 , 2393.28   , 84.87
+298.77 , 2991.60   , 105.52
+298.77 , 3589.92   , 126.22
+298.77 , 4188.24   , 146.98
+298.77 , 4786.56   , 167.81
+298.77 , 5384.88   , 188.70
+298.77 , 5983.20   , 209.65
+298.77 , 6581.52   , 230.66
+298.77 , 7179.84   , 251.73
+298.77 , 7778.16   , 272.87
+298.77 , 8376.48   , 294.07
+298.77 , 8974.80   , 315.33
+298.77 , 9573.12   , 336.65
+298.77 , 10171.44  , 358.03
+298.77 , 10769.76  , 379.47
+298.77 , 11368.08  , 400.98
+298.77 , 11966.40  , 422.54
+348.57 , -12984.38 , -423.69
+348.57 , -12335.16 , -403.04
+348.57 , -11685.94 , -382.31
+348.57 , -11036.72 , -361.50
+348.57 , -10387.50 , -340.62
+348.57 , -9738.28  , -319.66
+348.57 , -9089.06  , -298.62
+348.57 , -8439.84  , -277.51
+348.57 , -7790.63  , -256.31
+348.57 , -7141.41  , -235.05
+348.57 , -6492.19  , -213.70
+348.57 , -5842.97  , -192.28
+348.57 , -5193.75  , -170.79
+348.57 , -4544.53  , -149.21
+348.57 , -3895.31  , -127.57
+348.57 , -3246.09  , -105.84
+348.57 , -2596.88  , -84.03
+348.57 , -1947.66  , -62.14
+348.57 , -1298.44  , -40.16
+348.57 , -649.22   , -18.00
+348.57 , -129.84   , 0.00
+348.57 , 119.66    , 8.09
+348.57 , 598.32    , 27.64
+348.57 , 1196.64   , 51.59
+348.57 , 1794.96   , 75.56
+348.57 , 2393.28   , 99.58
+348.57 , 2991.60   , 123.68
+348.57 , 3589.92   , 147.86
+348.57 , 4188.24   , 172.10
+348.57 , 4786.56   , 196.43
+348.57 , 5384.88   , 220.84
+348.57 , 5983.20   , 245.32
+348.57 , 6581.52   , 269.88
+348.57 , 7179.84   , 294.51
+348.57 , 7778.16   , 319.23
+348.57 , 8376.48   , 344.02
+348.57 , 8974.80   , 368.89
+348.57 , 9573.12   , 393.83
+348.57 , 10171.44  , 418.85
+348.57 , 10769.76  , 443.95
+348.57 , 11368.08  , 469.13
+348.57 , 11966.40  , 494.38
+398.37 , -12984.38 , -482.31
+398.37 , -12335.16 , -458.83
+398.37 , -11685.94 , -435.26
+398.37 , -11036.72 , -411.59
+398.37 , -10387.50 , -387.83
+398.37 , -9738.28  , -363.97
+398.37 , -9089.06  , -340.02
+398.37 , -8439.84  , -315.97
+398.37 , -7790.63  , -291.83
+398.37 , -7141.41  , -267.59
+398.37 , -6492.19  , -243.26
+398.37 , -5842.97  , -218.84
+398.37 , -5193.75  , -194.32
+398.37 , -4544.53  , -169.71
+398.37 , -3895.31  , -145.00
+398.37 , -3246.09  , -120.19
+398.37 , -2596.88  , -95.29
+398.37 , -1947.66  , -70.28
+398.37 , -1298.44  , -45.14
+398.37 , -649.22   , -19.76
+398.37 , -129.84   , 0.00
+398.37 , 119.66    , 9.76
+398.37 , 598.32    , 32.25
+398.37 , 1196.64   , 59.66
+398.37 , 1794.96   , 87.07
+398.37 , 2393.28   , 114.55
+398.37 , 2991.60   , 142.11
+398.37 , 3589.92   , 169.77
+398.37 , 4188.24   , 197.52
+398.37 , 4786.56   , 225.37
+398.37 , 5384.88   , 253.31
+398.37 , 5983.20   , 281.34
+398.37 , 6581.52   , 309.47
+398.37 , 7179.84   , 337.70
+398.37 , 7778.16   , 366.02
+398.37 , 8376.48   , 394.44
+398.37 , 8974.80   , 422.95
+398.37 , 9573.12   , 451.56
+398.37 , 10171.44  , 480.26
+398.37 , 10769.76  , 509.05
+398.37 , 11368.08  , 537.94
+398.37 , 11966.40  , 566.93
+448.16 , -12984.38 , -540.17
+448.16 , -12335.16 , -513.92
+448.16 , -11685.94 , -487.55
+448.16 , -11036.72 , -461.06
+448.16 , -10387.50 , -434.46
+448.16 , -9738.28  , -407.75
+448.16 , -9089.06  , -380.92
+448.16 , -8439.84  , -353.97
+448.16 , -7790.63  , -326.91
+448.16 , -7141.41  , -299.73
+448.16 , -6492.19  , -272.44
+448.16 , -5842.97  , -245.03
+448.16 , -5193.75  , -217.51
+448.16 , -4544.53  , -189.87
+448.16 , -3895.31  , -162.12
+448.16 , -3246.09  , -134.25
+448.16 , -2596.88  , -106.26
+448.16 , -1947.66  , -78.13
+448.16 , -1298.44  , -49.84
+448.16 , -649.22   , -21.19
+448.16 , -129.84   , 0.00
+448.16 , 119.66    , 11.59
+448.16 , 598.32    , 37.10
+448.16 , 1196.64   , 67.98
+448.16 , 1794.96   , 98.85
+448.16 , 2393.28   , 129.79
+448.16 , 2991.60   , 160.84
+448.16 , 3589.92   , 191.99
+448.16 , 4188.24   , 223.26
+448.16 , 4786.56   , 254.64
+448.16 , 5384.88   , 286.14
+448.16 , 5983.20   , 317.75
+448.16 , 6581.52   , 349.48
+448.16 , 7179.84   , 381.32
+448.16 , 7778.16   , 413.28
+448.16 , 8376.48   , 445.36
+448.16 , 8974.80   , 477.54
+448.16 , 9573.12   , 509.85
+448.16 , 10171.44  , 542.27
+448.16 , 10769.76  , 574.80
+448.16 , 11368.08  , 607.45
+448.16 , 11966.40  , 640.21
+497.96 , -12984.38 , -597.26
+497.96 , -12335.16 , -568.28
+497.96 , -11685.94 , -539.16
+497.96 , -11036.72 , -509.90
+497.96 , -10387.50 , -480.50
+497.96 , -9738.28  , -450.96
+497.96 , -9089.06  , -421.28
+497.96 , -8439.84  , -391.47
+497.96 , -7790.63  , -361.52
+497.96 , -7141.41  , -331.43
+497.96 , -6492.19  , -301.20
+497.96 , -5842.97  , -270.83
+497.96 , -5193.75  , -240.33
+497.96 , -4544.53  , -209.68
+497.96 , -3895.31  , -178.90
+497.96 , -3246.09  , -147.97
+497.96 , -2596.88  , -116.90
+497.96 , -1947.66  , -85.66
+497.96 , -1298.44  , -54.21
+497.96 , -649.22   , -22.23
+497.96 , -129.84   , 0.00
+497.96 , 119.66    , 13.60
+497.96 , 598.32    , 42.20
+497.96 , 1196.64   , 76.58
+497.96 , 1794.96   , 110.92
+497.96 , 2393.28   , 145.34
+497.96 , 2991.60   , 179.88
+497.96 , 3589.92   , 214.55
+497.96 , 4188.24   , 249.35
+497.96 , 4786.56   , 284.29
+497.96 , 5384.88   , 319.36
+497.96 , 5983.20   , 354.57
+497.96 , 6581.52   , 389.92
+497.96 , 7179.84   , 425.41
+497.96 , 7778.16   , 461.03
+497.96 , 8376.48   , 496.79
+497.96 , 8974.80   , 532.69
+497.96 , 9573.12   , 568.73
+497.96 , 10171.44  , 604.90
+497.96 , 10769.76  , 641.21
+497.96 , 11368.08  , 677.66
+497.96 , 11966.40  , 714.24
+547.75 , -12984.38 , -653.54
+547.75 , -12335.16 , -621.88
+547.75 , -11685.94 , -590.05
+547.75 , -11036.72 , -558.06
+547.75 , -10387.50 , -525.90
+547.75 , -9738.28  , -493.58
+547.75 , -9089.06  , -461.09
+547.75 , -8439.84  , -428.44
+547.75 , -7790.63  , -395.63
+547.75 , -7141.41  , -362.65
+547.75 , -6492.19  , -329.51
+547.75 , -5842.97  , -296.21
+547.75 , -5193.75  , -262.74
+547.75 , -4544.53  , -229.11
+547.75 , -3895.31  , -195.31
+547.75 , -3246.09  , -161.34
+547.75 , -2596.88  , -127.18
+547.75 , -1947.66  , -92.83
+547.75 , -1298.44  , -58.20
+547.75 , -649.22   , -22.82
+547.75 , -129.84   , 0.00
+547.75 , 119.66    , 15.79
+547.75 , 598.32    , 47.58
+547.75 , 1196.64   , 85.48
+547.75 , 1794.96   , 123.30
+547.75 , 2393.28   , 161.22
+547.75 , 2991.60   , 199.26
+547.75 , 3589.92   , 237.46
+547.75 , 4188.24   , 275.81
+547.75 , 4786.56   , 314.32
+547.75 , 5384.88   , 352.99
+547.75 , 5983.20   , 391.83
+547.75 , 6581.52   , 430.82
+547.75 , 7179.84   , 469.98
+547.75 , 7778.16   , 509.30
+547.75 , 8376.48   , 548.78
+547.75 , 8974.80   , 588.42
+547.75 , 9573.12   , 628.23
+547.75 , 10171.44  , 668.20
+547.75 , 10769.76  , 708.32
+547.75 , 11368.08  , 748.61
+547.75 , 11966.40  , 789.06
+597.55 , -12984.38 , -708.97
+597.55 , -12335.16 , -674.68
+597.55 , -11685.94 , -640.19
+597.55 , -11036.72 , -605.51
+597.55 , -10387.50 , -570.63
+597.55 , -9738.28  , -535.56
+597.55 , -9089.06  , -500.30
+597.55 , -8439.84  , -464.85
+597.55 , -7790.63  , -429.21
+597.55 , -7141.41  , -393.37
+597.55 , -6492.19  , -357.35
+597.55 , -5842.97  , -321.13
+597.55 , -5193.75  , -284.71
+597.55 , -4544.53  , -248.11
+597.55 , -3895.31  , -211.31
+597.55 , -3246.09  , -174.30
+597.55 , -2596.88  , -137.08
+597.55 , -1947.66  , -99.61
+597.55 , -1298.44  , -61.78
+597.55 , -649.22   , -22.86
+597.55 , -129.84   , 0.00
+597.55 , 119.66    , 18.17
+597.55 , 598.32    , 53.24
+597.55 , 1196.64   , 94.71
+597.55 , 1794.96   , 136.03
+597.55 , 2393.28   , 177.45
+597.55 , 2991.60   , 219.01
+597.55 , 3589.92   , 260.75
+597.55 , 4188.24   , 302.67
+597.55 , 4786.56   , 344.78
+597.55 , 5384.88   , 387.07
+597.55 , 5983.20   , 429.54
+597.55 , 6581.52   , 472.21
+597.55 , 7179.84   , 515.06
+597.55 , 7778.16   , 558.11
+597.55 , 8376.48   , 601.34
+597.55 , 8974.80   , 644.76
+597.55 , 9573.12   , 688.37
+597.55 , 10171.44  , 732.17
+597.55 , 10769.76  , 776.15
+597.55 , 11368.08  , 820.33
+597.55 , 11966.40  , 864.69
+647.35 , -12984.38 , -763.53
+647.35 , -12335.16 , -726.65
+647.35 , -11685.94 , -689.55
+647.35 , -11036.72 , -652.22
+647.35 , -10387.50 , -614.67
+647.35 , -9738.28  , -576.89
+647.35 , -9089.06  , -538.89
+647.35 , -8439.84  , -500.67
+647.35 , -7790.63  , -462.22
+647.35 , -7141.41  , -423.56
+647.35 , -6492.19  , -384.67
+647.35 , -5842.97  , -345.56
+647.35 , -5193.75  , -306.22
+647.35 , -4544.53  , -266.66
+647.35 , -3895.31  , -226.86
+647.35 , -3246.09  , -186.83
+647.35 , -2596.88  , -146.54
+647.35 , -1947.66  , -105.95
+647.35 , -1298.44  , -64.90
+647.35 , -649.22   , -22.24
+647.35 , -129.84   , 0.00
+647.35 , 119.66    , 20.74
+647.35 , 598.32    , 59.20
+647.35 , 1196.64   , 104.27
+647.35 , 1794.96   , 149.12
+647.35 , 2393.28   , 194.05
+647.35 , 2991.60   , 239.16
+647.35 , 3589.92   , 284.45
+647.35 , 4188.24   , 329.96
+647.35 , 4786.56   , 375.67
+647.35 , 5384.88   , 421.60
+647.35 , 5983.20   , 467.75
+647.35 , 6581.52   , 514.11
+647.35 , 7179.84   , 560.69
+647.35 , 7778.16   , 607.48
+647.35 , 8376.48   , 654.50
+647.35 , 8974.80   , 701.73
+647.35 , 9573.12   , 749.18
+647.35 , 10171.44  , 796.84
+647.35 , 10769.76  , 844.73
+647.35 , 11368.08  , 892.83
+647.35 , 11966.40  , 941.14
+697.14 , -129.84   , 0.00
+697.14 , 119.66    , 23.52
+746.94 , -12984.38 , -869.86
+746.94 , -12335.16 , -827.96
+746.94 , -11685.94 , -785.77
+746.94 , -11036.72 , -743.28
+746.94 , -10387.50 , -700.50
+746.94 , -9738.28  , -657.42
+746.94 , -9089.06  , -614.05
+746.94 , -8439.84  , -570.39
+746.94 , -7790.63  , -526.44
+746.94 , -7141.41  , -482.19
+746.94 , -6492.19  , -437.65
+746.94 , -5842.97  , -392.82
+746.94 , -5193.75  , -347.69
+746.94 , -4544.53  , -302.26
+746.94 , -3895.31  , -256.52
+746.94 , -3246.09  , -210.46
+746.94 , -2596.88  , -164.04
+746.94 , -1947.66  , -117.17
+746.94 , -1298.44  , -69.54
+746.94 , -649.22   , -18.27
+746.94 , -129.84   , 0.00
+746.94 , 119.66    , 26.49
+746.94 , 598.32    , 72.10
+746.94 , 1196.64   , 124.50
+746.94 , 1794.96   , 176.46
+746.94 , 2393.28   , 228.49
+746.94 , 2991.60   , 280.71
+746.94 , 3589.92   , 333.18
+746.94 , 4188.24   , 385.90
+746.94 , 4786.56   , 438.89
+746.94 , 5384.88   , 492.16
+746.94 , 5983.20   , 545.71
+746.94 , 6581.52   , 599.54
+746.94 , 7179.84   , 653.64
+746.94 , 7778.16   , 708.03
+746.94 , 8376.48   , 762.71
+746.94 , 8974.80   , 817.66
+746.94 , 9573.12   , 872.89
+746.94 , 10171.44  , 928.41
+746.94 , 10769.76  , 984.20
+746.94 , 11368.08  , 1040.27
+746.94 , 11966.40  , 1096.63
+796.73 , -12984.38 , -921.56
+796.73 , -12335.16 , -877.23
+796.73 , -11685.94 , -832.56
+796.73 , -11036.72 , -787.56
+796.73 , -10387.50 , -742.22
+796.73 , -9738.28  , -696.56
+796.73 , -9089.06  , -650.56
+796.73 , -8439.84  , -604.23
+796.73 , -7790.63  , -557.56
+796.73 , -7141.41  , -510.57
+796.73 , -6492.19  , -463.24
+796.73 , -5842.97  , -415.58
+796.73 , -5193.75  , -367.58
+796.73 , -4544.53  , -319.24
+796.73 , -3895.31  , -270.55
+796.73 , -3246.09  , -221.48
+796.73 , -2596.88  , -171.99
+796.73 , -1947.66  , -121.95
+796.73 , -1298.44  , -70.93
+796.73 , -649.22   , -14.10
+796.73 , -129.84   , 0.00
+796.73 , 119.66    , 29.68
+796.73 , 598.32    , 79.05
+796.73 , 1196.64   , 135.20
+796.73 , 1794.96   , 190.76
+796.73 , 2393.28   , 246.36
+796.73 , 2991.60   , 302.17
+796.73 , 3589.92   , 358.24
+796.73 , 4188.24   , 414.60
+796.73 , 4786.56   , 471.27
+796.73 , 5384.88   , 528.24
+796.73 , 5983.20   , 585.52
+796.73 , 6581.52   , 643.12
+796.73 , 7179.84   , 701.03
+796.73 , 7778.16   , 759.26
+796.73 , 8376.48   , 817.80
+796.73 , 8974.80   , 876.66
+796.73 , 9573.12   , 935.84
+796.73 , 10171.44  , 995.34
+796.73 , 10769.76  , 1055.15
+796.73 , 11368.08  , 1115.27
+796.73 , 11966.40  , 1175.71
+846.53 , -12984.38 , -972.24
+846.53 , -12335.16 , -925.52
+846.53 , -11685.94 , -878.43
+846.53 , -11036.72 , -830.96
+846.53 , -10387.50 , -783.11
+846.53 , -9738.28  , -734.89
+846.53 , -9089.06  , -686.30
+846.53 , -8439.84  , -637.33
+846.53 , -7790.63  , -587.99
+846.53 , -7141.41  , -538.28
+846.53 , -6492.19  , -488.19
+846.53 , -5842.97  , -437.72
+846.53 , -5193.75  , -386.87
+846.53 , -4544.53  , -335.63
+846.53 , -3895.31  , -283.99
+846.53 , -3246.09  , -231.92
+846.53 , -2596.88  , -179.35
+846.53 , -1947.66  , -126.12
+846.53 , -1298.44  , -71.60
+846.53 , -649.22   , -6.45
+846.53 , -129.84   , 0.00
+846.53 , 119.66    , 33.08
+846.53 , 598.32    , 86.37
+846.53 , 1196.64   , 146.31
+846.53 , 1794.96   , 205.50
+846.53 , 2393.28   , 264.70
+846.53 , 2991.60   , 324.11
+846.53 , 3589.92   , 383.81
+846.53 , 4188.24   , 443.83
+846.53 , 4786.56   , 504.18
+846.53 , 5384.88   , 564.87
+846.53 , 5983.20   , 625.91
+846.53 , 6581.52   , 687.30
+846.53 , 7179.84   , 749.05
+846.53 , 7778.16   , 811.14
+846.53 , 8376.48   , 873.59
+896.32 , -9738.28  , -772.39
+896.32 , -9089.06  , -721.24
+896.32 , -8439.84  , -669.67
+896.32 , -7790.63  , -617.68
+896.32 , -7141.41  , -565.27
+896.32 , -6492.19  , -512.45
+896.32 , -5842.97  , -459.19
+896.32 , -5193.75  , -405.51
+896.32 , -4544.53  , -351.39
+896.32 , -3895.31  , -296.81
+896.32 , -3246.09  , -241.73
+896.32 , -2596.88  , -186.07
+896.32 , -1947.66  , -129.61
+896.32 , -1298.44  , -71.46
+896.32 , -649.22   , 0.00
+896.32 , -129.84   , 0.00
+896.32 , 119.66    , 36.70
+896.32 , 598.32    , 94.04
+896.32 , 1196.64   , 157.85
+896.32 , 1794.96   , 220.70
+896.32 , 2393.28   , 283.52
+896.32 , 2991.60   , 346.56
+896.32 , 3589.92   , 409.90
+896.32 , 4188.24   , 473.59
+896.32 , 4786.56   , 537.65
+896.32 , 5384.88   , 602.09
+896.32 , 5983.20   , 666.91
+896.32 , 6581.52   , 732.12
+896.32 , 7179.84   , 797.72
+896.32 , 7778.16   , 863.72
+896.32 , 8376.48   , 930.10
+896.32 , 8974.80   , 996.88
+946.12 , -9738.28  , -809.02
+946.12 , -9089.06  , -755.35
+946.12 , -8439.84  , -701.21
+946.12 , -7790.63  , -646.60
+946.12 , -7141.41  , -591.53
+946.12 , -6492.19  , -535.99
+946.12 , -5842.97  , -479.97
+946.12 , -5193.75  , -423.47
+946.12 , -4544.53  , -366.48
+946.12 , -3895.31  , -308.96
+946.12 , -3246.09  , -250.88
+946.12 , -2596.88  , -192.11
+946.12 , -1947.66  , -132.36
+946.12 , -1298.44  , -70.38
+946.12 , -649.22   , 0.00
+946.12 , -129.84   , 0.00
+946.12 , 119.66    , 40.53
+946.12 , 598.32    , 102.10
+946.12 , 1196.64   , 169.83
+946.12 , 1794.96   , 236.37
+946.12 , 2393.28   , 302.84
+946.12 , 2991.60   , 369.53
+946.12 , 3589.92   , 436.54
+946.12 , 4188.24   , 503.92
+946.12 , 4786.56   , 571.71
+946.12 , 5384.88   , 639.91
+946.12 , 5983.20   , 708.54
+946.12 , 6581.52   , 777.59
+946.12 , 7179.84   , 847.08
+946.12 , 7778.16   , 917.00
+946.12 , 8376.48   , 987.35
+946.12 , 8974.80   , 1058.14
+995.92 , -9089.06  , -788.58
+995.92 , -8439.84  , -731.90
+995.92 , -7790.63  , -674.71
+995.92 , -7141.41  , -617.00
+995.92 , -6492.19  , -558.77
+995.92 , -5842.97  , -500.01
+995.92 , -5193.75  , -440.71
+995.92 , -4544.53  , -380.85
+995.92 , -3895.31  , -320.40
+995.92 , -3246.09  , -259.31
+995.92 , -2596.88  , -197.41
+995.92 , -1947.66  , -134.30
+995.92 , -1298.44  , -68.24
+995.92 , -649.22   , 0.00
+995.92 , -129.84   , 0.00
+995.92 , 119.66    , 44.59
+995.92 , 598.32    , 110.53
+995.92 , 1196.64   , 182.27
+995.92 , 1794.96   , 252.55
+
diff --git a/VectoCore/VectoCoreTest/TestData/Components/IEPC/IEPCMapReader/IEPC_Gbx3_FLD_max.viepcp b/VectoCore/VectoCoreTest/TestData/Components/IEPC/IEPCMapReader/IEPC_Gbx3_FLD_max.viepcp
new file mode 100644
index 0000000000..2c22528593
--- /dev/null
+++ b/VectoCore/VectoCoreTest/TestData/Components/IEPC/IEPCMapReader/IEPC_Gbx3_FLD_max.viepcp
@@ -0,0 +1,24 @@
+n_out   , T_drive_out , T_recuperation_out
+0.00    , 4027.80     , -4193.88
+14.96   , 4027.80     , -4193.88
+151.09  , 4027.80     , -4193.88
+302.19  , 4027.80     , -4193.88
+452.92  , 4027.80     , -4193.88
+604.01  , 4027.80     , -4193.88
+755.11  , 4027.80     , -4193.88
+906.20  , 3356.50     , -3494.90
+1057.30 , 2876.98     , -2995.60
+1208.03 , 2517.38     , -2621.17
+1359.12 , 2237.68     , -2329.95
+1510.22 , 2013.90     , -2096.94
+1661.31 , 1830.82     , -1906.31
+1812.41 , 1678.25     , -1747.45
+1963.14 , 1549.15     , -1613.02
+2114.23 , 1438.52     , -1497.83
+2265.33 , 1342.60     , -1397.96
+2416.42 , 1258.71     , -1310.61
+2567.52 , 1184.66     , -1233.50
+2718.25 , 1118.82     , -1164.95
+2869.34 , 1059.96     , -1103.66
+3020.44 , 1006.95     , -1048.47
+
diff --git a/VectoCore/VectoCoreTest/VectoCoreTest.csproj b/VectoCore/VectoCoreTest/VectoCoreTest.csproj
index 5fa6cc4c2a..9db0ad9f88 100644
--- a/VectoCore/VectoCoreTest/VectoCoreTest.csproj
+++ b/VectoCore/VectoCoreTest/VectoCoreTest.csproj
@@ -4,15 +4,24 @@
     <AssemblyName>VectoCoreTest</AssemblyName>
     <TargetFrameworks>net6.0</TargetFrameworks>
     <DefineConstants />
+	<!--uncomment to add windows forms an enable plotting of diagrams in some testcases-->
+	<DefineConstants>$(DefineConstants);TRACE</DefineConstants>
+	<!--<UseWindowsForms>true</UseWindowsForms>-->
     <Configurations>Debug;Release;MockupDebug</Configurations>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='MockupDebug|net6.0|AnyCPU'">
     <DebugType>full</DebugType>
   </PropertyGroup>
+	<!--uncomment to add windows forms an enable plotting of diagrams in some testcases-->
+	<PropertyGroup Condition="$([System.Text.RegularExpressions.Regex]::IsMatch(&#xD;&#xA;         $(DefineConstants), '^(.*;)*TRACE(;.*)*$'))">
+		<TargetFrameworks>net6.0-windows</TargetFrameworks>
+		<UseWindowsForms>true</UseWindowsForms>
+	</PropertyGroup>
 	<PropertyGroup Condition="('$(Configuration)' == 'MockupRelease') Or ('$(Configuration)' == 'MockupDebug')">
 		<DefineConstants>$(DefineConstants);MOCKUP</DefineConstants>
 	</PropertyGroup>
   <ItemGroup>
+    <PackageReference Include="HIC.System.Windows.Forms.DataVisualization" Version="1.0.1" />
     <PackageReference Include="Moq" Version="4.18.2" />
     <PackageReference Include="NUnit" Version="3.13.2" />
     <PackageReference Include="NUnit3TestAdapter" Version="4.2.1" />
-- 
GitLab