def test_propagation_mean_motion_parabolic(): # example from Howard Curtis (3rd edition), section 3.5, problem 3.15 p = 2.0 * 6600 * u.km _a = 0.0 * u.deg orbit = Orbit.parabolic(Earth, p, _a, _a, _a, _a) orbit = orbit.propagate(0.8897 / 2.0 * u.h, method=mean_motion) _, _, _, _, _, nu0 = rv2coe(Earth.k.to(u.km**3 / u.s**2).value, orbit.r.to(u.km).value, orbit.v.to(u.km / u.s).value) assert_quantity_allclose(nu0, np.deg2rad(90.0), rtol=1e-4) orbit = Orbit.parabolic(Earth, p, _a, _a, _a, _a) orbit = orbit.propagate(36.0 * u.h, method=mean_motion) assert_quantity_allclose(norm(orbit.r), 304700.0 * u.km, rtol=1e-4)
def test_propagation_mean_motion_parabolic(): # example from Howard Curtis (3rd edition), section 3.5, problem 3.15 p = 2.0 * 6600 * u.km _a = 0.0 * u.deg orbit = Orbit.parabolic(Earth, p, _a, _a, _a, _a) orbit = orbit.propagate(0.8897 / 2.0 * u.h, method=mean_motion) _, _, _, _, _, nu0 = rv2coe(Earth.k.to(u.km**3 / u.s**2).value, orbit.r.to(u.km).value, orbit.v.to(u.km / u.s).value) assert_quantity_allclose(nu0, np.deg2rad(90.0), rtol=1e-4) orbit = Orbit.parabolic(Earth, p, _a, _a, _a, _a) orbit = orbit.propagate(36.0 * u.h, method=mean_motion) assert_quantity_allclose(norm(orbit.r.to(u.km).value), 304700.0, rtol=1e-4)
def test_parabolic_has_proper_eccentricity(): attractor = Earth _d = 1.0 * u.AU # Unused distance _a = 1.0 * u.deg # Unused angle expected_ecc = 1.0 * u.one ss = Orbit.parabolic(attractor, _d, _a, _a, _a, _a) assert_allclose(ss.ecc, expected_ecc)
def test_parabolic_has_zero_energy(): attractor = Earth _d = 1.0 * u.AU # Unused distance _ = 0.5 * u.one # Unused dimensionless value _a = 1.0 * u.deg # Unused angle ss = Orbit.parabolic(attractor, _d, _a, _a, _a, _a) assert_allclose(ss.energy.value, 0.0, atol=1e-16)
def test_parabolic_has_zero_energy(): attractor = Earth _d = 1.0 * u.AU # Unused distance _ = 0.5 * u.one # Unused dimensionless value _a = 1.0 * u.deg # Unused angle ss = Orbit.parabolic(attractor, _d, _a, _a, _a, _a) assert_almost_equal(ss.energy.value, 0.0)
def test_parabolic_has_proper_eccentricity(): attractor = Earth _d = 1.0 * u.AU # Unused distance _ = 0.5 * u.one # Unused dimensionless value _a = 1.0 * u.deg # Unused angle expected_ecc = 1.0 * u.one ss = Orbit.parabolic(attractor, _d, _a, _a, _a, _a) assert_almost_equal(ss.ecc, expected_ecc)
def test_propagation_parabolic(propagator): # example from Howard Curtis (3rd edition), section 3.5, problem 3.15 # TODO: add parabolic solver in some parabolic propagators, refer to #417 if propagator in [mikkola, gooding]: pytest.skip() p = 2.0 * 6600 * u.km _a = 0.0 * u.deg orbit = Orbit.parabolic(Earth, p, _a, _a, _a, _a) orbit = orbit.propagate(0.8897 / 2.0 * u.h, method=propagator) _, _, _, _, _, nu0 = rv2coe( Earth.k.to(u.km ** 3 / u.s ** 2).value, orbit.r.to(u.km).value, orbit.v.to(u.km / u.s).value, ) assert_quantity_allclose(nu0, np.deg2rad(90.0), rtol=1e-4) orbit = Orbit.parabolic(Earth, p, _a, _a, _a, _a) orbit = orbit.propagate(36.0 * u.h, method=propagator) assert_quantity_allclose(norm(orbit.r), 304700.0 * u.km, rtol=1e-4)
def orbit_check(date, v, m, Isp): # sprawdzenie czy orbita została osiągnieta date_iso = time.Time(str(date.iso), format='iso', scale='utc') r_out = Orbit.from_body_ephem(Jupiter, date_iso) # polozenie Jowisza po asyscie r_out1, vp_out1 = r_out.rv() v_exit = v + (vp_out1 / (24 * 3600) * u.day / u.s) # predkosc satelity po manewrach epoch_out = date.jyear ss_out = Orbit.from_vectors(Sun, r_out1, v_exit, epoch=epoch_out) # wyjsciowe parametry orbity print('Sprawdzanie osiągnięcia orbity ...') print() if ss_out.ecc >= 1: # ekscentrycznosc orbity print('Predkosc jest okej') else: print('Predkosc jest za mała') print() print('Dostosuj się do minimalnej orbity wyjściowej ') # minimalna orbita wyjsciowa paraboliczna: ss_out_new = Orbit.parabolic(Sun, ss_out.p, ss_out.inc, ss_out.raan, ss_out.argp, ss_out.nu, epoch=epoch_out) v_out_new = ss_out_new.rv()[1] - v_exit # obliczenia nowej predkosci dv_out_new = np.linalg.norm(v_out_new) * u.km / u.s m_p_new = m * (math.exp(dv_out_new / Isp) - 1 ) # obliczenia brakujace masy paliwa # Odpowiedz: print('Potrzebna delta V: %.3f km/s' % float(dv_out_new / u.km * u.s)) print('Potrzebna dod. masa paliwa: %i kg' % int(m_p_new / u.kg))
def test_parabolic_has_zero_energy(): attractor = Earth _d = 1.0 * u.AU # Unused distance _a = 1.0 * u.deg # Unused angle ss = Orbit.parabolic(attractor, _d, _a, _a, _a, _a) assert_allclose(ss.energy.value, 0.0, atol=1e-16)