Пример #1
0
    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()
Пример #3
0
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
Пример #4
0
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]])
Пример #5
0
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)
Пример #6
0
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()
Пример #8
0
    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()
Пример #10
0
    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
Пример #11
0
    #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()
Пример #13
0
    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)