def test_surface_normal_gravity(): ell = LevelEllipsoid('GRS80') np.testing.assert_almost_equal( ell.surface_normal_gravity(0. * u.deg).value, ell.equatorial_normal_gravity.value, decimal=9) np.testing.assert_almost_equal( ell.surface_normal_gravity(90. * u.deg).value, ell.polar_normal_gravity.value, decimal=9) # geodetic latitude lat = np.arange(-90, 90, 0.1, dtype=float) * u.deg rlat, _, u_ax = transform.geodetic_to_ellipsoidal(lat=lat, lon=0.0 * u.deg, height=0.0 * u.m, ell=ell) normal_gravity_somigliana = ell.surface_normal_gravity(lat) normal_gravity_ell = ell.normal_gravity(rlat, u_ax) np.testing.assert_almost_equal( normal_gravity_somigliana.value, normal_gravity_ell.value, decimal=9) # approximate formula (Clairaut) beta, beta1 = ell.conventional_gravity_coeffs() ge = ell.equatorial_normal_gravity latrad = np.radians(lat) normal_gravity_approx = ge*(1 + beta*np.sin(latrad)**2 - beta1*np.sin(2*latrad)**2) np.testing.assert_almost_equal( normal_gravity_somigliana.value, normal_gravity_approx.value, decimal=6) np.testing.assert_almost_equal( surface_normal_gravity_clairaut(lat, '1980').to('mGal').value, normal_gravity_approx.to('mGal').value, decimal=1)
def test_normal_gravity(): ell = LevelEllipsoid('GRS80') # geodetic latitude lat = np.arange(-90, 90, 0.5, dtype=np.float64) height = np.arange(1, 10e3, 100, dtype=np.float64) latv, heightv = np.meshgrid(lat, height, indexing='xy') height_corr = ell.height_correction(latv, heightv) normal_gravity_somigliana = ell.surface_normal_gravity(latv) normal_gravity_1 = normal_gravity_somigliana + height_corr rlat, _, u = transform.geodetic_to_ellipsoidal(lat=latv, lon=0.0, height=heightv, ell=ell) normal_gravity_2 = ell.normal_gravity(rlat, u) np.testing.assert_almost_equal( normal_gravity_1, normal_gravity_2, decimal=6)
def test_against_GRS80(): # Moritz, H., 1980. Geodetic reference system 1980. # Bulletin géodésique, 54(3), pp.395-405. ell = LevelEllipsoid('GRS80') # geometric constants np.testing.assert_equal(ell.a, 6378137.0) np.testing.assert_almost_equal(ell.b, 6356752.3141, decimal=4) np.testing.assert_almost_equal(ell.linear_eccentricity, 521854.0097, decimal=4) np.testing.assert_almost_equal(ell.polar_curvature_radius, 6399593.6259, decimal=4) np.testing.assert_almost_equal(ell.eccentricity_squared, 0.00669438002290, decimal=14) np.testing.assert_almost_equal(ell.second_eccentricity_squared, 0.00673949677548, decimal=14) np.testing.assert_almost_equal(ell.flattening, 0.00335281068118, decimal=14) np.testing.assert_almost_equal(ell.reciprocal_flattening, 298.257222101, decimal=9) np.testing.assert_almost_equal(ell.quadrant_distance, 10001965.7293, decimal=4) np.testing.assert_almost_equal(ell.surface_area * 1e-014, 5.10065622, decimal=8) np.testing.assert_almost_equal(ell.volume * 1e-021, 1.08320732, decimal=8) # mean radius kind = 'arithmetic' np.testing.assert_almost_equal( ell.mean_radius(kind), 6371008.7714, decimal=4) kind = 'same_area' np.testing.assert_almost_equal(ell.mean_radius(kind), 6371007.1810, decimal=4) kind = 'same_volume' np.testing.assert_almost_equal(ell.mean_radius(kind), 6371000.7900, decimal=4) # physical constants np.testing.assert_almost_equal(ell.surface_potential, 62636860.850, decimal=3) np.testing.assert_almost_equal(ell.equatorial_normal_gravity, 9.7803267715, decimal=10) np.testing.assert_almost_equal(ell.polar_normal_gravity, 9.8321863685, decimal=10) np.testing.assert_almost_equal(ell.gravity_flattening, 0.005302440112, decimal=12) np.testing.assert_almost_equal(ell._k, 0.001931851353, decimal=12) np.testing.assert_almost_equal(ell.m, 0.00344978600308, decimal=14) np.testing.assert_almost_equal(ell.j2n(n=2), -0.00000237091222, decimal=14) np.testing.assert_almost_equal(ell.j2n(n=3), 0.00000000608347, decimal=14) np.testing.assert_almost_equal(ell.j2n(n=4), -0.00000000001427, decimal=14) np.testing.assert_almost_equal(ell.surface_normal_gravity(45.), 9.806199203, decimal=9) np.testing.assert_almost_equal(ell.conventional_gravity_coeffs()[-1], 0.0000058, decimal=7) # other np.testing.assert_almost_equal(ell.mean_normal_gravity, 9.797644656, decimal=9) np.testing.assert_almost_equal( ell.surface_normal_gravity(45.), 9.806199203, decimal=9)