Project 1 - Parsing NASA thermodynamic data
AIM OF CHALLENGE: To calculate the molecular weight of different species and to plot the cp,enthaly and entropy for the local temperature ranges for O2,N2 & CO2 by parsing the NASA thermodynamic data given to us.
File parsing in simple language means to split the data and various inputs into different pieces of data and storing it.
Definitions of ethalpy,entropy and speific heat:-
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's thermal energy for conversion into mechanical work, often interpreted as the degree of disorder or randomness in the system.
Specific heat- the heat required to raise the temperature of the unit mass of a given substance by a given amount (usually one degree).
Molecular weight- It can be defined as the weight of the given molecule.
Atomic mass- The atomic mass of an element is the average mass of the atoms of an element measured in atomic mass unit (amu, also known as daltons, D). The atomic mass is a weighted average of all of the isotopes of that element, in which the mass of each isotope is multiplied by the abundance of that particular isotope.
Now, we have been given 3 formulaes through which we have to find out specific heat(c_p), enthalpy(H) and entropy(S)
We know that the first 7 coefficients have to be taken high temp ranges and next 7 coefficients have to be taken low temp ranges.
In this case taking variable b, we hav [b1-b7=high temp coefficient & b8-b14=low temp coefficient] also, R=gas constant=8.314
We start with fopen command to open the file 'THERMO.dat'
Main Programe:-
close all
clear all
clc
f1=fopen('THERMO.dat','r');
%First reading header information
fgetl(f1);
%taking global temperatures into account
t_line=fgetl(f1);
a=strsplit(t_line,' ');
global_low_temp=str2double(a{2});
global_mid_temp=str2double(a{3});
global_high_temp=str2double(a{4});
%inorder to neglect the three lines
fgetl(f1);
fgetl(f1);
fgetl(f1);
for i=1:53
t_line2=fgetl(f1);
s=strsplit(t_line2,' ');
species_name=s{1};
A=strfind(t_line2,'G');
temp_values=t_line2(A+4:length(t_line2));
B=strsplit(temp_values,' ');
local_low_temp=str2double(B{1});
local_mid_temp=str2double(B{2});
local_high_temp=str2double(B{3});
t_line=fgetl(f1);
b=findstr(t_line,'E');
%1st coefficient
b1=t_line(1:b(1)+3);
b1=str2num(b1);
%2nd coefficient
b2=t_line(b(1)+4:b(2)+3);
b2=str2num(b2);
%3rd coeffiecient
b3=t_line(b(2)+4:b(3)+3);
b3=str2num(b3);
%4th coefficient
b4=t_line(b(3)+4:b(4)+3);
b4=str2num(b4);
%5th coefficient
b5=t_line(b(4)+4:b(5)+3);
b5=str2num(b5);
%line 2
line2=fgetl(f1);
%6th coefficient
b6=line2(1:b(1)+3);
b6=str2num(b6);
%7th coefficient
b7=line2(b(1)+4:b(2)+3);
b7=str2num(b7);
%8th coefficient
b8=line2(b(2)+4:b(3)+3);
b8=str2num(b8);
%9th coefficient
b9=line2(b(3)+4:b(4)+3);
b9=str2num(b9);
%10th coefficient
b10=line2(b(4)+4:b(5)+3);
b10=str2num(b10);
%line3
line3=fgetl(f1);
%11th coefficient
b11=line3(1:b(1)+3);
b11=str2num(b11);
%12th coefficient
b12=line3(b(1)+4:b(2)+3);
b12=str2num(b12);
%13th coefficient
b13=line3(b(2)+4:b(3)+3);
b13=str2num(b13);
%14th coefficient
b14=line3(b(3)+4:b(4)+3);
b14=str2num(b14);
%universal gas constant
R=8.314;
t=linspace(local_low_temp,local_high_temp,100);
%to calculate specific heat
c_p=specific_heat(b1,b2,b3,b4,b5,b8,b9,b10,b11,b12,local_mid_temp,t,R);
%to calculate enthalpy
H=enthalpy(b1,b2,b3,b4,b5,b6,b8,b9,b10,b11,b12,b13,local_mid_temp,t,R);
%to calculate entropy
S=entropy(b1,b2,b3,b4,b5,b7,b8,b9,b10,b11,b12,b14,local_mid_temp,t,R);
%creating a folder
mkdir(species_name)
cd(species_name)
%plotting for
%temp vs specific heat
figure(1)
plot(t,c_p)
xlabel('temperature')
ylabel('specific heat')
title('temperature vs specific heat')
image=getframe(gcf);
imwrite(image.cdata,'t vs cp.png')
saveas(1,'specific heat','jpg')
%temperature vs enthalpy
figure(2)
plot(t,H)
xlabel('temperature')
ylabel('enthalpy')
title('temperature vs enthalpy')
image=getframe(gcf);
imwrite(image.cdata,'t vs H.png')
saveas(1,'specific heat','jpg')
%temperature vs entropy
figure(3)
plot(t,S)
xlabel('temperature')
ylabel('entropy')
title('temperature vs entropy')
image=getframe(gcf);
imwrite(image.cdata,'t vs S.png')
saveas(1,'specific heat','jpg')
cd ..
%calculating molecular weight
[M]=molecular_weight(species_name);
K=sprintf('%s molecular_weight=%f', species_name, M);
disp(K)
end
Function for specific heat:-
%For Specific Heat
function [c_p]=specific_heat(b1,b2,b3,b4,b5,b8,b9,b10,b11,b12,local_mid_temp,t,R)
if(t>local_mid_temp)
c_p=R*(b1+(b2.*t)+(b3.*(t.^2))+(b4.*(t.^3))+(b5.*(t.^4)));
else
c_p=R*(b8+(b9.*t)+(b10.*(t.^2))+(b11.*(t.^3))+(b12.*(t.^4)));
end
Function for enthalpy:-
%for enthalpy
function [H] = enthalpy(b1,b2,b3,b4,b5,b6,b8,b9,b10,b11,b12,b13,local_mid_temp,t,R)
if(t>local_mid_temp)
H=(b1+((b2.*t)/2)+((b3.*(t.^2))/3)+((b4.*(t.^3))/4)+((b5.*(t.^4))/5)+(b6./t)).*t*R;
else
H=(b8+((b9.*t)/2)+((b10.*(t.^2))/3)+((b11.*(t.^3))/4)+((b12.*(t.^4))/5)+(b13./t)).*t*R;
end
Function for entropy:-
%for entropy
function[S] = entropy(b1,b2,b3,b4,b5,b7,b8,b9,b10,b11,b12,b14,local_mid_temp,t,R)
if (t>local_mid_temp)
S=((b1.*logt)+(b2.*t)+((b3.*(t.^2))/2)+((b4.*(t.^3))/3)+(b5.*(t.^4))+b7);
else
S=((b8.*log(t))+(b9.*t)+((b10.*(t.^2))/2)+((b11.*(t.^3))/3)+(b12.*(t.^4))+b14)*R;
end
Function for molecular weight:-
%for molecular weight
function [M]=molecular_weight(species_name)
atomic_mass=[15.999,1.008,12.011,14.007,39.948];
elements=['O','H','C','N','A'];
molecular_weight=0;
for i=1:length(species_name)
for j=1:length(elements)
if strcmpi(species_name(i),elements(j))
molecular_weight=molecular_weight+atomic_mass(j);
z=j;
end
end
t=str2double(species_name(i));
if (t>1)
molecular_weight=molecular_weight+(atomic_mass(z)*(t-1));
end
end
[M]=molecular_weight