Project 1 - Parsing NASA thermodynamic data
Title - 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
Theory -
File parsing:parsing a file means to spilt a file or other input into pieces of data that can easily stored or manipulated.so we are splitting a string into parts then recognizing the parts to convert it into something simpler than a string.
Enthalpy:A thermodynamic quantity equivalent to the total heat content of a system.it is equal to the internal energy of the system plus the product of pressure and volume.
Entropy:A thermodynamic quantity representing the unavailability of a system thernal energy for conversion into mechanical work,often interpreted as the degree of disorder of randomness in the system.
Specific heat:It is the amount of heat per unit mass required to raise the temperature by one degree celsius.
Molecular weight:Molecular weight is the weight of a given molecule.
Code -
%Specific Heat Calculation 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
Explaination - Here we have written the function of formula to find Specific heat
Code2 -
%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
Explaination - This is the function of formula of Enthalpy
Code3 -
%Entropy function coding
function [s]= entropy_calc9(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
Explaination - This is the function of formula of Entropy
Code4-
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
Explaination - This is the function of formula of Molecular weight
Main code -
% 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_calc9(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_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)
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
Outputs -
For C02



For N2 -



For O2 -



Molecular weight calculated for CH2CH0 is 43.004

Conclusion - Hence the plotting for graphs for Cp v T, S v T, H v T was done using file parsing.