计算电磁学三大算法的开源代码
计算电磁学三大算法的开源代码
计算电磁学是研究电磁现象和电磁波传播的数值计算方法,广泛应用于天线设计、纳米光子学、太阳能电池、超材料、激光等领域。本文将介绍计算电磁学中三大主要数值方法:FDTD、FEM和MOM,并汇总这些方法的一些最佳开源实现。
三大算法简介
FDTD算法
采用差分直接离散时域Maxwell方程,电磁场的求解基于时间步的迭代,无需存储全空间的电磁场信息,内存消耗较小,同时采用立方体网格和差分算法,网格形式和算法均十分简单,计算速度也贼快,基于时域算法,特别适合“宽带问题”的求解。但是,简单的立方体方体网格带来的弊端就是模型拟合精度较低,对于含有精细结构的模型,计算精度较低,同时基于“微分方程”,计算区域需要设置截断。FDTD比较适合于不含有较多精细结构的电大尺寸模型的电性能计算以及宽带问题的计算。
FEM算法
采用四面体网格对目标进行离散,拟合精度比FDTD算法更高,计算精度也要明显优于FDTD算法。但是,FEM基于频域/微分算法,需要同时对整个区域内的电磁场信息进行求解和存储,内存消耗大,计算速度慢,计算模型的电尺寸也相对较小。FEM主要适合于微波电路器件,天线等目标“辐射问题”的精确计算。
MoM算法
通过“场-源关系”,将“场”的求解问题转化为“源”求解问题,采用的基函数“格林函数”天然满足辐射条件,无需设置截断,计算精度高,同时矩阵的计算采用直接计算,不存在收敛性的问题,同时由于网格的剖分仅存在于目标体表面或内部,未知量数目大幅降低,矩阵规模小于FDTD和FEM,但是由于“源”之间均存在耦合,因此矩阵为“稠密”矩阵,计算复杂度大,计算速度慢。MoM主要适合于含有精细结构的电小尺寸目标“散射问题”的精确计算。
三大算法的开源代码
FDTD算法的开源代码
Meep
开发机构:麻省理工学院
特点:高度高效的FDTD包,支持Python、Scheme脚本编写,也可从C++API调用。与MPI并行,包含支持多种材料类型的库。
gprMax
开发机构:爱丁堡大学
特点:最初为探地雷达(GPR)建模设计,但也可用于许多其他应用的电磁波传播建模。用Python编写,性能关键部分用Cython/OpenMP编写。
OpenEMS
开发机构:杜伊斯堡-埃森大学
特点:与MPI并行,支持Matlab或Octave作为脚本接口。
FEM算法的开源代码
FEniCS
特点:流行的开源LGPLv3许可软件包,用于求解偏微分方程(PDE)。具有高级Python和C++接口,可在高性能集群中运行。
Elmer FEM
特点:开源有限元求解器,处理多物理模拟。内置电磁学求解器包括静磁、静电和波动方程求解器。提供GUI、命令行界面和Python包装器pyelmer。
FreeFEM
特点:开源LGPLv3许可的PDE求解器,依赖于自己的编程语言。提供大量有限元列表。预构建的电磁模拟物理学包括静磁学和静电学。
MOM算法的开源代码
Bempp
特点:开源MIT许可的计算边界元平台,用于解决静电、声学和电磁问题。使用实时编译的OpenCL或Numba内核在CPU或GPU中组装BEM运算符。提供Python接口,支持Exafmm-t加速,可通过FEniCS接口进行FEM/BEM耦合计算。
PumaEM
特点:开源(GPL v3许可)的电磁学矩量法实现,采用多级快速多极方法加速,并通过MPI并行化。
NEC-2
特点:LLNL用C++重写的经典代码,针对有线和地面天线仿真。
参考资料
- Open-Source Electromagnetic Simulation: FDTD, FEM, MoM (epsilonforge.com)
- 缘起“收敛性”——Maxwell方程与求解