Challenge

Project 1 - Parsing NASA thermodynamic data

AIM:

To write a program in matlab to parse the NASA thermodynamic data file and then calculate the thermodynamic properties of various gas species.

OBJECTIVE:

  • To write a function that extracts the 14 co-efficient and calculates the enthalpy ,entropy and specific heats for all species in the data file.
  • Calculating the molecular weight of each species and displaying it in command window.
  • Plotting cp, enthalpy and entropy for local temperature range specific for each species.
  • Save the plot as images with appropriate names and dump them in separate folders for each species with suitable name.

PARSING DATA:

  • Parsing means to make something understandable. For programming this means to convert information represented in one form into another form that's easier to work with. This is done by partially analysing the data, understanding its underlying structure (by making some assumptions based on what we're expecting to see), and then explicitly representing that structure in the code.
  • 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.

EQUATIONS:

`c p/R = a 1 + a 2 T + a 3 T ^2 + a 4 T ^3 + a 5 T ^4`

`H/(RT) = a 1 + a 2 T /2 + a 3 T ^2 /3 + a 4 T ^3 /4 + a 5 T^ 4 /5 + a 6/ T```

`S/ R = a 1 ln T + a 2 T + a 3 T ^2 /2 + a 4 T^ 3/ 3 + a 5 T^ 4/ 4 + a 7`

CODE AND FUNCTIONS:

Code for calling function Specific_heat( ):

function Cp = Specific_heat(a1,a2,a3,a4,a5,a8,a9,a10,a11,a12,T,R,global_midtemp)

%calculating specific_heat for higher and lower temperature respectively
if(T>= global_midtemp)
    Cp=R*(a1+(a2*T)+(a3*(T).^2)+(a4*(T).^3)+(a5*(T).^4));
else
    Cp=R*(a8+(a9*T)+(a10*(T).^2)+(a11*(T).^3)+(a12*(T).^4));
end
end

Code for calling function Enthalpy( ):

function H = Enthalpy(a1,a2,a3,a4,a5,a6,a8,a9,a10,a11,a12,a13,T,R,global_midtemp)

%calculating enthalpy for higher and lower temperature respectively
if(T>=global_midtemp)
    
    H=R*((a1*T)+((a2*(T).^2)/2)+((a3*(T).^3)/3)+((a4*(T).^4)/4)+((a5*(T).^5)/5)+a6);
    
else
    H=R*((a8*T)+((a9*(T).^2)/2)+((a10*(T).^3)/3)+((a11*(T).^4)/4)+((a12*(T).^5)/5)+a13);
end
end

Code for calling function Entropy( ):

function S=Entropy(a1,a2,a3,a4,a5,a7,a8,a9,a10,a11,a12,a14,T,R,global_midtemp)

%calculating entropy for higher and lower temperature respectively
if(T>= global_midtemp)
    S=R*(a1.*log(T)+(a2*T)+((a3*(T).^2)/2)+((a4*(T).^3)/3)+((a5*(T).^4)/5)+a7);
else
    S=R*(a8.*log(T)+(a9*T)+((a10*(T).^2)/2)+((a11*(T).^3)/3)+((a12*(T).^4)/4));
end
end

Code for calculating molecular weight by calling function wt( ):

function Molecular_weight=wt(species_name)

Elements=['H' 'C' 'O' 'N' 'A' 'S'];
Atomic_weight =[1 12 16 14 40 32];
species=upper(species_name)

Molecular_weight=0;

for i=1:length(species)
  for    j=1:length(Elements)
    
    if strcmp(species(i),Elements(j))
        
        Molecular_weight=Molecular_weight+Atomic_weight(j);
        k=j;
        
    else
        n=str2double(species(i));
        if (n>1)
            Molecular_weight=Molecular_weight+Atomic_weight(k)*(n-1);
            break
        end
    end
  end
end
end

MAIN CODE:

clear all
close all
clc

%R=molar gas constant
R=8.314;

%syntax to open the  file THERMO.dat
f1=fopen('THERMO.dat','r')

%To read lines 
l1=fgetl(f1);
l2=fgetl(f1);
value=strsplit(l2,' ');

%To get global temperatures from file in number form
global_lowtemp=str2num(value{2})
global_midtemp=str2num(value{3})
global_hightemp=str2num(value{4})

%temperature range
T=linspace(global_lowtemp,global_hightemp,1000);

%skipping these 3 lines 
l3=fgetl(f1);
l4=fgetl(f1);
l5=fgetl(f1); 

%Reading species ,calcuating cp,h,s and plotting
for i=1:53
    tline=fgetl(f1);
 
    A=strsplit(tline,' ');
    name_of_species=(A{1});
    lowtemp= str2num(A{end-3});
    midtemp=str2num(A{end-2});
    hightemp=str2num(A{end-1});
    
    %Finding 7 higher coefficients and 7 lower coefficients
    
    tline1=fgetl(f1);
    a=findstr(tline1,'E');
    
    a1=tline1(1:a(1)+3);
    a1=str2num(a1);
    a2=tline1(a(1)+4:a(2)+3);
    a2=str2num(a2);
    a3=tline1(a(2)+4:a(3)+3);
    a3=str2num(a3);
    a4=tline1(a(3)+4:a(4)+3);
    a4=str2num(a4);
    a5=tline1(a(4)+4:a(5)+3);
    a5=str2num(a5);
    
    tline2=fgetl(f1);
    a=findstr(tline2,'E');
    
    a6=tline2(1:a(1)+3);
    a6=str2num(a6);
    a7=tline2(a(1)+4:a(2)+3);
    a7=str2num(a7);
    a8=tline2(a(2)+4:a(3)+3);
    a8=str2num(a8);
    a9=tline2(a(3)+4:a(4)+3);
    a9=str2num(a9); 
    a10=tline2(a(4)+4:a(5)+3);
    a10=str2num(a10);
   
   
    tline3=fgetl(f1);
    a=findstr(tline3,'E');
    a11=tline3(1:a(1)+3);
    a11=str2num(a11);
    a12=tline3(a(1)+4:a(2)+3);
    a12=str2num(a12);
    a13=tline3(a(2)+4:a(3)+3);
    a13=str2num(a13);
    a14=tline3(a(3)+4:a(4)+3);
    a14=str2num(a14);
  
    %calculate specific heat(cp),Enthalpy(H),Entropy(S)
    Cp=Specific_heat(a1,a2,a3,a4,a5,a8,a9,a10,a11,a12,T,R,global_midtemp);
    H=Enthalpy(a1,a2,a3,a4,a5,a6,a8,a9,a10,a11,a12,a13,T,R,global_midtemp);
    S=Entropy(a1,a2,a3,a4,a5,a7,a8,a9,a10,a11,a12,a14,T,R,global_midtemp);

    
    %calculating molecular weight and printing it.
    Molecular_weight=wt(name_of_species);
    fprintf('molecular weight of %s= %f\n',name_of_species,Molecular_weight);
    
                 %PLOTTING CP,H,T
                 
cd('F:\MATLAB OUTPUT\MATLAB for Mechanical Engineers\Project 1\NASA FILES')
%creating the folder
mkdir(name_of_species);
cd(name_of_species);


%plotting T vs cp    
figure(1)
plot(T,Cp,'linewidth',5,'color','r')
xlabel('Temperature(T)')
ylabel('Specific heat(cp)')
grid on
title(name_of_species)
saveas(figure(1),'specific heat.jpg');


  
%Plotting T vs H
figure(2)
plot(T,H,'linewidth',5,'color','b')
xlabel('Temperature(T)')
ylabel('Enthalpy(H)')
grid on
title(name_of_species)
saveas(figure(2),'Enthalpy.jpg');



%Plotting T vs S  
figure(3)
plot(T,S,'linewidth',5,'color','y')
xlabel('Temperature(T)')
ylabel('Entropy(S)')
grid on
title(name_of_species)
saveas(figure(3),'Entropy.jpg');

cd('F:\MATLAB OUTPUT\MATLAB for Mechanical Engineers\Project 1\NASA FILES')
    
    
    
   
end

Explanation for code:

The ‘fopen’ command opens the ‘THERMO.dat’ file and ‘r’ here indicated the ‘read only’ command. We use ‘fgetl’ command to read the data file line by line. The first line of the file is omitted and the next line is stores in a variable ‘line’ and the line is split using ‘strsplit’ command and stored in a variable ‘a’. Different temperature values are assigned to read the 53 gases mentioned in the data file we use for loop then we further read the lines in the file using fgetl command.

When all the global and local temperatures are read we call functions which are written to calculate molecular weight, specific heat(Cp),enthalpy(H),Entropy(s).

Calculating the value of Cp,H & S for local temperature range. Initial values of Cp, H & S are defined as zero, Plotting the graphs & saving them in the folder. It is standard procedure to store in file in specific location, by using many commands (pwd, mkdir, cd, saveas) written in this program.

We are using formulae to calculate Cp, H & S. We are using for loop to calculate each value at local temperature range. We are also using if & else command to use low & high temperature coefficient as per average temperature. If Temperature is less than average temperature then use low temperature co-efficient & If Temperature is more than average temperature then use hign temperature co-efficient

Molecular weight is calculated in a different function which is later called in the main function.

SCREENSHOT OF FOLDER:

Plots for o2, N2 and Co2 species

CO2

O2

N2

CONCLUSION:

So here we were able to parse the data from the THERMO.dat file. Then using this data we were able to calculate the thermodynamic properties and also make plots for these properties with respect to the temperature.

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.