Skip to content
Snippets Groups Projects
PrognosticCell.cs 2.49 KiB
Newer Older
  • Learn to ignore specific revisions
  • using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace WindStressPRM
    {
        /// <summary>
        /// Cell obj for regular prognostic wind field
        /// Объект ячейки для поля прогностического ветра на высоте 10м на регулярной сетке
        /// </summary>
        public class PrognosticCell
        {
            /// <summary>
            /// U - component of wind velocity, m/s
            /// U - компонента скорости ветра, м/с
            /// </summary>
            public double VelocityX { get; private set; }
            /// <summary>
            /// V - component of wind velocity, m/s
            /// V - компонента скорости ветра, м/с 
            /// </summary>
            public double VelocityY { get; private set; }
            /// <summary>
            /// designated constructor
            /// </summary>
    
            /// <param name="coord"> Coordinate pair, координаты ячейки </param>
            /// <param name="vX"> U component m/s, скорость ветра по X м/с, NaN если значение отсутствует </param>
            /// <param name="vY"> V component m/s, скорость ветра по Y м/с, NaN если значение отсутствует</param>
    
            public PrognosticCell(double vX, double vY)
    
            {
                this.VelocityX = vX;
                this.VelocityY = vY;
    
                this.CheckValue();
    
            }
            /// <summary>
            /// Проверка полей на валидность
            /// </summary>
            /// <returns></returns>
    
            private void CheckValue()
    
            {
                bool res1 = Double.IsNaN(VelocityX);
                bool res2 = Double.IsNaN(VelocityY);
                if (res1 != res2)
                {
    
                    throw new System.ArgumentException("Prognostic wind velocities are incorrect: one projection is Nan, and other has value.");
    
                    // пустые данные (Nan, Nan)
    
                }
                ///Скорость ветра на высоте 10м от поверхности на Земле не может превышать 70м/c
    
                double module = Math.Sqrt(Math.Abs(Math.Pow(VelocityX, 2) + Math.Pow(VelocityY, 2)));
                if (module > 70) 
                {
                    throw new System.ArgumentOutOfRangeException("Module of wind speed", module, "Expected 0<Module<=70"); 
                }