Advertisement
gronke

PY525 hw 3

Oct 11th, 2013
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import numpy
  2.  
  3. boxsize = 10.
  4. boxdiv = (10-10*0.1)/2
  5. num = 16
  6. snum = numpy.int(numpy.sqrt(num))
  7. x = numpy.linspace(-boxdiv,boxdiv,snum)
  8. y = numpy.linspace(-boxdiv,boxdiv,snum)
  9. dt = 0.01
  10. time = 4
  11. ttime = numpy.arange(0,time+0.00001,dt)
  12.  
  13. p = numpy.zeros((num,ttime.size,2))
  14.  
  15. for i in range(0,snum,1):
  16.     for j in range(0,snum,1):
  17.         p[(i+j*snum),0,0,] = x[i]
  18.         p[(i+j*snum),0,1] = y[j]
  19.        
  20. #Choose random velocities
  21. v = numpy.zeros((num,2))
  22.  
  23. for i in range(0,num,1):
  24.     flipx = numpy.random.rand()
  25.     if flipx > .5: v[i,0] = flipx*3.5
  26.     else: v[i,0] = flipx*-3.5
  27.     flipy = numpy.random.rand()
  28.     if flipy > .5: v[i,1] = flipy*3.5
  29.     else: v[i,1] = flipx*-3.5
  30.  
  31. for i in range(1,ttime.size,1):
  32.     for j in range(0,num,1):
  33.         #Assign positions based on velocity
  34.         position = p[j,i-1,:]
  35.        
  36.         for k in range(0,num,1):
  37.             r = numpy.sqrt((position[0]-p[k,i-1,0])**2+(position[1]-p[k,i-1,1])**2)
  38.             if (r <= 3) and (j != k):
  39.                 v[j,0] = -24*(2*(1/(r**13))+1/(r**7))*dt
  40.                 v[j,1] = -24*(2*(1/(r**13))+1/(r**7))*dt
  41.         position[0] += v[j,0]*dt
  42.         position[1] += v[j,1]*dt
  43.        
  44.         #Flip position if on a border
  45.         if (position[0] >= 5 or position[0] <= -5):
  46.             position[0] = position[0]*-1
  47.         if (position[1] >= 5 or position[1] <= -5):
  48.             position[1] = position[1]*-1  
  49.              
  50.         p[j,i,:] = position
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement