Steam engine: superheat temperature in F
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Open Rails |
New
|
Undecided
|
Unassigned |
Bug Description
File: MSTSSteamLocomo
However ORTS has some degree F around, It keeps the superheat temperature in degree F,
and this one calculation seems to multiply by degree F,
without converting to degree K. I cannot see how this could be valid.
In ORTS code:
// Calculate superheat steam reference temperature based upon heating area of superheater
// SuperTemp = (SuperHeatArea x HeatTransmissio
// Formula has been simplified as follows: SuperTemp = (SuperHeatArea x FlueTempK x SFactor) / SteamQuantity
// SFactor is a "loose reprentation" = (HeatTransmissi
SuperheatRefTempF = (Me2.ToFt2(
SuperheatTempRatio = SuperheatRefTempF / SuperheatTempLb
In my code (which is easier to follow and has the comments):
I have changed my superheat temperatures to entirely degree K.
// SuperheatKFactor = (HeatTransmissi
#ifdef KELVIN_SUPERHEAT
// flue_temp = 775K = 492C = 917F
// boiler_temp = 110C = 383K = 230F
float superheat_K_kelvin; // Factor used to calculate superheat temperature - guesstimate
#else
float SuperheatKFactor; // Factor used to calculate superheat temperature - guesstimate
#endif
float superheater_
// Currently 2 values respected: 0.0 for no superheat (default), > 1.0 for typical superheat
// SuperheaterFactor
void verify_
{
if( num_cylinders == 0 )
num_cylinders = 2;
// SuperheatKFactor = (HeatTransmissi
#ifdef KELVIN_SUPERHEAT
// flue_temp = 775K = 492C = 917F
// boiler_temp = 110C = 383K = 230F
superheat_
#else
SuperheatKFactor = 11.7f; // ORTS
#endif
safety_
safety_
.....
}
// Calculate superheat steam reference temperature based upon heating area of superheater
/ SuperTemp = (SuperHeatArea x HeatTransmissio
// Formula has been simplified as follows: SuperTemp = (SuperHeatArea x flue_temperature x SFactor) / SteamQuantity
// SFactor is a "loose representation" = (HeatTransmissi
#ifdef KELVIN_SUPERHEAT
// FIXME: use better formula, * (flue_temperatu
// Assume steam_temp approx 110 degree C. or so, depending on boiler pressure
superheat_
#else
// ORTS: Has multiply by degree F, this is not normal.
// This is after translations to degree K, kg, joule, meter.
// flue_temperture_max is now in degree K.
// ORTS equation:
// model->
// Fixed: Multiply by degree K.
superheat_
#endif
// calculate a ratio figure for known value against reference curve.
superheat_
Offending line: SuperheatAreaM2 ) * C.ToF(C. FromK(MaxFlueTe mpK)) * SuperheatKFactor) / pS.TopH( TheoreticalMaxS teamOutputLBpS) ;
SuperheatRefTempF = (Me2.ToFt2(
It may be that ORTS code should be (moving two paren): SuperheatAreaM2 ) * C.ToF(C.FromK( MaxFlueTempK * SuperheatKFactor )) ) / pS.TopH( TheoreticalMaxS teamOutputLBpS) ;
SuperheatRefTempF = (Me2.ToFt2(
If I could figure out what that SuperheatKFactor had for units, it would help.
But it still leaves you with the rest of the equation being a ratio upon a temp in degree F, which cannot be valid. You need degree K to multiply ratios like that.
That conversion to degree F involves adding some constants, so it does not act like a const multiply.
So my best guess is that it should be (moving conversion to F around entire result): SuperheatAreaM2 ) * MaxFlueTempK * SuperheatKFactor) / pS.TopH( TheoreticalMaxS teamOutputLBpS) ));
SuperheatRefTempF = C.ToF(C.FromK( (Me2.ToFt2(