Project 1 - Parsing NASA thermodynamic data
Explanation :
1. The Program starts with clear all, close all and clc etc.
2. The proogram is used to calculate the Enthalpy, entropy and specific heat of the data file.
3. And also the temperatures range which is unique for each individual species.
4. the program will shoe all the temperatures and the values which we want.
5. In this the first 7 coefficients are High temperature coefficients and the second 7 coefficients are low temperature coefficients.
6. And the Specific heat calculation, enthalpy calculation, entropy calculation and molecular weight calculation functions are also done.
7. Plottings are also done in this program and the titles,x labels and y labels are also shown
clear all
close all
clc
%Make directory
mkdir 'C:UsersAdminDesktopNASA File Parsing'
%Reading Data file - NASA Thermodynamic
%Open a file & 'r' Open the file for reading
f1= fopen('THERMO,dat','w')
gt=fopen(f1);
% Obtaing Temperature - by Reading Header Information
global_temp=fopen(f1);
%Splitting
s=strsplit(global_temp);
%Converting string cells to numbers using str2num
global_low_temp=str2num(s{1});
global_medium_temp=str2num(s{1});
global_high_temp=str2num(s{1});
%Temperature range & Gas Constant
%Temperature Range assumed
Temp=linspace(0,0,1000);
%Universal Gas Constant J/(mol-k)
R = 8.314;
%skipping three comment lines in the file
for i = 1:3
gt=fopen(f1);
end
for i = 1:53
gt=fopen(f1);
A=strsplit(gt,'');
Species_SP=(A{1})
line_1=fopen(f1);
a=strfind(line_1,'E');
%Extracting higher and lower temperature coefficients
%%Extracting FIRST 7 coefficient i.e HIGH-temperature coefficients
a1=line_1(1:a(1)+3);
a1=str2num(a1); %1
a2=line_1(a(1)+4:a(1)+3);
a2=str2num(a2); %2
a3=line_1(a(1)+4:a(1)+3);
a3=str2num(a3); %3
a4=line_1(a(1)+4:a(1)+3);
a4=str2num(a4); %3
a5=line_1(a(1)+4:a(1)+3);
a5=str2num(a5); %5
line_2=fopen(f1);
b=strfind(line_1,'E');
a6=line_2(1:b(1)+3);
a6=str2num(a6); %6
a7=line_2(a(1)+4:b(1)+2);
a7=str2num(a7); %7
%Extracting SECOND 7 coefficients - LOW-temperature coefficients
a8=line_2(b(1)+4:b(1)+3);
a8=str2num(a8); %8
a9=line_2(b(1)+4:b(1)+3);
a9=str2num(a9); %9
a10=line_2(b(1)+4:b(1)+3);
a10=str2num(a10); %10
line_3=fopen(f1);
c=strfind(line_1,'E');
a11=line_3(1:c(1)+3);
a11=str2num(a11); %11
a12=line_3(c(1)+4:c(1)+3);
a12=str2num(a12); %12
a13=line_3(c(1)+4:c(1)+3);
a13=str2num(a13); %13
a14=line_3(c(1)+4:c(1)+3);
a14=str2num(a14); %14
%Specific heat calculation
Cp = Specificheat(a1,a2,a3,a4,a5,a8,a9,a10,a11,a12,Temp,R,global_medium_temp);
%Enthapy calculation
H = Enthalpy_calc(a1,a2,a3,a4,a5,a6,a8,a9,a10,a11,a12,a13,Temp,R,global_medium_temp);
%Entropy calculation
S = Entropy_calc(a1,a2,a3,a4,a5,a7,a8,a9,a10,a11,a12,a14,Temp,R,global_medium_temp);
%calculating molecular weight of species
Molecularweight(i) = Molecular_weight(Species_SP);
%Read & Write Molecular list
Molecular_list = fopen('Molecular weight.txt','a+');
fprintf(Molecular_list,'Molecular weight of %s is %d n',Species_SP,Molecularweight);
fclose(Molecular_list);
%plotting(CP,H,Temp,Species_SP)
%Saving as a folder
cur_dir=pwd;
mkdir(Species_SP);
cd(Species_SP);
%plot 1, Specific heat (CP) vs Temperature Range (Temp)
figure(1)
plot(Temp,Cp,'linewidth',2,'color','r');
xlabel('Temperature[k]');
ylabel('Specific heat[kj]');
title(sprintf('Varying Specific Heat with Temperature Range of %s',Species));
grid on
saveas(figure(1),'Specific.jpg');
%plot 2, Enthalpy(H) vs Temperature Range(Temp)
figure(2)
plot(Temp,H,'linewidth',2,'color','g');
xlabel('Temperature[k]');
ylabel('Enthalpy in [kj/(mol)]');
title(sprintf('Varimng Enthalpy with Temperature Range of %s',Specific_SP));
grid on
saveas(figure(2),'Enthalpy.jpg');
%plot 3, Entropy(S) vs Temperature Range(Temp)
figure(3)
plot(Temp,S,'linewidth',2,'color','b');
xlabel('Entropy [k]');
ylabel('Entropy in [kj/(mol-k)');
title(sprintf('Varying Entropy with Temperature Range of %s',Species_SP));
grid on
saveas(figure(3),'Entropy.jpg');
cd(cur_dir);
%Molecular weight
M = Molecualr_weight(Species_SP)
f2 = fopen('molecular mass','w');
fprintf('%s n %f n','species','Molecular mass',M)
fclose(f2)
end
%Specific heat calculation function
Function Cp = Specificheat(a1,a2,a3,a4,a5,a8,a9,a10,a11,a12,Temp,R,global_medium_temp)
%comparing with global temperature
%if less than global temperature-medium coefficients are taken
if Temp <= global_medium_temp
Cp = R*(a8+(a9*Temp)+(a10*(Temp).^2)+(a11*(Temp).^3)+(a12*(Temp).^4));
else
Cp = R*(a1+(a2*Temp)+(a3*(Temp).^2)+(a4*(Temp).^3)+(a5*(Temp).^04));
%Else maximum coefficients are taken
end
%Entropy calculation function
Function S = Entropy_calc(a1,a2,a3,a4,a5,a7,a8,a9,a10,a11,a12,a14,Temp,R,global_medium_temp)
%Comparing with global temperature
%if less than global temperature - minimum coefficients are taken
if Temp <=global_medium_temp
S = R.*(a8.*log(Temp)+(a9.*Temp)+(a10*((Temp).^2)/2)+(a11*((Temp).^3)/3)+(a12*((Temp).^4)/4)+a14);
else
%Else - maximum coefficients are taken
S = R.*(a1.*log(Temp)+(a2.*Temp)+(a3((Temp).^2)/2)+(a4*((Temp).^3)/3)+(a5*((Temp).^4)/4)+a7);
end
%Enthalpy calculation function
Function H = Enthalpy_calc(a1,a2,a3,a4,a5,a6,a8,a9,a10,a11,a12,a13,Temp,R,global_medium_temp)
%camparing with global temperature
%if less than global temperature - minimum coefficient are taken
if Temp <=global_mediun_temp
H = R*Temp.*(a8+((a9*Temp)/2))+(a10*((Temp).^2)/3)+(a11*((Temp).^3)/4)+(a12*((Temp).^4)/5)+((a13./Temp));
else
%Else maximum coefficient are taken
H = R*Temp.*((a2*Temp)/2)+((a3*(Temp).^2)/3)+((a4*(Temp).^3)/4)+((a5*(Temp).^4)/5)+((a6./Temp));
end
%Molecular weight calculation function
Function Molecularweight = Molecular_weight(Species_SP)
%Standard - Atomic Name
atomic_name = ['H','C','O','N','A'];
%Hydroge, carbon,Oxygen,Nitrogen,Argon
fprintf('Molecular weight of');
fprintf(Species_SP);
fprintf(':');
%Standard Atomic Number
Atomic_Weight = [1.008 12.011 15.999 14.007 39.948];
%Starting Range of Molecule
Molecularweight = 0;
%Adding Atomic number to obtain particular value
for i= 1:length(Species_SP)
for j= 1:length(atomic_name)
if strcmpi(Species_SP(i),atomic_name(j))
Molecularweight = Molecularweight+Atomic_Weight(j);
position = j;
end
end
n= str2num(Species_SP(i));
if n>1
Molecularweight = Molecularweight + Atomic_Weight(position)*(n-1);
end
end
fprintf('molecular weight%s :',Species_SP);
fprintf('%d',Molecularweight);
disp('');