Project 1 - Parsing NASA thermodynamic data
AIM:- Write a code in Matlab to parse the NASA thermodynamic data file and then calculate thermodynamic properties of various gas species.
OBJECTIVE:-
-Write a function that extracts the 14 coefficients and calculates the Entropy,Enthalpy and Specific Heat for all species in the data file.
-Calculate the Molecular weight of each species and display it in the command window.
-Plot the Cp,Enthalpy and Entropy for the local temperature range.
-Save the plots as images with approprite names and dump them in separate folders for each species with suitable name. All these should be generated automatically.
-The main program that you will submit will just take the ''THERMO.dat'' file as input and generate Cp,H and S plots.
-Schreenshot of the window where all the folders are saved.
-plots for N2 and Co2 species.
NASA Thermodynamic File:-
NASA thermodynamics file which is THERMO.dat file in which there are temperature range and 53 species are given in these data and each species contains 14 coefficients and temperature ranges and we have to parse these 14 coefficients to find specific heat,Entropy and Enthalpy using formula as :-
Where,
R=Universal Gas constant
T=Temperature
Cp=Specific Heat(KJ)
H= Enthalpy(KJ/mol-K)
S=Entropy(KJ/mol-K)
a(i)=Coefficients where, i=1 to 14
Specific Heat:-
The specific heat is the amount heat per unit mass required to rise the temperature by one digree Celcious. The relationship between heat and temperature change is usually expressed in the form shown below .
Cp = R*(a1+(a2*T)+(a3*(T).^2)+(a4*(
Entropy:-
The measure of a system's thermal energy per unit temperature that is unavailable for doing usuful work. Beacuse work is obtained from ordered molecular motion,the amount of entropy is also a measure of the molecular disorder.
S = R*(a1.*log(T)+(a2*T)+((a3*(T).
Enthalpy:-
A property of a thermodynamic system, is equal to the system's internal energy plus the product of its pressure and volume.In a system contained so as to prevent mass transfer, for prcesses at constant pressure, the heat absorbed.
H = R*T*(a1+((a2*T)/2)+((a3*(T).^
MATLAB CODE:-
close all
clear all
clc
% Input
R = 8.314 % Gas Constant
% Reading data file
% Open file and reading THERMO.dat file
f1 = fopen('THERMO.dat','r')
get = fgetl(f1);
% Now Reading Temperature from this file
temp = fgetl(f1)
% Spliting
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 comments 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});
% Converting string to number
lowtemp = str2num(A{end-3});
midtemp = str2num(A{end-2});
hightemp = str2num(A{end-1});
tline1 = fgetl(f1);
a = strfind(tline1,'E');
% Finding Frist 7 higher and Second lower coefficients
% Finding Higher 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 = tline1(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 = tline1(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);
% Calculat specific heat
Cp = Specific_heat(a1,a2,a3,a4,a5,a8,a9,a10,a11,a12,T,R,tempmid);
% Calculat Entropy
S = Entropy(a1,a2,a3,a4,a5,a7,a8,a9,a10,a11,a12,a14,T,R,tempmid);
% Calculat Enthalpy
H = Enthalpy(a1,a2,a3,a4,a5,a6,a8,a9,a10,a11,a12,a13,T,R,tempmid);
% Calculat Molecular weight of the species
W = Molecular_weight(species);
% writing 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
% Saving in a folder
mkdir(species)
cd(species)
% plot 1 Cp vs T
figure(1)
plot(T,Cp,'LineWidth',2,'Color','b');
xlabel('Temperature(K)');
ylabel('Specific Heat(KJ)');
title(sprintf('Specific heat vs Temperature range of %s',species))
grid on
saveas(figure(1),'Specicfic Heat.jpg');
% plot 2 S vs T
figure(2)
plot(T,S,'LineWidth',2,'Color','r');
xlabel('Temperature(K)');
ylabel('Entropy(KJ/mol-K)');
title(sprintf('Entropy vs Temperature range of %s',species))
grid on
saveas(figure(2),'Entropy.jpg');
% plot 3 Cp vs T
figure(3)
plot(T,H,'LineWidth',2,'Color','g');
xlabel('Temperature(K)');
ylabel('Enthalpy(KJ/mol)');
title(sprintf('Enthalpy vs Temperature range of %s',species))
grid on
saveas(figure(3),'Enthalpy.jpg');
cd ..
% Molecular weight
W = Molecular_weight(species)
end
Function to find specific heat:-
function Cp = Specific_heat(a1,a2,a3,a4,a5,a8,a9,a10,a11,a12,T,R,tempmid)
% calculating specific heat
% calculating specific heat for higher and lower temperature respectively
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
end
FUNCTION TO FIND ENTROPY;-
function S = Entropy(a1,a2,a3,a4,a5,a7,a8,a9,a10,a11,a12,a14,T,R,tempmid)
% calculating entropy
% calculating entropy for higher and lower temperature respectively
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) + a7);
end
end
FUNCTION TO FIND ENTHALPY:-
function H = Enthalpy(a1,a2,a3,a4,a5,a6,a8,a9,a10,a11,a12,a13,T,R,tempmid)
% calculating enthalpy
% calculating specific heat for higher and lower temperature respectively
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
end
FUNCTION TO FIND MOLECULAR WEIGHT OF DIFFRENT SPECIES;-
function W = Molecular_weight(species)
% Defining Atomic name of the species
atomic_name = ['H','C','O','N','Ar'];
% Defining Atomic masses of main species
atomic_weight = [1.008 12.011 15.999 14.007 39.948];
% Molecular weight starting range
W=0;
for i=1:length(species)
for j=1:length(atomic_name)
if 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
fprintf('Molecular Weight of %s-%f',species ,W);
disp(' ')
ERRORS:-The error is faced invalid syntax i have assigned
the errors are in below




