Challenge

write python code that can solve an otto cycle and make plots for it.

Objective

write python code that can solve an otto cycle and make plots for it.

Problem Statement

1. Your code should create a PV diagram

2. You should output the thermal efficiency of the engine.

Theory

An Otto cycle is an idealized thermodynamic cycle that describes the functioning of a typical spark ignition piston engine. It is the thermodynamic cycle most commonly found in automobile engines.

Code

#otto cycle
import math
import matplotlib.pyplot as plt 
import numpy as np

def engine_kinamatics(bore,stroke,con_rod,cr,start_crank,end_crank):
	
    #goeometric input
	
	
	

	sc=math.radians(start_crank)
	ec=math.radians(end_crank)

	num_value=50
	dtheta=(ec-sc)/(num_value-1)
	v=[]

	for i in range(0,num_value):
		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

#goeometric input
bore=0.1
stroke=0.1
con_rod=0.15
cr=12
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_s+v_c

#state2
v2=v_c

p2=p1*pow(v1,gamma)/pow(v2,gamma);

rhs=p1*v1/t1
t2=p2*v2/rhs

v_compression=engine_kinamatics(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 3
v3=v2
rhs=p2*v2/t2
p3=rhs*t3/v3

v_expansion=engine_kinamatics(bore,stroke,con_rod,cr,0,180)
constant=p3*pow(v3,gamma)
p_exapansion=[]



for v in v_expansion:
	p_exapansion.append(constant/pow(v,gamma))


#state4
v4=v1

p4=p3*pow(v3,gamma)/pow(v4,gamma)

t4=p4*v4/rhs;

efficiency=1-1/(pow(cr,(gamma-1)));
print(efficiency)



plt.plot([v2,v3 ],[p2,p3])
plt.plot(v_compression,p_compression )
plt.plot(v_expansion,p_exapansion )
plt.plot([v4,v1 ],[p4,p1])
plt.show()

Code explanation

#otto cycle
import math # required libraries are imported to the program, here math is imported.
import matplotlib.pyplot as plt
import numpy as np

def engine_kinamatics(bore,stroke,con_rod,cr,start_crank,end_crank): #function definition

#goeometric input

sc=math.radians(start_crank) #crank angle input
ec=math.radians(end_crank)

num_value=50 #number of angles
dtheta=(ec-sc)/(num_value-1)
v=[] #empty array v

for i in range(0,num_value): #for loop 0 to num_value
theta=sc + i*dtheta #theta calculation

term1=0.5*(cr-1); #exact volume trace calculation
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) #return volume v

#inputs
p1=101325
t1=500
gamma=1.4
t3=2300

#goeometric input
bore=0.1
stroke=0.1
con_rod=0.15
cr=12
a=stroke/2
R=con_rod/a


#volume computation
v_s=(math.pi/4)*pow(bore,2)*stroke #stroke volume calcution
v_c=v_s/(cr-1) #clarance volume calcution
v1=v_s+v_c #total volume aas v1

#state2
v2=v_c

p2=p1*pow(v1,gamma)/pow(v2,gamma); #p2 from p1v1^gamma=p2v2^gamma

rhs=p1*v1/t1
t2=p2*v2/rhs

v_compression=engine_kinamatics(bore,stroke,con_rod,cr,180,0) #calling function with proving start and end angle
constant=p1*pow(v1,gamma)
p_compression=[] #empty array as p_compression

for v in v_compression: #loop from intial v to final v and appending p_compression
p_compression.append(constant/pow(v,gamma))

#state 3 #p3 from (p2v2)/t2=p3v3/t3
v3=v2
rhs=p2*v2/t2
p3=rhs*t3/v3

v_expansion=engine_kinamatics(bore,stroke,con_rod,cr,0,180) #calling function with proving start and end angle
constant=p3*pow(v3,gamma)
p_exapansion=[] #empty array as p_expansion

for v in v_expansion: #loop from intial v to final v and appending p_expansion
p_exapansion.append(constant/pow(v,gamma))


#state4
v4=v1

p4=p3*pow(v3,gamma)/pow(v4,gamma) ##p4 from p3v3^gamma=p4v4^gamma

t4=p4*v4/rhs;

efficiency=1-1/(pow(cr,(gamma-1)));
print(efficiency)

plt.plot([v2,v3 ],[p2,p3]) #requiredd plots
plt.plot(v_compression,p_compression )
plt.plot(v_expansion,p_exapansion )
plt.plot([v4,v1 ],[p4,p1])
plt.show()

OUTPUT

0.6298928275128466
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.