Project 1 - Parsing NASA thermodynamic data
Project 1 - Parsing NASA thermodynamic data
The Project Aims to Pars the Nasa Thermodynamic Data in therm30.dat file using Matlab.
From the data parsed I\'ve calculated Cp, Enthalpy and Entropy for every species by the
given by,
Cp/R = a1 +a2*T + a3*T^2 + a4*T^3 + a5*T^4
H/R*T = a1 + a2*T/2 + a3*T^2 /3 + a4*T^3 /4 + a5*T^4 /5 + a6
S/R = a1*lnT + a2*T + a3*T^2 /2 + a4*T^3 /3+ a5*T^4 /4 + a7
The following is the matlab Program
clear all
close all
clc
f1 = fopen(\'thermo30.dat\',\'r\')
Heading = fgetl(f1);
% Global Temperatures
global_temp = fgetl(f1);
for i = 1:3
comments{i} = fgetl(f1);
end
a = strsplit(global_temp,\' \');
global_low_temp = str2num(a{2});
global_mid_temp = str2num(a{3});
global_high_temp = str2num(a{4});
%Atomic Mass
O = 16;
for k=1:53
v1 = fgetl(f1);
v2 = fgetl(f1);
v3 = fgetl(f1);
v4 = fgetl(f1);
v{1} = v2;
v{2} = v3;
v{3} = v4;
% Getting Species Names
n = strsplit(v1,\' \');
Name{k} = n{1};
% Getting Temperature for Species
G = findstr(v1,\'.\');
x = v1(G(1)-3:G(1)+23);
G_temp = strsplit(x,\' \');
G_temp_low(k) = str2num(G_temp{1});
G_temp_mid(k) = str2num(G_temp{2});
G_temp_high(k) = str2num(G_temp{3});
% Getting Species Coefficients
for j = 1:3
E = strfind(v{j},\'E\');
p(1) = -3;
o = v{j};
for i = 1:length(E)
p(1+i) = E(i);
Spicies{i} = o(p(i)+4:p(i+1)+3);
sp(k,j,i)= str2num(Spicies{i});
end
clearvars E;
clearvars o;
end
clearvars v1 v2 v3 v4 v G_temp;
end
fclose(f1)
% Solving
% The gas constant R is 8.314 J / mol
R = 8.314;
% High Temperature Coefficients Arrangment
for k = 1:53
for i = 1:5
High_temp_coefficiants(k,i) = sp(k,1,i);
end
for i = 6:7
High_temp_coefficiants(k,i) = sp(k,2,i-5);
end
end
% Low Temperature Coefficients Arrangment
for k = 1:53
for i = 1:3
low_temp_coefficiants(k,i) = sp(k,2,i+2);
end
for i = 4:7
low_temp_coefficiants(k,i) = sp(k,3,i-3);
end
end
% Calculation of Cp
for k = 1:53
% High Temperature
Cp_high(k) = R*(High_temp_coefficiants(k,1)+High_temp_coefficiants(k,2)*G_temp_high(k)+High_temp_coefficiants(k,3)*G_temp_high(k)^2+High_temp_coefficiants(k,4)*G_temp_high(k)^3+High_temp_coefficiants(k,5)*G_temp_high(k)^4);
Cp_low(k) = R*(low_temp_coefficiants(k,1)+low_temp_coefficiants(k,2)*G_temp_low(k)+low_temp_coefficiants(k,3)*G_temp_low(k)^2+low_temp_coefficiants(k,4)*G_temp_low(k)^3+low_temp_coefficiants(k,5)*G_temp_low(k)^4);
end
% Calculation of H
for k = 1:53
% High Temperature
H_high(k) = R*G_temp_high(k)*(High_temp_coefficiants(k,1)+High_temp_coefficiants(k,2)*(G_temp_high(k))/2+High_temp_coefficiants(k,3)*(G_temp_high(k)^2)/3+High_temp_coefficiants(k,4)*(G_temp_high(k)^3)/4+High_temp_coefficiants(k,5)*(G_temp_high(k)^4)/5+High_temp_coefficiants(k,6)/G_temp_high(k));
H_low(k) = R*G_temp_low(k)*(low_temp_coefficiants(k,1)+low_temp_coefficiants(k,2)*(G_temp_low(k))/2+low_temp_coefficiants(k,3)*(G_temp_low(k)^2)/3+low_temp_coefficiants(k,4)*(G_temp_low(k)^3)/4+low_temp_coefficiants(k,5)*(G_temp_low(k)^4)/5+low_temp_coefficiants(k,6)/G_temp_low(k));
end
% Calculation of S
for k = 1:53
% High Temperature
S_high(k) = R*(High_temp_coefficiants(k,1)*log(G_temp_high(k))+High_temp_coefficiants(k,2)*G_temp_high(k)+High_temp_coefficiants(k,3)*(G_temp_high(k)^2)/2+High_temp_coefficiants(k,4)*(G_temp_high(k)^3)/3+High_temp_coefficiants(k,5)*(G_temp_high(k)^4)/4+High_temp_coefficiants(k,7));
S_low(k) = R*(low_temp_coefficiants(k,1)*log(G_temp_low(k))+low_temp_coefficiants(k,2)*G_temp_low(k)+low_temp_coefficiants(k,3)*(G_temp_low(k)^2)/2+low_temp_coefficiants(k,4)*(G_temp_low(k)^3)/3+low_temp_coefficiants(k,5)*(G_temp_low(k)^4)/4+low_temp_coefficiants(k,7));
end
% Species Name Arrangment
names_species = categorical(Name);
for k =1:53
for i=1
cp(k,i)= Cp_high(k);
H(k,i) = H_high(k);
S(k,i) = S_high(k);
end
for i=2
cp(k,i)= Cp_low(k);
H(k,i) = H_low(k);
S(k,i) = S_low(k);
end
end
% Plotting
figure(1)
bar(names_species,cp)
legend(\'Cp for High Temp\',\'Cp for Low temp\')
saveas(gcf,\'Cp.jpg\')
saveas(gcf,\'Cp.pdf\')
figure(2)
bar(names_species,H)
legend(\'H for High Temp\',\'H for Low temp\')
saveas(gcf,\'H.jpg\')
saveas(gcf,\'H.pdf\')
figure(3)
bar(names_species,S)
legend(\'S for High Temp\',\'S for Low temp\')
saveas(gcf,\'S.jpg\')
saveas(gcf,\'S.pdf\')
% Calculating Molecular mass of Species
for k = 1:53
nam = Name{k};
% Checking for C
Carbon = strfind(nam,\'C\');
% Checking for H
Hydrogen = strfind(nam,\'H\');
% Checking for O
Oxygen = strfind(nam,\'O\');
% Checking for N
Nitrogen = strfind(nam,\'N\');
% Checking for Ar
Argon = strfind(nam,\'AR\');
%Mass of Carbon
if ~isempty(Carbon)
Mass_C = 0;
for i = 1:length(Carbon)
if ischar(nam(Carbon(i))+1) ~= 0 && Carbon(i)+1 > length(nam)
num = str2num(nam(Carbon(1))+1);
Mass_C = 12.011*num +Mass_C;
num = 0;
else
Mass_C = 12+Mass_C;
end
end
else
Mass_C = 0;
end
%Mass of Hydrogen
if ~isempty(Hydrogen)
Mass_H = 0;
for i = 1:length(Hydrogen)
if ischar(nam(Hydrogen(i))+1) ~= 0 && Hydrogen(i)+1 < length(nam)
num = str2num(nam(Hydrogen(1))+1);
Mass_H = 12*num +Mass_H;
num = 0;
else
Mass_H = 1.008+Mass_H;
end
end
else
Mass_H = 0;
end
%Mass of Nitrogen
if ~isempty(Nitrogen)
Mass_N = 0;
for i = 1:length(Nitrogen)
if ischar(nam(Nitrogen(i))+1) ~= 0 && Nitrogen(i)+1 < length(nam)
num = str2num(nam(Nitrogen(1))+1);
Mass_N = 12*num +Mass_N;
num = 0;
else
Mass_N = 14.007+Mass_N;
end
end
else
Mass_N = 0;
end
%Mass of Oxygen
if ~isempty(Oxygen)
Mass_O = 0;
for i = 1:length(Oxygen)
if ischar(nam(Oxygen(i))+1) ~= 0 && Oxygen(i)+1 < length(nam)
num = str2num(nam(Oxygen(1))+1);
Mass_O = 15.999*num +Mass_O;
num = 0;
else
Mass_O = 1+Mass_O;
end
end
else
Mass_O = 0;
end
%Mass of Argon
if ~isempty(Argon)
Mass_AR = 0;
for i = 1:length(Argon)
if ischar(nam(Argon(i))+1) ~= 0 && Argon(i)+1 < length(nam)
num = str2num(nam(Argon(1))+1);
Mass_AR = 39.948*num +Mass_AR;
num = 0;
else
Mass_AR = 1+Mass_AR;
end
end
else
Mass_AR = 0;
end
molecule_mass(k) = Mass_C+Mass_H+Mass_O+Mass_N+Mass_AR
end
% Writing Results
f2 = fopen(\'result.txt\',\'w\');
fprintf(f2,\'%s %s %s %s %s %s %s\',\'Species\',\'Cp High Temp\',\'Cp Low Temp\',\'Enthalpy High Temp\',\'Enthalpy Low Temp\',\'Entropy High Temp\',\'Entropy Low Temp\');
fprintf(f2,\'\\n\');
for k= 1:53
% Since FPRINTF Do not support array
N = Name{k};
CPH = Cp_high(k);
CPL = Cp_low(k);
HH = H_high(k);
HL = H_low(k);
SH = S_high(k);
SL = S_low(k);
fprintf(f2,\'%s %f %f %f %f %f %f\',N,CPH,CPL,HH,HL,SH,SL);
fprintf(f2,\'\\n\');
clearvars N CPH CPL HH HL SH SL;
end
fclose(f2)
The following are OUTPUT