Skip to content

Commit 6d911d7

Browse files
committed
Correct calculation error with curve friction
1 parent bae4730 commit 6d911d7

File tree

1 file changed

+78
-71
lines changed
  • Source/Orts.Simulation/Simulation/RollingStocks

1 file changed

+78
-71
lines changed

Source/Orts.Simulation/Simulation/RollingStocks/TrainCar.cs

Lines changed: 78 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -338,6 +338,8 @@ public float ConvectionFactor
338338
public float ActivityElapsedDurationS;
339339
public float HotBoxStartTimeS;
340340

341+
bool RigidWheelBaseInitialised = false;
342+
341343
// Setup for ambient temperature dependency
342344
Interpolator OutsideWinterTempbyLatitudeC; // Interploator to calculate ambient Winter temperature based upon the latitude of the route
343345
Interpolator OutsideAutumnTempbyLatitudeC; // Interploator to calculate ambient Autumn temperature based upon the latitude of the route
@@ -720,7 +722,7 @@ public virtual void Initialize()
720722
{
721723
BrakeSystem.Initialize();
722724
CurveSpeedDependent = Simulator.Settings.CurveSpeedDependent;
723-
725+
724726
//CurveForceFilter.Initialize();
725727

726728
// Initialize tunnel resistance values
@@ -819,6 +821,81 @@ public virtual void Initialize()
819821
public virtual void Update(float elapsedClockSeconds)
820822
{
821823

824+
// Initialize RigidWheelBaseM in first loop if not defined in ENG file, then ignore
825+
if (RigidWheelBaseM == 0 && !RigidWheelBaseInitialised) // Calculate default values if no value in Wag File
826+
{
827+
float Axles = WheelAxles.Count;
828+
float Bogies = Parts.Count - 1;
829+
float BogieSize = Axles / Bogies;
830+
831+
RigidWheelBaseM = 1.6764f; // Set a default in case no option is found - assume a standard 4 wheel (2 axle) bogie - wheel base - 5' 6" (1.6764m)
832+
833+
// Calculate the number of axles in a car
834+
835+
if (WagonType != WagonTypes.Engine) // if car is not a locomotive then determine wheelbase
836+
{
837+
if (Bogies < 2) // if less then two bogies assume that it is a fixed wheelbase wagon
838+
{
839+
if (Axles == 2)
840+
{
841+
RigidWheelBaseM = 3.5052f; // Assume a standard 4 wheel (2 axle) wagon - wheel base - 11' 6" (3.5052m)
842+
}
843+
else if (Axles == 3)
844+
{
845+
RigidWheelBaseM = 3.6576f; // Assume a standard 6 wheel (3 axle) wagon - wheel base - 12' 2" (3.6576m)
846+
}
847+
}
848+
else if (Bogies == 2)
849+
{
850+
if (BogieSize == 2)
851+
{
852+
if (WagonType == WagonTypes.Passenger)
853+
{
854+
RigidWheelBaseM = 2.4384f; // Assume a standard 4 wheel passenger bogie (2 axle) wagon - wheel base - 8' (2.4384m)
855+
}
856+
else
857+
{
858+
RigidWheelBaseM = 1.6764f; // Assume a standard 4 wheel freight bogie (2 axle) wagon - wheel base - 5' 6" (1.6764m)
859+
}
860+
}
861+
else if (BogieSize == 3)
862+
{
863+
RigidWheelBaseM = 3.6576f; // Assume a standard 6 wheel bogie (3 axle) wagon - wheel base - 12' 2" (3.6576m)
864+
}
865+
}
866+
}
867+
if (WagonType == WagonTypes.Engine) // if car is a locomotive and either a diesel or electric then determine wheelbase
868+
{
869+
if (EngineType != EngineTypes.Steam) // Assume that it is a diesel or electric locomotive
870+
{
871+
if (BogieSize == 2)
872+
{
873+
RigidWheelBaseM = 1.6764f; // Set a default in case no option is found - assume a standard 4 wheel (2 axle) bogie - wheel base - 5' 6" (1.6764m)
874+
}
875+
else if (BogieSize == 3)
876+
{
877+
RigidWheelBaseM = 3.5052f; // Assume a standard 6 wheel bogie (3 axle) locomotive - wheel base - 11' 6" (3.5052m)
878+
}
879+
}
880+
else // assume steam locomotive
881+
{
882+
883+
if (LocoNumDrvAxles >= Axles) // Test to see if ENG file value is too big (typically doubled)
884+
{
885+
LocoNumDrvAxles = LocoNumDrvAxles / 2; // Appears this might be the number of wheels rather then the axles.
886+
}
887+
888+
// Approximation for calculating rigid wheelbase for steam locomotives
889+
// Wheelbase = 1.25 x (Loco Drive Axles - 1.0) x Drive Wheel diameter
890+
891+
RigidWheelBaseM = 1.25f * (LocoNumDrvAxles - 1.0f) * (DriverWheelRadiusM * 2.0f);
892+
}
893+
}
894+
895+
RigidWheelBaseInitialised = true; // Don't process again
896+
}
897+
898+
822899
// Initialise ambient temperatures on first initial loop, then ignore
823900
if (!AmbientTemperatureInitialised)
824901
{
@@ -2011,76 +2088,6 @@ public virtual void UpdateCurveForce(float elapsedClockSeconds)
20112088
{
20122089
if (CurrentCurveRadiusM > 0)
20132090
{
2014-
if (RigidWheelBaseM == 0) // Calculate default values if no value in Wag File
2015-
{
2016-
float Axles = WheelAxles.Count;
2017-
float Bogies = Parts.Count - 1;
2018-
float BogieSize = Axles / Bogies;
2019-
2020-
RigidWheelBaseM = 1.6764f; // Set a default in case no option is found - assume a standard 4 wheel (2 axle) bogie - wheel base - 5' 6" (1.6764m)
2021-
2022-
// Calculate the number of axles in a car
2023-
2024-
if (WagonType != WagonTypes.Engine) // if car is not a locomotive then determine wheelbase
2025-
{
2026-
if (Bogies < 2) // if less then two bogies assume that it is a fixed wheelbase wagon
2027-
{
2028-
if (Axles == 2)
2029-
{
2030-
RigidWheelBaseM = 3.5052f; // Assume a standard 4 wheel (2 axle) wagon - wheel base - 11' 6" (3.5052m)
2031-
}
2032-
else if (Axles == 3)
2033-
{
2034-
RigidWheelBaseM = 3.6576f; // Assume a standard 6 wheel (3 axle) wagon - wheel base - 12' 2" (3.6576m)
2035-
}
2036-
}
2037-
else if (Bogies == 2)
2038-
{
2039-
if (Axles == 2)
2040-
{
2041-
if (WagonType == WagonTypes.Passenger)
2042-
{
2043-
RigidWheelBaseM = 2.4384f; // Assume a standard 4 wheel passenger bogie (2 axle) wagon - wheel base - 8' (2.4384m)
2044-
}
2045-
else
2046-
{
2047-
RigidWheelBaseM = 1.6764f; // Assume a standard 4 wheel freight bogie (2 axle) wagon - wheel base - 5' 6" (1.6764m)
2048-
}
2049-
}
2050-
else if (Axles == 3)
2051-
{
2052-
RigidWheelBaseM = 3.6576f; // Assume a standard 6 wheel bogie (3 axle) wagon - wheel base - 12' 2" (3.6576m)
2053-
}
2054-
}
2055-
}
2056-
if (WagonType == WagonTypes.Engine) // if car is a locomotive and either a diesel or electric then determine wheelbase
2057-
{
2058-
if (EngineType != EngineTypes.Steam) // Assume that it is a diesel or electric locomotive
2059-
{
2060-
if (Axles == 2)
2061-
{
2062-
RigidWheelBaseM = 1.6764f; // Set a default in case no option is found - assume a standard 4 wheel (2 axle) bogie - wheel base - 5' 6" (1.6764m)
2063-
}
2064-
else if (Axles == 3)
2065-
{
2066-
RigidWheelBaseM = 3.5052f; // Assume a standard 6 wheel bogie (3 axle) locomotive - wheel base - 11' 6" (3.5052m)
2067-
}
2068-
}
2069-
else // assume steam locomotive
2070-
{
2071-
2072-
if (LocoNumDrvAxles >= Axles) // Test to see if ENG file value is too big (typically doubled)
2073-
{
2074-
LocoNumDrvAxles = LocoNumDrvAxles / 2; // Appears this might be the number of wheels rather then the axles.
2075-
}
2076-
2077-
// Approximation for calculating rigid wheelbase for steam locomotives
2078-
// Wheelbase = 1.25 x (Loco Drive Axles - 1.0) x Drive Wheel diameter
2079-
2080-
RigidWheelBaseM = 1.25f * (LocoNumDrvAxles - 1.0f) * (DriverWheelRadiusM * 2.0f);
2081-
}
2082-
}
2083-
}
20842091

20852092
// References:
20862093

0 commit comments

Comments
 (0)