露点压力和组成编程计算

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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。

相关文档
最新文档