fdtd.m
上传用户:szahd2008
上传日期:2020-09-25
资源大小:1275k
文件大小:4k
源码类别:

传真(Fax)编程

开发平台:

Matlab

  1. clear all
  2. mu_o = pi*4.0e-7;                 % free space permeability
  3. epsilon_o = 8.854e-12;            % free space permittivity
  4. c = 1.0/sqrt(mu_o * epsilon_o);   % speed of light
  5. length_x = 2.0;                   % x-width of region
  6. nx = 200;                         % number of x grid points 
  7. dx = length_x / (nx - 1);         % x grid size
  8. x = linspace(0.0, length_x, nx);  % x array
  9. length_y = 2.0;                   % y-width of region 
  10. ny = 200;                         % number of y grid points
  11. dy = length_y / (ny - 1);         % y grid size
  12. y = linspace(0.0, length_y, ny);  % y array
  13. max_timestep = c*sqrt(1.0/(dx*dx) + 1.0/(dy*dy)); % max tstep for FDTD
  14. max_timestep = 1.0/max_timestep;
  15. delta_t = 0.5*max_timestep;      % delta t a little less than max tstep
  16. er = 8.0;                         % relative permittivity of slab
  17. epsilon = epsilon_o*ones(ny, nx); % epsilon array
  18. mu = mu_o*ones(ny - 1, nx - 1);   % mu array
  19. a1 = [0.5 1.5 1.5 0.5 0.5];       % for drawing slab on plot 
  20. a2 = [0.6 0.6 0.8 0.8 0.6];       % for drawing slab on plot
  21. x1 = fix(0.5/dx)+1;               % grid extents for slab
  22. y1 = fix(0.6/dy);                 % grid extents for slab
  23. x2 = fix(1.5/dx)+1;               % grid extents for slab
  24. y2 = fix(0.8/dy);                 % grid extents for slab
  25. epsilon(y1:y2,x1:x2) = er*epsilon_o;  % set epsilon inside slab
  26. j_x = nx/2;                       % x location of current source
  27. j_y = ny/2;                       % y location of current source
  28. e_z_1 = zeros(ny, nx);          % initialize array. e_z at boundaries will remain 0
  29. h_x_1 = zeros(ny - 1, nx - 1); % initialize array
  30. h_y_1 = zeros(ny - 1, nx - 1); % initialize array
  31. e_z_2 = zeros(ny, nx); % initialize array. e_z at boundaries will remain 0
  32. h_x_2 = zeros(ny - 1, nx - 1); % initialize array
  33. h_y_2 = zeros(ny - 1, nx - 1); % initialize array
  34. ntim = 300;                     % number of desired time points
  35. f_o = 600e6;                    % base frequency for pulse
  36. tau = 1.0/(4.0*pi*f_o);         % tau for pulse
  37. for i_t = 1:ntim
  38.    
  39.    time(i_t) = i_t * delta_t;
  40.    
  41.    i_t
  42.    time(i_t)
  43.    
  44.    if time(i_t) > 3.36e-9
  45.        break
  46.    end
  47.    
  48.    jz(i_t) = (4.0 * (time(i_t)/tau)^3 - (time(i_t)/tau)^4) * exp(-time(i_t)/tau);
  49.    
  50.    for i_x = 2:nx-1 % ez at boundaries remains zero
  51.       for i_y = 2:ny-1 % ez at boundaries remains zero
  52.          
  53.          j = 0.0;
  54.          if i_x == j_x
  55.             if i_y == j_y
  56.                j = jz(i_t);
  57.             end
  58.          end
  59.          
  60.          if rem(i_t, 2) == 1
  61.             a = 1.0/dx*(h_y_1(i_y, i_x) - h_y_1(i_y, i_x - 1));
  62.             b = 1.0/dy*(h_x_1(i_y, i_x) - h_x_1(i_y - 1, i_x));
  63.             e_z_2(i_y, i_x) = e_z_1(i_y, i_x) + (delta_t/epsilon(i_y, i_x))*(a - b) - j;
  64.          else
  65.             a = 1.0/dx*(h_y_2(i_y, i_x) - h_y_2(i_y, i_x - 1));
  66.             b = 1.0/dy*(h_x_2(i_y, i_x) - h_x_2(i_y - 1, i_x));
  67.             e_z_1(i_y, i_x) = e_z_2(i_y, i_x) + (delta_t/epsilon(i_y, i_x))*(a - b) - j;
  68.          end
  69.          
  70.       end
  71.    end
  72.    
  73.    for i_x = 1:nx-1
  74.       for i_y = 1:ny-1
  75.          
  76.          if rem(i_t, 2) == 1
  77.             h_x_2(i_y, i_x) = h_x_1(i_y, i_x) - (delta_t/mu(i_y, i_x)/dy)*(e_z_2(i_y + 1, i_x) - e_z_2(i_y, i_x));
  78.             h_y_2(i_y, i_x) = h_y_1(i_y, i_x) + (delta_t/mu(i_y, i_x)/dx)*(e_z_2(i_y, i_x + 1) - e_z_2(i_y, i_x));
  79.          else
  80.             h_x_1(i_y, i_x) = h_x_2(i_y, i_x) - (delta_t/mu(i_y, i_x)/dy)*(e_z_1(i_y + 1, i_x) - e_z_1(i_y, i_x));
  81.             h_y_1(i_y, i_x) = h_y_2(i_y, i_x) + (delta_t/mu(i_y, i_x)/dx)*(e_z_1(i_y, i_x + 1) - e_z_1(i_y, i_x));
  82.          end
  83.       end
  84.    end
  85.    
  86.    pcolor(x, y, abs(e_z_2))
  87.    line(a1, a2, 'Linewidth', 1.0, 'Color', 'white');
  88.    xlabel('X (m)')
  89.    ylabel('Y (m)')
  90.    title('Ez (V/m)')
  91.    axis square
  92.    shading interp
  93.    colormap gray
  94.    caxis([0 .1])
  95.    %axis([0 2 0 2 0 .1])
  96.    fr(i_t) = getframe;
  97. end