Challenge

Week 2 Air standard Cycle

Objective: To solve and plot otto cycle.

Problem statement: If we plot the end points of an adiabatic process, the plot becomes linear which is incorrect.

Solution Procedure: We define a new function to calculate the actual volume during the adiabatic process and use that to calculate the actual pressure during the process to get a parabolic curve.

Procedure:

Step 1: Define the geometric parameters like bore diameter, stroke length, connecting rod length and compression ratio of the engine.

Step 2: Define the required parameters like atmospheric pressure, atmospheric temperature and maximum temperature.

Step 3: Calculate the remaining paramenters like pressure, temperature and volume at all the state points.

Step 4: Plot pressure vs volume graph using matplotlib library.

Step 5: Calculate the thermal efficiency of the engine and display it.

# otto cycle simulator
import math
import matplotlib.pyplot as plt

# geometric parameters
bore = 0.1	# bore diameter
stroke = 0.1	# stroke length
con_rod = 0.15	# connectin rod length
cr = 11	# compression ratio

# inputs
p1 = 101325 # atmospheric pressure
t1 = 400	# atmospheric temperature
gamma = 1.4	# adiabatic index
t3 = 2300	# maximum temperature

# voulume at state 1
v_s = (math.pi/4)*pow(bore,2)*stroke
v_c = v_s/(cr-1)
v1 = v_c + v_s

# volume calculation for adiabatic process
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-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


# 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

# pressure vs volume plot
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.ylabel('Pressure')
plt.xlabel('Volume')
plt.show()

# Thermal efficiency of engine calculation

thermal_efficiency = 1 - ((t4 -t1) / (t3 - t2))

print('Thermal efficiency of the engine is',thermal_efficiency)

Output:

Your portfolio, next

Ship work like this
in your own course.

Talk to a career counsellor

Free 20-minute call. We'll map the right course to where you want to work.

By submitting you agree to our Terms and Privacy Policy.

Talk to a career counsellor

Free 20-minute call. We'll map the right course to where you want to work.

By submitting you agree to our Terms and Privacy Policy.