Пример #1
0
 public void OpenSonicBoomInputData(
     XmlDocument xmlDoc,
     out SonicBoomCalculationInputData RocketID,
     out SonicBoomCalculationInputData VehicleID,
     out List <WeatherParameters> WeatherParameters)
 {
     sonicBoomModel.Open(xmlDoc, out RocketID, out VehicleID, out WeatherParameters);
 }
Пример #2
0
 public void OpenSonicBoomInputData(
     string FileName,
     out SonicBoomCalculationInputData RocketID,
     out SonicBoomCalculationInputData VehicleID,
     out List <WeatherParameters> WeatherParameters)
 {
     sonicBoomModel.Open(FileName, out RocketID, out VehicleID, out WeatherParameters);
 }
Пример #3
0
 public void SaveSonicBoomInputData(
     string FileName,
     SonicBoomCalculationInputData RocketID,
     SonicBoomCalculationInputData VehicleID,
     List <WeatherParameters> WeatherParameters)
 {
     sonicBoomModel.Save(FileName, RocketID, VehicleID, WeatherParameters);
 }
Пример #4
0
        public void Save(
            string FileName,
            SonicBoomCalculationInputData RocketID,
            SonicBoomCalculationInputData VehicleID,
            List <WeatherParameters> WeatherParameters) // см. метод с аналогичной сигнатурой в IModel
        {
            var xmlDoc = new XmlDocument();
            var Root   = xmlDoc.CreateElement("SonicBoomInputData");
            Action <XmlNode, string, double> AddAttribute = (node, name, value) =>
            {
                var attribute = xmlDoc.CreateAttribute(name);
                attribute.Value = value.ToString();
                node.Attributes.Append(attribute);
            };
            Func <string, SonicBoomBallistics, XmlNode> BallisticsNode = (Name, Ballistics) =>
            {
                var ballisticsNode = xmlDoc.CreateElement(Name);
                for (int i = 0; i < Ballistics.Distance.X.Length; i++)
                {
                    var node = xmlDoc.CreateElement("Moment");
                    AddAttribute(node, "Time", Ballistics.Height.X[i]);
                    AddAttribute(node, "MachNumber", Ballistics.MachNumber.Y[i]);
                    AddAttribute(node, "Distance", Ballistics.Distance.Y[i]);
                    AddAttribute(node, "Height", Ballistics.Height.Y[i]);
                    ballisticsNode.AppendChild(node);
                }
                return(ballisticsNode);
            };
            Func <string, GeometricalParameters, XmlNode> GeometricalParametersNode = (Name, Parameters) =>
            {
                var flowParametersNode = xmlDoc.CreateElement(Name);
                AddAttribute(flowParametersNode, "Length", Parameters.Length);
                AddAttribute(flowParametersNode, "CharacteristicLength", Parameters.CharacteristicLength);
                AddAttribute(flowParametersNode, "MaximalArea", Parameters.MaximalArea);
                AddAttribute(flowParametersNode, "CharacteristicArea", Parameters.CharacteristicArea);
                return(flowParametersNode);
            };
            Func <XmlNode> WeatherParametersNode = () =>
            {
                var weatherParametersNode = xmlDoc.CreateElement("WeatherParameters");
                foreach (var weatherParameters in WeatherParameters)
                {
                    var WeatherNode = xmlDoc.CreateElement(weatherParameters.Mounth);
                    AddAttribute(WeatherNode, "Humidity", weatherParameters.Humidity);
                    AddAttribute(WeatherNode, "Temperature", weatherParameters.Temperature);
                    weatherParametersNode.AppendChild(WeatherNode);
                }
                return(weatherParametersNode);
            };

            Root.AppendChild(BallisticsNode("RocketBallisticsPath", RocketID.Ballistics));
            Root.AppendChild(BallisticsNode("VehicleBallisticsPath", VehicleID.Ballistics));
            Root.AppendChild(GeometricalParametersNode("RocketGeometricalParameters", RocketID.GeometricalParameters));
            Root.AppendChild(GeometricalParametersNode("VehicleGeometricalParameters", VehicleID.GeometricalParameters));
            Root.AppendChild(WeatherParametersNode());
            xmlDoc.AppendChild(Root);
            xmlDoc.Save(FileName);
        }
Пример #5
0
 public void CalculateSonicBoom(
     SonicBoomCalculationInputData RocketID,
     SonicBoomCalculationInputData VehicleID,
     List <WeatherParameters> WeatherParameters,
     out List <SonicBoomParameters> RocketSonicBoomBoomParameters,
     out List <SonicBoomParameters> VehicleSonicBoomBoomParameters)
 {
     sonicBoomModel.Calculate(RocketID, VehicleID, WeatherParameters, out RocketSonicBoomBoomParameters, out VehicleSonicBoomBoomParameters);
 }
Пример #6
0
        public void Open(
            string FileName,
            out SonicBoomCalculationInputData RocketID,
            out SonicBoomCalculationInputData VehicleID,
            out List <WeatherParameters> WeatherParameters) // см. метод с аналогичной сигнатурой в IModel
        {
            var xmlDoc = new XmlDocument();

            xmlDoc.Load(FileName);
            Open(xmlDoc, out RocketID, out VehicleID, out WeatherParameters);
        }
Пример #7
0
        public void Calculate(
            SonicBoomCalculationInputData RocketID,
            SonicBoomCalculationInputData VehicleID,
            List <WeatherParameters> WeatherParameters,
            out List <SonicBoomParameters> RocketSonicBoomBoomParameters,
            out List <SonicBoomParameters> VehicleSonicBoomBoomParameters) // см. метод с аналогичной сигнатурой в IModel
        {
            List <SonicBoomParameters> _RocketSonicBoomBoomParameters  = null;
            List <SonicBoomParameters> _VehicleSonicBoomBoomParameters = null;
            int    RocketProgress  = 0;
            int    VehicleProgress = 0;
            object Locker          = new object();
            Action ProgressChanges = () =>
            {
                lock (Locker)
                {
                    ProgressChanged(Math.Min(RocketProgress, VehicleProgress));
                }
            };
            var RocketTask = new Task(() => _RocketSonicBoomBoomParameters = Calculate(
                                          RocketID.Ballistics,
                                          RocketID.GeometricalParameters,
                                          WeatherParameters,
                                          Progress =>
            {
                RocketProgress = Progress;
                ProgressChanges();
            }));
            var VehicleTask = new Task(() => _VehicleSonicBoomBoomParameters = Calculate(
                                           VehicleID.Ballistics,
                                           VehicleID.GeometricalParameters,
                                           WeatherParameters,
                                           Progress =>
            {
                VehicleProgress = Progress;
                ProgressChanges();
            }));

            RocketTask.Start();
            VehicleTask.Start();
            System.Threading.Tasks.Task.WhenAll(RocketTask, VehicleTask).Wait();
            ProgressChanged(100);
            RocketSonicBoomBoomParameters  = _RocketSonicBoomBoomParameters;
            VehicleSonicBoomBoomParameters = _VehicleSonicBoomBoomParameters;
        }
Пример #8
0
        public void Open(
            XmlDocument xmlDoc,
            out SonicBoomCalculationInputData RocketID,
            out SonicBoomCalculationInputData VehicleID,
            out List <WeatherParameters> WeatherParameters) // см. метод с аналогичной сигнатурой в IModel
        {
            Func <XmlNode, SonicBoomBallistics> GetBallistics = Node =>
            {
                List <double> Time     = new List <double>();
                List <double> Mach     = new List <double>();
                List <double> Distance = new List <double>();
                List <double> Height   = new List <double>();
                for (int i = 0; i < Node.ChildNodes.Count; i++)
                {
                    var node = Node.ChildNodes[i];
                    Time.Add(Convert.ToDouble(node.Attributes["Time"].Value));
                    Distance.Add(Convert.ToDouble(node.Attributes["Distance"].Value));
                    Height.Add(Convert.ToDouble(node.Attributes["Height"].Value));
                    Mach.Add(Convert.ToDouble(node.Attributes["MachNumber"].Value));
                }
                return(new SonicBoomBallistics(
                           new Interpolation(Time.ToArray(), Height.ToArray()),
                           new Interpolation(Time.ToArray(), Distance.ToArray()),
                           new Interpolation(Time.ToArray(), Mach.ToArray())));
            };
            Func <XmlNode, GeometricalParameters> GetGeometricalParameters = Node => new GeometricalParameters(
                Convert.ToDouble(Node.Attributes["Length"].Value),
                Convert.ToDouble(Node.Attributes["CharacteristicLength"].Value),
                Convert.ToDouble(Node.Attributes["MaximalArea"].Value),
                Convert.ToDouble(Node.Attributes["CharacteristicArea"].Value));
            Func <XmlNode, List <WeatherParameters> > GetWeatherParameters = Node => Node.ChildNodes.Cast <XmlNode>().Select(x => new WeatherParameters(
                                                                                                                                 x.Name,
                                                                                                                                 Convert.ToDouble(x.Attributes["Humidity"].Value),
                                                                                                                                 Convert.ToDouble(x.Attributes["Temperature"].Value))).ToList();
            var Root = xmlDoc.ChildNodes[0];
            Func <XmlNode, string, XmlNode> FindNode = (Node, ChildNodeName) => Node.ChildNodes.Cast <XmlNode>().FirstOrDefault(x => x.Name == ChildNodeName);

            RocketID          = new SonicBoomCalculationInputData(GetBallistics(FindNode(Root, "RocketBallisticsPath")), GetGeometricalParameters(FindNode(Root, "RocketGeometricalParameters")));
            VehicleID         = new SonicBoomCalculationInputData(GetBallistics(FindNode(Root, "VehicleBallisticsPath")), GetGeometricalParameters(FindNode(Root, "VehicleGeometricalParameters")));
            WeatherParameters = GetWeatherParameters(FindNode(Root, "WeatherParameters"));
        }
Пример #9
0
 public List <SonicBoomParameters> Calculate(
     SonicBoomCalculationInputData id,
     List <WeatherParameters> WeatherParameters) // см. метод с аналогичной сигнатурой в IModel
 {
     return(Calculate(id.Ballistics, id.GeometricalParameters, WeatherParameters, ProgressChanged));
 }
Пример #10
0
 public List <SonicBoomParameters> CalculateSonicBoom(SonicBoomCalculationInputData id, List <WeatherParameters> WeatherParameters)
 {
     return(sonicBoomModel.Calculate(id, WeatherParameters));
 }