第四章 有限元分析入门
做轻量化反射镜,你绕不开有限元分析。说白了,它就是把你手里那个连续的整体,拆成一个个小单元,然后挨个算变形,再拼回去。我刚开始接触这行的时候,总觉得这玩意儿太抽象,直到第一次用有限元算出一块镜子的面形误差,跟实测数据对上了——嗯,那种感觉,就像你亲手调出来的光路终于出了干涉条纹。
4.1 有限元法的基本思想
有限元法的核心就八个字:化整为零,积零为整。你想想看,一块直径300mm的反射镜,你不可能用一个方程描述它整个面的变形。但如果你把它切成几千个小三角形,每个小三角形内部的变形规律就简单多了。
核心流程:
- 离散化——把连续体切成有限个单元,单元之间通过节点连接
- 单元分析——建立每个单元的刚度矩阵 [k] 和节点力向量 {f}
- 整体组装——把所有单元的刚度矩阵拼成总刚矩阵 [K]
- 施加边界条件——固定某些节点的自由度
- 求解——解方程 [K]{u} = {F},得到每个节点的位移 {u}
- 后处理——从节点位移反推单元应变、应力
我在项目中遇到过一位同事,他总觉得网格越密越好。结果算一个简单的悬臂梁,网格密到几十万单元,算了一整夜。其实没必要。你只要抓住关键区域加密,其他地方粗一点就行。这就是有限元分析的「性价比」思维。
4.2 网格划分原则
网格划分是有限元分析里最吃经验的一步。我见过太多人栽在这上面。网格分得好,结果准;分得不好,算出来也是垃圾。
4.2.1 单元类型选择
对于反射镜分析,我常用的单元类型就三种:
| 单元类型 | 适用场景 | 节点数 | 自由度 |
|---|---|---|---|
| 壳单元 (Shell) | 薄壁反射镜、镜面厚度均匀 | 4 或 8 | 每个节点 6 个 |
| 实体单元 (Solid) | 厚镜、变厚度镜、蜂窝背板 | 8 或 20 | 每个节点 3 个 |
| 梁单元 (Beam) | 支撑结构、柔性铰链 | 2 | 每个节点 6 个 |
我个人习惯,对于直径厚度比大于 20:1 的反射镜,优先用壳单元。计算量小,精度也够。如果镜体有复杂的背部结构,比如蜂窝状减重孔,那就得上实体单元了。
4.2.2 网格密度控制
网格密度不是均匀的。你想想看,镜面边缘的支撑点附近、减重孔的转角处,应力集中,变形梯度大,这些地方必须加密。而镜面中心区域,变形平缓,网格可以粗一些。
我的经验法则:
- 支撑点附近:网格尺寸 ≤ 支撑点直径的 1/4
- 镜面光学区域:至少 6 层单元厚度方向
- 减重孔转角:至少 3 个单元过渡
- 整体网格数量:对于直径 300mm 的反射镜,1~3 万单元足够
4.2.3 网格质量检查
网格画完了,别急着算。先检查质量。我常用的指标有这几个:
- 长宽比 (Aspect Ratio)——理想值接近 1,不要超过 5
- 翘曲度 (Warpage)——对于壳单元,翘曲角不要超过 15°
- 雅可比 (Jacobian)——单元变形后的质量指标,不要低于 0.7
- 最小内角——三角形单元不要小于 20°,四边形不要小于 45°
我曾经踩过的坑:有一次我算一块 500mm 的 SiC 反射镜,网格画完没检查就直接提交计算。结果算出来的面形 RMS 值异常大,排查了两天才发现是几个单元的雅可比只有 0.3,导致局部刚度矩阵奇异。从那以后,网格质量检查成了我流程里的固定步骤。
4.3 边界条件设置
边界条件设置,说白了就是告诉软件「哪里固定、哪里受力」。这一步错了,后面全白搭。
4.3.1 支撑边界
反射镜的支撑方式决定了边界条件的类型:
| 支撑方式 | 边界条件设置 | 注意事项 |
|---|---|---|
| 三点支撑 | 约束支撑点处节点的所有平动自由度 (UX=UY=UZ=0) | 不要过度约束转动自由度,否则会产生虚假弯矩 |
| 背部多点支撑 | 在支撑点施加弹性约束 (弹簧单元) | 弹簧刚度需根据实际支撑结构计算 |
| 周边支撑 | 约束镜面边缘节点的轴向位移 (UZ=0) | 径向自由度应释放,避免热应力 |
| 柔性支撑 | 用梁单元或弹簧单元模拟柔性铰链 | 注意柔性铰链的刚度方向性 |
我建议,对于三点支撑,不要简单地把三个点全部固定死。你想想看,如果三个点都完全固定,镜体在温度变化时无法自由膨胀,算出来的热变形会偏大。正确的做法是:一个点固定所有平动自由度,另外两个点只固定轴向自由度,释放径向。
4.3.2 载荷边界
反射镜承受的载荷主要有:
- 重力载荷——施加整体重力加速度,注意方向(通常沿光轴方向或垂直光轴)
- 温度载荷——施加均匀温度变化或温度梯度
- 装配预紧力——在支撑点施加预紧力或预位移
- 风载/振动——施加压力或加速度谱
关键提醒:重力载荷的方向一定要跟实际使用状态一致。我见过有人把反射镜竖着放(光轴水平)分析,结果重力方向设成了垂直光轴,算出来的面形完全不对。地面测试时镜子是水平放置的,但在轨使用时可能是竖直的——这两个工况要分别算。
4.4 求解器选择
求解器选对了,事半功倍;选错了,算到天荒地老。
4.4.1 常见求解器对比
| 求解器类型 | 适用问题 | 内存需求 | 计算速度 |
|---|---|---|---|
| 直接求解器 (Sparse Direct) | 中小规模模型 (<10万自由度) | 高 | 快 |
| 迭代求解器 (PCG/AMG) | 大规模模型 (>10万自由度) | 低 | 中等 |
| 模态求解器 (Lanczos) | 模态分析 | 中等 | 快 |
| 显式求解器 (Explicit) | 冲击、碰撞、大变形 | 低 | 慢(但稳定) |
对于反射镜的静力分析,我通常用直接求解器。模型自由度一般不超过 20 万,直接求解又快又稳。如果模型特别大,比如整块 1.5m 的 SiC 镜体,网格细到 50 万自由度以上,那就得上迭代求解器了。
4.4.2 求解参数设置
求解参数里,有几个关键项要注意:
- 大变形开关 (NLGEOM)——反射镜变形通常很小(微米级),关掉大变形,用线性求解即可
- 自动时间步 (AUTOTS)——静力分析一般不需要,直接一个载荷步算完
- 求解精度 (TOLERANCE)——默认值通常够用,如果收敛困难,可以适当放宽到 1e-4
- 输出控制 (OUTRES)——只输出节点位移和单元应力,别把中间迭代步全输出,文件会爆炸
一个小技巧:在提交计算前,先做一个「试算」。把网格数量降到 1/10,快速跑一遍,看看边界条件有没有设错、载荷方向对不对。确认没问题了,再用完整网格算。这个习惯帮我省了不知道多少重算的时间。
4.5 有限元分析流程总览
下面这张图,是我自己总结的反射镜有限元分析流程。每次做项目前,我都会对着它过一遍,确保没有遗漏。
你看这个流程,其实是个闭环。算完结果,发现不对,就回到网格划分那一步重新调整。我一般会做三次网格收敛性分析:粗网格、中等网格、细网格,看面形 RMS 值的变化趋势。如果粗网格和细网格的 RMS 差不到 5%,那粗网格的结果就可以用了。
最后再啰嗦一句:有限元分析不是「算出来就完事」。你算出来的面形变形,最终要跟干涉仪的实测数据去对标。如果对不上,别急着怀疑仪器,先回头检查你的模型——边界条件设对了没有?材料参数准不准?网格质量过不过关?我吃过这个亏,所以现在每次出报告,都会附上一句:「本计算结果需经实验验证。」