FDTD(时域有限差分法)算法
FDTD算法概述

前向差分
后向差分
中心差分
4
利用泰勒展开式
df ( x) h 2 d 2 ( x) f ( x h) f ( x ) h 2 dx 2! dx df ( x) h 2 d 2 ( x) f ( x h) f ( x ) h 2 dx 2! dx df ( x) 2h 3 d 3 ( x) f ( x h) f ( x h) 2h 3 dx 3! dx
H x t
n 1 1 i , j ,k 2 2
Hx
n
1 1 i , j ,k Fra bibliotek 21 2
Hx t
n
1 1 i , j ,k 2 2
1 2
2 O t
E y z
E z y
n
1 1 i , j ,k 2 2
n
Ey
n 1 i , j , k 1 2
2
• 基本计算步骤
① 采用一定的网格划分方式离散化场域 ② 对场内的偏微分方程及各种边界条件进行差分离散化处理,建立差分 格式,得到差分方程组 ③ 结合选定的代数方程组的解法,编制程序,求边值问题的数值解
3
2.差分格式
• 差分基础知识
设函数f(x),对其自变量x取增量 x h ,则
df f ( x) f ( x) f ( x h) f ( x) lim x 0 dx x x h f ( x ) f ( x h) h f ( x h) f ( x h) 2h
11
• 数值稳定的条件:
t 1 1 1 (x)2 (y )2 (z )2
当空间步长相等即Δx=Δy=Δz时,
FDTD方法

有限差分法(FDM)的起源,讨论其在静电场求解中的应用.以铝电解槽物理模型为例,采用FDM对其场域进行离散,使用MATLAB和C求解了各节点的电位.由此,绘制了整个场域的等位线和电场强度矢量分布.同时,讨论了加速收敛因子对超松弛迭代算法迭代速度的影响,以及具有正弦边界条件下的电场分布.有限差分法有限差分方法(FDM)是计算机数值模拟最早采用的方法,至今仍被广泛运用。
该方法将求解域划分为差分网格,用有限个网格节点代替连续的求解域。
有限差分法以Taylor级数展开等方法,把控制方程中的导数用网格节点上的函数值的差商代替进行离散,从而建立以网格节点上的值为未知数的代数方程组。
该方法是一种直接将微分问题变为代数问题的近似数值解法,数学概念直观,表达简单,是发展较早且比较成熟的数值方法。
分类对于有限差分格式,从格式的精度来划分,有一阶格式、二阶格式和高阶格式。
从差分的空间形式来考虑,可分为中心格式和逆风格式。
考虑时间因子的影响,差分格式还可以分为显格式、隐格式、显隐交替格式等。
目前常见的差分格式,主要是上述几种形式的组合,不同的组合构成不同的差分格式。
差分方法主要适用于有结构网格,网格的步长一般根据实际地形的情况和柯朗稳定条件来决定。
构造差分的方法构造差分的方法有多种形式,目前主要采用的是泰勒级数展开方法。
其基本的差分表达式主要有三种形式:一阶向前差分、一阶向后差分、一阶中心差分和二阶中心差分等,其中前两种格式为一阶计算精度,后两种格式为二阶计算精度。
通过对时间和空间这几种不同差分格式的组合,可以组合成不同的差分计算格式2 时域有限差分法时域有限差分法是一种在时域中求解的数值计算方法,求解电磁场问题的FDTD方法是基于在时间和空间域中对Maxwell旋度方程的有限差分离散化一以具有两阶精度的中心有限差分格式来近似地代替原来微分形式的方程。
FDTD 方法模拟空间电磁性质的参数是按空间网格给出的,只需给定相应空间点的媒质参数,就可模拟复杂的电磁结构。
时域有限差分法二维

时域有限差分法二维1. 引言时域有限差分法(Finite Difference Time Domain, FDTD)是一种常用的数值计算方法,用于求解电磁场在时域中的传播和辐射问题。
本文将以二维情况为例,深入探讨时域有限差分法的原理和应用。
通过本文的介绍和解读,您将更全面地理解这一方法,并能够灵活应用于相关领域。
2. 时域有限差分法简介2.1 原理概述时域有限差分法是一种迭代求解偏微分方程的方法,通过将时域和空间离散化,将连续问题转化为离散问题。
在二维情况下,假设空间网格分辨率为Δx和Δy,时间步长为Δt。
根据电磁场的麦克斯韦方程组,可以利用中心差分公式进行离散化计算,得到求解方程组的更新方程。
2.2 空间离散化对于二维情况,空间离散化可以采用正交网格或非正交网格。
常见的正交网格包括方形格点、Yee网格等,而非正交网格则具有更灵活的形态。
根据需要和应用场景,选择合适的离散化方法对问题进行求解。
2.3 时间离散化时间离散化主要有显式和隐式两种方法。
显式方法将时间推进方程展开成前一时刻的电场和磁场与当前时刻的源项之间的关系,容易计算但对时间步长有限制;隐式方法则是通过迭代或矩阵计算求解当前时刻的电场和磁场。
3. 时域有限差分法的应用领域时域有限差分法广泛应用于电磁场传播和辐射问题的数值模拟中。
以下是几个典型的应用领域:3.1 辐射问题时域有限差分法可以模拟电磁波在空间中的辐射传播过程。
可以用于分析天线的辐射特性,设计无线通信系统的天线,或者分析电磁波在无线电频段的传播情况。
3.2 波导问题对于波导结构,时域有限差分法可以求解其模式、传输特性等问题。
波导结构广泛应用于光子学器件、微波器件等领域,时域有限差分法为建立数值模型和解析波导特性提供了一种有效的数值计算手段。
3.3 散射问题时域有限差分法在散射问题的数值模拟中也有重要应用。
通过模拟散射体与电磁波的相互作用过程,可以研究和分析散射体的散射特性,例如雷达散射截面的计算、微波散射问题等。
时域有限差分法FDTD算法的基本原理及仿真

时域有限差分法(FDTD 算法)时域有限差分法是1966年K.S.Yee 发表在AP 上的一篇论文建立起来的,后被称为Yee 网格空间离散方式。
这种方法通过将Maxwell 旋度方程转化为有限差分式而直接在时域求解, 通过建立时间离散的递进序列, 在相互交织的网格空间中交替计算电场和磁场。
FDTD 算法的基本思想是把带时间变量的Maxwell 旋度方程转化为差分形式,模拟出电子脉冲和理想导体作用的时域响应。
需要考虑的三点是差分格式、解的稳定性、吸收边界条件。
有限差分通常采用的步骤是:采用一定的网格划分方式离散化场域;对场内的偏微分方程及各种边界条件进行差分离散化处理,建立差分格式,得到差分方程组;结合选定的代数方程组的解法,编制程序,求边值问题的数值解。
1.FDTD 的基本原理FDTD 方法由Maxwell 旋度方程的微分形式出发,利用二阶精度的中心差分近似,直接将微分运算转换为差分运算,这样达到了在一定体积内和一段时间上对连续电磁场数据的抽样压缩。
Maxwell 方程的旋度方程组为:E E H σε+∂∂=⨯∇t H HE m tσμ-∂∂-=⨯∇ (1) 在直角坐标系中,(1)式可化为如下六个标量方程:⎪⎪⎪⎪⎭⎪⎪⎪⎪⎬⎫+∂∂=∂∂-∂∂+∂∂=∂∂-∂∂+∂∂=∂∂-∂∂z z x y y y z x x x yz E t E y H x H E t E x H z H E t E z H y H σεσεσε,⎪⎪⎪⎪⎭⎪⎪⎪⎪⎬⎫-∂∂-=∂∂-∂∂-∂∂-=∂∂-∂∂-∂∂-=∂∂-∂∂z m zx y y m y z x x m x y z H t H y E x E H t H x E z E H t H z E y E σμσμσμ (2)上面的六个偏微分方程是FDTD 算法的基础。
Yee 首先在空间上建立矩形差分网格,在时刻t n ∆时刻,F(x,y,z)可以写成),,(),,,(),,,(k j i F t n z k y j x i F t z y x F n =∆∆∆∆= (3)用中心差分取二阶精度: 对空间离散:()[]2),,21(),,21(),,,(x O xk j i F k j i F x t z y x F n n xi x ∆+∆--+≈∂∂∆= ()[]2),21,(),21,(),,,(y O yk j i F k j i F y t z y x F n n yj y ∆+∆--+≈∂∂∆= ()[]2)21,,()21,,(),,,(z O zk j i F k j i F z t z y x F n n zk z ∆+∆--+≈∂∂∆=对时间离散:()[]22121),,(),,(),,,(t O tk j i F k j i F t t z y x F n n tn t ∆+∆-≈∂∂-+∆= (4) Yee 把空间任一网格上的E 和H 的六个分量,如下图放置:oyxzEyHzExEzHxEyEyEzEx HyEzEx图1 Yee 氏网格及其电磁场分量分布在FDTD 中,空间上连续分布的电磁场物理量离散的空间排布如图所示。
FDTD介绍

FDTD 研究历史和现状
原则上可以求解任意形式的电磁场和电磁波的技术和工程问题, 并且对计算机内存容量要求较低、计算速度较快、尤其适用于并
行算法。现在FDTD法己被广泛应用于天线的分析与设计、目标电
磁散射、电磁兼容、微波电路和光路时域分析、生物电磁剂量学、 瞬态电磁场研究等多个领域。经过了近四十年的发展,FDTD法在 计算方法和应用上取得了大量成果。近几年来,讨论FDTD法的深 入发展和实际应用的文章几乎按指数增长。
的网格空间步长,用Δt表示时间步长。设 f (i,j,k)代表电场或磁
场的,某一分量在时间和空间域中的离散表达式为 f (i,j,k)= f (i x ,j y ,k z )= (i,j,k)
差分格式
Yee网格如图2.2所示,主要表示的是电场和磁场在空间各节 点的排布。由图可以看出每个电场的分量周围有四个磁场分量, 相应的每个磁场分量周围也有四个电场分量。这种空间的设置 方式能够实现空间坐标的差分计算,并且考虑到电磁场在空间
高的计算精度且无论以何种角度入射均无反射。
FDTD 方法介绍
FDTD具有以下基本要素:差分格式、数值特性和吸收边界 条件。其计算过程如下:
差分格式
对三维FDTD计算,如,电场分量Ez在t=n+1/2时刻的差分 格式为:
式中,i, j, k 分别为x,y,z,方向的网格编号。
差分格式
首先,在直角坐标系中将问题空间沿三个坐标轴方向分成 多个网格单元,其中 x, y , z 分别表示在x、y、z坐标方向
好多种吸收边条件都已经被提出来了。一般吸收边界应满足以下
条件:便于执行;计算精度够满足大多数的工程需求;通用性强; 数值稳定。
吸边界条件
目前构造吸收边界条件主要有两种思路:一种是从电磁波方程出发构造 透射边界条件,最常用的是 Mur 吸收边界和廖氏吸收边界;另一种是在边 界上吸收材料建立的吸收边界,例如完全匹配层(PML),电磁波在无反射地 进入吸收材料后,一般会被哀减掉的。其中 Mur 吸收边界具有构造简单、
FDTD(时域有限差分法)算法的Matlab源程序

rect=get(gcf,'Position'); rect(1:2)=[0 0];
M=moviein(nmax/2,gcf,rect);
%*********************************************************************** % BEGIN TIME-STEPPING LOOP %***********************************************************************
%
%***********************************************************************
clear
%*********************************************************************** % Fundamental constants
% Gaussian pulse given by
matlab模拟的电磁学时域有限差分法 pdf

matlab模拟的电磁学时域有限差分法 pdf电磁学时域有限差分法(FDTD)是一种基于数值模拟的电磁场计算方法,它使用有限差分来近似微分方程。
该方法广泛用于电磁学、电波传播、微波技术、光学等领域,以求解电磁场分布和场的辐射、散射等问题。
而在这个领域中,MATLAB是非常流行的工具之一。
本文将围绕“MATLAB模拟的电磁学时域有限差分法”这一主题,从以下几个方面进行阐述:1.时域有限差分法的基础概念在FDTD方法中,将时域中的Maxwell方程组转化为差分形式,使得可以在计算机上进行数值解法。
通过在空间和时间上的离散,可以得到电磁场在时域内的各种分布,进而求得特定情况下的电磁场变化。
2.MATLAB中的FDTD仿真在MATLAB中,我们可以使用PDE工具箱中的电磁学模块来实现FDTD仿真。
通过选择适当的几何形状和边界条件,可以利用该工具箱演示电磁场的传输、反射、折射、透射等现象。
同时,MATLAB中还提供了不同的场分量计算和可视化工具,以便用户可以更好地理解电磁场分布。
3.MATLAB代码实现以下是一些MATLAB代码示例,展示了FDTD模拟的基础实现方法。
代码中的示例模拟了平面波在一个矩形和圆形障碍物上的传播情况。
% 1. Square obstaclegridSize = 200; % Grid sizemaxTime = 600; % Maximum time (in steps)imp0 = 377.0; % Impedance of free spacecourantNumber = 0.5; % Courant numbercdtds = ones(gridSize,gridSize); % Courant number in space% (not variable in this example)Ez = zeros(gridSize, gridSize); % Define EzHy = zeros(gridSize, gridSize); % Define Hy% Simulation loopfor n = 1:maxTime% Update magnetic fieldHy(:,1:end-1) = Hy(:,1:end-1) + ...(Ez(:,2:end) - Ez(:,1:end-1)) .*cdtds(:,1:end-1) / imp0;% Update electric fieldEz(2:end-1,2:end-1) = Ez(2:end-1,2:end-1) + ...(Hy(2:end-1,2:end-1) - Hy(1:end-2,2:end-1)) .* cdtds(2:end-1,2:end-1) .* imp0;end% 2. Circular obstacleradius = 50;xAxis = [-100:99];[X,Y] = meshgrid(xAxis);obstacle = sqrt((X-50).^2 + (Y).^2) < radius;gridSize = length(xAxis); % Grid sizemaxTime = 500; % Maximum time (in steps)imp0 = 377.0; % Impedance of free space courantNumber = 0.5; % Courant numbercdtds = ones(gridSize,gridSize); % Courant number in space% (not variable in this example)Ez = zeros(gridSize, gridSize); % Define EzHy = zeros(gridSize, gridSize); % Define Hy% Simulation loopfor n = 1:maxTime% Update magnetic fieldHy(:,1:end-1) = Hy(:,1:end-1) + ...(Ez(:,2:end) - Ez(:,1:end-1)) .*cdtds(:,1:end-1) / imp0;% Update electric field, with obstacleEz(2:end-1,2:end-1) = Ez(2:end-1,2:end-1) + ...(Hy(2:end-1,2:end-1) - Hy(1:end-2,2:end-1)) .* cdtds(2:end-1,2:end-1) .* imp0;Ez(obstacle) = 0;end以上代码仅供参考,不同条件下的模拟需要适当修改,以便获得特定的模拟结果。
FDTD时域有限差分法

对时间离散:
(2)
FDTD基本原理(续)
9
为了满足(1)式空间精度的要求,并满足(2)式,Yee 把空间任一网格上的E和H的六个分量,如下图放置:
Yee把E 和H 在时间长相差半个步长计算(为了满足精度的要求)。
FDTD基本原理(续)
10
根据这一原则可以写出六个差分方程:
每个网格点上的各场分量的新值依赖于该点在前一时间步长时刻 的值,即该点周围的邻近点上另一场量在早半个时间步长时的值。 因此任一时刻可一次算出一个点,并行算法可计算出多个点。通 过这些运算可以交替算出电场磁场在各个时间步的值。
C:为光速,自由空间中: c
数值色散
14
• 产生原因
–FDTD网格中,会导致数字波模在网格中发生改变,这种改 变是由于计算网格本身引起的,而非物理因素,所以必须 考虑
• 适当选取时间步长,空间步长,传播方向,可以得到 理想情况
–3-D方形网格:取波沿对角线传播 (数值稳定的极限状态),可得理想色散关系。 –2-D方形网格:也是沿对角线传播, (也是数值稳定的极限状态) –1-D网格 (数值稳定的极限状态)
参考文献
21
• 电磁波时域有限差分方法(第二版),葛德彪, 闫玉波,西安电子科技大学出版社 • 工程电磁场数值计算,倪光正
22
练习要求:
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
% Program author: Susan C. Hagness% Department of Electrical and Computer Engineering % University of Wisconsin-Madison% 1415 Engineering Drive% Madison, WI 53706-1691% 608-265-5739% hagness@%% Date of this version: February 2000%% This MATLAB M-file implements the finite-difference time-domain % solution of Maxwell's curl equations over a three-dimensional% Cartesian space lattice comprised of uniform cubic grid cells.%% To illustrate the algorithm, an air-filled rectangular cavity% resonator is modeled. The length, width, and height of the% cavity are 10.0 cm (x-direction), 4.8 cm (y-direction), and% 2.0 cm (z-direction), respectively.% conditions:% ex(i,j,k)=0 on the j=1, j=jb, k=1, and k=kb planes% ey(i,j,k)=0 on the i=1, i=ib, k=1, and k=kb planes% ez(i,j,k)=0 on the i=1, i=ib, j=1, and j=jb planes% These PEC boundaries form the outer lossless walls of the cavity. %% The cavity is excited by an additive current source oriented% along the z-direction. The source waveform is a differentiated% Gaussian pulse given by% J(t)=-J0*(t-t0)*exp(-(t-t0)^2/tau^2),% where tau=50 ps. The FWHM spectral bandwidth of this zero-dc- % content pulse is approximately 7 GHz. The grid resolution% (dx = 2 mm) was chosen to provide at least 10 samples per% wavelength up through 15 GHz.%% To execute this M-file, type "fdtd3D" at the MATLAB prompt.% This M-file displays the FDTD-computed Ez fields at every other % time step, and records those frames in a movie matrix, M, which % is played at the end of the simulation using the "movie" command. %%***********************************************************************clear%***********************************************************************% Fundamental constants%***********************************************************************cc=2.99792458e8; %speed of light in free spacemuz=4.0*pi*1.0e-7; %permeability of free spaceepsz=1.0/(cc*cc*muz); %permittivity of free space%*********************************************************************** % Grid parameters%***********************************************************************ie=50; %number of grid cells in x-directionje=24; %number of grid cells in y-directionke=10; %number of grid cells in z-directionib=ie+1;jb=je+1;kb=ke+1;is=26; %location of z-directed current sourcejs=13; %location of z-directed current sourcekobs=5;dx=0.002; %space increment of cubic latticedt=dx/(2.0*cc); %time stepnmax=500; %total number of time steps%*********************************************************************** % Differentiated Gaussian pulse excitation%***********************************************************************rtau=50.0e-12;tau=rtau/dt;ndelay=3*tau;srcconst=-dt*3.0e+11;%*********************************************************************** % Material parameters%***********************************************************************eps=1.0;sig=0.0;%*********************************************************************** % Updating coefficients%***********************************************************************ca=(1.0-(dt*sig)/(2.0*epsz*eps))/(1.0+(dt*sig)/(2.0*epsz*eps));cb=(dt/epsz/eps/dx)/(1.0+(dt*sig)/(2.0*epsz*eps));da=1.0;db=dt/muz/dx;%*********************************************************************** % Field arrays%***********************************************************************ex=zeros(ie,jb,kb);ey=zeros(ib,je,kb);ez=zeros(ib,jb,ke);hx=zeros(ib,je,ke);hy=zeros(ie,jb,ke);hz=zeros(ie,je,kb);%*********************************************************************** % Movie initialization%***********************************************************************tview(:,:)=ez(:,:,kobs);sview(:,:)=ez(:,js,:);subplot('position',[0.15 0.45 0.7 0.45]),pcolor(tview');shading flat;caxis([-1.0 1.0]);colorbar;axis image;title(['Ez(i,j,k=5), time step = 0']);xlabel('i coordinate');ylabel('j coordinate');subplot('position',[0.15 0.10 0.7 0.25]),pcolor(sview');shading flat;caxis([-1.0 1.0]);colorbar;axis image;title(['Ez(i,j=13,k), time step = 0']);xlabel('i coordinate');ylabel('k coordinate');rect=get(gcf,'Position');rect(1:2)=[0 0];M=moviein(nmax/2,gcf,rect);%*********************************************************************** % BEGIN TIME-STEPPING LOOP%*********************************************************************** for n=1:nmax%*********************************************************************** % Update electric fields%***********************************************************************ex(1:ie,2:je,2:ke)=ca*ex(1:ie,2:je,2:ke)+...cb*(hz(1:ie,2:je,2:ke)-hz(1:ie,1:je-1,2:ke)+...hy(1:ie,2:je,1:ke-1)-hy(1:ie,2:je,2:ke));ey(2:ie,1:je,2:ke)=ca*ey(2:ie,1:je,2:ke)+...cb*(hx(2:ie,1:je,2:ke)-hx(2:ie,1:je,1:ke-1)+...hz(1:ie-1,1:je,2:ke)-hz(2:ie,1:je,2:ke));ez(2:ie,2:je,1:ke)=ca*ez(2:ie,2:je,1:ke)+...cb*(hx(2:ie,1:je-1,1:ke)-hx(2:ie,2:je,1:ke)+...hy(2:ie,2:je,1:ke)-hy(1:ie-1,2:je,1:ke));ez(is,js,1:ke)=ez(is,js,1:ke)+...srcconst*(n-ndelay)*exp(-((n-ndelay)^2/tau^2));%*********************************************************************** % Update magnetic fields%***********************************************************************hx(2:ie,1:je,1:ke)=hx(2:ie,1:je,1:ke)+...db*(ey(2:ie,1:je,2:kb)-ey(2:ie,1:je,1:ke)+...ez(2:ie,1:je,1:ke)-ez(2:ie,2:jb,1:ke));hy(1:ie,2:je,1:ke)=hy(1:ie,2:je,1:ke)+...db*(ex(1:ie,2:je,1:ke)-ex(1:ie,2:je,2:kb)+...ez(2:ib,2:je,1:ke)-ez(1:ie,2:je,1:ke));hz(1:ie,1:je,2:ke)=hz(1:ie,1:je,2:ke)+...db*(ex(1:ie,2:jb,2:ke)-ex(1:ie,1:je,2:ke)+...ey(1:ie,1:je,2:ke)-ey(2:ib,1:je,2:ke));%*********************************************************************** % Visualize fields%*********************************************************************** if mod(n,2)==0;timestep=int2str(n);tview(:,:)=ez(:,:,kobs);sview(:,:)=ez(:,js,:);subplot('position',[0.15 0.45 0.7 0.45]),pcolor(tview');shading flat;caxis([-1.0 1.0]);colorbar;axis image;title(['Ez(i,j,k=5), time step = ',timestep]);xlabel('i coordinate');ylabel('j coordinate');subplot('position',[0.15 0.10 0.7 0.25]),pcolor(sview');shading flat;caxis([-1.0 1.0]);colorbar;axis image;title(['Ez(i,j=13,k), time step = ',timestep]);xlabel('i coordinate');ylabel('k coordinate');nn=n/2;M(:,nn)=getframe(gcf,rect);end;%*********************************************************************** % END TIME-STEPPING LOOP%*********************************************************************** endmovie(gcf,M,0,10,rect);。