露点压力和组成编程计算

  • 格式:docx
  • 大小:20.63 KB
  • 文档页数:3

#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。