Exemplo n.º 1
0
 def test10(self):
     particles = Particles(2)
     particles.position = [[1, 0, 0], [2,0,0]] | units.m
     particles.velocity = [[3, 0, 0], [4,0,0]] | units.m / units.s
     particles.mass = 1 | units.kg
     
     self.assertEquals(particles.total_mass(), 2 | units.kg)
     self.assertEquals(particles.total_momentum(), [7, 0, 0] | units.kg * units.m / units.s)
     self.assertEquals(particles.total_momentum(), particles.total_mass() * particles.center_of_mass_velocity())
     self.assertEquals(particles.total_radius(), 0.5 | units.m)
     
     convert_nbody = nbody_system.nbody_to_si(1000 | units.kg, 1e-6 | units.m)
     numpy.random.seed(123)
     field = new_plummer_sphere(10000, convert_nbody) # small clump of particles, can be regarded as point mass
     self.assertAlmostRelativeEquals(particles.potential_energy_in_field(field), -constants.G * (1500 | units.kg**2 / units.m), 5)
     self.assertAlmostEquals(particles.potential_energy_in_field(field), -1.001142 | 1e-7 * units.kg * units.m**2 / units.s**2, 5)
     
     field.position *= ((5 | units.m) / field.position.lengths()).reshape((-1, 1)) # spherical shell around particles
     potential_energy = particles.potential_energy_in_field(field)
     particles.position += [0, 1, 2] | units.m # as long as particles remain inside the shell, the potential doesn't change
     self.assertAlmostEquals(particles.potential_energy_in_field(field), potential_energy, 5)
     
     particles.mass = [1, 2] | units.kg
     self.assertAlmostRelativeEquals(particles.potential(), -constants.G * ([2, 1] | units.kg / units.m))
     self.assertAlmostRelativeEquals(particles.potential()[0], particles[0].potential())
     self.assertAlmostRelativeEquals(particles.potential()[1], particles[1].potential())
Exemplo n.º 2
0
    def test10(self):
        particles = Particles(2)
        particles.position = [[1, 0, 0], [2, 0, 0]] | units.m
        particles.velocity = [[3, 0, 0], [4, 0, 0]] | units.m / units.s
        particles.mass = 1 | units.kg

        self.assertEquals(particles.total_mass(), 2 | units.kg)
        self.assertEquals(particles.total_momentum(),
                          [7, 0, 0] | units.kg * units.m / units.s)
        self.assertEquals(
            particles.total_momentum(),
            particles.total_mass() * particles.center_of_mass_velocity())
        self.assertEquals(particles.total_radius(), 0.5 | units.m)

        convert_nbody = nbody_system.nbody_to_si(1000 | units.kg,
                                                 1e-6 | units.m)
        numpy.random.seed(123)
        field = new_plummer_sphere(
            10000, convert_nbody
        )  # small clump of particles, can be regarded as point mass
        self.assertAlmostRelativeEquals(
            particles.potential_energy_in_field(field),
            -constants.G * (1500 | units.kg**2 / units.m), 5)
        self.assertAlmostEquals(
            particles.potential_energy_in_field(field),
            -1.001142 | 1e-7 * units.kg * units.m**2 / units.s**2, 5)

        field.position *= ((5 | units.m) / field.position.lengths()).reshape(
            (-1, 1))  # spherical shell around particles
        potential_energy = particles.potential_energy_in_field(field)
        particles.position += [
            0, 1, 2
        ] | units.m  # as long as particles remain inside the shell, the potential doesn't change
        self.assertAlmostEquals(particles.potential_energy_in_field(field),
                                potential_energy, 5)

        particles.mass = [1, 2] | units.kg
        self.assertAlmostRelativeEquals(
            particles.potential(),
            -constants.G * ([2, 1] | units.kg / units.m))
        self.assertAlmostRelativeEquals(particles.potential()[0],
                                        particles[0].potential())
        self.assertAlmostRelativeEquals(particles.potential()[1],
                                        particles[1].potential())