首页/文章/ 详情

IAPWS-97饱和压力与饱和温度计算

精品
作者优秀平台推荐
详细信息
文章亮点
作者优秀
优秀教师/意见领袖/博士学历/特邀专家
平台推荐
内容稀缺
4月前浏览6168

本文摘要(由AI生成):

本文介绍了使用C++编写的IF97水蒸气性质计算代码,并通过一个简单的测试文件IF97.CPP来展示其功能。代码通过引用操作对数组EFG进行多次变换,包括与beta的乘法和与n数组的加法,并最终计算出一个与温度和压力相关的值。测试文件对给定的温度和压力数组分别调用p_T和T_p函数,输出对应的饱和压力和饱和温度值。这些函数基于IAPWS-IF97标准,用于计算水蒸气的热力学性质。此外,还提供了相关历史文章和参考资料的链接。


前面的文章中介绍了利用IF97开源代码[1]进行水-水蒸气材料介质属性定义。然而此代码是利用C++语言编写,常规情况下编译不太容易,本文将其改写为C代码形式。

IAPWS-IF97[2]中饱和压力与饱和温度的计算位于第4区。

1.PNG

捕获.PNG


捕获.PNG




整理成代码:

/*IF97.H*/
#include "math.h"
#include "stdio.h"

/*设置n[0]=0仅为了后面公式中ni编号一致*/
static double n[] = {
   0,
   0.11670521452767e4,
   -0.72421316703206e6,
   -0.17073846940092e2,
   0.12020824702470e5,
   -0.32325550322333e7,
   0.14915108613530e2,
   -0.48232657361591e4,
   0.40511340542057e6,
   -0.23855557567849,
   0.65017534844798e3,
};
/*根据温度计算饱和压力,温度单位为K,压力单位Pa*/
double p_T(double T)
{
   double T_star = 1;   /*默认为1 K*/
   double p_star = 1e6; /*默认为1 MPa*/
   if ((T > 647.096) || (T < 273.15))
   {
       printf("Temperature out of range");
       return 0.0;
   }
   else
   {
       double theta = T / T_star + n[9] / (T / T_star - n[10]);
       double A = theta * theta + n[1] * theta + n[2];
       double B = n[3] * theta * theta + n[4] * theta + n[5];
       double C = n[6] * theta * theta + n[7] * theta + n[8];
       return p_star * pow(2 * C / (-B + sqrt(B * B - 4 * A * C)), 4);
   }
}
/*根据压力计算饱和文件,压力单位Pa,温度单位K*/
double T_p(double p)
{
   double p_star = 1e6;
   double T_star = 1;

   if ((p < 611.213) || (p > 22.064E6))
   {
       printf("Pressure out of range");
       return 0.0;
   }
   else
   {
       double beta2 = sqrt(p / p_star);
       double beta = sqrt(beta2);
       double EFG[3];
       double &E = EFG[0];
       double &F = EFG[1];
       double &G = EFG[2];

       EFG[0] = 1.0;
       EFG[1] = n[1];
       EFG[2] = n[2];
       for (int i = 0; i < 3; ++i)
       {
           EFG[i] *= beta;
       }

       for (int i = 0; i < 3; ++i)
       {
           EFG[i] += n[i + 3];
       }

       for (int i = 0; i < 3; ++i)
       {
           EFG[i] *= beta;
       }

       for (int i = 0; i < 3; ++i)
       {
           EFG[i] += n[i + 6];
       }

       const double D = 2 * G / (-F - sqrt(F * F - 4 * E * G));
       const double n10pD = n[10] + D;
       return T_star * 0.5 * (n10pD - sqrt(n10pD * n10pD - 4 * (n[9] + n[10] * D)));
   }
}

随便写个文件测试一下。

/*IF97.CPP*/
#include "IF97.h"
#include <iostream>
using namespace std;

int main()
{
   double T[3] = {300, 500, 600};
   double p[3] = {1e5, 1e6, 10e6};
   for (int i = 0; i < 3; i++)
   {
       cout << "Temperature:" << T[i] << "K,Psat:" << p_T(T[i]) << " Pa" << endl;
   }
   for (int i = 0; i < 3; i++)
   {
       cout << "Pressure:" << p[i] << " Pa,Tsat:" << T_p(p[i]) << " K" << endl;
   }
   return 0;
}

输出结果:

Temperature:300K,Psat:3536.59 Pa
Temperature:500K,Psat:2.6389e+06 Pa
Temperature:600K,Psat:1.23443e+07 Pa
Pressure:100000 Pa,Tsat:372.756 K
Pressure:1e+06 Pa,Tsat:453.036 K
Pressure:1e+07 Pa,Tsat:584.149 K

前面的代码可以直接拷贝到UDF中使用。

历史文章Fluent中调用IAPWS-IF97材料模型

参考资料


[1]

github仓库地址: https://github.com/CoolProp/IF97

[2]

iapws官网: http://www.iapws.org

Fluent其他专业通用科普
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2020-07-23
最近编辑:4月前
CFD之道
博士 | 教师 探讨CFD职场生活,闲谈CFD里外
获赞 2569粉丝 11334文章 737课程 27
点赞
收藏
作者推荐
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈