class SolarSystem(): def __init__(self, total_time, dt): self.solver = Solver(total_time, dt) self.planet = Planet(self.solver, 3e-6, [1, 0], [0, 2 * np.pi]) self.sun = Planet(self.solver, 1, [0, 0], [0, 0]) self.planet.accelerations[0, :] = self.planet.get_acceleration( [self.sun], 0) def run(self): self.solver.velocity_verlet(self.planet, self.sun) #self.solver.forward_euler(self.planet, self.sun) plt.plot(self.planet.positions[:, 0], self.planet.positions[:, 1]) plt.xlabel("x [AU]") plt.ylabel("y [AU]") plt.legend(["Earth"]) plt.tight_layout() plt.savefig("circular_orbit.png") plt.show() def test_energy_conservation(self): kinetic_energies = 0.5 * self.planet.mass * ( self.planet.velocities[:, 0]**2 + self.planet.velocities[:, 1]**2) potential_energies = -4 * np.pi**2 * self.sun.mass * self.planet.mass / np.sqrt( self.planet.positions[:, 0]**2 + self.planet.positions[:, 1]**2) angular_momentum = self.planet.mass * np.cross(self.planet.positions, self.planet.velocities) x = np.linspace(0, self.solver.total_time, self.solver.time_steps) plt.plot(x, kinetic_energies, x, potential_energies, x, angular_momentum) plt.xlabel("Time[Years]") plt.ylabel('Energy[$M_\odot AU^2/yr^2$]') plt.legend(["Kinetic energy", "Potential energy", "Angular momentum"]) plt.tight_layout() plt.savefig("energy_conservation_elliptic.png") plt.show()