CFX中配置RGP表:从理想气体到真实气体超临界仿真
第一次在 CFX 里跑 CO2 超临界换热器时我用理想气体模型算出来的流量比实测偏了接近 20%当时第一反应是边界条件设错了。后来把 NIST REFPROP 的热物性数据转成 RGP 表在 CFX Pre 里配置好并挂到材料上同一个网格和边界条件下误差直接压到 3% 以内。RGPReal Gas Properties表的本质就是把真实气体状态方程的高精度物性预先按温度和压力网格计算成查表文件求解器在每一轮迭代中直接插值使用。这篇文章适合正在做高压气体、制冷剂、天然气或超临界流体仿真的朋友不管你是刚接触 CFX-Pre 的新手还是已经跑过几个算例、想彻底摆脱理想气体假设的人都可以照下面的步骤把 RGP 表配起来。1. 为什么要用 RGP 表理想气体假设在高工况下撑不住1.1 理想气体假设的适用边界很多从 Fluent 或 CFX 基础教程入门的人第一个接触的气体模型基本就是 Ideal Gas。它在数学上太方便了密度用 p/RT 一算就出来比热容可以设成常数声速、焓、熵也都有闭式表达式。对于常温常压下的空气、燃烧烟气这类问题这个假设误差很小工程上完全够用。但理想气体成立的隐含条件是分子间作用力可以忽略分子本身所占体积可以忽略。这两个条件在什么情况下会被打破高压、低温、近临界或超临界区、强膨胀或强压缩过程。你只要把压力提到几个兆帕或者把温度降到接近沸点很多气体的压缩因子 Z 就会明显偏离 1这时候再用 p/RT 算密度偏差轻则百分之几重则百分之二十以上。压缩因子这个概念可以这么理解理想气体压缩因子恒等于 1Z 偏离 1 的程度就是真实气体偏离理想气体的程度。在做高压比透平、节流制冷、超临界 CO2 循环这类仿真时你算出来的密度如果直接错 10%那么质量流量、压降、换热量会跟着连锁跑偏最后整个算例的可信度都没了。1.2 高压、超临界工况下的密度偏差是源头问题我在实际项目里遇到过最典型的情况是跨临界 CO2 热泵系统仿真。临界压力 7.38 MPa临界温度 31°C这两个参数其实非常亲民很多工程工况轻松越过临界点。在临界点附近CO2 的密度随压力和温度变化极其剧烈可能压力只变 0.5 MPa密度就翻倍。如果还用理想气体假设计算得到的速度场和真实流场完全是两回事。还有一类是天然气管道或储气库仿真。天然气的组分里甲烷占大头但高压下乙烷、丙烷、CO2、N2 这些组分混合之后压缩因子在 0.8 左右是常态。管道压降计算中密度误差会直接影响压降梯度进而影响压缩机站布置和管径选型这种时候谁还敢用理想气体有机物朗肯循环ORC里的工质也一样比如 R245fa、R134a、R1233zd(E)这些制冷剂分子量较大在冷凝和蒸发过程中处于饱和线附近气液相变过程中真实气体效应非常显著理想气体模型在相变区基本就是失效的。我之前看过一个说法判断你该不该用 RGP 表最简单的办法是拿 REFPROP 或 CoolProp 算一下你入口工况下的压缩因子如果 Z 与 1 的偏差超过 2%就值得认真考虑真实气体模型。如果偏差超过 5%那基本就应该放弃理想气体假设。1.3 RGP 表的工作方式把高精度状态方程变成查表RGP 表解决的核心矛盾是高精度状态方程比如 REFPROP 背后的混合物模型计算量太大CFX 求解器如果在每一步都对每个单元重新解一次完整状态方程计算开销会非常可观而且容易在迭代中出现数值振荡。RGP 表的思路是预先计算。你把关心的温度范围、压力范围划成网格在每个网格点上算出密度、定压比热、焓、熵、声速、动力黏度、导热系数等物性存成一份结构化文件。CFX 求解器在迭代时根据当前单元的温度和压力在表里做插值直接取用物性值。查表插值的速度和稳定性要比实时解状态方程好很多。所以 RGP 表本质上是一个精度和计算量之间的折中方案生成表格时你可以用最精确的模型、最密的网格把难算的部分都提前算完进入求解器之后只剩下双线性或高阶插值又快又稳。什么时候必须用 RGP 表我的经验是只要流场中存在明显的大范围压力变化或温度变化并且工质不是常规空气就值得考虑。尤其是跨临界、超临界、高速膨胀、节流阀、射流、泵内流动这些场景建议直接上 RGP。2. 配置前先搞定 RGP 数据文件、单位与范围2.1 RGP 文件的三个主要来源开始点 CFX-Pre 之前你先得有一份 .rgp 文件。这个文件从哪来是这一步最核心的问题。第一种也是工程中最常见的用 NIST REFPROP 导出。REFPROP 是制冷和流体热物性领域的工业标准数据库覆盖几百种纯流体和混合物。新版 REFPROP 在安装时会提供针对 CFD 工具的导出接口或者提供一个独立的 Export 工具可以选择导出 CFX 支持的 RGP 格式。你在 REFPROP 里选好工质、组分比例、温度范围、压力范围、步长点导出就能拿到一份 .rgp 文件。第二种用开源或半开源的物性库典型的是 CoolProp。CoolProp 的纯流体和混合物计算能力也很强而且支持多种导出格式。如果你拿到的版本支持 CFX RGP 导出那它就是一个免费替代方案。如果版本不支持也可以自己写个 Python 脚本调用 CoolProp 按网格点计算物性再按照 .rgp 的格式要求自己拼文件。这个方法灵活但需要你打开一份已知可用的 .rgp 文件研究里面的头部格式、字段顺序、单位标记。第三种在 ANSYS 生态内部生成。某些 CFX 版本在 Properties 面板里内置了 RGP 表生成功能你只需要选择状态方程类型并输入相应参数它会按设定范围自动生成表格数据。这类功能适合常见的立方状态方程比如 Peng-Robinson精度和 REFPROP 相比会差一些但对于常规天然气、碳氢化合物组分也够用。具体入口在不同版本里位置不太一样有的在 Properties 面板里有的在独立的小工具里需要看版本帮助文档。我个人的建议是如果你手头有 REFPROP 的授权优先用 REFPROP。没有的话先试 CoolProp再不行就用 ANSYS 自带生成。这三种路径出来的 .rgp 文件在 CFX-Pre 里的导入流程基本一样只是文件内部网格质量和物性准确性有差别。2.2 生成表格前先定好工况包络这一条非常关键而且很多人会踩坑。生成 RGP 表时温度范围和压力范围不能只取设计工况那一个点或一小段区间。因为实际流场里会有各种你预想不到的局部状态高压区域可能有局部滞止升温节流后压力可能掉到比出口压力还低近壁面加热区温度可能比入口总温高一截。如果表范围不够求解器一旦查表越界就会外推外推出来的物性可能完全不符合物理轻则警告重则直接发散。我的习惯是先看一眼整个计算域入口、出口、壁面温度/压力的大致包络再把生成范围往外扩。温度下限往下多留 20K 或往下乘 0.8温度上限往上多留 20K 或乘 1.2压力下限如果接近真空就按绝对压力 0.01 bar 量级处理上限往上乘 1.2 或加几个 bar。总之要把可能出现的工况全部装进去。网格步长也要注意。RGP 表本质是离散查表密集程度决定插值精度。在物性变化平缓的区域步长可以放粗在近临界区、接近饱和线的两相区边界物性变化非常陡峭需要局部加密。REFPROP 和 CoolProp 的导出工具一般支持不均匀网格或者在指定区间加密你可以在临界点附近单独加密几层网格点。这里要特别说一句步长不是越密越好。表格越大文件越长CFX 读入时消耗的内存和初始化时间也越多。而且物性在某些区域比如临界点附近解析模型本身会有数值尖峰你把网格加得太密反而可能把尖峰如实捕获导致插值时出现非物理振荡。我一般先用中等密度网格温度步长 5K、压力步长 2~5 bar 左右跑通流程看收敛和结果如果物性敏感再加密特定区域。2.3 单位统一与版本兼容单位制不统一是 RGP 表使用中最隐蔽的坑。导出的文件里温度用开尔文还是摄氏度压力用 Pa 还是 bar密度用 kg/m³ 还是 kmol/m³比焓用 J/kg 还是 kJ/kg这些一旦搞错导入 CFX 之后不会立刻报错但计算结果会出现莫名其妙的量级错误。比如密度差了 1000 倍流量差了 1000 倍这种灵异现象排查起来最费时间。我的建议是导出时统一使用 SI 基本单位制的物性温度用 K压力用 Pa密度用 kg/m³比焓用 J/kg比熵用 J/(kg·K)。CFX 内部默认就是这一套这么导可以最大程度避免单位换算错误。如果你从某个软件导出的热导率单位是 W/(m·K)、黏度单位是 Pa·s这些通常没问题但务必看一眼。版本兼容性也是实际操作中容易翻车的地方。RGP 表格式在不同 ANSYS 版本之间可能有细微差异。低版本 CFX 打开由高版本软件导出的 .rgp 文件有时会出现提示升级或直接无法读取反过来高版本读低版本文件一般兼容性稍好但也不保证所有字段都保留。如果你要在多台电脑、多个版本之间协同工作最好让生成 RGP 文件的一方使用团队内较低的基础版本或者干脆把生成时的原始参数一起共享有人缺文件时在原环境重新导一份。文件路径也要谨慎CFX-Pre 和 Slover 对中文路径的支持并不好.rgp 文件所在目录最好全是英文不要有空格和特殊符号文件名也尽量简洁。我习惯建一个专门的 rpg 目录比如 D:\cfx_rgp\co2_case1.rgp后续导入、共享都方便。3. CFX Pre 中加载与校验 RGP 表的具体操作3.1 启动 CFX-Pre 并打开 Properties 面板配置 RGP 表的第一步自然是进入 CFX-Pre。启动方式有两种一种是直接从 Windows 开始菜单启动 CFX-Pre然后手动建一个空白算例另一种是从 Workbench 的 CFX 模块中双击 Setup 单元格系统会基于你准备好的网格文件打开 CFX-Pre并把网格挂载到当前算例。如果你的网格还没生成建议先把网格处理好再把 CFX-Pre 挂上去后续材料、域、边界设置都在同一个工程里进行。进入 CFX-Pre 主界面后你会在左下角看到 Outline 树形结构里面有 Analysis、Domain、Boundary 等条目。RGP 表的配置入口不在这个树里而在一个叫 Properties 的独立面板中。打开它的路径通常是通过菜单栏 File → Properties也可以看主工具栏上有没有一个 Properties 的开关按钮或者使用快捷键 CtrlU不同版本快捷键可能有差异以你屏幕上实际显示为准。第一次打开 Properties 面板时你可能觉得它信息量很大里面有 Materials、Reactions、Additional Variables、RGP Table 等多个选项卡。从名字就能看出CFX-Pre 把所有全局属性集中在这里管理RGP 表是其中一个类别。如果你打开后没看到 RGP Table 或者类似名称的页签先不要急检查一下面板右侧的折叠菜单或者滚动条有些版本的入口藏在次级菜单里。实在找不到就看当前版本帮助文档中 Properties 的索引页。3.2 导入 .rgp 文件并检查状态量找到 RGP Table 页签之后通常能看到一个列表初始是空的。点击导入或新建按钮在弹出的文件浏览器中选择你准备好的 .rgp 文件。如果文件格式正确列表里会出现一条记录显示表名称以及软件识别到的温度范围、压力范围、物性字段数量。如果点击导入后没有任何反应或者弹出错误对话框多半是文件格式和当前 CFX 版本不兼容或者文件路径有问题这个我们在第 5 部分详细排查。导入成功不代表万事大吉我强烈建议你花两分钟校验一下表格内容。先看温度范围、压力范围和你预期的工况包络是否一致再逐项检查密度范围、比焓范围有没有明显不合理的数值。比如密度出现了负数或者比焓随着温度升高反而下降这通常说明导出时单位选错或组分设置错误。校验物性最直接的办法是和 REFPROP 对照。在 RGP 表覆盖的范围内取几个关键点入口总温总压点、出口静压对应的饱和温度点、以及一个接近临界点的状态。手动在 REFPROP 或 CoolProp 里查一下这些点的密度、比焓、比熵再和你导入的表格在相同点上的查表值对比。如果偏差在插值误差范围内说明表格可信如果偏差很大赶紧回到生成环节找原因不要在 CFX 里强行往下做。做完校验后我习惯给表重命名规则一般是工质_温度范围_压力范围_版本比如 CO2_220K_600K_0p1_30MPa_v1。这么做的原因很简单CFX 里一个工程可能同时引入多张表默认表名往往是一串无意义的字符或者只是工质名定义边界和初始化时很容易选错。重命名这一步花不了三十秒后期能省很多麻烦。4. 材料、域与边界条件的关联细节4.1 新建流体材料并绑定 RGP 表RGP 表导入 Properties 面板之后还只是躺在那里的一份数据求解器不知道它该跟谁关联。你要做的是新建一种流体材料把这张表挂上去。在 Properties 面板的 Materials 页签下点击新建材料按钮材料名称建议直接取工质名比如 CO2_RGP。类型选择 Fluid然后在材料属性的方程状态Equation of State一栏选 RGP Table 或 RGP 选项接着在下拉列表或选择窗口里选中你刚刚导入的那张表。如果材料面板里有多个物性字段需要指定比如动力黏度和导热系数你需要再检查一下 .rgp 文件里是否包含输运物性字段。如果包含就把这两个属性也选成从 RGP 表读取如果不包含就只能先给常数或分段拟合的关联式但这种情况下要注意你的关联式适用范围是否覆盖整个流场。这里有一个很容易忽略的细节CFX 自带的默认材料库里已经有 Air Ideal Gas、Water 等常见材料如果你的 RGP 表对应的工质恰好是水或某种制冷剂不要直接把默认材料拿来改而是新建一个独立材料。默认材料往往附带了一些预设属性、反应机制或相变模型直接在它上面修改容易留下隐藏冲突。创建好材料后在 Outline 树里找到你的计算域逐个打开域的设置。域里一般有一个 Fluid 字段与流体模型设置你要在 Fluid 的材料下拉列表里选择新建的 CO2_RGP 材料。这一步做完RGP 表才算真正进入了求解域。4.2 域与边界条件怎么关联 RGP 物性域关联好材料之后边界条件的设置也会受影响。CFX 的边界条件类型很多但和 RGP 表关系最大的无非是三种入口、出口、壁面热边界。入口边界如果给定总温和总压求解器会根据总压、总温和 RGP 表反算出密度、焓、熵这组计算完全基于真实气体物性。这里要注意入口给定的是总压还是静压以及 CFX 中参考压力Reference Pressure的设置。在我的经验里最常见的问题是参考压力没改CFX 默认参考压力是 1 atm如果你边界条件里填的是 1 MPa 表压实际求解器按绝对压力计算时很容易出现混乱。建议在域设置里把参考压力设为 0边界条件全部使用绝对压力这样和 RGP 表内部用的绝对压力标准一致省得心算换算。出口边界如果给静压同样需要注意静压值和 RGP 表压力范围的关系。如果出口背压低于表的下限或者节流后局部压力突破了表范围求解器就会在边界上进行外推物性偏差会被边界反作用回整个流场。壁面热边界相对简单一些但如果你的壁面温度设置得很高或很低导致近壁区域温度超出 RGP 表范围一样会触发外推警告。做高温壁面换热仿真时最好提前确认壁温加上近壁流体的温度不会越过表上限。4.3 初始化和求解控制里容易被忽略的细节CFX 求解器在迭代前需要给定初始场。默认初始化往往是均匀速度场、均匀温度场和均匀压力场这些初值如果落在 RGP 表范围之外求解器会在第一轮迭代时就查表越界。尤其当你算的是超临界流动时初始压力如果设得离临界压力太远初期密度就会非常离谱残差曲线可能会出现大幅度振荡甚至直接发散。我的做法是初始化时把压力设成入口或出口压力区间的中间值温度设成入口总温附近速度设成由参考流量估算的平均速度。如果条件允许还可以先用一阶迎风格式跑几百步等流场粗结构建立起来再切到二阶格式继续算。这个方法对任何复杂工况都适用在引入 RGP 表这种强非线性物性后尤其重要。求解控制里的时间步长或 Courant 数也要调整。真实气体物性插值比理想气体的解析计算更容易引入数值刚性尤其当温度、压力跨越临界区时密度随压力变化率很大压力修正方程的系数会变得敏感。建议先把 Courant 数调低到 1 左右试算确认残差平稳后逐渐调高。如果你做的是瞬态计算又希望中途暂停以便检查物性选择CFX 支持在求解时生成中间结果文件之后可以续算。但尽量不要在物性设置有问题的情况下强行续算否则中间结果文件里的物性场也是错的续算只会放大错误。5. 容易翻车的报错场景与排查顺序5.1 加载阶段报错路径、格式与版本问题RGP 表使用中最常见的报错发生在导入环节。CFX-Pre 弹出类似Unable to read RGP table或Invalid file format的提示时不要急着怀疑软件坏了按下面顺序排查。第一文件路径是否包含中文、空格或特殊字符。有些同事把 .rgp 文件放在桌面上而用户名是中文结果 CFX 一直读不出文件改放到 D:\rgp_files\ 下之后问题立刻消失。第二文件是否被完整导出。REFPROP 在导出大文件时如果电脑休眠或磁盘空间不足生成的 .rgp 可能只有几十 KB明显比正常大小小很多这种文件基本不能读。第三版本兼容性。如果你是用新版 ANSYS 导出的格式放到旧版 CFX 里面读报错的概率很高。如果你有一定的排查基础可以用文本编辑器打开 .rgp 文件看一眼头部。ASCII 格式的 RGP 表会有一段说明头写清楚格式版本、工质、温度范围、压力范围、生成软件版本。如果头部格式和你使用的 CFX 版本明显对不上直接找生成源重新导不用浪费时间研究文件内部细节。5.2 求解阶段报错范围外推与材料未关联RGP 表成功导入并关联后真正的麻烦在求解阶段出现。我遇到过的求解器报错主要有三类。第一类是外推警告或错误。求解器提示信息中通常会出现RGP table out of range、temperature below minimum、pressure exceeds maximum之类的关键词。解决思路很直接要么扩大 RGP 表的范围重新生成文件要么调整边界条件或初始化值。这里我特别提醒一句不要在求解器里开启允许外推就算完事。外推得到的物性可能严重违背热力学规律结果没有任何物理意义。合理的做法是回到 CFX-Pre 查看报错单元所在位置的温度和压力确认物理上是否可能存在这个状态再决定是扩表还是改边界条件。第二类是材料没关联好。报错信息往往比较隐晦比如Material ... has no thermodynamic properties或者unable to evaluate density。出现这类信息时先去域设置里确认 Fluid 材料是不是选成了默认空气而不是你新建的 CO2_RGP。我见过不少人导入了 RGP 表也在 Properties 面板里建了材料却忘了把域或者边界条件中的材料引用替换掉结果求解器一直按理想气体在算RGP 表白配了。第三类是参考压力与单位问题。报错信息可能不明显只是结果物性出现量级错误。比如密度正常应该是 100 kg/m³ 量级结果算出来是 0.1那基本可以断定压力单位或参考压力设置有问题。这种问题排查起来最费时间所以我前面才反复强调生成表格时要统一 SI 单位。5.3 一次典型的排查链路复盘拿一个真实案例来复盘。我之前给一个超临界 CO2 涡轮模型配 RGP 表求解器计算到第 500 步左右发散。打开 Solver Manager 输出的 .out 文件搜索 warning 或 error看到一条关于temperature below RGP table minimum的记录并附带单元编号或不稳定区域的提示。于是我在 CFX-Post 查看那个区域的位置发现是导流叶片的吸力面附近由于气体高速膨胀局部温度比入口总温低了一大截直接冲出了我设定的表下限。当时我面临两个选择一是把 RGP 表温度下限从 250K 扩展到 200K回 REFPROP 重新导出二是调整计算模型认为吸力面的低温是网格不够加密导致的数值振荡。我先是检查了网格在叶尖附近的 y发现确实太粗加密叶尖附近网格后局部低温现象缓解了很多但残留仍然超出原来的表下限。最后我两个都做了网格加密 表范围向下扩展。重算之后残差曲线平稳下降没有再出现 RGP 相关的报错。这个案例提醒我一个很重要的点报错信息只是表象要把物理分析和数值分析结合起来判断。如果只是为了消除报警而不断扩展 RGP 表范围可能掩盖掉真实存在的网格问题或模型设置问题。反过来如果只修网格而忽略物性表范围不够的事实也会在后续其他工况中翻车。6. 几次实测后沉淀下来的配置习惯6.1 让每张表都可追溯我见过有人一个工程目录下散落着 co2.rgp、co2_final.rgp、co2_newest.rgp 这种文件过两个星期连自己都分不清哪张表对应哪个工况。RGP 表的生成过程包含太多参数工质、组分比例、状态方程版本、温度范围、压力范围、步长、网格加密策略任何一个参数变了表格内容就不一样。我现在习惯是把所有生成参数写进文件名同时在项目目录下保留一个 README.txt记录生成的时间、软件版本、主要参数和适用算例。文件名举例R1233zd_E_300K_450K_0p1_5MPa_step5K_2bar_v1.rgp。这样的好处是半年后如果这个算例需要复现或者同事拿到这个文件做对照只看名字就大致知道覆盖范围不用把文件导入软件里才能查。6.2 性能与精度的取舍RGP 表的网格密度直接决定插值精度和计算资源消耗。前期试算阶段没必要一上来就生成非常密的表先用中等密度表格把整个流程跑通确认模型设置、边界条件、初始场都没有问题再根据物性敏感区域决定是否加密。我在一个天然气减压阀仿真里做过对比温度步长从 10K 降到 5K压力步长从 5 bar 降到 2 bar计算结果中出口温度只变化了 0.3K但读表时间增加了接近一倍。这说明在那个工况下稀疏网格已经足够再加密只是浪费。但近临界区是例外。CO2 在临界点附近密度变化极其剧烈我当时对比过同样只改温度步长临界区附近的热通量结果相差了 7%。所以基本原则是远离临界点和两相边界时用粗网格近临界区和相变边界附近手动加密几层点这样性价比最高。6.3 跨版本与团队协作时的注意事项如果你的项目有多个工程师参与或者会在不同电脑、不同 ANSYS 版本之间迁移有几点非常实用的小建议。第一共享原始生成配置而不是只共享 .rgp 文件。这样任何一个人在拿到文件后如果发现版本不兼容或范围不对可以在自己的环境里重新生成而不是干着急。第二统一团队内 RGP 表文件的存放路径。Windows 环境下不同电脑的用户名不一样如果文件引用的是绝对路径换电脑后需要在 CFX-Pre 里重新关联路径。第三.def 文件在保存时会记录 RGP 表的路径你把 .def 发给别人之前最好提醒对方检查 RGP 表路径是否有效。实际工作中我吃过这个亏对方打开 .def 时提示找不到 .rgp整个前处理流程中断最后重新关联才恢复。还有一个容易被忽略的点模拟完成之后如果你想修改 RGP 表范围重新生成一定要重新导入并重新生成 .def 文件而不是直接在旧 .def 文件上改路径。因为 CFX 的一些内部数据结构会在导入时建立索引路径变了但索引没刷新会造成查表错误而且这种错误不会立刻报错只会让结果悄悄变味。配置 RGP 表这件事单独看每一步都不复杂但牵涉到文件生成、单位管理、范围设置、材料绑定、边界关联、求解调参这么多环节任何一个环节掉链子最终结果都不可靠。我后来养成的习惯是每次新建算例时先在 Properties 面板里看一眼 RGP 表的范围和单位再看一眼边界条件有没有超出范围顺手检查一下域材料是否选对这五分钟的检查能让后续求解轻松很多。