def test_laplace_equation(): "gravmag.tesseroid obeys Laplace equation" model = [ Tesseroid(0, 1, 0, 1, 1000, -20000, {'density': 2670}), Tesseroid(-1.5, 1.5, -1.5, -1, -1000, -20000, {'density': -1000}), Tesseroid(0.1, 0.6, -0.8, -0.3, 10000, -20000, {'density': 2000}), ] area = [-2, 2, -2, 2] shape = (51, 51) lon, lat, h = gridder.regular(area, shape, z=50000) gxx = tesseroid.gxx(lon, lat, h, model) gyy = tesseroid.gyy(lon, lat, h, model) gzz = tesseroid.gzz(lon, lat, h, model) trace = gxx + gyy + gzz assert_array_almost_equal( trace, np.zeros_like(lon), 9, 'Failed whole model. Max diff %.15g' % (np.abs(trace).max())) for tess in model: gxx = tesseroid.gxx(lon, lat, h, [tess]) gyy = tesseroid.gyy(lon, lat, h, [tess]) gzz = tesseroid.gzz(lon, lat, h, [tess]) trace = gxx + gyy + gzz assert_array_almost_equal( trace, np.zeros_like(lon), 9, 'Failed tesseroid %s. Max diff %.15g' % (str(tess), np.abs(trace).max()))
def test_gyy(): "gravmag.tesseroid.gyy with optimal discretize against half a shell" shell = half_sph_shell.gyy(heights, top, bottom, density) lons = np.zeros_like(heights) lats = lons tess = tesseroid.gyy(lons, lats, heights, shellmodel) diff = np.abs(shell - tess) / np.abs(shell) assert np.all(diff <= 0.01), 'diff: %s' % (str(diff))
def test_laplace_equation(): "gravmag.tesseroid obeys Laplace equation" model = [Tesseroid(0, 1, 0, 1, 1000, -20000, {'density': 2670}), Tesseroid(-1.5, 1.5, -1.5, -1, -1000, -20000, {'density': -1000}), Tesseroid(0.1, 0.6, -0.8, -0.3, 10000, -20000, {'density': 2000}), ] area = [-2, 2, -2, 2] shape = (51, 51) lon, lat, h = gridder.regular(area, shape, z=50000) gxx = tesseroid.gxx(lon, lat, h, model) gyy = tesseroid.gyy(lon, lat, h, model) gzz = tesseroid.gzz(lon, lat, h, model) trace = gxx + gyy + gzz assert_array_almost_equal(trace, np.zeros_like(lon), 9, 'Failed whole model. Max diff %.15g' % (np.abs(trace).max())) for tess in model: gxx = tesseroid.gxx(lon, lat, h, [tess]) gyy = tesseroid.gyy(lon, lat, h, [tess]) gzz = tesseroid.gzz(lon, lat, h, [tess]) trace = gxx + gyy + gzz assert_array_almost_equal(trace, np.zeros_like(lon), 9, 'Failed tesseroid %s. Max diff %.15g' % (str(tess), np.abs(trace).max()))
# Create the computation grid area = (-80, -30, -40, 10) shape = (100, 100) lons, lats, heights = gridder.regular(area, shape, z=250000) start = time.time() fields = [ tesseroid.potential(lons, lats, heights, model), tesseroid.gx(lons, lats, heights, model), tesseroid.gy(lons, lats, heights, model), tesseroid.gz(lons, lats, heights, model), tesseroid.gxx(lons, lats, heights, model), tesseroid.gxy(lons, lats, heights, model), tesseroid.gxz(lons, lats, heights, model), tesseroid.gyy(lons, lats, heights, model), tesseroid.gyz(lons, lats, heights, model), tesseroid.gzz(lons, lats, heights, model)] print "Time it took: %s" % (utils.sec2hms(time.time() - start)) titles = ['potential', 'gx', 'gy', 'gz', 'gxx', 'gxy', 'gxz', 'gyy', 'gyz', 'gzz'] bm = mpl.basemap(area, 'merc') mpl.figure() mpl.title(titles[0]) mpl.contourf(lons, lats, fields[0], shape, 40, basemap=bm) bm.drawcoastlines() mpl.colorbar() mpl.figure() for i, field in enumerate(fields[1:4]): mpl.subplot(1, 3, i + 1)
# Create the computation grid area = (-80, -30, -40, 10) shape = (100, 100) lons, lats, heights = gridder.regular(area, shape, z=250000) start = time.time() fields = [ tesseroid.potential(lons, lats, heights, model), tesseroid.gx(lons, lats, heights, model), tesseroid.gy(lons, lats, heights, model), tesseroid.gz(lons, lats, heights, model), tesseroid.gxx(lons, lats, heights, model), tesseroid.gxy(lons, lats, heights, model), tesseroid.gxz(lons, lats, heights, model), tesseroid.gyy(lons, lats, heights, model), tesseroid.gyz(lons, lats, heights, model), tesseroid.gzz(lons, lats, heights, model) ] print "Time it took: %s" % (utils.sec2hms(time.time() - start)) titles = [ 'potential', 'gx', 'gy', 'gz', 'gxx', 'gxy', 'gxz', 'gyy', 'gyz', 'gzz' ] bm = mpl.basemap(area, 'merc') mpl.figure() mpl.title(titles[0]) mpl.contourf(lons, lats, fields[0], shape, 40, basemap=bm) bm.drawcoastlines() mpl.colorbar() mpl.figure()