geophil

June 16th, 2015, 02:26 PM

Superelevation, high on the Kickstarter wish list and now one of the new features in T:ANE, does not appear to have gained that much attention yet. Is it because we don't know how to use it in practice?

For superelevation, also known as cant, we find two new Track Vertex parameters, Superelevation Degree and Superelevation Limit. I assume both values are in degrees and specify a banking angle. I also learned that there is some dynamics involved.

It's worth noting that you probably don't need to vary these numbers. The curvature is taken into account by the software.

Now I am trying to figure out how practical use might look like. Having implemented all the math for superelevation myself a couple of years ago I'd like to take the approach from that background and the DB (German railways) rulebook. However, as gravity is largely the same all over the planet, formulas won't be much different elsewhere.

Over here superelevation is measured in millimetres, not in degrees. That's not a problem, can easily be converted:

u = w * sin alpha

with

w: gauge [mm], but measured between centre of rail heads (where the wheels touch), 1500 mm for standard gauge.

alpha: banking angle

u: superelevation [mm]

Balanced superelevation – compensating centrifugal force – is defined as:

u = 11.8 * vd2 / r

in the German rulebook with

vd: designed track speed [km/h]

r: radius of the circular arc [m]

u: superelevation [mm]

So, superelevation is a function of track speed and radius.

On real track we will also encounter “cant deficiency”, a gap between fully balanced and actual superelevation. We simplify here and ignore that bit. There is also a maximum superelevation, with a value defined in the rulebook not to be exceeded. This absolute maximum in Germany is 180 mm.

The prototype does not employ splines. Its track geometry consists of straights, circular arcs and transition curves. Transition curves are often based on clothoids with the clothoid approximated by a Taylor series cut short after the third term, making it a cubic parabola. The transition curve or easement is there to reduce jerk (2nd derivative of speed) and to build up superelevation in a ramp. With a clothoid or cubic parabola, this ramp often has constant slope.

But we have splines in Trainz. One of the inherent advantages of splines is their ability to approximate any other mathematical curve, with and appropriate number and placement of control points. This, fortunately, includes those ugly transition curves.

The radius of a spline? Does not really exist. But we can compute the curvature for an infinitesimal short stretch of the spline at any given point, including the track vertices themselves. And from the curvature we can derive the radius of an equivalent circular arc for that particular point. This job will be handled by Trainz:

There is a superelevation ratio which is set per track vertex and which uses linear interpolation between these (with a few exception- we disable interpolation in the area immediately around a junction vertex, for example.) This is multiplied by the instantaneous* track curvature to determine the banking angle at any given location. The curvature is obviously not necessarily linear.

*: mathematically not really, for various reasons, but should be treated as such.

We have now identified the most relevant variables in this game and can compare to our two parameters for the Trainz track vertex.

My assumption is that “Superelevation limit” is the equivalent of the maximum value in mm. For 180mm we get (standard gauge) 6.9°. 180mm is quite a lot, it will usually be significantly less.

“Superelevation angle” is supposed to be applied in a dynamic way, based on curvature, that's what I understand. But here I start speculating. One could assume that the value we fill in here is for a predefined constant but yet unknown radius r0.

u0 = 11.8 * vd2 / r0

or, with the banking angle

w * sin alpha0 = 11.8 * vd2 / r0

Then for any other radius r we might be able to say:

sin alpha / sin alpha0 = r0 / r

or

sin alpha = (r0 / r) * sin alpha0

If this assumption is correct we would only need to know the value of r0 and could then happily apply the above formula for any given track speed in our route project.

For superelevation, also known as cant, we find two new Track Vertex parameters, Superelevation Degree and Superelevation Limit. I assume both values are in degrees and specify a banking angle. I also learned that there is some dynamics involved.

It's worth noting that you probably don't need to vary these numbers. The curvature is taken into account by the software.

Now I am trying to figure out how practical use might look like. Having implemented all the math for superelevation myself a couple of years ago I'd like to take the approach from that background and the DB (German railways) rulebook. However, as gravity is largely the same all over the planet, formulas won't be much different elsewhere.

Over here superelevation is measured in millimetres, not in degrees. That's not a problem, can easily be converted:

u = w * sin alpha

with

w: gauge [mm], but measured between centre of rail heads (where the wheels touch), 1500 mm for standard gauge.

alpha: banking angle

u: superelevation [mm]

Balanced superelevation – compensating centrifugal force – is defined as:

u = 11.8 * vd2 / r

in the German rulebook with

vd: designed track speed [km/h]

r: radius of the circular arc [m]

u: superelevation [mm]

So, superelevation is a function of track speed and radius.

On real track we will also encounter “cant deficiency”, a gap between fully balanced and actual superelevation. We simplify here and ignore that bit. There is also a maximum superelevation, with a value defined in the rulebook not to be exceeded. This absolute maximum in Germany is 180 mm.

The prototype does not employ splines. Its track geometry consists of straights, circular arcs and transition curves. Transition curves are often based on clothoids with the clothoid approximated by a Taylor series cut short after the third term, making it a cubic parabola. The transition curve or easement is there to reduce jerk (2nd derivative of speed) and to build up superelevation in a ramp. With a clothoid or cubic parabola, this ramp often has constant slope.

But we have splines in Trainz. One of the inherent advantages of splines is their ability to approximate any other mathematical curve, with and appropriate number and placement of control points. This, fortunately, includes those ugly transition curves.

The radius of a spline? Does not really exist. But we can compute the curvature for an infinitesimal short stretch of the spline at any given point, including the track vertices themselves. And from the curvature we can derive the radius of an equivalent circular arc for that particular point. This job will be handled by Trainz:

There is a superelevation ratio which is set per track vertex and which uses linear interpolation between these (with a few exception- we disable interpolation in the area immediately around a junction vertex, for example.) This is multiplied by the instantaneous* track curvature to determine the banking angle at any given location. The curvature is obviously not necessarily linear.

*: mathematically not really, for various reasons, but should be treated as such.

We have now identified the most relevant variables in this game and can compare to our two parameters for the Trainz track vertex.

My assumption is that “Superelevation limit” is the equivalent of the maximum value in mm. For 180mm we get (standard gauge) 6.9°. 180mm is quite a lot, it will usually be significantly less.

“Superelevation angle” is supposed to be applied in a dynamic way, based on curvature, that's what I understand. But here I start speculating. One could assume that the value we fill in here is for a predefined constant but yet unknown radius r0.

u0 = 11.8 * vd2 / r0

or, with the banking angle

w * sin alpha0 = 11.8 * vd2 / r0

Then for any other radius r we might be able to say:

sin alpha / sin alpha0 = r0 / r

or

sin alpha = (r0 / r) * sin alpha0

If this assumption is correct we would only need to know the value of r0 and could then happily apply the above formula for any given track speed in our route project.