露点压力和组成编程计算
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include "stdio.h"
#include "math.h"
double *funr(double r[],double x[])
{
double W[3][3]={{1.0,1.1816,0.52297},
{0.71891,1.0,0.50879},
{0.57939,0.97513,1.0}};
/***50℃时各两组分溶液的无限稀释活度系数回归得到Wilson常数储存在
W数组中***/
double sum=0.0,sum1=0.0,sum2=0.0,sum3=0.0;
int i=0,j=0,k=0;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
sum1+=x[j]*W[i][j];
for(k=0;k<3;k++)
{
for(j=0;j<3;j++)
sum3+=x[j]*W[k][j];
sum2+=x[k]*W[k][i]/sum3;
sum3=0;
}
sum=1-log(sum1)-sum2;
sum1=0,sum2=0;
r[i]=pow(2.7182818,sum);
}
return r;
}
double *funK(double *K,double *r,double p)
{
double ps[3]={78.049,81.818,55.581};
/***50℃时各纯组分的饱和蒸气压,kPa***/
double VL[3]={83.77,76.81,42.05};
/***50℃时各纯组分的液体摩尔体积,cm3/mol***/
double R=8.314,T=273.15+50;
double s1[3],s2[3],s3[3];
int i;
for(i=0;i<3;i++)
{
s1[i]=r[i]*ps[i]/p;
s2[i]=0.001*VL[i]*(p-ps[i])/R/T;
s3[i]=pow(2.7182818,s2[i]);活度计算子函数
K 值计算子函数
K[i]=s1[i]*s3[i];
}
return K,r;
}
void main()
{
double x[3]={0.33,0.34,0.33},x1[3]; /***初设组分初值***/
double x0[3]={0.33,0.34,0.33};
double p=71.916,p0; /***初设压力,kPa***/
double r[3],r1[3]; /***储存计算所得活度系数***/
double K[3]; /***储存计算所得k***/
double b1; /***b1为判定条件***/
double sum=0.0,sum1=0.0,sum2=0.0,sumP=0.0;
int i;
p0=p;
if(abs(p-p0)==0||abs(p-p0)>0.01) /***压力差判定条件***/
{
do
{
p0=p;
sum2=sum;
sum=0.0;
for(i=0;i<3;i++)r[i]=x[i],x1[i]=x[i];
funr(r,x);
funK(K,r,p);
for(i=0;i<3;i++)sum+=x0[i]/K[i];
for(i=0;i<3;i++)x1[i]=x0[i]/K[i]/sum;
b1=(sum-sum2);
if(b1<0)b1=0-b1;
for(i=0;i<3;i++)x[i]=x1[i];
}
while(b1>0.00001); /***组分差判定条件***/
for(i=0;i<3;i++)
sumP+=K[i]*x[i];
p=p*sumP;
sumP=0.0;
}
printf("指定温度条件下露点压力p=%lf kPa。\n",p);
printf("露点组成x1=%lf x2=%lf x3=%lf。",x[0],x[1],x[2]);
}
程序计算输出结果为:
指定温度条件下露点压力p=85.071989 kPa。
露点组成x1=0.289963 x2=0.339100 x3=0.370936。