x0, v0, w0, t0 = 1.0, 0., 3., 0
sim_params = w0
deltat = 0.1988

m1 = "Euler"
m2 = "Euler-Cromer"
m3 = "Midpoint"

num_method = m2

pendulo = os.Oscillator(x0, v0, w0, t0, "P1")
pendulo_force = fr.Forces(restoring_force, sim_params)
pendulo.set_force(pendulo_force)
euler = sol.Solver(pendulo, num_method, deltat)
tvac, xvac, vac = integrate(euler)
en_ci, en_po, en_to = energies(tvac, xvac, vac)

delta_e = en_to[-1] - en_to[0]
print("Theta: ", x0, ", v: ", v0, ", dt: ", deltat, ", de: ", delta_e)
print("Energia In: ", en_to[0], ", Energia Fin: ", en_to[-1])

deltae = []
for i in range(len(en_to)):
    deltae.append(en_to[i] - en_to[0])

fig, ax = plt.subplots()
ax.plot(tvac, xvac, ls='--', c='royalblue', label='Angle')
ax.plot(tvac, vac, ls='--', c='deeppink', label='Velocity')
ax.set(xlabel='time (AU)', ylabel='State (AU)')
Esempio n. 2
0
################################################################################
# BLOQUE PRINCIPAL DE INSTRUCCIONES

v0, vy = cond_init(1, 0, 0)
x0, y0, v0, a0, m = 1., .0, v0, 90., 1.
sim_params = m, GM
deltat = 0.01 / 499.998  # para euler cromer deltat = 0.01/499.998

m1 = "Euler"
m2 = "Euler-Cromer"
m3 = "Midpoint"

earth = pt.Particle("Earth", x0, y0, v0, a0, m)  # Revisar por que a0 es 90?
earth_force = fr.Forces(universal_gravity, sim_params)
earth.set_force(earth_force)
euler = sl.Solver(earth, m2, deltat)  # El metodo mas estable es Euler Cromer
xpos, ypos, tpos = [], [], []
cont = 0

em = []
for i in range(200000):
    xc, yc, vxc, vyc, tc = earth.get_state()
    v = np.sqrt(vxc**2 + vyc**2)
    emt = total_mechanic_energy(v, m)
    em.append(round(emt, 2))
    xpos.append(xc)
    ypos.append(yc)
    tpos.append(tc)
    euler.do_step()
    xc1, yc1, vxc1, vyc1, tc1 = earth.get_state()
    if yc < 0 and yc1 >= 0:
Esempio n. 3
0
m3 = "Midpoint"

infoelipses = []

x0 = 1.
vy0 = 1.
for i in range(200):
    print("cond ini, x0 & vy0 =", round(x0, 2))
    v0 = vy0
    x0, y0, v0, a0, m = x0, .0, v0, 90., 1.

    earth = pt.Particle("Earth", x0, y0, v0, a0, m)
    # print(earth)
    earth_force = fr.Forces(universal_gravity, sim_params)
    earth.set_force(earth_force)
    euler = sl.Solver(earth, m2, deltat)

    xpos, ypos, tpos = [], [], []
    cont = 0
    for i in range(200000):
        xc, yc, vxc, vyc, tc = earth.get_state()
        # if tc > 0.415:
        #     break
        xpos.append(xc)
        ypos.append(yc)
        tpos.append(tc)
        euler.do_step()
        xc1, yc1, vxc1, vyc1, tc1 = earth.get_state()
        if yc < 0 and yc1 >= 0:
            cont += 1
Esempio n. 4
0
# v0, vy = cond_init(1, 0, 0) #orbita circular
k = 1.5  # orbita eliptica
# print(v0)
x0, y0, v0, a0, m = k, .0, k, 90., 1.
sim_params = m, GMe, W
deltat = 0.01 / 128

m1 = "Euler"
m2 = "Euler-Cromer"
m3 = "Midpoint"

satellite = pt.Particle("Satellite", x0, y0, v0, a0,
                        m)  # Revisar por que a0 es 90?
satellite_force = fr.Forces(universal_gravity, sim_params)
satellite.set_force(satellite_force)
euler = sl.Solver(satellite, m2,
                  deltat)  # El metodo mas estable es Euler Cromer
xpos, ypos, tpos = [], [], []
cont = 0

em = []
vel = []
for i in range(200000):
    xc, yc, vxc, vyc, tc = satellite.get_state()
    v = np.sqrt(vxc**2 + vyc**2)
    vel.append(v)
    emt = total_mechanic_energy(v, m, xc, yc)
    em.append(round(emt, 2))
    xpos.append(xc)
    ypos.append(yc)
    tpos.append(tc)
    euler.do_step()
Esempio n. 5
0
v0, vy = init_c(1, 0, 0)
sim_params = pt.grav_
m, x0, y0, v0, a0 = 1., 1., 0., 5., 70
deltat = .0001

m1 = "Euler"
m2 = "Euler-Cromer"
m3 = "Midpoint"

num_method = m2

earth = pt.Particle(x0, y0, v0, a0)
earth_force = fr.Forces(Newton_again, sim_params)
earth.set_force(earth_force)
euler = sol.Solver(earth, num_method, deltat)
xvac, yvac, tvac = integrate(euler)

m2, x02, y02, v02, a02 = 1., 1.5, 0., 5., 70

mars = pt.Particle(x02, y02, v02, a02)
f2 = fr.Forces(Newton_again, sim_params)
mars.set_force(f2)
i2 = sol.Solver(mars, num_method, deltat)
xvac2, yvac2, tvac2 = integrate(i2)

sx, sy = 0, 0
ex, ey = 1, 0.
mx, my = 1.5, 0

# Muestra las orbitas de los dos planetas
Esempio n. 6
0
v0, vy = init_c(1, 0, 0) #orbita circular
k = 1.5 # orbita eliptica
m, x0, y0, v0, a0 = 1., 1., .0, v0, 90.
sim_params = m, GMe, A, W
deltat = 0.01/128

m1 = "Euler"
m2 = "Euler-Cromer"
m3 = "Midpoint"

num_method = m2 # m1 # m3

satellite = pt.Particle(x0, y0, v0, a0)
satellite_force = fr.Forces(Newton_again, sim_params)
satellite.set_force(satellite_force)
euler = sl.Solver(satellite, num_method, deltat)
xpos, ypos, tpos, em, vel = [], [], [], [], []
cont = 0

for i in range(200000):
    xc, yc, vxc, vyc, tc = satellite.get_state()
    v = np.sqrt(vxc**2 + vyc**2)
    vel.append(v)
    emt = mechanic_energy(v, m, xc, yc)
    em.append(round(emt, 2))
    xpos.append(xc)
    ypos.append(yc)
    tpos.append(tc)
    euler.do_step()
    xc1, yc1, vxc1, vyc1, tc1 = satellite.get_state()
    if yc < 0 and yc1 >= 0:
Esempio n. 7
0
sim_params = pt.grav_
deltat = 0.01 / 256

m1 = "Euler"
m2 = "Euler-Cromer"
m3 = "Midpoint"

num_method = m2  # m1 # m3

# k = 2 * np.pi
m, x0, y0, v0, a0 = 1., 1.5, .0, 1.5, 90.  # v0 = k

earth = pt.Particle(x0, y0, v0, a0)
earth_force = fr.Forces(Newton_again, sim_params)
earth.set_force(earth_force)
euler = sl.Solver(earth, num_method, deltat)
xvac, yvac, tvac, area = integrate(euler)

print("Area Ini:", area[0], ", Area Fin:", area[-1])

# Muestra la orbita circular o eliptica
# fig, ax = plt.subplots()
# ax.plot(xvac, yvac, '--', c = 'purple', label=num_method)
#
# ax.set(xlabel='x (a.u.)', ylabel='y (a.u.)')

# Muestra grafica area vs tiempo
fig, ax = plt.subplots()
ax.plot(tvac, area, '--', c='purple', label=num_method)

ax.set(xlabel='t (yr)', ylabel="A (a.u.**2)")
Esempio n. 8
0
########################################################

planet1 = pt.Particle("Planet 1", x02, y02, v02, a02, m2)
planet1.set_force(fr.Forces(grav_force, pt.GM))

planet2 = pt.Particle("Planet 2", x02, y02, v02, a02, m2)
planet2.set_force(fr.Forces(grav_force, pt.GM))

planet3 = pt.Particle("Planet 3", x02, y02, v02, a02, m2)
planet3.set_force(fr.Forces(grav_force, pt.GM))

xpos1, ypos1, tpos1, energy1 = [], [], [], []
xpos2, ypos2, tpos2, energy2 = [], [], [], []
xpos3, ypos3, tpos3, energy3 = [], [], [], []

numeric1 = sv.Solver(planet1, "Euler", deltat)
numeric2 = sv.Solver(planet2, "Euler-Cromer", deltat)
numeric3 = sv.Solver(planet3, "Midpoint", deltat)

#euler(planet1, numeric1, xpos1, ypos1, tpos1, energy1)
euler_cromer(planet2, numeric2, xpos2, ypos2, tpos2, energy2)
#midpoint(planet3, numeric3, xpos3, ypos3, tpos3, energy3)

#########################################################

planet1p = pt.Particle("Planet 1p", x01, y01, v01, a01, m1)
planet1p.set_force(fr.Forces(grav_force, pt.GM))

planet2p = pt.Particle("Planet 2p", x01, y01, v01, a01, m1)
planet2p.set_force(fr.Forces(grav_force, pt.GM))
Esempio n. 9
0
planet3 = pt.Particle("Planet Z", x0, y0, v0, a0, m)
planet3.set_force(planet_force)

xposEuler = []
yposEuler = []
tposEuler = []

xposEulerCromer = []
yposEulerCromer = []
tposEulerCromer = []

xposMidpoint = []
yposMidpoint = []
tposMidpoint = []

numeric1 = sv.Solver(planet, "Euler", deltat)
numeric2 = sv.Solver(planet2, "Euler-Cromer", deltat)
numeric3 = sv.Solver(planet3, "Midpoint", deltat)

#euler(planet, numeric1, xposEuler, yposEuler, tposEuler)
euler_cromer(planet2, numeric2, xposEulerCromer, yposEulerCromer,
             tposEulerCromer)
#midpoint(planet3, numeric3, xposMidpoint, yposMidpoint, tposMidpoint)

#Generate Plots

fig, ax = plt.subplots()
#ax.plot(xposEuler, yposEuler, '-', label='Euler')
ax.plot(xposEulerCromer, yposEulerCromer, '-', label='Euler-Cromer')
#ax.plot(xposMidpoint, yposMidpoint, '-', label='Midpoint')
Esempio n. 10
0

m1, x01, y01, v01, a01 = 1., 2., 0., 4.442882938, 90
m2, x02, y02, v02, a02 = 1., 1., 0., 8., 90
deltat = 0.001

planet1 = pt.Particle("Planet X", x01, y01, v01, a01, m1)
planet1.set_force(fr.Forces(grav_force, pt.GM))

planet2 = pt.Particle("Planet Y", x02, y02, v02, a02, m2)
planet2.set_force(fr.Forces(grav_force, pt.GM))

xpos1, ypos1, tpos1, energy1 = [], [], [], []
xpos2, ypos2, tpos2, energy2 = [], [], [], []

numeric1 = sv.Solver(planet1, "Euler-Cromer", deltat)
numeric2 = sv.Solver(planet2, "Euler-Cromer", deltat)

euler_cromer(planet1, numeric1, xpos1, ypos1, tpos1, energy1)
euler_cromer(planet2, numeric2, xpos2, ypos2, tpos2, energy2)

#Generate Plots -------------------------------------------------

fig, ax = plt.subplots()
ax.plot(xpos1, ypos1, '-', label='Planet X')
ax.plot(xpos2, ypos2, '-', label='Planet Y')

#ax.plot(tpos1, energy1, '-', label='Energy Planet X')
#ax.plot(tpos2, energy2, '--', label='Energy Planet Y')

ax.set(xlabel='x (a.u.)', ylabel='y (a.u.)', title='Two planets')
Esempio n. 11
0

# BEGINNING-OF-EXECUTION
deltat, num_method = .001, "Euler-Cromer"
x0, y0, v0, a0 = 1., .0, .9, 90
r0 = np.sqrt(x0**2 + y0**2)
v0 = 1.3 * np.sqrt(GM / r0)

# create free-falling Particle
sim_params = GM
planet = pt.Particle("Earth", x0, y0, v0, a0)

the_force = fr.Forces(newton_again, sim_params)
planet.set_force(the_force)

intor = sol.Solver(planet, num_method, deltat)
xvac, yvac, tvac = integrate(intor)

print("x", len(xvac), "y", len(xvac))

# generate plots
fig, ax = plt.subplots()
label = 'x0 = %.2f, y0 = %.2f, v0 = %.2f, a0 = %.2f' % (x0, y0, v0, a0)
ax.plot(xvac, yvac, '-', label=label)

ax.set_aspect('equal')
ax.set(xlabel='x (AU)', ylabel='y (AU)', title='Real free falling')
ax.grid()

plt.legend()
plt.show()
        tpos.append(tc)
        obj.do_step()

    return xpos, ypos, tpos


# BEGINNING-OF-EXECUTION
deltat, num_method = .005, "Midpoint"
m, x0, y0, v0, a0 = 1., 0., .0, 1., 75

# create free-falling Particle
sim_params = pt.grav_  # gravity
vacuum = pt.Particle(x0, y0, v0, a0)
the_force = fr.Forces(free_falling, sim_params)
vacuum.set_force(the_force)
intgr = sol.Solver(vacuum, num_method, deltat)
xvac, yvac, tvac = integrate(intgr)

# create falling Particle with linear drag
sim_params = m, pt.grav_, C_DRAG  # mass, gravity, drag
linear = pt.Particle(x0, y0, v0, a0)
the_force = fr.Forces(linear_drag, sim_params)
linear.set_force(the_force)
intgr = sol.Solver(linear, num_method, deltat)
xlin, ylin, tlin = integrate(intgr)

# create falling Particle with quadratic drag
sim_params = m, pt.grav_, C_DRAG  # mass, gravity, drag
qdatic = pt.Particle(x0, y0, v0, a0)
the_force = fr.Forces(quadratic_drag, sim_params)
qdatic.set_force(the_force)
Esempio n. 13
0

# BEGINNING-OF-EXECUTION
deltat = .01
m, x0, y0, v0, a0 = 1., 0., .0, 1., 45
sim_params = m, pt.grav_, pt.drag_  # mass, gravity, drag

# create Particle and set force
ball = pt.Particle(x0, y0, v0, a0, m)
ball_force = fr.Forces(resistive_falling, sim_params)
ball.set_force(ball_force)
print("Projectile:", ball)

# ########## do time evolution ##########
# create an Euler solver to evolve Particle
euler = sol.Solver(ball, "Euler", deltat)
print("Euler", euler)
xeul, yeul, teul = integrate(euler)

# create an Euler-Cromer solver to evolve Particle
ball.set_state_angle(x0, y0, v0, a0, 0.)
euler_cromer = sol.Solver(ball, "Euler-Cromer", deltat)
print("Euler-Cromer:", euler_cromer)
xeuc, yeuc, teuc = integrate(euler_cromer)

# create an Midpoint solver to evolve Particle
ball.set_state_angle(x0, y0, v0, a0, 0.)
midpoint = sol.Solver(ball, "Midpoint", deltat)
print("Midpoint", midpoint)
xmid, ymid, tmid = integrate(midpoint)
planet_3 = pt.Particle("Planet Y", x0, y0, v0, a0, m)
planet_3.set_force(fr.Forces(grav_force, sim_params_3))

planet_4 = pt.Particle("Planet Y", x0, y0, v0, a0, m)
planet_4.set_force(fr.Forces(grav_force, sim_params_4))

planet_5 = pt.Particle("Planet Y", x0, y0, v0, a0, m)
planet_5.set_force(fr.Forces(grav_force, sim_params_5))

t = []
angles_1, angles_2, angles_3, angles_4, angles_5 = [], [], [], [], []
graph_angles_1, graph_angles_2, graph_angles_3, graph_angles_4, graph_angles_5 = [], [], [], [], []
graph_time = []

numeric_1 = sv.Solver(planet_1, "Euler-Cromer", deltat)
euler_cromer(planet_1, numeric_1, angles_1)

numeric_2 = sv.Solver(planet_2, "Euler-Cromer", deltat)
euler_cromer(planet_2, numeric_2, angles_2)

numeric_3 = sv.Solver(planet_3, "Euler-Cromer", deltat)
euler_cromer(planet_3, numeric_3, angles_3)

numeric_4 = sv.Solver(planet_4, "Euler-Cromer", deltat)
euler_cromer(planet_4, numeric_4, angles_4)

numeric_5 = sv.Solver(planet_5, "Euler-Cromer", deltat)
euler_cromer(planet_5, numeric_5, angles_5)

val = True