def test_slant_time(self): """ Should calculate travel time as a straight-line distance. """ # should handle a single source, receiver set sx = 0 sy = 0 sz = 0 rx = 10 ry = 5 rz = 3 v = 1.5 t = slant_time(sx, sy, sz, rx, ry, rz, v) self.assertEqual(t, 7.71722460186015) # should handle multiple sources and a single receiver sx = np.asarray([0, 1]) t = slant_time(sx, sy, sz, rx, ry, rz, v) self.assertEqual(len(t), 2) self.assertEqual(t[0], 7.71722460186015) self.assertEqual(t[1], 7.149203529842406) # should hangle multiple sources and multiple recievers rx = np.asarray([10, 15]) t = slant_time(sx, sy, sz, rx, ry, rz, v) self.assertEqual(len(t), 2)
def test_locate_on_surface(self): """ Should find the position of a receiver. """ # Test surface x = np.linspace(0, 5, 6) y = np.linspace(0, 5, 6) zz = 3.0 + 2.0 * np.random.rand(len(x), len(y)) # Synthetic traveltimes sx = np.asarray([0, 1, 2, 3, 4, 5]) sy = np.asarray([5, 4, 3, 2, 1, 0]) sz = np.asarray([0.5, 0.5, 0.2, 0.1, 0.2, 0.4]) rx0 = x[3] ry0 = y[3] rz0 = zz[3, 3] v = 1.50 twt = 2.0 * slant_time(sx, sy, sz, rx0, ry0, rz0, v) # Run the locator rx, ry, rz, rms = locate_on_surface(sx, sy, sz, twt, x, y, zz, v=v) self.assertEqual(rx0, rx) self.assertEqual(ry0, ry) self.assertEqual(rz0, rz) self.assertEqual(rms, 0.0)