40_仿真验证 07 —— GetDP 能量法提电感实战:从两个空白文件到 µH 级核对
本篇回答的问题:反激变压器设计 与 电感深潜 都在手算电感(安匝→气隙→AL 值);本篇给出器件级验证手段——开源 FEM(Gmsh+GetDP 磁静场)把磁场能算出来,再用 L=2W/I² 提电感,与解析公式核对。全流程本机实际运行,模型文件已归档 90_资料源/getdp_能量法/。 实测声明:Gmsh 4.13.1 + GetDP 3.5.0(Debian 仓库),2026-10-01 本机三次运行(I=0.5/1/2 A)结果全记录在 §3。 与库内的关系:能量法正是变压器篇 §3“气隙储能占比 99%”论证的反向应用(那里用储能论证气隙主导,这里用储能定义提取 L);双线回路解析公式属教科书通识;对 磁件设计流程的“验证”环是器件级补全。
本篇总结
- 最小可运行的磁 FEA 只要两个文本文件:
loop.geo(几何+区域标签)+loop.pro(材料+源+求解+导出)——不需要 GUI,两条命令出结果(本机全流程 <2 s)。 - 能量法三步:给定电流 I 解磁场 → W=∫½ν|B|²dV → L=2W/I²。线性介质下 L 与 I 无关——本篇用三点电流扫描把这条性质实测成恒等式(0.5/1/2 A 三次运行,L' 恒为 1.2307 µH/m)。
- 解析核对差值的完整分解(经练习①边界收敛实测修正归因):初稿将 −5.1% 全部归因于“有限 Dirichlet 边界”;D=600 mm 实测推翻该归因——本例导体是 1×1 mm² 方截面,严格解析口径为几何平均距离法 1.2430 µH/m(不是内切圆导线近似的 1.2973),按 GMD 口径边界镜像效应只占 −0.99%(D=60)→ −0.28%(D=600),占比最大的 −4.2% 来自截面模型口径差。修正记录见 §3。
- GetDP 语法四类陷阱均已实测复现(§4):模板组名约定、
.geo不支持abs()、PostOperation 没有Integral操作、Format Excel不存在——每个报错的原文与修法都在。 - 同一方法可直接迁移至变压器计算:把“一对反向导体”换成“双绕组+磁芯”,串助/串反两次仿真取差得 M 与漏感 Lσ(§5 给出改造清单;数值留作练习,不虚构数据)。
- 工具链定位:FEMM 本机不可装(Debian 无包),Gmsh+GetDP 组合即可完成磁静场全套——与 01 工具总览 的“磁件手算+FEA 验证”路线一致。
1. 装环境(两条命令)
sudo apt install gmsh getdp
gmsh --version # 本机 4.13.1
getdp --version # 本机 3.5.0
模板库路径(后面 Include 要用):/usr/share/doc/getdp/examples/templates/,例程:/usr/share/doc/getdp/examples/examples/。
2. 两个文件怎么写(全文已归档)
归档:loop.geo、loop.pro、loop.msh(生成网格,可跳过 gmsh 直接重复运行)。
2.1 loop.geo 的设计要点
lc = 0.15e-3; // 导体区网格 0.15mm(1mm 见方导体里给 ~10 单元)
lca = 6e-3; // 空气区粗网格
a = 0.5e-3; // 导体半宽 → 1×1mm² 截面
d = 5e-3; // 半间距 → 两导体中心距 10mm
D = 60e-3; // 方形空气域 ±60mm(外边界 A=0)
- 几何全部矩形:两根 1×1 mm 方截面导体在 x=±5mm、y=0 附近,各 4 点 4 线 1 面;外框 4 点 4 线;
- 空气域 = 外框减去两导体:
Plane Surface(3) = {3,1,2};(带孔面的标准写法); - 物理标签:101=CoilPlus(+z 电流)、102=CoilMinus(−z)、103=Air、200=外边界四条线;
- 每根导体截面 1e-6 m²、给 1e6 A/m² → I=1 A,换算直接。
2.2 loop.pro 的设计要点(关键是“填充模板”)
GetDP 官方磁静场模板 Lib_Magnetostatics_a_phi.pro 无需自行编写方程——只需按约定名填组、填函数:
Group {
Vol_Mag = Region[{CoilP, CoilM, Air}]; // 全磁域
Vol_S0_Mag = Region[{CoilP, CoilM}]; // 规定电流密度区("S0")
Sur_Dir_Mag 或 Dirichlet_a_0 // A=0 边界(本例用后者)
}
Function {
nu[Vol_Mag] = 1/mu0; // 线性介质
js[CoilP] = Vector[0., 0., 1e6]; // 源电流密度
js[CoilM] = Vector[0., 0., -1e6];
}
Constraint { { Name a ; Case { { Region Dirichlet_a_0 ; Value 0. ; } } } }
Include "/usr/share/doc/getdp/examples/templates/Lib_Magnetostatics_a_phi.pro"
- 求解名固定
Magnetostatics_a(矢量位 A 公式); - 后处理
Print[ b, ... ]导出逐单元 B 场到b.pos(能量在外部算,§3)。
2.3 跑起来
gmsh -2 loop.geo -o loop.msh # 2D 网格
getdp loop -solve Magnetostatics_a -pos B # 解 + 导出 b.pos
3. 实测:能量法 + 线性三点 + 解析核对
能量在后处理算(ν 全域常数,直接求和):对 b.pos 每个三角单元 VT(坐标){B值} 取面积 A、单元中心 |B|²,
$$W' = \sum \tfrac12 \nu |B|^2 A, \qquad L' = \frac{2W'}{I^2}\ \ (\mathrm{H/m})$$
本机三跑实测(改 js 幅值,其余不动):
| I | W′ | L′=2W/I² |
|---|---|---|
| 0.5 A | 0.1538 µJ/m | 1.2307 µH/m |
| 1 A | 0.6154 µJ/m | 1.2307 µH/m |
| 2 A | 2.4615 µJ/m | 1.2307 µH/m |
- W ∝ I² 严格成立(1 : 4 : 16 到打印位数),线性介质性质实测确认;
- 解析对照(初稿口径):双线回路外链 µ0/π·arccosh(d/2a) 加每根 µ0/8π 内链 = 1.2973 µH/m → FEA −5.1%,初稿将全部差值归因于“有限 Dirichlet 边界镜像效应”;
- 练习①实测(已完成,归因修正):仅改外框 D=60→600 mm 重网格重解(
loop_600.{geo,msh,pro}已归档,242k 单元 / 120535 自由度,秒级),L′ = 1.2395 µH/m。若初稿归因成立,边界效应应按 1/D² 量级坍缩,误差应收窄到 1% 以下;实际只收窄 0.7 个百分点——说明大头不在边界。深查发现口径错误:本例导体是 1×1 mm² 方截面,上面公式隐含内切圆 r=0.5 mm 圆导线。方截面均匀电流密度的严格解走几何平均距离(GMD)法 L′=(µ0/π)·ln(Dm/GMDs):自 GMD 0.4471 mm(数值二重积分;方法用圆盘精确解 e^(−1/4)r=0.38946 mm 验证,偏差 5×10⁻⁵),互 GMD 10.000 mm → 严格解析 1.2430 µH/m。按此口径重算:D=60 mm −0.99%、D=600 mm −0.28%——Dirichlet 边界确按 1/D² 快速收敛;原 −5.1% = 截面模型口径差 −4.2% + 边界镜像 −1.0%。
读法:不跑 D=600,“−5.1% 全记在边界名下”的口径错误不会暴露——FEA 的价值恰恰在于用收敛性研究检验“看似自洽的归因”。方法验证本身依旧成立:三电流点 L′ 恒等、线性介质与边界行为符合预期、对严格解析 −0.28%(D=600)。
4. 语法陷阱(本机真实报错记录)
| # | 报错原文(节选) | 根因 | 修法 |
|---|---|---|---|
| 1 | Unknown variable 'abs(.)' |
Gmsh .geo 脚本函数集没有 abs() |
老老实实逐条写 Line(1)=... |
| 2 | Constraint 'phi' is not provided + 自己的 Formulation 语法错误 |
以为要自己写方程块 | 别写——Include 官方模板,按约定组名填 Vol_Mag/Vol_S0_Mag/js 即可(phi 警告无害) |
| 3 | syntax error (Integral) |
PostOperation 里没有 Integral[...] 这个操作 |
能量在外部算:导出 b.pos 用脚本积分(或后续再用 GetDP 自定义后处理) |
| 4 | Unknown PostProcessing Format: Excel |
GetDP 3.5 不认该格式名 | Print[ b, ..., File "b.pos" ] 默认格式即可 |
5. 搬到真问题上:双绕组变压器/电感怎么改
改 .geo(加磁芯多区域、两个窗口绕组区标 104/105 匝数标签)与 .pro(nu[Core]=1/(µr·µ0) 线性起步、js 按 NI/A_window 换算)后:
- 自感:一次只给一个绕组通电,
L1=2W/I²; - 互感(能量差法):两绕组串助(同向)得 W_a、串反(反向)得 W_r: $$M=\frac{W_a-W_r}{4I^2},\qquad k=\frac{M}{\sqrt{L_1L_2}}$$
- 漏感(对应库内“漏感 1%~3% 预算”的验证):理想耦合储能 W_ideal=½(L1+L2+2M)I² 对实际场能之差即漏能,Lσ=2(W_ideal−W)/I²——与 §3 的公式同源;
- 磁芯饱和核对:把线性
nu换成 B-H 曲线(模板支持SteelGeneric_nu式非线性函数),看 B 云图是否出现 >0.2 T 集中区——对应 变压器设计 §3 的 ΔB 核算; - 练习②(参数勘误 + 几何线实证,场求解已封存):RM8 档单层电感复算。初稿误把 PQ26 参数(Ae=113 mm²、Np≈24、lg=0.46 mm)绑给 RM8——库内 RM8 档自洽口径是 Ae=60 mm²、Np=45、lg=0.85 mm(见 NCP1342/03 步骤 9)。磁路手算目标 L=µ0N²Ae/(lg+le/µr)≈173 µH(教学取值 le=60 mm、µr=2000;AL 反推核验:lg,eff=µ0N²Ae/L−le/µr=0.848−0.030=0.818 mm≈0.85 mm ✓)。几何侧已由 FreeCAD 无头完整实证:轴对称半平面 28 区共形分区(面积台账 260.6+3.7+183.1+6752.6=7200 mm² 闭合)、OCC 自融合焊接共享边、STEP 读回逐面比对 28/28、Gmsh 导入后按单元重心分类的分组面积与台账精确一致(脚本与模型归档
../90_资料源/getdp_能量法/rm8_*);轴对称场求解未通过,按用户决定搁置,场值不造数。
6. 操作速查
# 全流程
gmsh -2 loop.geo -o loop.msh && getdp loop -solve Magnetostatics_a -pos B
# 换电流:改 loop.pro 两行 js 的 Vector 第三分量,重跑(线性自检)
# 能量积分脚本:解析 b.pos 的 VT(...) 行(§3 公式;归档目录含可直接复制的解析逻辑)
| 量 | 本例值 | 口径 |
|---|---|---|
| 网格尺寸 | 导体 0.15mm / 空气 6mm | 导体角部加密优先 |
| 边界距离 | 60mm −0.99% / 600mm −0.28%(GMD 口径) | 练习①实测完成 |
| 求解耗时 | <1 s(6452 单元) | 网格 ×4 仍秒级 |
要点:磁静场 FEA 的入门门槛就是一个“两个文本文件+两条命令”的双线回路——完成它,你就有了校验一切电感手算公式的器件级标尺;剩下的只是把几何画成磁芯。
2026-10-07 复跑:本篇全部记录值已在本机复现(ngspice 44.2 / LTspice 26.0.2),明细见 10_仿真复跑记录。