Project 1 - Parsing NASA thermodynamic data
Aim:
- Write a function that extracts the 14 co-efficients and calculates the enthalpy, entropy and specific heats for all the species in the data file.
Objective:
- Calculate the molecular weight of each series.
- Plot the Cp, enthalpy, and entropy for the local temperature range (low temperature: high temperature) specific for each species.
File Parsing:
- It is the method of splitting the file or other input into a piece of data that can be easily stored or manipulated. By doing this we are going to split a string into parts then recognize the parts to convert it into something simpler than a string.
- Here in this project, we are going to split the NASA thermodynamic data which is having 53 gas species values in 213 lines. To perform the calculation for thermodynamic properties, we need some sort of co-efficient values and temperature ranges which are available in the NASA file. So, we are going to parse the values which are all needed for our calculation from that file.
Specific heat:
- Specific heat is the amount of heat energy required to raise the temperature of the body per unit mass. Specific heat is also known as specific heat capacity or
mass-specific heat. In SI units, specific heat is the amount of heat in joules required to raise 1 gm of a substance 1 kelvin.
Enthalpy:
- When a substance changes at constant pressure, enthalpy tells how much heat and work was added or removed from the substance. Enthalpy is similar to energy
but not the same. When a substance grows or shrinks, energy is used up or released
Entropy:
- The entropy of the object is a measure of the amount of energy which is unavailable to do work. Entropy is also a measure of the number of possible
arrangements of atoms a system can have. In this sense, entropy is the measure of uncertainty and randomness.
Gas Constant:
- The gas constant is a physical constant denoted by R and is expressed in terms of units of energy per temperature increment per mole. The gas constant value
is equivalent to Boltzmann constant but expressed as the pressure-volume produce instead of energy per increment of temperature per particle.
Molecular weight:
- Molecular weight is a measure of sum of the atomic weight values of the atoms in a molecule. Molecular weight is used in chemistry to determine stoichiometry
in chemical reactions and equations. - NASA thermodynamics file which is THERMO.dat file in which there are temperature range and 53 species are given in these data and each species contains 14 coefficients and temperature ranges and we have to parse these 14 coefficients to find the specific heat, entropy, and enthalpy using formula as:

Where,
R = Universal gas constant
T = Temperature
Cp = Specific Heat (K)
S = Entropy (kJ/mole-K)
H = Enthalpy (kJ/mole)
To create function to calculate Cp , H , S -
% Function To Calculate Cp,Enthalpy and Entropy
% for the local temperature range, specific for each species.
function [ Cp H S ]=property(A1,A2,A3,A4,A5,A6,A7,a1,a2,a3,a4,a5,a6,a7,T,G_mid_T)
% Cp = Specific Heat of species at constant Pressure
% H = Enthalpy
% S = Entropy
% T = Temperature Range
% G_mid_T = Global Mid Temperature
R = 8.314 ; % R = Universal Gas Constant
for q = 1: length(T)
if T(q) >= G_mid_T
Cp = (A1+ (A2.*T) + (A3.*T.^2) + (A4.*T.^3) + (A5.*T.^4)) * R ;
H = (A1+(A2.*(T./2))+(A3.*(T.^2)./3)+(A4.*(T.^3)./4)+(A5.*(T.^4)./5)+(A6./T)).*(T.*R);
S = ((A1.* log(T))+(A2.*T)+(A3.*T.^2)+(A4.*T.^3)+(A5.*T.^4)+A7)* R ;
else
Cp =(a1+ (a2.*T) + (a3.*T.^2) + (a4.*T.^3) + (a5.*T.^4)) * R ;
H = (a1+(a2.*(T./2))+(a3.*(T.^2)./3)+(a4.*(T.^3)./4)+(a5.*(T.^4)./5)+(a6./T)).*(T.*R);
S = ((a1 *log(T))+(a2.*T)+(a3 *T.^2)+(a4.*T.^3)+(a5.*T.^4)+a7)* R ;
end
end
To calculate molecular weight of the species -
% Function To Calculate Molecular Weight
function MW= Molecular_Weight(species)
atoms={'H','C','N','O','A'};
% H=HYDROGEN(1), C=CARBON(12), N=NITROGEN(14), O=OXYGEN(16), A=ARGON(40)
atomic_weight=[1 12 14 16 40];
MW=0;
for i=1:length(species)
for j=1:length(atomic_weight)
if (strcmp(species(i),atoms(j))==1) % for comparing atoms of the species with atoms
MW = MW + atomic_weight(j);
rank=j; % to find the position of atoms in the species
end
end
% For the weights of the repeating atoms
m=str2num(species(i));
if m>1
n=m-1;
MW=MW+atomic_weight(rank)*(n);
end
end
end
Main program:-
clc
clear all
close all
% Program for Parsing NASA thermodynamic data
file = fopen('THERMO.dat','r'); % To open the data file & set to read mode
file_name = fgetl(file) ; % To read the Header line(file name)
first_line = fgetl(file) ; % To read the 1st line after Header
Global_Temp_Range=strsplit(first_line,' ') ;% To extract temp from 1st line
G_low_T = str2num(Global_Temp_Range{2}); % To get the Global low temperature
G_mid_T = str2num(Global_Temp_Range{3}) ; % To get the Global mid temperature
G_high_T = str2num(Global_Temp_Range{4}) ;% To get the Global high temperature
for i= 1:3
a= fgetl(file) ; % To read the next 3 lines after first line
end
for j= 1:53
line_1 = fgetl(file); %To read 1st line of species,as ranked 1 on RHS of data file
L1 = strsplit(line_1,' '); % To split 1st line
species = (L1{1}); % To extract Species from 1st line
G = strfind(line_1,'G '); % To find the position of G in 1st line
L_low_T = str2num(line_1(G+3:G+10)); % To extract LOCAL Low Temperature
L_high_T = str2num(line_1(G+12:G+20)); % To extract LOCAL High Temperature
L_mid_T = str2num(line_1(G+22:G+30));% To extract LOCAL Midium Temperature
T = linspace(L_low_T,L_high_T,500); % To set a range of Local Temperature
line_2 = fgetl(file); %To read 2nd line of species,as ranked 2 on RHS of data file
L2 = strfind(line_2,'E'); % To find the position of E in 2nd line
A1 = str2num(line_2(1:L2(1)+3)); % To extract 1st coefficient for High Temperature
A2 = str2num (line_2(L2(1)+4:L2(2)+3)); % To extract 2nd coefficient for High Temperature
A3 = str2num (line_2(L2(2)+4:L2(3)+3)); % To extract 3rd coefficient for High Temperature
A4 = str2num (line_2(L2(3)+4:L2(4)+3)); % To extract 4th coefficient for High Temperature
A5 = str2num (line_2(L2(4)+4:L2(5)+3)); % To extract 5th coefficient for High Temperature
line_3 = fgetl(file); %To read 3rd line of species,as ranked 3 on RHS of data file
L3 = strfind(line_3,'E'); % To find the position of E in 3rd line
A6 = str2num(line_3(1:L3(1)+3)); % To extract 6th coefficient for High Temperature
A7 = str2num (line_2(L3(1)+4:L3(2)+3)); % To extract 7th coefficient for High Temperature
a1 = str2num (line_2(L3(2)+4:L3(3)+3)); % To extract 1st coefficient for Low Temperature
a2 = str2num (line_2(L3(3)+4:L3(4)+3)); % To extract 2nd coefficient for Low Temperature
a3 = str2num (line_2(L3(4)+4:L3(5)+3)); % To extract 3rd coefficient for Low Temperature
line_4 = fgetl(file); %To read 4th line of species as ranked 4 on RHS of data file
L4 = strfind(line_4,'E'); % To find the position of E in 4th line
a4 = str2num(line_4(1:L4(1)+3)); % To extract 4th coefficient for Low Temperature
a5 = str2num (line_4(L4(1)+4:L4(2)+3)); % To extract 5th coefficient for Low Temperature
a6 = str2num (line_4(L4(2)+4:L4(3)+3)); % To extract 6th coefficient for Low Temperature
a7 = str2num (line_4(L4(3)+4:L4(4)+3)); % To extract 7th coefficient for Low Temperature
% Function To Calculate Cp,Enthalpy and Entropy
[Cp,H,S] = property(A1,A2,A3,A4,A5,A6,A7,a1,a2,a3,a4,a5,a6,a7,T,G_mid_T);
% To creat Folders with species name
Folder_name = sprintf('%d) [%s]',j, species); % To give Folder names
current_dir = pwd ; % To specify the current directory
% All The Function Program And Thermodynamic Data file are stored in a folder,that specify current
mkdir(Folder_name); % To creat a Folder
cd(Folder_name); % To load plots in that new folder
figure (1);
plot(T,Cp,'r','linewidth',4)
grid on
xlabel(' Local Temperature');
ylabel(' Specific Heat')
title(' Specific Heat(Cp) Vs Temperature(T) ')
IMAGE1 = sprintf(" Cp Vs T of [%s].png",species); % To give a name of the file
saveas(gca,IMAGE1) % To save the image file
figure (2);
plot(T,H,'b','linewidth',4)
grid on
xlabel(' Local Temperature');
ylabel(' Enthalpy')
title(' Enthalpy(H) Vs Temperature(T) ')
IMAGE2 = sprintf(" H Vs T of [%s].png",species); % To give a name of the file
saveas(gca,IMAGE2) % To save the image file
figure (3);
plot(T,S,'g','linewidth',4)
grid on
xlabel(' Local Temperature');
ylabel(' Entropy')
title(' Entropy(S) Vs Temperature(T) ')
IMAGE3 = sprintf(" S Vs T of [%s].png",species); % To give a name of the file
saveas(gca,IMAGE3) % To save the image file
cd(current_dir); % To give a path,return to current directory
% Function To Calculate Molecular Weight
MW = Molecular_Weight(species);
fprintf(' %d) Molecular Weight of [%s] is %d.',j,species,MW) % To display as output
fprintf(' ') % To set the next output after 2 line interval
end
Code Explanation :
- First step is to clear all, close all, clc. The clear all command helps to clear the workspace. The close all command closes all figures and the clc command clears the command window.
- The fopen command is used in reading mode to read the THERMO.dat file.
- The temperature values are calculated by using strsplit,str2num commands.
- Then the comment lines are stored in three variables i.e., line3, line4, line5.
- The for loop is used to create an array that contains every line of the file.
- Then the coefficients are founded by using the findstr, str2num.
- Then the directory is created to save the plots in png format with species name.
- The cp, h, s functions are called to the main program which have been created separate script.
- Then the plots are created between temperature and cp, s, h.
- The saves are used to save the plots in png extension.
- Finally, the molecular_weight function is called for calculating the molecular weight of the species.
- The fclose command is used to end the reading of the file
Error faced while programming :-

- solved by adding . before ^.
Molecular Weight in the command window:-

Plots for o2 species
Cp vs T

H vs T

S v T

Plots for N2 species
Cp vs T

H vs T

S v T

Plots for Co2 species
Cp vs T

H vs T

S v T

Screenshot of the window where all the folders are saved:-
