Skip to content

Commit

Permalink
More MaxThrust fixing
Browse files Browse the repository at this point in the history
move the calculation before we do fuel draining which i think
shuts down engines when its done.

also fixes some division by zero issues that can come up with
burned out SRBs that i think were just cosmetic.

Signed-off-by: Lamont Granquist <lamont@scriptkiddie.org>
  • Loading branch information
lamont-granquist committed Apr 19, 2022
1 parent 454271b commit 562ace3
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 4 deletions.
6 changes: 4 additions & 2 deletions MechJeb2/FuelFlowSimulation.cs
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,7 @@ private FuelStats SimulateTimeStep(double desiredDt, float throttle, double stat
double thrust = VesselThrustAndSpoolup(out spoolup);
fuelStats.StartThrust = fuelStats.EndThrust = thrust;
fuelStats.SpoolUpTime = spoolup;
fuelStats.MaxThrust = MaxThrust();

using (Disposable<List<FuelNode>> engines = FindActiveEngines())
{
Expand Down Expand Up @@ -195,7 +196,6 @@ private FuelStats SimulateTimeStep(double desiredDt, float throttle, double stat
fuelStats.EndMass = VesselMass(_simStage);
fuelStats.ResourceMass = fuelStats.StartMass - fuelStats.EndMass;
fuelStats.MaxAccel = fuelStats.EndMass > 0 ? fuelStats.EndThrust / fuelStats.EndMass : 0;
fuelStats.MaxThrust = MaxThrust();
fuelStats.ComputeTimeStepDeltaV();
fuelStats.Isp = fuelStats.StartMass > fuelStats.EndMass
? fuelStats.DeltaV / (9.80665f * Math.Log(fuelStats.StartMass / fuelStats.EndMass))
Expand Down Expand Up @@ -327,7 +327,9 @@ private double MaxThrust()

for (int i = 0; i < activeEngines.value.Count; i++)
{
maxThrust += activeEngines.value[i].maxThrust;
double mt = activeEngines.value[i].maxThrust;
if (mt.IsFinite())
maxThrust += mt;
}

return maxThrust;
Expand Down
5 changes: 3 additions & 2 deletions MechJeb2/FuelStats.cs
Original file line number Diff line number Diff line change
Expand Up @@ -44,20 +44,21 @@ public void ComputeTimeStepDeltaV()
public FuelStats Append(FuelStats s)
{
double sDeltaTime = s.DeltaTime < float.MaxValue && !double.IsInfinity(s.DeltaTime) ? s.DeltaTime : 0;
double sumDT = sDeltaTime + DeltaTime;

return new FuelStats
{
// we integrate to the time-averaged maxthrust to accomodate weirdness like ullage motors that burnout and tiny segments
// that turn off the engines for some reason. this is so PVG has a number which is closest to reality.
MaxThrust = (MaxThrust * DeltaTime + s.MaxThrust * sDeltaTime ) / ( DeltaTime + sDeltaTime),
MaxThrust = sumDT > 1e-10 ? (MaxThrust * DeltaTime + s.MaxThrust * sDeltaTime ) / ( DeltaTime + sDeltaTime) : MaxThrust,
StartMass = StartMass,
EndMass = s.EndMass,
ResourceMass = StartMass - s.EndMass,
StartThrust = StartThrust,
EndThrust = s.EndThrust,
SpoolUpTime = Math.Max(SpoolUpTime, s.SpoolUpTime),
MaxAccel = Math.Max(MaxAccel, s.MaxAccel),
DeltaTime = DeltaTime + sDeltaTime,
DeltaTime = sumDT,
DeltaV = DeltaV + s.DeltaV,
// ReSharper disable once CompareOfFloatsByEqualityOperator
Isp = StartMass == s.EndMass ? 0 : (DeltaV + s.DeltaV) / (9.80665f * Math.Log(StartMass / s.EndMass))
Expand Down

0 comments on commit 562ace3

Please sign in to comment.