@@ -411,6 +411,7 @@ public float TenderCoalMassKG // Decreased by firing and increased
411411 float BoilerHeatTransferCoeffWpM2K = 45.0f; // Heat Transfer of locomotive boiler 45 Wm2K
412412 float TotalSteamUsageLBpS; // Running total for complete current steam usage
413413 float GeneratorSteamUsageLBpS = 1.0f; // Generator Steam Usage
414+ float SandingSteamUsageLBpS; // Sanding Steam Usage
414415 float RadiationSteamLossLBpS = 2.5f; // Steam loss due to radiation losses
415416 float BlowerBurnEffect; // Effect of Blower on burning rate
416417 float FlueTempDiffK; // Current difference in flue temp at current firing and steam usage rates.
@@ -685,6 +686,13 @@ public float TenderCoalMassKG // Decreased by firing and increased
685686 public float Cylinders41SteamVolumeM3pS;
686687 public float Cylinders42SteamVolumeM3pS;
687688
689+ public float SanderSteamExhaustForwardVolumeM3pS;
690+ public float SanderSteamExhaustReverseVolumeM3pS;
691+ public float SanderSteamExhaustVelocityMpS;
692+ public float SanderSteamExhaustParticleDurationS;
693+
694+ float SanderSteamConsumptionLbpS = 17; // Assume 1000lbs/hr steam consumption for the sander
695+
688696 public float Cylinders2_11SteamVolumeM3pS;
689697 public float Cylinders2_12SteamVolumeM3pS;
690698 public float Cylinders2_21SteamVolumeM3pS;
@@ -3073,6 +3081,11 @@ private void UpdateFX(float elapsedClockSeconds)
30733081
30743082 float SteamEffectsFactor = MathHelper.Clamp(BoilerPressurePSI / MaxBoilerPressurePSI, 0.1f, 1.0f); // Factor to allow for drops in boiler pressure reducing steam effects
30753083
3084+ SanderSteamExhaustForwardVolumeM3pS = Sander && SandingSystemType == SandingSystemTypes.Steam && (Direction == Direction.Forward || Direction == Direction.N) ? (10.0f * SteamEffectsFactor) : 0.0f;
3085+ SanderSteamExhaustReverseVolumeM3pS = Sander && SandingSystemType == SandingSystemTypes.Steam && Direction == Direction.Reverse ? (10.0f * SteamEffectsFactor) : 0.0f;
3086+ SanderSteamExhaustParticleDurationS = 1.0f;
3087+ SanderSteamExhaustVelocityMpS = 100.0f;
3088+
30763089 // Bernoulli formula for future reference - steam velocity = SQRT ( 2 * dynamic pressure (pascals) / fluid density)
30773090 Cylinders1SteamVelocityMpS = 100.0f;
30783091 Cylinders2SteamVelocityMpS = 100.0f;
@@ -6618,6 +6631,21 @@ private void UpdateAuxiliaries(float elapsedClockSeconds, float absSpeedMpS)
66186631 CylCockSteamUsageDisplayLBpS = 0.0f;
66196632 }
66206633
6634+ // Calculate sanding steam Usage if turned on
6635+ // Assume steam sanding usage is 1000lbs/hr
6636+ if (Sander && SandingSystemType == SandingSystemTypes.Steam)
6637+ {
6638+ SandingSteamUsageLBpS = SanderSteamConsumptionLbpS;
6639+ BoilerMassLB -= elapsedClockSeconds * SandingSteamUsageLBpS; // Reduce boiler mass to reflect steam usage by generator
6640+ BoilerHeatBTU -= elapsedClockSeconds * SandingSteamUsageLBpS * (BoilerSteamHeatBTUpLB - BoilerWaterHeatBTUpLB); // Reduce boiler Heat to reflect steam usage by generator
6641+ BoilerHeatOutBTUpS += SandingSteamUsageLBpS * (BoilerSteamHeatBTUpLB - BoilerWaterHeatBTUpLB); // Reduce boiler Heat to reflect steam usage by generator
6642+ TotalSteamUsageLBpS += SandingSteamUsageLBpS;
6643+ }
6644+ else
6645+ {
6646+ SandingSteamUsageLBpS = 0.0f; // No generator fitted to locomotive
6647+ }
6648+
66216649 // Calculate Generator steam Usage if turned on
66226650 // Assume generator kW = 350W for D50 Class locomotive
66236651 if (GeneratorSteamEffects) // If Generator steam effects not present then assume no generator is fitted to locomotive
@@ -6633,6 +6661,7 @@ private void UpdateAuxiliaries(float elapsedClockSeconds, float absSpeedMpS)
66336661 {
66346662 GeneratorSteamUsageLBpS = 0.0f; // No generator fitted to locomotive
66356663 }
6664+
66366665 if (StokerIsMechanical)
66376666 {
66386667 StokerSteamUsageLBpS = pS.FrompH(MaxBoilerOutputLBpH) * (StokerMinUsage + (StokerMaxUsage - StokerMinUsage) * FuelFeedRateKGpS / MaxFiringRateKGpS); // Caluculate current steam usage based on fuel feed rates
0 commit comments