Skip to content
Snippets Groups Projects
ClimateCell.cs 3.94 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 climate wind regular data
    
        /// Объект - ячейка поля модуля ветра определенной повторяемости на 10м на регулярной сетке
    
        /// </summary>
        public class ClimateCell
        {
            /// <summary>
            /// once-in-5-years frequency wind, m/s 
            /// скорость ветра повторяемости один раз в 5 лет, м/с
            /// </summary>
            public double Wind5;
            /// <summary>
            /// once-in-10-years frequency wind, m/s
            /// скорость ветра повторяемости один раз в 10 лет, м/с
            /// </summary>
            public double Wind10 { get; private set; }
            /// <summary>
            /// once-in-15-years frequency wind, m/s
            /// скорость ветра повторяемости один раз в 15 лет, м/с
            /// </summary>
            public double Wind15 { get; private set; }
            /// <summary>
    
            /// once-in-25-years frequency wind, m/s
            /// скорость ветра повторяемости один раз в 25 лет, м/с
            /// для ЛЭП, построенных после 1987 года.
            /// </summary>
            public double Wind25 { get; private set; }
            /// <summary>
    
            /// designated constructor, NaN интерпретируется как отсутствие значения параметра в ячейке.
    
            /// </summary>
            /// <param name="coord"></param>
    
            /// <param name="w5"> скорость ветра повторяемости один раз в 5 лет, м/с</param>
            /// <param name="w10"> скорость ветра повторяемости один раз в 10 лет, м/с</param>
            /// <param name="w15"> скорость ветра повторяемости один раз в 15 лет, м/с</param>
            /// <param name="w25"> скорость ветра повторяемости один раз в 25 лет, м/с (для ЛЭП постройки после 1986г)</param>
    
            public ClimateCell(double w5, double w10, double w15, double w25)
    
            {
                this.Wind5 = w5;
                this.Wind10 = w10;
                this.Wind15 = w15;
    
                this.Wind25 = w25;
    
                if (!(this.CheckValue()))
                {
                    throw new System.ArgumentException("Climate wind value is not correct");
                }
            }
            /// <summary>
            /// Провекра валидности полей класса
            /// </summary>
            /// <returns></returns>
            public bool CheckValue()
            {
                double w5 = Wind5;
                double w10 = Wind10;
                double w15 = Wind15;
    
                double w25 = Wind25;
    
                if (Double.IsNaN(w5)) // if is Nan - zerofied it.
                {
                    w5 = 0;
                }
                if (Double.IsNaN(w10))
                {
                    w10 = 0;
                }
                if (Double.IsNaN(w15))
                {
                    w15 = 0;
                }
    
                if (Double.IsNaN(w25))
                {
                    w25 = 0;
                }
    
                // ветер по модулю не должен превышать 70м/с
    
                if (w5 >= 0 && w5 > 70) { throw new System.ArgumentOutOfRangeException("w5", w5, "Expected 0=<w5<70"); }
                if (w10 >= 0 && w10 > 70) { throw new System.ArgumentOutOfRangeException("w10", w10, "Expected 0=<w10<70"); }
                if (w15 >= 0 && w15 > 70) { throw new System.ArgumentOutOfRangeException("w15", w15, "Expected 0=<w15<70"); }
                if (w25 >= 0 && w25 > 70) { throw new System.ArgumentOutOfRangeException("w25", w25, "Expected 0=<w25<70"); }
                return w5 >=0 && w5 < 70 && w10 >=0 && w10 < 70 && w15 >= 0 && w15 < 70 && w25 >= 0 && w25 < 70;