Challenge

Project 1 - Parsing NASA thermodynamic data

AIM : To write the code in MATLAB to parse the NASA thermodynamic file.

OBJECTIVE :

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.

FILE PARCING :

Parsing a file means reading in a data stream of some sort and building an in memory model of the semantic content of that data. This aims at facilitating perfoming some kind of transformation on the data.

  • Step 1 - Define the function
  • Step 2 - Create an InputParser object
  • Step 3 - 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 contains 14 coefficients for 53 elements given by NASA.these coefficients are hepful to finding cp,H,S of 53 elements.

THESE ARE THE 53 ELEMENTS IN THERMO.dat

  • 1-AR 2- C 3- C2H 4- C2H2 5- C2H3 6- C2H4
  • 7-C2H5 8-C2H6 9- C3H7 10- C3H8 11- CH 12-CH2
  • 13-CH2(S) 14-CH2CHO 15-CH2CO 16- CH2O 17-CH2OH 18- CH3
  • 19-CH3CHO 20-CH3O 21-CH3OH 22- CH4 23- CN 24-CO
  • 25-CO2 26- H 27- H2 28- H2CN 29- H2O 30- H2O2
  • 31-HCCO 32- CCOH 33-HCN 34-HCNN 35-HCNO 36- HCO
  • 37-HNCO 38- HNO 39- HO2 40-HOCN 41- N 42- N2
  • 43-N2O 44-NCO 45-NH 46- NH2 47- NH3 48- NNH
  • 49-NO 50-NO2 51- O 52-O2 53- OH

ENTHALPY,ENTROPY,SPECIFIC HEAT :

these are defined by these formula by using 14 coefficients

Where R is the universal gas constant, T is the temperature and a1, 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).

FUNCTIONS OF SPECIFC HEAT, ENTHALPY,ENTROPY AND FUNCTION ON MOLECULAR WEIGHT :

FUNCTION OF SPECIFIC HEAT :

SPECIFIC HEAT MEANS :

It is the amount of energy that must be added, in the form of heat, to one unit of mass of the substance in order to cause an increase of one unit in its temperature.

specific heat (s) is a particular type of heat capacity. Specific heat is the thermodynamic property, which states the amount of heat required for a single unit of mass of a substance to be raised by one degree of temperature. Varying ranges of specific heat values are seen for substances depending on the extent to which they absorb heat. The term heat capacity can be misleading since heat q is the term given to the addition or removal of energy.

Cp = (a1 + a2 T + a3 T^2 + a4 T^3 + a5 T^4)*R

THIS IS THE CODE

%% specific heat calculation function
function [cp] = Specificheat(a1,a2,a3,a4,a5,a8,a9,a10,a11,a12,temp,R,global_medium_temp)

if temp <= global_medium_temp
  cp = R*(a1 + a2*(temp) + a3*((temp).^2) + a4*((temp).^3) + a5*((temp).^4));  
else  
   cp = R*(a8 + a9*(temp) + a10*((temp).^2) + a11*((temp).^3) + a12*((temp).^4)); 

    
end  

ENTHALPY :

Enthalpy is a concept used in science and engineering when heat and work need to be calculated. The name comes from the Greek word "enthalpos" (ενθαλπος), meaning "to put heat into".

When a substance changes at constant pressure, enthalpy tells how much heat and work was added or removed from the substance.

Enthalpy is similar to energy, but not the same. When a substance grows or shrinks, energy is used up or released. Enthalpy accounts for this energy. Because of this, scientists often calculate the change in enthalpy, rather than the change in energy.

Consider a system containing a fixed amount of gas. Any heat energy entering the system will:

1) Increase the Internal Energy of the gas

or

2) Lead to some work being done to expand the system. The work done is the product of pressures and volume. Enthalpy takes both these factors into account, therefore:

   Enthalpy (H)= Internal Energy (u) + (Pressure(P) x Volume (v)); H = u + (P x V)

H = (a1 + a2 T /2 + a3 T^2 /3 + a4 T^3 /4 + a5 T^4 /5 + a6/T)*R*T

FUNCTION OF ENTHALPY :

THIS IS THE CODE

%% enthalpy calculation function
function [H] = Enthalpy(a1,a2,a3,a4,a5,a6,a8,a9,a10,a11,a12,a13,temp,R,global_medium_temp)

if temp <= global_medium_temp
    H = (R*(temp)).*(a1 + ((a2*temp)/2) + ((a3*(temp).^2)/3) + ((a4*(temp).^3)/4) + ((a5*(temp).^3)/4) + (a6./(temp)));
else 
    H = (R*(temp)).*(a8 + ((a9*temp)/2) + ((a10*(temp).^2)/3) + ((a11*(temp).^3)/4) + ((a12*(temp).^3)/4) + (a13./(temp)));
end

ENTROPY :

The entropy of an object is a measure of the amount of energy which is unavailable to do work. Entropy is also a measure of the number of possible arrangements the atoms in a system can have. In this sense, entropy is a measure of uncertainty or randomness. The higher the entropy of an object, the more uncertain we are about the states of the atoms making up that object because there are more states to decide from. A law of physics says that it takes work to make the entropy of an object or system smaller; without work, entropy can never become smaller – you could say that everything slowly goes to disorder (higher entropy).

S = (a1 lnT + a2 T + a3 T^2 /2 + a4 T^3 /3 + a5 T^4 /4 + a7)*R

FUNCTION OF ENTROPY :

THIS IS THE 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)

if temp <= global_medium_temp
    S = R*(a1*(log(temp)) + a2*(temp) + a3*((temp).^(2/2)) + a4*(temp.^(3/3)) + a5*(temp.^(4/4)) + a7);
else 
    % else maximum coefficients are taken 
    S =  R*(a8*(log(temp)) + a9*(temp) + a10*((temp).^(2/2)) + a11*((temp).^(3/3)) + a12*((temp).^(4/4)) + a14);
end

    

MOLECULAR WEIGHT :

The molecular mass is the mass of a given molecule: it is measured in daltons. Different molecules of the same compound may have different molecular masses because they contain different isotopes of an element.

FUNCTION FOR MOLECULAR WEIGHT :

 % Molecular Weight Calculation function

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 Molecule           
         Molecularweight = 0;                                   
        
         % Adding Atomic number to obtain particular value
        for i = 1:length(Species_SP)
            for j = 1:length(atomic_name)
                if strcmpi(Species_SP(i),atomic_name(j))
                        Molecularweight = Molecularweight +Atomic_Weight(j);
                    position = j;
                end
            end
            n = str2double(Species_SP(i));
            
            if n>1
            
                Molecularweight = Molecularweight + Atomic_Weight(position)*(n-1);
            
            end
        end
            fprintf('molecular weight %s :',Species_SP);
            fprintf('%d',Molecularweight);
            disp(' ');      
end

THE TOTAL PROGRAM IS

clear all
close all
clc

% Make directory
mkdir 'C:\Users\YOGI\Desktop\FILE PARCING  NASA'

%  Reading Data file - NASA Thermodynamic
% Open a file & 'r' Open the file for reading 
f1=fopen('THERMO.dat','r')
gt=fgetl(f1);

% Obtaing Temperatures - by Reading Header Information
global_temp=fgetl(f1);

% Spliting
t=strsplit(global_temp);

% Converting string cells to numbers using str2num,
global_low_temp=str2double(t{2});
global_medium_temp=str2double(t{3});
global_high_temp=str2double(t{4});

% Temperature range & 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 the file
for i = 1:3
    gt=fgetl(f1);
end

 for i = 1:53
line=fgetl(f1);
A=strsplit(line,' ');
Species_SP=(A{1});


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

% Extracting higher and lower temperature coefficients

%  Extracting High-temperature coefficients 
a1=line_1(1:a(1)+3);
a1=str2double(a1);
a2=line_1(a(1)+4:a(2)+3);
a2=str2double(a2);
a3=line_1(a(2)+4:a(3)+3);
a3=str2double(a3);
a4=line_1(a(3)+4:a(4)+3);
a4=str2double(a4);
a5=line_1(a(4)+4:a(5)+3);
a5=str2double(a5);

line_2=fgetl(f1);
b=strfind(line_1,'E');


a6=line_2(1:b(1)+3);
a6=str2double(a6);
a7=line_2(a(1)+4:b(2)+3);
a7=str2double(a7);

 %  LOW-temperature coefficients
a8=line_2(b(2)+4:b(3)+3);         
a8=str2double(a8);
a9=line_2(b(3)+4:b(4)+3);
a9=str2double(a9);
a10=line_2(b(4)+4:b(5)+3);
a10=str2double(a10);


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

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

% Specific heat calculation
    Cp = Specificheat(a1,a2,a3,a4,a5,a8,a9,a10,a11,a12,Temp,R,global_medium_temp);
 
    % Enthalpy calculation
    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 & Write Molecular 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,S,Temp,Species_SP)
        % Saving as a folder
 
           cur_dir=pwd;
           mkdir(Species_SP);
           cd(Species_SP);
 
        % Plot 1, Specific heat (CP) vs Temperature Range (Temp)
 
        figure(1)
        plot(Temp,Cp,'linewidth',2,'color','r');
        xlabel('Temperature  [K]');
        ylabel('Specific Heat [kJ]');
        title(sprintf('Varying Specific Heat with Temperature Range of %s',Species_SP));
        grid on
        saveas(figure(1),'Specific Heat.jpg');
 
        % Plot 2, Enthalpy (H) vs Temperature Range (Temp)
 
        figure(2)
        plot(Temp,H,'linewidth',2,'color','g');
        xlabel('Temperature [K]');
        ylabel('Enthalpy in [kJ/(mol)]');
        title(sprintf('Varying Enthalpy with Temperature Range of %s',Species_SP));
        grid on
        saveas(figure(2),'Ethalpy.jpg');
 
        % Plot 3, Entropy (S) vs Temperature Range (Temp)
 
        figure(3)
        plot(Temp,S,'linewidth',2,'color','b');
        xlabel('Temperature [K]');
        ylabel('Entropy in [kJ/(mol-K)]');
        title(sprintf('Varying Entropy with Temperature Range of %s',Species_SP));
        grid on
        saveas(figure(3),'Entropy.jpg');
 
        cd(cur_dir);            
 
        % Molecular weight
        
        M = Molecular_weight(Species_SP);
        f2 = fopen('molecular mass','w');
        fprintf('%s n %s n %f n','species','Molecular mass',M)
        fclose(f2);
 end

OUTPUT MOLECULAR WEIGHT IS :

>> Molecular_weight O
Molecular Weight of O : molecular weight O :1.599900e+01 

ans =

   15.9990

>> Molecular_weight O2
Molecular Weight of O2 : molecular weight O2 :3.199800e+01 

ans =

   31.9980

>> 
>> Molecular_weight  H
Molecular Weight of H : molecular weight H :1.008000e+00 

ans =

    1.0080

>> Molecular_weight H2
Molecular Weight of H2 : molecular weight H2 :2.016000e+00 

ans =

    2.0160

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

ans =

   17.0070

>> Molecular_weight HO
Molecular Weight of HO : molecular weight HO :1.700700e+01 

ans =

   17.0070

>> Molecular_weight H2O
Molecular Weight of H2O : molecular weight H2O :1.801500e+01 

ans =

   18.0150

>> Molecular_weight HO2
Molecular Weight of HO2 : molecular weight HO2 :3.300600e+01 

ans =

   33.0060

>> Molecular_weight H2O2
Molecular Weight of H2O2 : molecular weight H2O2 :3.401400e+01 

ans =

   34.0140

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

ans =

   12.0110

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

ans =

   13.0190

>> Molecular_weight CH2
Molecular Weight of CH2 : molecular weight CH2 :1.402700e+01 

ans =

   14.0270

>> Molecular_weight CH3
Molecular Weight of CH3 : molecular weight CH3 :1.503500e+01 

ans =

   15.0350

>> Molecular_weight CH2(S)
Molecular Weight of CH2(S) : molecular weight CH2(S) :1.402700e+01 

ans =

   14.0270

>> Molecular_weight CH4
Molecular Weight of CH4 : molecular weight CH4 :1.604300e+01 

ans =

   16.0430

>> Molecular_weight CO
Molecular Weight of CO : molecular weight CO :2.801000e+01 

ans =

   28.0100

>> Molecular_weight CO2
Molecular Weight of CO2 : molecular weight CO2 :4.400900e+01 

ans =

   44.0090

>> Molecular_weight HCO
Molecular Weight of HCO : molecular weight HCO :2.901800e+01 

ans =

   29.0180

>> Molecular_weight CH2O
Molecular Weight of CH2O : molecular weight CH2O :3.002600e+01 

ans =

   30.0260

>> Molecular_weight CH2OH
Molecular Weight of CH2OH : molecular weight CH2OH :3.103400e+01 

ans =

   31.0340

>> Molecular_weight CH3O
Molecular Weight of CH3O : molecular weight CH3O :3.103400e+01 

ans =

   31.0340

>> Molecular_weight CH3OH
Molecular Weight of CH3OH : molecular weight CH3OH :3.204200e+01 

ans =

   32.0420

>> 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 

ans =

   26.0380

>> Molecular_weight C2H3
Molecular Weight of C2H3 : molecular weight C2H3 :2.704600e+01 

ans =

   27.0460

>> Molecular_weight C2H4
Molecular Weight of C2H4 : molecular weight C2H4 :2.805400e+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 CH2CO
Molecular Weight of CH2CO : molecular weight CH2CO :4.203700e+01 

ans =

   42.0370

>> Molecular_weight HCCO
Molecular Weight of HCCO : molecular weight HCCO :4.102900e+01 

ans =

   41.0290

>> Molecular_weight HCCOH
Molecular Weight of HCCOH : molecular weight HCCOH :4.203700e+01 

ans =

   42.0370

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

ans =

   28.0340

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

ans =

   27.0260

>> Molecular_weight HNO
Molecular Weight of HNO : molecular weight HNO :3.101400e+01 

ans =

   31.0140

>> Molecular_weight N
Molecular Weight of N : molecular weight N :1.400700e+01 

ans =

   14.0070

>> Molecular_weight NNH
Molecular Weight of NNH : molecular weight NNH :2.902200e+01 

ans =

   29.0220

>> Molecular_weight N2O
Molecular Weight of N2O : molecular weight N2O :4.401300e+01 

ans =

   44.0130

>> Molecular_weight NH
Molecular Weight of NH : molecular weight NH :1.501500e+01 

ans =

   15.0150

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

ans =

   16.0230

>> Molecular_weight NH3
Molecular Weight of NH3 : molecular weight NH3 :1.703100e+01 

ans =

   17.0310


Molecular Weight of NO : molecular weight NO :3.000600e+01 

ans =

   30.0060

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

ans =

   46.0050

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

ans =

   43.0250

>> Molecular_weight HOCN
Molecular Weight of HOCN : molecular weight HOCN :4.302500e+01 

ans =

   43.0250

>> Molecular_weight HNCO
Molecular Weight of HNCO : molecular weight HNCO :4.302500e+01 

ans =

   43.0250

>> Molecular_weight NCO
Molecular Weight of NCO : molecular weight NCO :4.201700e+01 

ans =

   42.0170

>> Molecular_weight CN
Molecular Weight of CN : molecular weight CN :2.601800e+01 

ans =

   26.0180

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

ans =

   41.0330

>> Molecular_weight N2
Molecular Weight of N2 : molecular weight N2 :2.801400e+01 

ans =

   28.0140

>> Molecular_weight AR
Molecular Weight of AR : molecular weight AR :3.994800e+01 

ans =

   39.9480

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

ans =

   44.0970

>> Molecular_weight C3H7
Molecular Weight of C3H7 : molecular weight C3H7 :4.308900e+01 

ans =

   43.0890

>> Molecular_weight CH3CHO
Molecular Weight of CH3CHO : molecular weight CH3CHO :4.405300e+01 

ans =

   44.0530

>> Molecular_weight CH2CHO 
Molecular Weight of CH2CHO : molecular weight CH2CHO :4.304500e+01 

ans =

   43.0450

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.

  2. Making a directory using 'mkdir' with location address.
  3. After that, reading the text file 'THERMO.dat' file and opening it by using ‘fopen’ and 'r' as reading command.
  4. For reading the line in a text file using ‘fgetl’.
  5. To obtain the temperature range from the Thermo.dat file, using ‘strsplit’ to split the temperature into a particular string cell.
  6. Used ‘str2double’ for converting string cell to numbers.
  7. 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.
  8. Using ‘for & end’ loops to skip the next three comment lines in the text file.
  9. Reading all the 53 species to plot specific heat(cp), enthalpy(H), and entropy(S), with temperature values, and to find the molecular weights.
  10. Used ‘for’ loop to read 53 species.
  11. Used ‘strfind’ to find string.
  12. Using 'linspace' specified the temperature range from low to high.
  13. Adding universal gas constant value ‘R’.R VALUE IS 0.287KJ/KG K
  14. Extracted higher and lower temperature coefficient by reading line by line from the species.
  15. Calling specific heat, enthalpy, entropy function codes.
  16. Calculating Molecular weight.

Syntax Used during Coding

Fopen :

Open a file or obtain information about open files

‘r’ :

Open the file for reading

fgetl

Read line from file

strsplit

Split string or character vector at specified delimiter

str2double

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

ATTACHMENTS :

SCREEN SHOT OF WINDOWS FILES SAVED

RESULTING GRAPHS :

PLOTS FOR N2,O2,CO2

PLOTS FOR N2 :

a - VARYING ENTROPY WITH TEMPERATURE

b - VARYING ENTHALPY WITH TEMPERATURE

c - VARYING SPECIFIC HEAT WITH TEMPERATURE :

PLOTS FOR CO2

a - VARYING ENTROPY WITH TEMPERATURE :

b - VARYING ENTHALPY WITH TEMPERATURE :

c - VARYING SPECIFIC HEAT WITH TEMPERATURE :

PLOTS FOR O2 :

a - VARYING ENTROPY WITH TEMPERATURE

b - VARYING ENTHALPY WITH TEMPERATURE :

c - VARYING SPECIFIC HEAT WITH TEMPERATURE :

SCREENSHOTS FOR MOLECULAR WEIGHTS IN COMMAND WINDOW OF MATLAB

CONCLUSION :

Using MATLAB code, the necessary coefficients required to evaluate various thermodynamic parameters for different species are extracted from NASA thermodynamic data file. The specific heat, enthalpy, and entropy for all the species are calculated and plotted against the local temperature range. The molecular weight is calculated for all the species.

REFERENCES :

https://www.quora.com/What-does-it-means-to-parse-a-file

https://simple.wikipedia.org/wiki/Specific_heat

https://simple.wikipedia.org/wiki/Enthalpy

https://simple.wikipedia.org/wiki/Entropy

https://www.mathworks.com/help/mbc/mbccommandline/saveas.html

https://www.mathworks.com/help/matlab/ref/mkdir.html

https://www.mathworks.com/help/matlab/ref/str2double.html

https://www.mathworks.com/help/matlab/ref/fprintf.html

https://www.mathworks.com/help/matlab/ref/strsplit.html

https://www.mathworks.com/help/matlab/ref/strfind.html

https://ntrs.nasa.gov/archive/nasa/casi.ntrs.nasa.gov/19940013151.pdf

MY GOOGLE DRIVE LINK FOR FOLDERS :

https://drive.google.com/drive/folders/1qgUAu-eratXQTtgHpsKtwx5pRNgtXRyB

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.

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.