搜索附件  
头雁微网 附件中心 技术应用 情报信息 二维金属圆柱仿真.m
板块导航
附件中心&附件聚合2.0
For Discuz! X3.5 © hgcad.com

二维金属圆柱仿真.m

 

二维FDTD TE波圆柱程序:
我对程序白痴的很,这个是网络上找到的一个程序,如果侵犯了原作者的权益,请通知我,我将及时处理
现在把它分享出来,希望对有需要的人有帮助

  1. % 二维FDTD  TE波圆柱仿真
  2. clear all;
  3. close all;
  4. clc;
  5. % 定义常数
  6. %-------------------------
  7. c = 3.0E8;
  8. mu = 1.2566E-6;
  9. eps = 8.8542E-12;
  10. f = 1E9;                                                                      %频率
  11. lambda = c/f;                                                                 %波长
  12. w_max = 2*pi*2*f;
  13. cylinder_circ = lambda*8;                                                    %圆柱的周长,改变圆柱的尺寸
  14. cylinder_rad = cylinder_circ/2/pi;                                            %圆柱的半径
  15.      
  16. % 定义FDTD网格
  17. %----------------------
  18. del_s = lambda/20;                                                            %每最小波长20个采样点         
  19. del_t = 0.5*del_s/c;                                                          %迭代时间步长
  20. dim_s = 5;
  21. s_range = dim_s * lambda;                     
  22. s_range = ceil(s_range / del_s) * del_s;                                      %计算区域的长度
  23. s_cells = s_range / del_s;
  24. cells = s_cells;                                                              %划分的网格数
  25. nodes = cells+1;                                                              %采样点数
  26. % 定义时间脉冲源
  27. %----------------------------------------
  28. dev_larger = 2;
  29. dev = 1/w_max*dev_larger;
  30. dead = 4;
  31. mean = dev*dead;
  32. t = linspace(0,9*dev,1000);
  33. term = (t-mean);
  34. pulse = (-1/sqrt(2*pi)/dev^3).*term;
  35. pulse = pulse.* exp((-1/2/dev^2).*term.^2);
  36. pulsenorm = max(pulse);
  37. p = s_range / 2;
  38. dead_s = 1.5;
  39. dev_s = s_range / 4 / dead_s;
  40. spacial = linspace(0,s_range,nodes);                                          %在空间划分采样点数
  41. taper = 1/sqrt(2*pi)/dev_s*exp(-1*(spacial - p).^2/2/dev_s^2);
  42. taper = taper./max(taper);
  43. figure(1);
  44. plot(spacial,taper,'c');
  45. title('脉冲源');
  46. xlabel('x轴');
  47. ylabel('Pluse');
  48. % TE波的分量初始化
  49. %----------------------------------------
  50. Ex = zeros(nodes,nodes);
  51. Ey = zeros(nodes,nodes);
  52. Hz = zeros(nodes,nodes);
  53. % 加入金属圆柱
  54. %--------------------------------
  55. center_s = round(nodes/2);
  56. cn = center_s*del_s;
  57. PEC = ones(nodes,nodes);                                                       %nodes*nodes的全1矩阵
  58. for k=1:nodes,
  59.   for j=1:nodes,
  60.     rad = sqrt((k*del_s - cn)^2 + (j*del_s - cn)^2);                           %加入圆柱也可以改为方柱
  61.     if (rad <= cylinder_rad),  
  62.     PEC(k,j) = 0;
  63.     end;
  64.   end;
  65. end;
  66. figure(2);
  67. contour(PEC);                                                                 %等高绘图
  68. title('金属圆柱');
  69. % 计算参数设置
  70. %--------------------------------
  71. done = 1;
  72. n = 0;
  73. F = 0;
  74. c_mu = del_t/mu/del_s;
  75. c_eps = del_t/eps/del_s;
  76. c_MUR = (c*del_t - del_s)/(c*del_t + del_s);
  77. frames=80;
  78. figure(3);
  79. axis([0 nodes 0 nodes 0 1]);
  80. FDTD_M = moviein(frames);
  81. while (done~=0),
  82.   % 初始化
  83.     Ex_o = Ex;
  84.     Ey_o = Ey;
  85.     Hz_o = Hz;
  86.   % 电场值的中心差分
  87.     Hterm = c_eps*(Hz(2:nodes-1,1:nodes) - Hz(1:nodes-2,1:nodes));
  88.     Ex(2:nodes-1,1:nodes) = Ex(2:nodes-1,1:nodes) + Hterm;
  89.     Hterm = c_eps*(Hz(1:nodes,1:nodes-2) - Hz(1:nodes,2:nodes-1));
  90.     Ey(1:nodes,2:nodes-1) = Ey(1:nodes,2:nodes-1) + Hterm;
  91.    %加入脉冲源
  92.     t = n*del_t;
  93.     term = (t-mean);
  94.     pulse = (-1/sqrt(2*pi)/dev^3)*term;
  95.     pulse = pulse* exp((-1/2/dev^2)*term^2) / pulsenorm;
  96.     source = pulse * ones(1,nodes) .* taper; % DBD correction
  97.    
  98.     %t = 80;                                                                   %可选择高斯脉冲
  99.     %term = (n-t);
  100.     %pulse =exp(-4*pi*term^2/(10^2)) ;
  101.     %source = pulse * ones(1,nodes) ;
  102.    
  103.     Ex(2,1:nodes) = Ex(2,1:nodes) + source;
  104.   % 4条边界线的处理
  105.     % 左边
  106.     Ex(1,1:nodes) = Ex_o(2,1:nodes) + c_MUR*(Ex(2,1:nodes) - Ex(1,1:nodes));
  107.     % 上边
  108.     Ey(1:nodes,nodes) = Ey_o(1:nodes,nodes-1) + c_MUR*(Ey(1:nodes,nodes-1) - Ey(1:nodes,nodes));
  109.     % 右边
  110.     Ex(nodes,1:nodes) = Ex_o(nodes-1,1:nodes) + c_MUR*(Ex(nodes-1,1:nodes) - Ex(nodes,1:nodes));
  111.     % 下边
  112.     Ey(1:nodes,1) = Ey_o(1:nodes,2) + c_MUR*(Ey(1:nodes,2) - Ey(1:nodes,1));
  113.   % 加入金属圆柱
  114.     Ex = Ex.*PEC;
  115.     Ey = Ey.*PEC;
  116.     Hz = Hz.*PEC;
  117.   % 磁场值的中心差分
  118.     Eterm1 = c_mu*(Ex(2:nodes,1:nodes-1) - Ex(1:nodes-1,1:nodes-1));
  119.     Eterm2 = c_mu*(Ey(1:nodes-1,1:nodes-1) - Ey(1:nodes-1,2:nodes));
  120.     Hz(1:nodes-1,1:nodes-1) = Hz(1:nodes-1,1:nodes-1) + Eterm1 + Eterm2;
  121.   % 描绘场分布
  122.     cut = 3;
  123.     figure(3);
  124.     clf;
  125.     if (abs(round(n/cut) - (n/cut)) == 0),                               %每5个时间步进行绘图         
  126.       F = F + 1;                                                         %记录绘图的步数
  127.       mesh(abs(Ex + i*Ey));                                              %电场的幅值
  128.       axis([0 nodes 0 nodes 0 1]);
  129.       FDTD_M(:,F) = getframe;
  130.     end;
  131.   % 进行时间迭代,done=0时停止计算
  132.   if (done ~= 0),
  133.     n = n+1;                                                             %记录迭代的时间步数
  134.   end;
  135.   if (n == cut*frames),
  136.     done = 0;
  137.   end;
  138. end;
  139. figure(4);
  140. mesh(abs(Ex + i*Ey));
  141.   % figure(5);
  142.   %title('幅值分布图');
  143.   %surface(abs(Ex + i*Ey));
  144.   %shading flat;
  145.    
  146.   %figure(6);
  147.   %title('相位分布图');
  148.   %surface(angle(Ex + i*Ey));
  149.   %shading interp;
  150. clear all
复制代码
:11bb
先看一看
w_max = 2*pi*2*f;
为什么乘以2?
代码不错,自适应柱体计算啊,^_^
:31bb 看会愣是只知道在干嘛,不知道细节:31bb
乘以2是不是考虑采样点的原因,nyquist定理?:9de 不确定。
这个是转过来的,大家分析下吧,我对这个一窍不通,呵呵
w_max按理解是最大计算角频率,为下面计算时间步长而设
但这样计算时间步长有点奇怪
没有相应文档说明确实比较难理解别人的程序,看看:29bb
它那个加的高斯源看起来好艰涩~:25bb
运行的结果看起来也稀里糊涂的,没有你那个TM模式看起来概念清晰
加的是一条线上的高斯平面波源
:11bb :11bb :11bb
不错不错,楼主幸苦了
楼主辛苦了!
客服中心 搜索
关于我们
关于我们
关注我们
联系我们
帮助中心
资讯中心
企业生态
社区论坛
服务支持
资源下载
售后服务
推广服务
关注我们
官方微博
官方空间
官方微信
返回顶部