예제 #1
0
    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()
예제 #2
0
파일: test_bse.py 프로젝트: vdhelm/amuse
    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()
예제 #3
0
    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()
예제 #4
0
    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()
예제 #5
0
    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()
예제 #6
0
파일: test_bse.py 프로젝트: vdhelm/amuse
    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()
예제 #7
0
파일: test_bse.py 프로젝트: vdhelm/amuse
    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()
예제 #8
0
파일: test_bse.py 프로젝트: vdhelm/amuse
    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()