Ejemplo n.º 1
0
 public void OpenEngineNoiseInputData(
     XmlDocument xmlDoc,
     out double Thrust,
     out FlowParameters FlowParameters,
     out EngineSoundContourParameters ContourParameters)
 {
     engineNoiseModel.Open(xmlDoc, out Thrust, out FlowParameters, out ContourParameters);
 }
Ejemplo n.º 2
0
 public void OpenEngineNoiseInputData(
     string FileName,
     out double Thrust,
     out FlowParameters FlowParameters,
     out EngineSoundContourParameters ContourParameters)
 {
     engineNoiseModel.Open(FileName, out Thrust, out FlowParameters, out ContourParameters);
 }
Ejemplo n.º 3
0
 public void SaveEngineNoiseInputData(
     string FileName,
     double Thrust,
     FlowParameters FlowParameters,
     EngineSoundContourParameters ContourParameters)
 {
     engineNoiseModel.Save(FileName, Thrust, FlowParameters, ContourParameters);
 }
Ejemplo n.º 4
0
        public void Open(
            string FileName,
            out double Thrust,
            out FlowParameters FlowParameters,
            out EngineSoundContourParameters ContourParameters) // см. метод с аналогичной сигнатурой в IModel
        {
            var xmlDoc = new XmlDocument();

            xmlDoc.Load(FileName);
            Open(FileName, out Thrust, out FlowParameters, out ContourParameters);
        }
Ejemplo n.º 5
0
        public void Open(
            XmlDocument xmlDoc,
            out double Thrust,
            out FlowParameters FlowParameters,
            out EngineSoundContourParameters ContourParameters) // см. метод с аналогичной сигнатурой в IModel
        {
            Func <XmlNode, double>         GetThrust         = Node => Convert.ToDouble(Node.InnerText);
            Func <XmlNode, FlowParameters> GetFlowParameters = Node => new FlowParameters(
                Convert.ToDouble(Node.Attributes["MassFlow"].Value),
                Convert.ToDouble(Node.Attributes["NozzleDiameter"].Value),
                Convert.ToDouble(Node.Attributes["NozzleMachNumber"].Value),
                Convert.ToDouble(Node.Attributes["NozzleFlowVelocity"].Value),
                Convert.ToDouble(Node.Attributes["ChamberSoundVelocity"].Value),
                Convert.ToDouble(Node.Attributes["NozzleAdiabaticIndex"].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();
            Func <XmlNode, Dictionary <double, Color> > GetSoundLevels = Node =>
            {
                if (Node == null)
                {
                    return(null);
                }
                return(Node.ChildNodes.Cast <XmlNode>()
                       .Select(x => new
                {
                    SoundLevel = Convert.ToDouble(x.InnerText),
                    Color = Color.FromArgb(
                        Convert.ToInt32(x.Attributes["A"].Value),
                        Convert.ToInt32(x.Attributes["R"].Value),
                        Convert.ToInt32(x.Attributes["G"].Value),
                        Convert.ToInt32(x.Attributes["B"].Value))
                })
                       .ToDictionary(x => x.SoundLevel, x => x.Color));
            };
            var Root = xmlDoc.ChildNodes[0];
            Func <XmlNode, string, XmlNode> FindNode = (Node, ChildNodeName) => Node.ChildNodes.Cast <XmlNode>().FirstOrDefault(x => x.Name == ChildNodeName);

            Thrust         = GetThrust(FindNode(Root, "Thrust"));
            FlowParameters = GetFlowParameters(FindNode(Root, "FlowParameters"));
            var contourParanetersNode = FindNode(Root, "ContourParaneters");

            ContourParameters = new EngineSoundContourParameters(
                Convert.ToInt32(contourParanetersNode.Attributes["Width"].Value),
                Convert.ToInt32(contourParanetersNode.Attributes["Height"].Value),
                Convert.ToInt32(contourParanetersNode.Attributes["NozzleCoordinate"].Value),
                Convert.ToInt32(contourParanetersNode.Attributes["MinSoundLevel"].Value),
                Convert.ToInt32(contourParanetersNode.Attributes["MaxSoundLevel"].Value));
        }
Ejemplo n.º 6
0
        public void Save(
            string FileName,
            double Thrust,
            FlowParameters FlowParameters,
            EngineSoundContourParameters ContourParameters) // см. метод с аналогичной сигнатурой в IModel
        {
            var xmlDoc = new XmlDocument();
            var Root   = xmlDoc.CreateElement("EngineNoiseInputData");
            Action <XmlNode, string, double> AddAttribute = (node, name, value) =>
            {
                var attribute = xmlDoc.CreateAttribute(name);
                attribute.Value = value.ToString();
                node.Attributes.Append(attribute);
            };
            var thrustNode = xmlDoc.CreateElement("Thrust");

            thrustNode.InnerText = Thrust.ToString();
            Root.AppendChild(thrustNode);
            var flowParametersNode = xmlDoc.CreateElement("FlowParameters");

            AddAttribute(flowParametersNode, "MassFlow", FlowParameters.MassFlow);
            AddAttribute(flowParametersNode, "NozzleDiameter", FlowParameters.NozzleDiameter);
            AddAttribute(flowParametersNode, "NozzleMachNumber", FlowParameters.NozzleMachNumber);
            AddAttribute(flowParametersNode, "NozzleFlowVelocity", FlowParameters.NozzleFlowVelocity);
            AddAttribute(flowParametersNode, "ChamberSoundVelocity", FlowParameters.ChamberSoundVelocity);
            AddAttribute(flowParametersNode, "NozzleAdiabaticIndex", FlowParameters.NozzleAdiabaticIndex);
            Root.AppendChild(flowParametersNode);
            var contourParanetersNode = xmlDoc.CreateElement("ContourParaneters");

            AddAttribute(contourParanetersNode, "Width", ContourParameters.ContourAreaWidth);
            AddAttribute(contourParanetersNode, "Height", ContourParameters.ContourAreaHeight);
            AddAttribute(contourParanetersNode, "NozzleCoordinate", ContourParameters.NozzleCoordinate);
            AddAttribute(contourParanetersNode, "MinSoundLevel", ContourParameters.MinSoundLevel);
            AddAttribute(contourParanetersNode, "MaxSoundLevel", ContourParameters.MaxSoundLevel);
            Root.AppendChild(contourParanetersNode);
            xmlDoc.AppendChild(Root);
            xmlDoc.Save(FileName);
        }
Ejemplo n.º 7
0
        public void Calculate(
            double Thrust,
            FlowParameters FlowParameters,
            EngineSoundContourParameters ContourParameters,
            out EngineSoundContour EngineSoundContour) // см. метод с аналогичной сигнатурой в IModel
        {
            var FlowSoundParameters = GetFlowSoundParameters(Thrust, FlowParameters);
            var EngineSoundLevel = GetEngineSoundLevel(Thrust, FlowParameters);
            int Nx, Ny, W, H;

            if (ContourParameters.ContourAreaWidth >= ContourParameters.ContourAreaHeight)
            {
                Ny = 51;
                H  = 1000;
                Nx = (int)(Ny * ContourParameters.ContourAreaWidth / ContourParameters.ContourAreaHeight);
                W  = (int)(H * ContourParameters.ContourAreaWidth / ContourParameters.ContourAreaHeight);
            }
            else
            {
                Nx = 51;
                W  = 1000;
                Ny = (int)(Nx * ContourParameters.ContourAreaHeight / ContourParameters.ContourAreaWidth);
                H  = (int)(W * ContourParameters.ContourAreaHeight / ContourParameters.ContourAreaWidth);
            }
            var    X  = new double[Nx];
            var    Y  = new double[Ny];
            double dX = ContourParameters.ContourAreaWidth / (Nx - 1);
            double dY = ContourParameters.ContourAreaHeight / (Ny - 1);

            for (int i = 0; i < Nx; i++)
            {
                X[i] = i * dX;
            }
            for (int i = 0; i < Ny; i++)
            {
                Y[i] = i * dY;
            }
            var SoundLevels = new double[Nx, Ny];

            for (int i = 0; i < Nx; i++)
            {
                double x = X[i] - FlowSoundParameters.DistanceToPointOfMaximalSoundLevel - ContourParameters.NozzleCoordinate;
                x = Math.Abs(x) < 0.001 ? 0.001 : x;
                for (int j = 0; j < Ny; j++)
                {
                    double y = Math.Abs(Y[j] - ContourParameters.ContourAreaHeight / 2);
                    double Angle;
                    if (x == 0)
                    {
                        Angle = Math.Sign(y) * Math.PI / 2;
                    }
                    else
                    {
                        Angle = Math.Atan(y / Math.Abs(x));
                        if (x < 0)
                        {
                            Angle = Math.PI - Angle;
                        }
                    }
                    double Radius = Math.Sqrt(x * x + y * y);
                    SoundLevels[i, j] = EngineSoundLevel(Radius, Angle);
                }
            }
            var Contour = new Bitmap(W, H);

            EngineSoundContour = new EngineSoundContour(X, Y, SoundLevels, Contour);
            ModifyEngineSoundContour(ContourParameters.MinSoundLevel, ContourParameters.MaxSoundLevel, ref EngineSoundContour);
        }
Ejemplo n.º 8
0
 public void CalculateEngineSoundContour(double Thrust, FlowParameters FlowParameters, EngineSoundContourParameters ContourParameters, out EngineSoundContour EngineSoundContour)
 {
     engineNoiseModel.Calculate(Thrust, FlowParameters, ContourParameters, out EngineSoundContour);
 }