Parsing NASA Thermodynamic data
Aim: to write a code in MATLAB to parse the NASA thermodynamic data file and calculate the Thermodynamic properties of various gas species.
Objective:

Theory:
File Parsing:
File parsing refers to how information can b read from a particular text file or any type of file and how that information can be used in aa computer program.
Nasa Thermodynamic data file:
THERMO.dat is a data file contains a no of coefficients for diffrent elements given by NASA. These coefficients can be utilized to calculate Specific Heat,Entalphy and Entropy for a particuar element.
Sample data file:

Specific Heat:

Entalphy:

Entropy:

Gas Constant:

Molecular Weight:

Software Used : MATLAB Programming
Program:
Main Code:
clear all
close all
clc
% Reading the input data file
f1 = fopen('THERMO.dat','r')
get = fgetl(f1);
% input (Gas constant)
R = 8.314;
% Reading temperature from this file
temp = fgetl(f1)
% Spliting
s = strsplit(temp);
% converting strings into numbers
templow = str2num(s{2});
tempmid = str2num(s{3});
temphigh = str2num(s{4});
% temperature Range
T = linspace(templow,temphigh,1000);
% skippig comment lines
for i =1:3
get = fgetl(f1);
end
% Reading the Species
for j = 1:53
tline = fgetl(f1);
% spliting into cell array
A = strsplit(tline,' ');
species = (A{1});
% converting string to number
lowtemp = str2num(A{end-3});
midtemp = str2num(A{end-2});
hightemp = str2num(A{end-1});
% getting next line
tline1 = fgetl(f1);
% Finding string E
a = strfind(tline1,'E');
% Finding first 7 higher ans second 7 lowe coefficients
% Finding Higher coefficients
a1 = tline1(1:a(1)+3);
a1 = str2num(a1);
a2 = tline1(a(1)+4:a(2)+3);
a2 = str2num(a2);
a3 = tline1(a(2)+4:a(3)+3);
a3 = str2num(a3);
a4 = tline1(a(3)+4:a(4)+3);
a4 = str2num(a4);
a5 = tline1(a(4)+4:a(5)+3);
a5 = str2num(a5);
tline2 = fgetl(f1);
b = strfind(tline2,'E');
a6 = tline2(1:b(1)+3);
a6 = str2num(a6);
a7 = tline2(b(1)+4:b(2)+3);
a7 = str2num(a7);
% Finding lower coefficients
a8 = tline2(b(2)+4:b(3)+3);
a8 = str2num(a8);
a9 = tline2(b(3)+4:b(4)+3);
a9 = str2num(a9);
a10 = tline2(b(4)+4:b(5)+3);
a10 = str2num(a10);
tline3 = fgetl(f1);
c = strfind(tline3,'E');
a11 = tline3(1:c(1)+3);
a11 = str2num(a11);
a12 = tline3(c(1)+4:c(2)+3);
a12 = str2num(a12);
a13 = tline3(c(2)+4:c(3)+3);
a13 = str2num(a13);
a14 = tline3(c(3)+4:c(4)+3);
a14 = str2num(a14);
% calculating Specific heat
cp = specific_heat(a1,a2,a3,a4,a5,a8,a9,a10,a11,a12,T,R,tempmid);
% calculating Entropy
S = Entropy(a1,a2,a3,a4,a5,a7,a8,a9,a10,a11,a12,a14,T,R,tempmid);
% Calculating Enthalpy
H = Enthalpy(a1,a2,a3,a4,a5,a6,a8,a9,a10,a11,a12,a13,T,R,tempmid);
% Calculating molecular weight values
W = Molecular_weight(species);
% writing molecular weight file
MW_file = fopen('Molecular weight.txt','w');
fprintf(MW_file,'Molecular weight of %s is %d',species,W);
fclose(MW_file);
% plotting cp,H and S with Temperature
% saving in a folder
cd('C:/Users/Rehaman/Desktop/Skill Lync/Practice Matlab/species')
mkdir(species); % creating directory
cd(species);
% Plot1 cp vs T
figure(1)
plot(T,cp,'linewidth',3,'color','r');
xlabel('Temperature (K)');
ylabel('Specific heat (KJ)');
title(sprintf('Specific heat vs Temperature range of %s',species));
grid on
saveas(figure(1),'Specific Heat.jpg');
% Plot 2 S vs T
figure(2)
plot(T,S,'linewidth',3,'color','b');
xlabel('Temperature (K)');
ylabel('Entropy(KJ/mol-K)');
title(sprintf('Entropy vs Temperature range of %s',species));
grid on
saveas(figure(2),'Entropy.jpg');
% Plot 3 H vs T
figure(3)
plot(T,H,'linewidth',3,'color','g');
xlabel('Temperature (K)');
ylabel('Enthalpy (KJ/mol)');
title(sprintf('Enthalpy vs Temperature range of %s',species));
grid on
saveas(figure(3),'Enthalpy.jpg');
cd('C:/Users/Rehaman/Desktop/Skill Lync/Practice Matlab')
% Molecular weight
W = Molecular_weight(species)
end
Function code for Specific Heat, Entropy,Enthalpy, Molecular Weight:
1.Function to find Specific Heat :
function [cp] = specific_heat(a1,a2,a3,a4,a5,a6,a9,a10,a11,a12,T,R,tempmid)
% calculating specific heat for higher and lower temperatures
if (T <= tempmid)
cp = R*(a8 + (a9*T)+(a10*(T).^2)+ (a11*(T).^3)+ (a12*(T).^4));
else
cp = R*(a1 + (a2*T)+(a3*(T).^2)+ (a4*(T).^3)+ (a5*(T).^4));
end
end
2. Function Code for Entropy:
function [S] = Entropy(a1,a2,a3,a4,a5,a7,a8,a9,a10,a11,a12,a14,T,R,tempmid)
% Calculating Entropy for higher and lower temperature values
if (T<= tempmid)
S = R*(a8.*log(T) + (a9*T) + ((a10*(T).^2)/2) + ((a11*(T).^3)/3) + ((a12*(T).^4)/4) + a14);
else
S = R*(a1.*log(T) + (a2*T) + ((a3*(T).^2)/2) + ((a4*(T).^3)/3) + ((a5*(T).^4)/4) + a7);
end
end
3. Function code for Enthalpy:
function [H] = Enthalpy(a1,a2,a3,a4,a5,a6,a8,a9,a10,a11,a12,a13,T,R,tempmid)
% Calculating Enthalpy for higher and lower temperature values
if (T <= tempmid)
H = R*T.*(a8 + (a9*T)/2 + ((a10*(T).^2)/3) + ((a11*(T).^3)/4) + ((a12*(T).^4)/5) + (a13./T));
else
H = R*T.*(a1 + (a2*T)/2 + ((a3*(T).^2)/3) + ((a4*(T).^3)/4) + ((a5*(T).^4)/5) + (a6./T));
end
end
4. Function code for molecular weight:
function [W] = Molecular_weight(species)
% Defining Atomic names of species
atomic_name = ['H','C','O','N','Ar'];
% Defining Atomic masses of main species
atomic_weight = [ 1.008 12.011 15.999 14.007 39.948];
% Molecular weight starting range
W = 0;
for i = 1:length(species) % loops runsto the length of the species
for j= 1:length(atomic_name) % loops runs to the length of the atomic wei
if strcmp(species(i),atomic_name(j))% function to compare 2 strings
W =W + atomic_weight(j);
position = j;
end
end
n = str2num(species);
if n>1
W=W+atomic_weight(position)*(n-1);
end
end
fprintf('Molecular Weight of %s :-',species);
fprintf('%f',W);
disp(' ')
end
Output Window:
Molecular Weights of the species:
f1 =
7
temp =
' 300.000 1000.000 5000.000'
Molecular Weight of O :-15.999000
Molecular Weight of O :-15.999000
W =
15.9990
Molecular Weight of O2 :-15.999000
Molecular Weight of O2 :-15.999000
W =
15.9990
Molecular Weight of H :-1.008000
Molecular Weight of H :-1.008000
W =
1.0080
Molecular Weight of H2 :-1.008000
Molecular Weight of H2 :-1.008000
W =
1.0080
Molecular Weight of OH :-17.007000
Warning: Directory already exists.
> In file_parsing_challenge (line 111)
Warning: Function functions has the same name as a MATLAB builtin. We suggest you rename the function to avoid a
potential name conflict.
> In file_parsing_challenge (line 141)
Molecular Weight of OH :-17.007000
W =
17.0070
Molecular Weight of H2O :-17.007000
Warning: Directory already exists.
> In file_parsing_challenge (line 111)
Warning: Function functions has the same name as a MATLAB builtin. We suggest you rename the function to avoid a
potential name conflict.
> In file_parsing_challenge (line 141)
Molecular Weight of H2O :-17.007000
W =
17.0070
Molecular Weight of HO2 :-17.007000
Warning: Directory already exists.
> In file_parsing_challenge (line 111)
Warning: Function functions has the same name as a MATLAB builtin. We suggest you rename the function to avoid a
potential name conflict.
> In file_parsing_challenge (line 141)
Molecular Weight of HO2 :-17.007000
W =
17.0070
Molecular Weight of H2O2 :-17.007000
Warning: Directory already exists.
> In file_parsing_challenge (line 111)
Warning: Function functions has the same name as a MATLAB builtin. We suggest you rename the function to avoid a
potential name conflict.
> In file_parsing_challenge (line 141)
Molecular Weight of H2O2 :-17.007000
W =
17.0070
Molecular Weight of C :-12.011000
Warning: Directory already exists.
> In file_parsing_challenge (line 111)
Warning: Function functions has the same name as a MATLAB builtin. We suggest you rename the function to avoid a
potential name conflict.
> In file_parsing_challenge (line 141)
Molecular Weight of C :-12.011000
W =
12.0110
Molecular Weight of CH :-13.019000
Warning: Directory already exists.
> In file_parsing_challenge (line 111)
Warning: Function functions has the same name as a MATLAB builtin. We suggest you rename the function to avoid a
potential name conflict.
> In file_parsing_challenge (line 141)
Molecular Weight of CH :-13.019000
W =
13.0190
Molecular Weight of CH2 :-13.019000
Warning: Directory already exists.
> In file_parsing_challenge (line 111)
Warning: Function functions has the same name as a MATLAB builtin. We suggest you rename the function to avoid a
potential name conflict.
> In file_parsing_challenge (line 141)
Molecular Weight of CH2 :-13.019000
W =
13.0190
Molecular Weight of CH2(S) :-13.019000
Warning: Directory already exists.
> In file_parsing_challenge (line 111)
Warning: Function functions has the same name as a MATLAB builtin. We suggest you rename the function to avoid a
potential name conflict.
> In file_parsing_challenge (line 141)
Molecular Weight of CH2(S) :-13.019000
W =
13.0190
Molecular Weight of CH3 :-13.019000
Warning: Directory already exists.
> In file_parsing_challenge (line 111)
Warning: Function functions has the same name as a MATLAB builtin. We suggest you rename the function to avoid a
potential name conflict.
> In file_parsing_challenge (line 141)
Molecular Weight of CH3 :-13.019000
W =
13.0190
Molecular Weight of CH4 :-13.019000
Warning: Directory already exists.
> In file_parsing_challenge (line 111)
Warning: Function functions has the same name as a MATLAB builtin. We suggest you rename the function to avoid a
potential name conflict.
> In file_parsing_challenge (line 141)
Molecular Weight of CH4 :-13.019000
W =
13.0190
Molecular Weight of CO :-28.010000
Warning: Directory already exists.
> In file_parsing_challenge (line 111)
Warning: Function functions has the same name as a MATLAB builtin. We suggest you rename the function to avoid a
potential name conflict.
> In file_parsing_challenge (line 141)
Molecular Weight of CO :-28.010000
W =
28.0100
Molecular Weight of CO2 :-28.010000
Warning: Directory already exists.
> In file_parsing_challenge (line 111)
Warning: Function functions has the same name as a MATLAB builtin. We suggest you rename the function to avoid a
potential name conflict.
> In file_parsing_challenge (line 141)
Molecular Weight of CO2 :-28.010000
W =
28.0100
Molecular Weight of HCO :-29.018000
Warning: Directory already exists.
> In file_parsing_challenge (line 111)
Warning: Function functions has the same name as a MATLAB builtin. We suggest you rename the function to avoid a
potential name conflict.
> In file_parsing_challenge (line 141)
Molecular Weight of HCO :-29.018000
W =
29.0180
Molecular Weight of CH2O :-29.018000
Warning: Directory already exists.
> In file_parsing_challenge (line 111)
Warning: Function functions has the same name as a MATLAB builtin. We suggest you rename the function to avoid a
potential name conflict.
> In file_parsing_challenge (line 141)
Molecular Weight of CH2O :-29.018000
W =
29.0180
Molecular Weight of CH2OH :-30.026000
Warning: Directory already exists.
> In file_parsing_challenge (line 111)
Warning: Function functions has the same name as a MATLAB builtin. We suggest you rename the function to avoid a
potential name conflict.
> In file_parsing_challenge (line 141)
Molecular Weight of CH2OH :-30.026000
W =
30.0260
Molecular Weight of CH3O :-29.018000
Warning: Directory already exists.
> In file_parsing_challenge (line 111)
Warning: Function functions has the same name as a MATLAB builtin. We suggest you rename the function to avoid a
potential name conflict.
> In file_parsing_challenge (line 141)
Molecular Weight of CH3O :-29.018000
W =
29.0180
Molecular Weight of CH3OH :-30.026000
Warning: Directory already exists.
> In file_parsing_challenge (line 111)
Warning: Function functions has the same name as a MATLAB builtin. We suggest you rename the function to avoid a
potential name conflict.
> In file_parsing_challenge (line 141)
Molecular Weight of CH3OH :-30.026000
W =
30.0260
Molecular Weight of C2H :-13.019000
Warning: Directory already exists.
> In file_parsing_challenge (line 111)
Warning: Function functions has the same name as a MATLAB builtin. We suggest you rename the function to avoid a
potential name conflict.
> In file_parsing_challenge (line 141)
Molecular Weight of C2H :-13.019000
W =
13.0190
Molecular Weight of C2H2 :-13.019000
Warning: Directory already exists.
> In file_parsing_challenge (line 111)
Warning: Function functions has the same name as a MATLAB builtin. We suggest you rename the function to avoid a
potential name conflict.
> In file_parsing_challenge (line 141)
Molecular Weight of C2H2 :-13.019000
W =
13.0190
Molecular Weight of C2H3 :-13.019000
Warning: Directory already exists.
> In file_parsing_challenge (line 111)
Warning: Function functions has the same name as a MATLAB builtin. We suggest you rename the function to avoid a
potential name conflict.
> In file_parsing_challenge (line 141)
Molecular Weight of C2H3 :-13.019000
W =
13.0190
Molecular Weight of C2H4 :-13.019000
Warning: Directory already exists.
> In file_parsing_challenge (line 111)
Warning: Function functions has the same name as a MATLAB builtin. We suggest you rename the function to avoid a
potential name conflict.
> In file_parsing_challenge (line 141)
Molecular Weight of C2H4 :-13.019000
W =
13.0190
Molecular Weight of C2H5 :-13.019000
Warning: Directory already exists.
> In file_parsing_challenge (line 111)
Warning: Function functions has the same name as a MATLAB builtin. We suggest you rename the function to avoid a
potential name conflict.
> In file_parsing_challenge (line 141)
Molecular Weight of C2H5 :-13.019000
W =
13.0190
Molecular Weight of C2H6 :-13.019000
Warning: Directory already exists.
> In file_parsing_challenge (line 111)
Warning: Function functions has the same name as a MATLAB builtin. We suggest you rename the function to avoid a
potential name conflict.
> In file_parsing_challenge (line 141)
Molecular Weight of C2H6 :-13.019000
W =
13.0190
Molecular Weight of CH2CO :-41.029000
Warning: Directory already exists.
> In file_parsing_challenge (line 111)
Warning: Function functions has the same name as a MATLAB builtin. We suggest you rename the function to avoid a
potential name conflict.
> In file_parsing_challenge (line 141)
Molecular Weight of CH2CO :-41.029000
W =
41.0290
Molecular Weight of HCCO :-41.029000
Warning: Directory already exists.
> In file_parsing_challenge (line 111)
Warning: Function functions has the same name as a MATLAB builtin. We suggest you rename the function to avoid a
potential name conflict.
> In file_parsing_challenge (line 141)
Molecular Weight of HCCO :-41.029000
W =
41.0290
Molecular Weight of HCCOH :-42.037000
Warning: Directory already exists.
> In file_parsing_challenge (line 111)
Warning: Function functions has the same name as a MATLAB builtin. We suggest you rename the function to avoid a
potential name conflict.
> In file_parsing_challenge (line 141)
Molecular Weight of HCCOH :-42.037000
W =
42.0370
Molecular Weight of H2CN :-27.026000
Warning: Directory already exists.
> In file_parsing_challenge (line 111)
Warning: Function functions has the same name as a MATLAB builtin. We suggest you rename the function to avoid a
potential name conflict.
> In file_parsing_challenge (line 141)
Molecular Weight of H2CN :-27.026000
W =
27.0260
Molecular Weight of HCN :-27.026000
Warning: Directory already exists.
> In file_parsing_challenge (line 111)
Warning: Function functions has the same name as a MATLAB builtin. We suggest you rename the function to avoid a
potential name conflict.
> In file_parsing_challenge (line 141)
Molecular Weight of HCN :-27.026000
W =
27.0260
Molecular Weight of HNO :-31.014000
Warning: Directory already exists.
> In file_parsing_challenge (line 111)
Warning: Function functions has the same name as a MATLAB builtin. We suggest you rename the function to avoid a
potential name conflict.
> In file_parsing_challenge (line 141)
Molecular Weight of HNO :-31.014000
W =
31.0140
Molecular Weight of N :-14.007000
Warning: Directory already exists.
> In file_parsing_challenge (line 111)
Warning: Function functions has the same name as a MATLAB builtin. We suggest you rename the function to avoid a
potential name conflict.
> In file_parsing_challenge (line 141)
Molecular Weight of N :-14.007000
W =
14.0070
Molecular Weight of NNH :-29.022000
Warning: Directory already exists.
> In file_parsing_challenge (line 111)
Warning: Function functions has the same name as a MATLAB builtin. We suggest you rename the function to avoid a
potential name conflict.
> In file_parsing_challenge (line 141)
Molecular Weight of NNH :-29.022000
W =
29.0220
Molecular Weight of N2O :-30.006000
Warning: Directory already exists.
> In file_parsing_challenge (line 111)
Warning: Function functions has the same name as a MATLAB builtin. We suggest you rename the function to avoid a
potential name conflict.
> In file_parsing_challenge (line 141)
Molecular Weight of N2O :-30.006000
W =
30.0060
Molecular Weight of NH :-15.015000
Warning: Directory already exists.
> In file_parsing_challenge (line 111)
Warning: Function functions has the same name as a MATLAB builtin. We suggest you rename the function to avoid a
potential name conflict.
> In file_parsing_challenge (line 141)
Molecular Weight of NH :-15.015000
W =
15.0150
Molecular Weight of NH2 :-15.015000
Warning: Directory already exists.
> In file_parsing_challenge (line 111)
Warning: Function functions has the same name as a MATLAB builtin. We suggest you rename the function to avoid a
potential name conflict.
> In file_parsing_challenge (line 141)
Molecular Weight of NH2 :-15.015000
W =
15.0150
Molecular Weight of NH3 :-15.015000
Warning: Directory already exists.
> In file_parsing_challenge (line 111)
Warning: Function functions has the same name as a MATLAB builtin. We suggest you rename the function to avoid a
potential name conflict.
> In file_parsing_challenge (line 141)
Molecular Weight of NH3 :-15.015000
W =
15.0150
Molecular Weight of NO :-30.006000
Warning: Directory already exists.
> In file_parsing_challenge (line 111)
Warning: Function functions has the same name as a MATLAB builtin. We suggest you rename the function to avoid a
potential name conflict.
> In file_parsing_challenge (line 141)
Molecular Weight of NO :-30.006000
W =
30.0060
Molecular Weight of NO2 :-30.006000
Warning: Directory already exists.
> In file_parsing_challenge (line 111)
Warning: Function functions has the same name as a MATLAB builtin. We suggest you rename the function to avoid a
potential name conflict.
> In file_parsing_challenge (line 141)
Molecular Weight of NO2 :-30.006000
W =
30.0060
Molecular Weight of HCNO :-43.025000
Warning: Directory already exists.
> In file_parsing_challenge (line 111)
Warning: Function functions has the same name as a MATLAB builtin. We suggest you rename the function to avoid a
potential name conflict.
> In file_parsing_challenge (line 141)
Molecular Weight of HCNO :-43.025000
W =
43.0250
Molecular Weight of HOCN :-43.025000
Warning: Directory already exists.
> In file_parsing_challenge (line 111)
Warning: Function functions has the same name as a MATLAB builtin. We suggest you rename the function to avoid a
potential name conflict.
> In file_parsing_challenge (line 141)
Molecular Weight of HOCN :-43.025000
W =
43.0250
Molecular Weight of HNCO :-43.025000
Warning: Directory already exists.
> In file_parsing_challenge (line 111)
Warning: Function functions has the same name as a MATLAB builtin. We suggest you rename the function to avoid a
potential name conflict.
> In file_parsing_challenge (line 141)
Molecular Weight of HNCO :-43.025000
W =
43.0250
Molecular Weight of NCO :-42.017000
Warning: Directory already exists.
> In file_parsing_challenge (line 111)
Warning: Function functions has the same name as a MATLAB builtin. We suggest you rename the function to avoid a
potential name conflict.
> In file_parsing_challenge (line 141)
Molecular Weight of NCO :-42.017000
W =
42.0170
Molecular Weight of CN :-26.018000
Warning: Directory already exists.
> In file_parsing_challenge (line 111)
Warning: Function functions has the same name as a MATLAB builtin. We suggest you rename the function to avoid a
potential name conflict.
> In file_parsing_challenge (line 141)
Molecular Weight of CN :-26.018000
W =
26.0180
Molecular Weight of HCNN :-41.033000
Warning: Directory already exists.
> In file_parsing_challenge (line 111)
Warning: Function functions has the same name as a MATLAB builtin. We suggest you rename the function to avoid a
potential name conflict.
> In file_parsing_challenge (line 141)
Molecular Weight of HCNN :-41.033000
W =
41.0330
Molecular Weight of N2 :-14.007000
Warning: Directory already exists.
> In file_parsing_challenge (line 111)
Warning: Function functions has the same name as a MATLAB builtin. We suggest you rename the function to avoid a
potential name conflict.
> In file_parsing_challenge (line 141)
Molecular Weight of N2 :-14.007000
W =
14.0070
Molecular Weight of AR :-39.948000
Warning: Directory already exists.
> In file_parsing_challenge (line 111)
Warning: Function functions has the same name as a MATLAB builtin. We suggest you rename the function to avoid a
potential name conflict.
> In file_parsing_challenge (line 141)
Molecular Weight of AR :-39.948000
W =
39.9480
Molecular Weight of C3H8 :-13.019000
Warning: Directory already exists.
> In file_parsing_challenge (line 111)
Warning: Function functions has the same name as a MATLAB builtin. We suggest you rename the function to avoid a
potential name conflict.
> In file_parsing_challenge (line 141)
Molecular Weight of C3H8 :-13.019000
W =
13.0190
Molecular Weight of C3H7 :-13.019000
Warning: Directory already exists.
> In file_parsing_challenge (line 111)
Warning: Function functions has the same name as a MATLAB builtin. We suggest you rename the function to avoid a
potential name conflict.
> In file_parsing_challenge (line 141)
Molecular Weight of C3H7 :-13.019000
W =
13.0190
Molecular Weight of CH3CHO :-42.037000
Warning: Directory already exists.
> In file_parsing_challenge (line 111)
Warning: Function functions has the same name as a MATLAB builtin. We suggest you rename the function to avoid a
potential name conflict.
> In file_parsing_challenge (line 141)
Molecular Weight of CH3CHO :-42.037000
W =
42.0370
Molecular Weight of CH2CHO :-42.037000
Warning: Directory already exists.
> In file_parsing_challenge (line 111)
Warning: Function functions has the same name as a MATLAB builtin. We suggest you rename the function to avoid a
potential name conflict.
> In file_parsing_challenge (line 141)
Molecular Weight of CH2CHO :-42.037000
W =
42.0370
>>
Screenshot of Directory where species saved:


Plots:
Plots of O2:



Plots of N2:



Plot of Co2:



Note: Theory reference taken by google and skill lync