Python中的卡诺循环建模
卡诺循环是最基本的燃气动力循环。它是任何发动机循环的基准。每个发动机循环效率都以卡诺循环作为检验标准。如果发明者开发了一个新的发动机循环,则必须针对基准(即卡诺循环)进行验证。
所有热力学循环都具有卡诺循环所确定的上限。它包含两个可逆绝热过程和两个等温过程,总共四个过程。等温过程涉及热量的添加和排放,而可逆绝热过程涉及功的相互作用。下图显示了卡诺循环的示意图。
热量排放和添加在步骤1-2和3-4中等温进行。而过程4-1和2-3是可逆绝热过程,分别通过功从循环中输入和输出。
在对循环进行建模时,需要考虑最大压力($\mathrm{p_{max}}$)、最小压力($\mathrm{p_{min}}$)、最大体积($\mathrm{V_{max}}$)、压缩比(𝑟)和绝热指数(𝛾)等输入变量。下面解释了几个过程的热力学计算。
过程 1-2:(等温过程)
过程 1-2 是一个等温过程。这里,
$$\mathrm{p_{1}\:=\:p_{min}}$$
$$\mathrm{v_{1}\:=\:v_{max}}$$
使用压缩比 (r),可以根据点 1 处的体积评估点 2 处的第一个体积,如下所示:
$$\mathrm{v_{2}\:=\:\frac{v_{1}}{r}}$$
然后计算步骤 1-2 期间的等温常数,如下所示:
$$\mathrm{c_{1}\:=\:p_{1}\:\times\:v_{1}}$$
一旦知道 $\mathrm{c_{1}}$,就可以评估沿线 1-2 的压力变化,如下所示:
$$\mathrm{p\:=\:\frac{c_{1}}{v}}$$
过程 2-3(可逆绝热过程)
过程 2-3 是一个可逆绝热过程。这里,
$$\mathrm{p_{3}\:=\:p_{max}}$$
设 $\mathrm{c_{2}}$ 为绝热线的常数。由于绝热线和等温线在点 2 相交,因此可以计算 $\mathrm{c_{2}}$ 为
$$\mathrm{p_{2}\:=\:\frac{c_{2}}{v_{2}^{\gamma}}\:=\:\frac{c_{1}}{v_{2}}}$$
$$\mathrm{c_{2}\:=\:c_{1}\:\times\:v_{2}^{\gamma\:-\:1}}$$
由于 $\mathrm{c_{2}}$ 也满足点 3,因此可以计算点 3 处的体积,如下所示:
$$\mathrm{v_{3}\:=\:\left ( \frac{c_{2}}{p_{3}} \right )^{\frac{1}{\gamma }}}$$
可以评估沿 2-3 的压力变化,如下所示:
$$\mathrm{p\:=\:\frac{c_{2}}{v^{\gamma}}}$$
过程 3-4(等温过程)
设线 3-4 的常数为 $\mathrm{c_{3}}$。由于 $\mathrm{p_{3}}$ 和 $\mathrm{v_{3}}$ 都已知,并且点 3 也穿过它们,因此沿等温线的常数计算如下:
$$\mathrm{c_{3}\:=\:p_{3}\:\times\:v_{3}}$$
此外,为了评估沿 3-4 的压力波动,需要知道沿 4-1 的常数。假设它是 $\mathrm{c_{4}}$,并且由于 $\mathrm{c_{4}}$ 也满足点 1,因此评估如下:
$$\mathrm{c_{4}\:=\:p_{1}\:\times\:v_{1}^{\gamma}}$$
因此,可以评估 $\mathrm{v_{4}}$ 为:
$$\mathrm{v_{4}\:=\:\left ( \frac{c_{4}}{c_{3}} \right )^{\frac{1}{\gamma\:-\:1 }}}$$
因此,可以评估沿 3-4 的压力变化为:
$$\mathrm{p\:=\:\frac{c_{3}}{v}}$$
过程 4-1(可逆绝热)
已知 $\mathrm{c_{4}}$ 和 1 和 4 处的体积,可以计算沿 4-1 的压力变化,如下所示:
$$\mathrm{p\:=\:\frac{c_{4}}{v^{\gamma}}}$$
用于模拟卡诺循环的 Python 代码
用于模拟卡诺循环的 Python 函数如下所示:
from pylab import * from pandas import * # Carnot Cycle def carnot(p_min,p_max,v_max,r,gma): font = {'family':'Times New Roman', 'size':16} figure(figsize=(7.50,5.50)) rc('font', **font) '''This function prints the carnot cycle The arguments are as follows: p_min: minimum pressure p_max: Maximum pressure v_max: Maximum volume r: compression ratio gma: Adiabatic exponent The order of arguments is: p_min,p_max,v_max,r,gma''' p1=p_min v1=v_max v2=v1/r c1=p1*v1 # Process 1-2 v=linspace(v2,v1,100) p=c1/v plot(v,p/1000,'r-',linewidth=3) p2=c1/v2 # Process 2-3 p3=p_max c2=c1*v2**(gma-1.) v3=(c2/p3)**(1/gma) v=linspace(v3,v2,100) p=c2/v**gma plot(v,p/1000,'b',linewidth=3) # Process 3-4 c3=p3*v3 c4=p1*v1**gma v4=(c4/c3)**(1/(gma-1.)) v=linspace(v3,v4,100) p=c3/v plot(v,p/1000,'g',linewidth=3) p4=c3/v4 # Process 4-1 v=linspace(v4,v1,100) p=c4/v**gma plot(v,p/1000,'c',linewidth=3) title('Carnot Cycle',size='large',color='k') xlabel('Volume ($m^3$)') ylabel('Pressure (kPa)') grid(linestyle='--', color='k') axis([0.,v_max+0.01,1*10**5/10**3,21*10**5/10**3]) text(v1,p1/1000,'1') text(v2,p2/1000-200,'2') text(v3+0.01,p3/1000-20,'3') text(v4,p4/1000,'4') data={ 'p':[p1,p2,p3,p4], 'v':[v1,v2,v3,v4], 'c':[c1,c2,c3,c4], 'State': [1,2,3,4] } df=DataFrame(data) savefig('Carnot_final.jpg') return df.set_index('State') carnot(2*10**5,20*10**5,0.5,5,1.4) show()
对于 $\mathrm{p_{min}\:=\:2\:\times\:10^{5}\:Pa}$,$\mathrm{p_{max}\:=\:20\:\times\:10^{5}\:Pa}$,$\mathrm{v_{max}\:=\:0.5\:m^{3}}$,$\mathrm{r\:=\:5}$ 和 $\mathrm{\gamma\:=\:1.4}$,获得的结果如下图所示:
不同状态点的压力、体积值如下所示:
状态 |
p |
v |
---|---|---|
1 |
200000.0 |
0.500000 |
2 |
1000000.0 |
0.100000 |
3 |
2000000.0 |
0.060951 |
4 |
400000.0 |
0.304753 |
结论
在本教程中,已经介绍了模拟卡诺循环的方法。已经介绍了一个 Python 函数,并进行了一个测试用例来演示函数的使用。该函数能够根据输入数据绘制循环。