Ejemplo n.º 1
0
        private double Kias(double grossWt, double alt)
        {
            if (alt <= 10000.0)
            {
                return(250.0);
            }
            var cruiseKias    = fuelData.CruiseKias(grossWt);
            var optAlt        = fuelData.OptCruiseAlt(grossWt);
            var optCruiseKtas = Ktas(cruiseKias, optAlt);
            var kias          = fuelData.ClimbKias;
            var ktas          = Ktas(kias, alt);

            return(ktas > optCruiseKtas?KtasToKcas(optCruiseKtas, alt) : kias);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Get AvgWindCalculator to approximate the wind.
        /// Returns null if user disabled wind optimization.
        /// </summary>
        /// <exception cref="InvalidUserInputException"></exception>
        public static AvgWindCalculator GetWindCalculator(
            AppOptions appSettings,
            Locator <IWxTableCollection> windTableLocator,
            AirportManager airportList,
            FuelDataItem fuelData,
            double zfwTon,
            string orig,
            string dest)
        {
            if (!appSettings.EnableWindOptimizedRoute)
            {
                return(null);
            }

            if (windTableLocator.Instance is DefaultWxTableCollection)
            {
                throw new InvalidUserInputException(
                          "Wind data has not been downloaded or loaded from file.\n" +
                          "If you do not want to use wind-optimized route, it can be disabled " +
                          "from Options > Route.");
            }

            if (fuelData == null)
            {
                throw new InvalidUserInputException("No aircraft is selected.");
            }

            var origin = airportList[orig.Trim().ToUpper()];

            if (orig == null)
            {
                throw new InvalidUserInputException("Cannot find origin airport.");
            }

            var destination = airportList[dest.ToUpper()];

            if (dest == null)
            {
                throw new InvalidUserInputException("Cannot find destination airport.");
            }

            var dis = origin.Distance(destination);
            var alt = fuelData.EstimatedCrzAlt(dis, zfwTon);
            var tas = Ktas(fuelData.CruiseKias(zfwTon), alt);

            return(new AvgWindCalculator(windTableLocator.Instance, tas, alt));
        }
Ejemplo n.º 3
0
        public static double EstimatedAvgWt(this FuelDataItem item,
                                            double distance, double landingWt)
        {
            double    grossWt   = landingWt;
            const int iteration = 2;

            for (int i = 0; i < iteration; i++)
            {
                var alt  = item.OptCruiseAlt(grossWt);
                var ktas = Ktas(item.CruiseKias(grossWt), alt);
                var time = distance / ktas * 60.0;
                var ff   = item.CruiseFuelFlow(grossWt);
                grossWt = landingWt + ff * time / 2.0;
            }

            return(grossWt);
        }
Ejemplo n.º 4
0
        private double Kias(double grossWt, double alt, VerticalMode mode)
        {
            var cruiseKias = fuelData.CruiseKias(grossWt);

            if (mode == VerticalMode.Cruise)
            {
                return(cruiseKias);
            }
            if (alt <= 10000.0)
            {
                return(250.0);
            }

            var optAlt        = fuelData.OptCruiseAlt(grossWt);
            var optCruiseKtas = Ktas(cruiseKias, optAlt);
            var kias          = mode == VerticalMode.Climb ?
                                fuelData.ClimbKias : fuelData.DescendKias;
            var ktas = Ktas(kias, alt);

            return(ktas > optCruiseKtas?KtasToKcas(optCruiseKtas, alt) : kias);
        }