以液氮为例
1.先在REFPROP软件中获取饱和压力与温度的数据表。
2.UDF编写如下:
#include "udf.h"
/* 温度和对应的饱和蒸汽压数据 */
#define N_DATA 51 /* 数据点个数 */
real T_data[N_DATA] = {
-209.15, -208.15, -207.15, -206.15, -205.15, -204.15, -203.15, -202.15, -201.15, -200.15,
-199.15, -198.15, -197.15, -196.15, -195.15, -194.15, -193.15, -192.15, -191.15, -190.15,
-189.15, -188.15, -187.15, -186.15, -185.15, -184.15, -183.15, -182.15, -181.15, -180.15,
-179.15, -178.15, -177.15, -176.15, -175.15, -174.15, -173.15, -172.15, -171.15, -170.15,
-169.15, -168.15, -167.15, -166.15, -165.15, -164.15, -163.15, -162.15, -161.15, -160.15,
-159.15
};
real P_data[N_DATA] = {
14602., 17404., 20623., 24300., 28481., 33213., 38545., 44527., 51213., 58656.,
66914., 76043., 86102., 97152., 109260., 122470., 136870., 152510., 169470., 187800.,
207570., 228860., 251740., 276260., 302510., 330550., 360460., 392300., 426160., 462100.,
500200., 540520., 583160., 628170., 675650., 725660., 778270., 833580., 891660., 952590.,
1016400., 1083300., 1153300., 1226400., 1302800., 1382600., 1465800., 1552600., 1643000., 1737100.,
1835100.
};
/* 线性插值计算 P_sat(T) */
real interpolate_Psat(real T)
{
int i;
/* 边界检查 */
if (T <= T_data[0])
return P_data[0];
if (T >= T_data[N_DATA - 1])
return P_data[N_DATA - 1];
/* 线性插值 */
for (i = 0; i < N_DATA - 1; i++)
{
if (T >= T_data[i] && T <= T_data[i + 1])
{
/* 线性插值公式: P = P1 + (T - T1) * (P2 - P1) / (T2 - T1) */
return P_data[i] + (T - T_data[i]) * (P_data[i + 1] - P_data[i]) / (T_data[i + 1] - T_data[i]);
}
}
return P_data[N_DATA - 1]; /* 保险返回,正常情况不会到这里 */
}
/* Fluent UDF */
DEFINE_PROPERTY(saturation_vapor_pressure, c, t)
{
real T = C_T(c, t); /* 读取当前温度 */
real P_sat = interpolate_Psat(T); /* 计算 P_sat */
return P_sat; /* 返回饱和蒸汽压 */
}
如果需要其他材料,只需将代码中的温度数据与压力数据替换掉即可,注意温度数据与压力数据需要按顺序一一对应。