Edge-FEM-2D:基于棱边单元的二维电磁有限元仿真软件
项目介绍
本项目是一套基于MATLAB开发的二维电磁场有限元分析工具。其核心采用等几何线性矢量基函数(Nedelec棱边单元)来离散化麦克斯韦方程组,主要用于求解矩形波导或空腔谐振器的本征模态问题。通过使用棱边单元而非传统的节点单元,程序能够天然地满足电磁场在介质交界面上切向连续、法向不连续的物理特性,并能有效抑制高频计算中常见的“伪解”(Spurious Modes)现象。
功能特性
- 自动网格生成:内置结构化三角网格生成器,可针对矩形区域进行任意密度的初步剖分。
- 棱边拓扑管理:实现了复杂的棱边索引映射算法,能够自动提取网格中的所有棱边并建立单元与棱边的拓扑关系。
- 矢量基函数控制:实现了Nedelec第一类矢量基函数,并包含棱边方向符号系统的自动修正,确保全局刚度矩阵的正确性。
- 矩阵组装引擎:包含完整的Curl-Curl(旋度-旋度)刚度矩阵和质量矩阵的组装逻辑。
- 边界条件处理:自动识别物理边界并施加完美电导体(PEC)边界条件。
- 特征值求解:支持广义特征值问题求解,提取特定数量的本征频率与模态。
- 场量可视化:支持矢量电场分布的拟合与可视化,采用颜色云图展示场强幅度,并叠加矢量箭头展示场流向。
实现逻辑说明
程序的执行流程严格遵循有限元分析的标准步骤:
- 参数预设:定义几何尺寸 L、W,设定网格剖分密度 nx、ny,以及介质的相对磁导率和介电常数。
- 三角网格剖分:将矩形区域划分为规则的方格,再将每个方格对角分割为两个三角形。
- 棱边数据构建:遍历所有三角形单元,提取每条边的节点组合并进行升序排列以实现去重,建立全局棱边索引。同时,根据局部节点编号的顺序确定每条棱边在该单元中的正负符号。
- 单元贡献计算:
- 计算三角形单元的重心坐标梯度。
- 构造旋度矩阵元素:利用基函数的旋度性质(常数)计算单元刚度矩阵。
- 构造质量矩阵元素:通过四项基于重心坐标积分项的线性组合,精确计算矢量基函数的点积积分。
- 全局矩阵组装:将局部计算得到的 3x3 矩阵,根据符号修正后累加至全局稀疏矩阵 S 和 M 中。
- PEC 约束施加:通过统计棱边被单元共享的次数寻找仅出现一次的“边缘棱边”,在矩阵中剔除这些位于边界上的自由度,保留内部自由度。
- 特征模态提取:调用 eigs 函数求解矩阵方程 S * x = k^2 * M * x,获取最小平面的特征值及其对应的特征向量。
- 场量恢复与显示:将求得的特征向量映射回棱边自由度,在单元中心点计算插值后的矢量电场值,并利用补丁图和箭头图进行渲染。
关键算法与实现细节
- 棱边方向定义:为了保证切向场在单元间的连续性,代码通过比较棱边两个端点的全局节点号(v1 > v2)来强制规定一个全局参考方向,并以此修正单元局部基函数的符号。
- Nedelec 基函数:具体形式为 Ni = Li * grad(Lj) - Lj * grad(Li)。其旋度 grad(Li) x grad(Lj) 变成跨过整个单元的常数。
- 质量矩阵积分:代码采用了精确的重心坐标积分公式对矢量点乘进行处理。具体利用了 Integral(La * Lb) 在 a=b 时为面积的 1/6,a!=b 时为面积的 1/12 的特性,将复杂的矢量积分转化为四个标量积分项的加减组合。
- 边界提取算法:基于拓扑邻接特性的简化算法,即在非流形网格中,内部边必被两个单元共用,而边界边仅属于一个单元,通过计数排序即可快速锁定 PEC 边界。
- 物理量转换:求得的特征值 k^2 对应于波数的平方,通过光速及介质参数进一步换算为物理频率。
系统要求
- 软件环境:MATLAB R2016b 或更高版本。
- 工具箱:基础 MATLAB 环境(需支持 sparse 稀疏矩阵运算及 eigs 特征值求解函数)。
- 硬件配置:标准个人电脑即可,求解 20x10 网格规模耗时通常在秒级。