Ejemplo n.º 1
0
        private IPlanNode NextPlanNode(IPlanNode prev, IPlanNode old)
        {
            var ff            = fuelData.ClimbFuelFlow(prev.GrossWt);
            var stepDis       = prev.Distance(prev.NextPlanNodeCoordinate);
            var stepTime      = stepDis / prev.Gs * 60.0;
            var stepFuel      = stepTime * ff;
            var climbGrad     = fuelData.ClimbGradient(prev.GrossWt);
            var climbRate     = climbGrad * prev.Ktas / 60.0 * NmFtRatio;
            var alt           = Math.Min(prev.Alt + stepTime * climbRate, old.Alt);
            var grossWt       = prev.GrossWt - stepFuel;
            var fuelOnBoard   = prev.FuelOnBoard - stepFuel;
            var timeRemaining = prev.TimeRemaining - stepTime;

            return(GetNode(old, alt, grossWt, fuelOnBoard, timeRemaining));
        }
Ejemplo n.º 2
0
        /// <exception cref="ArgumentException">Invalid vertical mode.</exception>
        private double FuelFlow(double grossWt, VerticalMode mode)
        {
            switch (mode)
            {
            case VerticalMode.Climb:
                return(fuelData.ClimbFuelFlow(grossWt));

            case VerticalMode.Cruise:
                return(fuelData.CruiseFuelFlow(grossWt));

            case VerticalMode.Descent:
                return(fuelData.DescentFuelFlow(grossWt));

            default:
                throw new ArgumentException();
            }
        }