Air standard Cycle using PYTHON programming
OBJECTIVE TO CODE A OTTO CYCLE -
- Your code should create a PV diagram
- You should output the thermal efficiency of the engine.
PROGRAM CODE OF OTTO CYCLE :
import math
import matplotlib.pyplot as plt
def engine_kinematics(bore,stroke,con_rod,cr,start_crank,end_crank):
# Volume parameters
V_s=math.pi*(1/4)*pow(bore,2)*stroke
V_c=V_s/(cr-1)
sc = math.radians(start_crank)
ec = math.radians(end_crank)
num_values=50
dtheta=(ec-sc)/(num_values-1)
V=[]
for i in range (0,num_values):
theta = sc + i*dtheta
term1 = 0.5*(cr-1)
term2 = R + 1-math.cos(theta)
term3 = pow(R,2) - pow(math.sin(theta),2)
term3 = pow(term3,0.5)
V.append((1+term1*(term2-term3))*V_c)
return V
# inputs
p1=101325
t1=500
gamma=1.4
t3=2300
#Geomertic parameters
bore=0.10
stroke=0.1
con_rod=0.15
cr=8
a=stroke/2
R=con_rod/a
# volume computation
v_s = (math.pi/4)*pow(bore,2)*stroke
v_c = v_s/(cr-1)
v1 = v_c+v_s
# state point 2
v2 = v_c
# p2v2^gamma = p1v1^gamma
p2=p1*pow(v1,gamma)/pow(v2,gamma)
#p2v2/t2=p1v1/t1 | rhs = p1v1/t1 | p2v2/t2 = rhs | t2=p2v2/rhs
rhs = p1*v1/t1
t2 = p2*v2/rhs
V_compression = engine_kinematics(bore, stroke, con_rod, cr, 180, 0)
constant = p1*pow(v1,gamma)
P_compression = []
for v in V_compression:
P_compression.append(constant/pow(v, gamma))
# state point 3
v3 = v2
#p3v3/t3 = p2v2/t2 | rhs = p2v2/t2 | p3 = rhs*t3/v3
rhs = p2*v2/t2
p3 = rhs*t3/v3
V_expansion = engine_kinematics(bore, stroke, con_rod, cr, 0, 180)
constant = p3*pow(v3,gamma)
P_expansion = []
for v in V_expansion:
P_expansion.append(constant/pow(v, gamma))
# state point 4
v4 = v1
# p4v4^gamma = p3v3^gamma
p4 = p3*pow(v3,gamma) / pow(v4,gamma)
# p4v4/t4 = rhs
t4 = p4*v4/rhs
plt.plot([v2,v3],[p2,p3])
plt.plot(V_compression,P_compression)
plt.plot(V_expansion,P_expansion)
plt.plot([v4,v1],[p4,p1])
plt.xlabel ('Velocity')
plt.ylabel ('Pressure')
plt.show()
#thermal efficiency of otto cycle (in %)
th_efficiency = ((1-((t4-t1)/(t3-t2)))*(100))
CODE SAMPLE-
import math
import matplotlib.pyplot as plt
def engine_kinematics(bore,stroke,con_rod,cr,start_crank,end_crank):
# Volume parameters
V_s=math.pi*(1/4)*pow(bore,2)*stroke
V_c=V_s/(cr-1)
sc=math.radians(start_crank)
ec=math.radians(end_crank)
num_values=50
dtheta=(ec-sc)/(num_values-1)
V=[]
for i in range (0,num_values):
theta = sc + i*dtheta
term1 = 0.5*(cr-1)
term2 = R + 1-math.cos(theta)
term3 = pow(R,2) - pow(math.sin(theta),2)
term3 = pow(term3,0.5)
V.append((1+term1*(term2-term3))*V_c)
return V
# inputs
p1=101325
t1=500
gamma=1.4
t3=2300
#Geomertic parameters
bore=0.10
stroke=0.1
con_rod=0.15
cr=8
a=stroke/2
R=con_rod/a
# volume computation
v_s = (math.pi/4)*pow(bore,2)*stroke
v_c = v_s/(cr-1)
v1 = v_c+v_s
# state point 2
v2 = v_c
# p2v2^gamma = p1v1^gamma
p2=p1*pow(v1,gamma)/pow(v2,gamma)
#p2v2/t2=p1v1/t1 | rhs = p1v1/t1 | p2v2/t2 = rhs | t2=p2v2/rhs
rhs = p1*v1/t1
t2 = p2*v2/rhs
V_compression = engine_kinematics(bore, stroke, con_rod, cr, 180, 0)
constant = p1*pow(v1,gamma)
P_compression = []
for v in V_compression:
P_compression.append(constant/pow(v, gamma))
# state point 3
v3 = v2
#p3v3/t3 = p2v2/t2 | rhs = p2v2/t2 | p3 = rhs*t3/v3
rhs = p2*v2/t2
p3 = rhs*t3/v3
V_expansion = engine_kinematics(bore, stroke, con_rod, cr, 0, 180)
constant = p3*pow(v3,gamma)
P_expansion = []
for v in V_expansion:
P_expansion.append(constant/pow(v, gamma))
# state point 4
v4 = v1
# p4v4^gamma = p3v3^gamma
p4 = p3*pow(v3,gamma) / pow(v4,gamma)
# p4v4/t4 = rhs
t4 = p4*v4/rhs
plt.plot([v2,v3],[p2,p3])
plt.plot(V_compression,P_compression)
plt.plot(V_expansion,P_expansion)
plt.plot([v4,v1],[p4,p1])
plt.xlabel ('Velocity')
plt.ylabel ('Pressure')
plt.show()
# thermal efficiency of otto cycle
th_efficiency = ((1-((t4-t1)/(t3-t2)))*(100))
print(th_efficiency)
EXPLANATION OF THE CODE-
In above, snap there is introductional part of otto_cycle. Here firstly the modules were imported then we have defined the function as engine_kinematics in which I have introduced the required parameter to run the program successfully.
Here, we have calculated the swept volume and clearance volume . Then using the for loop we have tried to spilt the equation in three terms i.e., term1 , term2 , term3 .
Here for the inputs we have pressure at intake stroke p1=101325pa , temperature at intake as t1=500k , gamma=1.4 , temperature during expansion as t3=2300k.
The geomertirc parameters required for the engine were,
- Bore=0.10m
- Stroke=0.1m
- Connecting rod=0.15m
- Compression ratio=8
Swept volume , clearance volume , volume at point 1 was calculated.
- Swept volume=(pi/4 * bore2 * stroke)
- Clearance volume=(swept volume/(compression ratio-1))
- Volume at point 1 = clearance volume + swept volume
At state point 2-
This process describe the isochoric constant volume heat addition process. Here the temperature rises to t3 and pressure rises to p3 where the volume remains the constant through the process. The piston remains at TDC position.
At state point 3-
This process describe the isentropic heat expansion, where pressure and temperature reduces to p4,t4 and volume becomes equal to v1. The piston comes to BDC position.
At state point 4-
This process describes the isochoric heat rejection process and the piston comes to BDC position.
The plot of PV diagram-
Above fig. shows the PV diagram for the otto cycle where we see intake stroke, compression stroke, ignition and expansion stroke.
The thermal efficiency-
The thermal efficiency was also calculated the value is 56.47%