Beispiel #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()
Beispiel #2
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
Beispiel #3
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]])
Beispiel #4
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()
Beispiel #5
0
def rotate(vector, phi, teta, psi):

    r_particle_div_r_jup = [(i).value_in(units.AU) / 5.2 for i in vector]
    vt = np.matrix(r_particle_div_r_jup).transpose()

    Rotx = np.matrix([[1, 0, 0], [0, np.cos(phi), -np.sin(phi)],
                      [0, np.sin(phi), np.cos(phi)]])
    Roty = np.matrix([[np.cos(teta), 0, np.sin(teta)], [0, 1, 0],
                      [-np.sin(teta), 0, np.cos(teta)]])
    Rotz = np.matrix([[np.cos(psi), -np.sin(psi), 0],
                      [np.sin(psi), np.cos(psi), 0], [0, 0, 1]])
    Rot = Rotx * Roty * Rotz

    vjup = 13070 | units.ms

    vtt = vjup.value_in(units.AUd) * np.array((Rot * vt).transpose())
    return units.AUd(vtt)
Beispiel #6
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
Beispiel #7
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)
    voyagerI.radius = units.m(20)
Beispiel #8
0
    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)
        P.renderamuse(I.stars)