A Python program to simulate the otto cycle with the help of engine kinematics
to write a program of otto cycle simulator:-
The performance of an air-standard Otto cycle with heat transfer loss and variable specific heats of working fluid is analyzed by using finite-time thermodynamics. The relations between the power output and the compression ratio, between the thermal efficiency and the compression ratio, as well as the optimal relation between power output and the efficiency of the cycle .
steps : in this first i provied the required library
step 2:- then defined the variables like bore,stroke,length of connecting rod,compression ratio(cr),start angle ,end angle
then i define a separate engine kinematics
then with the help of ideal gas law ,defined the volumes and temperature in which the process undergoes through isentropic process.
#main program
\"\"\"
python program to simulate otto cycle
\"\"\"
import math
import matplotlib.pyplot as plt
def engine_kinematics(bore,stroke,con_rod,cr,start_crank,end_crank):
#program to write engine kinematics
#geometric parameters
a=stroke/2
R=con_rod/a
#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 given
p1=101325 #pressure in pascals
t1=500 # temperature in kelvin
gama=1.4
t3 = 2300
#geometric parameters
bore=0.1
stroke=0.1
con_rod=0.15
cr=6
#volume computation
v_s=(math.pi/4)*pow(bore,2)*stroke #wherw v_s=swept volume
v_c=v_s/(cr-1) #v_c=clearance volume
#state point 1
v1=v_c+v_s
#state point 2
v2=v_c
#p2v2^gama=p1v1^gama (simple isentropic process)
p2=p1*pow(v1,gama)/pow(v2,gama)
#p2v2/t2=p1v1/t1 | rhs=p1v1/t1 | p2v2/t2=rhs | t2=p2v2/rhs (by ideal gas law)
rhs =p1*v1/t1
t2=p2*v2/rhs
V_compression=engine_kinematics(bore,stroke,con_rod,cr,0,180)
constant=p1*pow(v1,gama)
P_compression=[]
for v in V_compression:
P_compression.append(constant/pow(v,gama))
#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,gama)
P_expansion=[]
for v in V_expansion:
P_expansion.append(constant/pow(v,gama))
#state point 4
v4=v1
#p4v4^gama=p3v3^gama | p4v4/t4=p3v3/t3
p4=p3*pow(v3,gama)/pow(v4,gama)
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.show()
#thermal efficiency of otto cycle (e)
#inputs k=1.4
k=1.4
e = (1-1/pow(cr,(k-1)))
print(e)
output of graph p-v diagram