计算电磁学包含了广泛的应用领域,包括天线、纳米光子学、太阳能电池、超材料、激光等等。在这些不同的领域中,也有许多方法来进行所需的计算。电磁模拟有三种主要的数值方法:FDTD, FEM和MOM。每种方法都最适合特定的情况,各有优缺点。在这篇文章中,汇总这些方法的一些最好的开源实现的参考资料(附链接)。 三大算法简介 FDTD算法:采用差分直接离散时域Maxwell方程,电磁场的求解基于时间步的迭代,无需存储全空间的电磁场信息,内存消耗较小,同时采用立方体网格和差分算法,网格形式和算法均十分简单,计算速度也贼快,基于时域算法,特别适合“宽带问题”的求解。但是,简单的立方体方体网格带来的弊端就是模型拟合精度较低,对于含有精细结构的模型,计算精度较低,同时基于“微分方程”,计算区域需要设置截断。FDTD比较适合于不含有较多精细结构的电大尺寸模型的电性能计算以及宽带问题的计算; FEM算法:采用四面体网格对目标进行离散,拟合精度比FDTD算法更高,计算精度也要明显优于FDTD算法。但是,FEM基于频域/微分算法,需要同时对整个区域内的电磁场信息进行求解和存储,内存消耗大,计算速度慢,计算模型的电尺寸也相对较小。FEM主要适合于微波电路器件,天线等目标“辐射问题”的精确计算; MoM算法:通过“场-源关系”,将“场”的求解问题转化为“源”求解问题,采用的基函数“格林函数”天然满足辐射条件,无需设置截断,计算精度高,同时矩阵的计算采用直接计算,不存在收敛性的问题,同时由于网格的剖分仅存在于目标体表面或内部,未知量数目大幅降低,矩阵规模小于FDTD和FEM,但是由于“源”之间均存在耦合,因此矩阵为“稠密”矩阵,计算复杂度大,计算速度慢。MoM主要适合于含有精细结构的电小尺寸目标“散射问题”的精确计算。
三大算法的开源代码
1、三大算法的区别
2、fdtd最好的开源代码
Meep.
Developed at MIT, Meep is a highly efficient FDTD package, scriptable in Python, Scheme or callable from C++ APIs. It is parallelized with MPI, and it includes a library with support for a variety of material types.
Meep由麻省理工学院开发,是一个高效的FDTD包,可以用Python、Scheme编写脚本,也可以从C++API调用。它与MPI并行,并包含一个支持多种材料类型的库。
gprMax. Developed at the University of Edinburgh, gprMax was designed for modelling Ground Penetrating Radar (GPR) but can also be used to model electromagnetic wave propagation for many other applications. gprMax is command-line driven software written in Python, with performance-critical parts written in Cython/OpenMP.
gprMax由爱丁堡大学开发,旨在为探地雷达(GPR)建模,但也可用于许多其他应用的电磁波传播建模。gprMax是用Python编写的命令行驱动软件,性能关键部分用Cython/OpenMP编写。
OpenEMS. Developed at the University of Duisburg-Essen, and parallelized with MPI. Matlab or Octave are used as a scripting interfaces.
由杜伊斯堡-埃森大学开发,并与MPI并行。Matlab或Octave用作脚本接口。
3、FEM最好的开源代码
FEniCS. FEniCS is a popular open-source LGPLv3-licenced software package for solving partial differential equations (PDEs). It features high-level Python and C++ interfaces, and can be run in high-performance clusters. To get started, visit the FEniCS Tutorial which includes an example in magnetostatics, or check out the official Discourse forum.
FEniCS是一个流行的开源LGPLv3许可软件包,用于求解偏微分方程(PDE)。它具有高级Python和C++接口,可以在高性能集群中运行。要开始使用,请访问FEniCS教程,其中包括静磁学示例,或查看官方话语论坛。
Elmer FEM. An open-source Finite Element Solver, dealing with multiphysical simulations. Built-in Electromagnetics Solvers include magnetostatic, electrostatic and wave-equation solvers. See the Elmer Models Manual for more information. Elmer has a GUI, a command-line interface, and a Python wrapper pyelmer.
一个开源的有限元求解器,处理多物理模拟。内置的电磁学求解器包括静磁、静电和波动方程求解器。有关更多信息,请参阅Elmer型号手册。Elmer有一个GUI、一个命令行界面和一个Python包装器pyelmer。
FreeFEM. FreeFEM is an open-source LGPLv3-licenced PDE solver relying on its own programming language. FreeFEM offers a large list of finite elements. Pre-built physics for Electromagnetic simulations include Magnetostatics and Electrostatics only.
FreeFEM.
FreeFEM是一个开源的LGPLv3许可的PDE求解器,依赖于自己的编程语言。FreeFEM提供了大量的有限元列表。用于电磁模拟的预构建物理学仅包括静磁学和静电学。
4、MOM最好的开源代码
Bempp. Bempp is an open-source, MIT licenced, computational boundary element platform to solve electrostatic, acoustic and electromagnetic problems. Bempp uses just-in-time compiled OpenCL or Numba kernels to assemble BEM operators in CPUs or GPUs. Features include a Python interface, Fast Multipole Method acceleration via Exafmm-t, and coupled FEM/BEM computations via interfaces to FEniCS.
Bempp是一个开源的、获得麻省理工学院许可的计算边界元平台,用于解决静电、声学和电磁问题。Bempp使用实时编译的OpenCL或Numba内核在CPU或GPU中组装BEM运算符。功能包括Python接口、通过Exafmm-t进行快速多极方法加速,以及通过FEniCS接口进行FEM/BEM耦合计算。
PumaEM is an open-source (GPL v3 licensed) Method of Moments implementation for Electromagnetics, accelerated with the Multilevel Fast Multipole Method, and parallelized via MPI.
PumaEM是一种用于电磁学的开源(GPL v3许可)矩量法实现,采用多级快速多极方法加速,并通过MPI并行化。
NEC-2. A classical code by LLNL rewritten in C++, targeted at wire and surface antenna simulation.
LLNL用C++重写的经典代码,针对有线和地面天线仿真。
参考:
Open-Source Electromagnetic Simulation: FDTD, FEM, MoM (epsilonforge.com)