Project 1 - Parsing NASA thermodynamic data
AIM:- To write a code in Matlab to parse the NASA thrmodynamic data file and then calculate the thermodynamic properties of various gas species.
Objective:
1.To write a function that extracts the 14 coefficients and calculates the enthalpy,entropy and specific heats for all the species in NASA thermodynamic data file "THERMO.dat".
The NASA polynomials have the form as shown below:
Cp/R = a1 + a2T + a3T^2 + a4T^3 + a5T^4
H/RT = a1 + a2T/2 + a3T^2/3 + a4T^3/4 + a5T^4/5 + a6/T
S/R = a1*lnT + a2T + a3T^2/2 + a4T^3/3 + a5T^4/4 + a7
where R is the universal gas constant,T is the temperature
2.To calculate the molecular weight of each species and display it in command window.
NASA Thermodynamic file
THERMO.dat file is a data file containing 14 coefficients for 53 different elements given by NASA. These coefficients are utilized to calculate the specific heat, enthalpy & entropy for a particular element.Each element has its own range of local temperature.
clear all
close all
clc
mkdir 'C:NASA File Parsing' %Making directory
%Getting the data file
f1 = fopen('THERMO.dat','r'); %Reading NASA Thermodynamic data file
gt = fgetl(f1);
%Obtaining temperatures - by reading header information
global_temp = fgetl(f1);
%Splitting
t=strsplit(global_temp);
%Converting string cells to numbers using str2num,
global_low_temp = str2num(t{2});
global_medium_temp = str2num(t{3});
global_high_temp = str2num(t{4});
%Temperature range assumed
Temp = linspace(global_low_temp,global_high_temp,1000);
%Universal Gas constant J/(mol-k)
R = 8.314;
%Skipping next three lines
for i=1:3
gt = fgetl(f1);
end
for i=1:53
gt =fgetl(f1);
A = strsplit(gt,' ');
Species_SP=(A{1})
line_1 = fgetl(f1);
a = strfind(line_1,'E');
%Extracting higher and lower temperature coefficients
% Extracting first 7 coefficients i.e high-temperature coefficients
A1=line_1(1:(a(1)+3));
a1=str2num(A1);
A2=line_1((a(1)+4):(a(2)+3));
a2=str2num(A2);
A3=line_1((a(2)+4):(a(3)+3));
a3=str2num(A3);
A4=line_1((a(3)+4):(a(4)+3));
a4=str2num(A4);
A5=line_1((a(4)+4):(a(5)+3));
a5=str2num(A5);
line_2=fgetl(f1);
b=strfind(line_2,'E');
a6=line_2(1:(b(1)+3));
a6=str2num(a6);
a7=line_2((a(1)+4):(b(2)+3));
a7=str2num(a7);
%Extracting second 7 coefficients-Low temp coefficients
a8=line_2((b(2)+4):(b(3)+3));
a8=str2num(a8);
a9=line_2((b(3)+4):(b(4)+3));
a9=str2num(a9);
a10=line_2(b(4)+4:b(5)+3);
a10=str2num(a10);
line_3=fgetl(f1);
c=strfind(line_3,'E');
a11=line_3(1:(c(1)+3));
a11=str2num(a11);
a12=line_3((c(1)+4):(c(2)+3));
a12=str2num(a12);
a13=line_3((c(2)+4):(c(3)+3));
a13=str2num(a13);
a14=line_3((c(3)+4):(c(4)+3));
a14=str2num(a14);
%Specific heat calculation
Cp = specific_heat(a1,a2,a3,a4,a5,a8,a9,a10,a11,a12,Temp,R,global_medium_temp);
%Enthalpy calculation
H = enthalpy(a1,a2,a3,a4,a5,a6,a8,a9,a10,a11,a12,a13,Temp,R,global_medium_temp);
%Entropy calculation
S = entropy(a1,a2,a3,a4,a5,a7,a8,a9,a10,a11,a12,a14,Temp,R,global_medium_temp);
%Calculating molecular weight of species
Molecularweight(i)=molecular_weight(Species_SP);
Molecular_list = fopen('Molecular weight.txt','a+');
fprintf(Molecular_list,'Molecular weight of %s is %d n',Species_SP,Molecularweight);
fclose(Molecular_list);
cur_dir=pwd;
mkdir(Species_SP);
cd(Species_SP);
%PLotting the graphs
figure(1) %Specific heat vs Temperature
plot(Temp,Cp,'LineWidth',2,'Color','r');
xlabel('Temperature(K)');
ylabel('Specific Heat(kJ)');
title(sprintf('Varying Specific heat with Temperature range of %s',Species_SP));
grid on
saveas(figure(1),'Specific Heat.jpg');
figure(2) %Enthalpy vs Temperature
plot(Temp,H,'LineWidth',2,'Color','g');
xlabel('Temperature(K)');
ylabel('Enthalpy(kJ/mol)');
title(sprintf('Varying Enthalpy with Temperature range of %s',Species_SP));
grid on
saveas(figure(2),'Enthalpy.jpg');
figure(3) %Entropy vs Temperature
plot(Temp,S,'LineWidth',2,'Color','b');
xlabel('Temperature(K)');
ylabel('Entropy(kJ/mol-K)');
title(sprintf('Varying Entropy with Temperature range of %s',Species_SP));
grid on
saveas(figure(3),'Entropy.jpg');
cd(cur_dir);
%MOlecular weight
M = molecular_weight(Species_SP)
f2 = fopen('molecular mass','w');
fclose(f2);
end
%Function to calculate specific heat function for high&low temp
function Cp = specific_heat(a1,a2,a3,a4,a5,a8,a9,a10,a11,a12,Temp,R,global_medium_temp)
if Temp <= global_medium_temp
Cp = R*(a8 + (a9*Temp) + (a10*(Temp).^2) + (a11*(Temp).^3) + (a12*(Temp).^4));
else
Cp = R*(a1 + (a2*Temp) + (a3*(Temp).^2) + (a4*(Temp).^3) + (a5*(Temp).^4));
end
end
% Function to calculate the entropy
function S = entropy(a1,a2,a3,a4,a5,a7,a8,a9,a10,a11,a12,a14,Temp,R,global_medium_temp)
if Temp <= global_medium_temp
S = R.*(a8.*log(Temp)+ (a9.*Temp) + (a10*((Temp).^2)/2) + (a11*((Temp).^3)/3) + ((a12*(Temp).^4)/4) + a14);
else
S = R.*(a1.*log(Temp)+ (a2.*Temp) + (a3*((Temp).^2)/2) + (a4*((Temp).^3)/3) + ((a5*(Temp).^4)/4) + a7);
end
%Function to calculate the enthalpy
% H = RT(a1 + a2*T/2 + a3*T^2/3 + a4*T^3/4 + a5*T^4/5 + a6/T)
function H = enthalpy(a1,a2,a3,a4,a5,a6,a8,a9,a10,a11,a12,a13,Temp,R,global_medium_temp)
if (Temp <= global_medium_temp)
H = R*Temp.*(a8 + ((a9*Temp)/2) + ((a10*(Temp).^2)/3) + ((a11*(Temp).^3)/4) + ((a12*(Temp).^4)/5) + ((a13./Temp)));
else
H = R*Temp.*(a1 + ((a2*Temp)/2) + ((a3*(Temp).^2)/3) + ((a4*(Temp).^3)/4) + ((a5*(Temp).^4)/5) + ((a6./Temp)));
end
%Function to calculate molecular weight
function Molecularweight = molecular_weight(Species_SP)
atomic_name = ['H','C','O','N','A'];
fprintf('Molecular Weight of ');
fprintf(Species_SP);
fprintf(' : ');
%Standard atomic number
Atomic_weight = [1.008 12.011 15.999 14.007 39.948];
%Starting range of Molecule
Molecularweight = 0;
%Adding Atomic number to obtain particular value
for i=1:length(Species_SP)
for j=1:length(atomic_name)
if strcmpi(Species_SP(i),atomic_name(j))
Molecularweight = Molecularweight + Atomic_weight(j);
position = j;
end
end
n = str2num(Species_SP(i));
if n>1
Molecularweight = Molecularweight + Atomic_weight(position)*(n-1);
end
end
fprintf('%d',Molecularweight);
disp(' ');
end
Syntax used during coding:-
Fopen:
Open a file or obtain information about open files
'r':
Open the file for reading
fgetl - Read line from file
strsplit - split string or character vector at specified delimeter
str2num - Convert character array or string to numeric array
strfind - Find one string within another
linspace - Generate linearly spaced vectors
fprintf - Write formatted data to file
pwd - Identify current directory
mkdir - Make new directory
cd - Change working directory
Screenshot of the window where all the folders are saved was uploaded.
Specific Heat,Entropy and Enthalpy plots for O2,N2 and CO2 species were also uploaded.
molecular weights for some species were also uploaded.
Conclusion:
Using MATLAB code,the necessary coefficients required to evaluate various thermodynamic parameters for different species are extracted from NASA thermodynamic data file.The specific heat,enthalpy and entropy for all the species are calculated and plotted against the local temperature range.The molecular weight is calculated for all the species.