def test3(self): convert_nbody = nbody_system.nbody_to_si(1.0 | units.MSun, 149.5e6 | units.km) instance = Huayno(convert_nbody) instance.initialize_code() instance.parameters.epsilon_squared = 0.00001 | units.AU**2 stars = datamodel.Stars(2) star1 = stars[0] star2 = stars[1] star1.mass = units.MSun(1.0) star1.position = units.AU(numpy.array((-1.0, 0.0, 0.0))) star1.velocity = units.AUd(numpy.array((0.0, 0.0, 0.0))) star1.radius = units.RSun(1.0) star2.mass = units.MSun(1.0) star2.position = units.AU(numpy.array((1.0, 0.0, 0.0))) star2.velocity = units.AUd(numpy.array((0.0, 0.0, 0.0))) star2.radius = units.RSun(100.0) instance.particles.add_particles(stars) for x in range(1, 2000, 10): instance.evolve_model(x | units.day) instance.particles.copy_values_of_all_attributes_to(stars) stars.savepoint()
def plot_map(sph, Sun_and_Jupiter, title, N=100, L=1, show=True): print('Plotting', title) L = 200 x, y = np.indices((N + 1, N + 1)) x = L * (x.flatten() - N / 2.) / N y = L * (y.flatten() - N / 2.) / N z = x * 0. vx = 0. * x vy = 0. * x vz = 0. * x x = units.AU(x) y = units.AU(y) z = units.AU(z) vx = units.kms(vx) vy = units.kms(vy) vz = units.kms(vz) Sx = Sun_and_Jupiter[0].x.value_in(units.AU) Sy = Sun_and_Jupiter[0].y.value_in(units.AU) Sz = Sun_and_Jupiter[0].z.value_in(units.AU) Sr = 1 sun = Circle((Sx, Sy), Sr, color='y') Jx = Sun_and_Jupiter[1].x.value_in(units.AU) Jy = Sun_and_Jupiter[1].y.value_in(units.AU) Jz = Sun_and_Jupiter[1].z.value_in(units.AU) Jr = 0.5 jup = Circle((Jx, Jy), Jr, color='orange') rho, rhovx, rhovy, rhovz, rhoe = sph.get_hydro_state_at_point( x, y, z, vx, vy, vz) rho = rho.reshape((N + 1, N + 1)) fig, ax = plt.subplots(1, figsize=(8, 8)) ax.imshow(np.log10(1.e-5 + rho.value_in(units.amu / units.cm**3)).transpose(), extent=[-L / 2, L / 2, -L / 2, L / 2], vmin=10, vmax=15, origin='lower') ax.add_patch(sun) ax.add_patch(jup) plt.title(title + ' yr', fontsize=15, weight='bold', pad=10) plt.xlabel('AU') plt.savefig('q3_distribution_plot_4K/' + title + '.png', dpi=150) if show: plt.show() plt.close()
def setup_particle_system(n_dust): stars = datamodel.Stars(n_dust) generate_dust(stars) sun = stars[0] sun.mass = 1.0 | units.MSun sun.position = units.m(np.array((0.0, 0.0, 0.0))) sun.velocity = units.ms(np.array((0.0, 0.0, 0.0))) sun.radius = 0.1000 | units.RSun #earth = stars[1] #earth.mass = units.kg(5.9736e24) #earth.position = units.AU(np.array((8.418982185410142E-01, 5.355823303978186E-01, 2.327960005926782E-05))) #earth.velocity = units.AUd(np.array((-9.488931818313919E-03, 1.447515189957170E-02, 3.617712172296458E-07))) #earth.radius = 6000 | units.km jupiter = stars[1] jupiter.mass = 1.8986e27 | units.kg # jupiter.position = units.AU( np.array((-1.443168153922270E+00, -5.114454902835615E+00, 5.340409708180518E-02))) jupiter.velocity = units.AUd( np.array((7.173114487727194E-03, -1.699488558889569E-03, -1.537231526125508E-04))) jupiter.radius = 20000 | units.km return stars, sun, jupiter
def set_IC_at_date(data, particles, IC_date): for i, body in enumerate(data): particles[i].mass = body.mass particles[i].radius = body.radius r, v = body.get_vectors_at_date(IC_date) particles[i].position = units.AU([r[0], r[1], r[2]]) particles[i].velocity = units.AUd([v[0], v[1], v[2]])
def generate_dust(dust): #assuming two AU sphere n_particles = len(dust) initial_pos = units.AU(20.0 * (np.random.random([n_particles, 3]) - 0.5)) initial_pos[::, 2] *= 0.001 dust.position = initial_pos dust.velocity = rotate(dust.position, 0, 0, 0.5 * 3.1415) #dust.velocity = np.zeros([n_particles, 3])|units.AUd dust.mass = 100.0 * units.kg(np.ones(n_particles)) dust.radius = 3000 * units.km(np.ones(n_particles)) remove_outershell(dust) remove_core_dust(dust)
def make_map(sph, N=100, L=1): x, y = numpy.indices((N + 1, N + 1)) x = L * (x.flatten() - N / 2.) / N y = L * (y.flatten() - N / 2.) / N z = x * 0. vx = 0. * x vy = 0. * x vz = 0. * x x = units.AU(x) y = units.AU(y) z = units.AU(z) vx = units.kms(vx) vy = units.kms(vy) vz = units.kms(vz) rho, rhovx, rhovy, rhovz, rhoe = sph.get_hydro_state_at_point( x, y, z, vx, vy, vz) rho = rho.reshape((N + 1, N + 1)) return numpy.transpose(rho)
def plot_map(sph, title, N=100, L=1, show=True): print('Plotting', title) L = 200 x, y = np.indices((N + 1, N + 1)) x = L * (x.flatten() - N / 2.) / N y = L * (y.flatten() - N / 2.) / N z = x * 0. vx = 0. * x vy = 0. * x vz = 0. * x x = units.AU(x) y = units.AU(y) z = units.AU(z) vx = units.kms(vx) vy = units.kms(vy) vz = units.kms(vz) rho, rhovx, rhovy, rhovz, rhoe = sph.get_hydro_state_at_point( x, y, z, vx, vy, vz) rho = rho.reshape((N + 1, N + 1)) plt.figure(figsize=(8, 8)) plt.imshow(np.log10(1.e-5 + rho.value_in(units.amu / units.cm**3)), extent=[-L / 2, L / 2, -L / 2, L / 2], vmin=10, vmax=15) plt.title(title) plt.xlabel('AU') plt.savefig(title) if show: plt.show() plt.close()
def test3(self): convert_nbody = nbody_system.nbody_to_si(1.0 | units.MSun, 149.5e6 | units.km) instance = BHTree(convert_nbody) #instance.dt_dia = 1 instance.parameters.epsilon_squared = 0.001 | units.AU**2 #instance.timestep = 0.0001 #instance.use_self_gravity = 0 instance.commit_parameters() stars = datamodel.Stars(2) star1 = stars[0] star2 = stars[1] star1.mass = units.MSun(1.0) star1.position = units.AU(numpy.array((-.10, 0.0, 0.0))) star1.velocity = units.AUd(numpy.array((0.0, 0.0, 0.0))) star1.radius = units.RSun(1.0) star2.mass = units.MSun(1.0) star2.position = units.AU(numpy.array((.10, 0.0, 0.0))) star2.velocity = units.AUd(numpy.array((0.0, 0.0, 0.0))) star2.radius = units.RSun(100.0) instance.particles.add_particles(stars) instance.commit_particles() for x in range(1, 200, 1): instance.evolve_model(x | units.day) instance.particles.copy_values_of_all_attributes_to(stars) #instance.get_indices_of_colliding_particles() #print stars[0].position-stars[1].position stars.savepoint() instance.cleanup_code() instance.stop()
def plot_map(sph, particles, title, N=100, L=200, show=True): print('Plotting', title) x, y = np.indices((N + 1, N + 1)) x = L * (x.flatten() - N / 2.) / N y = L * (y.flatten() - N / 2.) / N z = x * 0. vx = 0. * x vy = 0. * x vz = 0. * x x = units.AU(x) y = units.AU(y) z = units.AU(z) vx = units.kms(vx) vy = units.kms(vy) vz = units.kms(vz) Sun = particles[0] Sx = Sun.x.value_in(units.AU) Sy = Sun.y.value_in(units.AU) Sz = Sun.z.value_in(units.AU) #Sr = Sun.radius.value_in(units.AU) Sr = 1 sun = Circle((Sx, Sy), Sr, color='y') Jupiter = particles[1] Jx = Jupiter.x.value_in(units.AU) Jy = Jupiter.y.value_in(units.AU) Jz = Jupiter.z.value_in(units.AU) #Jr = Jupiter.radius.value_in(units.AU) Jr = 0.5 jup = Circle((Jx, Jy), Jr, color='orange') PassStar = particles[2] PSx = PassStar.x.value_in(units.AU) PSy = PassStar.y.value_in(units.AU) PSz = PassStar.z.value_in(units.AU) PSr = 2.0 ps = Circle((PSx, PSy), PSr, color='r') rho, rhovx, rhovy, rhovz, rhoe = sph.get_hydro_state_at_point( x, y, z, vx, vy, vz) rho = rho.reshape((N + 1, N + 1)) fig, ax = plt.subplots(1, figsize=(8, 8)) ax.imshow(np.log10(1.e-5 + rho.value_in(units.amu / units.cm**3)), extent=[-L / 2, L / 2, -L / 2, L / 2], vmin=10, vmax=15) ax.add_patch(sun) ax.add_patch(jup) ax.add_patch(ps) plt.title(title) plt.xlabel('AU') plt.savefig(title) if show: plt.show() plt.close()
def setup_solar_system(self): convert_nbody = nbody_system.nbody_to_si(1.0 | units.MSun, 149.5e6 | units.km) stars = datamodel.Stars(8) sun = stars[0] sun.mass = units.MSun(1.0) sun.position = units.AU(array((0.0,0.0,0.0))) sun.velocity = units.AUd(array((0.0,0.0,0.0))) sun.radius = units.RSun(1.0) mercury = stars[1] mercury.mass = units.kg( 3.302e23) mercury.radius = units.km(2440) mercury.position = units.AU(array((-1.812507519383936E-01, -4.238556570722329E-01, -1.858336536398257E-02))) mercury.velocity = units.AUd(array((2.028905659997442E-02, -9.482619060967475E-03, -2.636707283074494E-03))) venus = stars[2] venus.mass = units.kg(48.685e23) venus.radius = units.km(6051.8) venus.position = units.AU(array((7.174859394658725E-01, -9.118094489213757E-02, -4.286369239375957E-02))) venus.velocity = units.AUd(array((2.569149540621095E-03, 1.995467986481682E-02, 1.246915402703626E-04))) earth = stars[3] earth.mass = units.kg(5.9736e24) earth.radius = units.km(6371) earth.position = units.AU(array(( 4.152751345538410E-01, 8.988236789078493E-01, -4.821560120168533E-05))) earth.velocity = units.AUd(array(( -1.588315644843389E-02, 7.210443860976745E-03, -1.350251461569625E-07))) moon = stars[4] moon.mass = units.kg(7.35e22) moon.radius = units.km(1738) moon.position = units.AU(array(( 4.138191074397691E-01, 8.965602570292573E-01, -2.762446418149536E-04))) moon.velocity = units.AUd(array(( -1.541527312550390E-02, 6.894586206029982E-03, 1.223837010915995E-05))) mars = stars[5] mars.mass = units.kg(6.4185e23) mars.radius = units.km(3389.9) mars.position = units.AU(array(( -5.350147323170708E-01, -1.400272441929516E+00, -1.637545552747233E-02))) mars.velocity = units.AUd(array(( 1.360625065710822E-02, -3.765876077406818E-03, -4.130340644254660E-04))) jupiter = stars[6] jupiter.mass = units.kg(1898.13e24) jupiter.radius = units.km(71492) jupiter.position = units.AU(array(( 2.503092399973117E+00, -4.468134118102924E+00, -3.752173268244928E-02))) jupiter.velocity = units.AUd(array(( 6.490840561446090E-03, 4.046895067472646E-03, -1.620422227298534E-04))) saturn = stars[7] saturn.mass = units.kg(5.68319e26 ) saturn.radius = units.km(58232) saturn.position = units.AU(array(( -9.023156820924056E+00, 2.468810475231705E+00, 3.161126539154331E-01))) saturn.velocity = units.AUd(array(( -1.769097295887704E-03, -5.393257979873611E-03, 1.639859191780030E-04 ))) dist = earth.position - moon.position print "distance vector"+str(dist) print "distance %s\n" % (dot(dist,dist)**0.5).as_quantity_in(units.m)#(dist*dist).sum()**0.5 velo = moon.velocity-earth.velocity print "orb velocity %s\n" % (dot(velo,velo)**0.5).as_quantity_in(units.m/units.s) return stars
#make bodies in mem I.stars = datamodel.Stars(10) bodies = [ I.Sun, I.Mercury, I.Venus, I.Earth, I.Moon, I.Mars, I.Jupiter, I.Saturn, I.Uranus, I.Neptune ] #set IC for bodies in mem according to data set and date for i, body in enumerate(bodies): I.stars[i].mass = body.mass I.stars[i].radius = body.radius r, v = body.get_vectors_at_date(date(1971, 10, 26)) I.stars[i].position = units.AU(array((r[0], r[1], r[2]))) I.stars[i].velocity = units.AUd(array((v[0], v[1], v[2]))) I.instance.setup_particles(I.stars) I.model_t0 = date(1971, 10, 26) I.evolve(date(1971, 10, 26), date(1978, 1, 3), 10) #till voyager launch + some days voyagers = datamodel.Stars(1) voyagerI = voyagers[0] #I.stars.new_particle() #voyagerII = voyagers[1]# I.stars.new_particle() VoyagerI = LoadStar('voyagerI') voyagerI.mass = units.kg(1000)
def plot_map(sph, Sun_and_Jupiter, Pstar, title, N=100, L=1, show=True): print('Plotting', title) L = 400 x, y = np.indices((N + 1, N + 1)) x = L * (x.flatten() - N / 2.) / N y = L * (y.flatten() - N / 2.) / N z = x * 0. vx = 0. * x vy = 0. * x vz = 0. * x x = units.AU(x) y = units.AU(y) z = units.AU(z) vx = units.kms(vx) vy = units.kms(vy) vz = units.kms(vz) Sx = Sun_and_Jupiter[0].x.value_in(units.AU) Sy = Sun_and_Jupiter[0].y.value_in(units.AU) Sz = Sun_and_Jupiter[0].z.value_in(units.AU) #Sr = Sun_and_Jupiter[0].radius.value_in(units.AU) Sr = 1 sun = Circle((Sx, Sy), Sr, color='y') Jx = Sun_and_Jupiter[1].x.value_in(units.AU) Jy = Sun_and_Jupiter[1].y.value_in(units.AU) Jz = Sun_and_Jupiter[1].z.value_in(units.AU) #Jr = Sun_and_Jupiter[1].radius.value_in(units.AU) Jr = 0.5 jup = Circle((Jx, Jy), Jr, color='orange') Starx = Pstar.x.value_in(units.AU) Stary = Pstar.y.value_in(units.AU) Starz = Pstar.z.value_in(units.AU) Starr = 1.0 star = Circle((Starx, Stary), Starr, color='r') rho, rhovx, rhovy, rhovz, rhoe = sph.get_hydro_state_at_point( x, y, z, vx, vy, vz) rho = rho.reshape((N + 1, N + 1)) fig, ax = plt.subplots(1, figsize=(8, 8)) ax.imshow(np.log10(1.e-5 + rho.value_in(units.amu / units.cm**3)), extent=[-L / 2, L / 2, -L / 2, L / 2], vmin=10, vmax=15) ax.add_patch(sun) ax.add_patch(jup) ax.add_patch(star) #plt.title(title) plt.xlabel('AU') plt.savefig(title) if show: plt.show() plt.close()
stop_date = date(1989, 10, 26) bodies = [ I.Sun, I.Mercury, I.Venus, I.Earth, I.Moon, I.Mars, I.Jupiter, I.Saturn, I.Uranus, I.Neptune ] # #set IC for bodies in mem according to data set and date for i, body in enumerate(bodies): I.stars[i].mass = body.mass I.stars[i].radius = body.radius r, v = body.get_vectors_at_date(start_date) I.stars[i].position = units.AU([r[0], r[1], r[2]]) I.stars[i].velocity = units.AUd([v[0], v[1], v[2]]) #I.instance.setup_particles(I.stars) #copy mem to code I.stars.synchronize_to(I.instance.particles) I.model_t0 = start_date #date(1971,10,26) #initialize opengl viewer P = planetarium.SolarSystemView((640, 400)) for t in range(start_date.toordinal(), voyagerI_launch_date.toordinal(), 1): I.evolve(t, t + 1, 1)