def test1(self): print "Test initialization..." instance = BSEInterface() metallicity = 0.02 neta = 0.5 bwind = 0.0 hewind = 0.5 alpha1 = 1.0 CElambda = 0.5 ceflag = 0 tflag = 1 ifflag = 0 wdflag = 1 bhflag = 0 nsflag = 1 mxns = 3.0 idum = 29769 pts1 = 0.05 pts2 = 0.01 pts3 = 0.02 sigma = 190.0 beta = 1.0 / 8.0 xi = 1.0 acc2 = 3.0 / 2.0 epsnov = 0.001 eddfac = 1.0 gamma = -1.0 status = instance.initialize(metallicity, neta, bwind, hewind, alpha1, CElambda, ceflag, tflag, ifflag, wdflag, bhflag, nsflag, mxns, idum, pts1, pts2, pts3, sigma, beta, xi, acc2, epsnov, eddfac, gamma) self.assertEqual(status, 0) instance.stop()
def test1(self): print "Test initialization..." instance = BSEInterface() metallicity = 0.02 neta = 0.5 bwind = 0.0 hewind = 0.5 alpha1 = 1.0 CElambda = 0.5 ceflag = 0 tflag = 1 ifflag = 0 wdflag = 1 bhflag = 0 nsflag = 1 mxns = 3.0 idum = 29769 pts1 = 0.05 pts2 = 0.01 pts3 = 0.02 sigma = 190.0 beta = 1.0 / 8.0 xi = 1.0 acc2 = 3.0 / 2.0 epsnov = 0.001 eddfac = 1.0 gamma = -1.0 status = instance.initialize( metallicity, neta, bwind, hewind, alpha1, CElambda, ceflag, tflag, ifflag, wdflag, bhflag, nsflag, mxns, idum, pts1, pts2, pts3, sigma, beta, xi, acc2, epsnov, eddfac, gamma, ) self.assertEqual(status, 0) instance.stop()
def test3(self): print "Test whether the interface can handle arrays..." instance = BSEInterface() status = instance.initialize(0.02, 0.5, 0.0, 0.5, 1.0, 0.5, 0, 1, 0, 1, 0, 1, 3.0, 29769, 0.05, 0.01, 0.02, 190.0, 1.0 / 8.0, 1.0, 3.0 / 2.0, 0.001, 1.0, -1.0) masses1 = [10.0, 5.0, 4.0] masses2 = [1.0, 1.0, 1.0] types1 = types2 = [1, 1, 1] orbital_periods = [100.0, 200.0, 300.0] eccentricities = [0.5, 0.6, 0.7] radii1 = luminosity1 = core_mass1 = core_radius1 = envelope_mass1 =\ envelope_radius1 = spin1 = epoch1 = t_ms1 = [0.0,0.0,0.0] radii2 = luminosity2 = core_mass2 = core_radius2 = envelope_mass2 =\ envelope_radius2 = spin2 = epoch2 = t_ms2 = [0.0,0.0,0.0] init_mass1 = masses1 init_mass2 = masses2 bse_age = [0.0, 0.0, 0.0] end_time = [10.0, 10.0, 10.0] result = instance.evolve_binary( types1, types2, init_mass1, init_mass2, masses1, masses2, radii1, radii2, luminosity1, luminosity2, core_mass1, core_mass2, core_radius1, core_radius2, envelope_mass1, envelope_mass2, envelope_radius1, envelope_radius2, spin1, spin2, epoch1, epoch2, t_ms1, t_ms2, bse_age, orbital_periods, eccentricities, end_time) self.assertAlmostEqual(result['mass1'][0], 9.977, 2) self.assertAlmostEqual(result['mass1'][1], 5.0, 2) self.assertAlmostEqual(result['mass1'][2], 4.0, 2) instance.stop()
def test4(self): print "Test large number of particles..." number_of_particles = 2000 instance = BSEInterface() status = instance.initialize(0.02, 0.5, 0.0, 0.5, 1.0, 0.5, 0, 1, 0, 1, 0, 1, 3.0, 29769, 0.05, 0.01, 0.02, 190.0, 1.0 / 8.0, 1.0, 3.0 / 2.0, 0.001, 1.0, -1.0) masses1 = [ 1.0 + ((x / 1.0 * number_of_particles) * 10.0) for x in range(1, number_of_particles + 1) ] masses2 = [ 2.0 + ((x / 1.0 * number_of_particles) * 5.0) for x in range(1, number_of_particles + 1) ] orbital_periods = [ 100.0 + ((x / 1.0 * number_of_particles) * 900.0) for x in range(1, number_of_particles + 1) ] eccentricities = [ 0.5 + ((x / 1.0 * number_of_particles) * 0.4) for x in range(1, number_of_particles + 1) ] types1 = types2 = [1 for x in range(1, number_of_particles + 1)] radii1 = luminosity1 = core_mass1 = core_radius1 = envelope_mass1 =\ envelope_radius1 = spin1 = epoch1 = t_ms1 =\ radii2 = luminosity2 = core_mass2 = core_radius2 = envelope_mass2 =\ envelope_radius2 = spin2 = epoch2 = t_ms2 =\ bse_age = [0.0 for x in range(1,number_of_particles+1)] end_time = [1.0 for x in range(1, number_of_particles + 1)] init_mass1 = masses1 init_mass2 = masses2 result = instance.evolve_binary( types1, types2, init_mass1, init_mass2, masses1, masses2, radii1, radii2, luminosity1, luminosity2, core_mass1, core_mass2, core_radius1, core_radius2, envelope_mass1, envelope_mass2, envelope_radius1, envelope_radius2, spin1, spin2, epoch1, epoch2, t_ms1, t_ms2, bse_age, orbital_periods, eccentricities, end_time) self.assertEquals(len(result['mass1']), number_of_particles) instance.stop()
def test2(self): print "Test basic operations (legacy functions evolve & get_time_step)..." instance = BSEInterface() status = instance.initialize(0.02, 0.5, 0.0, 0.5, 1.0, 0.5, 0, 1, 0, 1, 0, 1, 3.0, 29769, 0.05, 0.01, 0.02, 190.0, 1.0 / 8.0, 1.0, 3.0 / 2.0, 0.001, 1.0, -1.0) new_state = self.state() new_state.mass1 = 3.0 new_state.mass2 = 1.0 new_state.initial_mass1 = 3.0 new_state.initial_mass2 = 1.0 new_state.type1 = 1.0 new_state.type2 = 1.0 new_state.end_time = 1e-06 new_state.orbital_period = 200.0 new_state.eccentricity = 0.5 result = instance.evolve_binary( new_state.type1, new_state.type2, new_state.initial_mass1, new_state.initial_mass2, new_state.mass1, new_state.mass2, new_state.radius1, new_state.radius2, new_state.luminosity1, new_state.luminosity2, new_state.core_mass1, new_state.core_mass2, new_state.core_radius1, new_state.core_radius2, new_state.envelope_mass1, new_state.envelope_mass2, new_state.envelope_radius1, new_state.envelope_radius2, new_state.spin1, new_state.spin2, new_state.epoch1, new_state.epoch2, new_state.t_ms1, new_state.t_ms2, new_state.bse_age, new_state.orbital_period, new_state.eccentricity, new_state.end_time) updated_state = self.state() (updated_state.type1, updated_state.type2, updated_state.initial_mass1, updated_state.initial_mass2, updated_state.mass1, updated_state.mass2, updated_state.radius1, updated_state.radius2, updated_state.luminosity1, updated_state.luminosity2, updated_state.core_mass1, updated_state.core_mass2, updated_state.core_radius1, updated_state.core_radius2, updated_state.envelope_mass1, updated_state.envelope_mass2, updated_state.envelope_radius1, updated_state.envelope_radius2, updated_state.spin1, updated_state.spin2, updated_state.epoch1, updated_state.epoch2, updated_state.t_ms1, updated_state.t_ms2, updated_state.bse_age, updated_state.orbital_period, updated_state.eccentricity, updated_state.end_time) = result expected = { 'radius2': '0x1.c6c8a1c793bcep-1', 'luminosity2': '0x1.653b1b2d0333bp-1', 'core_mass2': '0x0.0p+0', 'bse_age': '0x1.0c6f7a0b5ed8dp-20', 'end_time': '0x1.0c6f7a0b5ed8dp-20', 'envelope_mass2': '0x1.0d6fc100ab510p-5', 'mass2': '0x1.0000000000000p+0', 'initial_mass2': '0x1.0000000000000p+0', 'envelope_radius2': '0x1.db27631ba0e5ap-3', 'core_radius2': '0x0.0p+0', 'epoch2': '0x0.0p+0', 't_ms2': '0x1.57d90abe54643p+13', 'spin2': '0x1.07413b0522aebp+10', } for x in expected: #print "'%s' : '%s'," % (x, getattr(updated_state, x).hex()) self.assertAlmostRelativeEqual(float.fromhex(expected[x]), getattr(updated_state, x)) self.assertEquals(updated_state.end_time, 1e-06) dt = instance.get_time_step(updated_state.type1, updated_state.type2, updated_state.initial_mass1, updated_state.initial_mass2, updated_state.mass1, updated_state.mass2, updated_state.t_ms1, updated_state.t_ms2, updated_state.epoch1, updated_state.epoch2, updated_state.bse_age) self.assertAlmostEqual(dt, 18.8768, 3) instance.stop()
def test2(self): print "Test basic operations (legacy functions evolve & get_time_step)..." instance = BSEInterface() status = instance.initialize( 0.02, 0.5, 0.0, 0.5, 1.0, 0.5, 0, 1, 0, 1, 0, 1, 3.0, 29769, 0.05, 0.01, 0.02, 190.0, 1.0 / 8.0, 1.0, 3.0 / 2.0, 0.001, 1.0, -1.0, ) new_state = self.state() new_state.mass1 = 3.0 new_state.mass2 = 1.0 new_state.initial_mass1 = 3.0 new_state.initial_mass2 = 1.0 new_state.type1 = 1.0 new_state.type2 = 1.0 new_state.end_time = 1e-06 new_state.orbital_period = 200.0 new_state.eccentricity = 0.5 result = instance.evolve_binary( new_state.type1, new_state.type2, new_state.initial_mass1, new_state.initial_mass2, new_state.mass1, new_state.mass2, new_state.radius1, new_state.radius2, new_state.luminosity1, new_state.luminosity2, new_state.core_mass1, new_state.core_mass2, new_state.core_radius1, new_state.core_radius2, new_state.envelope_mass1, new_state.envelope_mass2, new_state.envelope_radius1, new_state.envelope_radius2, new_state.spin1, new_state.spin2, new_state.epoch1, new_state.epoch2, new_state.t_ms1, new_state.t_ms2, new_state.bse_age, new_state.orbital_period, new_state.eccentricity, new_state.end_time, ) updated_state = self.state() ( updated_state.type1, updated_state.type2, updated_state.initial_mass1, updated_state.initial_mass2, updated_state.mass1, updated_state.mass2, updated_state.radius1, updated_state.radius2, updated_state.luminosity1, updated_state.luminosity2, updated_state.core_mass1, updated_state.core_mass2, updated_state.core_radius1, updated_state.core_radius2, updated_state.envelope_mass1, updated_state.envelope_mass2, updated_state.envelope_radius1, updated_state.envelope_radius2, updated_state.spin1, updated_state.spin2, updated_state.epoch1, updated_state.epoch2, updated_state.t_ms1, updated_state.t_ms2, updated_state.bse_age, updated_state.orbital_period, updated_state.eccentricity, updated_state.end_time, ) = result expected = { "radius2": "0x1.c6c8a1c793bcep-1", "luminosity2": "0x1.653b1b2d0333bp-1", "core_mass2": "0x0.0p+0", "bse_age": "0x1.0c6f7a0b5ed8dp-20", "end_time": "0x1.0c6f7a0b5ed8dp-20", "envelope_mass2": "0x1.0d6fc100ab510p-5", "mass2": "0x1.0000000000000p+0", "initial_mass2": "0x1.0000000000000p+0", "envelope_radius2": "0x1.db27631ba0e5ap-3", "core_radius2": "0x0.0p+0", "epoch2": "0x0.0p+0", "t_ms2": "0x1.57d90abe54643p+13", "spin2": "0x1.07413b0522aebp+10", } for x in expected: # print "'%s' : '%s'," % (x, getattr(updated_state, x).hex()) self.assertAlmostRelativeEqual(float.fromhex(expected[x]), getattr(updated_state, x)) self.assertEquals(updated_state.end_time, 1e-06) dt = instance.get_time_step( updated_state.type1, updated_state.type2, updated_state.initial_mass1, updated_state.initial_mass2, updated_state.mass1, updated_state.mass2, updated_state.t_ms1, updated_state.t_ms2, updated_state.epoch1, updated_state.epoch2, updated_state.bse_age, ) self.assertAlmostEqual(dt, 18.8768, 3) instance.stop()
def test4(self): print "Test large number of particles..." number_of_particles = 2000 instance = BSEInterface() status = instance.initialize( 0.02, 0.5, 0.0, 0.5, 1.0, 0.5, 0, 1, 0, 1, 0, 1, 3.0, 29769, 0.05, 0.01, 0.02, 190.0, 1.0 / 8.0, 1.0, 3.0 / 2.0, 0.001, 1.0, -1.0, ) masses1 = [1.0 + ((x / 1.0 * number_of_particles) * 10.0) for x in range(1, number_of_particles + 1)] masses2 = [2.0 + ((x / 1.0 * number_of_particles) * 5.0) for x in range(1, number_of_particles + 1)] orbital_periods = [100.0 + ((x / 1.0 * number_of_particles) * 900.0) for x in range(1, number_of_particles + 1)] eccentricities = [0.5 + ((x / 1.0 * number_of_particles) * 0.4) for x in range(1, number_of_particles + 1)] types1 = types2 = [1 for x in range(1, number_of_particles + 1)] radii1 = ( luminosity1 ) = ( core_mass1 ) = ( core_radius1 ) = ( envelope_mass1 ) = ( envelope_radius1 ) = ( spin1 ) = ( epoch1 ) = ( t_ms1 ) = ( radii2 ) = ( luminosity2 ) = core_mass2 = core_radius2 = envelope_mass2 = envelope_radius2 = spin2 = epoch2 = t_ms2 = bse_age = [ 0.0 for x in range(1, number_of_particles + 1) ] end_time = [1.0 for x in range(1, number_of_particles + 1)] init_mass1 = masses1 init_mass2 = masses2 result = instance.evolve_binary( types1, types2, init_mass1, init_mass2, masses1, masses2, radii1, radii2, luminosity1, luminosity2, core_mass1, core_mass2, core_radius1, core_radius2, envelope_mass1, envelope_mass2, envelope_radius1, envelope_radius2, spin1, spin2, epoch1, epoch2, t_ms1, t_ms2, bse_age, orbital_periods, eccentricities, end_time, ) self.assertEquals(len(result["mass1"]), number_of_particles) instance.stop()
def test3(self): print "Test whether the interface can handle arrays..." instance = BSEInterface() status = instance.initialize( 0.02, 0.5, 0.0, 0.5, 1.0, 0.5, 0, 1, 0, 1, 0, 1, 3.0, 29769, 0.05, 0.01, 0.02, 190.0, 1.0 / 8.0, 1.0, 3.0 / 2.0, 0.001, 1.0, -1.0, ) masses1 = [10.0, 5.0, 4.0] masses2 = [1.0, 1.0, 1.0] types1 = types2 = [1, 1, 1] orbital_periods = [100.0, 200.0, 300.0] eccentricities = [0.5, 0.6, 0.7] radii1 = ( luminosity1 ) = core_mass1 = core_radius1 = envelope_mass1 = envelope_radius1 = spin1 = epoch1 = t_ms1 = [0.0, 0.0, 0.0] radii2 = ( luminosity2 ) = core_mass2 = core_radius2 = envelope_mass2 = envelope_radius2 = spin2 = epoch2 = t_ms2 = [0.0, 0.0, 0.0] init_mass1 = masses1 init_mass2 = masses2 bse_age = [0.0, 0.0, 0.0] end_time = [10.0, 10.0, 10.0] result = instance.evolve_binary( types1, types2, init_mass1, init_mass2, masses1, masses2, radii1, radii2, luminosity1, luminosity2, core_mass1, core_mass2, core_radius1, core_radius2, envelope_mass1, envelope_mass2, envelope_radius1, envelope_radius2, spin1, spin2, epoch1, epoch2, t_ms1, t_ms2, bse_age, orbital_periods, eccentricities, end_time, ) self.assertAlmostEqual(result["mass1"][0], 9.977, 2) self.assertAlmostEqual(result["mass1"][1], 5.0, 2) self.assertAlmostEqual(result["mass1"][2], 4.0, 2) instance.stop()