Project 1 - Parsing NASA thermodynamic data
Aim: To write a code in Matlab to parse the NASA Thermodynamic data file and then calculate the Thermodynamic properties of various gas species.
Objective :
a.To write a function that extract the 14 coefficient and calculate the enthalpy,entropy and specific heat in the Nasa thermodynamic datafile "Thermo.dat".

b.To calculate the molecular weight of eachspecies and display it in the command window
c.To plot the Cp,enthaly and entropy for the local temperature range(low temperature,high temperature)specific for each species.
d.To save the plot as image with appropriate name and dump them in separate folder for each species with suitable name automatically.
e.To calculate the molecular weight of eachspecies and display it in the command window
f.To plot the Cp,enthaly and entropy for the local temperature range(low temperature,high temperature)specific for each species.
g.To save the plot as image with appropriate name and dump them in separate folder for each species with suitable name automatically.
File Parsing:
File parsing refers to how information can be read from a particular text file or any type of file and how that information can be used in a computer program.
Step 1 - Define the function
Step 2 - Create an InputParser object
Step3 - Add inputs to the scheme.
Step 4 - Set properties to adjust parsing.
Step 5 - Parse the inputs.
Step 6- Use the inputs in function.
Step 7 - Calling function.
NASA Thermodynamic File
THERMO.dat file is a data file containing 14 coefficients for 53 different elements given by NASA. These coefficients are utilized to calculate the specific heat, enthalpy & entropy for a particular element. Each element has its own range of local temperature. Below screenshot of the THERMO.dat file is displayed.
Enthalpy, Entropy, and Specific Heat:
Enthalpy, entropy, and specific heat, of various species values at different temperatures are required extensively to analyze the
thermodynamic process
For example, if the combustion process is considered during this, these quantities are required to observe how the combustion is going on and how efficient it will be. It eventually allows seeking the scope of improvement in the process. Similarly in the other processes refrigeration, air conditioning, chemical kinetics, nozzle flow, detonation process, etc, these quantities are widely involved to observe the phenomenon.
NASA came up with polynomials that can be used to evaluate thermodynamic properties such as Cp, H, and S. They have documented the
coefficients that are required to evaluate these polynomials for 1000 species.
The NASA polynomials have the form:
Cp/R al-a2 T a3 T^2+a4 T^3 a5 T^4.
H/RT-al-a2 T/2-a3 T2/3-a4 T 34 a5 T 4/5-a6/T
S/R al InT a2 Ta3 T^2/2a4 T23/3-a5 T 4/4-a7
Where R is the universal gas constant, T is the temperature and al, a2, a3, a4, a5, a6, and a7 are the numerical coefficients supplied in the thermodynamic file. The FIRST 7 coefficients are HIGH-temperature coefficients (above 1000 K) and the SECOND 7 coefficients are LOW temperature coefficients (below 1000 K).
Specific heat code:-
%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 medium temp
% If less than global tmeperature - minimum coefficient 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).^4));
%Else maximum coefficient are taken
end
Entropy code:-
% Entropy Calculation function
function S = Entropy_calc(a1,a2,a3,a4,a5,a7,a8,a9,a10,a11,a12,a14,Temp,R,global_medium_temp)
%calculating with global temperature
%If less than global temperature - minimum coefficient 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 - minimum coefficient are taken
S = R.*(a1.*log(Temp) + (a2.*Temp) + (a3*((Temp).^2)/2) + (a4*((Temp).^3)/3) + (a5*((Temp).^4)/4) + a7);
end
end
Enthalpy code
% Enthalpy Calculation function
function H = Enthalpy(a1,a2,a3,a4,a5,a6,a8,a9,a10,a11,a12,a13,Temp,R,global_medium_temp)
% comparing with global temperature
%If less than global temperature - minimum coefficient are taken
if(Temp <= global_medium_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 coefficients are taken
H = R*Temp.*(a1 + ((a2*Temp)/2)+((a3*(Temp).^2)/3)+((a4*(Temp).^3)/4)+((a5*(Temp).^4)/5)+((a6./Temp)));
end
end
Molecular weight code
function Molecularweight = molecular_weight(Species_SP)
%standard - Atomic Name
atomic_name = ['H','C','O','N','A'];
%Hydrogen,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 molecular
Molecularweight = 0;
% Adding Atomic number to obtain particular value
for i = 1:length(Species_SP)
for j = 1:length(atomic_name)
if strcmp(Species_SP(i), atomic_name(j))
Molecularweight = Molecularweight+ atomic_name(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 of %s :- ',Species_SP);
fprintf(' %d',Molecularweight);
disp(' ');
end
Main program code for file parasing
clear all
close all
clc
% Make directory
mkdir 'C:\Users\91968\Desktop\skilllyln\matlab\project\global_medium_temp'
% Reading Data file of Nasa thermodynamic
%open afile and 'r' open the file for reading
f1=fopen('THERMO.dat','r');
gt = fgetl(f1);
% Obtaing Temperature - by Reading Header Information
global_temp=fgetl(f1);
%spliting
t = strsplit(global_temp);
%converting string cells to number using str2num,
global_low_temp = str2num(t{2});
global_mid_temp = str2num(t{3});
global_high_temp = str2num(t{4});
% Temperature Range and Gas constant
% Temperature Range assumed
Temp = linspace(global_low_temp,global_high_temp,1000);
% universal gas constant j/(mol - k)
R = 8.314 ;
%skipping three comment lines in file
for i= 1:3
gt = fgetl(f1);
end
%reading the Species_sp
for i = 1:53
gt = fgetl(f1);
A = strsplit(gt,' ' );
Species_SP = (A{1});
line_1 = fgetl(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);
a2 = line_1(a(1)+4:a(2)+3);
a2 = str2num(a2);
a3 = line_1(a(2)+4:a(3)+3);
a3 = str2num(a3);
a4 = line_1(a(3)+4:a(4)+3);
a4 = str2num(a4);
a5 = line_1(a(4)+4:a(5)+3);
a5 = str2num(a5);
line_2 = fgetl(f1);
b = strfind(line_1,'E');
a6 = line_2(1:b(1)+3);
a6 = str2num(a6);
a7 = line_2(b(1)+4:b(2)+3);
a7 = str2num(a7);
% extracting Second 7 coefficients - low - temperature coefficients
a8 = line_2(b(2)+4:b(3)+3);
a8 = str2num(a8);
a9 = line_2(b(3)+4:b(4)+3);
a9 = str2num(a9);
a10 = line_2(b(4)+4:b(5)+3);
a10 = str2num(a10);
line_3 = fgetl(f1);
c = strfind(line_1,'E');
a11 = line_3(1:c(1)+3);
a11 = str2num(a11);
a12 = line_3(c(1)+4:c(2)+3);
a12 = str2num(a12);
a13 = line_3(c(2)+4:c(3)+3);
a13 = str2num(a13);
a14 = line_3(c(3)+4:c(4)+3);
a14 = str2num(a14);
% Specific heat calculation
Cp = Specificheat(a1,a2,a3,a4,a5,a8,a9,a10,a11,a12,Temp,R,global_medium_temp);
% Enthalpy calculating
H = enthalpy(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 and write moleular 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 and S with temperature)
%saving in a folder
cur_dir =pwd;
mkdir(Species_SP);
cd(Species_SP);
%plot 1 ,Specfic heat(CP) vs Temperature range (Temp)
figure(1)
plot(Temp,Cp,'linewidth',2,'color','g');
grid on
xlable('Temperature(K)');
ylable('specific heat(KJ)');
title(sprintf('specific heat vs temperature renge of %s',Species_SP));
saveas(figure(1),'Specific heat.jpg');
grid off
%plot 2 ,Enthalpy(S) vs Temperature range (Temp)
figure(2)
plot(Temp,H,'linewidth',2,'color','r');
grid on
xlable('Temperature[K]');
ylable('Enthalpy in [(KJ/(mol)]');
title(sprintf('Enthalpy vs temperature renge of %s',Species_SP));
saveas(figure(2),'Enthalpy.jpg');
grid off
%plot 3 ,Entropy(S) vs Temperature range (Temp)
figure(3)
plot(Temp,S,'linewidth',2,'color','b');
grid on
xlable('Temperature[K]');
ylable('Entropy in[KJ/(mol-k)]');
title(sprintf('Entropy vs temperature renge of %s',Species_SP));
saveas(figure(3),'Entropy.jpg');
grid off
end
Code Explanation:
- 'clear all-clear all the variables in the workspace,
'close all' - closes all the plots and figures and
'clc'-clears the command window.
- Making a directory using 'mkdir' with location address.
- After that, reading the text file 'Thermo.dat' file and opening it by using 'fopen' and 'r' as reading command.
- For reading the line in a text file using 'fgetl'.
- To obtain the temperature range from the Thermo.dat file, using 'strsplit' to split the temperature into a particular string cell.
- Used 'str2num' for converting string cell to numbers.
- Divided the temperature into a string and then converted to a number so that temperature values can be used separately to solve the NASA thermodynamics.
- Using 'for & end' loops to skip the next three comment lines in the text file.
- Reading all the 53 species to plot specific heat(cp), enthalpy(H), and entropy(S), with temperature values, and to find the molecular weights.
- Used 'for' loop to read 53 species.
- Used 'strfind' to find string.
- Using 'linspace' specified the temperature range from low to high.
- Adding universal gas constant value 'R.
- Extracted higher and lower temperature coefficient by reading line by line from the species.
- Calling specific heat, enthalpy, entropy function codes.
- Calculating Molecular weight.
Syntax Used during Coding
Fopen:Open a file or obtain information about open files
T:Open the file for reading
fgetl:Read line from file
strsplit:Split string or character vector at specified delimiter
str2num:Convert character array or string to numeric array
strfind:Find one string within another
linspace:Generate linearly spaced vectors
fprintf:Write formatted data to file
pwd:Identify current directory
mkdir:Make new directory
cd:Change working directory
Results
1.Outputs of molecular weight
- .To plot the Cp,enthaly and entropy for the local temperature range(low temperature,high temperature)specific for each species.
outputs
Molecular weight of AR: molecular weight AR :3.9948880+01
ans =39.9480
Molecular weight C
Molecular Weight of C: molecular weight C :1.201100e+01
ans =12.0110
Molecular_weight C2H
Molecular Weight of C2H: molecular weight C2H :2.503000e+01
ans =25.0300
Molecular weight C2H2
Molecular Weight of C2H2 molecular weight C2H2 :2.603800e+01
26.0380
Molecular weight C2H3
Molecular Weight of C2H3: molecular weight C2H3 :2.7046000+01
ans =27.0460
Molecular_weight C2H4 Molecular Weight of C2H4: molecular weight C2H4 :2.8054000+01
ans =
28.0540
Molecular weight C2H5
Molecular Weight of C2H5: molecular weight C2H5 :2.906200e+01
ans =29.0620
Molecular_weight C2H6
Molecular Weight of C2H6: molecular weight C2H6 :3.007000e+01
ans =30.0700
Molecular_weight C3H7
Molecular Weight of C3H7 : cular weight C3H7 :4.308900e+01
ans =43.0890
Molecular weight C3H8
Molecular Weight of C3H8: molecular weight C3H8 :4.409700e+01
ans =
44.0970
Molecular_weight CH
Molecular Weight of CH: molecular weight CH :1.301900e+01
ans =
13.0190
Molecular weight H2CN
Molecular Weight of H2CN molecular weight H2CN :2.803400e+01
ans =
28.0340
Molecular weight H20
Molecular Weight of H20: molecular weight H20 :1.801500e+01
ans =
18.0150
42.9370
>> Molecular weight HCN
Molecular Weight of HCN molecular weight HCN :2.702600e+01
ans =27.0260
Molecular weight HCNN
Molecular Weight of HCNN: molecular weight HCNN :4.103300e+01
ans =41.0330
Molecular weight HCNO
Molecular Weight of HCNO: molecular weight HCNO :4.302500e+01
ans =43.0250
molecular weight. HOON
Melecular weight of HOCN: molecular weight HOCN 14.302500+01
ans 43.0250
Molecular weight N
Molecular weight of N: molecular weight N :1.4007000+01
ans =14.007
Molecular weight N2
Molecular weight of N2: molecular weight N2 :2.801400+01
ans =26.0140
Molecular weight of N20: molecular weight N20 :4.401300+01
ans = 44.028
Molecular weight NH
Molecular weight of NH: molecular weight NH :1.501500e+01
15.008
Molecular weight NH2
Molecular Weight of NH2 molecular weight NH2 :1.602300e+01
16.023
Molecular weight NH3
Molecular weight of NH3: molecular weight NH3 :1.7031000+01
ans=17.034
Molecular weight NNH
Molecular weight of NNH: molecular weight NNH :2.982200e+01
ans =29.003
Molecular_weight NO2
Molecular Weight of NO2: molecular weight NO2 :4.600500e+01
ans =46.0050
Molecular weight 0
Molecular Weight of 0: molecular weight 0:1.599900e+01
ans =15.9990
Molecular_weight 02
Molecular Weight of 02: molecular weight 02 :3.199800e+01
ans =15.9990
Molecular weight 02 Molecular Weight of 02: molecular weight 02 :3.199800e+01
ans =31.9980
Molecular_weight OH Molecular Weight of OH: molecular weight OH :1.700700e+01
ans =17.0070
Results
Graphs Cp,enthaly and entropy for the local temperature range(low temperature,high temperature)specific for each species.
specific hest with temp of O2.


specific hest with temp of N2


specific hest with temp of CO2


Screenshot of Directory where different species are saved
