def get_galaxies_in_orbit(m_a=10.e11|units.MSun, m_b=10.e11|units.MSun, ecc=0.5, r_min=25.|units.kpc, t_start=None): """ binary galaxy with orbit of given parameters -- if ecc=>1, start at t_start (p625, t_start=-10=-10*100Myr) -- if ecc<1, start at apocenter (p644) """ converter=nbody_system.nbody_to_si(m_a+m_b,1|units.kpc) semi = r_min/(1.-ecc) # relative position and velocity vectors at the pericenter using kepler kepler = Kepler_twobody(converter) kepler.initialize_code() kepler.initialize_from_elements(mass=(m_a+m_b), semi=semi, ecc=ecc, periastron=r_min) # at periastron # evolve back till initial position if ( ecc<1. ): kepler.return_to_apastron() else: kepler.transform_to_time(t_start) # get time of the orbit t_orbit = kepler.get_time() rl = kepler.get_separation_vector() r = [rl[0].value_in(units.AU), rl[1].value_in(units.AU), rl[2].value_in(units.AU)] | units.AU vl = kepler.get_velocity_vector() v = [vl[0].value_in(units.kms), vl[1].value_in(units.kms), vl[2].value_in(units.kms)] | units.kms kepler.stop() # assign particle atributes galaxies = Particles(2) galaxies[0].mass = m_a galaxies[0].position = (0,0,0) | units.AU galaxies[0].velocity = (0,0,0) | units.kms galaxies[1].mass = m_b galaxies[1].position = r galaxies[1].velocity = v # identification galaxies[0].id = 'a0' galaxies[1].id = 'b0' galaxies.move_to_center() return galaxies, t_orbit
def run_kepler(mass, semi, ecc, time): kep = Kepler(redirection='none') kep.initialize_code() kep.set_longitudinal_unit_vector(1.0, 1.0, 0.0) kep.initialize_from_elements(mass, semi, ecc) a,e = kep.get_elements() p = kep.get_periastron() print "elements:", a, e, p kep.transform_to_time(time) x,y,z = kep.get_separation_vector() print "separation:", x,y,z x,y,z = kep.get_longitudinal_unit_vector() print "longitudinal:", x,y,z pos = [1, 0, 0] | nbody_system.length vel = [0, 0.5, 0] | nbody_system.speed kep.initialize_from_dyn(mass, pos[0], pos[1], pos[2], vel[0], vel[1], vel[2]) a,e = kep.get_elements() p = kep.get_periastron() print "elements:", a, e, p kep.transform_to_time(time) x,y,z = kep.get_separation_vector() print "separation:", x,y,z x,y,z = kep.get_velocity_vector() print "velocity:", x,y,z x,y,z = kep.get_longitudinal_unit_vector() print "longitudinal:", x,y,z kep.set_random(42) kep.make_binary_scattering(0.5 | nbody_system.mass, 0.5, 0.5 | nbody_system.mass, 0.0 | nbody_system.speed, 0.0 | nbody_system.length, 1.e-6, 0) kep.stop()