Week 2 Air standard Cycle
Based on the concepts you have learnt during the forward kinematics routine, go ahead and write code that can solve an otto cycle and make plots for it.
Here are the requirements
1. Your code should create a PV diagram
2. You should output the thermal efficiency of the engine.
There are 4 process in otto cycle :-
- 1–2, isentropic compression;
- 2–3, constant-volume heat addition;
- 3–4, isentropic expansion; and
- 4–1, constant-volume heat rejection.
The Thermal efficiency of the ideal Otto cycle in term of compression ratio is written as:

here, r = compression ratio and y = gamma
Method :-
- Import lybraries
import mathimport matplotlib.pyplot as plt
- Define a function for volume and pressure change during isentropic expansion and compression with the help of below formula.
a = stroke/2, R = con_rod/a
con_rod = connecting rod lenth.
V = volume of compression or expansion
Vc = Clearance volume.

Provide inputs for different variables used in otto cycle.
Initial values :-
p1 = 101325, t1 = 500, gamma = 1.4, t3 = 2500, v1 = v_c + v_s
v_s = (math.pi/4)*(bore^2)*stroke
v_c = v_s/(cr-1)
v1 = v_c + v_s
# Geometric parameters
bore = 0.8
stroke = 0.2
con_rod = 0.15
cr (compression ratio) = 8
then find different state variables(pressure, volume and temperature) at all 4 points.
which are as follows :-
State variables at point 2 :-
- v2 = v_c
p2v2^gamma = p1v1^gammatherefore : p2 =p1*pow(v1,gamma)/pow(v2,gamma)
then find state variable 3 and 4.
v3 = v2
p3v3/t3 = p2v2/t2, rhs = p2v2/t2 |
p3 = rhs*t3/v3
v4 = v1
p4v4^gamma = p3v3^gamma, p4v4/t4 = rhs
p4 = p3*pow(v3,gamma)/pow(v4,gamma)
t4 = p4*v4/rhs
then program for plotting.
'''
Program to calculate different state variables in an otto cycle and to calculate its thermal efficiency
'''
import math
import matplotlib.pyplot as plt
def engine_kinematics(bore,stroke,con_rod,cr,start_crank,end_crank):
# 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 = 100
dtheta = (ec-sc)/(num_values)
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 = 2500
# Geometric parameters
bore = 0.8
stroke = 0.2
con_rod = 0.15
cr = 8
# Computing the volume
v_s = (math.pi/4)*pow(bore,2)*stroke
v_c = v_s/(cr-1)
v1 = v_c + v_s
# State variables at 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 variables at 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 variables at point 4
v4 = v1
# p4v4^gamma = p3v3^gamma
p4 = p3*pow(v3,gamma)/pow(v4,gamma)
# p4v4/t4 = rhs
t4 = p4*v4/rhs
# Calculating the thermal efficiency
thermal_eff = (1 - (1/pow((cr),(gamma-1))))*100
print('Thermal efficiency of the Otto Cycle is :',thermal_eff,'%')
# Plotting the state points
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('Volume (m^3)')
plt.ylabel('Pressure (Pa)')
plt.title('P-V diagram of an Otto Cycle')
plt.show()

