二维FDTD有限元仿真

这篇博客详细介绍了使用有限差分法(FDTD)模拟电磁波传播的过程。作者首先初始化了网格参数,如波速、频率、波长和网格尺寸,并设置了PML吸收边界条件。接着,通过迭代计算电场和磁场,应用正弦波源,并在每个时间步长中更新电荷密度、电场和磁场。博客中还包含了可视化电场和磁场分布的代码片段。
摘要由CSDN通过智能技术生成

clear; 
clc; 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
%% 1.初始化 
T=200; % 迭代次数 
IE=100; % 
JE=100; 
npml=8; % PML的网格数量 
c0=3*10^8; % 波速 
f=1.5*10^(9); % 频率 
lambda=c0/f; % 波长 
wl=10; 
dx=lambda/wl; 
dy=lambda/wl; 
pi=3.14159; 
dt=dx/(2*c0); % 时间间隔 
epsz=1/(4*pi*9*10^9); % 真空介电常数 
epsilon=1; % 相对介电常数 
sigma=0; % 电导率 
spread=6; % 脉冲宽度 
t0=20; % 脉冲高度 
ic=IE/2; % 源的X位置 
jc=JE/2; % 源的Y位置 
for i=1:IE+1; 
for j=1:JE+1; 
dz(i,j)=0; % z方向电荷密度 
ez(i,j)=0; % z方向电场 
hx(i,j)=0; % x方向磁场 
hy(i,j)=0; % y方向磁场 
ihx(i,j)=0;% 
ihy(i,j)=0; 
iz(i,j)=0; % z方向求和参量,频域卷积转化为时域求和 
end; 
end; 
for i=2:IE; % 
for j=2:JE; 
ga(i,j)=1; 
end; 
end; 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
%PML参数的设置 
for i=1:IE; 
gi2(i)=1; 
gi3(i)=1; 
fi1(i)=0; 
fi2(i)=1.0; 
fi3(i)=1.0; 
end 
for j=1:JE; 
gj2(j)=1; 
gj3(j)=1; 
fj1(j)=0; 
fj2(j)=1; 
fj3(j)=1; 
end 
for i=1:npml+1; %设置PML层中的参数 
xnum=npml+1-i; 
xn=0.33*(xnum/npml)^3; 
gi2(i)=1.0/(1+xn); 
gi2(IE-1-i)=1/(1+xn); 
gi3(i)=(1-xn)/(1+xn); 
gi3(IE-1-i)=(1-xn)/(1+xn); 
xn=0.25*((xnum-0.5)/npml)^3; 
fi1(i)=xn; 
fi1(IE-2-i)=xn; 
fi2(i)=1.0/(1+xn); 
fi2(IE-2-i)=1/(1+xn); 
fi3(i)=(1-xn)/(1+xn); 
fi3(IE-2-i)=(1-xn)/(1+xn); 
end 
for i=1:npml+1; 
xnum=npml+1-i; 
xn=0.33*(xnum/npml)^3; 
gj2(i)=1.0/(1+xn); 
gj2(JE-1-i)=1/(1+xn); 
gj3(i)=(1-xn)/(1+xn); 
gj3(JE-1-i)=(1-xn)/(1+xn); 
xn=0.25*((xnum-0.5)/npml)^3; 
fj1(i)=xn; 
fj1(JE-2-i)=xn; 
fj2(i)=1.0/(1+xn); 
fj2(JE-2-i)=1/(1+xn); 
fj3(i)=(1-xn)/(1+xn); 
fj3(JE-2-i)=(1-xn)/(1+xn); 
end 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
%% 2.迭代求解电场和磁场 
for t=1:T;
for i=2:IE; % 为了使每个电场周围都有磁场进行数组下标处理 
for j=2:JE; 
dz(i,j)=gi3(i)*gj3(j)*dz(i,j)+gi2(i)*gj2(j)*0.5*(hy(i,j)-hy(i-1,j)-hx(i,j)+hx(i,j-1)); 
end; 
end; % 电场循环结束 
pulse=sin(2*pi*f*t*dt); % 正弦波源 
dz(ic,jc)=dz(ic,jc)+pulse; % 软源 
for i=1:IE; % 为了使每个电场周围都有磁场进行数组下标处理 
for j=1:JE; 
ez(i,j)=ga(i,j)* dz(i,j); %反映煤质的情况都是放到这里的 
% iz(i,j)=iz(i,j)+gb(i,j)*ez(i,j) ; 
end; 
end; % 电荷密度循环结束 
%figure(1);                                %可视化处理
      %clf;   
      %mesh(ez);                                 %电场的幅值
      %axis([0 IE 0 JE -0.5 0.5]);
      %xlabel('i')
      %ylabel('j')
  %drawnow;                %完成114_ez
for j=1:JE; 
ez(1,j)=0; 
ez(IE,j)=0; 
end 
for i=1:IE; 
ez(i,1)=0; 
ez(i,JE)=0; 
end; 
for i=1:IE; % 为了使每个磁场周围都有电场进行数组下标处理 
for j=1:JE-1; 
curl_e=ez(i,j)-ez(i,j+1); 
ihx(i,j)=ihx(i,j)+fi1(i)*curl_e; 
hx(i,j)=fj3(j)*hx(i,j)+fj2(j)*0.5*(curl_e+ihx(i,j)); 
end; 
end; % 磁场HX循环结束 
      figure(2);                                %可视化处理
      clf;   
      mesh(hx);                                 %磁场的幅值
      axis([0 IE 0 JE -0.5 0.5]);
      xlabel('i')
      ylabel('j')
      drawnow;                %完成114_hx
for i=1:IE-1; % 为了使每个磁场周围都有电场进行数组下标处理 
for j=1:JE; 
curl_e=ez(i+1,j)-ez(i,j); 
ihy(i,j)=ihy(i,j)+fj1(j)*curl_e; 
hy(i,j)=fi3(i)*hy(i,j)+fi2(i)*0.5*(curl_e+ihy(i,j)); 
end; 
end; % 磁场HY循环结束 
figure(3);                                %可视化处理
          %clf;   
          %mesh(hy);                                 %磁场的幅值
          %axis([0 IE 0 IE -0.5 0.5]);
          %xlabel('i')
          %ylabel('j')
          %drawnow;              %完成114_hy
end 
 

 

 D139

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fpga和matlab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值