Project 1 - Parsing NASA thermodynamic data
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. You will be reading this file NASA thermodynamic data
EQUATIONS:
The equations that we are going to use in the Functions to calculate cp, H,S are:
cpR=a1+a2T+a3T2+a4T3+a5T4">cpR=a1+a2T+a3T2+a4T3+a5T4cpR=a1+a2T+a3T2+a4T3+a5T4
HRT=a1+a2T2+a3T23+a4T34+a5T45+a6T">HRT=a1+a2T2+a3T23+a4T34+a5T45+a6THRT=a1+a2T2+a3T23+a4T34+a5T45+a6T
SR=a1lnT+a2T+a3T22+a4T33+a5T44+a7">SR=a1lnT+a2T+a3T22+a4T33+a5T44+a7SR=a1lnT+a2T+a3T22+a4T33+a5T44+a7
Where,
Cp=specific heat
R =molar gas constant
T=temperature
S=Entropy
H=Enthalpy
a=coefficients
BODY OF THE CONTENT:
Code for calling function Specific_heat( ):
function Cp = Specific_heat(a1,a2,a3,a4,a5,a8,a9,a10,a11,a12,T,R,global_midtemp)
%calculating specific_heat for higher and lower temperature respectively
if(T>= global_midtemp)
Cp=R*(a1+(a2*T)+(a3*(T).^2)+(a4*(T).^3)+(a5*(T).^4));
else
Cp=R*(a8+(a9*T)+(a10*(T).^2)+(a11*(T).^3)+(a12*(T).^4));
end
end
Code for calling function Enthalpy( ):
function H = Enthalpy(a1,a2,a3,a4,a5,a6,a8,a9,a10,a11,a12,a13,T,R,global_midtemp)
%calculating enthalpy for higher and lower temperature respectively
if(T>=global_midtemp)
H=R*((a1*T)+((a2*(T).^2)/2)+((a3*(T).^3)/3)+((a4*(T).^4)/4)+((a5*(T).^5)/5)+a6);
else
H=R*((a8*T)+((a9*(T).^2)/2)+((a10*(T).^3)/3)+((a11*(T).^4)/4)+((a12*(T).^5)/5)+a13);
end
end
Code for calling function Entropy( ):
function S=Entropy(a1,a2,a3,a4,a5,a7,a8,a9,a10,a11,a12,a14,T,R,global_midtemp)
%calculating entropy for higher and lower temperature respectively
if(T>= global_midtemp)
S=R*(a1.*log(T)+(a2*T)+((a3*(T).^2)/2)+((a4*(T).^3)/3)+((a5*(T).^4)/5)+a7);
else
S=R*(a8.*log(T)+(a9*T)+((a10*(T).^2)/2)+((a11*(T).^3)/3)+((a12*(T).^4)/4));
end
end
Code for calculating molecular weight by calling function wt( ):
function Molecular_weight=wt(species_name)
Elements=['H' 'C' 'O' 'N' 'A' 'S'];
Atomic_weight =[1 12 16 14 40 32];
species=upper(species_name)
Molecular_weight=0;
for i=1:length(species)
for j=1:length(Elements)
if strcmp(species(i),Elements(j))
Molecular_weight=Molecular_weight+Atomic_weight(j);
k=j;
else
n=str2double(species(i));
if (n>1)
Molecular_weight=Molecular_weight+Atomic_weight(k)*(n-1);
break
end
end
end
end
end
clear all
close all
clc
%R=molar gas constant
R=8.314;
%syntax to open the file THERMO.dat
f1=fopen('THERMO.dat','r')
%To read lines
l1=fgetl(f1);
l2=fgetl(f1);
value=strsplit(l2,' ');
%To get global temperatures from file in number form
global_lowtemp=str2num(value{2})
global_midtemp=str2num(value{3})
global_hightemp=str2num(value{4})
%temperature range
T=linspace(global_lowtemp,global_hightemp,1000);
%skipping these 3 lines
l3=fgetl(f1);
l4=fgetl(f1);
l5=fgetl(f1);
%Reading species ,calcuating cp,h,s and plotting
for i=1:53
tline=fgetl(f1);
A=strsplit(tline,' ');
name_of_species=(A{1});
lowtemp= str2num(A{end-3});
midtemp=str2num(A{end-2});
hightemp=str2num(A{end-1});
%Finding 7 higher coefficients and 7 lower coefficients
tline1=fgetl(f1);
a=findstr(tline1,'E');
a1=tline1(1:a(1)+3);
a1=str2num(a1);
a2=tline1(a(1)+4:a(2)+3);
a2=str2num(a2);
a3=tline1(a(2)+4:a(3)+3);
a3=str2num(a3);
a4=tline1(a(3)+4:a(4)+3);
a4=str2num(a4);
a5=tline1(a(4)+4:a(5)+3);
a5=str2num(a5);
tline2=fgetl(f1);
a=findstr(tline2,'E');
a6=tline2(1:a(1)+3);
a6=str2num(a6);
a7=tline2(a(1)+4:a(2)+3);
a7=str2num(a7);
a8=tline2(a(2)+4:a(3)+3);
a8=str2num(a8);
a9=tline2(a(3)+4:a(4)+3);
a9=str2num(a9);
a10=tline2(a(4)+4:a(5)+3);
a10=str2num(a10);
tline3=fgetl(f1);
a=findstr(tline3,'E');
a11=tline3(1:a(1)+3);
a11=str2num(a11);
a12=tline3(a(1)+4:a(2)+3);
a12=str2num(a12);
a13=tline3(a(2)+4:a(3)+3);
a13=str2num(a13);
a14=tline3(a(3)+4:a(4)+3);
a14=str2num(a14);
%calculate specific heat(cp),Enthalpy(H),Entropy(S)
Cp=Specific_heat(a1,a2,a3,a4,a5,a8,a9,a10,a11,a12,T,R,global_midtemp);
H=Enthalpy(a1,a2,a3,a4,a5,a6,a8,a9,a10,a11,a12,a13,T,R,global_midtemp);
S=Entropy(a1,a2,a3,a4,a5,a7,a8,a9,a10,a11,a12,a14,T,R,global_midtemp);
%calculating molecular weight and printing it.
Molecular_weight=wt(name_of_species);
fprintf('molecular weight of %s= %f\n',name_of_species,Molecular_weight);
%PLOTTING CP,H,T
cd('C:\Users\hhh\Desktop\matlab\NASA FILES')
%creating the folder
mkdir(name_of_species);
cd(name_of_species);
%plotting T vs cp
figure(1)
plot(T,Cp,'linewidth',5,'color','r')
xlabel('Temperature(T)')
ylabel('Specific heat(cp)')
grid on
title(name_of_species)
saveas(figure(1),'specific heat.jpg');
%Plotting T vs H
figure(2)
plot(T,H,'linewidth',5,'color','b')
xlabel('Temperature(T)')
ylabel('Enthalpy(H)')
grid on
title(name_of_species)
saveas(figure(2),'Enthalpy.jpg');
%Plotting T vs S
figure(3)
plot(T,S,'linewidth',5,'color','y')
xlabel('Temperature(T)')
ylabel('Entropy(S)')
grid on
title(name_of_species)
saveas(figure(3),'Entropy.jpg');
cd('C:\Users\hhh\Documents\MATLAB\nasa files')
end
Calculate the molecular weight of each species and display it in the command window.













>> nasa_thermo
f1 =
15
global_lowtemp =
300
global_midtemp =
1000
global_hightemp =
5000
species =
'O'
molecular weight of O= 16.000000
species =
'O2'
molecular weight of O2= 32.000000
species =
'H'
molecular weight of H= 1.000000
species =
'H2'
molecular weight of H2= 2.000000
species =
'OH'
molecular weight of OH= 17.000000
species =
'H2O'
molecular weight of H2O= 18.000000
species =
'HO2'
molecular weight of HO2= 33.000000
species =
'H2O2'
molecular weight of H2O2= 34.000000
species =
'C'
molecular weight of C= 12.000000
species =
'CH'
molecular weight of CH= 13.000000
species =
'CH2'
molecular weight of CH2= 14.000000
species =
'CH2(S)'
molecular weight of CH2(S)= 46.000000
species =
'CH3'
molecular weight of CH3= 15.000000
species =
'CH4'
molecular weight of CH4= 16.000000
species =
'CO'
molecular weight of CO= 28.000000
species =
'CO2'
molecular weight of CO2= 44.000000
species =
'HCO'
molecular weight of HCO= 29.000000
species =
'CH2O'
molecular weight of CH2O= 30.000000
species =
'CH2OH'
molecular weight of CH2OH= 31.000000
species =
'CH3O'
molecular weight of CH3O= 31.000000
species =
'CH3OH'
molecular weight of CH3OH= 32.000000
species =
'C2H'
molecular weight of C2H= 25.000000
species =
'C2H2'
molecular weight of C2H2= 26.000000
species =
'C2H3'
molecular weight of C2H3= 27.000000
species =
'C2H4'
molecular weight of C2H4= 28.000000
species =
'C2H5'
molecular weight of C2H5= 29.000000
species =
'C2H6'
molecular weight of C2H6= 30.000000
species =
'CH2CO'
molecular weight of CH2CO= 42.000000
species =
'HCCO'
molecular weight of HCCO= 41.000000
species =
'HCCOH'
molecular weight of HCCOH= 42.000000
species =
'H2CN'
molecular weight of H2CN= 28.000000
species =
'HCN'
molecular weight of HCN= 27.000000
species =
'HNO'
molecular weight of HNO= 31.000000
species =
'N'
molecular weight of N= 14.000000
species =
'NNH'
molecular weight of NNH= 29.000000
species =
'N2O'
molecular weight of N2O= 44.000000
species =
'NH'
molecular weight of NH= 15.000000
species =
'NH2'
molecular weight of NH2= 16.000000
species =
'NH3'
molecular weight of NH3= 17.000000
species =
'NO'
molecular weight of NO= 30.000000
species =
'NO2'
molecular weight of NO2= 46.000000
species =
'HCNO'
molecular weight of HCNO= 43.000000
species =
'HOCN'
molecular weight of HOCN= 43.000000
species =
'HNCO'
molecular weight of HNCO= 43.000000
species =
'NCO'
molecular weight of NCO= 42.000000
species =
'CN'
molecular weight of CN= 26.000000
species =
'HCNN'
molecular weight of HCNN= 41.000000
species =
'N2'
molecular weight of N2= 28.000000
species =
'AR'
molecular weight of AR= 40.000000
species =
'C3H8'
molecular weight of C3H8= 44.000000
species =
'C3H7'
molecular weight of C3H7= 43.000000
species =
'CH3CHO'
molecular weight of CH3CHO= 44.000000
species =
'CH2CHO'
molecular weight of CH2CHO= 43.000000
Explanation for code:
- Initially the value of ‘R’ is being defined.
- Then we use a command to open the file ‘THERMO.dat’ .
- Further we use the ‘fgetl’ to start reading the lines and after reading the first two lines, from the second line converting the strings to numbers and assigning global (low,mid and high) temperatures.
- Then we have written a command to get the temperature range for calculation and plotting purpose.
- Then again using the fgetl command to go to thel next 3 lines and skipping it.
- Then we use a for loop to get 53 species and their temperatures (low, mid, high) and the 14 coefficients.
- In the for loop we again use the fgetl command and then the next line is read and from that line the species name, the three local temperatures are read and stored.
- Then we use fgetl command to go to further line and get the first 7 coefficients and store them. Similarly using the fgetl command we move to the next two lines and get the remaining coefficients.
- Then after getting the 14 coefficients, we use these coefficients and by calling the functions we calculate cp,H,S.
- Further we use the Molecular weight function and calculate molecular weight for that species.
- Further I have used a command to change the directory so that I can save the files at a particular location.After changing the directory I have used ‘mkdir' to create a new folder with the name of the current species and then a ‘cd’ command to make mkdir as the current directory.
- Then further we use plot command to plot temperature vs (cp,enthalpy,entropy) .
- In this plotting we use the figure command to get the three different plots and saveas command to save the figures in the
- Then again we change our directory to again start the loop. So the loop continues to function till we get all the 53 species and then gets terminated.
Errors





Plots for o2, N2 and Co2 species
Example of O2 for Plotting
Specific heat Vs Temp

Enthalpy vs Temp

Entropy vs Temp

Example of N2 for Plotting
Specific heat Vs Temp

Entropy vs Temp

Enthalpy vs Temp

Example of Co2 for Plotting
Specific heat Vs Temp

Enthalpy vs Temp

Entropy vs Temp

Coding

Screenshots of folder
