通过网盘分享的文件:支持多组分混合物refprop
链接: https://pan.baidu.com/s/1UZRNAH7r86js1yQ-cVlzVg 提取码: e1r7

REFPRPp 那条报错弹出来的时候正在跑一个 R410A 的两相蒸发算例,前面稳态都收敛了,一打开相变模型求解器直接卡死,控制台刷屏“无法解析物性”。回去看 UDF 源码,**REFPRPp 那个函数名写的是 REFPROP,少了后面那个 p**,编译器没报错,运行时函数指针找不到,物理量全返回零。
装 Refprop 之后先配环境变量。RPprefix 指向安装目录,`C:\Program Files\REFPROP` 这种,PATH 里也把这个目录加进去。不配的话 UDF 里 LoadLibrary 找不到 REFPRP64.DLL,初始化就失败。安装目录下的 fluids 和 mixtures 两个文件夹也拷到 Fluent 的 libudf 工作目录下面,不然 REFPRPp 读不到工质文件,返回错误码出来一堆乱数据。D:\Fluent_work\refprop_udf\ 下面放了一份安装目录的备份。
UDF 里声明 REFPRPp 的接口跟 C 的调用约定要对上。Refprop 的 DLL 导出的是 stdcall 调用约定,`__stdcall` 那个修饰在声明里别漏了,漏了编译能过,运行时栈帧对不齐直接 ACCESS_VIOLATION 崩掉。参数列表七个,两个 double 两个 double 指针两个 double 指针一个 char 指针,逐个对一下。用 VC++ UDF Studio 的话它有现成的 Refprop 封装模板,LoadLibrary 和 GetProcAddress 都写好了,直接填工质名和参数就行。Fluent 自带编译器编译的时候把 REFPROP.h 拷到 `C:\Program Files\ANSYS Inc\v241\fluent\fluent24.1.0\src` 下面,UDF 里 `#include "REFPROP.h"` 才能找到头文件。
单组分用 REFPRPp,混合物用 REFPRPp 的字符串传法。单组分工质名直接传 `"R410A"`,混合物的话用分号把组分连起来,`"R32;R125"`,后面再跟一个数组传摩尔分数或者质量分数。多组分这个接口返回的时候组分顺序跟字符串里的顺序一致,别搞反了,R32 和 R125 的物性差挺多,顺序反了密度差 10% 以上。声明的时候 char 数组的长度给够,255 个字符,短了会被截断,截断之后找不到工质文件报“无法打开流体文件”。
Fluent 控制台里先敲 `define/user-defined/real-gas-models/nist-real-gas-model`,然后 `use NIST real gas?` 选 yes,再输工质名。这一步不做的话 NIST 的物性访问宏 `get_prop_NIST_msp` 调不了,REFPRPp 虽然能返回数值但跟 Fluent 的求解器数据结构对不上,算出来的密度和焓值不参与能量方程迭代。多组分算例里还要在材料面板里把 species transport 打开,混合物里每个组分都要勾上,漏一个组分 UDF 里的组分索引就对不上。
Fluent 自带的 NIST real gas model 有个硬限制,整个计算域只能有一种真实气体,不能跟其他流体共存,气相和液相不能同时出现,两相流不支持。做制冷剂蒸发的时候要么用 Fluent 内置的 NIST 模型配 UDRGM 写混合物,要么完全用 UDF 查表的方式绕过这个限制。查表方式从 Refprop 导温度-压力-物性数据表,UDF 里插值,精度取决于表格密度,高温段步长给小一点,低温段可以大一点。D:\Fluent_work\refprop_udf\lookup_tables\ 下面放了几组导好的数据表。
UDF 编译报“LNK2019 无法解析的外部符号”,链接器找不到 Refprop 的 lib 文件。编译的时候把 refprp64.lib 的路径加到 UDF 的编译选项里,或者在 UDF 源文件里用 `#pragma comment(lib, "C:\\Program Files\\REFPROP\\refprp64.lib")` 显式指定。路径里的反斜杠写双反斜杠,单反斜杠会被当成转义字符。Fluent 自带编译器不认中文路径,工程目录全英文,D:\Fluent_work\refprop_udf\ 这种。
“The UDF library you are trying to load (libudf) is not compiled for 3ddp on the current platform (win64)”,这个报错一般是编译的时候选错了求解器维度,3d 编译的 libudf 拿到 3ddp 上用,重新编译一遍,编译之前确认 Fluent 启动的时候是 3ddp 还是 3d。Refprop 的 DLL 位数也要对,64 位的 Fluent 配 64 位的 refprp64.dll,32 位的 DLL 放进去加载的时候直接崩,先确认安装目录下 DLL 的位数跟 Fluent 一致。
D:\Fluent_work\refprop_udf\ 下面那个 UDF 源码里 REFPRPp 的 stdcall 修饰还没加,下次编译之前补上,还有那个混合物工质字符串里的分隔符用的是逗号,Refprop 要的是分号,这个也要改,参数顺序是……
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删