/// <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; } }
//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)); }
//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)); }
//***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); } }
/// <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; }
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; } }
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; } }