Challenge

Project 1 - Parsing NASA thermodynamic data

Aim: To write a code in Matlab to parse the NASA Thermodynamic data file and then calculate the Thermodynamic properties of various gas species.

Objective :

a.To write a function that extract the 14 coefficient and calculate the enthalpy,entropy and specific heat in the Nasa thermodynamic datafile "Thermo.dat".

b.To calculate the molecular weight of eachspecies and display it in the command window

c.To plot the Cp,enthaly and entropy for the local temperature range(low temperature,high temperature)specific for each species.

d.To save the plot as image with appropriate name and dump them in separate folder for each species with suitable name automatically.

e.To calculate the molecular weight of eachspecies and display it in the command window

f.To plot the Cp,enthaly and entropy for the local temperature range(low temperature,high temperature)specific for each species.

g.To save the plot as image with appropriate name and dump them in separate folder for each species with suitable name automatically.

File Parsing:

File parsing refers to how information can be read from a particular text file or any type of file and how that information can be used in a computer program.

Step 1 - Define the function

Step 2 - Create an InputParser object

Step3 - Add inputs to the scheme.

Step 4 - Set properties to adjust parsing.

Step 5 - Parse the inputs.

Step 6- Use the inputs in function.

Step 7 - Calling function.

NASA Thermodynamic File

THERMO.dat file is a data file containing 14 coefficients for 53 different elements given by NASA. These coefficients are utilized to calculate the specific heat, enthalpy & entropy for a particular element. Each element has its own range of local temperature. Below screenshot of the THERMO.dat file is displayed.

Enthalpy, Entropy, and Specific Heat:

Enthalpy, entropy, and specific heat, of various species values at different temperatures are required extensively to analyze the

thermodynamic process

For example, if the combustion process is considered during this, these quantities are required to observe how the combustion is going on and how efficient it will be. It eventually allows seeking the scope of improvement in the process. Similarly in the other processes refrigeration, air conditioning, chemical kinetics, nozzle flow, detonation process, etc, these quantities are widely involved to observe the phenomenon.

NASA came up with polynomials that can be used to evaluate thermodynamic properties such as Cp, H, and S. They have documented the

coefficients that are required to evaluate these polynomials for 1000 species.

The NASA polynomials have the form:

Cp/R al-a2 T a3 T^2+a4 T^3 a5 T^4.

H/RT-al-a2 T/2-a3 T2/3-a4 T 34 a5 T 4/5-a6/T

S/R al InT a2 Ta3 T^2/2a4 T23/3-a5 T 4/4-a7

Where R is the universal gas constant, T is the temperature and al, a2, a3, a4, a5, a6, and a7 are the numerical coefficients supplied in the thermodynamic file. The FIRST 7 coefficients are HIGH-temperature coefficients (above 1000 K) and the SECOND 7 coefficients are LOW temperature coefficients (below 1000 K).

Specific heat code:-

%Specific heat calculation function
function Cp = Specificheat(a1,a2,a3,a4,a5,a8,a9,a10,a11,a12,Temp,R,global_medium_temp)
% comparing with global medium temp
% If less than global tmeperature - minimum coefficient are taken
if Temp <=global_medium_temp
Cp = R*(a8 +(a9*Temp)+(a10*(Temp).^2)+(a11*(Temp).^3)+(a12*(Temp).^4));
else
Cp = R*(a1 +(a2*Temp)+(a3*(Temp).^2)+(a4*(Temp).^3)+(a5*(Temp).^4));
%Else maximum coefficient are taken
end

Entropy code:-

% Entropy Calculation function
function S = Entropy_calc(a1,a2,a3,a4,a5,a7,a8,a9,a10,a11,a12,a14,Temp,R,global_medium_temp)
%calculating with global temperature
%If less than global temperature - minimum coefficient are taken
if Temp <= global_medium_temp
S= R.*(a8.*log(Temp) + (a9.*Temp)+(a10*((Temp).^2)/2) +(a11*((Temp).^3)/3) + (a12*((Temp).^4)/4) + a14);
else
% Else - minimum coefficient are taken
S = R.*(a1.*log(Temp) + (a2.*Temp) + (a3*((Temp).^2)/2) + (a4*((Temp).^3)/3) + (a5*((Temp).^4)/4) + a7);
end
end

Enthalpy code

% Enthalpy Calculation function
function H = Enthalpy(a1,a2,a3,a4,a5,a6,a8,a9,a10,a11,a12,a13,Temp,R,global_medium_temp)
% comparing with global temperature
%If less than global temperature - minimum coefficient are taken
if(Temp <= global_medium_temp)
H = R*Temp.*(a8 + ((a9*Temp)/2) + ((a10*(Temp).^2)/3)+((a11*(Temp).^3)/4)+((a12*(Temp).^4)/5)+((a13./Temp)));
else
% Else maximum coefficients are taken
H = R*Temp.*(a1 + ((a2*Temp)/2)+((a3*(Temp).^2)/3)+((a4*(Temp).^3)/4)+((a5*(Temp).^4)/5)+((a6./Temp)));
end
end

Molecular weight code

function Molecularweight = molecular_weight(Species_SP)
%standard - Atomic Name
atomic_name = ['H','C','O','N','A'];
%Hydrogen,carbon,Oxygen,Nitrogen,Argon
fprintf('Molecular_Weight of ');
fprintf(Species_SP);
fprintf(' : ');
%Standard Atomic Number
Atomic_weight = [1.008 12.011 15.999 14.007 39.948];
%starting Range of molecular
Molecularweight = 0;
% Adding Atomic number to obtain particular value
for i = 1:length(Species_SP)
for j = 1:length(atomic_name)
if strcmp(Species_SP(i), atomic_name(j))
Molecularweight = Molecularweight+ atomic_name(j);
position = j;
end
end

n = str2num(Species_SP(i));

if n>1
Molecularweight = Molecularweight + atomic_weight(position)*(n-1);
end
end
fprintf('Molecular weight of %s :- ',Species_SP);
fprintf(' %d',Molecularweight);
disp(' ');
end

Main program code for file parasing

clear all
close all
clc
% Make directory
mkdir 'C:\Users\91968\Desktop\skilllyln\matlab\project\global_medium_temp'
% Reading Data file of Nasa thermodynamic
%open afile and 'r' open the file for reading
f1=fopen('THERMO.dat','r');
gt = fgetl(f1);
% Obtaing Temperature - by Reading Header Information
global_temp=fgetl(f1);
%spliting
t = strsplit(global_temp);
%converting string cells to number using str2num,
global_low_temp = str2num(t{2});
global_mid_temp = str2num(t{3});
global_high_temp = str2num(t{4});
% Temperature Range and Gas constant
% Temperature Range assumed
Temp = linspace(global_low_temp,global_high_temp,1000);
% universal gas constant j/(mol - k)
R = 8.314 ;
%skipping three comment lines in file
for i= 1:3
gt = fgetl(f1);
end
%reading the Species_sp
for i = 1:53
gt = fgetl(f1);
A = strsplit(gt,' ' );
Species_SP = (A{1});

line_1 = fgetl(f1);
a=strfind(line_1,'E');

% Extracting higher and lower temperature coefficients

% Extracting first 7 coefficient i,e High - temperature coefficients

a1 = line_1(1:a(1)+3);
a1 = str2num(a1);
a2 = line_1(a(1)+4:a(2)+3);
a2 = str2num(a2);
a3 = line_1(a(2)+4:a(3)+3);
a3 = str2num(a3);
a4 = line_1(a(3)+4:a(4)+3);
a4 = str2num(a4);
a5 = line_1(a(4)+4:a(5)+3);
a5 = str2num(a5);

line_2 = fgetl(f1);
b = strfind(line_1,'E');
a6 = line_2(1:b(1)+3);
a6 = str2num(a6);
a7 = line_2(b(1)+4:b(2)+3);
a7 = str2num(a7);

% extracting Second 7 coefficients - low - temperature coefficients
a8 = line_2(b(2)+4:b(3)+3);
a8 = str2num(a8);
a9 = line_2(b(3)+4:b(4)+3);
a9 = str2num(a9);
a10 = line_2(b(4)+4:b(5)+3);
a10 = str2num(a10);

line_3 = fgetl(f1);
c = strfind(line_1,'E');

a11 = line_3(1:c(1)+3);
a11 = str2num(a11);
a12 = line_3(c(1)+4:c(2)+3);
a12 = str2num(a12);
a13 = line_3(c(2)+4:c(3)+3);
a13 = str2num(a13);
a14 = line_3(c(3)+4:c(4)+3);
a14 = str2num(a14);

% Specific heat calculation
Cp = Specificheat(a1,a2,a3,a4,a5,a8,a9,a10,a11,a12,Temp,R,global_medium_temp);

% Enthalpy calculating
H = enthalpy(a1,a2,a3,a4,a5,a6,a8,a9,a10,a11,a12,a13,Temp,R,global_medium_temp);

% Entropy calculation
S = Entropy_calc(a1,a2,a3,a4,a5,a7,a8,a9,a10,a11,a12,a14,Temp,R,global_medium_temp);



% Calculating molecular weight of Species
Molecularweight(i)= Molecular_weight(Species_SP);

% read and write moleular list
Molecular_list = fopen('Molecular weight.txt','a+');
fprintf(Molecular_list,'Molecular weight of %s is %d n',Species_SP,Molecularweight);
fclose(Molecular_list);


%plotting (CP,H and S with temperature)
%saving in a folder

cur_dir =pwd;
mkdir(Species_SP);
cd(Species_SP);

%plot 1 ,Specfic heat(CP) vs Temperature range (Temp)
figure(1)
plot(Temp,Cp,'linewidth',2,'color','g');
grid on
xlable('Temperature(K)');
ylable('specific heat(KJ)');
title(sprintf('specific heat vs temperature renge of %s',Species_SP));
saveas(figure(1),'Specific heat.jpg');
grid off

%plot 2 ,Enthalpy(S) vs Temperature range (Temp)
figure(2)
plot(Temp,H,'linewidth',2,'color','r');
grid on
xlable('Temperature[K]');
ylable('Enthalpy in [(KJ/(mol)]');
title(sprintf('Enthalpy vs temperature renge of %s',Species_SP));
saveas(figure(2),'Enthalpy.jpg');
grid off

%plot 3 ,Entropy(S) vs Temperature range (Temp)
figure(3)
plot(Temp,S,'linewidth',2,'color','b');
grid on
xlable('Temperature[K]');
ylable('Entropy in[KJ/(mol-k)]');
title(sprintf('Entropy vs temperature renge of %s',Species_SP));
saveas(figure(3),'Entropy.jpg');
grid off
end

Code Explanation:

  1. 'clear all-clear all the variables in the workspace,

'close all' - closes all the plots and figures and

'clc'-clears the command window.

  1. Making a directory using 'mkdir' with location address.
  2. After that, reading the text file 'Thermo.dat' file and opening it by using 'fopen' and 'r' as reading command.
  3. For reading the line in a text file using 'fgetl'.
  4. To obtain the temperature range from the Thermo.dat file, using 'strsplit' to split the temperature into a particular string cell.
  5. Used 'str2num' for converting string cell to numbers.
  6. Divided the temperature into a string and then converted to a number so that temperature values can be used separately to solve the NASA thermodynamics.
  7. Using 'for & end' loops to skip the next three comment lines in the text file.
  8. Reading all the 53 species to plot specific heat(cp), enthalpy(H), and entropy(S), with temperature values, and to find the molecular weights.
  9. Used 'for' loop to read 53 species.
  10. Used 'strfind' to find string.
  11. Using 'linspace' specified the temperature range from low to high.
  12. Adding universal gas constant value 'R.
  13. Extracted higher and lower temperature coefficient by reading line by line from the species.
  14. Calling specific heat, enthalpy, entropy function codes.
  15. Calculating Molecular weight.

Syntax Used during Coding

Fopen:Open a file or obtain information about open files

T:Open the file for reading

fgetl:Read line from file

strsplit:Split string or character vector at specified delimiter

str2num:Convert character array or string to numeric array

strfind:Find one string within another

linspace:Generate linearly spaced vectors

fprintf:Write formatted data to file

pwd:Identify current directory

mkdir:Make new directory

cd:Change working directory

Results

1.Outputs of molecular weight

  1. .To plot the Cp,enthaly and entropy for the local temperature range(low temperature,high temperature)specific for each species.

outputs

Molecular weight of AR: molecular weight AR :3.9948880+01

ans =39.9480

Molecular weight C

Molecular Weight of C: molecular weight C :1.201100e+01

ans =12.0110

Molecular_weight C2H

Molecular Weight of C2H: molecular weight C2H :2.503000e+01

ans =25.0300

Molecular weight C2H2

Molecular Weight of C2H2 molecular weight C2H2 :2.603800e+01

26.0380

Molecular weight C2H3

Molecular Weight of C2H3: molecular weight C2H3 :2.7046000+01

ans =27.0460

Molecular_weight C2H4 Molecular Weight of C2H4: molecular weight C2H4 :2.8054000+01

ans =

28.0540

Molecular weight C2H5

Molecular Weight of C2H5: molecular weight C2H5 :2.906200e+01

ans =29.0620

Molecular_weight C2H6

Molecular Weight of C2H6: molecular weight C2H6 :3.007000e+01

ans =30.0700

Molecular_weight C3H7

Molecular Weight of C3H7 : cular weight C3H7 :4.308900e+01

ans =43.0890

Molecular weight C3H8

Molecular Weight of C3H8: molecular weight C3H8 :4.409700e+01

ans =

44.0970

Molecular_weight CH

Molecular Weight of CH: molecular weight CH :1.301900e+01

ans =

13.0190

Molecular weight H2CN

Molecular Weight of H2CN molecular weight H2CN :2.803400e+01

ans =

28.0340

Molecular weight H20

Molecular Weight of H20: molecular weight H20 :1.801500e+01

ans =

18.0150

42.9370

>> Molecular weight HCN

Molecular Weight of HCN molecular weight HCN :2.702600e+01

ans =27.0260

Molecular weight HCNN

Molecular Weight of HCNN: molecular weight HCNN :4.103300e+01

ans =41.0330

Molecular weight HCNO

Molecular Weight of HCNO: molecular weight HCNO :4.302500e+01

ans =43.0250

molecular weight. HOON

Melecular weight of HOCN: molecular weight HOCN 14.302500+01

ans 43.0250

Molecular weight N

Molecular weight of N: molecular weight N :1.4007000+01

ans =14.007

Molecular weight N2

Molecular weight of N2: molecular weight N2 :2.801400+01

ans =26.0140

Molecular weight of N20: molecular weight N20 :4.401300+01

ans = 44.028

Molecular weight NH

Molecular weight of NH: molecular weight NH :1.501500e+01

15.008

Molecular weight NH2

Molecular Weight of NH2 molecular weight NH2 :1.602300e+01

16.023

Molecular weight NH3

Molecular weight of NH3: molecular weight NH3 :1.7031000+01

ans=17.034

Molecular weight NNH

Molecular weight of NNH: molecular weight NNH :2.982200e+01

ans =29.003

Molecular_weight NO2

Molecular Weight of NO2: molecular weight NO2 :4.600500e+01

ans =46.0050

Molecular weight 0

Molecular Weight of 0: molecular weight 0:1.599900e+01

ans =15.9990

Molecular_weight 02

Molecular Weight of 02: molecular weight 02 :3.199800e+01

ans =15.9990

Molecular weight 02 Molecular Weight of 02: molecular weight 02 :3.199800e+01

ans =31.9980

Molecular_weight OH Molecular Weight of OH: molecular weight OH :1.700700e+01

ans =17.0070

Results

Graphs Cp,enthaly and entropy for the local temperature range(low temperature,high temperature)specific for each species.

specific hest with temp of O2.

specific hest with temp of N2

specific hest with temp of CO2

Screenshot of Directory where different species are saved

Your portfolio, next

Ship work like this
in your own course.

Talk to a career counsellor

Free 20-minute call. We'll map the right course to where you want to work.

By submitting you agree to our Terms and Privacy Policy.