Example #1
0
    def test13(self):
        solsys = new_solar_system()

        mercury = Mercury()        
        mercury.particles.add_particles(solsys)
        idpos1 = [ (p.position - q.position) for p in mercury.particles[1:10] for q in mercury.particles[1:10] ]
        mercury.evolve_model(11.8618|units.yr)
        edpos1 = [ (p.position - q.position) for p in mercury.particles[1:10] for q in mercury.particles[1:10] ]
        mercury.stop()

        centre, orbiters = new_solar_system_for_mercury()

        mercury = MercuryWayWard()
        mercury.central_particle.add_particles(centre)
        mercury.orbiters.add_particles(orbiters)

        idpos2 = [ (p.position - q.position) for p in mercury.orbiters[0:9] for q in mercury.orbiters[0:9] ]
        mercury.evolve_model(11.8618|units.yr)
        edpos2 = [ (p.position - q.position) for p in mercury.orbiters[0:9] for q in mercury.orbiters[0:9] ]
        mercury.stop()

        for d1,d2 in zip(idpos1,idpos2):
          self.assertAlmostEqual(d1,d2, 7)
        for d1,d2 in zip(edpos1,edpos2):
          self.assertAlmostEqual(d1,d2, 7)
Example #2
0
    def test5(self):
        centre, orbiters = new_solar_system_for_mercury()

        mercury = MercuryWayWard()
        self.assertEqual(mercury.get_name_of_current_state(), 'UNINITIALIZED')
        mercury.initialize_code()
        self.assertEqual(mercury.get_name_of_current_state(), 'INITIALIZED')
        mercury.commit_parameters()
        self.assertEqual(mercury.get_name_of_current_state(), 'EDIT')
        
        mercury.central_particle.add_particles(centre)
        self.assertEqual(mercury.get_name_of_current_state(), 'EDIT')
        mercury.orbiters.add_particles(orbiters)
        self.assertEqual(mercury.get_name_of_current_state(), 'EDIT')

        mercury.commit_particles()
        self.assertEqual(mercury.get_name_of_current_state(), 'RUN')

        start_pos = mercury.orbiters[2].position
        mercury.evolve_model(365.14|units.day)
        self.assertEqual(mercury.get_name_of_current_state(), 'EVOLVED')

        self.assertAlmostEqual(mercury.orbiters[2].position, start_pos, 1)
        mercury.cleanup_code()
        self.assertEqual(mercury.get_name_of_current_state(), 'END')
        mercury.stop()
Example #3
0
    def test14(self):
        centre, orbiters = new_solar_system_for_mercury()
        oneyear = 365.14 | units.day
        halfyear = oneyear / 2.0
        mercury = MercuryWayWard()
        mercury.initialize_code()
        mercury.commit_parameters()

        mercury.central_particle.add_particles(centre)
        mercury.orbiters.add_particles(orbiters)

        start_pos = mercury.orbiters[2].position
        mercury.evolve_model(halfyear)
        central_particles = mercury.central_particle.copy()
        orbiters = mercury.orbiters.copy()
        mercury.stop()
        
        mercury = MercuryWayWard()
        mercury.initialize_code()
        mercury.parameters.begin_time = halfyear
        mercury.commit_parameters()

        mercury.central_particle.add_particles(centre)
        mercury.orbiters.add_particles(orbiters)
        mercury.evolve_model(oneyear)
        self.assertAlmostEqual(mercury.orbiters[2].position, start_pos, 1)
        mercury.stop()
Example #4
0
    def test13(self):
        solsys = new_solar_system()

        mercury = Mercury()        
        mercury.particles.add_particles(solsys)
        idpos1 = [ (p.position - q.position) for p in mercury.particles[1:10] for q in mercury.particles[1:10] ]
        mercury.evolve_model(11.8618|units.yr)
        edpos1 = [ (p.position - q.position) for p in mercury.particles[1:10] for q in mercury.particles[1:10] ]
        mercury.stop()

        centre, orbiters = new_solar_system_for_mercury()

        mercury = MercuryWayWard()
        mercury.central_particle.add_particles(centre)
        mercury.orbiters.add_particles(orbiters)

        idpos2 = [ (p.position - q.position) for p in mercury.orbiters[0:9] for q in mercury.orbiters[0:9] ]
        mercury.evolve_model(11.8618|units.yr)
        edpos2 = [ (p.position - q.position) for p in mercury.orbiters[0:9] for q in mercury.orbiters[0:9] ]
        mercury.stop()

        for d1,d2 in zip(idpos1,idpos2):
          self.assertAlmostEqual(d1,d2, 7)
        for d1,d2 in zip(edpos1,edpos2):
          self.assertAlmostEqual(d1,d2, 7)
Example #5
0
    def test14(self):
        centre, orbiters = new_solar_system_for_mercury()
        oneyear = 365.14 | units.day
        halfyear = oneyear / 2.0
        mercury = MercuryWayWard()
        mercury.initialize_code()
        mercury.commit_parameters()

        mercury.central_particle.add_particles(centre)
        mercury.orbiters.add_particles(orbiters)

        start_pos = mercury.orbiters[2].position
        mercury.evolve_model(halfyear)
        central_particles = mercury.central_particle.copy()
        orbiters = mercury.orbiters.copy()
        mercury.stop()
        
        mercury = MercuryWayWard()
        mercury.initialize_code()
        mercury.parameters.begin_time = halfyear
        mercury.commit_parameters()

        mercury.central_particle.add_particles(centre)
        mercury.orbiters.add_particles(orbiters)
        mercury.evolve_model(oneyear)
        self.assertAlmostEqual(mercury.orbiters[2].position, start_pos, 1)
        mercury.stop()
Example #6
0
def planetplot():
    sun, planets = new_solar_system_for_mercury()
    timerange = units.day(numpy.arange(0, 120 * 365.25, 12))

    instance = MercuryWayWard()
    instance.initialize_code()
    instance.central_particle.add_particles(sun)
    instance.orbiters.add_particles(planets)
    instance.commit_particles()

    channels = instance.orbiters.new_channel_to(planets)

    for time in timerange:
        err = instance.evolve_model(time)
        channels.copy()
        planets.savepoint(time)

    instance.stop()

    for planet in planets:
        t, x = planet.get_timeline_of_attribute_as_vector("x")
        t, y = planet.get_timeline_of_attribute_as_vector("y")
        plot(x, y,'.')

    native_plot.show()
Example #7
0
    def test5(self):
        centre, orbiters = new_solar_system_for_mercury()

        mercury = MercuryWayWard()
        self.assertEquals(mercury.get_name_of_current_state(), 'UNINITIALIZED')
        mercury.initialize_code()
        self.assertEquals(mercury.get_name_of_current_state(), 'INITIALIZED')
        mercury.commit_parameters()
        self.assertEquals(mercury.get_name_of_current_state(), 'EDIT')
        
        mercury.central_particle.add_particles(centre)
        self.assertEquals(mercury.get_name_of_current_state(), 'EDIT')
        mercury.orbiters.add_particles(orbiters)
        self.assertEquals(mercury.get_name_of_current_state(), 'EDIT')

        mercury.commit_particles()
        self.assertEquals(mercury.get_name_of_current_state(), 'RUN')

        start_pos = mercury.orbiters[2].position
        mercury.evolve_model(365.14|units.day)
        self.assertEquals(mercury.get_name_of_current_state(), 'EVOLVED')

        self.assertAlmostEqual(mercury.orbiters[2].position, start_pos, 1)
        mercury.cleanup_code()
        self.assertEquals(mercury.get_name_of_current_state(), 'END')
        mercury.stop()
Example #8
0
def planetplot():
    sun, planets = new_solar_system_for_mercury()
    timerange = units.day(numpy.arange(0, 120 * 365.25, 12))

    instance = MercuryWayWard()
    instance.initialize_code()
    instance.central_particle.add_particles(sun)
    instance.orbiters.add_particles(planets)
    instance.commit_particles()

    channels = instance.orbiters.new_channel_to(planets)

    for time in timerange:
        err = instance.evolve_model(time)
        channels.copy()
        planets.savepoint(time)

    instance.stop()

    for planet in planets:
        t, x = planet.get_timeline_of_attribute_as_vector("x")
        t, y = planet.get_timeline_of_attribute_as_vector("y")
        plot(x, y, '.')

    native_plot.show()
Example #9
0
 def test1(self):
     print "Test 1: testing new_solar_system_for_mercury"
     sun, orbiters = new_solar_system_for_mercury()
     
     expected_attributes = set(["name", "mass", "radius", "j2", "j4", "j6", "angularmomentum"])
     self.assertEqual(set(sun.get_attribute_names_defined_in_store()), expected_attributes)
     
     expected_attributes = set(["name", "mass", "radius", "density", "x", "y", "z", "vx", "vy", "vz", "Lx", "Ly", "Lz", "celimit"])
     self.assertEqual(set(orbiters.get_attribute_names_defined_in_store()), expected_attributes)
Example #10
0
    def test2(self):
        centre, orbiters = new_solar_system_for_mercury()

        mercury = MercuryWayWard()
        mercury.initialize_code()

        mercury.central_particle.add_particles(centre)
        mercury.orbiters.add_particles(orbiters)
        mercury.commit_particles()

        start_pos = mercury.orbiters[2].position
        mercury.evolve_model(16.|units.day)
        self.assertEqual(mercury.get_time(),16.|units.day)
        mercury.stop()
Example #11
0
    def test2(self):
        centre, orbiters = new_solar_system_for_mercury()

        mercury = MercuryWayWard()
        mercury.initialize_code()

        mercury.central_particle.add_particles(centre)
        mercury.orbiters.add_particles(orbiters)
        mercury.commit_particles()

        start_pos = mercury.orbiters[2].position
        mercury.evolve_model(16.|units.day)
        self.assertEqual(mercury.get_time(),16.|units.day)
        mercury.stop()
Example #12
0
    def test1(self):
        print "Test 1: testing new_solar_system_for_mercury"
        sun, orbiters = new_solar_system_for_mercury()

        expected_attributes = set(
            ["name", "mass", "radius", "j2", "j4", "j6", "lx", "ly", "lz"])
        self.assertEqual(set(sun.get_attribute_names_defined_in_store()),
                         expected_attributes)

        expected_attributes = set([
            "name", "mass", "radius", "density", "x", "y", "z", "vx", "vy",
            "vz", "Lx", "Ly", "Lz", "celimit"
        ])
        self.assertEqual(set(orbiters.get_attribute_names_defined_in_store()),
                         expected_attributes)
Example #13
0
def planetplot():
    sun, planets = new_solar_system_for_mercury()

    initial = 12.2138 | units.Gyr
    final = 12.3300 | units.Gyr
    step = 10000.0 | units.yr

    timerange = VectorQuantity.arange(initial, final, step)
    gd = MercuryWayWard()
    gd.initialize_code()
    # gd.stopping_conditions.timeout_detection.disable()
    gd.central_particle.add_particles(sun)
    gd.orbiters.add_particles(planets)
    gd.commit_particles()

    se = SSE()
    # se.initialize_code()
    se.commit_parameters()
    se.particles.add_particles(sun)
    se.commit_particles()
    channelp = gd.orbiters.new_channel_to(planets)
    channels = se.particles.new_channel_to(sun)

    for time in timerange:
        err = gd.evolve_model(time-initial)
        channelp.copy()
        # planets.savepoint(time)
        err = se.evolve_model(time)
        channels.copy()
        gd.central_particle.mass = sun.mass
        print(
                sun[0].mass.value_in(units.MSun),
                time.value_in(units.Myr),
                planets[4].x.value_in(units.AU),
                planets[4].y.value_in(units.AU),
                planets[4].z.value_in(units.AU)
                )

    gd.stop()
    se.stop()

    for planet in planets:
        t, x = planet.get_timeline_of_attribute_as_vector("x")
        t, y = planet.get_timeline_of_attribute_as_vector("y")
        plot(x, y, '.')
        native_plot.gca().set_aspect('equal')

    native_plot.show()
Example #14
0
def planetplot():
    sun, planets = new_solar_system_for_mercury()

    initial = 12.2138 | units.Gyr
    final = 12.3300 | units.Gyr
    step = 10000.0 | units.yr

    timerange = VectorQuantity.arange(initial, final, step)
    gd = MercuryWayWard()
    gd.initialize_code()
    # gd.stopping_conditions.timeout_detection.disable()
    gd.central_particle.add_particles(sun)
    gd.orbiters.add_particles(planets)
    gd.commit_particles()

    se = SSE()
    # se.initialize_code()
    se.commit_parameters()
    se.particles.add_particles(sun)
    se.commit_particles()
    channelp = gd.orbiters.new_channel_to(planets)
    channels = se.particles.new_channel_to(sun)

    for time in timerange:
        err = gd.evolve_model(time - initial)
        channelp.copy()
        # planets.savepoint(time)
        err = se.evolve_model(time)
        channels.copy()
        gd.central_particle.mass = sun.mass
        print(
            (sun[0].mass.value_in(units.MSun), time.value_in(units.Myr),
             planets[4].x.value_in(units.AU), planets[4].y.value_in(units.AU),
             planets[4].z.value_in(units.AU)))

    gd.stop()
    se.stop()

    for planet in planets:
        t, x = planet.get_timeline_of_attribute_as_vector("x")
        t, y = planet.get_timeline_of_attribute_as_vector("y")
        plot(x, y, '.')
        native_plot.gca().set_aspect('equal')

    native_plot.show()
Example #15
0
    def test10(self):
        centre, orbiters = new_solar_system_for_mercury()

        mercury = MercuryWayWard()
        mercury.central_particle.add_particles(centre)
        self.assertEquals(mercury.get_name_of_current_state(), 'EDIT')
        mercury.orbiters.add_particles(orbiters[4:5])
        self.assertEquals(mercury.get_name_of_current_state(), 'EDIT')
        start_pos = mercury.orbiters[0].position
        mercury.evolve_model(11.8618|units.yr)
        self.assertEquals(mercury.get_name_of_current_state(), 'EVOLVED')
        self.assertAlmostEqual(mercury.orbiters[0].position, start_pos, 1)

        mercury.orbiters.add_particles(orbiters[0:4])
        self.assertEquals(mercury.get_name_of_current_state(), 'UPDATE')
        self.assertAlmostEqual(mercury.orbiters[0].position, start_pos, 1)
        start_pos = mercury.orbiters[0].position
        mercury.evolve_model(2*11.8618|units.yr)
        self.assertEquals(mercury.get_name_of_current_state(), 'EVOLVED')
        self.assertAlmostEqual(mercury.orbiters[0].position, start_pos, 1)
Example #16
0
    def test10(self):
        centre, orbiters = new_solar_system_for_mercury()

        mercury = MercuryWayWard()
        mercury.central_particle.add_particles(centre)
        self.assertEqual(mercury.get_name_of_current_state(), 'EDIT')
        mercury.orbiters.add_particles(orbiters[4:5])
        self.assertEqual(mercury.get_name_of_current_state(), 'EDIT')
        start_pos = mercury.orbiters[0].position
        mercury.evolve_model(11.8618|units.yr)
        self.assertEqual(mercury.get_name_of_current_state(), 'EVOLVED')
        self.assertAlmostEqual(mercury.orbiters[0].position, start_pos, 1)

        mercury.orbiters.add_particles(orbiters[0:4])
        self.assertEqual(mercury.get_name_of_current_state(), 'UPDATE')
        self.assertAlmostEqual(mercury.orbiters[0].position, start_pos, 1)
        start_pos = mercury.orbiters[0].position
        mercury.evolve_model(2*11.8618|units.yr)
        self.assertEqual(mercury.get_name_of_current_state(), 'EVOLVED')
        self.assertAlmostEqual(mercury.orbiters[0].position, start_pos, 1)
Example #17
0
def testsse():
    sse = SSEWithMassEvolve()
    sse.commit_parameters()
    sun, planets = new_solar_system_for_mercury()
    sse.particles.add_particles(sun)
    sse.commit_particles()
    channel = sse.particles.new_channel_to(sun)
    channel.copy()

    massrange = units.MSun(numpy.arange(1, 0.8, -0.001))
    masses = [] | units.MSun
    timerange = [] | units.Myr

    for mass in massrange:
        sse.evolve_mass(mass)
        t, m = sse.evolve_mass(mass)
        timerange.append(t)
        channel.copy()
        masses.append(sse.particles[0].mass)

    sse.stop()
    plot(massrange, timerange, '.')
    native_plot.show()
Example #18
0
def testsse():
    sse = SSEWithMassEvolve()
    sse.commit_parameters()
    sun, planets = new_solar_system_for_mercury()
    sse.particles.add_particles(sun)
    sse.commit_particles()
    channel = sse.particles.new_channel_to(sun)
    channel.copy()

    massrange = units.MSun(numpy.arange(1, 0.8, -0.001))
    masses = [] | units.MSun
    timerange = [] | units.Myr

    for mass in massrange:
        sse.evolve_mass(mass)
        t, m = sse.evolve_mass(mass)
        timerange.append(t)
        channel.copy()
        masses.append(sse.particles[0].mass)

    sse.stop()
    plot(massrange, timerange, '.')
    native_plot.show()
Example #19
0
    def test8(self):
        centre, orbiters = new_solar_system_for_mercury()

        mercury = MercuryWayWard()#debugger="gdb")
        self.assertEquals(mercury.get_name_of_current_state(), 'UNINITIALIZED')
        mercury.initialize_code()
        self.assertEquals(mercury.get_name_of_current_state(), 'INITIALIZED')
        mercury.commit_parameters()
        self.assertEquals(mercury.get_name_of_current_state(), 'EDIT')
        
        mercury.central_particle.add_particles(centre)
        self.assertEquals(mercury.get_name_of_current_state(), 'EDIT')
        mercury.orbiters.add_particles(orbiters[0:5])
        self.assertEquals(mercury.get_name_of_current_state(), 'EDIT')
        mercury.commit_particles()
        self.assertEquals(mercury.get_name_of_current_state(), 'RUN')

        start_pos = mercury.orbiters[4].position
        mercury.evolve_model(11.8618|units.yr)
        self.assertEquals(mercury.get_name_of_current_state(), 'EVOLVED')
        self.assertAlmostEqual(mercury.orbiters[4].position, start_pos, 1)

        mercury.orbiters.remove_particles(orbiters[0:4])
        self.assertEquals(mercury.get_name_of_current_state(), 'UPDATE')
        mercury.recommit_particles()

        self.assertAlmostEqual(mercury.orbiters[0].position, start_pos, 1)

        start_pos = mercury.orbiters[0].position
        mercury.evolve_model(2*11.8618|units.yr)
        self.assertEquals(mercury.get_name_of_current_state(), 'EVOLVED')
        self.assertAlmostEqual(mercury.orbiters[0].position, start_pos, 1)

        mercury.cleanup_code()
        self.assertEquals(mercury.get_name_of_current_state(), 'END')
        mercury.stop()
Example #20
0
    def test8(self):
        centre, orbiters = new_solar_system_for_mercury()

        mercury = MercuryWayWard()#debugger="gdb")
        self.assertEqual(mercury.get_name_of_current_state(), 'UNINITIALIZED')
        mercury.initialize_code()
        self.assertEqual(mercury.get_name_of_current_state(), 'INITIALIZED')
        mercury.commit_parameters()
        self.assertEqual(mercury.get_name_of_current_state(), 'EDIT')
        
        mercury.central_particle.add_particles(centre)
        self.assertEqual(mercury.get_name_of_current_state(), 'EDIT')
        mercury.orbiters.add_particles(orbiters[0:5])
        self.assertEqual(mercury.get_name_of_current_state(), 'EDIT')
        mercury.commit_particles()
        self.assertEqual(mercury.get_name_of_current_state(), 'RUN')

        start_pos = mercury.orbiters[4].position
        mercury.evolve_model(11.8618|units.yr)
        self.assertEqual(mercury.get_name_of_current_state(), 'EVOLVED')
        self.assertAlmostEqual(mercury.orbiters[4].position, start_pos, 1)

        mercury.orbiters.remove_particles(orbiters[0:4])
        self.assertEqual(mercury.get_name_of_current_state(), 'UPDATE')
        mercury.recommit_particles()

        self.assertAlmostEqual(mercury.orbiters[0].position, start_pos, 1)

        start_pos = mercury.orbiters[0].position
        mercury.evolve_model(2*11.8618|units.yr)
        self.assertEqual(mercury.get_name_of_current_state(), 'EVOLVED')
        self.assertAlmostEqual(mercury.orbiters[0].position, start_pos, 1)

        mercury.cleanup_code()
        self.assertEqual(mercury.get_name_of_current_state(), 'END')
        mercury.stop()