Challenge

Project 1 - Parsing NASA thermodynamic data

AIM:

* To write a code MATLAB to parse the NASA thermodynamics data file and calculate the thermodynamic properties of various gas species

OBJECTIVE:

* To write a function that extracts the 14 co-efficient and calculates the specific heat,enthalpy for all the species in the data file

* To calculate the molecular weight of each species and display it in the command window

* To plot Cp ,enthalpy and entropy for local temperature range (low temperature:high temperature) specfic for each species

* To save the plots as image with approprite names and dump in separate folders for each species with suitable name and all these should be done automatically .

* The main program will just take the 'THERMO'.dat file as input and generate Cp,H and S plots

THEORY:

File parsing :

* In this the method of splitting file or other input into a piece of data that can be easily stored or manipulator .by doing this we are going to split a string into parts then recognizing the parts to convert into something simpler then a string

Here in this project we are going to split the NASA thermodynamics data which is having 53 gas species values in 213 lines .to perform calculation for thermodynmics properties ,we need some sort co -efficient values and temperature ranges which is available in the NASA file

Specfic heat:

* Specfic heat is the amount of heat enegy required to raise the temperature of body unit of mass .specfic heat is also known as specfic heat capacity or mass specfic heat .in SI unit ,specfic heat is the amount of heat in joules required to raise 1 gram of substance 1 kelvin

Enthalpy:

* When a sustance changes at constant pressure,enthalpy tells how much heat and work was added or removed from the sustance .enthalpy is similer to energy but not the same .when the substance grows or shrinks enegy used up or released

Entropy:

* The entropy of is a measure of the amount of energy which unavailable to do work .entropy is also a measure of uncertainty or randomness

gas constant:

* The gas constant is a physical constant denoted by R and expressed in terms of units of energy per temperature increment per mole. the gas constant value is equivalent .

molecular weight :

* Molecular weight is a measure of the sum of the atomic weight values of the atoms in a molecule.molecular weight is used in chemistry to determine stoichiomery in chemical reaction and equations .

Govering equations:

list of Elements contained in 'THERMO.dat'file:

CODING:

clear all
close all
clc

% Make directory
mkdir 'C:\Users\Admin\Desktop\NASA File Parsing'

%  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=str2num(t{2});
global_medium_temp=str2num(t{3});
global_high_temp=str2num(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
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 coefficients i.e HIGH-temperature coefficients 
a1=line_1(1:a(1)+3);
a1=str2num(a1);              %1
a2=line_1(a(1)+4:a(2)+3);
a2=str2num(a2) ;             %2
a3=line_1(a(2)+4:a(3)+3);
a3=str2num(a3)  ;            %3
a4=line_1(a(3)+4:a(4)+3);
a4=str2num(a4);              %4
a5=line_1(a(4)+4:a(5)+3);
a5=str2num(a5)  ;            %5

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

 % Extracting SECOND 7 coefficients - LOW-temperature coefficients
a8=line_2(b(2)+4:b(3)+3);         
a8=str2num(a8);              %8
a9=line_2(b(3)+4:b(4)+3);
a9=str2num(a9) ;             %9
a10=line_2(b(4)+4:b(5)+3);
a10=str2num(a10) ;           %10


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

a11=line_3(1:c(1)+3);
a11=str2num(a11);               %11
a12=line_3(c(1)+4:c(2)+3);
a12=str2num(a12);               %12
a13=line_3(c(2)+4:c(3)+3);
a13=str2num(a13);               %13
a14=line_3(c(3)+4:c(4)+3);
a14=str2num(a14);               %14

% 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

EXPLANATION CODE:

* The program begins with clear all,close all and clc commands to free up the command window and the workspace.

* We will then read the data from the extrend NASA thermodynmics data file using fopen command which is used to open the file and fgetl command which is used to read the content in the file line by line

* After we use the fopen command we will be assigning to the variable called.thus ,the fgetl(f1) is the command act like a line cursor which will retrieve the next time while running this command for the second time and to soon.

* Now,we will be skipping the first 5 lines to enter the pattern of values of the respective gas species

* The name of the gas species we will found out using findstr command for finding out the species we are going to locate the string which is present in after each species name.

* And then we are going to use A(1:z(1)-1) which tells us the exact location of species name ,using which the name of the gas species is stored in the variables species_name

* The local temperature for the respective gas species is found similarly using findstr command and we are going to local string using which we will find out the values of low temperature and high temperature which is assigned to the variables t1,t2 and t3 respectively ,but the values we have achived are string values using the str2num command

* Now we are going to extract the co-efficient for the gas species in which the co-efficient locations are like 2nd row,next 5 in the 3rd row and the rest in the 4 th row .

* We are going to extract these values similarly like we did for finding out local temperature by using the findstr and str2num commands and store it in variables a1 to a4 .for extracting we are going to locate the string 'E' which is present in the each co-efficent value and so it will be followed for all the co-efficients values in the same line and then we can proceed for the next lines .

* The values from the a1 to a7 represnt the high temperature co-efficient and the values from a8 to a14 represent the low temperature co-efficients

* Temperature range value from low temperature to high temperature is assigned using the linspace command

* The for loop command is used to calculate the values of specfic heat,enthalpy and entropy and the if -else command is also used to find out the required values if the temperature or above mid temperature

* In order to calculate the molecular weight of the species we declere the species elements in the form of cell array.their atomic mass is declared .

OUTPUT:

>> Molecular_weight AR
Molecular Weight of AR : molecular weight AR :3.994800e+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 

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 C3H7
Molecular Weight of C3H7 : molecular 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 CH2
Molecular Weight of CH2 : molecular weight CH2 :1.402700e+01 

ans =

   14.0270

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

ans =

   14.0270

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

ans =

   43.0450

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

ans =

   42.0370

>> 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 CH3
Molecular Weight of CH3 : molecular weight CH3 :1.503500e+01 

ans =

   15.0350

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

ans =

   44.0530

>> 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 CH4
Molecular Weight of CH4 : molecular weight CH4 :1.604300e+01 

ans =

   16.0430

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

ans =

   26.0180

>> 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 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 H2CN
Molecular Weight of H2CN : molecular weight H2CN :2.803400e+01 

ans =

   28.0340

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

ans =

   18.0150

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

ans =

   34.0140

>> 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 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 HCO
Molecular Weight of HCO : molecular weight HCO :2.901800e+01 

ans =

   29.0180

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

ans =

   43.0250

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

ans =

   31.0140

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

ans =

   33.0060

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

ans =

   43.0250

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

ans =

   14.0070

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

ans =

   28.0140

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

ans =

   44.0130

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

ans =

   42.0170

>> 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 NNH
Molecular Weight of NNH : molecular weight NNH :2.902200e+01 

ans =

   29.0220

>> Molecular_weight NO
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 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 OH
Molecular Weight of OH : molecular weight OH :1.700700e+01 

ans =

   17.0070

syntax used during coding:

* Fopen - open a file or obtain information about open files

* 'r' - open the file for reading

* fgetl - read line from line

* strspilt - spilt string or character vector at specfied delimiter

* str2num - convert character array or string to numetic array

* strfind - find one string within another

* linspace - generate linearly spaced vectors

* fprintf - write formatted data to file

* pwd - identify current directory

* cd - change working directoy

CONCLUSION:

* Using matlab code in NASA thermo .the specfic heat ,enthalpy,and entropy for all species are calculate data file.

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.