⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 threed_sourcee_neartofar.m

📁 三维 近场-远场 变换 FDTD...........
💻 M
📖 第 1 页 / 共 2 页
字号:
clear;
%**********************************************************
pi=3.1415926;
mu=4*pi*1e-7;yb=8.851*1e-12;c=1/sqrt(mu*yb);f=1e8;
k=2*pi*f*sqrt(mu*yb);Z=sqrt(mu/yb);
wl=c/f;dx=wl/40.0;dt=dx/c/2.0;TT=1.0/f/dt;
%**********************************************************
NX=80;	NY=80;NZ=80;AA=2;SS=5;TIME=TT*SS;           %外推边界距离吸收边界的距离为AA,时间循环为ss个周期
%**********************************************************     
hx=zeros(NX+1,NY,NZ);hy=zeros(NX,NY+1,NZ);hz=zeros(NX,NY,NZ+1);
ex=zeros(NX,NY+1,NZ+1);ey=zeros(NX+1,NY,NZ+1);ez=zeros(NX+1,NY+1,NZ);
%**********************************************************
waste=5/1000;
hx_1=zeros(NX+1,NY,NZ);hy_1=zeros(NX,NY+1,NZ);hz_1=zeros(NX,NY,NZ+1);                     %三个时刻的场(边界问题)
hx_2=zeros(NX+1,NY,NZ);hy_2=zeros(NX,NY+1,NZ);hz_2=zeros(NX,NY,NZ+1);
hx_3=zeros(NX+1,NY,NZ);hy_3=zeros(NX,NY+1,NZ);hz_3=zeros(NX,NY,NZ+1);
ex_1=zeros(NX,NY+1,NZ+1);ey_1=zeros(NX+1,NY,NZ+1);ez_1=zeros(NX+1,NY+1,NZ);
ex_2=zeros(NX,NY+1,NZ+1);ey_2=zeros(NX+1,NY,NZ+1);ez_2=zeros(NX+1,NY+1,NZ);
ex_3=zeros(NX,NY+1,NZ+1);ey_3=zeros(NX+1,NY,NZ+1);ez_3=zeros(NX+1,NY+1,NZ);
%**********************************************************
midx=NX/2+1;midy=NY/2+1;midz=NZ/2+1;mx=fix(midx);my=fix(midy);mz=fix(midz);
SX=1+AA;SY=1+AA;SZ=1+AA;XX=NX+1-AA;YY=NY+1-AA;ZZ=NZ+1-AA;                  %各个方向外推边界距离吸收边界的距离
FMz_fx1=0;FMy_fx1=0;FMz_fy1=0;FMx_fy1=0;FMy_fz1=0;FMx_fz1=0;
FMz_fx2=0;FMy_fx2=0;FMz_fy2=0;FMx_fy2=0;FMy_fz2=0;FMx_fz2=0;
FJz_fx1=0;FJy_fx1=0;FJz_fy1=0;FJx_fy1=0;FJy_fz1=0;FJx_fz1=0;
FJz_fx2=0;FJy_fx2=0;FJz_fy2=0;FJx_fy2=0;FJy_fz2=0;FJx_fz2=0;
%**********************************************************
r0=1/3*dx;c1=dt/mu/(dx*dx-pi*r0*r0/4);c2=dx/2*log(dx/r0);ll=9;
ia=mx;ja=my;ka=mz;star=fix(mz-ll);endn=fix(mz+ll);
%**********************************************************
tic
figure(1);clf;
set(gcf,'Renderer','OpenGL');
for n=1:TIME
      %-------------------电磁场循环---------------------------
    hx_3=hx_2;hx_2=hx_1;hx_1=hx;hy_3=hy_2;hy_2=hy_1;hy_1=hy;hz_3=hz_2;hz_2=hz_1;hz_1=hz;
    hx=hx+dt/mu/dx*(ey(:,:,2:NZ+1)-ey(:,:,1:NZ)+ez(:,1:NY,:)-ez(:,2:NY+1,:));
    hy=hy+dt/mu/dx*(ez(2:NX+1,:,:)-ez(1:NX,:,:)+ex(:,:,1:NZ)-ex(:,:,2:NZ+1));
    hz=hz+dt/mu/dx*(ex(:,2:NY+1,:)-ex(:,1:NY,:)+ey(1:NX,:,:)-ey(2:NX+1,:,:));
    %*************************
%     hy(ia,ja,star:endn)=hy_1(ia,ja,star:endn)-dt/mu/dx*(ex(ia,ja,star+1:endn+1)-ex(ia,ja,star:endn))+dt/mu/dx*2/log(dx/r0)*ez(ia+1,ja,star:endn);
%     hx(ia,ja,star:endn)=hx_1(ia,ja,star:endn)+dt/mu/dx*(ey(ia,ja,star+1:endn+1)-ey(ia,ja,star:endn))-dt/mu/dx*2/log(dx/r0)*ez(ia,ja+1,star:endn);
%     hy(ia-1,ja,star:endn)=hy_1(ia-1,ja,star:endn)-dt/mu/dx*(ex(ia-1,ja,star+1:endn+1)-ex(ia-1,ja,star:endn))-dt/mu/dx*2/log(dx/r0)*ez(ia-1,ja,star:endn);
%     hx(ia,ja-1,star:endn)=hx_1(ia,ja-1,star:endn)+dt/mu/dx*(ey(ia,ja-1,star+1:endn+1)-ey(ia,ja-1,star:endn))+dt/mu/dx*2/log(dx/r0)*ez(ia,ja-1,star:endn);
%     %*************************
%     hy(ia,ja,ka)=hy_1(ia,ja,ka)-dt/mu/dx*(ex(ia,ja,ka+1)-ex(ia,ja,ka))+dt/mu/dx*2/log(dx/r0)*(ez(ia+1,ja,ka)-ez_1(ia,ja,ka));
%     hx(ia,ja,ka)=hx_1(ia,ja,ka)+dt/mu/dx*(ey(ia,ja,ka+1)-ey(ia,ja,ka))-dt/mu/dx*2/log(dx/r0)*(ez(ia,ja+1,ka)-ez_1(ia,ja,ka));
%     hy(ia-1,ja,ka)=hy_1(ia-1,ja,ka)-dt/mu/dx*(ex(ia-1,ja,ka+1)-ex(ia-1,ja,ka))-dt/mu/dx*2/log(dx/r0)*(ez(ia-1,ja,ka)-ez_1(ia,ja,ka));
%     hx(ia,ja-1,ka)=hx_1(ia,ja-1,ka)+dt/mu/dx*(ey(ia,ja-1,ka+1)-ey(ia,ja-1,ka))+dt/mu/dx*2/log(dx/r0)*(ez(ia,ja-1,ka)-ez_1(ia,ja,ka));
%    %*************************  
%     hz(ia,ja,star:endn+1)=hz_1(ia,ja,star:endn+1)+c1*(c2*ey(ia,ja,star:endn+1)-c2*ex(ia,ja,star:endn+1)+ex(ia,ja+1,star:endn+1)*dx-dx*ey(ia+1,ja,star:endn+1));
%     hz(ia,ja-1,star:endn+1)=hz_1(ia,ja-1,star:endn+1)+c1*(c2*ey(ia,ja-1,star:endn+1)+c2*ex(ia,ja,star:endn+1)-ex(ia,ja-1,star:endn+1)*dx-dx*ey(ia+1,ja-1,star:endn+1));
%     hz(ia-1,ja,star:endn+1)=hz_1(ia-1,ja,star:endn+1)+c1*(-c2*ey(ia,ja,star:endn+1)-c2*ex(ia-1,ja,star:endn+1)+ex(ia-1,ja+1,star:endn+1)*dx+dx*ey(ia-1,ja,star:endn+1));
%     hz(ia-1,ja-1,star:endn+1)=hz_1(ia-1,ja-1,star:endn+1)+c1*(-c2*ey(ia,ja-1,star:endn+1)+c2*ex(ia-1,ja,star:endn+1)-ex(ia-1,ja-1,star:endn+1)*dx+dx*ey(ia-1,ja-1,star:endn+1));
      
    ex_3=ex_2;ex_2=ex_1;ex_1=ex;ey_3=ey_2;ey_2=ey_1;ey_1=ey;ez_3=ez_2;ez_2=ez_1;ez_1=ez;
    ex(:,2:NY,2:NZ)=ex(:,2:NY,2:NZ)+dt/yb/dx*(hz(:,2:NY,2:NZ)-hz(:,1:NY-1,2:NZ)+hy(:,2:NY,1:NZ-1)-hy(:,2:NY,2:NZ));
    ey(2:NX,:,2:NZ)=ey(2:NX,:,2:NZ)+dt/yb/dx*(hx(2:NX,:,2:NZ)-hx(2:NX,:,1:NZ-1)+hz(1:NX-1,:,2:NZ)-hz(2:NX,:,2:NZ));
    ez(2:NX,2:NY,:)=ez(2:NX,2:NY,:)+dt/yb/dx*(hy(2:NX,2:NY,:)-hy(1:NX-1,2:NY,:)+hx(2:NX,1:NY-1,:)-hx(2:NX,2:NY,:));
    ez(ia,ja,ka)=ez(ia,ja,ka)+sin(2*pi*f*n*dt);
    %************吸收边界条件*************
    ey(1,:,:)=+(3*ey_1(1+1,:,:)-3*ey_2(1+2,:,:)+ey_3(1+3,:,:));
    ey(NX+1,:,:)=+(3*ey_1(NX+1-1,:,:)-3*ey_2(NX+1-2,:,:)+ey_3(NX+1-3,:,:));
    ez(1,:,:)=+(3*ez_1(1+1,:,:)-3*ez_2(1+2,:,:)+ez_3(1+3,:,:));
    ez(NX+1,:,:)=+(3*ez_1(NX+1-1,:,:)-3*ez_2(NX+1-2,:,:)+ez_3(NX+1-3,:,:));
    ex(:,1,:)=+(3*ex_1(:,1+1,:)-3*ex_2(:,1+2,:)+ex_3(:,1+3,:));
    ex(:,NY+1,:)=+(3*ex_1(:,NY+1-1,:)-3*ex_2(:,NY+1-2,:)+ex_3(:,NY+1-3,:));
    ez(:,1,:)=+(3*ez_1(:,1+1,:)-3*ez_2(:,1+2,:)+ez_3(:,1+3,:));
    ez(:,NY+1,:)=+(3*ez_1(:,NY+1-1,:)-3*ez_2(:,NY+1-2,:)+ez_3(:,NY+1-3,:));
    ex(:,:,1)=+(3*ex_1(:,:,1+1)-3*ex_2(:,:,1+2)+ex_3(:,:,1+3));
    ex(:,:,NZ+1)=+(3*ex_1(:,:,NZ+1-1)-3*ex_2(:,:,NZ+1-2)+ex_3(:,:,NZ+1-3));
    ey(:,:,1)=+(3*ey_1(:,:,1+1)-3*ey_2(:,:,1+2)+ey_3(:,:,1+3));
    ey(:,:,NZ+1)=+(3*ey_1(:,:,NZ+1-1)-3*ey_2(:,:,NZ+1-2)+ey_3(:,:,NZ+1-3));
    %***********存储**************
    if n>TT*(SS-1)        
        ey_fx1=(ey(SX,SY:YY-1,SZ:ZZ-1)+ey(SX,SY:YY-1,SZ+1:ZZ))/2;
        ez_fx1=(ez(SX,SY:YY-1,SZ:ZZ-1)+ez(SX,SY+1:YY,SZ:ZZ-1))/2;
        ex_fy1=(ex(SX:XX-1,SY,SZ:ZZ-1)+ex(SX:XX-1,SY,SZ+1:ZZ))/2;
        ez_fy1=(ez(SX:XX-1,SY,SZ:ZZ-1)+ez(SX+1:XX,SY,SZ:ZZ-1))/2;
        ex_fz1=(ex(SX:XX-1,SY:YY-1,SZ)+ex(SX:XX-1,SY+1:YY,SZ))/2;
        ey_fz1=(ey(SX:XX-1,SY:YY-1,SZ)+ey(SX+1:XX,SY:YY-1,SZ))/2;
        
        ey_fx2=(ey(XX,SY:YY-1,SZ:ZZ-1)+ey(XX,SY:YY-1,SZ+1:ZZ))/2;
        ez_fx2=(ez(XX,SY:YY-1,SZ:ZZ-1)+ez(XX,SY+1:YY,SZ:ZZ-1))/2;
        ex_fy2=(ex(SX:XX-1,YY,SZ:ZZ-1)+ex(SX:XX-1,YY,SZ+1:ZZ))/2;
        ez_fy2=(ez(SX:XX-1,YY,SZ:ZZ-1)+ez(SX+1:XX,YY,SZ:ZZ-1))/2;
        ex_fz2=(ex(SX:XX-1,SY:YY-1,ZZ)+ex(SX:XX-1,SY+1:YY,ZZ))/2;
        ey_fz2=(ey(SX:XX-1,SY:YY-1,ZZ)+ey(SX+1:XX,SY:YY-1,ZZ))/2;
        
        hy_fx1=(hy(SX,SY:YY-1,SZ:ZZ-1)+hy(SX-1,SY:YY-1,SZ:ZZ-1)+hy(SX,SY+1:YY,SZ:ZZ-1)+hy(SX-1,SY+1:YY,SZ:ZZ-1))/4;
        hz_fx1=(hz(SX,SY:YY-1,SZ:ZZ-1)+hz(SX-1,SY:YY-1,SZ:ZZ-1)+hz(SX,SY:YY-1,SZ+1:ZZ)+hz(SX-1,SY:YY-1,SZ+1:ZZ))/4;
        hx_fy1=(hx(SX:XX-1,SY,SZ:ZZ-1)+hx(SX:XX-1,SY-1,SZ:ZZ-1)+hx(SX+1:XX,SY,SZ:ZZ-1)+hx(SX+1:XX,SY-1,SZ:ZZ-1))/4;
        hz_fy1=(hz(SX:XX-1,SY,SZ:ZZ-1)+hz(SX:XX-1,SY-1,SZ:ZZ-1)+hz(SX:XX-1,SY,SZ+1:ZZ)+hz(SX:XX-1,SY-1,SZ+1:ZZ))/4;
        hx_fz1=(hx(SX:XX-1,SY:YY-1,SZ)+hx(SX:XX-1,SY:YY-1,SZ-1)+hx(SX+1:XX,SY:YY-1,SZ)+hx(SX+1:XX,SY:YY-1,SZ-1))/4;
        hy_fz1=(hy(SX:XX-1,SY:YY-1,SZ)+hy(SX:XX-1,SY:YY-1,SZ-1)+hy(SX:XX-1,SY+1:YY,SZ)+hy(SX:XX-1,SY+1:YY,SZ-1))/4;
        
        hy_fx2=(hy(XX,SY:YY-1,SZ:ZZ-1)+hy(XX-1,SY:YY-1,SZ:ZZ-1)+hy(XX,SY+1:YY,SZ:ZZ-1)+hy(XX-1,SY+1:YY,SZ:ZZ-1))/4;
        hz_fx2=(hz(XX,SY:YY-1,SZ:ZZ-1)+hz(XX-1,SY:YY-1,SZ:ZZ-1)+hz(XX,SY:YY-1,SZ+1:ZZ)+hz(XX-1,SY:YY-1,SZ+1:ZZ))/4;
        hx_fy2=(hx(SX:XX-1,YY,SZ:ZZ-1)+hx(SX:XX-1,YY-1,SZ:ZZ-1)+hx(SX+1:XX,YY,SZ:ZZ-1)+hx(SX+1:XX,YY-1,SZ:ZZ-1))/4;
        hz_fy2=(hz(SX:XX-1,YY,SZ:ZZ-1)+hz(SX:XX-1,YY-1,SZ:ZZ-1)+hz(SX:XX-1,YY,SZ+1:ZZ)+hz(SX:XX-1,YY-1,SZ+1:ZZ))/4;
        hx_fz2=(hx(SX:XX-1,SY:YY-1,ZZ)+hx(SX:XX-1,SY:YY-1,ZZ-1)+hx(SX+1:XX,SY:YY-1,ZZ)+hx(SX+1:XX,SY:YY-1,ZZ-1))/4;
        hy_fz2=(hy(SX:XX-1,SY:YY-1,ZZ)+hy(SX:XX-1,SY:YY-1,ZZ-1)+hy(SX:XX-1,SY+1:YY,ZZ)+hy(SX:XX-1,SY+1:YY,ZZ-1))/4;
        
        ey_fx1=squeeze(ey_fx1);ey_fx2=squeeze(ey_fx2);
        ez_fx1=squeeze(ez_fx1);ez_fx2=squeeze(ez_fx2);
        ex_fy1=squeeze(ex_fy1);ex_fy2=squeeze(ex_fy2);
        ez_fy1=squeeze(ez_fy1);ez_fy2=squeeze(ez_fy2);
        ex_fz1=squeeze(ex_fz1);ex_fz2=squeeze(ex_fz2);
        ey_fz1=squeeze(ey_fz1);ey_fz2=squeeze(ey_fz2);
        
        hy_fx1=squeeze(hy_fx1);hy_fx2=squeeze(hy_fx2);
        hz_fx1=squeeze(hz_fx1);hz_fx2=squeeze(hz_fx2);
        hx_fy1=squeeze(hx_fy1);hx_fy2=squeeze(hx_fy2);
        hz_fy1=squeeze(hz_fy1);hz_fy2=squeeze(hz_fy2);
        hx_fz1=squeeze(hx_fz1);hx_fz2=squeeze(hx_fz2);
        hy_fz1=squeeze(hy_fz1);hy_fz2=squeeze(hy_fz2);
        %*************************
        Mz_fx1=--ey_fx1;Mz_fx2=-+ey_fx2;
        My_fx1=-+ez_fx1;My_fx2=--ez_fx2;
        Mz_fy1=-+ex_fy1;Mz_fy2=--ex_fy2;
        Mx_fy1=--ez_fy1;Mx_fy2=-+ez_fy2;
        My_fz1=--ex_fz1;My_fz2=-+ex_fz2;
        Mx_fz1=-+ey_fz1;Mx_fz2=--ey_fz2;
        
        Jz_fx1=-+hy_fx1;Jz_fx2=--hy_fx2;
        Jy_fx1=--hz_fx1;Jy_fx2=-+hz_fx2;
        Jz_fy1=--hx_fy1;Jz_fy2=-+hx_fy2;
        Jx_fy1=-+hz_fy1;Jx_fy2=--hz_fy2;
        Jy_fz1=-+hx_fz1;Jy_fz2=--hx_fz2;
        Jx_fz1=--hy_fz1;Jx_fz2=-+hy_fz2;
        %*************************
        phex=exp(-i*2*pi*(n-TT*(SS-1))*f*dt);
        FMz_fx1=FMz_fx1+Mz_fx1*phex;FMz_fx2=FMz_fx2+Mz_fx2*phex;            %傅立叶变换提起幅值和相位  
        FMy_fx1=FMy_fx1+My_fx1*phex;FMy_fx2=FMy_fx2+My_fx2*phex;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -