def test8(self): print( "Testing adding and removing particles from stellar evolution code..." ) instance = BSE() instance.initialize_code() stars = Particles(6) stars.mass = [1.0, 1.0, 1.0, 0.2, 0.2, 0.2] | units.MSun binaries = Particles(3) binaries.eccentricity = 0.0 for i in range(3): binaries[i].child1 = stars[i] binaries[i].child2 = stars[i + 3] orbital_period = 200.0 | units.day semi_major_axis = instance.orbital_period_to_semi_major_axis( orbital_period, binaries.child1.as_set().mass, binaries.child2.as_set().mass) binaries.semi_major_axis = semi_major_axis instance.commit_parameters() self.assertEqual(len(instance.particles), 0) self.assertEqual(len(instance.binaries), 0) # before creation instance.particles.add_particles(stars) instance.binaries.add_particles(binaries[:-1]) instance.commit_particles() instance.evolve_model(1.0 | units.Myr) self.assertEqual(len(instance.binaries), 2) # before remove self.assertAlmostEqual(instance.binaries.age, 1.0 | units.Myr) instance.binaries.remove_particle(binaries[0]) self.assertEqual(len(instance.binaries), 1) instance.evolve_model(2.0 | units.Myr) self.assertAlmostEqual(instance.binaries[0].age, 2.0 | units.Myr) instance.binaries.add_particles(binaries[::2]) self.assertEqual(len(instance.binaries), 3) # it's back... self.assertAlmostEqual(instance.binaries[0].age, 2.0 | units.Myr) self.assertAlmostEqual(instance.binaries[1].age, 0.0 | units.Myr) self.assertAlmostEqual(instance.binaries[2].age, 0.0 | units.Myr) # ... and rejuvenated. instance.evolve_model( 3.0 | units.Myr ) # The young stars keep their age offset from the old star self.assertAlmostEqual(instance.binaries.age, [3.0, 1.0, 1.0] | units.Myr) instance.evolve_model(4.0 | units.Myr) self.assertAlmostEqual(instance.binaries.age, [4.0, 2.0, 2.0] | units.Myr) instance.stop()
def test8(self): print "Testing adding and removing particles from stellar evolution code..." instance = BSE() instance.initialize_code() stars = Particles(6) stars.mass = [1.0, 1.0, 1.0, 0.2, 0.2, 0.2] | units.MSun binaries = Particles(3) binaries.eccentricity = 0.0 for i in range(3): binaries[i].child1 = stars[i] binaries[i].child2 = stars[i + 3] orbital_period = 200.0 | units.day semi_major_axis = instance.orbital_period_to_semi_major_axis( orbital_period, binaries.child1.as_set().mass, binaries.child2.as_set().mass ) binaries.semi_major_axis = semi_major_axis instance.commit_parameters() self.assertEquals(len(instance.particles), 0) self.assertEquals(len(instance.binaries), 0) # before creation instance.particles.add_particles(stars) instance.binaries.add_particles(binaries[:-1]) instance.commit_particles() instance.evolve_model(1.0 | units.Myr) self.assertEquals(len(instance.binaries), 2) # before remove self.assertAlmostEqual(instance.binaries.age, 1.0 | units.Myr) instance.binaries.remove_particle(binaries[0]) self.assertEquals(len(instance.binaries), 1) instance.evolve_model(2.0 | units.Myr) self.assertAlmostEqual(instance.binaries[0].age, 2.0 | units.Myr) instance.binaries.add_particles(binaries[::2]) self.assertEquals(len(instance.binaries), 3) # it's back... self.assertAlmostEqual(instance.binaries[0].age, 2.0 | units.Myr) self.assertAlmostEqual(instance.binaries[1].age, 0.0 | units.Myr) self.assertAlmostEqual(instance.binaries[2].age, 0.0 | units.Myr) # ... and rejuvenated. instance.evolve_model(3.0 | units.Myr) # The young stars keep their age offset from the old star self.assertAlmostEqual(instance.binaries.age, [3.0, 1.0, 1.0] | units.Myr) instance.evolve_model(4.0 | units.Myr) self.assertAlmostEqual(instance.binaries.age, [4.0, 2.0, 2.0] | units.Myr) instance.stop()