Project 1 - Parsing NASA thermodynamic data
Aim:Write a matlab code to parse nasa thermodyamic file of various gas species.
1. 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.
Here R is the universal gas constant, T is the temeprature
The FIRST 7 coefficients are HIGH-temperature coefficients and the SECOND 7 coefficients are LOW-temperature coefficients.
Also use the LOCAL TEMPERATURE RANGES which is unique for each individual species, not the GLOBAL TEMPERATURE RANGE.
2. Calculate the molecular weight of each species and display it in the command window.
3. Plot the Cp, Enthalpy and Entropy for the local temperature range (low temperature : high temperature) specific for each species.
4. Save the plots as images with appropriate names and dump them in separate folders for each species with suitable name. All these should be generated automatically.
5. The main program that you will submit will just take the "THERMO.dat" file as an input and generate Cp, H and S plots.
6. Please write a detailed report to describe your logic.
Theory:
Parsing: Parsing a file means reading in a data stream and building a memory model of the content of that data. ... Parsing splits a file or other input into pieces of data that can be easily stored or manipulated
Main code:
clear all
close all
clc
%input
R=8.314;%Gas constant
%open file and reading THERMO.dat file
f1 = fopen('THERMO.dat','r');
get = fgetl(f1);
%Now Reading Temperature from this file
temp = fgetl(f1);
s = strsplit(temp);
%converting strings cells into numbers
templow = str2num(s{2});
tempmid = str2num(s{3});
temphigh = str2num(s{4});
%temperature range
T = linspace(templow,temphigh,1000);
%skipping comment lines
for i= 1:3
get=fgetl(f1);
end
%Reading the species
for j=1:53
tline=fgetl(f1);
A=strsplit(tline,'');
species = (A{1});
tline1 = fgetl(f1);
a = strfind(tline1,'E');
%Finding First 7 higher and second 7 lower coefficients
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);
b=strfind(tline2,'E');
a6 = tline2(1:b(1)+3);
a6=str2num(a6);
a7 = tline2(b(1)+4:b(2)+3);
a7 = str2num(a7);
%Finding Lower coefficients
a8 = tline2(b(2)+4:b(3)+3);
a8 = str2num(a8);
a9 = tline2(b(3)+4:b(4)+3);
a9 = str2num(a9);
a10 = tline2(b(4)+4:b(5)+3);
a10 = str2num(a10);
tline3 = fgetl(f1);
c = strfind(tline3,'E');
a11 = tline3(1:c(1)+3);
a11 = str2num(a11);
a12 = tline3(c(1)+4:c(2)+3);
a12 = str2num(a12);
a13 = tline3(c(2)+4:c(3)+3);
a13 = str2num(a13);
a14 = tline3(c(3)+4:c(4)+3);
a14 = str2num(a14);
%calculate specific heat
Cp = specific_heat(a1,a2,a3,a4,a5,a8,a9,a10,a11,a12,T,R,tempmid);
%calculate Entropy
S = Entropy(a1,a2,a3,a4,a5,a7,a8,a9,a10,a11,a12,a14,T,R,tempmid);
%calculate enthalpy
H = Enthalpy(a1,a2,a3,a4,a5,a6,a8,a9,a10,a11,a12,a13,T,R,tempmid);
%calculate molecular weight of species
w = Molecular_weight(species);
%wrting molecular weight file
MW_file = fopen('Molecular Weight.txt','w');
fprintf(MW_file,'Molecular weight of %s is %d',species, w);
fclose(MW_file);
%plotting Cp, H and S with temperature
cd('C:/Users/Ayush/Desktop/skill lync/species')
mkdir(species);
cd(species);
%plot 1 Cpvs T
figure(1)
plot(T,Cp,'linewidth',2,'color','b');
xlabel('Temperature(K)');
ylabel('Specific Heat(KJ)');
saveas(figure(1),'Specific Heat.jpg');
%plot 2 S vs T
figure(2)
plot(T,S,'linewidth',2,'color','r');
xlabel('temperature');
ylabel('Entropy(KJ/mol-k)');
saveas(figure(2),'Entropy.jpg');
%plot 3 Cp vs T
figure(3)
plot(T,H,'linewidth',2,'color','g');
xlabel('temperature');
ylabel('Enthalpy(KJ/mol)');
saveas(figure(3),'Enthalpy.jpg');
cd('C:/Users/Ayush/Desktop/skill lync')
%Molecular weigth
W = Molecular_weight(species);
end
Code for Specific_heat
function Cp = specific_heat(a1,a2,a3,a4,a5,a8,a9,a10,a11,a12,T,R,tempmid)
if(T <=tempmid)
Cp = R*(a8+(a9*T)+(a10*(T).^2)+(a11*(T).^3)+(a12*(T).^4));
else
Cp = R*(a1+(a2*T)+(a3*(T).^2)+(a4*(T).^3)+(a5*(T).^4));
end
Code for Entropy:
function S = Entropy(a1,a2,a3,a4,a5,a7,a8,a9,a10,a11,a12,a14,T,R,tempmid)
if(T <=tempmid)
S = R*(a8.*log(T)+(a9*T)+((a10*(T).^2)/2)+((a11*(T).^3)/3)+((a12*(T).^4)/4)+a14);
else
S = R*(a1.*log(T)+(a2*T)+((a3*(T).^2)/2)+((a4*(T).^3)/3)+((a5*(T).^4)/4)+a14);
end
Code for Enthaply
function H = Enthalpy(a1,a2,a3,a4,a5,a6,a8,a9,a10,a11,a12,a13,T,R,tempmid)
if(T <= tempmid)
H=R*T.*(a8+((a9*T)/2)+((a10*(T).^2)/3)+((a11*(T).^3)/4)+((a12*(T).^4)/5)+((a13./T)));
else
H=R*T.*(a1+((a2*T)/2)+((a3*(T).^2)/3)+((a4*(T).^3)/4)+((a5*(T).^4)/5)+((a6./T)));
end
Code for Molecular weight:
function W = Molecular_weight(species)
atomic_name=['H','C','O','N','Ar'];
atomic_weight=[1.008 12.011 15.99 14.007 39.948];
W=0;
for i=1:length(species)
for j=1:length(atomic_name)
if strcmp(species(i),atomic_name(j))
W = W+atomic_weight(j);
position = j;
end
end
n=str2num(species);
if n>1
W=W+atomic_weight(position)*(n-1);
end
end
Results:
Plot of O2
Enthalpy

Entropy
Specific heat

Plot of N2
Enthalpy:

Entropy:

Specific heat:

Plot of CO2



- Screenshot of the window where all the folders are saved.
