Beispiel #1
0
def evolve_system(particles):
    """
    Evolves the system using the Hermite integrator.


    Parameters
    ----------
    particles: amuse.datamodel.particles.Particles instance

    """
    times = numpy.linspace(0.0001, args.time, args.steps) | u.yr

    intr = Hermite(nbody_to_si(particles.total_mass(), 1 | u.AU))
    intr.particles.add_particles(particles)

    energy_begin = intr.get_total_energy()

    if args.dt is not None:
        intr.set_dt_param(args.dt)

    for t in times:
        intr.evolve_model(t)
        energy_error = (intr.get_total_energy() - energy_begin) / energy_begin
        print(intr.get_time_step().in_(u.day), intr.get_time().in_(u.yr))
        print(energy_error)

    print("energy error:{}".format(energy_error))

    intr.stop()
def evolve_system(particles):
    """
    Evolves the system using the Hermite integrator.


    Parameters
    ----------
    particles: amuse.datamodel.particles.Particles instance

    """
    times = numpy.linspace(0.0001, args.time, args.steps) |u.yr

    intr = Hermite(nbody_to_si(particles.total_mass(), 1 | u.AU))
    intr.particles.add_particles(particles)

    energy_begin = intr.get_total_energy()

    if args.dt is not None:
        intr.set_dt_param(args.dt)

    for t in times:
        intr.evolve_model(t)
        energy_error = (intr.get_total_energy() - energy_begin)/energy_begin
        print(intr.get_time_step().in_(u.day), intr.get_time().in_(u.yr))
        print(energy_error)
      

    print("energy error:{}".format(energy_error))

    intr.stop()
Beispiel #3
0
def evolve_system_with_massloss(particles, mass_sequence, time_sequence,
                                datahandler):
    """

    Parameters
    ----------
    particles: a two-body system 
    mass_sequence: sequence of masses
    time_sequence: sequence of times
    datahandler: HDF5HandlerAmuse context manager

    """
    h = datahandler

    intr = Hermite(nbody_to_si(particles.total_mass(), 1 | u.AU))
    intr.particles.add_particles(particles)

    h.append(particles[0].period0, "period0")

    for mass, time in zip(mass_sequence, time_sequence):

        intr.particles.move_to_center()
        intr.evolve_model(time)
        intr.particles[0].mass = mass

        h.append(intr.particles.center_of_mass(), "CM_position")
        h.append(intr.particles.center_of_mass_velocity(), "CM_velocity")
        h.append(intr.particles.position, "position")
        h.append(intr.particles.velocity, "velocity")
        h.append(intr.particles.mass, "mass")
        h.append(intr.particles.kinetic_energy(), "kinetic_energy")
        h.append(intr.particles.potential_energy(), "potential_energy")
        h.append(intr.get_total_energy(), "total_energy")
        h.append(time, "time")
        h.append(semimajoraxis_from_binary(intr.particles), "sma")
        h.append(eccentricity_from_binary(intr.particles), "eccentricity")

    intr.stop()