Skip to content

Commit

Permalink
- Coefficient file updated to use WMM2015v2
Browse files Browse the repository at this point in the history
- Unit tests updated to use test values supplied by http://www.ngdc.noaa.gov/geomag/WMM/DoDWMM.shtml
- Additional unit tests revalidated against current online calculator at https://www.ngdc.noaa.gov/geomag/calculators/magcalc.shtml#igrfwmm
  • Loading branch information
stephent committed Feb 4, 2019
1 parent ba96b77 commit 8ca4e73
Show file tree
Hide file tree
Showing 2 changed files with 105 additions and 104 deletions.
178 changes: 89 additions & 89 deletions ObjectiveWMM/WMM.COF
Original file line number Diff line number Diff line change
@@ -1,93 +1,93 @@
2015.0 WMM-2015 12/15/2014
1 0 -29438.5 0.0 10.7 0.0
1 1 -1501.1 4796.2 17.9 -26.8
2 0 -2445.3 0.0 -8.6 0.0
2 1 3012.5 -2845.6 -3.3 -27.1
2 2 1676.6 -642.0 2.4 -13.3
3 0 1351.1 0.0 3.1 0.0
3 1 -2352.3 -115.3 -6.2 8.4
3 2 1225.6 245.0 -0.4 -0.4
3 3 581.9 -538.3 -10.4 2.3
4 0 907.2 0.0 -0.4 0.0
4 1 813.7 283.4 0.8 -0.6
4 2 120.3 -188.6 -9.2 5.3
4 3 -335.0 180.9 4.0 3.0
4 4 70.3 -329.5 -4.2 -5.3
5 0 -232.6 0.0 -0.2 0.0
5 1 360.1 47.4 0.1 0.4
5 2 192.4 196.9 -1.4 1.6
5 3 -141.0 -119.4 0.0 -1.1
5 4 -157.4 16.1 1.3 3.3
5 5 4.3 100.1 3.8 0.1
6 0 69.5 0.0 -0.5 0.0
6 1 67.4 -20.7 -0.2 0.0
6 2 72.8 33.2 -0.6 -2.2
6 3 -129.8 58.8 2.4 -0.7
6 4 -29.0 -66.5 -1.1 0.1
6 5 13.2 7.3 0.3 1.0
6 6 -70.9 62.5 1.5 1.3
7 0 81.6 0.0 0.2 0.0
7 1 -76.1 -54.1 -0.2 0.7
7 2 -6.8 -19.4 -0.4 0.5
7 3 51.9 5.6 1.3 -0.2
7 4 15.0 24.4 0.2 -0.1
7 5 9.3 3.3 -0.4 -0.7
7 6 -2.8 -27.5 -0.9 0.1
7 7 6.7 -2.3 0.3 0.1
8 0 24.0 0.0 0.0 0.0
8 1 8.6 10.2 0.1 -0.3
8 2 -16.9 -18.1 -0.5 0.3
8 3 -3.2 13.2 0.5 0.3
8 4 -20.6 -14.6 -0.2 0.6
8 5 13.3 16.2 0.4 -0.1
8 6 11.7 5.7 0.2 -0.2
8 7 -16.0 -9.1 -0.4 0.3
8 8 -2.0 2.2 0.3 0.0
9 0 5.4 0.0 0.0 0.0
9 1 8.8 -21.6 -0.1 -0.2
9 2 3.1 10.8 -0.1 -0.1
9 3 -3.1 11.7 0.4 -0.2
9 4 0.6 -6.8 -0.5 0.1
9 5 -13.3 -6.9 -0.2 0.1
9 6 -0.1 7.8 0.1 0.0
9 7 8.7 1.0 0.0 -0.2
9 8 -9.1 -3.9 -0.2 0.4
9 9 -10.5 8.5 -0.1 0.3
10 0 -1.9 0.0 0.0 0.0
10 1 -6.5 3.3 0.0 0.1
10 2 0.2 -0.3 -0.1 -0.1
10 3 0.6 4.6 0.3 0.0
10 4 -0.6 4.4 -0.1 0.0
10 5 1.7 -7.9 -0.1 -0.2
10 6 -0.7 -0.6 -0.1 0.1
10 7 2.1 -4.1 0.0 -0.1
10 8 2.3 -2.8 -0.2 -0.2
10 9 -1.8 -1.1 -0.1 0.1
10 10 -3.6 -8.7 -0.2 -0.1
11 0 3.1 0.0 0.0 0.0
11 1 -1.5 -0.1 0.0 0.0
11 2 -2.3 2.1 -0.1 0.1
11 3 2.1 -0.7 0.1 0.0
11 4 -0.9 -1.1 0.0 0.1
11 5 0.6 0.7 0.0 0.0
11 6 -0.7 -0.2 0.0 0.0
11 7 0.2 -2.1 0.0 0.1
11 8 1.7 -1.5 0.0 0.0
11 9 -0.2 -2.5 0.0 -0.1
11 10 0.4 -2.0 -0.1 0.0
2015.0 WMM-2015v2 09/18/2018
1 0 -29438.2 0.0 7.0 0.0
1 1 -1493.5 4796.3 9.0 -30.2
2 0 -2444.5 0.0 -11.0 0.0
2 1 3014.7 -2842.4 -6.2 -29.6
2 2 1679.0 -638.8 0.3 -17.3
3 0 1351.8 0.0 2.4 0.0
3 1 -2351.6 -113.7 -5.7 6.5
3 2 1223.6 246.5 2.0 -0.8
3 3 582.3 -537.4 -11.0 -2.0
4 0 907.5 0.0 -0.8 0.0
4 1 814.8 283.3 -0.9 -0.4
4 2 117.8 -188.6 -6.5 5.8
4 3 -335.6 180.7 5.2 3.8
4 4 69.7 -330.0 -4.0 -3.5
5 0 -232.9 0.0 -0.3 0.0
5 1 360.1 46.9 0.6 0.2
5 2 191.7 196.5 -0.8 2.3
5 3 -141.3 -119.9 0.1 -0.0
5 4 -157.2 16.0 1.2 3.3
5 5 7.7 100.6 1.4 -0.6
6 0 69.4 0.0 -0.8 0.0
6 1 67.7 -20.1 -0.5 0.3
6 2 72.3 32.8 -0.1 -1.5
6 3 -129.1 59.1 1.6 -1.2
6 4 -28.4 -67.1 -1.6 0.4
6 5 13.6 8.1 0.0 0.2
6 6 -70.3 61.9 1.2 1.3
7 0 81.7 0.0 -0.3 0.0
7 1 -75.9 -54.3 -0.2 0.6
7 2 -7.1 -19.5 -0.3 0.5
7 3 52.2 6.0 0.9 -0.8
7 4 15.0 24.5 0.1 -0.2
7 5 9.1 3.5 -0.6 -1.1
7 6 -3.0 -27.7 -0.9 0.1
7 7 5.9 -2.9 0.7 0.2
8 0 24.2 0.0 -0.1 0.0
8 1 8.9 10.1 0.2 -0.4
8 2 -16.9 -18.3 -0.2 0.6
8 3 -3.1 13.3 0.5 -0.1
8 4 -20.7 -14.5 -0.1 0.6
8 5 13.3 16.2 0.4 -0.2
8 6 11.6 6.0 0.4 -0.5
8 7 -16.3 -9.2 -0.1 0.5
8 8 -2.1 2.4 0.4 0.1
9 0 5.5 0.0 -0.1 0.0
9 1 8.8 -21.8 -0.1 -0.3
9 2 3.0 10.7 -0.0 0.1
9 3 -3.2 11.8 0.4 -0.4
9 4 0.6 -6.8 -0.4 0.3
9 5 -13.2 -6.9 0.0 0.1
9 6 -0.1 7.9 0.3 -0.0
9 7 8.7 1.0 0.0 -0.1
9 8 -9.1 -3.9 -0.0 0.5
9 9 -10.4 8.5 -0.3 0.2
10 0 -2.0 0.0 0.0 0.0
10 1 -6.1 3.3 -0.0 0.0
10 2 0.2 -0.4 -0.1 0.1
10 3 0.6 4.6 0.2 -0.2
10 4 -0.5 4.4 -0.1 0.1
10 5 1.8 -7.9 -0.2 -0.1
10 6 -0.7 -0.6 -0.0 0.1
10 7 2.2 -4.2 -0.1 -0.0
10 8 2.4 -2.9 -0.2 -0.1
10 9 -1.8 -1.1 -0.1 0.2
10 10 -3.6 -8.8 -0.0 -0.0
11 0 3.0 0.0 -0.0 0.0
11 1 -1.4 -0.0 0.0 0.0
11 2 -2.3 2.1 -0.0 0.1
11 3 2.1 -0.6 0.0 0.0
11 4 -0.8 -1.1 -0.0 0.1
11 5 0.6 0.7 -0.1 -0.0
11 6 -0.7 -0.2 0.0 -0.0
11 7 0.1 -2.1 -0.0 0.1
11 8 1.7 -1.5 -0.0 -0.0
11 9 -0.2 -2.6 -0.1 -0.1
11 10 0.4 -2.0 -0.0 -0.0
11 11 3.5 -2.3 -0.1 -0.1
12 0 -2.0 0.0 0.1 0.0
12 1 -0.3 -1.0 0.0 0.0
12 2 0.4 0.5 0.0 0.0
12 3 1.3 1.8 0.1 -0.1
12 4 -0.9 -2.2 -0.1 0.0
12 5 0.9 0.3 0.0 0.0
12 6 0.1 0.7 0.1 0.0
12 7 0.5 -0.1 0.0 0.0
12 0 -2.0 0.0 0.0 0.0
12 1 -0.1 -1.0 0.0 -0.0
12 2 0.5 0.3 -0.0 0.0
12 3 1.2 1.8 0.0 -0.1
12 4 -0.9 -2.2 -0.1 0.1
12 5 0.9 0.3 -0.0 -0.0
12 6 0.1 0.7 0.0 0.0
12 7 0.6 -0.1 -0.0 -0.0
12 8 -0.4 0.3 0.0 0.0
12 9 -0.4 0.2 0.0 0.0
12 10 0.2 -0.9 0.0 0.0
12 11 -0.9 -0.2 0.0 0.0
12 12 0.0 0.7 0.0 0.0
12 9 -0.5 0.2 -0.0 0.0
12 10 0.2 -0.9 -0.0 -0.0
12 11 -0.9 -0.2 -0.0 0.0
12 12 -0.0 0.8 -0.1 -0.1
999999999999999999999999999999999999999999999999
999999999999999999999999999999999999999999999999
31 changes: 16 additions & 15 deletions ObjectiveWMMTests/DeclinationTests.m
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ - (void) testDeclination01 {
CCMagneticDeclination *declination = [[CCMagneticModel instance] declinationForCoordinate:coord elevation:0 date:date];

NSLog(@"declination = %f", declination.magneticDeclination);
XCTAssertEqualWithAccuracy(declination.magneticDeclination, -3.85, 0.005, @"Unexpected declination");
XCTAssertEqualWithAccuracy(declination.magneticDeclination, -3.90, 0.005, @"Unexpected declination");

}

Expand All @@ -80,7 +80,7 @@ - (void) testDeclination02 {
CCMagneticDeclination *declination = [[CCMagneticModel instance] declinationForCoordinate:coord elevation:0 date:date];

NSLog(@"declination = %f", declination.magneticDeclination);
XCTAssertEqualWithAccuracy(declination.magneticDeclination, 0.57, 0.005, @"Unexpected declination");
XCTAssertEqualWithAccuracy(declination.magneticDeclination, 0.55, 0.005, @"Unexpected declination");

}

Expand All @@ -104,7 +104,7 @@ - (void) testDeclination04 {
CCMagneticDeclination *declination = [[CCMagneticModel instance] declinationForCoordinate:coord elevation:100000 date:date];

NSLog(@"declination = %f", declination.magneticDeclination);
XCTAssertEqualWithAccuracy(declination.magneticDeclination, -4.27, 0.005, @"Unexpected declination");
XCTAssertEqualWithAccuracy(declination.magneticDeclination, -4.32, 0.005, @"Unexpected declination");

}

Expand All @@ -116,7 +116,7 @@ - (void) testDeclination05 {
CCMagneticDeclination *declination = [[CCMagneticModel instance] declinationForCoordinate:coord elevation:100000 date:date];

NSLog(@"declination = %f", declination.magneticDeclination);
XCTAssertEqualWithAccuracy(declination.magneticDeclination, 0.56, 0.005, @"Unexpected declination");
XCTAssertEqualWithAccuracy(declination.magneticDeclination, 0.54, 0.005, @"Unexpected declination");

}

Expand All @@ -140,7 +140,7 @@ - (void) testDeclination07 {
CCMagneticDeclination *declination = [[CCMagneticModel instance] declinationForCoordinate:coord elevation:0 date:date];

NSLog(@"declination = %f", declination.magneticDeclination);
XCTAssertEqualWithAccuracy(declination.magneticDeclination, -2.75, 0.005, @"Unexpected declination");
XCTAssertEqualWithAccuracy(declination.magneticDeclination, -2.59, 0.005, @"Unexpected declination");

}

Expand All @@ -152,7 +152,7 @@ - (void) testDeclination08 {
CCMagneticDeclination *declination = [[CCMagneticModel instance] declinationForCoordinate:coord elevation:0 date:date];

NSLog(@"declination = %f", declination.magneticDeclination);
XCTAssertEqualWithAccuracy(declination.magneticDeclination, 0.32, 0.005, @"Unexpected declination");
XCTAssertEqualWithAccuracy(declination.magneticDeclination, 0.37, 0.005, @"Unexpected declination");

}

Expand All @@ -164,7 +164,7 @@ - (void) testDeclination09 {
CCMagneticDeclination *declination = [[CCMagneticModel instance] declinationForCoordinate:coord elevation:0 date:date];

NSLog(@"declination = %f", declination.magneticDeclination);
XCTAssertEqualWithAccuracy(declination.magneticDeclination, 69.58, 0.006, @"Unexpected declination");
XCTAssertEqualWithAccuracy(declination.magneticDeclination, 69.59, 0.006, @"Unexpected declination");

}

Expand All @@ -176,7 +176,7 @@ - (void) testDeclination10 {
CCMagneticDeclination *declination = [[CCMagneticModel instance] declinationForCoordinate:coord elevation:100000 date:date];

NSLog(@"declination = %f", declination.magneticDeclination);
XCTAssertEqualWithAccuracy(declination.magneticDeclination, -3.17, 0.005, @"Unexpected declination");
XCTAssertEqualWithAccuracy(declination.magneticDeclination, -3.01, 0.005, @"Unexpected declination");

}

Expand All @@ -188,7 +188,7 @@ - (void) testDeclination11 {
CCMagneticDeclination *declination = [[CCMagneticModel instance] declinationForCoordinate:coord elevation:100000 date:date];

NSLog(@"declination = %f", declination.magneticDeclination);
XCTAssertEqualWithAccuracy(declination.magneticDeclination, 0.32, 0.005, @"Unexpected declination");
XCTAssertEqualWithAccuracy(declination.magneticDeclination, 0.36, 0.005, @"Unexpected declination");

}

Expand All @@ -200,11 +200,12 @@ - (void) testDeclination12 {
CCMagneticDeclination *declination = [[CCMagneticModel instance] declinationForCoordinate:coord elevation:100000 date:date];

NSLog(@"declination = %f", declination.magneticDeclination);
XCTAssertEqualWithAccuracy(declination.magneticDeclination, 69.00, 0.005, @"Unexpected declination");
XCTAssertEqualWithAccuracy(declination.magneticDeclination, 69.01, 0.005, @"Unexpected declination");

}

// Subsequent test values obtained from http://www.ngdc.noaa.gov/geomag-web/#igrfwmm with model set to WMM2015
// 4 Feb 2019: expected results updated from http://www.ngdc.noaa.gov/geomag-web/#igrfwmm - although not stated, this online calculator appears to have been updated to use WMM2015v2 COF

- (void) testDeclination13 {

Expand All @@ -216,7 +217,7 @@ - (void) testDeclination13 {
CCMagneticDeclination *declination = [[CCMagneticModel instance] declinationForCoordinate:coord elevation:1630.0 date:date];

NSLog(@"declination = %f", declination.magneticDeclination);
XCTAssertEqualWithAccuracy(declination.magneticDeclination, 8.3790, 0.001, @"Unexpected declination");
XCTAssertEqualWithAccuracy(declination.magneticDeclination, 8.4116, 0.001, @"Unexpected declination");

}

Expand All @@ -230,7 +231,7 @@ - (void) testDeclination14 {
CCMagneticDeclination *declination = [[CCMagneticModel instance] declinationForCoordinate:coord elevation:22.0 date:date];

NSLog(@"declination = %f", declination.magneticDeclination);
XCTAssertEqualWithAccuracy(declination.magneticDeclination, -0.19978, 0.002, @"Unexpected declination");
XCTAssertEqualWithAccuracy(declination.magneticDeclination, -0.0432, 0.002, @"Unexpected declination");

}

Expand All @@ -244,7 +245,7 @@ - (void) testDeclination15 {
CCMagneticDeclination *declination = [[CCMagneticModel instance] declinationForCoordinate:coord elevation:54.0 date:date];

NSLog(@"declination = %f", declination.magneticDeclination);
XCTAssertEqualWithAccuracy(declination.magneticDeclination, 12.60236, 0.003, @"Unexpected declination");
XCTAssertEqualWithAccuracy(declination.magneticDeclination, 12.5805, 0.003, @"Unexpected declination");
}

- (void) testInvalidDate01 {
Expand Down Expand Up @@ -286,7 +287,7 @@ - (void) testTrueHeading01 {
CCMagneticDeclination *declination = [[CCMagneticModel instance] declinationForCoordinate:coord elevation:1630.0 date:date];

NSLog(@"declination = %f", declination.magneticDeclination);
XCTAssertEqualWithAccuracy([declination trueHeadingFromMagneticHeading:94.0], 94.0 + 8.37904, 0.001, @"Unexpected true heading");
XCTAssertEqualWithAccuracy([declination trueHeadingFromMagneticHeading:94.0], 94.0 + 8.4116, 0.001, @"Unexpected true heading");

}

Expand All @@ -300,7 +301,7 @@ - (void) testMagneticHeading01 {
CCMagneticDeclination *declination = [[CCMagneticModel instance] declinationForCoordinate:coord elevation:1630.0 date:date];

NSLog(@"declination = %f", declination.magneticDeclination);
XCTAssertEqualWithAccuracy([declination magneticHeadingFromTrueHeading:94.0 + 8.37904], 94.0, 0.001, @"Unexpected magnetic heading");
XCTAssertEqualWithAccuracy([declination magneticHeadingFromTrueHeading:94.0 + 8.4116], 94.0, 0.001, @"Unexpected magnetic heading");

}

Expand Down

0 comments on commit 8ca4e73

Please sign in to comment.