[读书笔记]FDTD与YEE晶胞
截图选自Understanding the Finite-Difference Time-Domain Metho 作者是John B. Schneider
有限差分时域(FDTD)方法使用有限差分作为麦克斯韦方程组(特别是安培定律和法拉第定律)的近似。
麦克斯韦方程组乃是由四个方程共同组成的:
- 高斯定律:该定律描述电场与空间中电荷分布的关系。电场线开始于正电荷,终止于负电荷(或无穷远)。计算穿过某给定闭曲面的电场线数量,即其电通量,可以得知包含在这闭曲面内的总电荷。更详细地说,这定律描述穿过任意闭曲面的电通量与这闭曲面内的电荷之间的关系。

考虑函数f (x)围绕点x0展开的Taylor级数展开式,其偏移量为±δ/2:

两式相减可得

整理一下可以变成

左边为关于位移的导数右边为中心差分与高阶无穷小,近似等于中心差分(在极限下,当δ趋于零时,近似就变得精确)
由Kane Yee在1966年首次提出的FDTD算法采用了二阶中心差异。该算法可总结如下:


1.用有限差分代替安培定律和法拉第定律中的所有导数
2.求解得到的差分方程,得到“更新方程”,用(已知的)过去的场来表示(未知的)未来的场。
3.在未来的一个时间步中评估磁场与
4.在未来的一个时间步中评估磁场与
5.重复循环
在一维FDTD中法拉第定律可以写作:
变为标量形式为:
根据电场的空间导数给出了磁场的时间导数。
安培定律可以写作:
变为标量形式为:
根据磁场的空间导数给出了电场的时间导数。
再用有限的差值替换上式中的导数以做到离散化
m表示空间步,q表示时间步
如下图所示,第一个方程将用于及时推进磁场,而第二个方程将用于推进电场。一种方法,其中一个场是先进的,然后是另一个场,然后重复这个过程,被称为跳蛙法。
更新磁场后
上图更新主要涉及两个差分等式:
整理可得
代表过去半个时刻的两个相邻位置电场以及过去一个时刻的磁场推导出未来半个时刻的磁场
整理可得
代表过去半个时刻的两个相邻位置磁场以及过去一个时刻的电场推导出未来半个时刻的电场
转换成代码就是两句赋值语句(imp0代表自由空间的特征阻抗):


下面为简要代码:
1 /* Bare-bones 1D FDTD simulation with a hard source. */
2
3 #include <stdio.h>
4 #include <math.h>
5
6 #define SIZE 200
7
8 int main()
9 {
10 double ez[SIZE] = {0.}, hy[SIZE] = {0.}, imp0 = 377.0;
11 int qTime, maxTime = 250, mm;
12
13 /* do time stepping */
14 for (qTime = 0; qTime < maxTime; qTime++) {
15
16 /* update magnetic field */
17 for (mm = 0; mm < SIZE - 1; mm++)
18 hy[mm] = hy[mm] + (ez[mm + 1] - ez[mm]) / imp0;
19
20 /* update electric field */
21 for (mm = 1; mm < SIZE; mm++)
22 ez[mm] = ez[mm] + (hy[mm] - hy[mm - 1]) * imp0;
23
24 /* hardwire a source node */
25 ez[0] = exp(-(qTime - 30.) * (qTime - 30.) / 100.);
26
27 printf("%g\n", ez[50]);
28 } /* end of time-stepping */
29
30 return 0;
31 }
[读书笔记]FDTD与YEE晶胞的更多相关文章
- 读书笔记汇总 - SQL必知必会(第4版)
本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...
- 读书笔记--SQL必知必会18--视图
读书笔记--SQL必知必会18--视图 18.1 视图 视图是虚拟的表,只包含使用时动态检索数据的查询. 也就是说作为视图,它不包含任何列和数据,包含的是一个查询. 18.1.1 为什么使用视图 重用 ...
- 《C#本质论》读书笔记(18)多线程处理
.NET Framework 4.0 看(本质论第3版) .NET Framework 4.5 看(本质论第4版) .NET 4.0为多线程引入了两组新API:TPL(Task Parallel Li ...
- C#温故知新:《C#图解教程》读书笔记系列
一.此书到底何方神圣? 本书是广受赞誉C#图解教程的最新版本.作者在本书中创造了一种全新的可视化叙述方式,以图文并茂的形式.朴实简洁的文字,并辅之以大量表格和代码示例,全面.直观地阐述了C#语言的各种 ...
- C#刨根究底:《你必须知道的.NET》读书笔记系列
一.此书到底何方神圣? <你必须知道的.NET>来自于微软MVP—王涛(网名:AnyTao,博客园大牛之一,其博客地址为:http://anytao.cnblogs.com/)的最新技术心 ...
- Web高级征程:《大型网站技术架构》读书笔记系列
一.此书到底何方神圣? <大型网站技术架构:核心原理与案例分析>通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计 ...
- LOMA280保险原理读书笔记
LOMA是国际金融保险管理学院(Life Office Management Association)的英文简称.国际金融保险管理学院是一个保险和金融服务机构的国际组织,它的创建目的是为了促进信息交流 ...
- 《3D Math Primer for Graphics and Game Development》读书笔记2
<3D Math Primer for Graphics and Game Development>读书笔记2 上一篇得到了"矩阵等价于变换后的基向量"这一结论. 本篇 ...
- 《3D Math Primer for Graphics and Game Development》读书笔记1
<3D Math Primer for Graphics and Game Development>读书笔记1 本文是<3D Math Primer for Graphics and ...
- 《More Effective C#》读书笔记
<More Effective C#>这本书,大概是四年前看完的,但只整理了一部分读书笔记,后面有时间的话,会陆续补充的. More Effective C# :使用泛型 More Eff ...
随机推荐
- Oracle之关于sql_load导入数据
平时在工作当中经常需要统计数据,客户会提供文本或者列表,需要导入到数据库中进行数据统计碰撞等,这时候需要用到批量导入数据,之前用kettle或者plsqldeveloper的odbc导入工具,性能不行 ...
- Nucmer+LINKVIEW实现序列水平的共线性分析
https://www.cnblogs.com/johnsonzzz/p/15151634.html https://github.com/YangJianshun/LINKVIEW 可以绘制两个基因 ...
- 吴恩达老师机器学习课程chapter08——降维
吴恩达老师机器学习课程chapter08--降维 本文是非计算机专业新手的自学笔记,高手勿喷. 本文仅作速查备忘之用,对应吴恩达(AndrewNg)老师的机器学期课程第十四章. 本章节只有结论,没有任 ...
- 写一个PHP单例模式
1 <?php 2 /** 3 * Created by PhpStorm. 5 * Date: 2019/1/29 6 * Time: 17:44 7 */ 8 9 namespace App ...
- Typora笔记收费的解决
现在的Typora收费了,但是官网还是可以找到历史版本 Typora在1.0版本之前的不收费!!! 所有只需要下载1.0版本之前的版本就可以解决 Windows历史版本地址:https://typor ...
- 打卡node day07--图片上传,身份验证
multer 模块 github:https://github.com/fanlina157/nodePro npm i multer fileRouter.js var express = req ...
- pip download 参数与使用
--no-clean Don't clean up build directories. 不要清理构建目录. -c, --constraint <file> Constrain versi ...
- js循环中删除数组中的某个元素
(1)使用js中的splice方法循环删除数组中某个值 eg: var arr=new Array(); arr.push(1); arr.push(2); arr.push(3); arr.push ...
- 第八章:diff
1.git diff命令的格式 1]可以使用git diff命令的来源,(任意树对象.工作目录.索引) 2]git diff命令进行树比较时,可以通过(提交名.分支名.标签名) 3]git d ...
- Linux-crontab定期执行程序的命令
https://www.runoob.com/linux/linux-comm-crontab.html Linux crontab 是用来定期执行程序的命令. 当安装完成操作系统之后,默认便会启动此 ...

