
%Program for filr parsing of NASA thermodynamic file
close all
clear all
clc
%opening the external file
f1=fopen('THERMO.dat','r')
line_1= fgetl(f1);
line_2= fgetl(f1);
%Obtaining the global temperature values
%splitting strings into parts
global_values= strsplit(line_2,' ');
%Converting string to number
g_low_temp= str2num(global_values{2})
g_mid_temp= str2num(global_values{3})
g_high_temp= str2num(global_values{4})
line_3= fgetl(f1);
line_4= fgetl(f1);
line_5= fgetl(f1);
%defining gas constant
R=8.314;
for i=1:53
T=fgetl(f1);
%extracting the species name
species_name= T(1:9);
species_name= deblank(species_name);
%extracting local temperatures
species_temp= T(49:75);
local_values= strsplit(species_temp,' ');
l_low_temp= str2num(local_values{1});
l_mid_temp= str2num(local_values{3});
l_high_temp= str2num(local_values{2});
temp= [l_low_temp l_mid_temp l_high_temp];
temp_range=linspace(l_low_temp,l_high_temp,500);
coeff= fgetl(f1);
coeff1= findstr(coeff,'E');
%Coefficient extraction
a1= coeff(1:coeff1(1)+3);
a1= str2num(a1);
a2= coeff(coeff1(1)+4:coeff1(2)+3);
a2= str2num(a2);
a3= coeff(coeff1(2)+4:coeff1(3)+3);
a3= str2num(a3);
a4= coeff(coeff1(3)+4:coeff1(4)+3);
a4= str2num(a4);
a5= coeff(coeff1(4)+4:coeff1(5)+3);
a5= str2num(a5);
new_line= fgetl(f1);
coeff2= findstr(new_line,'E');
a6= new_line(1:coeff2(1)+3);
a6= str2num(a6);
a7= new_line(coeff2(1)+4:coeff2(2)+3);
a7= str2num(a7);
a8= new_line(coeff2(2)+4:coeff2(3)+3);
a8=str2num(a8);
a9= new_line(coeff2(3)+4:coeff2(4)+3);
a9= str2num(a9);
a10= new_line(coeff2(4)+4:coeff2(5)+3);
a10= str2num(a10);
new_linel= fgetl(f1);
coeff_3= findstr(new_linel,'E');
a11= new_linel(1:coeff_3(1)+3);
a11= str2num(a11);
a12= new_linel(coeff_3(1)+4:coeff_3(2)+3);
a12= str2num(a12);
a13= new_linel(coeff_3(2)+4:coeff_3(3)+3);
a13= str2num(a13);
a14= new_linel(coeff_3(3)+4:coeff_3(4)+3);
a14= str2num(a14);
%Specific heat calculation
Cp= specific_heat(a1,a2,a3,a4,a5,a8,a9,a10,a11,a12,temp,temp_range,R);
%Enthalpy calculation
H= enthalpy(a1,a2,a3,a4,a5,a6,a8,a9,a10,a11,a12,a13,temp,temp_range,R);
%Entropy calculation
S= entropy_1(a1,a2,a3,a4,a5,a7,a8,a9,a10,a11,a12,a14,temp,temp_range,R);
%Calculation of molecular weight
m_weight= weight(species_name);
%saving molecular weight
species_w= fopen('species_mass.txt','w');
fprintf(species_w,'molecular mass of %s is %f',species_name,m_weight);
fclose(species_w);
%Plotting and saving
cur_dir=pwd;
%Making a new folder for each species
mkdir(species_name);
cd(species_name);
figure(1)
plot(temp_range,Cp,'linewidth',2,'color',[0.2345 0.4567 0.5678])
xlabel('Temperature(K)');
ylabel('Specific heat(KJ/Kg-K)');
title(species_name);
figure(2)
plot(temp_range,H,'linewidth',2,'color',[0.5678 0.3423 0.7874])
xlabel('Temperature(K)');
ylabel('Enthalpy(KJ-Kg)');
title(species_name);
figure(3)
plot(temp_range,S,'linewidth',2,'color',[0.4532 0.1234 0.3324])
xlabel('Temperature(K)');
ylabel('Entropy(KJ/K)');
title(species_name);
%Saving the plots in seperate folder for each species
saveas(1,'specific heat.jpg');
saveas(2,'enthalpy.jpg');
saveas(3,'entropy.jpg');
cd(cur_dir);
sprintf('molecular weight of %s=%f',species_name,m_weight)
end
fclose(f1)
function[m_weight]= weight(species_name)
element={'H','O','N','Ar','C','S'};
atomic_mass=[1.008,15.999,14.007,39.948,12.011,32.065];
m_weight=0;
for i=1:length(species_name)
for j=1:length(element)
if strcmp(species_name(i),element(j))
m_weight=m_weight+atomic_mass(j);
a=j;
end
end
b=str2num(species_name(i));
if b>1
m_weight-m_weight+atomic_mass(a)*(b-1);
end
end
end
function[H]= enthalpy(a1,a2,a3,a4,a5,a6,a8,a9,a10,a11,a12,a13,temp,temp_range,R)
for i=1:length(temp_range)
if temp_range(i)<=temp(2)
H(i)= R*(a8*temp_range(i))+(a9*((temp_range(i).^2)/2))+(a10*((temp_range(i).^3)/3))+(a11*((temp_range(i).^4)/4))+(a12*(((temp_range(i).^5)/5))+a13);
else
H(i)= R*(a1*temp_range(i))+(a2*((temp_range(i).^2)/2))+(a3*((temp_range(i).^3)/3))+(a4*((temp_range(i).^4/4)))+(a5*((temp_range(i).^5))+a6);
end
end
function[S]= entropy_1(a1,a2,a3,a4,a5,a7,a8,a9,a10,a11,a12,a14,temp,temp_range,R)
for i=1:length(temp_range)
if temp_range(i)<=temp(2)
S(i)=R.*((a8*log(temp_range(i)))+(a9*temp_range(i))+(a10*((temp_range(i).^2)/2))+(a11*((temp_range(i).^3)/3))+(a12*((temp_range(i).^4)/4))+a14);
else
S(i)=R.*((a1*log(temp_range(i)))+(a2*temp_range(i))+(a3*((temp_range(i).^2)/2))+(a4*((temp_range(i).^3)/3))+(a5*((temp_range(i).^4)/4))+a7);
end
end
function[Cp]= specific_heat(a1,a2,a3,a4,a5,a8,a9,a10,a11,a12,temp,temp_range,R)
for i=1:length(temp_range)
if temp_range(i)<=temp(2)
Cp(i)= R*(a8+(a9*temp_range(i))+(a10*(temp_range(i).^2))+(a11*(temp_range(i).^3))+(a12*(temp_range(i).^4)));
else
Cp(i)= R*(a1+(a2*temp_range(i))+(a3*(temp_range(i).^2))+(a4*(temp_range(i).^3))+(a5*(temp_range(i).^4)));
end
end