Project 1 - Parsing NASA thermodynamic data
%Program to get thehrmodynamic properties using file parsing
clear all
close all
clc
% Reading Data file - Nasa Thermodynamic
% Open a file & 'r' Open the file for reading
f1=fopen('THERMO.dat','r')
gt=fgetl(f1);
%Obtainig Temperatures - by Reading Header Information
global_temp=fgetl(f1);
%Spliting
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 & Gas Constant
%Temperature Range assumed
Temp=linspace(global_low_temp,global_high_temp,1000);
%Universal Gas Constant J/(mol-K)
R=8.314;
%Skipping three comment lines in the file
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); %1
a2=line_1(a(1)+4:a(2)+3);
a2=str2num(a2); %2
a3=line_1(a(2)+4:a(3)+3);
a3=str2num(a3); %3
a4=line_1(a(3)+4:a(4)+3);
a4=str2num(a4); %4
a5=line_1(a(4)+4:a(5)+3);
a5=str2num(a5); %5
line_2=fgetl(f1);
b=strfind(line_1,'E');;
a6=line_2(1:b(1)+3);
a6=str2num(a6); %6
a7=line_2(b(1)+4:b(2)+3);
a7=str2num(a7); %7
% Extracting SECOND 7 coefficients - LOW-temperature coefficients
a8=line_2(b(2)+4:b(3)+3);
a8=str2num(a8); %8
a9=line_2(b(3)+4:b(4)+3);
a9=str2num(a9); %9
a10=line_2(b(4)+4:b(5)+3);
a10=str2num(a10); %10
line_3=fgetl(f1);
c=strfind(line_1,'E');
a11=line_3(1:c(1)+3);
a11=str2num(a11); %11
a12=line_3(c(1)+4:c(2)+3);
a12=str2num(a12); %12
a13=line_3(c(2)+4:c(3)+3);
a13=str2num(a13); %13
a14=line_3(c(3)+4:c(4)+3);
a14=str2num(a14); %14
%Specific heat calculation
Cp = Specificheat(a1,a2,a3,a4,a5,a8,a9,a10,a11,a12,Temp,R,global_medium_temp);
%Enthalpy calculation
H = enthalpy_calc(a1,a2,a3,a4,a5,a6,a8,a9,a10,a11,a12,a13,Temp,R,global_medium_temp);
%Entropy calculation
S = entropy_calc(a1,a2,a3,a4,a5,a7,a8,a9,a10,a11,a12,a14,Temp,R,global_medium_temp);
mkdir(['C:\Users\yadnyikee\Documents\MATLAB\File parsing\',Species_SP])
%Calculating molecular weight of species
Molecule(i) = Molecular_weight(Species_SP);
%Read & Write Molecular list
Molecular_list = fopen('Molecular weight.txt','a+');
fprintf(Molecular_list,'Molecular weight of %s is %d n',Species_SP,Molecule);
fclose(Molecular_list);
%plotting(CP,H,S,Temp,Species_SP)
%saving as a folder
%Plot 1, Specific heat(CP) vs Temperature Range(Temp)
figure(1)
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
%Plot 2,Enthalpy (H) vs Temperature Range(Temp)
figure(2)
plot(Temp,H,'linewidth',2,'color','g');
xlabel('Temperature [K]');
ylabel('enthalpy in [KJ/(mol)]');
title(sprintf('Varying Enthalpy with Temperature Range of %s',Species_SP));
grid on
%Plot 3,Entropy (S) vs Temperature Range(Temp)
figure(3)
plot(Temp,S,'linewidth',2,'color','b');
xlabel('Temperature [K]');
ylabel('Entropy in [KJ/(mol-K)]');
title(sprintf('Varying Entropy with Temperature Range of %s',Species_SP));
grid on
cd(['C:\Users\yadnyikee\Documents\MATLAB\File parsing\',Species_SP])
saveas(figure(1),'SpecificHeat.jpg');
saveas(figure(2),'Enthalpy.jpg');
saveas(figure(3),'Entropy.jpg');
cd('C:\Users\yadnyikee\Documents\MATLAB\')
%Molecular weight
M = Molecular_weight(Species_SP);
f2 = fopen('Molecular Mass','w');
fprintf('%s n %s n %f n','Species','Molecular Mass',M)
end
%Specific heat calculation function
function Cp = Specificheat(a1, a2, a3, a4, a5, a8, a9, a10, a11, a12, Temp, R, global_medium_temp)
%Comparing with global temperature
% If less than global temperature - minimun coefficients are taken
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));
%Else maximum coefficients are taken
end
%Enthalpy Calculation Function
function H = enthalpy_calc(a1, a2, a3, a4, a5, a6, a8, a9, a10, a11, a12, a13, Temp, R, global_medium_temp)
%Comparing with global temperature
% If less than global temperature - minimun coefficients are taken
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
%Else maximum coefficients are taken
H =R*Temp.*(a1+ ((a2*Temp)/2) + ((a3*(Temp).^2)/3) + ((a4*(Temp).^3)/4) + ((a5*(Temp).^4)/5) +(a6./Temp));
end
%Entropy Calculation function
function S = entropy_calc(a1,a2,a3,a4,a5,a7,a8,a9,a10,a11,a12,a14,Temp,R,global_medium_temp)
%Comparing with global temperature
% If less than global temperature - minimun coefficients are taken
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);
%Else maximum coefficients are taken
end
% Molecular Weight calculation function
function M= Molecular_weight(Species_SP)
% Standard - Atomic Weight
atomic_name = ['H','C','O','N','A'];
%Hydrogen, Carbon, Oxygen, Nitrogen, Argon
fprintf('Molecular Weight of ');
fprintf(Species_SP);
fprintf(':');
%Standard Atomic Number
atomic_weight = [1.088 12.011 15.999 14.007 39.948];
%Starting Range of Molecule
M = 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))
M = M + atomic_weight(j);
position = j;
end
end
n = str2num(Species_SP(i));
if n>1
M = M + atomic_weight(position)*(n-1);
end
end
%fprintf('molecular weight %s :',Species_SP);
%fprintf('%d',Molecularweight);
%disp(' ');
OUTPUT OBTAINED -











PLOTS FOR O2



PLOTS FOR N2



PLOTS FOR CO2



SCREENSHORTS OF THE FOLDER


ERRORS ENCOUNTERED -

Here there eas some error due to wrong spelling which was rectified easily.

Here there I found a problem regarding defining the variables and function due to which this error came.
PROCEDURE -
1.Here we started with clearing all data, this program is basically about file parsing which enables us to read data from external files and databases which can be included in our calculation.
'THERMO.dat' file is used as a input which has 53 elements in it.
2. 'fgetl' command is used to obtain temperature,'str2num' is used to convert string cells to numbers, also for slitting the temperature 'strsplit' is used.
3. Again 'fgetl' is used to skip three comments.
4.
for i = 1:53
gt=fgetl(f1);
A=strsplit(gt,' ');
Species_SP=(A{1})
line_1=fgetl(f1);
a=strfind(line_1,'E');
a1=line_1(1:a(1)+3);
a1=str2num(a1); %1
a2=line_1(a(1)+4:a(2)+3);
a2=str2num(a2); %2
a3=line_1(a(2)+4:a(3)+3);
a3=str2num(a3); %3
This logic is used to get the position of E ,refering to which we get whole element. Here a(1) indicates the position of E and plus three gives the entities to its right and to get second parameter i.e., the left side values we get by adding 4 to a(1). a(2)+3 gives the values to the right of E. This is the way we get whole parameters.
5. As explained above specific heat , enthalpy and entropy function are called in order to get plots.
Here plot command is used to to get various plot of thermodynamic properties with respect to temperature.
6. Function of molecular_weight is also involved to get weight of each element or compound.
REFERENCE-
1. Technical support engineer
2. Study video