做高频电磁场仿真的人,谁没被求解时间折磨过?一个稍微复杂点的阵列天线、一个带腔体的连接器、或者一个整机电磁兼容模型,单机跑起来动不动就是十几个小时甚至几天,改一个参数又得重新来一轮。这还只是时间问题,更头疼的是内存爆炸,网格一加密,直接提示内存不足,连算都算不了。到了这个阶段,并行计算就不是“优化技巧”了,而是能不能继续做下去的生死线。
我这次想聊的主题是高频电磁场仿真里的并行计算与大规模电磁仿真。它解决的痛点很明确:怎么让仿真跑得完、跑得快、跑得稳。适合正在啃大模型、做整机仿真、搞阵列天线,或者是被老板、被项目节点追着要结果的工程师看看。文章里不会有太多数学推导,重点是我在实际项目中怎么拆解规模、配置并行环境、调求解器参数,以及踩过的那些坑。
1. 高频电磁场仿真到底卡在哪:三个膨胀点
很多人以为仿真慢就是因为网格多,实际上高频仿真里的瓶颈要比这复杂得多。我习惯把“为什么跑不动”拆成三个膨胀点来看:网格量、未知量、交互量。搞清楚这三个点,才知道该用什么手段去压。
1.1 网格量:高频带来的天然膨胀
高频电磁场仿真的核心特点就是“电大尺寸”。一个结构在低频下可能只有一个波长,到了毫米波频段动辄十几个波长,而仿真精度要求每个波长至少剖分10到20个网格单元。这就导致一个很恐怖的连锁效应:频率每翻一倍,线性尺寸减半,但波长也减半,要在同样物理尺寸的模型上保持精度,网格数量大概要翻四到八倍。我做过一个Ka波段的缝隙阵天线,频率从10GHz扫到35GHz,网格量从700万直接涨到了9000多万,单机的内存和CPU直接被吃干净。
这里要补一个概念,高频仿真里最常用的是有限元法(FEM)和矩量法(MoM),它们的网格剖分逻辑不太一样。FEM用四面体填充整个计算域,网格量跟体积成正比;MoM只在金属表面剖分三角形网格,网格量跟表面积成正比。同样的结构,MoM的网格数通常比FEM少一两个数量级,但生成的矩阵是稠密的,内存占用随未知量平方增长。很多人在高频段坚持用FEM,结果没几天就发现内存爆了,其实换个思路用MoM或者混合算法,反而能算出结果。
1.2 未知量:真正吃掉内存和CPU的大户
网格量只是表面数字,真正决定求解难度的是未知量。FEM的未知量大约等于四面体网格数量乘以每个单元内部的形函数阶数;MoM的未知量则约等于三角形网格数量乘以基函数阶数。以一阶基函数为例,一个5000万网格的FEM模型,未知量大概在6000万到8000万之间,直接求解器对这个量级的矩阵做LU分解,内存需求可以超过500GB,这已经不是一台工作站能扛住的了。
这也是为什么大规模高频仿真必须引入并行计算的直接原因。不是说要优化代码让单核跑得更快,而是要把几千万甚至上亿个未知量拆分到多个计算节点上,让内存凑得够、让矩阵运算分摊开来。我常跟人打个比方:单核求解就像一个人搬一栋楼的家具,并行计算就是叫来几十个人,每人分几个房间搬,关键不是人多,而是怎么分房间才能不互相撞车,这正是并行策略要解决的问题。
1.3 交互量:阵元和结构之间的耦合
还有一个容易被忽略的膨胀点:结构之间的电磁耦合。大规模阵列天线、车载多天线系统、整机电磁兼容模型,都不只是“把单个结构算出来再叠加”这么简单。阵元之间的互耦、共地电流、腔体谐振等效应会让计算复杂度额外增加很多。如果按全波方法严格处理,N
