#DATA ANALYSIS OF ENGINE DATA
#Importing the modules
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import simps
filename = input ("Enter the name of CONVERGE output filename with extension (.out):")
#COMPATIBILITY CHECK
#Checking if the file is a valid CONVERGE output file try :
f = open(filename)
f.close()
except FileNotfoundError:
print('File not recognized. Please provide a valid CONVERGE output file')
exit()
#Checking if data is present in the CONVERGE output file
i=0
for line in open(filename):
if '#' not in line:
break
i = i+1
j=0
for line in open(filename):
j=j+1
if j>i :
break
if j==i:
print('No data present in the CONVERGE output file')
exit()
#DATA EXTRACTIOf
i=0
for line in open(filename):
if i==2:
c = line.split()#Storing unit of variables in list c
i=0
break
if i==1:
b=line.split() #Storing names of variables in list b
i = i+1
if 'column' in line .split():
a = line .split () #Storing column numbers of variables in list a
i=1
a.remove("column") #Removing column f rom list a
a.remove("#") #Removing # from list a
a = np.array(a,dtype=np.int) #Converting data to integer
b.remove("#")#Removing ii from list b
c.remove("#") #Removing # from list c
num_col = len(a) #Number of columns/ number of variables
#GETTING THE DATA
data_counter = 0 #Initializing number of data points counter variable
data = np.arange(0,num_col)
for line in open(filename):
if '#' not in line:
d = line.split()#Storing current data line as in d
d = np .array(d,dtype=np.float32)#Converting list data to float array
data = np.vstack ([data,d])#Stacking the float array d in data matrix
data_counter = data_counter + 1
data=np.delete( data,0, 0) #Deleting the f irst row used to initialize the array
#DATA VISUALIZER
print (' Type -' )
for i in a:
print (' {} for {}' .format ( i,b[i-1]) )
print (' ')
x = input("Do you want a plot between any two variables ? ( y/n) : ")
while(x.lower()== ' y ' ):
cn1 = input ("Enter the clumn number of the variable along X-axis( Refer input map above) :")
cn2 = input("Enter the clumn number of the variable along Y-axis (Refer input map above) :")
cn1 = int ( cn1)
cn2 = int ( cn2)
plt.figure ()
plt.plot (data[ :,cnl -1],data[ :,cn2-2] )
plt.xlabel('{} {}' .format( b [cn1-1],c[cn1-1]))
plt.ylabel('{} {}' .format(b[cn2-1],c[cn2- 1]))
plt.title( ' {} {} vs {} {}' .format(b[cn2- 1],c[cn2 -1],b [cn1-1],c[cn1-1))
z = "n"
z = input ( "Do you want to save the plot? (y/n) :")
if (z.lower()== 'y'):
plt.savefig("{}-{}.png".format(b [cn2-1],b[ cn1-1]))
plt.show()
print( ' ' )
x = input("Do you want plot any other two variables (y/n) : ")
print(' ')
x = input ( "Do you want a single variable plot ? (y/n) :")
while(x.lower()== ' y '):
cn = input ("Enter the column number of the variable ( Refer input map above) : ")
cn = int (cn)
plt .figure()
plt.plot (np.arange(0,data_counter) ,data[:,cn-1])
plt.xlabel( 'Data point number')
plt.ylabel( '{} {} ' .format( b [cn-1],c[cn- 1]))
plt.show()
print( ' ' )
x = input ( "Do you want any othe1·single variable plot? (y/n) : ")
print (' ')
#CALCULATIONS
print ( ' PERFORMANCE OF THE ENGINE ')
#Work done
b1 = [i.lower() for i in b]
pressure_column = b1.index('pressure ')
volume_column = b1 .index( 'volume ')
pressure = data [:,pressure_column ]
volume = data[:,volume_column]
A = 0 #Area under the P-V curve
A = simps(pressure,volume,even= ' first ')*np.power( 10,6) #Work per cycle(J)
#Power output
rpm = float(input('Enter the rpm of the engine at which data was collected ; ')) #Rotation per min
f = float(input ( ' Enter the value of the fuel consumed per cycle (in micrograms ) : ')) #Fuel consumpt ion per cycle
n = rpm/ ( 2*60) #Number of cycle per second for 4-stroke engine
P = A*n #Power output (l) at speed N (rad/s)
#Specific fuel consumption
f = (f*n*3600) /np .power(10,9) #Fuel consumpt ion ( Kg/hr)
sfc = ( f *1000)/P #Specif ic fuel consumpt ion (Kg/hr .Kl;)
#Results
print ('Area under the P-V curve( i.e. the Work done per cycle)={} J ' .format (A))
print (' Power output at {} rpm = {} W' .format(rpm,P))
print ('Specific fuel consumpt ion = {} Kg/KW .hr ' .format(sfc) )
"""
Demonstrating file parsing in python
"""
# import modules
import matplotlib.pyplot as plt
# Basic initialization
line_count = 1
crank = []
pressure = []
temperature = []
# file parsing starts here
for line in open('engine_data.out'):
if "#" not in line:
crank.append(float(line.split()[0]))
pressure.append(float(line.split()[1]))
temperature.append(float(line.split()[4]))
line_count = line_count +1
#figure
plt.plot(crank, pressure, linewidth=3)
plt.show()
plt.plot(crank, temperature, linewidth=2)
plt.show()