Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/amuse/community/seba/download.py
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ def new_option_parser():
result = OptionParser()
result.add_option(
"--seba-version",
default='b809e489c56ca97a4142483a65f81e67a7b1c892',
default='74a4a649db0b52a9de51d54ddd7350ba98438fa4',
dest="seba_version",
help="SeBa commit hash to download",
type="string"
Expand Down
24 changes: 23 additions & 1 deletion src/amuse/community/seba/interface.cc
Original file line number Diff line number Diff line change
Expand Up @@ -624,6 +624,22 @@ int get_gyration_radius_sq(int index_of_the_star, double * gyration_radius_sq){
return error_code;
}

int get_rotation_period(int index_of_the_star, double * rotation_period){
int error_code = 0;
node * seba_node = get_seba_node_from_index(index_of_the_star, &error_code);
if(error_code < 0) {return error_code;}
*rotation_period = seba_node->get_starbase()->get_rotation_period();
return error_code;
}

int get_fallback(int index_of_the_star, double * rotation_period){
int error_code = 0;
node * seba_node = get_seba_node_from_index(index_of_the_star, &error_code);
if(error_code < 0) {return error_code;}
*rotation_period = seba_node->get_starbase()->get_fallback();
return error_code;
}

int get_relative_age(int index_of_the_star, double * relative_age){
int error_code = 0;
node * seba_node = get_seba_node_from_index(index_of_the_star, &error_code);
Expand Down Expand Up @@ -916,5 +932,11 @@ int set_semi_major_axis(int index_of_the_star, double value){
}



int set_rotation_period(int index_of_the_star, double value){
int error_code = 0;
node * seba_node = get_seba_node_from_index(index_of_the_star, &error_code);
if(error_code < 0) {return error_code;}
seba_node->get_starbase()->set_rotation_period(value);
return error_code;
}

86 changes: 86 additions & 0 deletions src/amuse/community/seba/interface.py
Original file line number Diff line number Diff line change
Expand Up @@ -373,6 +373,8 @@ def set_eccentricity():
"""
return function



@legacy_function
def get_children_of_binary():
"""
Expand Down Expand Up @@ -482,6 +484,68 @@ def get_gyration_radius_sq():
"""
return function

@legacy_function
def get_rotation_period():
"""
Retrieve the current value of the rotation period (sec).
"""
function = LegacyFunctionSpecification()
function.can_handle_array = True
function.addParameter('index_of_the_star', dtype='int32', direction=function.IN
, description="The index of the star to set the value of")
function.addParameter('rotation_period', dtype='float64', direction=function.OUT,
description = "The current value of the rotation period")
function.result_type = 'int32'
function.result_doc = """
0 - OK
Current value of the rotation period was retrieved
-1 - ERROR
The code does not have support for retrieving the rotation period
"""
return function

@legacy_function
def set_rotation_period():
"""
Update the current rotation period of a star.
"""
function = LegacyFunctionSpecification()
function.can_handle_array = True
function.addParameter('index_of_the_star', dtype='int32', direction=function.IN
, description="The index of the star to get the value of")
function.addParameter('value', dtype='float64', direction=function.IN
, description="The new rotation period.")
function.result_type = 'int32'
function.result_doc = """
0 - OK
The value has been set.
-1 - ERROR
A binary with the given index was not found.
"""
return function

@legacy_function
def get_fallback():
"""
Retrieve the value of fallback fraction during the SN.
"""
function = LegacyFunctionSpecification()
function.can_handle_array = True
function.addParameter('index_of_the_star', dtype='int32', direction=function.IN
, description="The index of the star to set the value of")
function.addParameter('rotation_period', dtype='float64', direction=function.OUT,
description = "The current value of the rotation period")
function.result_type = 'int32'
function.result_doc = """
0 - OK
Value of the fallback fraction was retrieved
-1 - ERROR
The code does not have support for retrieving the fallback fraction
"""
return function



@legacy_function
def get_relative_age():
"""
Expand Down Expand Up @@ -842,6 +906,21 @@ def define_methods(self, handler):
(handler.INDEX,),
(units.none, handler.ERROR_CODE,)
)
handler.add_method(
"get_rotation_period",
(handler.INDEX,),
(units.s, handler.ERROR_CODE,)
)
handler.add_method(
"set_rotation_period",
(handler.INDEX, units.s,),
(handler.ERROR_CODE,)
)
handler.add_method(
"get_fallback",
(handler.INDEX,),
(units.none, handler.ERROR_CODE,)
)
handler.add_method(
"get_relative_age",
(handler.INDEX,),
Expand Down Expand Up @@ -936,6 +1015,10 @@ def define_particle_sets(self, handler):
handler.add_getter('particles', 'get_convective_envelope_mass', names = ('convective_envelope_mass',))
handler.add_getter('particles', 'get_convective_envelope_radius', names = ('convective_envelope_radius',))
handler.add_getter('particles', 'get_gyration_radius_sq', names = ('gyration_radius_sq',))
handler.add_getter('particles', 'get_rotation_period', names = ('rotation_period',))
handler.add_setter('particles', 'set_rotation_period', names = ('rotation_period',))
handler.add_getter('particles', 'get_fallback', names = ('fallback',))

handler.add_getter('particles', 'get_relative_age', names = ('relative_age',))
handler.add_getter('particles', 'get_relative_mass', names = ('relative_mass',))
handler.add_getter('particles', 'get_wind_mass_loss_rate', names = ('wind_mass_loss_rate',))
Expand All @@ -961,6 +1044,9 @@ def define_particle_sets(self, handler):
handler.add_setter('binaries', 'set_semi_major_axis', names = ('semi_major_axis',))
handler.add_setter('binaries', 'set_eccentricity', names = ('eccentricity',))
handler.add_method('binaries', 'merge_the_binary')



def define_state(self, handler):
se.StellarEvolution.define_state(self, handler)

Expand Down
66 changes: 33 additions & 33 deletions src/amuse/test/suite/codes_tests/test_seba.py
Original file line number Diff line number Diff line change
Expand Up @@ -528,8 +528,8 @@ def test_add_stars_at_different_times(self):

self.assertAlmostRelativeEquals(instance.particles.age, [30,30] |units.Myr)
self.assertAlmostRelativeEquals(instance.model_time, 30 | units.Myr)
self.assertAlmostRelativeEquals(instance.particles[0].mass, 1.2476 | units.MSun, 4)
self.assertAlmostRelativeEquals(instance.particles[1].mass, 8.8682 | units.MSun, 4)
self.assertAlmostRelativeEquals(instance.particles[0].mass, 1.2507 | units.MSun, 4)
self.assertAlmostRelativeEquals(instance.particles[1].mass, 8.9340 | units.MSun, 4)
stars = Particles(2)
stars[0].mass = 10.0 | units.MSun
stars[1].mass = 9 | units.MSun
Expand All @@ -540,8 +540,8 @@ def test_add_stars_at_different_times(self):
print(instance.particles.mass)
self.assertAlmostRelativeEquals(instance.model_time, 60 | units.Myr)
self.assertAlmostRelativeEquals(instance.particles.age, [60,60,30,30] | units.Myr)
self.assertAlmostRelativeEquals(instance.particles[2].mass, 1.2476 | units.MSun, 4)
self.assertAlmostRelativeEquals(instance.particles[3].mass, 8.8682 | units.MSun, 4)
self.assertAlmostRelativeEquals(instance.particles[2].mass, 1.2507 | units.MSun, 4)
self.assertAlmostRelativeEquals(instance.particles[3].mass, 8.9340 | units.MSun, 4)

def test_supernova_stopping_condition(self):
""" Test supernova stopping condition """
Expand All @@ -558,9 +558,9 @@ def test_supernova_stopping_condition(self):
self.assertEqual(instance.stopping_conditions.supernova_detection.is_set(), True)
self.assertEqual(instance.stopping_conditions.supernova_detection.particles(0)[0].key, p.key)

self.assertAlmostRelativeEqual(p.age, 27.35866 | units.Myr, 4)
self.assertAlmostRelativeEqual(p.age, 27.2715 | units.Myr, 4)

self.assertAlmostRelativeEqual(p.mass, 1.2476 | units.MSun, 4)
self.assertAlmostRelativeEqual(p.mass, 1.2507 | units.MSun, 4)
self.assertAlmostRelativeEqual(p.natal_kick_velocity, [-54.070,12.818,42.583] | units.kms, 4)


Expand Down Expand Up @@ -588,15 +588,15 @@ def test_supernova_stopping_condition_in_a_binary(self):
self.assertEqual(instance.stopping_conditions.supernova_detection.particles(0)[0].key, instance.particles[0].key)

print(instance.parameters)
self.assertAlmostRelativeEqual(instance.particles[0].age, 27.35866 | units.Myr, 4)
self.assertAlmostRelativeEqual(instance.particles[1].age, 27.35866 | units.Myr, 4)
self.assertAlmostRelativeEqual(instance.particles[0].mass, 1.2476 | units.MSun, 4)
self.assertAlmostRelativeEqual(instance.particles[0].age, 27.2715 | units.Myr, 4)
self.assertAlmostRelativeEqual(instance.particles[1].age, 27.2715 | units.Myr, 4)
self.assertAlmostRelativeEqual(instance.particles[0].mass, 1.2507 | units.MSun, 4)
self.assertAlmostRelativeEqual(instance.particles[1].mass, 5.0 | units.MSun, 4)
# self.assertAlmostRelativeEqual(instance.particles[0].natal_kick_velocity, [0,0,0] | units.kms, 4)

self.assertAlmostRelativeEqual(instance.binaries[0].child1.age, 27.35866 | units.Myr, 4)
self.assertAlmostRelativeEqual(instance.binaries[0].child2.age, 27.35866 | units.Myr, 4)
self.assertAlmostRelativeEqual(instance.binaries[0].child1.mass, 1.2476 | units.MSun, 4)
self.assertAlmostRelativeEqual(instance.binaries[0].child1.age, 27.2715 | units.Myr, 4)
self.assertAlmostRelativeEqual(instance.binaries[0].child2.age, 27.2715 | units.Myr, 4)
self.assertAlmostRelativeEqual(instance.binaries[0].child1.mass, 1.2507 | units.MSun, 4)
self.assertAlmostRelativeEqual(instance.binaries[0].child2.mass, 5.0 | units.MSun, 4)
# self.assertAlmostRelativeEqual(instance.binaries[0].child1.natal_kick_velocity, [0,0,0] | units.kms, 4)

Expand All @@ -616,10 +616,10 @@ def test_supernova_stopping_condition_with_multiple_stars(self):
self.assertEqual(instance.stopping_conditions.supernova_detection.is_set(), True)
self.assertEqual(instance.stopping_conditions.supernova_detection.particles(0)[0].key, instance.particles[0].key)

self.assertAlmostRelativeEqual(instance.particles[0].age, 27.35866 | units.Myr, 4)
self.assertAlmostRelativeEqual(instance.particles[1].age, 27.35866 | units.Myr, 4)
self.assertAlmostRelativeEqual(instance.particles[2].age, 27.35866 | units.Myr, 4)
self.assertAlmostRelativeEqual(instance.particles[0].mass, 1.2476 | units.MSun, 4)
self.assertAlmostRelativeEqual(instance.particles[0].age, 27.2715 | units.Myr, 4)
self.assertAlmostRelativeEqual(instance.particles[1].age, 27.2715 | units.Myr, 4)
self.assertAlmostRelativeEqual(instance.particles[2].age, 27.2715 | units.Myr, 4)
self.assertAlmostRelativeEqual(instance.particles[0].mass, 1.2507 | units.MSun, 4)
self.assertAlmostRelativeEqual(instance.particles[1].mass, 5.0 | units.MSun, 4)
self.assertAlmostRelativeEqual(instance.particles[2].mass, 0.5 | units.MSun, 4)
# self.assertAlmostRelativeEqual(instance.particles[0].natal_kick_velocity, [0,0,0] | units.kms, 4)
Expand All @@ -640,23 +640,23 @@ def test_supernova_stopping_condition_with_multiple_stars_multiple_supernovae(se
self.assertEqual(instance.stopping_conditions.supernova_detection.is_set(), True)
self.assertEqual(instance.stopping_conditions.supernova_detection.particles(0)[0].key, instance.particles[1].key)

self.assertAlmostRelativeEqual(instance.particles[0].age, 23.08688 | units.Myr, 4)
self.assertAlmostRelativeEqual(instance.particles[1].age, 23.08688 | units.Myr, 4)
self.assertAlmostRelativeEqual(instance.particles[2].age, 23.08688 | units.Myr, 4)
self.assertAlmostRelativeEqual(instance.particles[0].mass, 9.92275 | units.MSun, 4)
self.assertAlmostRelativeEqual(instance.particles[1].mass, 1.28809 | units.MSun, 4)
self.assertAlmostRelativeEqual(instance.particles[0].age, 23.02102 | units.Myr, 4)
self.assertAlmostRelativeEqual(instance.particles[1].age, 23.02102 | units.Myr, 4)
self.assertAlmostRelativeEqual(instance.particles[2].age, 23.02102 | units.Myr, 4)
self.assertAlmostRelativeEqual(instance.particles[0].mass, 9.974497 | units.MSun, 4)
self.assertAlmostRelativeEqual(instance.particles[1].mass, 1.29259 | units.MSun, 4)
self.assertAlmostRelativeEqual(instance.particles[2].mass, 0.5 | units.MSun, 4)
# self.assertAlmostRelativeEqual(instance.particles[0].natal_kick_velocity, [0,0,0] | units.kms, 4)

instance.evolve_model(30 | units.Myr)
self.assertEqual(instance.stopping_conditions.supernova_detection.is_set(), True)
self.assertEqual(instance.stopping_conditions.supernova_detection.particles(0)[0].key, instance.particles[0].key)

self.assertAlmostRelativeEqual(instance.particles[0].age, 27.35866 | units.Myr, 4)
self.assertAlmostRelativeEqual(instance.particles[1].age, 27.35866 | units.Myr, 4)
self.assertAlmostRelativeEqual(instance.particles[2].age, 27.35866 | units.Myr, 4)
self.assertAlmostRelativeEqual(instance.particles[0].mass, 1.24766 | units.MSun, 4)
self.assertAlmostRelativeEqual(instance.particles[1].mass, 1.28809 | units.MSun, 4)
self.assertAlmostRelativeEqual(instance.particles[0].age, 27.2715 | units.Myr, 4)
self.assertAlmostRelativeEqual(instance.particles[1].age, 27.2715 | units.Myr, 4)
self.assertAlmostRelativeEqual(instance.particles[2].age, 27.2715 | units.Myr, 4)
self.assertAlmostRelativeEqual(instance.particles[0].mass, 1.2507 | units.MSun, 4)
self.assertAlmostRelativeEqual(instance.particles[1].mass, 1.29259 | units.MSun, 4)
self.assertAlmostRelativeEqual(instance.particles[2].mass, 0.5 | units.MSun, 4)
# self.assertAlmostRelativeEqual(instance.particles[0].natal_kick_velocity, [0,0,0] | units.kms, 4)

Expand All @@ -678,11 +678,11 @@ def test_supernova_stopping_condition_with_multiple_stars_of_equal_mass(self):
self.assertEqual(instance.stopping_conditions.supernova_detection.particles(0)[0].key, instance.particles[0].key)
self.assertEqual(instance.stopping_conditions.supernova_detection.particles(0)[1].key, instance.particles[1].key)

self.assertAlmostRelativeEqual(instance.particles[0].age, 27.35866 | units.Myr, 4)
self.assertAlmostRelativeEqual(instance.particles[1].age, 27.35866 | units.Myr, 4)
self.assertAlmostRelativeEqual(instance.particles[2].age, 27.35866 | units.Myr, 4)
self.assertAlmostRelativeEqual(instance.particles[0].mass, 1.2476 | units.MSun, 4)
self.assertAlmostRelativeEqual(instance.particles[1].mass, 1.2476 | units.MSun, 4)
self.assertAlmostRelativeEqual(instance.particles[0].age, 27.2715 | units.Myr, 4)
self.assertAlmostRelativeEqual(instance.particles[1].age, 27.2715 | units.Myr, 4)
self.assertAlmostRelativeEqual(instance.particles[2].age, 27.2715 | units.Myr, 4)
self.assertAlmostRelativeEqual(instance.particles[0].mass, 1.2507 | units.MSun, 4)
self.assertAlmostRelativeEqual(instance.particles[1].mass, 1.2507 | units.MSun, 4)
self.assertAlmostRelativeEqual(instance.particles[2].mass, 0.5 | units.MSun, 4)

# self.assertAlmostRelativeEqual(instance.particles[0].natal_kick_velocity, [0,0,0] | units.kms, 4)
Expand All @@ -694,7 +694,7 @@ def test_supernova_stopping_condition_with_multiple_stars_of_equal_mass(self):
self.assertAlmostRelativeEqual(instance.particles[0].age, 30. | units.Myr, 4)
self.assertAlmostRelativeEqual(instance.particles[1].age, 30. | units.Myr, 4)
self.assertAlmostRelativeEqual(instance.particles[2].age, 30. | units.Myr, 4)
self.assertAlmostRelativeEqual(instance.particles[0].mass, 1.2476 | units.MSun, 4)
self.assertAlmostRelativeEqual(instance.particles[1].mass, 1.2476 | units.MSun, 4)
self.assertAlmostRelativeEqual(instance.particles[0].mass, 1.2507 | units.MSun, 4)
self.assertAlmostRelativeEqual(instance.particles[1].mass, 1.2507 | units.MSun, 4)
self.assertAlmostRelativeEqual(instance.particles[2].mass, 0.5 | units.MSun, 4)