Example #1
0
        /// <summary>
        /// Initializes magnetic field elements.
        /// </summary>
        /// <param name="m">Magnetic</param>
        public MagneticFieldElements(Magnetic m)
        {
            double gc = m.nLatGC - m.nLatGD.ToRadians();

            NorthComponent      = m.points.Sum_Fields_X.Value * Math.Cos(gc) - m.points.Sum_Fields_Z.Value * Math.Sin(gc);
            EastComponent       = m.points.Sum_Fields_Y.Value;
            DownComponent       = m.points.Sum_Fields_X.Value * Math.Sin(gc) + m.points.Sum_Fields_Z.Value * Math.Cos(gc);
            HorizontalIntensity = Math.Sqrt(Math.Pow(NorthComponent, 2) + Math.Pow(EastComponent, 2));
            TotalIntensity      = Math.Sqrt(Math.Pow(HorizontalIntensity, 2) + Math.Pow(DownComponent, 2));
            Inclination         = Math.Atan2(DownComponent, HorizontalIntensity).ToDegrees(); //Y,X
            Declination         = Math.Atan2(EastComponent, NorthComponent).ToDegrees();      //Y,X

            if (m.latSigned > 55)
            {
                GridVariation = Declination - m.nLngGD;
                int s = Math.Sign(GridVariation);
                GridVariation = (((Math.Abs(GridVariation) + 180) % 360) - 180) * s;
                // if (Math.Abs(GridVariation) > 180) { GridVariation = (360 - Math.Abs(GridVariation)); }
            }
            else if (m.latSigned < -55)
            {
                GridVariation = Declination + m.nLngGD;
                int s = Math.Sign(GridVariation);
                GridVariation = (((Math.Abs(GridVariation) + 180) % 360) - 180) * s;
                // if (GridVariation > 180) { GridVariation = (360 - GridVariation)*-1; }
            }
            else
            {
                GridVariation = Declination;
            }
        }
Example #2
0
 //Load WMM 2020 COF
 private void Load_2020(Magnetic m)
 {
     NorthComponent      = 131;
     EastComponent       = 94;
     DownComponent       = 157;
     HorizontalIntensity = 128;
     TotalIntensity      = 145;
     Inclination         = .21;
     Declination         = Math.Sqrt(Math.Pow(.26, 2) + Math.Pow(5625 / m.MagneticFieldElements.HorizontalIntensity, 2));
 }
Example #3
0
 //Load WMM 2015 COF
 private void Load_2015(Magnetic m)
 {
     NorthComponent      = 138;
     EastComponent       = 89;
     DownComponent       = 165;
     HorizontalIntensity = 133;
     TotalIntensity      = 152;
     Inclination         = .22;
     Declination         = Math.Sqrt(Math.Pow(.23, 2) + Math.Pow(5430 / m.MagneticFieldElements.HorizontalIntensity, 2));
 }
Example #4
0
        //***REFERENCE WMM DOCUMENTS FOLDER FOR INFO***
        //Uncertainty taken from https://www.ngdc.noaa.gov/geomag/WMM/limit.shtml
        //WMM REPORT DOWNLOADED HAS TOTAL INTESTY AT 145 not 148 like web site says.
        //Values are populated via the hard calculated values in the World Magnetic Model
        //X = North
        //Y = East
        //Z - down
        //H = Horizontal
        //F = Total Intensity
        //I = Inclination
        //D = Declination

        /// <summary>
        /// Initializes magnetic uncertainty.
        /// </summary>
        /// <param name="m">Magentic</param>
        public Uncertainty(Magnetic m)
        {
            if (m.Model == DataModel.WMM2015)
            {
                Load_2015(m);
            }
            else if (m.Model == DataModel.WMM2020)
            {
                Load_2020(m);
            }
        }
Example #5
0
 /// <summary>
 /// Initializes magnetic secular variations.
 /// </summary>
 /// <param name="m">Magnetic</param>
 public SecularVariations(Magnetic m)
 {
     MagneticFieldElements mf = m.MagneticFieldElements;
     double gc = m.nLatGC - m.nLatGD.ToRadians();
     NorthComponent = m.points.Sum_Seculars_X.Value * Math.Cos(gc) - m.points.Sum_Seculars_Z.Value * Math.Sin(gc);
     EastComponent = m.points.Sum_Seculars_Y.Value;
     DownComponent = m.points.Sum_Seculars_X.Value * Math.Sin(gc) + m.points.Sum_Seculars_Z.Value * Math.Cos(gc);
     HorizontalIntensity = (mf.NorthComponent * NorthComponent + mf.EastComponent * EastComponent) / mf.HorizontalIntensity;
     TotalIntensity = (mf.NorthComponent * NorthComponent + mf.EastComponent * EastComponent + mf.DownComponent*DownComponent) / mf.TotalIntensity;
     Inclination = ((mf.HorizontalIntensity*DownComponent-mf.DownComponent*HorizontalIntensity)/Math.Pow(mf.TotalIntensity,2)).ToDegrees(); //Y,X
     Declination = ((mf.NorthComponent*EastComponent-mf.EastComponent*NorthComponent) / Math.Pow(mf.HorizontalIntensity, 2)).ToDegrees();          
 }
        public DataPoint(CoefficientModel cem, Magnetic parent, int index)
        {
            IndexPoint = index;
            Parent     = parent;

            Degree = cem.Degree;
            Order  = cem.Order;


            Gm  = cem.Gm;
            Hm  = cem.Hm;
            Gtm = cem.Gtm;
            Htm = cem.Htm;
        }
Example #7
0
        public DataPoints(DataModel model, Magnetic magnetic)
        {
            Parent = magnetic;
            Points = new List <DataPoint>();

            if (model == DataModel.WMM2015)
            {
                Load_Data(WMM2015COF.Data);
                modelYear = 2015;
            }
            if (model == DataModel.WMM2020)
            {
                Load_Data(WMM2020COF.Data);
                modelYear = 2020;
            }
        }
Example #8
0
        public MagneticFieldElements(Magnetic m)
        {
            double gc = m.nLatGC - m.nLatGD.ToRadians();

            NorthComponent      = m.points.Sum_Fields_X.Value * Math.Cos(gc) - m.points.Sum_Fields_Z.Value * Math.Sin(gc);
            EastComponent       = m.points.Sum_Fields_Y.Value;
            DownComponent       = m.points.Sum_Fields_X.Value * Math.Sin(gc) + m.points.Sum_Fields_Z.Value * Math.Cos(gc);
            HorizontalIntensity = Math.Sqrt(Math.Pow(NorthComponent, 2) + Math.Pow(EastComponent, 2));
            TotalIntensity      = Math.Sqrt(Math.Pow(HorizontalIntensity, 2) + Math.Pow(DownComponent, 2));
            Inclination         = Math.Atan2(DownComponent, HorizontalIntensity).ToDegrees(); //Y,X
            Declination         = Math.Atan2(EastComponent, NorthComponent).ToDegrees();      //Y,X
            if (m.nLatGD > 55)
            {
                GridVariation = Declination - m.nLngGD;
            }
            else if (m.nLatGD < -55)
            {
                GridVariation = Declination + m.nLngGD;
            }
            else
            {
                GridVariation = Declination;
            }
        }