Advertisement
gronke

em hw 4

Mar 12th, 2013
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.54 KB | None | 0 0
  1. import numpy
  2. import pylab
  3.  
  4. #Defining constants#
  5.  
  6.  
  7. N = 80
  8.  
  9. R = 0.025
  10. rhonot = 1.0*10**10
  11. wnot = 1.0*10**-3
  12. mu0 = 4*numpy.pi*10**-7
  13. e0 = 8.85*10**-12
  14. c = 1/numpy.sqrt(mu0*e0)
  15. L = 0.1
  16. h = L/N
  17. Toff = 8.0*10**-11
  18. timer = 0.
  19. dt = (0.25*h)/c
  20. ntot = 30
  21. ttot = ntot*dt
  22.  
  23. #Creating grid of data points#
  24. grid = numpy.arange(0,2*L+.001,h)
  25. x = numpy.zeros(grid.size)
  26. y = numpy.zeros(grid.size)
  27. z = numpy.zeros(grid.size)
  28. for i in range(0,grid.size):
  29.         x[i] = -L + i*h
  30.         y[i] = -L + i*h
  31.         z[i] = -L + i*h
  32.        
  33. #Creating 3d vectors of all fields#
  34. ex = numpy.zeros([grid.size, grid.size, grid.size])
  35. ey = numpy.zeros([grid.size, grid.size, grid.size])
  36. ez = numpy.zeros([grid.size, grid.size, grid.size])
  37. bx = numpy.zeros([grid.size, grid.size, grid.size])
  38. by = numpy.zeros([grid.size, grid.size, grid.size])
  39. bz = numpy.zeros([grid.size, grid.size, grid.size])
  40. ehx = numpy.zeros([grid.size, grid.size, grid.size])
  41. ehy = numpy.zeros([grid.size, grid.size, grid.size])
  42. ehz = numpy.zeros([grid.size, grid.size, grid.size])
  43. bhx = numpy.zeros([grid.size, grid.size, grid.size])
  44. bhy = numpy.zeros([grid.size, grid.size, grid.size])
  45. bhz = numpy.zeros([grid.size, grid.size, grid.size])
  46. Jx = numpy.zeros([grid.size, grid.size, grid.size])
  47. Jy = numpy.zeros([grid.size, grid.size, grid.size])
  48. Jz = numpy.zeros([grid.size, grid.size, grid.size])
  49. Jhx = numpy.zeros([grid.size, grid.size, grid.size])
  50. Jhy = numpy.zeros([grid.size, grid.size, grid.size])
  51. Jhz = numpy.zeros([grid.size, grid.size, grid.size])
  52. estore = numpy.zeros([grid.size, grid.size, grid.size])
  53. bstore = numpy.zeros([grid.size, grid.size, grid.size])
  54.  
  55. #Beginning loop#
  56. while timer < ttot:
  57.         print timer/ttot*100
  58.         timer = timer + dt
  59.      #  print timer
  60. #Calculating n+1/2 Time step#
  61.         for i in range(1,x.size-1):
  62.                 for j in range(1,x.size-1):
  63.                         for k in range(1,x.size-1):
  64.                                 if (numpy.sqrt(x[i]**2 + y[j]**2 + z[k]**2) <= R) and (timer <= Toff):
  65.                                         Jhx[i,j,k] = (1./2)*(rhonot*wnot)*(1 + numpy.cos(numpy.pi*numpy.sqrt(x[i]**2 + y[j]**2 + z[k]**2)/R))*(-y[j])
  66.                                         Jhy[i,j,k] = (1./2)*(rhonot*wnot)*(1 + numpy.cos(numpy.pi*numpy.sqrt(x[i]**2 + y[j]**2 + z[k]**2)/R))*(x[i])
  67.                                         Jhz[i,j,k] = 0
  68.                                        
  69.                                 else:
  70.                                         Jhx[i,j,k] = 0.
  71.                                         Jhy[i,j,k] = 0.
  72.                                         Jhz[i,j,k] = 0.
  73.                        
  74.                                 ehx[i,j,k] = ex[i,j,k] + (dt/(4*mu0*e0*h))*(bz[i,j+1,k] - bz[i,j-1,k] - by[i,j,k+1] + by[i,j,k-1]) - (dt/(2.*e0))*Jx[i,j,k]
  75.                                 ehy[i,j,k] = ey[i,j,k] + (dt/(4*mu0*e0*h))*(bx[i,j,k+1] - bx[i,j,k-1] - bz[i+1,j,k] + bz[i-1,j,k]) - (dt/(2.*e0))*Jy[i,j,k]
  76.                                 ehz[i,j,k] = ez[i,j,k] + (dt/(4*mu0*e0*h))*(by[i+1,j,k] - by[i-1,j,k] - bx[i,j+1,k] + bx[i,j-1,k]) - (dt/(2.*e0))*Jz[i,j,k]
  77.  
  78.                                 bhx[i,j,k] = bx[i,j,k] - (dt/(4*h))*(ez[i,j+1,k] - ez[i,j-1,k] - ey[i,j,k+1] + ey[i,j,k-1])
  79.                                 bhy[i,j,k] = by[i,j,k] - (dt/(4*h))*(ex[i,j,k+1] - ex[i,j,k-1] - ez[i+1,j,k] + ez[i-1,j,k])
  80.                                 bhz[i,j,k] = bz[i,j,k] - (dt/(4*h))*(ey[i+1,j,k] - ey[i-1,j,k] - ex[i,j+1,k] + ex[i,j-1,k])
  81.                                
  82. #Calculating n+1 Time step#          
  83.         for i in range(1,x.size-1):
  84.                 for j in range(1,x.size-1):
  85.                         for k in range(1,x.size-1):
  86.                                 if (numpy.sqrt(x[i]**2 + y[j]**2 + z[k]**2) <= R) and (timer <= Toff):
  87.                                         Jx[i,j,k] = (1./2)*(rhonot*wnot)*(1 + numpy.cos(numpy.pi*numpy.sqrt(x[i]**2 + y[j]**2 + z[k]**2)/R))*(-y[j])
  88.                                         Jy[i,j,k] = (1./2)*(rhonot*wnot)*(1 + numpy.cos(numpy.pi*numpy.sqrt(x[i]**2 + y[j]**2 + z[k]**2)/R))*(x[i])
  89.                                         Jz[i,j,k] = 0
  90.                                        
  91.                                 else:
  92.                                         Jx[i,j,k] = 0.
  93.                                         Jy[i,j,k] = 0.
  94.                                         Jz[i,j,k] = 0.
  95.                                 ex[i,j,k] = ex[i,j,k] + (dt/(2*mu0*e0*h))*(bhz[i,j+1,k] - bhz[i,j-1,k] - bhy[i,j,k+1] + bhy[i,j,k-1]) - (dt/e0)*Jhx[i,j,k]
  96.                                 ey[i,j,k] = ey[i,j,k] + (dt/(2*mu0*e0*h))*(bhx[i,j,k+1] - bhx[i,j,k-1] - bhz[i+1,j,k] + bhz[i-1,j,k]) - (dt/e0)*Jhy[i,j,k]
  97.                                 ez[i,j,k] = ez[i,j,k] + (dt/(2*mu0*e0*h))*(bhy[i+1,j,k] - bhy[i-1,j,k] - bhx[i,j+1,k] + bhx[i,j-1,k]) - (dt/e0)*Jhz[i,j,k]
  98.  
  99.                                 bx[i,j,k] = bx[i,j,k] - (dt/(2*h))*(ehz[i,j+1,k] - ehz[i,j-1,k] - ehy[i,j,k+1] + ehy[i,j,k-1])
  100.                                 by[i,j,k] = by[i,j,k] - (dt/(2*h))*(ehx[i,j,k+1] - ehx[i,j,k-1] - ehz[i+1,j,k] + ehz[i-1,j,k])
  101.                                 bz[i,j,k] = bz[i,j,k] - (dt/(2*h))*(ehy[i+1,j,k] - ehy[i-1,j,k] - ehx[i,j+1,k] + ehx[i,j-1,k])
  102.      
  103.  
  104. #Plot#
  105. half = numpy.around(x.size/1.9999)-1
  106. estore = numpy.sqrt(e0)*ey[:,half,half]
  107. bstore = bz[:,half,half]/numpy.sqrt(mu0)
  108. pylab.figure(str(N))
  109. pylab.title('Fields on the x-axis at t=8.34*10^-11s')
  110. pylab.ylabel('Fields')
  111. pylab.xlabel('x')
  112. #pylab.xlim(-.10,.10)
  113. #pylab.ylim(-0.6,1.0)
  114. pylab.plot(x,estore,'b.-',x,bstore,'r.-')
  115. pylab.savefig(str(N))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement