搜索附件  
板块导航
附件中心&附件聚合2.0
For Discuz! X3.5 © hgcad.com

程序.txt

 

在FDTD计算时出现反射是,应怎样调试程序:
        在用UPML吸收边界条件,出现了反射应怎样调试程序?一般的方法是什么?
学习ing!!!
从简单的复杂,先检查FDTD程序有没有问题,可以选用简单的Mur吸收条件,调试程序;FDTD程序经调试正确后,吸收边界条件改为UPML边界,此时出问题自然是UPML处了,使用debug逐步调试,结合场分布分析检测出错位置。
非常感谢版主的指导,我会逐步调试的
在学习用UPML作为吸收边界条件计算时,在微网上下了一段经典的程序(3D的UPML程序),此程序上是(绝缘介质——UPML的情况),我将程序改写成了导电介质——UPML的情况后,发现程序的迭代出现了问题。在调试的时候我将电导率(sigma取0),理论上应该和经典程序上的一样,但实际的程序上是无法迭代的
我将我改写的程序一并传上
三维UPML的FDTD公式:导电介质——UPML情形
我觉得是程序中电场的迭代下面的迭代出现了问题:
ex(:,2:je_tot,2:ke_tot)=C3ex(:,2:je_tot,2:ke_tot).*ex(:,2:je_tot,2:ke_tot)+...
                            C41ex(:,2:je_tot,2:ke_tot).*(C5ex(:,2:je_tot,2:ke_tot).*px(:,2:je_tot,2:ke_tot)-...
                            C6ex(:,2:je_tot,2:ke_tot).*pstore(:,2:je_tot,2:ke_tot));
但这个和葛老师书上的公式一致,我就不知道该如何处理这个问题
tingo 发表于 2012-12-4 22:09
不客气,有问题欢迎在此版区讨论!

在学习用UPML作为吸收边界条件计算时,在微网上下了一段经典的程序(3D的UPML程序),此程序上是(绝缘介质——UPML的情况),我将程序改写成了导电介质——UPML的情况后,发现程序的迭代出现了问题。在调试的时候我将电导率(sigma取0),理论上应该和经典程序上的一样,但实际的程序上是无法迭代的
tingo 发表于 2012-12-4 22:09
不客气,有问题欢迎在此版区讨论!

我将我改写的程序一并传上
tingo 发表于 2012-12-4 22:09
不客气,有问题欢迎在此版区讨论!

三维UPML的FDTD公式:导电介质——UPML情形
tingo 发表于 2012-12-4 22:09
不客气,有问题欢迎在此版区讨论!
  1. %--------------------------------------------------
  2. clear;
  3. clc;
  4. close all;
  5. %------------------------------------------------
  6. % Fundamental  constants
  7. %-----------------------------------------------
  8. cc=3.0e8;                            %(cc 光波的传播速度)
  9. muz=4.0*pi*1.0e-7;                   %(muz 真空磁导率)
  10. epsz=1.0/(cc*cc*muz);                %(真空介电常数)
  11. etaz=sqrt(muz/epsz);
  12. %----------------------------------------------
  13. % Material  parameters
  14. %-----------------------------------------------

  15. mur(1)=1.0;
  16. epsr(1)=1.0;
  17. eta=etaz*sqrt(mur(1)/epsr(1));
  18. %-------------------------------------------------
  19. %   Grid parameters
  20. %-------------------------------------------------


  21. ie=137;                                  % x 方向的网格
  22. je=80;                                  % y 方向的网格
  23. ke=20;                                  % z 方向的网格

  24. ih=ie+1;                                % x 方向的边数(节点)
  25. jh=je+1;
  26. kh=ke+1;
  27. upml=10;                                %  UPML层的厚度
  28. ih_bc=upml+1;
  29. jh_bc=upml+1;
  30. kh_bc=upml+1;
  31. ie_tot=ie+2*upml;                       % 总计算区域网格的数目
  32. je_tot=je+2*upml;
  33. ke_tot=ke+2*upml;
  34. ih_tot=ie_tot+1;
  35. jh_tot=je_tot+1;
  36. kh_tot=ke_tot+1;

  37. is=round(ie_tot/2);
  38. js=round(je_tot/2);
  39. ks=round(ke_tot/2);
  40.    
  41. %---------------------------------------------
  42. %    Fundamental grid parameters
  43. %----------------------------------------------
  44. delta=0.01;
  45. % dt=delta*sqrt(epsr*mur)/(2.0*cc);
  46. dt=delta/(2.0*cc);
  47. nmax=50;

  48. %-----------------------------------------------
  49. %  Wave excitation
  50. %-----------------------------------------------
  51. rtau=50.0e-12;
  52. tau=rtau/dt;
  53. ndelay=3*tau;
  54. J0=-1.0*epsz.*10^20;
  55. %-----------------------------------------------
  56. % Initialize field arrays
  57. %------------------------------------------------
  58. ex=zeros(ie_tot, jh_tot, kh_tot);          % the field in main grid
  59. ey=zeros(ih_tot, je_tot, kh_tot);
  60. ez=zeros(ih_tot, jh_tot, ke_tot);

  61. dx=zeros(ie_tot, jh_tot, kh_tot);          % 绝缘介质——UPML中的中间变量D   
  62. dy=zeros(ih_tot, je_tot, kh_tot);
  63. dz=zeros(ih_tot, jh_tot, ke_tot);

  64. px=zeros(ie_tot, jh_tot, kh_tot);          % 导电介质——UPML中的中间变量P'和P,其中p'用表示 (这里是我加上去的)     
  65. py=zeros(ih_tot, je_tot, kh_tot);
  66. pz=zeros(ih_tot, jh_tot, ke_tot);
  67. qx=zeros(ie_tot, jh_tot, kh_tot);      
  68. qy=zeros(ih_tot, je_tot, kh_tot);
  69. qz=zeros(ih_tot, jh_tot, ke_tot);


  70. hx=zeros(ih_tot, je_tot, ke_tot);          % to magnetic field
  71. hy=zeros(ie_tot, jh_tot, ke_tot);
  72. hz=zeros(ie_tot, je_tot, kh_tot);
  73. bx=zeros(ih_tot, je_tot, ke_tot);
  74. by=zeros(ie_tot, jh_tot, ke_tot);
  75. bz=zeros(ie_tot, je_tot, kh_tot);
  76. %------------------------------------------------
  77. %  Initialize update coefficient arays
  78. %--------------------------------------------------
  79. C1ex=zeros(size(ex));
  80. C2ex=zeros(size(ex));
  81. C21ex=zeros(size(ex));                      % 这是导电介质——UPML中的迭代系数(葛德彪老师书上P105页的迭代公式(4-9-16)中的系数)
  82. C3ex=zeros(size(ex));
  83. C4ex=zeros(size(ex));
  84. C41ex=zeros(size(ex));                      % 这是导电介质——UPML中的迭代系数 (葛德彪老师书上P105页的迭代公式(4-9-16)中的系数)                  
  85. C5ex=zeros(size(ex));
  86. C6ex=zeros(size(ex));
  87. C7ex=zeros(size(ex));                       % 这是导电介质——UPML中的迭代系数 (葛德彪老师书上P105页的迭代公式(4-9-13)中的系数)
  88. C8ex=zeros(size(ex));

  89. C1ey=zeros(size(ey));
  90. C2ey=zeros(size(ey));
  91. C21ey=zeros(size(ey));
  92. C3ey=zeros(size(ey));
  93. C4ey=zeros(size(ey));
  94. C41ey=zeros(size(ey));
  95. C5ey=zeros(size(ey));
  96. C6ey=zeros(size(ey));
  97. C7ey=zeros(size(ey));
  98. C8ey=zeros(size(ey));

  99. C1ez=zeros(size(ez));
  100. C2ez=zeros(size(ez));
  101. C21ez=zeros(size(ez));
  102. C3ez=zeros(size(ez));
  103. C4ez=zeros(size(ez));
  104. C41ez=zeros(size(ez));
  105. C5ez=zeros(size(ez));
  106. C6ez=zeros(size(ez));
  107. C7ez=zeros(size(ez));
  108. C8ez=zeros(size(ez));

  109. D1hx=zeros(size(hx));
  110. D2hx=zeros(size(hx));
  111. D3hx=zeros(size(hx));
  112. D4hx=zeros(size(hx));
  113. D5hx=zeros(size(hx));
  114. D6hx=zeros(size(hx));

  115. D1hy=zeros(size(hy));
  116. D2hy=zeros(size(hy));
  117. D3hy=zeros(size(hy));
  118. D4hy=zeros(size(hy));
  119. D5hy=zeros(size(hy));
  120. D6hy=zeros(size(hy));

  121. D1hz=zeros(size(hz));
  122. D2hz=zeros(size(hz));
  123. D3hz=zeros(size(hz));
  124. D4hz=zeros(size(hz));   
  125. D5hz=zeros(size(hz));
  126. D6hz=zeros(size(hz));
  127. %--------------------------------------------------------
  128. %    Update coefficients,as described in section 7.8.2  (have some questions)
  129. %--------------------------------------------------------
  130. C1=1.0;
  131. C2=dt;
  132. C21=1.0;
  133. C3=1.0;
  134. C4=1.0/2.0/epsr(1)/epsr(1)/epsz/epsz;
  135. C41=1.0/2.0/epsr(1)/epsz;
  136. C5=2.0*epsr(1)*epsz;
  137. C6=2.0*epsr(1)*epsz;
  138. C7=1.0;
  139. C8=dt/epsr(1)/epsz;

  140. D1=1.0;
  141. D2=dt;
  142. D3=1.0;
  143. D4=1.0/2.0/epsr(1)/epsz/mur(1)/muz;
  144. D5=2.0*epsr(1)*epsz;
  145. D6=2.0*epsr(1)*epsz;

  146. %-------------------------------------------------------
  147. %   Initialize main grid update coefficients     (considering  the basic cell)
  148. %-------------------------------------------------------
  149. C1ex(:, jh_bc:jh_tot-upml, :)=C1;
  150. C2ex(:, jh_bc:jh_tot-upml, :)=C2;
  151. C21ex(:, jh_bc:jh_tot-upml, :)=C21;
  152. C3ex(:, :, kh_bc:kh_tot-upml)=C3;
  153. C4ex(:, :, kh_bc:kh_tot-upml)=C4;
  154. C41ex(:, :, kh_bc:kh_tot-upml)=C41;
  155. C5ex(ih_bc:ie_tot-upml, :, :)=C5;
  156. C6ex(ih_bc:ie_tot-upml, :, :)=C6;
  157. C7ex(1:ie_tot,1:jh_tot,1:kh_tot)=C7;
  158. C8ex(1:ie_tot,1:jh_tot,1:kh_tot)=C8;

  159. C1ey(:, :, kh_bc:kh_tot-upml)=C1;
  160. C2ey(:, :, kh_bc:kh_tot-upml)=C2;
  161. C21ey(:, :, kh_bc:kh_tot-upml)=C21;
  162. C3ey(ih_bc:ih_tot-upml, :, :)=C3;
  163. C4ey(ih_bc:ih_tot-upml, :, :)=C4;
  164. C41ey(ih_bc:ih_tot-upml, :, :)=C41;
  165. C5ey(:, jh_bc:je_tot-upml, :)=C5;
  166. C6ey(:, jh_bc:je_tot-upml, :)=C6;
  167. C7ey(1:ih_tot,1:je_tot,1:kh_tot)=C7;
  168. C8ey(1:ih_tot,1:je_tot,1:kh_tot)=C8;

  169. C1ez(ih_bc:ih_tot-upml, :, :)=C1;
  170. C2ez(ih_bc:ih_tot-upml, :, :)=C2;
  171. C21ez(ih_bc:ih_tot-upml, :, :)=C21;
  172. C3ez(:, jh_bc:jh_tot-upml, :)=C3;
  173. C4ez(:, jh_bc:jh_tot-upml, :)=C4;
  174. C41ez(:, jh_bc:jh_tot-upml, :)=C41;
  175. C5ez(:, :, kh_bc:ke_tot-upml)=C5;
  176. C6ez(:, :, kh_bc:ke_tot-upml)=C6;
  177. C7ez(1:ih_tot,1:jh_tot,1:ke_tot)=C7;
  178. C8ez(1:ih_tot,1:jh_tot,1:ke_tot)=C8;

  179. D1hx(:, jh_bc:je_tot-upml, :)=D1;
  180. D2hx(:, jh_bc:je_tot-upml, :)=D2;
  181. D3hx(:, :, kh_bc:ke_tot-upml)=D3;
  182. D4hx(:, :, kh_bc:ke_tot-upml)=D4;
  183. D5hx(ih_bc:ih_tot-upml, :, :)=D5;
  184. D6hx(ih_bc:ih_tot-upml, :, :)=D6;

  185. D1hy(:, :, kh_bc:ke_tot-upml)=D1;
  186. D2hy(:, :, kh_bc:ke_tot-upml)=D2;
  187. D3hy(ih_bc:ie_tot-upml, :, :)=D3;
  188. D4hy(ih_bc:ie_tot-upml, :, :)=D4;
  189. D5hy(:, jh_bc:jh_tot-upml, :)=D5;
  190. D6hy(:, jh_bc:jh_tot-upml, :)=D6;

  191. D1hz(ih_bc:ie_tot-upml, :, :)=D1;
  192. D2hz(ih_bc:ie_tot-upml, :, :)=D2;
  193. D3hz(:, jh_bc:je_tot-upml, :)=D3;
  194. D4hz(:, jh_bc:je_tot-upml, :)=D4;
  195. D5hz(:, :, kh_bc:kh_tot-upml)=D5;
  196. D6hz(:, :, kh_bc:kh_tot-upml)=D6;

  197. %--------------------------------------------
  198. %   Fill in PML regions
  199. %---------------------------------------------
  200. rmax=exp(-16);
  201. orderbc=4;
  202. %   x-varying material properties
  203. delbc=upml*delta;
  204. % sigmam=-log(rmax)*(orderbc+1.0)/(2.0*eta*delbc);
  205. sigmam=-log(rmax)*epsr*epsz*cc*(orderbc+1.0)/(2.0*delbc);
  206. sigfactor=sigmam/(delta*(delbc^orderbc)*(orderbc+1.0));
  207. kmax=1;
  208. kfactor=(kmax-1.0)/delta/(orderbc+1.0)/delbc^orderbc;

  209. for i=1:upml
  210.     % Coefficients for field components in the center of the grid cell
  211.     x1=(upml-i+1)*delta;
  212.     x2=(upml-i)*delta;
  213.     sigma=sigfactor*(x1^(orderbc+1)-x2^(orderbc+1));
  214.     ki=1+kfactor*(x1^(orderbc+1)-x2^(orderbc+1));
  215.     facm=(2*epsr(1)*epsz*ki-sigma*dt);
  216.     facp=(2*epsr(1)*epsz*ki+sigma*dt);
  217.    
  218.     C5ex(i, :, :)=facp;
  219.     C5ex(ie_tot-i+1, :, :)=facp;
  220.     C6ex(i, :, :)=facm;
  221.     C6ex(ie_tot-i+1, :, :)=facm;
  222.     D1hz(i, :, :)=facm/facp;
  223.     D1hz(ie_tot-i+1, :, :)=facm/facp;
  224.     D2hz(i, :, :)=2.0*epsr(1)*epsz*dt/facp;
  225.     D2hz(ie_tot-i+1, :, :)=2.0*epsr(1)*epsz*dt/facp;
  226.     D3hy(i, :, :)=facm/facp;
  227.     D3hy(ie_tot-i+1, :, :)=facm/facp;
  228.     D4hy(i, :, :)=1.0/facp/mur(1)/muz;
  229.     D4hy(ie_tot-i+1, :, :)=1.0/facp/mur(1)/muz;
  230.    
  231.     % Coefficients for field components on the grid cell boundary
  232.     x1=(upml-i+1.5)*delta;
  233.     x2=(upml-i+0.5)*delta;
  234.     sigma=sigfactor*(x1^(orderbc+1)-x2^(orderbc+1));
  235.     ki=1+kfactor*(x1^(orderbc+1)-x2^(orderbc+1));
  236.     facm=(2.0*epsr(1)*epsz*ki-sigma*dt);
  237.     facp=(2.0*epsr(1)*epsz*ki+sigma*dt);
  238.    
  239.     C1ez(i,:,:)=facm/facp;
  240.     C1ez(ih_tot-i+1,:,:)=facm/facp;
  241.     C2ez(i,:,:)=2.0*epsr(1)*epsz*dt/facp;
  242.     C2ez(ih_tot-i+1,:,:)=2.0*epsr(1)*epsz*dt/facp;
  243.     C21ez(i,:,:)=2.0*epsr(1)*epsz/facp;
  244.     C21ez(ih_tot-i+1,:,:)=2.0*epsr(1)*epsz/facp;
  245.     C3ey(i,:,:)=facm/facp;
  246.     C3ey(ih_tot-i+1,:,:)=facm/facp;
  247.     C4ey(i,:,:)=1.0/facp/epsr(1)/epsz;
  248.     C4ey(ih_tot-i+1,:,:)=1.0/facp/epsr(1)/epsz;
  249.     C41ey(i,:,:)=1.0/facp;
  250.     C41ey(ih_tot-i+1,:,:)=1.0/facp;
  251.     D5hx(i,:,:)=facp;
  252.     D5hx(ih_tot-i+1,:,:)=facp;
  253.     D6hx(i,:,:)=facm;
  254.     D6hx(ih_tot-i+1,:,:)=facm;
  255. end

  256. %  PEC walls
  257. C1ez(1,:,:)=-1.0;
  258. C1ez(ih_tot,:,:)=-1.0;
  259. C2ez(1,:,:)=0.0;
  260. C2ez(ih_tot,:,:)=0.0;
  261. C21ez(1,:,:)=0.0;
  262. C21ez(ih_tot,:,:)=0.0;
  263. C3ey(1,:,:)=-1.0;
  264. C3ey(ih_tot,:,:)=-1.0;
  265. C4ey(1,:,:)=0.0;
  266. C4ey(ih_tot,:,:)=0.0;
  267. C41ey(1,:,:)=0.0;
  268. C41ey(ih_tot,:,:)=0.0;
  269. %  y-varying material properties
  270. delbc=upml*delta;
  271. sigmam=-log(rmax)*epsr*epsz*cc*(orderbc+1.0)/(2.0*delbc);    %(some questions)
  272. sigfactor=sigmam/(delta*(delbc^orderbc)*(orderbc+1.0));
  273. kmax=1.0;
  274. kfactor=(kmax-1.0)/delta/(orderbc+1.0)/delbc^orderbc;
  275. for j=1:upml
  276.     % Coefficients for field componments in the center of the grid cell
  277.     y1=(upml-j+1)*delta;
  278.     y2=(upml-j)*delta;
  279.     sigma=sigfactor*(y1^(orderbc+1)-y2^(orderbc+1));
  280.     ki=1+kfactor*(y1^(orderbc+1)-y2^(orderbc+1));
  281.     facm=2*epsr(1)*epsz*ki-sigma*dt;
  282.     facp=2*epsr(1)*epsz*ki+sigma*dt;
  283.    
  284.     C5ey(:,j,:)=facp;
  285.     C5ey(:,je_tot-j+1,:)=facp;
  286.     C6ey(:,j,:)=facm;
  287.     C6ey(:,je_tot-j+1,:)=facm;
  288.     D1hx(:,j,:)=facm/facp;
  289.     D1hx(:,je_tot-j+1,:)=facm/facp;
  290.     D2hx(:,j,:)=2*epsr(1)*epsz*dt/facp;
  291.     D2hx(:,je_tot-j+1,:)=2*epsr(1)*epsz*dt/facp;
  292.     D3hz(:,j,:)=facm/facp;
  293.     D3hz(:,je_tot-j+1,:)=facm/facp;
  294.     D4hz(:,j,:)=1/facp/mur(1)/muz;
  295.     D4hz(:,je_tot-j+1,:)=1/facp/mur(1)/muz;
  296.    
  297.     % Coefficients for field components on the grid cell boundary
  298.     y1=(upml-j+1.5)*delta;
  299.     y2=(upml-j+0.5)*delta;
  300.     sigma=sigfactor*(y1^(orderbc+1)-y2^(orderbc+1));
  301.     ki=1+kfactor*(y1^(orderbc+1)-y2^(orderbc+1));
  302.     facm=(2*epsr(1)*epsz*ki-sigma*dt);
  303.     facp=(2*epsr(1)*epsz*ki+sigma*dt);
  304.    
  305.     C1ex(:,j,:)=facm/facp;
  306.     C1ex(:,jh_tot-j+1,:)=facm/facp;
  307.     C2ex(:,j,:)=2*epsr(1)*epsz*dt/facp;
  308.     C2ex(:,jh_tot-j+1,:)=2*epsr(1)*epsz*dt/facp;
  309.     C21ex(:,j,:)=2*epsr(1)*epsz/facp;
  310.     C21ex(:,jh_tot-j+1,:)=2*epsr(1)*epsz/facp;
  311.     C3ez(:,j,:)=facm/facp;
  312.     C3ez(:,jh_tot-j+1,:)=facm/facp;
  313.     C4ez(:,j,:)=1/facp/epsr(1)/epsz;
  314.     C4ez(:,jh_tot-j+1,:)=1/facp/epsr(1)/epsz;
  315.     C41ez(:,j,:)=1/facp;
  316.     C41ez(:,jh_tot-j+1,:)=1/facp;
  317.     D5hy(:,j,:)=facp;
  318.     D5hy(:,jh_tot-j+1,:)=facp;
  319.     D6hy(:,j,:)=facm;
  320.     D6hy(:,jh_tot-j+1,:)=facm;
  321. end
  322. % PEC walls
  323. C1ex(:,1,:)=-1;
  324. C1ex(:,jh_tot,:)=-1;
  325. C2ex(:,1,:)=0;
  326. C2ex(:,jh_tot,:)=0;
  327. C21ex(:,1,:)=0;
  328. C21ex(:,jh_tot,:)=0;
  329. C3ez(:,1,:)=-1;
  330. C3ez(:,jh_tot,:)=-1;
  331. C4ez(:,1,:)=0;
  332. C4ez(:,jh_tot,:)=0;
  333. C41ez(:,1,:)=0;
  334. C41ez(:,jh_tot,:)=0;
  335. % z-varying material properties
  336. delbc=upml*delta;
  337. sigmam=-log(rmax)*epsr(1)*epsz*cc*(orderbc+1.0)/(2.0*delbc);    %(some questions)
  338. sigfactor=sigmam/(delta*(delbc^orderbc)*(orderbc+1.0));
  339. kmax=1.0;
  340. kfactor=(kmax-1.0)/delta/(orderbc+1.0)/delbc^orderbc;

  341. for k=1:upml
  342.      
  343.      % Coefficients for field components in the center of the grid cell
  344.      z1=(upml-k+1)*delta;
  345.      z2=(upml-k)*delta;
  346.      sigma=sigfactor*(z1^(orderbc+1)-z2^(orderbc+1));
  347.      ki=1+kfactor*(z1^(orderbc+1)-z2^(orderbc+1));
  348.      facm=2*epsr(1)*epsz*ki-sigma*dt;
  349.      facp=2*epsr(1)*epsz*ki+sigma*dt;
  350.      C5ez(:,:,k)=facp;
  351.      C5ez(:,:,ke_tot-k+1)=facp;
  352.      C6ez(:,:,k)=facm;
  353.      C6ez(:,:,ke_tot-k+1)=facm;
  354.      D1hy(:,:,k)=facm/facp;
  355.      D1hy(:,:,ke_tot-k+1)=facm/facp;
  356.      D2hy(:,:,k)=2*epsr(1)*epsz*dt/facp;
  357.      D2hy(:,:,ke_tot-k+1)=2*epsr(1)*epsz*dt/facp;
  358.      D3hx(:,:,k)=facm/facp;
  359.      D3hx(:,:,ke_tot-k+1)=facm/facp;
  360.      D4hx(:,:,k)=1/facp/mur(1)/muz;
  361.      D4hx(:,:,ke_tot-k+1)=1/facp/mur(1)/muz;
  362.      
  363.      % Coefficients for field components on the grid cell boundary
  364.      z1=(upml-k+1.5)*delta;
  365.      z2=(upml-k+0.5)*delta;
  366.      sigma=sigfactor*(z1^(orderbc+1)-z2^(orderbc+1));
  367.      ki=1+kfactor*(z1^(orderbc+1)-z2^(orderbc+1));
  368.      facm=2*epsr(1)*epsz*ki-sigma*dt;
  369.      facp=2*epsr(1)*epsz*ki+sigma*dt;
  370.      C1ey(:,:,k)=facm/facp;
  371.      C1ey(:,:,kh_tot-k+1)=facm/facp;
  372.      C2ey(:,:,k)=2*epsr(1)*epsz*dt/facp;
  373.      C2ey(:,:,kh_tot-k+1)=2*epsr(1)*epsz*dt/facp;
  374.      C21ey(:,:,k)=2*epsr(1)*epsz/facp;
  375.      C21ey(:,:,kh_tot-k+1)=2*epsr(1)*epsz/facp;
  376.      C3ex(:,:,k)=facm/facp;
  377.      C3ex(:,:,kh_tot-k+1)=facm/facp;
  378.      C4ex(:,:,k)=1/facp/epsr(1)/epsz;
  379.      C4ex(:,:,kh_tot-k+1)=1/facp/epsr(1)/epsz;
  380.      C41ex(:,:,k)=1/facp;
  381.      C41ex(:,:,kh_tot-k+1)=1/facp;
  382.      D5hz(:,:,k)=facp;
  383.      D5hz(:,:,kh_tot-k+1)=facp;
  384.      D6hz(:,:,k)=facm;
  385.      D6hz(:,:,kh_tot-k+1)=facm;
  386. end
  387. %   PEC walls
  388. C1ey(:,:,1)=-1;
  389. C1ey(:,:,kh_tot)=-1;
  390. C2ey(:,:,1)=0;
  391. C2ey(:,:,kh_tot)=0;
  392. C21ey(:,:,1)=0;
  393. C21ey(:,:,kh_tot)=0;
  394. C3ex(:,:,1)=-1;
  395. C3ex(:,:,kh_tot)=-1;
  396. C4ex(:,:,1)=0;
  397. C4ex(:,:,kh_tot)=0;
  398. C41ex(:,:,1)=0;
  399. C41ex(:,:,kh_tot)=0;
  400. % figure
  401. % set(gcf,'Double Buffer','on')
  402. %--------------------------------------------------------
  403. %    Begin  time stepping loop
  404. %--------------------------------------------------------
  405. for n=1:nmax
  406.      % Update magnetic field
  407.      
  408.     bstore=bx;
  409.     bx(2:ie_tot,:,:)=D1hx(2:ie_tot,:,:).*bx(2:ie_tot,:,:)-...
  410.                      D2hx(2:ie_tot,:,:).*((ez(2:ie_tot,2:jh_tot,:)-ez(2:ie_tot,1:je_tot,:))-...
  411.                      (ey(2:ie_tot,:,2:kh_tot)-ey(2:ie_tot,:,1:ke_tot)))./delta;
  412.     hx(2:ie_tot,:,:)= D3hx(2:ie_tot,:,:).*hx(2:ie_tot,:,:)+...
  413.                       D4hx(2:ie_tot,:,:).*(D5hx(2:ie_tot,:,:).*bx(2:ie_tot,:,:)-...
  414.                       D6hx(2:ie_tot,:,:).*bstore(2:ie_tot,:,:));            
  415.     bstore=by;
  416.     by(:,2:je_tot,:)=D1hy(:,2:je_tot,:).*by(:,2:je_tot,:)-...
  417.                      D2hy(:,2:je_tot,:).*((ex(:,2:je_tot,2:kh_tot)-ex(:,2:je_tot,1:ke_tot))-...
  418.                      (ez(2:ih_tot,2:je_tot,:)-ez(1:ie_tot,2:je_tot,:)))./delta;
  419.     hy(:,2:je_tot,:)= D3hy(:,2:je_tot,:).*hy(:,2:je_tot,:)+...
  420.                       D4hy(:,2:je_tot,:).*(D5hy(:,2:je_tot,:).*by(:,2:je_tot,:)-...
  421.                       D6hy(:,2:je_tot,:).*bstore(:,2:je_tot,:));
  422.     bstore=bz;
  423.     bz(:,:,2:ke_tot)=D1hz(:,:,2:ke_tot).*bz(:,:,2:ke_tot)-...
  424.                      D2hz(:,:,2:ke_tot).*((ey(2:ih_tot,:,2:ke_tot)-ey(1:ie_tot,:,2:ke_tot))-...
  425.                      (ex(:,2:jh_tot,2:ke_tot)-ex(:,1:je_tot,2:ke_tot)))./delta;
  426.     hz(:,:,2:ke_tot)= D3hz(:,:,2:ke_tot).*hz(:,:,2:ke_tot)+...
  427.                       D4hz(:,:,2:ke_tot).*(D5hz(:,:,2:ke_tot).*bz(:,:,2:ke_tot)-...
  428.                       D6hz(:,:,2:ke_tot).*bstore(:,:,2:ke_tot));
  429.                   
  430.     % Update electric field
  431. %     dstore=dx;
  432. %     dx(:,2:je_tot,2:ke_tot)=C1ex(:,2:je_tot,2:ke_tot).*dx(:,2:je_tot,2:ke_tot)+...
  433. %                             C2ex(:,2:je_tot,2:ke_tot).*((hz(:,2:je_tot,2:ke_tot)-hz(:,1:je_tot-1,2:ke_tot))-...
  434. %                             (hy(:,2:je_tot,2:ke_tot)-hy(:,2:je_tot,1:ke_tot-1)))./delta;
  435. %     dx(is:is+1,js,ks)=dx(is:is+1,js,ks)+J0*(n-ndelay)*exp(-((n-ndelay)^2/tau^2));
  436. %         
  437. %     ex(:,2:je_tot,2:ke_tot)=C3ex(:,2:je_tot,2:ke_tot).*ex(:,2:je_tot,2:ke_tot)+...
  438. %                             C4ex(:,2:je_tot,2:ke_tot).*(C5ex(:,2:je_tot,2:ke_tot).*dx(:,2:je_tot,2:ke_tot)-...
  439. %                             C6ex(:,2:je_tot,2:ke_tot).*dstore(:,2:je_tot,2:ke_tot));

  440.     qstore=qx;
  441.     qx(:,2:je_tot,2:ke_tot)=C7ex(:,2:je_tot,2:ke_tot).*qx(:,2:je_tot,2:ke_tot)+...
  442.                             C8ex(:,2:je_tot,2:ke_tot).*((hz(:,2:je_tot,2:ke_tot)-hz(:,1:je_tot-1,2:ke_tot))-...
  443.                             (hy(:,2:je_tot,2:ke_tot)-hy(:,2:je_tot,1:ke_tot-1)))./delta;
  444.                         
  445.     px(:,2:je_tot,2:ke_tot)=C1ex(:,2:je_tot,2:ke_tot).*px(:,2:je_tot,2:ke_tot)+...
  446.                             C21ex(:,2:je_tot,2:ke_tot).*(qx(:,2:je_tot,2:ke_tot)-qstore(:,2:je_tot,2:ke_tot));
  447.     pstore=px;
  448.     ex(is:is+1,js,ks)=ex(is:is+1,js,ks)+J0.*(n-ndelay)*exp(-((n-ndelay)^2/tau^2));  
  449.    
  450.     ex(:,2:je_tot,2:ke_tot)=C3ex(:,2:je_tot,2:ke_tot).*ex(:,2:je_tot,2:ke_tot)+...
  451.                             C41ex(:,2:je_tot,2:ke_tot).*(C5ex(:,2:je_tot,2:ke_tot).*px(:,2:je_tot,2:ke_tot)-...
  452.                             C6ex(:,2:je_tot,2:ke_tot).*pstore(:,2:je_tot,2:ke_tot));      

  453. %     dstore=dy;
  454. %     dy(2:ie_tot,:,2:ke_tot)=C1ey(2:ie_tot,:,2:ke_tot).*dy(2:ie_tot,:,2:ke_tot)+...
  455. %                             C2ey(2:ie_tot,:,2:ke_tot).*((hx(2:ie_tot,:,2:ke_tot)-hx(2:ie_tot,:,1:ke_tot-1))-...
  456. %                             (hz(2:ie_tot,:,2:ke_tot)-hz(1:ie_tot-1,:,2:ke_tot)))./delta;
  457. % %     dy(is,js:js+1,ks)=dz(is,js:js+1,ks)+J0*(n-ndelay)*exp(-((n-ndelay)^2/tau^2));
  458. %     ey(2:ie_tot,:,2:ke_tot)=C3ey(2:ie_tot,:,2:ke_tot).*ey(2:ie_tot,:,2:ke_tot)+...
  459. %                             C4ey(2:ie_tot,:,2:ke_tot).*(C5ey(2:ie_tot,:,2:ke_tot).*dy(2:ie_tot,:,2:ke_tot)-...
  460. %                             C6ey(2:ie_tot,:,2:ke_tot).*dstore(2:ie_tot,:,2:ke_tot));
  461.                         
  462. %     qstore=qy;
  463. %     qy(2:ie_tot,:,2:ke_tot)=C7ey(2:ie_tot,:,2:ke_tot).*qy(2:ie_tot,:,2:ke_tot)+...
  464. %                             C8ey(2:ie_tot,:,2:ke_tot).*((hx(2:ie_tot,:,2:ke_tot)-hx(2:ie_tot,:,1:ke_tot-1))-...
  465. %                             (hz(2:ie_tot,:,2:ke_tot)-hz(1:ie_tot-1,:,2:ke_tot)))./delta;
  466. %      
  467. %     py(2:ie_tot,:,2:ke_tot)=C1ey(2:ie_tot,:,2:ke_tot).*py(2:ie_tot,:,2:ke_tot)+...
  468. %                             C21ey(2:ie_tot,:,2:ke_tot).*(qy(2:ie_tot,:,2:ke_tot)-qstore(2:ie_tot,:,2:ke_tot));
  469. %                        
  470. %     pstore=py;
  471. %     ey(2:ie_tot,:,2:ke_tot)=C3ey(2:ie_tot,:,2:ke_tot).*ey(2:ie_tot,:,2:ke_tot)+...
  472. %                             C41ey(2:ie_tot,:,2:ke_tot).*(C5ey(2:ie_tot,:,2:ke_tot).*py(2:ie_tot,:,2:ke_tot)-...
  473. %                             C6ey(2:ie_tot,:,2:ke_tot).*pstore(2:ie_tot,:,2:ke_tot));
  474. %                 
  475. %     dstore=dz;
  476. %     dz(2:ie_tot,2:je_tot,:)=C1ez(2:ie_tot,2:je_tot,:).*dz(2:ie_tot,2:je_tot,:)+...
  477. %                             C2ez(2:ie_tot,2:je_tot,:).*((hy(2:ie_tot,2:je_tot,:)-hy(1:ie_tot-1,2:je_tot,:))-...
  478. %                             (hx(2:ie_tot,2:je_tot,:)-hx(2:ie_tot,1:je_tot-1,:)))./delta;
  479. % %     dz(is,js,ks:ks+1)=dz(is,js,ks:ks+1)+J0*(n-ndelay)*exp(-((n-ndelay)^2/tau^2));
  480. %     ez(2:ie_tot,2:je_tot,:)=C3ez(2:ie_tot,2:je_tot,:).*ez(2:ie_tot,2:je_tot,:)+...
  481. %                             C4ez(2:ie_tot,2:je_tot,:).*(C5ez(2:ie_tot,2:je_tot,:).*dz(2:ie_tot,2:je_tot,:)-...
  482. %                             C6ez(2:ie_tot,2:je_tot,:).*dstore(2:ie_tot,2:je_tot,:));
  483.   
  484. %     qstore=qz;
  485. %     qz(2:ie_tot,2:je_tot,:)=C7ez(2:ie_tot,2:je_tot,:).*qz(2:ie_tot,2:je_tot,:)+...
  486. %                             C8ez(2:ie_tot,2:je_tot,:).*((hy(2:ie_tot,2:je_tot,:)-hy(1:ie_tot-1,2:je_tot,:))-...
  487. %                             (hx(2:ie_tot,2:je_tot,:)-hx(2:ie_tot,1:je_tot-1,:)))./delta;                  
  488. %     pz(2:ie_tot,2:je_tot,:)=C1ez(2:ie_tot,2:je_tot,:).*pz(2:ie_tot,2:je_tot,:)+...
  489. %                             C21ez(2:ie_tot,2:je_tot,:).*(qz(2:ie_tot,2:je_tot,:)-qstore(2:ie_tot,2:je_tot,:));
  490. %                        
  491. %     pz(is,js,ks:ks+1)=pz(is,js,ks:ks+1)+J0*(n-ndelay)*exp(-((n-ndelay)^2/tau^2));  
  492. % %     c(n)=J0*(n-ndelay)*exp(-((n-ndelay)^2/tau^2));
  493. %     pstore=pz;
  494. % %      pz(is,js,ks:ks+1)=source(n);
  495. %      ez(2:ie_tot,2:je_tot,:)=C3ez(2:ie_tot,2:je_tot,:).*ez(2:ie_tot,2:je_tot,:)+...
  496. %                              C41ez(2:ie_tot,2:je_tot,:).*(C5ez(2:ie_tot,2:je_tot,:).*pz(2:ie_tot,2:je_tot,:)-...
  497. %                              C6ez(2:ie_tot,2:je_tot,:).*pstore(2:ie_tot,2:je_tot,:));


  498.     %***********************************************************************
  499.     %     Visualize fields
  500.     %***********************************************************************

  501.     timestep=int2str(n);
  502. %     tview(:,:)=squeeze(ex(ih_bc:upml+ie,jh_bc:upml+je,ks));
  503. %     sview(:,:)=squeeze(ex(ih_bc:upml+ie,js,kh_bc:upml+ke));
  504.     tview(:,:)=squeeze(ex(is,jh_bc:upml+je,kh_bc:upml+ke));
  505.     sview(:,:)=squeeze(ex(ih_bc:upml+ie,js,kh_bc:upml+ke));
  506. %     tview(:,:)=squeeze(hz(ih_bc:upml+ie,jh_bc:upml+je,ks));
  507. %     sview(:,:)=squeeze(hz(ih_bc:upml+ie,js,kh_bc:upml+ke));
  508.     subplot('position',[0.15 0.57 0.7 0.35])
  509.     %imagesc(tview');

  510.      pcolor(tview');
  511.     shading interp;
  512.     caxis([-0.2 0.2]);
  513.     colorbar;
  514.     axis image; axis xy;
  515.     title(['E_z(i,j,k=k_s_o_u_r_c_e), time step = ',timestep]);
  516.     xlabel('i coordinate');
  517.     ylabel('j coordinate');
  518.    
  519.     subplot('position',[0.15 0.08 0.7 0.35])
  520.     %imagesc(tview');
  521.     pcolor(tview');
  522.     shading interp;
  523.     caxis([-0.2 0.2]);
  524.     colorbar;
  525.     axis image; axis xy;
  526.     title(['E_z(i,j=j_s_o_u_r_c_e,k), time step = ',timestep]);
  527.     xlabel('i coordinate');
  528.     ylabel('k coordinate');
  529.     pause(0.05)
  530.    
  531. end
复制代码
tingo 发表于 2012-12-4 22:09
不客气,有问题欢迎在此版区讨论!

我觉得是程序中电场的迭代下面的迭代出现了问题:
ex(:,2:je_tot,2:ke_tot)=C3ex(:,2:je_tot,2:ke_tot).*ex(:,2:je_tot,2:ke_tot)+...
                            C41ex(:,2:je_tot,2:ke_tot).*(C5ex(:,2:je_tot,2:ke_tot).*px(:,2:je_tot,2:ke_tot)-...
                            C6ex(:,2:je_tot,2:ke_tot).*pstore(:,2:je_tot,2:ke_tot));
但这个和葛老师书上的公式一致,我就不知道该如何处理这个问题
你参考这本书中的代码The Finite-Difference Time-Domain Method for Electromagntics with MATLAB Simulations
这本书现在有中文版了,名字叫MATLAB模拟的电磁学时域有限差分法。
英文电子版微网上好像有,你找找看。
这本书中对CPML讲的详细,你再看看,尽可能自己将程序调通,这是一个学习的过程。有原理不懂的可以贴出来,和大家探讨。
客服中心 搜索
关于我们
关于我们
关注我们
联系我们
帮助中心
资讯中心
企业生态
社区论坛
服务支持
资源下载
售后服务
推广服务
关注我们
官方微博
官方空间
官方微信
返回顶部