def test_velocity(): t_tensor = tt.dvector() t = np.linspace(0, 100, 1000) m_planet = 0.1 m_star = 1.3 orbit = KeplerianOrbit( m_star=m_star, r_star=1.0, t0=0.5, period=100.0, ecc=0.1, omega=0.5, Omega=1.0, incl=0.25 * np.pi, m_planet=m_planet, ) star_pos = orbit.get_star_position(t_tensor) star_vel = theano.function([], orbit.get_star_velocity(t))() star_vel_expect = np.empty_like(star_vel) for i in range(3): g = theano.grad(tt.sum(star_pos[i]), t_tensor) star_vel_expect[i] = theano.function([t_tensor], g)(t) assert np.allclose(star_vel, star_vel_expect) planet_pos = orbit.get_planet_position(t_tensor) planet_vel = theano.function([], orbit.get_planet_velocity(t))() planet_vel_expect = np.empty_like(planet_vel) for i in range(3): g = theano.grad(tt.sum(planet_pos[i]), t_tensor) planet_vel_expect[i] = theano.function([t_tensor], g)(t) assert np.allclose(planet_vel, planet_vel_expect) pos = orbit.get_relative_position(t_tensor) vel = np.array(theano.function([], orbit.get_relative_velocity(t))()) vel_expect = np.empty_like(vel) for i in range(3): g = theano.grad(tt.sum(pos[i]), t_tensor) vel_expect[i] = theano.function([t_tensor], g)(t) assert np.allclose(vel, vel_expect)
def test_acceleration(): t_tensor = tt.dvector() t = np.linspace(0, 100, 1000) m_planet = 0.1 m_star = 1.3 orbit = KeplerianOrbit( m_star=m_star, r_star=1.0, t0=0.5, period=100.0, ecc=0.1, omega=0.5, incl=0.25 * np.pi, m_planet=m_planet, ) star_vel = orbit.get_star_velocity(t_tensor) star_acc = theano.function([], orbit.get_star_acceleration(t))() star_acc_expect = np.empty_like(star_acc) for i in range(3): g = theano.grad(tt.sum(star_vel[i]), t_tensor) star_acc_expect[i] = theano.function([t_tensor], g)(t) utt.assert_allclose(star_acc, star_acc_expect) planet_vel = orbit.get_planet_velocity(t_tensor) planet_acc = theano.function([], orbit.get_planet_acceleration(t))() planet_acc_expect = np.empty_like(planet_acc) for i in range(3): g = theano.grad(tt.sum(planet_vel[i]), t_tensor) planet_acc_expect[i] = theano.function([t_tensor], g)(t) utt.assert_allclose(planet_acc, planet_acc_expect) vel = orbit.get_relative_velocity(t_tensor) acc = theano.function([], orbit.get_relative_acceleration(t))() acc_expect = np.empty_like(acc) for i in range(3): g = theano.grad(tt.sum(vel[i]), t_tensor) acc_expect[i] = theano.function([t_tensor], g)(t) utt.assert_allclose(acc, acc_expect)