Project 1 - Parsing NASA thermodynamic data
AIM:-
To parse the NASA thermodynamic data and to calculate the molecular weight of the species and to plot the cp,enthalpy,entropy for the local temperature range for o2,n2,co2.
Theory:-
Definitons:-
File parsing:parsing a file means to spilt a file or other input into pieces of data that can easily stored or manipulated.so we are splitting a string into parts then recognizing the parts to convert it into something simpler than a string.
Enthalpy:A thermodynamic quantity equivalent to the total heat content of a system.it is equal to the internal energy of the system plus the product of pressure and volume.
Entropy:A thermodynamic quantity representing the unavailability of a system thernal energy for conversion into mechanical work,often interpreted as the degree of disorder of randomness in the system.
Specific heat:It is the amount of heat per unit mass required to raise the temperature by one degree celsius.
Molecular weight:Molecular weight is the weight of a given molecule.
Atomic mass:The mass of an atom of a chemical expressed in atomic mass units.it is approximately equivalent to the number of protons and neutrons in the atom or to the average number allowing for the relative abundances of different isotopes.
Equations:
cpR=a1+a2T+a3T2+a4T3+a5T4
hRT=a1+a2T2+a3T23+a4T34+a5T45+a6Tℎ
sR=a1lnT+a2T+a3T22+a4T33+a5T44+a7 where,
cp=specific heat
R=universal gas constant
h=enthalpy
s=entropy
T=temperature
CODING LOGIC :-
function [M]= molecular_weight(species_name)
Atomic_mass=[15.999,1.008,12.011,14.007,39.948];
Elements=['O','H','C','N','A'];
Mol_wt=0;
for i=1:length(species_name)
for j=1:length(Elements)
if strcmpi(species_name(i),Elements(j))
Mol_wt= Mol_wt+Atomic_mass(j);
z=j;
end
end
var=str2double(species_name(i));
if (var>1)
Mol_wt=Mol_wt+(Atomic_mass(z)*(var-1));
end
end
M=Mol_wt;
end
main coding:
% Nasa thermodynamic file parsing
close all
clear all
clc
% gas constant
R=8.314;
%reading first two lines
f1=fopen('THERMO.dat','r')
tline1=fgetl(f1)
tline2=fgetl(f1)
temp=strsplit(tline2,' ')
global_low_temp=str2num(temp{2})
global_mid_temp=str2num(temp{3})
global_high_temp=str2num(temp{4})
%skipping next threee lines
for i=1:3
skippedlines=fgetl(f1);
end
for i=1:53
tline3=fgetl(f1)
S=strsplit(tline3,' ');
species_name= S{1};
A=strfind(tline3,'G');
temp_values=tline3(A+4:length(tline3));
B=strsplit(temp_values,' ');
local_low_temp=str2double(B{1});
local_mid_temp=str2double(B{3});
local_high_temp=str2double(B{2});
tline4=fgetl(f1)
f=strfind(tline4,'E');
a1=str2double(tline4(1:(f(1)+3)));
a2=str2double(tline4(f(1)+4:(f(2)+3)));
a3=str2double(tline4(f(2)+4:(f(3)+3)));
a4=str2double(tline4(f(3)+4:(f(4)+3)));
a5=str2double(tline4(f(4)+4:(f(5)+3)));
tline5=fgetl(f1);
a6=str2double(tline5(1:(f(1)+3)));
a7=str2double(tline5(f(1)+4:(f(2)+3)));
a8=str2double(tline5(f(2)+4:(f(3)+3)));
a9=str2double(tline5(f(3)+4:(f(4)+3)));
a10=str2double(tline5(f(4)+4:(f(5)+3)));
tline6=fgetl(f1);
a11=str2double(tline6(1:(f(1)+3)));
a12=str2double(tline6(f(1)+4:(f(2)+3)));
a13=str2double(tline6(f(2)+4:(f(3)+3)));
a14=str2double(tline6(f(3)+4:(f(4)+3)));
T=linspace(local_low_temp,local_high_temp,100)
C_p=R*specific_heat_calc(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,local_low_temp,local_mid_temp,local_high_temp,T)
s=R*entropy_calc(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,local_low_temp,local_mid_temp,local_high_temp,T)
h=R*enthalpy_cal(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,local_low_temp,local_mid_temp,local_high_temp,T)
req_species=["O2","N2","CO2"];
if(species_name==req_species(1))||(species_name==req_species(2))||(species_name==req_species(3))
mkdir(species_name);
cd(species_name)
figure(1)
plot(T,C_p)
title('specific heat vs temperature')
xlabel('temperature')
ylabel('specific heat')
image=getframe(gcf);
imwrite(image.cdata,'cp vs T.png')
saveas(1,'specific_heat','jpg')
figure(2)
plot(T,h)
title('enthalpy vs temperature')
xlabel('temperature')
ylabel('enthalpy')
image=getframe(gcf);
imwrite(image.cdata,'h vs T.png')
saveas(2,'enthalpy','jpg')
figure(3)
plot(T,s)
title('entropy vs temperature')
xlabel('temperature')
ylabel('entropy')
image=getframe(gcf);
imwrite(image.cdata,'s vs T.png')
saveas(3,'entropy','jpg')
cd ..
end
molecular_wt=molecular_weight(species_name);
K=sprintf('%s Mol_wt = %f',species_name,molecular_wt);
disp(K)
end
RESULTS :-
Molecular weight of O2=31.9980
Molecular weight of N2=28.0140
Molecular weight of Co2=44.0090