def test3(self): convert_nbody = nbody_system.nbody_to_si(1.0 | units.MSun, 149.5e6 | units.km) instance = Hermite(convert_nbody) instance.initialize_code() instance.parameters.epsilon_squared = 0.00001 | units.AU**2 instance.dt_dia = 5000 stars = datamodel.Stars(2) star1 = stars[0] star2 = stars[1] star1.mass = units.MSun(1.0) star1.position = units.AU(numpy.array((-1.0,0.0,0.0))) star1.velocity = units.AUd(numpy.array((0.0,0.0,0.0))) star1.radius = units.RSun(1.0) star2.mass = units.MSun(1.0) star2.position = units.AU(numpy.array((1.0,0.0,0.0))) star2.velocity = units.AUd(numpy.array((0.0,0.0,0.0))) star2.radius = units.RSun(100.0) instance.particles.add_particles(stars) for x in range(1,2000,10): instance.evolve_model(x | units.day) instance.particles.copy_values_of_all_attributes_to(stars) stars.savepoint() instance.cleanup_code() instance.stop()
def test1(self): convert_nbody = nbody_system.nbody_to_si(1.0 | units.MSun, 149.5e6 | units.km) hermite = Hermite(convert_nbody) hermite.initialize_code() hermite.parameters.epsilon_squared = 0.0 | units.AU**2 hermite.parameters.end_time_accuracy_factor = 0.0 hermite.dt_dia = 5000 stars = self.new_system_of_sun_and_earth() earth = stars[1] hermite.particles.add_particles(stars) hermite.evolve_model(365.0 | units.day) hermite.particles.copy_values_of_all_attributes_to(stars) position_at_start = earth.position.value_in(units.AU)[0] position_after_full_rotation = earth.position.value_in(units.AU)[0] self.assertAlmostRelativeEqual(position_at_start, position_after_full_rotation, 6) hermite.evolve_model(365.0 + (365.0 / 2) | units.day) hermite.particles.copy_values_of_all_attributes_to(stars) position_after_half_a_rotation = earth.position.value_in(units.AU)[0] self.assertAlmostRelativeEqual(-position_at_start, position_after_half_a_rotation, 3) hermite.evolve_model(365.0 + (365.0 / 2) + (365.0 / 4) | units.day) hermite.particles.copy_values_of_all_attributes_to(stars) position_after_half_a_rotation = earth.position.value_in(units.AU)[1] self.assertAlmostRelativeEqual(-position_at_start, position_after_half_a_rotation, 3) hermite.cleanup_code() hermite.stop()
def test2(self): convert_nbody = nbody_system.nbody_to_si(1.0 | units.MSun, 149.5e6 | units.km) instance = Hermite(convert_nbody) instance.initialize_code() instance.parameters.epsilon_squared = 0.0 | units.AU**2 instance.dt_dia = 5000 stars = self.new_system_of_sun_and_earth() earth = stars[1] instance.particles.add_particles(stars) for x in range(1, 500, 10): instance.evolve_model(x | units.day) instance.particles.copy_values_of_all_attributes_to(stars) stars.savepoint() if HAS_MATPLOTLIB: figure = pyplot.figure() plot = figure.add_subplot(1,1,1) x_points = earth.get_timeline_of_attribute("x") y_points = earth.get_timeline_of_attribute("y") x_points_in_AU = map(lambda (t,x) : x.value_in(units.AU), x_points) y_points_in_AU = map(lambda (t,x) : x.value_in(units.AU), y_points) plot.scatter(x_points_in_AU,y_points_in_AU, color = "b", marker = 'o') plot.set_xlim(-1.5, 1.5) plot.set_ylim(-1.5, 1.5) test_results_path = self.get_path_to_results() output_file = os.path.join(test_results_path, "hermite-earth-sun2.svg") figure.savefig(output_file) instance.cleanup_code() instance.stop()
def test2(self): convert_nbody = nbody_system.nbody_to_si(1.0 | units.MSun, 149.5e6 | units.km) instance = Hermite(convert_nbody) instance.initialize_code() instance.parameters.epsilon_squared = 0.0 | units.AU**2 instance.dt_dia = 5000 stars = self.new_system_of_sun_and_earth() earth = stars[1] instance.particles.add_particles(stars) for x in range(1, 500, 10): instance.evolve_model(x | units.day) instance.particles.copy_values_of_all_attributes_to(stars) stars.savepoint() if HAS_MATPLOTLIB: figure = pyplot.figure() plot = figure.add_subplot(1,1,1) x_points = earth.get_timeline_of_attribute("x") y_points = earth.get_timeline_of_attribute("y") x_points_in_AU = map(lambda (t,x) : x.value_in(units.AU), x_points) y_points_in_AU = map(lambda (t,x) : x.value_in(units.AU), y_points) plot.scatter(x_points_in_AU,y_points_in_AU, color = "b", marker = 'o') plot.set_xlim(-1.5, 1.5) plot.set_ylim(-1.5, 1.5) test_results_path = self.get_path_to_results() output_file = os.path.join(test_results_path, "hermite-earth-sun2.svg") figure.savefig(output_file) instance.cleanup_code() instance.stop()
def test10(self): convert_nbody = nbody_system.nbody_to_si(1.0 | units.MSun, 149.5e6 | units.km) instance = Hermite(convert_nbody) instance.initialize_code() instance.parameters.epsilon_squared = 0.0 | units.AU**2 instance.parameters.stopping_conditions_number_of_steps = 10 self.assertEquals(instance.parameters.stopping_conditions_number_of_steps,10) stars = self.new_system_of_sun_and_earth() earth = stars[1] instance.particles.add_particles(stars) instance.stopping_conditions.number_of_steps_detection.enable() instance.evolve_model(365.0 | units.day) self.assertTrue(instance.stopping_conditions.number_of_steps_detection.is_set()) instance.particles.copy_values_of_all_attributes_to(stars) instance.cleanup_code() instance.stop()
def test10(self): convert_nbody = nbody_system.nbody_to_si(1.0 | units.MSun, 149.5e6 | units.km) instance = Hermite(convert_nbody) instance.initialize_code() instance.parameters.epsilon_squared = 0.0 | units.AU**2 instance.parameters.stopping_conditions_number_of_steps = 10 self.assertEquals(instance.parameters.stopping_conditions_number_of_steps,10) stars = self.new_system_of_sun_and_earth() earth = stars[1] instance.particles.add_particles(stars) instance.stopping_conditions.number_of_steps_detection.enable() instance.evolve_model(365.0 | units.day) self.assertTrue(instance.stopping_conditions.number_of_steps_detection.is_set()) instance.particles.copy_values_of_all_attributes_to(stars) instance.cleanup_code() instance.stop()
def test20(self): convert_nbody = nbody_system.nbody_to_si(1.0 | units.MSun, 149.5e6 | units.km) hermite = Hermite(convert_nbody) hermite.initialize_code() hermite.parameters.epsilon_squared = 0.0 | units.AU**2 hermite.parameters.end_time_accuracy_factor = 0.0 hermite.parameters.is_time_reversed_allowed = True stars = self.new_system_of_sun_and_earth() earth = stars[1] hermite.particles.add_particles(stars) hermite.evolve_model(365.0 | units.day) hermite.particles.copy_values_of_all_attributes_to(stars) position_at_start = earth.position.value_in(units.AU)[0] position_after_full_rotation = earth.position.value_in(units.AU)[0] self.assertAlmostRelativeEqual(position_at_start, position_after_full_rotation, 6) hermite.evolve_model(365.0 - (365.0 / 2) | units.day) hermite.particles.copy_values_of_all_attributes_to(stars) position_after_half_a_rotation_backward = earth.position.value_in(units.AU)[0] self.assertAlmostRelativeEqual(-position_at_start, position_after_half_a_rotation_backward, 4) hermite.evolve_model(365.0 | units.day) position_at_start = earth.position.value_in(units.AU)[0] position_after_full_rotation = earth.position.value_in(units.AU)[0] self.assertAlmostRelativeEqual(position_at_start, position_after_full_rotation, 6) hermite.cleanup_code() hermite.stop()
def make_effective_iso_potential_plot(gravity): """ This function is copied from the amuse documentation. The last part has been altered to also plot our Moon Earth system and the test particles orbit. """ omega = (constants.G * gravity.particles.total_mass() / (5.0 | units.AU**3)).sqrt() center_of_mass = gravity.particles.center_of_mass()[:] plt.rcParams.update({'font.size': 30}) figure = plt.figure(figsize=(12, 12)) ax = plt.gca() ax.get_yaxis().get_major_formatter().set_useOffset(False) ax.minorticks_on() current_axes = plt.subplot(1, 1, 1) current_axes.set_aspect("equal", adjustable="box") lim = 6e5 potential = effective_iso_potential_plot(gravity, omega, xlim=[-lim, lim] | units.km, ylim=[-lim, lim] | units.km, center_of_rotation=center_of_mass, fraction_screen_filled=0.85) # Simulation towards the Moon position = [329931, 0, 0] | units.km # position of the lagrange point velocity = [0.14, 1.022, 0] | units.kms # these parameters worked well gravity.particles.add_particles(create_testparticle(position, velocity)) x, y, E_begin, E_end = integrate_orbit( 1.85, gravity) # towards the moon 1.85 days is sufficent #initialize integrator converter = nbody_system.nbody_to_si(1.0 | units.MSun, 1.0 | units.AU) gravity = Hermite(converter) gravity.particles.add_particles(Earth_Moon_system()) gravity.particles.add_particles(create_testparticle(position, velocity)) gravity.particles.velocity = gravity.particles.velocity * -1. x2, y2, E_begin2, E_end2 = integrate_orbit( 10, gravity) # towards the Earth 10 days is sufficient # make numpy arrays x = np.array(x) y = np.array(y) x2 = np.array(x2) y2 = np.array(y2) # Make plot plt.scatter([0], [0], color='b', s=25, label='Earth') plt.plot(x[1], y[1], color='r', lw=2, label='Moon') plt.plot(x[2], y[2], color='k', lw=2, label='Test particle') plt.plot(x2[1], y2[1], color='r', lw=2) plt.plot(x2[2], y2[2], color='k', lw=2) plt.legend(fontsize=12) # Plot langrangian point plt.scatter(329931, 0, marker='+', s=30, zorder=2, c='m') plt.text(329931, -31306, "$L_1$", size=20, zorder=3, color='m') # Stop integrator gravity.cleanup_code() gravity.stop() # Label and show xlabel('x') ylabel('y') plt.ticklabel_format(style='sci', axis='both', scilimits=(0, 0)) plt.tight_layout() plt.savefig("lagrange_points.png") plt.show() # show figure