Beispiel #1
0
    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()
Beispiel #2
0
 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()
Beispiel #3
0
 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()
Beispiel #4
0
 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()
Beispiel #5
0
 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()
Beispiel #6
0
 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()
Beispiel #7
0
 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()
Beispiel #8
0
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