Ejemplo n.º 1
0
 def test5(self):
     mosse = MOSSE()
     mosse.commit_parameters() 
     stars = Particles(1)
     
     star = stars[0]
     star.mass = 35 | units.MSun
     star.radius = 0.0 | units.RSun
     
     stars.synchronize_to(mosse.particles)
     
     channel = mosse.particles.new_channel_to(stars)
     channel.copy_attributes(mosse.particles.get_attribute_names_defined_in_store())   
     
     previous_type = star.stellar_type
     results = []
     
     dt = 1 | units.Myr
     t = 0 | units.Myr
     while t < 30 | units.Myr:
         t += dt
         mosse.evolve_model(t)
             
     self.assertTrue(mosse.particles[0].mass.value_in(units.MSun) < 6.0)
      
     mosse.stop()
Ejemplo n.º 2
0
    def test3(self):
        mosse = MOSSE()
        mosse.commit_parameters()
        stars = Particles(1)

        star = stars[0]
        star.mass = 5 | units.MSun
        star.radius = 0.0 | units.RSun

        stars.synchronize_to(mosse.particles)

        channel = mosse.particles.new_channel_to(stars)
        channel.copy_attributes(
            mosse.particles.get_attribute_names_defined_in_store())

        previous_type = mosse.particles.stellar_type
        results = []

        mosse.evolve_model(121.9 | units.Myr)

        channel.copy_attributes(
            mosse.particles.get_attribute_names_defined_in_store())

        self.assertAlmostEqual(star.mass.value_in(units.MSun), 1.002, 3)

        mosse.stop()
Ejemplo n.º 3
0
 def test5(self):
     mosse = MOSSE()
     mosse.commit_parameters() 
     stars = Particles(1)
     
     star = stars[0]
     star.mass = 35 | units.MSun
     star.radius = 0.0 | units.RSun
     
     stars.synchronize_to(mosse.particles)
     
     channel = mosse.particles.new_channel_to(stars)
     channel.copy_attributes(mosse.particles.get_attribute_names_defined_in_store())   
     
     previous_type = star.stellar_type
     results = []
     
     dt = 1 | units.Myr
     t = 0 | units.Myr
     while t < 30 | units.Myr:
         t += dt
         mosse.evolve_model(t)
             
     self.assertTrue(mosse.particles[0].mass.value_in(units.MSun) < 6.0)
      
     mosse.stop()
Ejemplo n.º 4
0
    def test6(self):
        print("Test whether a set of stars evolves synchronously...")
#       Create an array of stars with a range in stellar mass
        masses = [.5, 1., 2., 5., 10., 30.] | units.MSun
        number_of_stars = len(masses)
        stars = Particles(number_of_stars)
        stars.mass = masses

#       Initialize stellar evolution code
        instance = MOSSE()
        instance.commit_parameters() 
        instance.particles.add_particles(stars)
        instance.commit_particles()
        
        from_code_to_model = instance.particles.new_channel_to(stars)
        from_code_to_model.copy()
        
        instance.evolve_model(end_time = 125 | units.Myr)
        from_code_to_model.copy()
                
        end_types = (
            "deeply or fully convective low mass MS star",
            "Main Sequence star",
            "Main Sequence star",
            "Carbon/Oxygen White Dwarf",
            "Neutron Star",
            "Black Hole",
        )
        for i in range(number_of_stars):
            self.assertAlmostEqual(stars[i].age, 125.0 | units.Myr)
            self.assertTrue(stars[i].mass <= masses[i])
            self.assertEqual(str(stars[i].stellar_type), end_types[i])
        instance.stop()
Ejemplo n.º 5
0
    def test6(self):
        print "Test whether a set of stars evolves synchronously..."
#       Create an array of stars with a range in stellar mass
        masses = [.5, 1., 2., 5., 10., 30.] | units.MSun
        number_of_stars = len(masses)
        stars = Particles(number_of_stars)
        stars.mass = masses

#       Initialize stellar evolution code
        instance = MOSSE()
        instance.commit_parameters() 
        instance.particles.add_particles(stars)
        instance.commit_particles()
        
        from_code_to_model = instance.particles.new_channel_to(stars)
        from_code_to_model.copy()
        
        instance.evolve_model(end_time = 125 | units.Myr)
        from_code_to_model.copy()
                
        end_types = (
            "deeply or fully convective low mass MS star",
            "Main Sequence star",
            "Main Sequence star",
            "Carbon/Oxygen White Dwarf",
            "Neutron Star",
            "Black Hole",
        )
        for i in range(number_of_stars):
            self.assertAlmostEquals(stars[i].age, 125.0 | units.Myr)
            self.assertTrue(stars[i].mass <= masses[i])
            self.assertEquals(str(stars[i].stellar_type), end_types[i])
        instance.stop()
Ejemplo n.º 6
0
    def test1(self):
        mosse = MOSSE()
        mosse.commit_parameters()
        stars = Particles(1)
        star = stars[0]
        star.mass = 5 | units.MSun
        star.radius = 0.0 | units.RSun

        mosse.particles.add_particles(stars)
        from_sse_to_model = mosse.particles.new_channel_to(stars)
        from_sse_to_model.copy()

        previous_type = star.stellar_type
        results = []
        t0 = 0 | units.Myr
        current_time = t0

        while current_time < (125 | units.Myr):
            mosse.update_time_steps()

            current_time = current_time + mosse.particles[0].time_step

            mosse.evolve_model(current_time)

            from_sse_to_model.copy()

            if not star.stellar_type == previous_type:
                results.append((star.age, star.mass, star.stellar_type))
                previous_type = star.stellar_type

        self.assertEqual(len(results), 6)

        times = (104.19 | units.Myr, 104.62 | units.Myr, 104.87 | units.Myr,
                 120.39 | units.Myr, 121.17 | units.Myr, 121.88 | units.Myr)
        for result, expected in zip(results, times):
            self.assertAlmostEqual(result[0].value_in(units.Myr),
                                   expected.value_in(units.Myr), 1)

        masses = (4.991 | units.MSun, 4.991 | units.MSun, 4.989 | units.MSun,
                  4.923 | units.MSun, 4.886 | units.MSun, 1.003 | units.MSun)
        for result, expected in zip(results, masses):
            self.assertAlmostEqual(result[1].value_in(units.MSun),
                                   expected.value_in(units.MSun), 3)

        types = (
            "Hertzsprung Gap",
            "First Giant Branch",
            "Core Helium Burning",
            "First Asymptotic Giant Branch",
            "Second Asymptotic Giant Branch",
            "Carbon/Oxygen White Dwarf",
        )

        for result, expected in zip(results, types):
            self.assertEqual(str(result[2]), expected)

        mosse.stop()
Ejemplo n.º 7
0
 def test21(self):
     instance = MOSSE()
     stars = instance.particles.add_particles(Particles(mass = 30 | units.MSun))
     mass_loss_wind = stars[0].mass_loss_wind
     self.assertAlmostRelativeEquals(mass_loss_wind, 2.209e-07 | units.MSun / units.yr, 3)
     instance.evolve_model(1 | units.Myr)
     dm = (1 | units.Myr)* mass_loss_wind
     self.assertAlmostRelativeEquals(stars[0].mass, (30 | units.MSun) - dm  ,  3)
     self.assertAlmostRelativeEquals(stars[0].mass_loss_wind, 2.7056e-07 | units.MSun / units.yr, 3)
 
     instance.stop()
Ejemplo n.º 8
0
 def test21(self):
     instance = MOSSE()
     stars = instance.particles.add_particles(Particles(mass = 30 | units.MSun))
     mass_loss_wind = stars[0].mass_loss_wind
     self.assertAlmostRelativeEquals(mass_loss_wind, 2.209e-07 | units.MSun / units.yr, 3)
     instance.evolve_model(1 | units.Myr)
     dm = (1 | units.Myr)* mass_loss_wind
     self.assertAlmostRelativeEquals(stars[0].mass, (30 | units.MSun) - dm  ,  3)
     self.assertAlmostRelativeEquals(stars[0].mass_loss_wind, 2.7056e-07 | units.MSun / units.yr, 3)
 
     instance.stop()
Ejemplo n.º 9
0
 def test22(self):
     instance = MOSSE()
     stars = instance.particles.add_particles(Particles(mass = [1.0, 10.0] | units.MSun))
     gyration_radius = stars.gyration_radius
     self.assertTrue(numpy.all(0.0 < gyration_radius))
     self.assertTrue(numpy.all(gyration_radius < 1.0))
     instance.evolve_model(12.4 | units.Gyr)
     self.assertTrue(stars[0].gyration_radius < gyration_radius[0])
     self.assertTrue(stars[1].gyration_radius > gyration_radius[1])
     instance.evolve_model(14 | units.Gyr)
     self.assertTrue(numpy.all(stars.gyration_radius > gyration_radius))
     instance.stop()
Ejemplo n.º 10
0
 def test22(self):
     instance = MOSSE()
     stars = instance.particles.add_particles(Particles(mass = [1.0, 10.0] | units.MSun))
     gyration_radius = stars.gyration_radius
     self.assertTrue(numpy.all(0.0 < gyration_radius))
     self.assertTrue(numpy.all(gyration_radius < 1.0))
     instance.evolve_model(12.4 | units.Gyr)
     self.assertTrue(stars[0].gyration_radius < gyration_radius[0])
     self.assertTrue(stars[1].gyration_radius > gyration_radius[1])
     instance.evolve_model(14 | units.Gyr)
     self.assertTrue(numpy.all(stars.gyration_radius > gyration_radius))
     instance.stop()
Ejemplo n.º 11
0
 def test20(self):
     print("MOSSE core_mass and CO_core_mass (low mass stars)")
     instance = MOSSE()
     stars = instance.particles.add_particles(Particles(mass = [0.6, 1.0] | units.MSun))
     instance.evolve_model(100 | units.Gyr)
     self.assertEqual(str(stars[0].stellar_type), "Helium White Dwarf")
     self.assertAlmostEqual(stars[0].mass, 0.405 | units.MSun, 2)
     self.assertEqual(stars[0].core_mass, stars[0].mass)
     self.assertEqual(stars[0].CO_core_mass, 0 | units.MSun)
     self.assertEqual(str(stars[1].stellar_type), "Carbon/Oxygen White Dwarf")
     self.assertAlmostEqual(stars[1].mass, 0.520 | units.MSun, 2)
     self.assertEqual(stars[1].core_mass, stars[1].mass)
     self.assertEqual(stars[1].CO_core_mass, stars[1].mass)
     instance.stop()
Ejemplo n.º 12
0
 def test20(self):
     print "MOSSE core_mass and CO_core_mass (low mass stars)"
     instance = MOSSE()
     stars = instance.particles.add_particles(Particles(mass = [0.6, 1.0] | units.MSun))
     instance.evolve_model(100 | units.Gyr)
     self.assertEqual(str(stars[0].stellar_type), "Helium White Dwarf")
     self.assertAlmostEqual(stars[0].mass, 0.405 | units.MSun, 2)
     self.assertEqual(stars[0].core_mass, stars[0].mass)
     self.assertEqual(stars[0].CO_core_mass, 0 | units.MSun)
     self.assertEqual(str(stars[1].stellar_type), "Carbon/Oxygen White Dwarf")
     self.assertAlmostEqual(stars[1].mass, 0.520 | units.MSun, 2)
     self.assertEqual(stars[1].core_mass, stars[1].mass)
     self.assertEqual(stars[1].CO_core_mass, stars[1].mass)
     instance.stop()
Ejemplo n.º 13
0
 def test12(self):
     print "Testing adding and removing particles from stellar evolution code..."
     
     particles = Particles(3)
     particles.mass = 1.0 | units.MSun
     
     instance = MOSSE()
     instance.initialize_code()
     instance.commit_parameters()
     self.assertEquals(len(instance.particles), 0) # before creation
     instance.particles.add_particles(particles[:-1])
     instance.commit_particles()
     instance.evolve_model(1.0 | units.Myr)
     self.assertEquals(len(instance.particles), 2) # before remove
     self.assertAlmostEqual(instance.particles.age, 1.0 | units.Myr)
     
     instance.particles.remove_particle(particles[0])
     self.assertEquals(len(instance.particles), 1)
     instance.evolve_model(2.0 | units.Myr)
     self.assertAlmostEqual(instance.particles[0].age, 2.0 | units.Myr)
     
     instance.particles.add_particles(particles[::2])
     self.assertEquals(len(instance.particles), 3) # it's back...
     self.assertAlmostEqual(instance.particles[0].age, 2.0 | units.Myr)
     self.assertAlmostEqual(instance.particles[1].age, 0.0 | units.Myr)
     self.assertAlmostEqual(instance.particles[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.particles.age, [3.0, 1.0, 1.0] | units.Myr)
     instance.evolve_model(4.0 | units.Myr)
     self.assertAlmostEqual(instance.particles.age, [4.0, 2.0, 2.0] | units.Myr)
     instance.stop()
Ejemplo n.º 14
0
 def test12(self):
     print("Testing adding and removing particles from stellar evolution code...")
     
     particles = Particles(3)
     particles.mass = 1.0 | units.MSun
     
     instance = MOSSE()
     instance.initialize_code()
     instance.commit_parameters()
     self.assertEqual(len(instance.particles), 0) # before creation
     instance.particles.add_particles(particles[:-1])
     instance.commit_particles()
     instance.evolve_model(1.0 | units.Myr)
     self.assertEqual(len(instance.particles), 2) # before remove
     self.assertAlmostEqual(instance.particles.age, 1.0 | units.Myr)
     
     instance.particles.remove_particle(particles[0])
     self.assertEqual(len(instance.particles), 1)
     instance.evolve_model(2.0 | units.Myr)
     self.assertAlmostEqual(instance.particles[0].age, 2.0 | units.Myr)
     
     instance.particles.add_particles(particles[::2])
     self.assertEqual(len(instance.particles), 3) # it's back...
     self.assertAlmostEqual(instance.particles[0].age, 2.0 | units.Myr)
     self.assertAlmostEqual(instance.particles[1].age, 0.0 | units.Myr)
     self.assertAlmostEqual(instance.particles[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.particles.age, [3.0, 1.0, 1.0] | units.Myr)
     instance.evolve_model(4.0 | units.Myr)
     self.assertAlmostEqual(instance.particles.age, [4.0, 2.0, 2.0] | units.Myr)
     instance.stop()
Ejemplo n.º 15
0
 def test2(self):
     mosse = MOSSE()
     mosse.commit_parameters() 
     stars = Particles(1)
     
     star = stars[0]
     star.mass = 5 | units.MSun
     star.radius = 0.0 | units.RSun
     
     mosse.particles.add_particles(stars)
     mosse.evolve_model(120.1 | units.Myr)
             
     self.assertAlmostEqual(mosse.particles[0].mass.value_in(units.MSun), 4.925, 3)
     self.assertAlmostEqual(mosse.particles[0].temperature.value_in(units.K), 4271., 0)
      
     mosse.stop()
Ejemplo n.º 16
0
 def test2(self):
     mosse = MOSSE()
     mosse.commit_parameters() 
     stars = Particles(1)
     
     star = stars[0]
     star.mass = 5 | units.MSun
     star.radius = 0.0 | units.RSun
     
     mosse.particles.add_particles(stars)
     mosse.evolve_model(120.1 | units.Myr)
             
     self.assertAlmostEqual(mosse.particles[0].mass.value_in(units.MSun), 4.925, 3)
     self.assertAlmostEqual(mosse.particles[0].temperature.value_in(units.K), 4271., 0)
      
     mosse.stop()
Ejemplo n.º 17
0
 def test7(self):
     print "Test: evolve particles one at a time."
     print "Used to be problematic, since initial_mass of idle particle is set to zero."
     stars = Particles(2)
     stars.mass = 1.0 | units.MSun
     for star in stars:
         print star
         stellar_evolution = MOSSE()
         stellar_evolution.commit_parameters()
         stellar_evolution.particles.add_particles(star.as_set())
         stellar_evolution.commit_particles()
         from_stellar_evolution_to_model = stellar_evolution.particles.new_channel_to(star.as_set())
         stellar_evolution.evolve_model()
         from_stellar_evolution_to_model.copy()
         stellar_evolution.stop()
     self.assertEquals(stars[0].initial_mass, stars[1].initial_mass)
     self.assertEquals(stars[0].luminosity, stars[1].luminosity)
     self.assertEquals(stars[0].age, stars[1].age)
     print "Solved: SSE_muse_interface.f sets initial_mass to mass when necessary."
Ejemplo n.º 18
0
 def test7(self):
     print("Test: evolve particles one at a time.")
     print("Used to be problematic, since initial_mass of idle particle is set to zero.")
     stars = Particles(2)
     stars.mass = 1.0 | units.MSun
     for star in stars:
         print(star)
         stellar_evolution = MOSSE()
         stellar_evolution.commit_parameters()
         stellar_evolution.particles.add_particles(star.as_set())
         stellar_evolution.commit_particles()
         from_stellar_evolution_to_model = stellar_evolution.particles.new_channel_to(star.as_set())
         stellar_evolution.evolve_model()
         from_stellar_evolution_to_model.copy()
         stellar_evolution.stop()
     self.assertEqual(stars[0].initial_mass, stars[1].initial_mass)
     self.assertEqual(stars[0].luminosity, stars[1].luminosity)
     self.assertEqual(stars[0].age, stars[1].age)
     print("Solved: SSE_muse_interface.f sets initial_mass to mass when necessary.")
Ejemplo n.º 19
0
 def test11(self):
     print "Test evolve_model optional arguments: end_time and keep_synchronous"
     stars = Particles(3)
     stars.mass = [1.0, 2.0, 3.0] | units.MSun
     instance = MOSSE()
     instance.commit_parameters()
     instance.particles.add_particles(stars)
     
     self.assertEqual(instance.particles.age, [0.0, 0.0, 0.0] | units.yr)
     self.assertAlmostEqual(instance.particles.time_step, [550.1565, 58.2081, 18.877] | units.Myr, 2)
     self.assertAlmostEqual(instance.particles.radius, [0.8882494502, 1.610210385, 1.979134445] | units.RSun)
     
     print "evolve_model without arguments: use shared timestep = min(particles.time_step)"
     instance.evolve_model()
     self.assertAlmostEqual(instance.particles.age, [18.877, 18.877, 18.877] | units.Myr, 2)
     self.assertAlmostEqual(instance.particles.time_step, [550.157, 58.208, 18.877] | units.Myr, 2)
     self.assertAlmostEqual(instance.model_time, 18.877 | units.Myr, 2)
     
     print "evolve_model with end_time: take timesteps, until end_time is reached exactly"
     instance.evolve_model(100 | units.Myr)
     self.assertAlmostEqual(instance.particles.age, [100.0, 100.0, 100.0] | units.Myr, 2)
     self.assertAlmostEqual(instance.particles.time_step, [550.157, 58.208, 18.877] | units.Myr, 2)
     self.assertAlmostEqual(instance.model_time, 100.0 | units.Myr, 2)
     
     print "evolve_model with keep_synchronous: use non-shared timestep, particle ages will typically diverge"
     instance.evolve_model(keep_synchronous = False)
     self.assertAlmostEqual(instance.particles.age, (100 | units.Myr) + ([550.157, 58.208, 18.877] | units.Myr), 2)
     self.assertAlmostEqual(instance.particles.time_step, [550.157, 58.208, 18.877] | units.Myr, 2)
     self.assertAlmostEqual(instance.model_time, 100.0 | units.Myr, 2) # Unchanged!
     instance.stop()
Ejemplo n.º 20
0
 def test11(self):
     print("Test evolve_model optional arguments: end_time and keep_synchronous")
     stars = Particles(3)
     stars.mass = [1.0, 2.0, 3.0] | units.MSun
     instance = MOSSE()
     instance.commit_parameters()
     instance.particles.add_particles(stars)
     
     self.assertEqual(instance.particles.age, [0.0, 0.0, 0.0] | units.yr)
     self.assertAlmostEqual(instance.particles.time_step, [550.1565, 58.2081, 18.877] | units.Myr, 2)
     self.assertAlmostEqual(instance.particles.radius, [0.8882494502, 1.610210385, 1.979134445] | units.RSun)
     
     print("evolve_model without arguments: use shared timestep = min(particles.time_step)")
     instance.evolve_model()
     self.assertAlmostEqual(instance.particles.age, [18.877, 18.877, 18.877] | units.Myr, 2)
     self.assertAlmostEqual(instance.particles.time_step, [550.157, 58.208, 18.877] | units.Myr, 2)
     self.assertAlmostEqual(instance.model_time, 18.877 | units.Myr, 2)
     
     print("evolve_model with end_time: take timesteps, until end_time is reached exactly")
     instance.evolve_model(100 | units.Myr)
     self.assertAlmostEqual(instance.particles.age, [100.0, 100.0, 100.0] | units.Myr, 2)
     self.assertAlmostEqual(instance.particles.time_step, [550.157, 58.208, 18.877] | units.Myr, 2)
     self.assertAlmostEqual(instance.model_time, 100.0 | units.Myr, 2)
     
     print("evolve_model with keep_synchronous: use non-shared timestep, particle ages will typically diverge")
     instance.evolve_model(keep_synchronous = False)
     self.assertAlmostEqual(instance.particles.age, (100 | units.Myr) + ([550.157, 58.208, 18.877] | units.Myr), 2)
     self.assertAlmostEqual(instance.particles.time_step, [550.157, 58.208, 18.877] | units.Myr, 2)
     self.assertAlmostEqual(instance.model_time, 100.0 | units.Myr, 2) # Unchanged!
     instance.stop()
Ejemplo n.º 21
0
 def test3(self):
     mosse = MOSSE()
     mosse.commit_parameters() 
     stars = Particles(1)
     
     star = stars[0]
     star.mass = 5 | units.MSun
     star.radius = 0.0 | units.RSun
     
     stars.synchronize_to(mosse.particles)
     
     channel = mosse.particles.new_channel_to(stars)
     channel.copy_attributes(mosse.particles.get_attribute_names_defined_in_store())   
     
     previous_type = mosse.particles.stellar_type
     results = []
     
     mosse.evolve_model(121.9 | units.Myr)
     
     channel.copy_attributes(mosse.particles.get_attribute_names_defined_in_store())   
     
     self.assertAlmostEqual(star.mass.value_in(units.MSun), 1.002, 3)
      
     mosse.stop()
Ejemplo n.º 22
0
 def test19(self):
     print "MOSSE core_mass and CO_core_mass (high mass star)"
     instance = MOSSE()
     star = instance.particles.add_particle(Particle(mass = 30 | units.MSun))
     instance.evolve_model(5.8 | units.Myr)
     print star.mass, star.core_mass, star.CO_core_mass, star.stellar_type
     self.assertEqual(str(star.stellar_type), "Main Sequence star")
     self.assertIsOfOrder(star.mass, 30 | units.MSun)
     self.assertEqual(star.core_mass, 0 | units.MSun)
     self.assertEqual(star.CO_core_mass, 0 | units.MSun)
     instance.evolve_model(6.0 | units.Myr)
     print star.mass, star.core_mass, star.CO_core_mass, star.stellar_type
     self.assertEqual(str(star.stellar_type), "Hertzsprung Gap")
     self.assertIsOfOrder(star.mass, 30 | units.MSun)
     self.assertIsOfOrder(star.core_mass, 10 | units.MSun)
     self.assertEqual(star.CO_core_mass, 0 | units.MSun)
     instance.evolve_model(6.5 | units.Myr)
     print star.mass, star.core_mass, star.CO_core_mass, star.stellar_type
     self.assertEqual(str(star.stellar_type), "Core Helium Burning")
     self.assertIsOfOrder(star.mass, 10 | units.MSun) 
     self.assertIsOfOrder(star.core_mass, 10 | units.MSun)
     self.assertEqual(star.CO_core_mass, 0 | units.MSun)
     instance.evolve_model(6.65 | units.Myr)
     print star.mass, star.core_mass, star.CO_core_mass, star.stellar_type
     self.assertEqual(str(star.stellar_type), "Main Sequence Naked Helium star")
     self.assertIsOfOrder(star.mass, 10 | units.MSun)
     self.assertEqual(star.core_mass, star.mass)
     self.assertEqual(star.CO_core_mass, 0 | units.MSun)
     instance.evolve_model(6.70 | units.Myr)
     print star.mass, star.core_mass, star.CO_core_mass, star.stellar_type
     self.assertEqual(str(star.stellar_type), "Hertzsprung Gap Naked Helium star")
     self.assertIsOfOrder(star.mass, 10 | units.MSun)
     self.assertEqual(star.core_mass, star.mass)
     self.assertAlmostEqual(star.CO_core_mass, 6.70 | units.MSun, 2)
     instance.evolve_model(7.0 | units.Myr)
     print star.mass, star.core_mass, star.CO_core_mass, star.stellar_type
     self.assertEqual(str(star.stellar_type), "Black Hole")
     self.assertIsOfOrder(star.mass, 10 | units.MSun)
     self.assertEqual(star.core_mass, star.mass)
     self.assertEqual(star.CO_core_mass, star.mass)
     instance.stop()
Ejemplo n.º 23
0
 def test19(self):
     print("MOSSE core_mass and CO_core_mass (high mass star)")
     instance = MOSSE()
     star = instance.particles.add_particle(Particle(mass = 30 | units.MSun))
     instance.evolve_model(5.8 | units.Myr)
     print(star.mass, star.core_mass, star.CO_core_mass, star.stellar_type)
     self.assertEqual(str(star.stellar_type), "Main Sequence star")
     self.assertIsOfOrder(star.mass, 30 | units.MSun)
     self.assertEqual(star.core_mass, 0 | units.MSun)
     self.assertEqual(star.CO_core_mass, 0 | units.MSun)
     instance.evolve_model(6.0 | units.Myr)
     print(star.mass, star.core_mass, star.CO_core_mass, star.stellar_type)
     self.assertEqual(str(star.stellar_type), "Hertzsprung Gap")
     self.assertIsOfOrder(star.mass, 30 | units.MSun)
     self.assertIsOfOrder(star.core_mass, 10 | units.MSun)
     self.assertEqual(star.CO_core_mass, 0 | units.MSun)
     instance.evolve_model(6.5 | units.Myr)
     print(star.mass, star.core_mass, star.CO_core_mass, star.stellar_type)
     self.assertEqual(str(star.stellar_type), "Core Helium Burning")
     self.assertIsOfOrder(star.mass, 10 | units.MSun) 
     self.assertIsOfOrder(star.core_mass, 10 | units.MSun)
     self.assertEqual(star.CO_core_mass, 0 | units.MSun)
     instance.evolve_model(6.65 | units.Myr)
     print(star.mass, star.core_mass, star.CO_core_mass, star.stellar_type)
     self.assertEqual(str(star.stellar_type), "Main Sequence Naked Helium star")
     self.assertIsOfOrder(star.mass, 10 | units.MSun)
     self.assertEqual(star.core_mass, star.mass)
     self.assertEqual(star.CO_core_mass, 0 | units.MSun)
     instance.evolve_model(6.70 | units.Myr)
     print(star.mass, star.core_mass, star.CO_core_mass, star.stellar_type)
     self.assertEqual(str(star.stellar_type), "Hertzsprung Gap Naked Helium star")
     self.assertIsOfOrder(star.mass, 10 | units.MSun)
     self.assertEqual(star.core_mass, star.mass)
     self.assertAlmostEqual(star.CO_core_mass, 6.70 | units.MSun, 2)
     instance.evolve_model(7.0 | units.Myr)
     print(star.mass, star.core_mass, star.CO_core_mass, star.stellar_type)
     self.assertEqual(str(star.stellar_type), "Black Hole")
     self.assertIsOfOrder(star.mass, 10 | units.MSun)
     self.assertEqual(star.core_mass, star.mass)
     self.assertEqual(star.CO_core_mass, star.mass)
     instance.stop()
Ejemplo n.º 24
0
    def test1(self):
        mosse = MOSSE()
        mosse.commit_parameters() 
        stars = Particles(1)
        star = stars[0]
        star.mass = 5 | units.MSun
        star.radius = 0.0 | units.RSun
        
        mosse.particles.add_particles(stars)
        from_sse_to_model = mosse.particles.new_channel_to(stars)
        from_sse_to_model.copy()
        
        previous_type = star.stellar_type
        results = []
        t0 = 0 | units.Myr
        current_time = t0
        
        while current_time < (125 | units.Myr):
            mosse.update_time_steps()
            
            current_time = current_time + mosse.particles[0].time_step
            
            mosse.evolve_model(current_time)

            from_sse_to_model.copy()
            
            if not star.stellar_type == previous_type:
                results.append((star.age, star.mass, star.stellar_type))
                previous_type = star.stellar_type
                
        self.assertEqual(len(results), 6)
        
        times = ( 
            104.19 | units.Myr, 
            104.62 | units.Myr, 
            104.87 | units.Myr, 
            120.39 | units.Myr,
            121.17 | units.Myr,
            121.88 | units.Myr
        )
        for result, expected in zip(results, times):
            self.assertAlmostEqual(result[0].value_in(units.Myr), expected.value_in(units.Myr), 1)
            
        masses = ( 
            4.991 | units.MSun, 
            4.991 | units.MSun, 
            4.989 | units.MSun, 
            4.923 | units.MSun,
            4.886 | units.MSun,
            1.003 | units.MSun
        )
        for result, expected in zip(results, masses):
            self.assertAlmostEqual(result[1].value_in(units.MSun), expected.value_in(units.MSun), 3)
         
        types = (
            "Hertzsprung Gap",
            "First Giant Branch",
            "Core Helium Burning",
            "First Asymptotic Giant Branch",
            "Second Asymptotic Giant Branch",
            "Carbon/Oxygen White Dwarf",
        )
        
        for result, expected in zip(results, types):
            self.assertEquals(str(result[2]), expected)
        
        mosse.stop()