C语言在化工分离工程教学中的应用*
2020-07-09毕秋艳
毕秋艳,马 丽
(青海大学化工学院,青海 西宁 810016)
分离工程贯穿于化工生产的全过程,涉及到设计、建造、生产、储运、分离等化工过程全生命周期的各个环节,广泛应用于医药、材料、冶金、食品、生化、原子能与环境治理等领域。化工分离工程是一个覆盖面极广的综合交叉学科,是理论性、实践性和探索性很强的一门课程。其具有综合性强、内容广泛、工程应用背景强、计算过程复杂、多采用计算机编程求解等特点。如果只采用课堂教学的形式,难以将分离过程的工艺设计和平衡计算讲解透彻,这也就将不利于实现课程教学与工程实际的紧密联系,不能很好的适应现代化工技术的迅猛发展[1]。计算机辅助结合实践教学则是加深、巩固理论知识的有效途径,是培养学生创新能力、科学思维方法、研究科学问题能力、处理工程问题能力以及提高学生综合素质的载体。将理论知识结合计算机软件辅助模拟计算,掌握、了解实际化工分析与分离过程、提纯技术理论的转化与应用,强化了学生将化工分离工程所学理论在实际化工生产中的应用,对化工技术的进步与发展起着至关重要的作用。
C语言是一门面向过程、抽象化的通用程序设计结构化语言,它有着清晰的层次,可按照模块的方式对程序进行编写,程序调试方便,且相较于其它编程语言其兼顾了高级汇编语言的优点,这使得C语言的处理能力和表现能力都具有较大优势[2]。化工分离工程课程中单级平衡蒸馏、液液平衡、多组分相平衡计算和多组分多级分离的严格计算公式多且复杂,而且变量之间的关系往往是非线性的,经常需要进行迭代计算,手算很难完成[3]。这时可以通过C语言模块程序编写简捷、快速的完成计算过程。平衡分离过程的计算既是教学的重点,也是教学的难点,本文以平衡分离过程的计算为例介绍C语言在化工分离工程教学中的应用。
1 等温闪蒸过程及计算原理
1.1 等温闪蒸
闪蒸是连续单平衡级的蒸馏过程,等温闪蒸计算是求解在一定的温度和压力下,混合物分相后汽液两相的组成和数量[4]。
1.2 计算原理
闪蒸过程如图所示, 流率为F(kmol/h)、组成为zi(摩尔分数)的混合物经换热器进入汽液分离罐, 在罐中经闪蒸分离出互成平衡的汽液两相。汽相流率为V,组成为yi; 液相流率为L,组成为xi。闪蒸过程中压力为P, 温度为T。
计算示例:组成为60%(mol)苯,25%甲苯和15%对二甲苯的100 kmol/h的液体混合物,在101.325 kPa和100 ℃下闪蒸。通过C语言程序模块编写计算液相和汽相产物的流率和组成。假设物系为理想溶液。用安托尼方程计算蒸汽压。
图1 计算示例附图
假设系统中存在C个组分,由每个组分的物料衡算可知:
Fzi=Lxi+VKixii=1,2,…c
(1)
(2)
又因为:L=F-V
(3)
(4)
(5)
(6)
ψ的取值范围在0到1.0之间
(7)
(8)
(9)
Rachford-Rice方程:
(10)
牛顿迭代法计算方程:
(11)
导数方程:
(12)
2 计算程序与结果
2.1 计算程序
源程序代码如下:
#include "stdarg.h"
#include"math.h"
#include "stdio.h"
#define T (100+273.15)//温度定义,摄氏度转换开尔文//
static double Z[3]={0.60,0.25,0.15},K[3];/各组分组成定义//
int main()//主函数//
{int i,now;
double p[3];
double f,f1,x,y,a,b,s,e;
double V,F,L,PO;
static double l[3]={20.7936,20.9065,20.9891},//安托尼方程中的常数A//
m[3]={2788.51,3096.52,3346.65},//安托尼方程中的常数B//
n[3]={52.36,53.67,57.84};//安托尼方程中的常数C//
//clrscr();
PO=101.3; //大气压//
printf("各组分的相平衡常数如下: ");
for(i=0;i<3;i++)
{p[i]=exp(l[i]-(m[i]/(T-n[i])));
K[i]=(p[i]/PO)/1000;
printf("K%d=%f ",i+1,K[i]);
} /*s,f,f1*/
printf(" 请输入汽化分率初值");
scanf("%lf",&s);
printf("请输入迭代精度");
scanf("%lf",&e);
{x=Z[i]/(1.0+s*(K[i]-1.0));//液相组成计算//
y=K[i]*Z[i]/(1.0+s*(K[i]-1.0));//汽相组成计算//
//printf("x=%f,y=%f ",x,y);
}
printf("迭代计算如下: ");//牛顿迭代计算//
F=100.00;now=1;
do {
printf("第%d迭代次数 ",now);
f=0.0;
printf("s=%lf ",s);
for(i=0;i<3;i++)
{
a=Z[i]*(K[i]-1.0);
b=1.0+s*(K[i]-1.0);
f+=a/b;
}
printf("f=%lf ",f);
f1=0.0;
for(i=0;i<3;i++)
{
x=(K[i]-1.0)*(K[i]-1.0)*Z[i];
y=(1.0+s*(K[i]-1.0))*(1.0+s*(K[i]-1.0));
f1+=x/y;
}
printf("f1=%lf ",f1);
s+=fabs(f)/fabs(f1);
printf("s=%lf ",s);
now++;
}
while(fabs(f)>e);
printf("当前汽化分率已满足p-k-T的精确度,迭代结束. 各组分的汽相液相组成如下: ");//满足迭代精度,即可结束迭代//
/*V,L,F,x,y*/
for(i=0;i<3;i++)
{
x=Z[i]/(1.0+s*(K[i]-1.0));
y=K[i]*Z[i]/(1.0+s*(K[i]-1.0));
printf("x%d=%f,y%d=%f ",i+1,x,i+1,y);
}
V=s*F;
printf("V=%fkmol ",V);
L=F-V;
printf("L=%fkmol ",L);//输出结果//
return 0;
}
/*int main(int argc, char* argv[])
{
printf("Hello World! ");
return 0;
}*/
2.2 计算结果
图2 运行结果图
将上述程序输入到VC++中,输入进料条件、温度、汽化分率初值及迭代精度后,运行结果如图2所示。
通过C语言编写的模块程序对等温闪蒸过程的计算可以看出:该计算程序模块中用的牛顿迭代算法,收敛速度较一般的插值计算快,该程序模块通用性强,在解决闪蒸问题的过程中,只需要输入已知的参数便可以快速迭代(本例仅需迭代3次)计算得出相应的平衡汽液相组成,且计算结果精准,满足迭代精度。
3 结 语
化工分离工程是一门不断发展的应用学科,我们可以通过将化工模拟软件和面向过程、抽象化的通用程序设计语言应用在课堂教学之中,不但有助于提高学生的学习兴趣、加强学生对理论知识的理解和应用,同时能够使课程教学与实际工程问题有机地结合,加强化工分离工程的实践教学,提高学生分析和解决实际工程问题的能力,对于培养化工类学生的工程思维能力起着重要的作用。