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.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 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 test0(self): centre, orbiter = self.sun_and_earth() mercury = MercuryWayWard() #,debugger='xterm') mercury.initialize_code() mercury.central_particle.add_particles(centre) mercury.orbiters.add_particles(orbiter) mercury.commit_particles() self.assertAlmostEqual(mercury.central_particle.j4, .0 | units.AU**4) self.assertAlmostEqual(mercury.central_particle.mass, 1.98892e+30 | units.kg, 3) self.assertAlmostEqual(mercury.central_particle.mass, 1.0 | units.MSun, 3) self.assertEquals(mercury.get_number_of_orbiters(), 1) self.assertEquals(mercury.orbiters.position, [[1, 0, 0]] | units.AU) self.assertEquals(mercury.orbiters.density, 1.0 | units.g / units.cm**3) self.assertEquals(mercury.orbiters.angular_momentum, [[1.0, 0.0, 0.0]] | units.MSun * units.AU**2 / units.day) mercury.evolve_model(365.24 | units.day) self.assertAlmostEqual(mercury.orbiters.position, [[1.0, 0.0, 0.0]] | units.AU, 1) self.assertAlmostEqual( mercury.kinetic_energy + mercury.potential_energy, mercury.total_energy, 3) mercury.stop()
def integrate_and_store(): sun, planets = Solarsystem.new_solarsystem() #timerange = units.day(numpy.arange(20, 120 * 365.25, 12)) timerange = Vq.arange(20 | units.day, 120 | units.yr, 10 | units.day) pdb.set_trace() 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) err = instance.evolve_model(10 | units.day) pdb.set_trace() channels.copy() planets.savepoint(10 | units.day) pdb.set_trace() for time in timerange: err = instance.evolve_model(time) channels.copy() planets.savepoint(time) instance.stop() pdb.set_trace()
def setup_codes(sun, planets): gd = MercuryWayWard() # debugger='xterm') gd.initialize_code() gd.central_particle.add_particles(sun) gd.orbiters.add_particles(planets) gd.commit_particles() se = SSEWithMassEvolve() se.commit_parameters() se.particles.add_particles(sun) se.commit_particles() return gd, se
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 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 test0(self): centre, orbiter = self.sun_and_earth() mercury = MercuryWayWard()#,debugger='xterm') mercury.initialize_code() mercury.central_particle.add_particles(centre) mercury.orbiters.add_particles(orbiter) mercury.commit_particles() self.assertAlmostEqual(mercury.central_particle.j4, .0|units.AU**4) self.assertAlmostEqual(mercury.central_particle.mass, 1.98892e+30 |units.kg, 3) self.assertAlmostEqual(mercury.central_particle.mass, 1.0 |units.MSun, 3) self.assertEquals(mercury.get_number_of_orbiters(),1) self.assertEquals(mercury.orbiters.position, [[1,0,0]] | units.AU) self.assertEquals(mercury.orbiters.density, 1.0|units.g/units.cm**3 ) self.assertEquals(mercury.orbiters.angular_momentum, [[1.0, 0.0, 0.0]] | units.MSun*units.AU**2/units.day) mercury.evolve_model(365.24 | units.day) self.assertAlmostEqual(mercury.orbiters.position, [[1.0, 0.0, 0.0]] | units.AU, 1) self.assertAlmostEqual(mercury.kinetic_energy+mercury.potential_energy,mercury.total_energy,3) 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()
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()