Advertisement
Guest User

Untitled

a guest
Jul 21st, 2020
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.04 KB | None | 0 0
  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. from itertools import combinations
  4.  
  5. G = 1
  6. q_n = 10 # number of bodies
  7. N = 1000
  8. tau = 10000
  9. dt = tau/float(N-1)
  10. t = 0
  11.  
  12. class Body:
  13.     '''Class representing a 2D particle'''
  14.     def __init__(self, x, y, vx, vy, ax, ay, m):
  15.  
  16.         self.r = np.array([x, y], dtype=float)
  17.         self.v = np.array([vx, vy], dtype=float)
  18.         self.a = np.array([ax, ay], dtype=float)
  19.         self.m = m
  20.    
  21.  
  22.     def acc(self, other):
  23.         '''
  24.        newtons law of universal gravitation
  25.        and newtons 2nd law gives a = F/m
  26.        '''
  27.         d = (other.r - self.r)
  28.  
  29.         if not np.all(d):
  30.  
  31.             tmp = 0
  32.  
  33.         else:
  34.  
  35.             tmp = ((G * other.m)/(np.linalg.norm(d))**2)*(d/np.linalg.norm(d))
  36.  
  37.         self.a += tmp
  38.  
  39.  
  40.     def leapfrog(self):
  41.         '''leapfrog integrator, for solving the movement
  42.        and velocity of a given particle with an acceleration.
  43.        '''
  44.         v_half = self.v * dt/2
  45.         r_next = self.r + v_half * dt
  46.         v_next = v_half + self.a * dt
  47.  
  48.         self.r = r_next
  49.         self.v = v_next
  50.  
  51.         return r_next, v_next
  52.  
  53. particles = [Body(np.random.uniform(-1e3, 1e3), np.random.uniform(-1e3, 1e3), np.random.uniform(-1e1, 1e1), np.random.uniform(-1e1, 1e1), 0, 0, 1) for i in range(q_n)]
  54.  
  55. '''
  56. Listor som innehÄller q_n antal listor,
  57. varje element har N (time step) element
  58. '''
  59. xdata = [np.zeros([N,1]) for i in range(q_n)]
  60. ydata = [np.zeros([N,1]) for i in range(q_n)]
  61. vxdata = [np.zeros([N,1]) for i in range(q_n)]
  62. vydata = [np.zeros([N,1]) for i in range(q_n)]
  63.  
  64. # computation loop
  65. for i in range(N):
  66.  
  67.     pairs = combinations(range(q_n), 2)
  68.    
  69.     for j, k in pairs:
  70.        
  71.         Body.acc(particles[j], particles[k])
  72.    
  73.     for n in range(q_n):
  74.  
  75.         tmp1, tmp2 = Body.leapfrog(particles[n])
  76.         xdata[n][i] = tmp1[0]
  77.         ydata[n][i] = tmp1[1]
  78.         vxdata[n][i] = tmp2[0]
  79.         vydata[n][i] = tmp2[1]
  80.  
  81. for i in range(q_n):
  82.     plt.plot(xdata[i], ydata[i])
  83.  
  84. plt.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement