第一次打开Molflow的人,多半会被那个三维视图和左下角一堆名为Facet1、Facet2的几何树吓到。其实这软件没那么玄乎。Molflow是CERN开源的一套真空模拟工具,专门用来算极低气压下气体分子在管道、真空腔里的运动路径,解决的是“分子从A口进去,有多少能从B口出来”这类问题。而Facet,就是你在软件里画出来的每一个“面”:真空室壁是Facet,泵口是Facet,泄漏口也是Facet,整个几何模型完全由Facet拼出来。
这教程只干一件事:把Facet从2D建模到3D拉伸这条路走通。新手花半小时把这里面的原理和操作吃透,后面再去碰复杂几何、属性设置、网格划分,就顺多了。我当年在这上面走过不少弯路,所以这篇会把关键选择和底层逻辑都讲清楚,不只是给你一套“照着点”的操作步骤。
1. Facet到底是什么:先搞懂Molflow的最小几何单元
1.1 在真空模拟里,Facet承担什么角色
Molflow的核心逻辑可以理解为“很多个镜子之间弹弹珠”。气体分子就是一个一个小球,真空室壁、管道内壁就是镜子,小球打上去,可能被反弹回来,可能被吸附在墙面上,也可能从缝隙里穿过去。这里面每一个“镜子”,就是Facet。
在Molflow里,Facet不是抽象的概念,它身上挂了三个层面的东西:
- 几何层面:它是空间里一个平面多边形,可以是三角形、矩形,也可以是任意多边形,有面积、有位置、有法线方向。
- 物理层面:它被赋予了吸附系数(sticking coefficient)、反射模型、温度、出射通量等参数,决定分子打上来之后会发生什么。
- 统计层面:每个Facet都有累积计数的功能,记录有多少粒子打上来、从哪个方向打上来、吸附了多少、反射了多少,模拟结束后你看的就是这些统计数据。
所以Facet不仅是几何边界,更是数据采集器。你建的每一个面,最后都会输出一组统计结果。这个理解很关键:在Molflow里,少建一个Facet,不只是模型不完整,而是整个粒子的命运记录就少了一条。
1.2 为什么新手要先学好“2D面”再做“3D拉伸”
因为Molflow本质上不是一个CAD软件,它没有一个像SolidWorks那样方便的“画个正方体”按钮。Molflow的所有三维结构,都是由平面Facet拼出来的。一个长方体真空室,其实就是六个矩形Facet;一个圆形管道,其实是很多个四边形、甚至三角形Facet围出来的近似圆。
这就带来一个新手的天然困惑:我不会一上来就建一个复杂的真空系统,那么应该从哪里开始?
答案就是2D。你先得会用Facet在某个平面上画出一个准确的面,理解法线、吸附系数这些基本属性。2D都画不利索,拉伸出来的3D结构十有八九是废的。Molflow的建模思路是:一个合格的真空模型等于“若干张正确的2D面 + 合理的拉伸/变换操作 + 物理属性赋值”。把2D这块地基打牢,3D拉伸只是顺着某个向量走一步的事。
还有一点,Molflow的几何和模拟性能直接相关:太多细碎的Facet会让每个粒子打上去时都要遍历一遍所有面,计算速度会明显下降。所以“用尽可能少的Facet表达正确几何”是建模的基本功。2D建模阶段,就是练习这种“少而精”思维的最佳时机。
2. 动手前的准备:Molflow界面与项目参数设定
2.1 界面速览:新手只需要注意这几个区域
说实话,Molflow的界面初看有点老派,和现在流行的现代软件风格不太一样,但它布局很清晰。新手不用马上把所有面板都搞明白,先盯住几个地方就行。
- 3D视图区:中间最大那块窗口,就是你建模和查看分子的地方,所有Facet都显示在这里。
- 几何树/模型树:通常在左侧或下方,列出了当前项目里的所有Facet。双击某个Facet,就能看到详细参数。
- Facet属性面板:显示当前选中Facet的坐标点列表、面积、法线方向、吸附系数、反射模型、出射参数等关键信息。2D建模时你主要就在这个面板里操作。
- 主工具栏:创建矩形Facet、创建多边形Facet、拉伸/变换、渲染设置这些常用工具都集中在顶部或左侧工具栏。
我习惯的做法是,打开一个新项目之后,先把3D视图的网格显示打开,再开启法线方向显示。这样画出来的每个面,你一眼就能看出它朝哪边,后期调整不会抓瞎。
2.2 项目参数:单位、尺度和精度先定好
很多新手一上来就直接建几何,结果模拟结果怎么都不对,回头一查,是单位制搞混了。Molflow的一个项目里,坐标、面积、体积、出射通量这些参数的单位如果不统一,后面所有分析都会出问题。
在开始建模之前,先确认三件事:
- 单位制:统一用毫米(mm)还是米(m)。我个人通常全流程用毫米,因为真空管件、法兰的标称尺寸都是毫米,直接对照CAD图纸输入坐标会很省事。
- 粒子类型:Molflow里的气体分子属性(质量、直径)会影响分子与壁面的碰撞频率,默认通常能搞定,但如果模拟的是氢气或者特殊气体,要记得改。
- 模拟精度/网格密度:这个可以后面再调,但项目新建时最好就决定好。For测试模型,网格粗一点没关系;如果是正式模型,网格密度不够,细节地方的粒子通量会失真。
还有一个小细节:Molflow支持把气体入口、出口、泵口这些用特殊的Facet属性来表示,比如吸附系数设为1,就代表粒子碰到这个面即被吸收,相当于真空泵或出口;吸附系数设为0,代表完全反射,相当于理想光滑壁面。这些属性在项目设定阶段就应该规划好,而不是等几何建完了再想。
3. 2D建模实战:用Facet画出第一张“面”
3.1 三种常用的2D创建方式
Molflow里创建2D Facet的基本逻辑是:给定一组有序顶点坐标,软件自动生成一个平面多边形。新手需要掌握的创建方式有三种,分别针对不同的场景。
第一种,也是最常用的一种,就是直接用“创建矩形Facet”工具。你只需要指定矩形的两个对角点坐标,软件会自动补出其余两个顶点,生成一个完好的四边形Facet。比如想建一块长100mm、宽50mm的墙,定义两个对角点分别为(0,0,0)和(100,50,0)就行。
第二种,是创建任意多边形Facet。这种适合不规则截面,比如三角形、梯形、甚至形状不规则的管口。方法就是一个一个输入顶点坐标,注意顶点顺序要么全顺时针,要么全逆时针,不然生成的形状会自相交。
第三种,是通过复制已有Facet再微调位置。这个在对称结构里特别省事,比如一个方管的四块侧壁,做好一块,复制三次再旋转,就能拼出完整的管。新手往往忽略这个技巧,总是手工逐点输入坐标,费劲还容易错。
我自己建模型的习惯是“先画草图后落坐标”:先在纸上把要画的形状画出来,标好每个顶点坐标,再在Molflow里统一输入。看似多了一道手写步骤,但能避免很多因为脑子一热输错坐标导致的返工。
3.2 关键参数解析:面积、法线方向和吸附系数
模型里新建完一个Facet之后,属性面板里会显示一串参数。新手不用全懂,但有几个是躲不开的。
面积(Area)是自动计算的,但也最容易遗漏检查。Molflow里面积影响出射通量、单位面积撞击率的计算,如果你画的Facet只是单纯用来表示几何壁面,面积无所谓;但如果这个面代表一个气体源,比如泄漏口,那面积不对,出气量就完全不对。
法线方向(Normal Direction)是重中之中的参数。法线的朝向决定了粒子的“正面”是哪一面。如果法线方向朝向真空腔外侧,粒子从腔内侧飞过来,打到这个面的时候,默认情况下它就认为粒子是从背面打来的,模拟结果就会莫名其妙地少吸附、多穿透。解决办法有两种:一是检查顶点顺序,调整点的排列方向来翻转法线;二是在Facet属性里手动选择“双向面(two-sided)”,让粒子不管从哪边打来都被正常处理。
吸附系数(Sticking Coefficient)代表一个分子打到这个面上被吸附的概率,从0到1。0是完全反射,1是完全吸收。实际使用中,我通常这样设:
| 场景 | 吸附系数 | 说明 |
|---|---|---|
| 普通真空室壁 | 0 | 完全反射,粒子只在壁面反弹 |
| 泵口 | 1 | 打上去就被抽走,当作理想泵 |
| 气体入口 | 1(反向出射) | 设置出射通量,模拟源头 |
| 真实材料表面 | 0.05~0.5 | 根据材料吸附概率粗略估算 |
新手最容易犯的错,就是建完几何忘了改吸附系数,结果所有壁面都按默认值当成全反射处理,模拟出来的整体流导和实际工况差出好几倍。
3.3 操作细节:左手坐标系与顶点顺序
这个必须单独拿出来说,因为几乎每个新手都会在这个坑里摔一次。
Molflow的坐标系遵循特定朝向,用户需要在3D视图里时刻清楚X、Y、Z三个轴的方向。尤其当你开始旋转视角、在不同平面之间切换时,很容易搞混哪个方向是正Z,哪个方向是负X。我自己的习惯是,每次建模型前先做一个简单的标定:在原点附近画一个小三角形Facet,颜色调亮一点,作为方向参照物,避免在复杂视角里失去位置感。
顶点顺序决定法线方向这件事,是新手最容易忽略的。同样四个点,如果按不同顺序连起来,最后形成的面可能朝向完全不同。在Molflow里,判断法线方向可以看3D视图里Facet的正反面颜色,也可以临时开启法线显示。我的经验是:
- 顶点按某一方向(比如逆时针)排列时,法线会指向某个特定方向;
- 把顶点顺序反过来,法线就跟着翻转。
所以,当你发现一个Facet的法线方向不对时,最省事的修法不是手动去改方向向量,而是直接调整顶点输入顺序。另外,如果一个Facet你需要两面都被粒子打到,最好的做法不是去翻转法线,而是把它设为“双向面”,这样两侧的物理逻辑才自然。
4. 3D拉伸:让平面Facet长成完整结构
4.1 拉伸的逻辑:为什么不是简单的“复制”
Molflow里的拉伸操作,本质上不是简单的“复制一份摆到旁边”。复制只能得到两个彼此独立、没有连接的面,而拉伸出的是一个有厚度的三维结构的边界。比如你把一个底面Facet沿Z轴拉伸100mm,得到的不只是底面和顶面,还包括四面侧壁,这才是模拟真正需要的闭合边界。
要知道,真空模拟里粒子是会被侧壁反弹和吸附的。如果只复制底面和顶面而漏掉侧壁,粒子飞到侧面位置时就直接穿出模型区域,数据会严重失真。所以拉伸的意义在于“连带生成侧壁”,并且自动处理好侧壁和顶底面的共用边关系。
用个不恰当的比喻,2D Facet是裁好的布片,3D拉伸就是把这些布片沿着边缘缝成一个袋子。袋子必须完整,气体分子才能老老实实待在里面跑。
4.2 完整拉伸流程:以100×50×100mm方管为例
下面我用一个最简单的例子把拉伸流程走一遍。假设我要建一个长100mm、宽50mm、高100mm的矩形通道,用来模拟一个真空室的雏形。
第一步,先做底面。在XY平面上创建一个矩形Facet,四个顶点坐标我通常这样输入:
Point 1: (0, 0, 0) Point 2: (100, 0, 0) Point 3: (100, 50, 0) Point 4: (0, 50, 0)输入完成后,3D视图里应该出现一个平面矩形。检查一下法线方向:如果我希望法线朝上(+Z方向),那顶点顺序就保持上面这个循环顺序;如果法线朝下,就把点2和点4的顺序对调。
第二步,选中这个底面Facet,找到拉伸(Extrude)工具。Molflow一般要求你输入一个拉伸向量,也就是告诉软件“朝哪个方向拉伸、拉伸多远”。我这里输入(0, 0, 100),代表沿Z轴正方向拉伸100mm。
第三步,设置分段数。如果拉伸的长度比较长,或者后面想在侧壁上布置气体入口、泵口等特殊Facet,最好把侧面分成多段。比如拉伸方向长度100mm,分成4段,每段25mm,这样两边侧壁就会各生成4个独立Facet,方便你针对不同段设置不同属性。
第四步,确认生成。拉伸完成后,模型树里会多出若干Facet,包括:原底面Facet(如果选择了保留)、拉伸后的顶面Facet、以及四周的侧壁Facet。到这里,一个闭合的六面体真空室雏形就出来了。
我特别强调一点:拉伸前的底面Facet和拉伸后的顶面Facet,很多时候它们都是独立存在的,并不自动合并成一个“整体体”。Molflow的几何运算按“面”来,不按“体”来,所以你要保证每个面之间没有重叠、没有缝隙。
4.3 拉伸之后的合并、检查和修正
拉伸完,别急着设参数跑模拟,先做三步检查。
检查重复面。在拉伸过程中,软件有可能会生成重复顶点或重复Facet。重复本身不影响计算,但会拖慢速度,偶尔还会让粒子流方向统计出问题。处理方式很简单:用“消除重复/合并”(Remove duplicate/Grid)类工具,让软件自动把重合的顶点、面合并成一个。这一步我每次拉伸完都会做,算是标准动作。
检查法线方向。一个六面体里,如果某个面的法线朝外、另外几个朝内,粒子从内部出发打到朝外的面上,会出现“背面撞击”的异常现象。所以建完模型第一件事就是开启法线显示,绕着模型转一圈,确保所有面向真空内部的面,法线都指向内侧。方向不对的,翻转顶点顺序修正,而不是强行改法线向量。
检查闭合缝隙。一个闭合真空结构,所有Facet的边缘应该正好接上。如果有缝隙,粒子会从缝隙漏出去,这是新手最难受的问题之一。我的土办法是:放大3D视图,旋转到每个边,肉眼在“线框显示”模式下一格格扫过去。任何一个边如果出现半个面的悬空线段,那就是缝隙或者几何错误,先修好再继续。
做完这三步,你的3D结构才算真正可用。
5. 新手避坑指南与问题排查速查
5.1 常见的三类翻车现场
我见过太多新手在Facet上卡住的案例,翻来覆去其实就是那么几个问题。
第一类,法线方向乱。典型表现是模拟结果中某个壁面的撞击次数意外地少,而它对面的面撞击次数却异常多。原因通常就是这个面的法线朝向反了,或者它是单向面导致粒子从背面打过来不计数。解决方式前面说了:检查顶点顺序、翻转法线,或者干脆设成双向面。但要注意,双向面会让结果统计里“背面撞击”和“正面撞击”混在一起,如果你关心方向性,最好把面修成正确法线,而不是图省事开双向。
第二类,单位不统一,几何“看不见”或者“太大”。这是很多人建完模型一脸懵的常见原因。如果你在某个面里输入的是10(想表达10mm),另一个面输入的是0.01(想表达0.01m),在Molflow内部单位制下这两个数据就差了千倍,渲染出来要么一个面巨大,要么一个面小到看不见。解决办法,咬死一个单位从头用到尾,别手滑混用。
第三类,吸附系数设错,模拟“气体全被吸收”或者“完全不吸附”。这属于物理参数设置问题。新手最容易把“泵口”设成吸附系数1,然后把真空室壁也默认设成1,结果粒子一进模型就被壁面吞干净,真空度计算完全失真。记住:普通壁面吸附系数默认是0,只有你明确想要它当泵/当出口时,才设成接近1的值;真实材料想模拟复合系数,就查文献填一个中间值。
5.2 参数、法线和面方向问题速查表
我把平时用得最多的排查点整理成一个速查表,照着查能省掉一大半低级错误。
| 现象 | 常见原因 | 检查顺序 |
|---|---|---|
| Facet在渲染视图里看不见 | 坐标输入错误;单位不对;面在视角背面 | 1. 点模型树里的名字,按适应视图;2. 检查顶点坐标数值;3. 检查法线方向 |
| 粒子直接穿过某个面 | 面是单向面,且法线朝向粒子来的方向;或面之间存在缝隙 | 1. 开启法线显示;2. 设为双向面;3. 检查相邻面边缘是否重合 |
| 某个壁面撞击数少得诡异 | 法线反向;吸附系数误设过高 | 1. 翻转法线功能试一次;2. 把吸附系数临时调成0再对比 |
| 模型全局速度慢 | Facet数量过多或存在重复面 | 1. 合并重复点/面;2. 检查是否有多余细碎Facet;3. 简化几何 |
| 拉伸出来的结构少面 | 拉伸方向输入错误;分段数设置导致部分段未生成 | 1. 检查拉伸向量;2. 检查分段数;3. 撤销重做一次 |
这表格不是万能的,但可以解决80%的新手问题。我自己每次新建项目,都会把法线方向、单位、吸附系数三个点从头到尾快速扫一遍,再进入正式模拟。
5.3 我的一个小建议:先建最简单的模型测试全流程
最后分享一个我踩过很多次坑之后总结出来的习惯:无论最终要模拟多么复杂的真空系统,先用最简单的几何跑通一次全流程。
什么意思?就是不要一上来就建一个几十个Facet的大模型。先建一个最简单的方盒子,一个入口、一个出口,设置好合理参数,跑一次几十万粒子的模拟,确认接口逻辑、数据输出、渲染显示都没问题了,再在这个基础上去拉伸、去增加细节。
这样做的好处显而易见:排查问题范围小,出错一眼就能看出来。我之前有一次把一个圆形腔体的几何建得很漂亮,结果跑模拟时粒子数怎么都不守恒,查了半天才发现是一个侧壁法线反了。如果先建个盒子试流程,这种低级错误根本拖不到正式模型。
所以在你准备开始正式建模之前,我的建议是:花半小时,亲手用Facet画一个50×50×50mm的小盒子,拉伸出六面体,设置一个入口一个出口,跑一次完整模拟。这个流程走通了,Molflow对你来说就不再是“看不懂的软件”,而只是一个需要慢慢调参的工具而已。