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)
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()
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()
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)
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()
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()
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()
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()
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)
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()
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()
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)
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()
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()
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)
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)
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()
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()
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()
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()