Exemple #1
0
    def test11(self):
        instance = interface.TwoBody()
        p = datamodel.Particles(2)

        p.mass = [1, 0.0] | nbody_system.mass
        p.radius = 0.001 | nbody_system.length
        p.x = [1.0, 0.0] | nbody_system.length
        p.y = [0.1, 0.0] | nbody_system.length
        p.z = [-0.1, 0.0] | nbody_system.length

        p.vx = [-0.1, 0.0] | nbody_system.speed
        p.vy = [2.0, 0.0] | nbody_system.speed
        p.vz = [-0.2, 0.0] | nbody_system.speed

        instance.particles.add_particles(p)
        instance.evolve_model(0.5 | nbody_system.time)
        particles1 = instance.particles.copy()
        instance.stop()

        instance = interface.TwoBody()
        instance.parameters.begin_time = 0.5 | nbody_system.time
        instance.particles.add_particles(particles1)
        instance.evolve_model(1.0 | nbody_system.time)

        self.assertAlmostEqual(
            instance.particles.x[0] - instance.particles.x[1],
            0.611238439231 | nbody_system.length, 7)
        self.assertAlmostEqual(
            instance.particles.y[0] - instance.particles.y[1],
            1.92873971354574 | nbody_system.length, 7)
        self.assertAlmostEqual(
            instance.particles.z[0] - instance.particles.z[1],
            -0.2562478900031234 | nbody_system.length, 7)
        instance.stop()
Exemple #2
0
    def test2(self):
        convert_nbody = nbody_system.nbody_to_si(5.9742e24 | units.kg,
                                                 1e6 | units.m)
        instance = interface.TwoBody(convert_nbody)

        p = datamodel.Particle()
        p.mass = 5.9742e24 | units.kg
        p.radius = 6.371e6 | units.m
        p.position = [0., 7.e6, -1.2124e7] | units.m
        p.velocity = [0., 2.6679e3, 4.6210e3] | units.m / units.s

        instance.particles.add_particle(p)

        instance.evolve_model(3600.0 | units.s)

        position = instance.particles[0].position
        velocity = instance.particles[0].velocity

        self.assertAlmostEqual(position.x.value_in(units.m), 0., 7)
        self.assertAlmostEqual(
            position.y.value_in(units.m) / (-3.30647600568e6), 1., 7)
        self.assertAlmostEqual(
            position.z.value_in(units.m) / 7.40831575351e6, 1., 7)
        self.assertAlmostEqual(velocity.x.value_in(units.m / units.s), 0., 7)
        self.assertAlmostEqual(
            velocity.y.value_in(units.m / units.s) / (-8.29821376206e3), 1., 7)
        self.assertAlmostEqual(
            velocity.z.value_in(units.m / units.s) / (-0.972888312209e3), 1.,
            7)
        instance.stop()
Exemple #3
0
    def test8(self):
        print("Test 8: get_potential_at_point")
        instance = interface.TwoBody()
        p = datamodel.Particles(2)

        p.mass = 0.5 | nbody_system.mass
        p.radius = 0 | nbody_system.length
        p.position = [[1.0, 0, 0], [-1.0, 0, 0]] | nbody_system.length
        p.velocity = [[0] * 3] * 2 | nbody_system.speed

        instance.particles.add_particles(p)
        zero = [0.0] | nbody_system.length
        phi = instance.get_potential_at_point(zero, 0.5 | nbody_system.length,
                                              zero, zero)
        self.assertAlmostEqual(phi, -4 / 3.0 | nbody_system.potential)

        zero = [0.0] * 4 | nbody_system.length
        phi = instance.get_potential_at_point(
            zero, [0, 0.5, 1.5, 2.5] | nbody_system.length, zero, zero)
        self.assertAlmostEqual(phi, [-1, -4 / 3.0, -1.2, -0.47619047]
                               | nbody_system.potential)

        zero = [0.0] | nbody_system.length
        phi = instance.get_potential_at_point(zero, 1.0 | nbody_system.length,
                                              zero, zero)
        self.assertTrue(numpy.isinf(phi[0].value_in(nbody_system.potential)))
        instance.stop()
Exemple #4
0
    def test6(self):
        #from: Fundamentals of Celestial Mechanics, J.M.A. Danby 2nd edition
        instance = interface.TwoBody()
        p = datamodel.Particles(2)

        p.mass = [1, 0.0] | nbody_system.mass
        p.radius = 0.001 | nbody_system.length
        p.x = [1.0, 0.0] | nbody_system.length
        p.y = [0.1, 0.0] | nbody_system.length
        p.z = [-0.1, 0.0] | nbody_system.length

        p.vx = [-0.1, 0.0] | nbody_system.speed
        p.vy = [2.0, 0.0] | nbody_system.speed
        p.vz = [-0.2, 0.0] | nbody_system.speed

        instance.particles.add_particles(p)
        instance.evolve_model(1.0 | nbody_system.time)
        self.assertAlmostEqual(
            instance.particles.x[0] - instance.particles.x[1],
            0.611238439231 | nbody_system.length, 7)
        self.assertAlmostEqual(
            instance.particles.y[0] - instance.particles.y[1],
            1.92873971354574 | nbody_system.length, 7)
        self.assertAlmostEqual(
            instance.particles.z[0] - instance.particles.z[1],
            -0.2562478900031234 | nbody_system.length, 7)
        instance.stop()
 def test10(self):
     convert_nbody = nbody_system.nbody_to_si(1.0 | units.yr, 1.0 | units.AU)
     instance = interface.TwoBody(convert_nbody)
     
     value = instance.get_begin_time()
     self.assertEquals(0.0| units.yr, value)
     self.assertAlmostEquals(0.0 | units.yr, instance.parameters.begin_time, in_units=units.yr)
     for x in [1.0, 10.0, 100.0]:
         instance.parameters.begin_time = x | units.yr
         self.assertAlmostEquals(x | units.yr, instance.parameters.begin_time, in_units=units.yr)
     instance.stop()
 def test9(self):
     print "Test 9: TwoBody parameters"
     instance = interface.TwoBody()
     
     self.assertEqual(instance.parameters.epsilon_squared, zero)
     
     self.assertRaises(AmuseException, setattr, instance.parameters, "epsilon_squared", zero, 
         expected_message = "Could not set value for parameter 'epsilon_squared' of a 'TwoBody' object, "
             "parameter is read-only")
     
     instance.stop()
    def test5(self):
        #from: Fundamentals of Celestial Mechanics, J.M.A. Danby 2nd edition
        instance = interface.TwoBody()
        p = datamodel.Particle()

        p.mass = 1.0 | nbody_system.mass
        p.radius = 0.001 | nbody_system.length
        p.position = [1.0, 0.1, -0.1] | nbody_system.length
        p.velocity = [-0.1, 2.0, -0.2] | nbody_system.speed

        instance.particles.add_particle(p)
        instance.evolve_model(1.0|nbody_system.time)
        self.assertAlmostEqual(instance.particles.x, 0.611238439231|nbody_system.length, 7)
        self.assertAlmostEqual(instance.particles.y, 1.92873971354574|nbody_system.length, 7)
        self.assertAlmostEqual(instance.particles.z, -0.2562478900031234|nbody_system.length, 7)
        instance.stop()
Exemple #8
0
    def test7(self):
        print("Test 7: get_gravity_at_point")
        instance = interface.TwoBody()
        p = datamodel.Particles(2)

        p.mass = 0.5 | nbody_system.mass
        p.radius = 0 | nbody_system.length
        p.position = [[1.0, 0, 0], [-1.0, 0, 0]] | nbody_system.length
        p.velocity = [[0] * 3] * 2 | nbody_system.speed

        instance.particles.add_particles(p)
        zero = [0.0] | nbody_system.length
        ax, ay, az = instance.get_gravity_at_point(zero,
                                                   0.5 | nbody_system.length,
                                                   zero, zero)
        self.assertAlmostEqual(ax, 16 / 9.0 | nbody_system.acceleration)
        self.assertAlmostEqual(ay, 0 | nbody_system.acceleration)
        self.assertAlmostEqual(az, 0 | nbody_system.acceleration)

        zero = [0.0] * 4 | nbody_system.length
        ax, ay, az = instance.get_gravity_at_point(
            zero, [0, 0.5, 1.5, 2.5] | nbody_system.length, zero, zero)
        self.assertAlmostEqual(ax, [0, 16 / 9.0, -2.08, -0.26303854]
                               | nbody_system.acceleration)
        self.assertAlmostEqual(ay, 0 | nbody_system.acceleration)
        self.assertAlmostEqual(az, 0 | nbody_system.acceleration)

        zero = [0.0] | nbody_system.length
        ax, ay, az = instance.get_gravity_at_point(zero,
                                                   1.0 | nbody_system.length,
                                                   zero, zero)
        self.assertTrue(numpy.isnan(ax[0].value_in(nbody_system.acceleration)))
        self.assertTrue(numpy.isnan(ay[0].value_in(nbody_system.acceleration)))
        self.assertTrue(numpy.isnan(az[0].value_in(nbody_system.acceleration)))

        zero = [0.0] | nbody_system.length
        eps = [0.1] | nbody_system.length
        ax, ay, az = instance.get_gravity_at_point(eps,
                                                   1.0 | nbody_system.length,
                                                   zero, zero)
        self.assertAlmostEqual(ax, -0.12453271 | nbody_system.acceleration)
        self.assertAlmostEqual(ay, 0 | nbody_system.acceleration)
        self.assertAlmostEqual(az, 0 | nbody_system.acceleration)
        instance.stop()
 def test3(self):
     convert_nbody = nbody_system.nbody_to_si(5.9742e24 | units.kg, 1e6| units.m)
     instance = interface.TwoBody(convert_nbody)
     
     p = datamodel.Particle()
     p.mass = 5.9742e24 | units.kg
     p.radius = 7.1e6 | units.m
     p.position = [0.,7.e6,-1.2124e7] | units.m
     p.velocity = [0.,2.6679e3,4.6210e3] | units.m/units.s
     
     instance.particles.add_particle(p)
     
     instance.evolve_model(3600.0 | units.s)
     
     dt = convert_nbody.to_si(instance.model_time)
     self.assertAlmostEqual(dt.value_in(units.s)/2583.44780926,1.,7)
     
     position = instance.particles[0].position
     self.assertAlmostEqual(((position.x**2+position.y**2+position.z**2)/(7.1e6)**2).value_in(units.m**2),1.,7)
     instance.stop()
Exemple #10
0
    def test4(self):
        convert_nbody = nbody_system.nbody_to_si(5.9742e24 | units.kg, 1e6| units.m)
        instance = interface.TwoBody(convert_nbody)
        
        p = datamodel.Particle()
        p.mass = 5.9742e24 | units.kg
        p.radius = 7.1e6 | units.m
        p.position = [0.,7.e6,-1.2124e7] | units.m
        p.velocity = [0.,2.6679e3,4.6210e3] | units.m/units.s
        
        instance.particles.add_particle(p)
        
        instance.evolve_model(3600.0 | units.s)
        
        dt = convert_nbody.to_si(instance.model_time)

        
        self.assertEqual(instance.particles[0].mass,5.9742e24 | units.kg)
       
        instance.particles[0].mass=0.8*5.9742e24 | units.kg
        instance.evolve_model(4000.0 | units.s)
        self.assertEqual(instance.particles.mass[0],0.8*5.9742e24 | units.kg)
        instance.stop()
Exemple #11
0
 def test1(self):
     convert_nbody = nbody_system.nbody_to_si(5.9742e24 | units.kg,
                                              1e6 | units.m)
     instance = interface.TwoBody(convert_nbody)
     instance.stop()