Project 1 - Parsing NASA thermodynamic data
Aim :To parse the thermodynamic data from NASA.
Theory:The official record of thermodynamic values at different temperature has been stored by NASA in the form of polynomials with the specified constants ranging from one to fourteen for various species . In order to quantify the values , the polynomials can be solved with the defined temperature values accordance with our requirments.
The term 'parsing' refers to matlab reading m-file (script or function ) and translating it into an internal code that it stores in memory .It is this 'parsed ' file in memory that is actually run when you execute the code.
GOVERNING EQUATIONS:
• SPECIFIC HEAT —C_P/R=al+a2xT+a3xT^2+a4xT^3+a5xT^4CP /R=al+a2xT +a3xT 2+a4xT 3+a5xT 4
• ENTHALPY —H/RT= al+a2xT/2+a3xT"2/3+a4xT"3/4+a5xT"4/5+a6/TH /RT =al+a2xT /2+a3xT 2/3+a4xT 3/4+a5xT 4/5+a6/T
• ENTROPY —S/R=a1xlogT+a2xT+a3xT"2/2+a4xr3/3+a5xT"4/4+a7S/R=a1xtnT +a2xT +a3xT 2/2+a4xT 3/3+a5xT 4/4+a7
where, Cp = Specific Heat
H = Enthalpy
S = Entropy
R = Universal Gas Constant (8.314 J/mol.K)
T = Temperature * The First 7 Coefficients are High Temperature Coefficients and the Second 7 Coefficients are Low Temperature Coefficients.
OBJECTIVE: 1. To write a function extracting the 14 coefficients from the data file and calculating the specific heat, enthalpy and entropy of all species.
2. To calculate molecular weight of every species and displaying in command window.
3. To plot specific heat, enthalpy and entropy with temperature range distributed from global high temperature to global low temperature.
4. To create a separate folder for all the plots and saving them in :png' format.
code:
function[C_p] =specific_heat_calc(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,local_low_temp,local_mid_temp,local_high_temp,T)
if (T>local_mid_temp)
C_p=(a1+(a2*T)+(a3*(T.^2))+(a4*(T.^3))+(a5*(T.^4)));
else
C_p=(a8+(a9*T)+(a10*(T.^2))+(a11*(T.^3))+(a12*(T.^4)));
end
%Enthalpy function coding
function [h]=enthalpy_cal(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,local_low_temp,local_mid_temp,local_high_temp,T)
if (T>local_mid_temp)
h=(a1*T+(a2*(T.^2)/2)+(a3*(T.^3)/3)+(a4*(T.^4)/4)+(a5*(T.^5)/5)+a6);
else
h=(a8*T+(a9*(T.^2)/2)+(a10*(T.^3)/3)+(a11*(T.^4)/4)+(a12*(T.^5)/5)+a13);
end
%Entropy function coding
function [s]= entropy_calc(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,local_low_temp,local_mid_temp,local_high_temp,T)
if (T>local_mid_temp)
s=(a1*log(T)+(a2*T)+(a3*(T.^2)/2)+(a4*(T.^3))+(a5*(T.^4)/4)+a7);
else
s=(a8*log(T)+(a9*T)+(a10*(T.^2)/2)+(a11*(T.^3))+(a12*(T.^4)/4)+a14);
end
%Molecular weight function coding
function [M]= molecular_weight(species_name)
Atomic_mass=[15.999,1.008,12.011,14.007,39.948];
Elements=['O','H','C','N','A'];
Mol_wt=0;
for i=1:length(species_name)
for j=1:length(Elements)
if strcmpi(species_name(i),Elements(j))
Mol_wt= Mol_wt+Atomic_mass(j);
z=j;
end
end
var=str2double(species_name(i));
if (var>1)
Mol_wt=Mol_wt+(Atomic_mass(z)*(var-1));
end
end
M=Mol_wt;
end
% Nasa thermodynamic file parsing
close all
clear all
clc
% gas constant
R=8.314;
%reading first two lines
f1=fopen('THERMO.dat','r')
tline1=fgetl(f1)
tline2=fgetl(f1)
temp=strsplit(tline2,' ')
global_low_temp=str2num(temp{2})
global_mid_temp=str2num(temp{3})
global_high_temp=str2num(temp{4})
%skipping next threee lines
for i=1:3
skippedlines=fgetl(f1);
end
for i=1:53
tline3=fgetl(f1)
S=strsplit(tline3,' ');
species_name= S{1};
A=strfind(tline3,'G');
temp_values=tline3(A+4:length(tline3));
B=strsplit(temp_values,' ');
local_low_temp=str2double(B{1});
local_mid_temp=str2double(B{3});
local_high_temp=str2double(B{2});
tline4=fgetl(f1)
f=strfind(tline4,'E');
a1=str2double(tline4(1:(f(1)+3)));
a2=str2double(tline4(f(1)+4:(f(2)+3)));
a3=str2double(tline4(f(2)+4:(f(3)+3)));
a4=str2double(tline4(f(3)+4:(f(4)+3)));
a5=str2double(tline4(f(4)+4:(f(5)+3)));
tline5=fgetl(f1);
a6=str2double(tline5(1:(f(1)+3)));
a7=str2double(tline5(f(1)+4:(f(2)+3)));
a8=str2double(tline5(f(2)+4:(f(3)+3)));
a9=str2double(tline5(f(3)+4:(f(4)+3)));
a10=str2double(tline5(f(4)+4:(f(5)+3)));
tline6=fgetl(f1);
a11=str2double(tline6(1:(f(1)+3)));
a12=str2double(tline6(f(1)+4:(f(2)+3)));
a13=str2double(tline6(f(2)+4:(f(3)+3)));
a14=str2double(tline6(f(3)+4:(f(4)+3)));
T=linspace(local_low_temp,local_high_temp,100)
C_p=R*specific_heat_calc(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,local_low_temp,local_mid_temp,local_high_temp,T)
s=R*entropy_calc(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,local_low_temp,local_mid_temp,local_high_temp,T)
h=R*enthalpy_cal(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,local_low_temp,local_mid_temp,local_high_temp,T)
req_species=["O2","N2","CO2"];
if(species_name==req_species(1))||(species_name==req_species(2))||(species_name==req_species(3))
mkdir(species_name);
cd(species_name)
figure(1)
plot(T,C_p,'LineWidth',3,'Color','r')
title('specific heat vs temperature')
xlabel('temperature')
ylabel('specific heat')
image=getframe(gcf);
imwrite(image.cdata,'cp vs T.png')
saveas(1,'specific_heat','jpg')
figure(2)
plot(T,h,'LineWidth',3,'Color','y')
title('enthalpy vs temperature')
xlabel('temperature')
ylabel('enthalpy')
image=getframe(gcf);
imwrite(image.cdata,'h vs T.png')
saveas(2,'enthalpy','jpg')
figure(3)
plot(T,s,'LineWidth',3,'Color','b')
title('entropy vs temperature')
xlabel('temperature')
ylabel('entropy')
image=getframe(gcf);
imwrite(image.cdata,'s vs T.png')
saveas(3,'entropy','jpg')
cd ..
end
molecular_wt=molecular_weight(species_name);
K=sprintf('%s Mol_wt = %f',species_name,molecular_wt);
disp(K)
end
Plots :
for O2:



For CO2:



For N2:



CONCLUSION: The parsing of thermodynamic data file by NASA is done using certain commands in MATLAB. Also, the plots of thermodynamic properties v/s temperature are saved in a separate folder created by writing a specific code. Moreover, a function has been coded to calculate the molecular weight of the species mentioned in the given data file. From the above program, it can be exerted that new folders with desired information can be created and the files can be easily saved for further use.