Challenge

Project 1 - Parsing NASA thermodynamic data

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

Objective:

  1. To write a function that extract the 14 coefficients and calculate the enthalpy,entropy,specific heats for all the species in the NASA thermodynaic data file."THERMO.dat".
  2. To calculate the molecular weight of each species and display it in command window.
  3. To plot the specific heat,enthalpy,entropy for the local temperature range(low temperature:high temperture)specific for each species.
  4. To save the plots as images with appropriate names and dump them in seperate folders 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 programe.

Coding functions:

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

Cp=R*(a1+a2T+a3T^2+a4T^3+a5T^4)

Function for specific heat

%specific heat calculation function
function Cp = specificheat(a1,a2,a3,a4,a5,a8,a9,a10,a11,a12,T,R,global_medium_temp)
%comparing with global temperature
%if less than global temperature - minimum coefficients are taken
if T<=global_medium_temp
    Cp = R*(a8+(a9*T)+(a10*T.^2)+(a11*T.^3)+(a12*T.^4));
%else maximum coefficients are taken
else
    Cp = R*(a1+(a2*T)+(a3*T.^2)+(a4*T.^3)+(a5*T.^4));
end
end

2.Entropy: It is the measure of a system's thermal energy per unit temperature that is unavailable for doing useful work.

S=R*(a1lnT+a2T+a3T^2/2+a4T^3/3+a5T^4/4+a7)

Function for Entropy


function S = entropy_calculation(a1,a2,a3,a4,a5,a7,a8,a9,a10,a11,a12,a14,T,R,global_medium_temp)
%comparing with global temp
%if less than global temp - minimum coeffients are taken
if T<=global_medium_temp
    S=R*(a8.*log(T)+a9.*T+a10.*(T.^2)./2+a11.*(T.^3)./3+a12.*(T.^4)'/4+a14);
    %else maximum coefficients are taken  
else
    S=R*(a1.*log(T)+a2.*T+a3.*(T.^2)./2+a4.*(T.^3)./3+a5.*(T.^4)./4+a7);
end
end

3.Enthalpy:It is a property of a thermodynamic system,is equal to the system's internal energy plus the product of its pressure and volume.

H=R*T(a1+a2T/2+a3T^2/3+a4T^3/4+a5T^4/5+a6/T

Function for Enthalpy

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

4.Molecular Weight:

The molecular mass is the mass of given molecule.Different molecules of the same compound may have different molecular masses because they contain different isotpoes 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 = str2num(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(' ');      

Main code:

clear all
close all
clc
mkdir('C:\Users\madhu\Desktop\temp programing\Nasa file parsing')
f1 = fopen('THERMO.dat','r');
gt = fgetl(f1);
global_temp = fgetl(f1);
%spliting
t=strsplit(global_temp);
%converting string cells to number 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
T=linspace(global_low_temp,global_high_temp,1000);
%Universal Gas constant
R=8.314;
%Skipping three command 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 FIRST 7 coefficients 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(a(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=findstr(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,T,R,global_medium_temp);
%Enthalpy calculation.
H=Enthalpy(a1,a2,a3,a4,a5,a6,a8,a9,a10,a11,a12,a13,T,R,global_medium_temp);
%Entropy calculation
S=entropy_calculation(a1,a2,a3,a4,a5,a7,a8,a9,a10,a11,a12,a14,T,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);
%ploting(CP,H,S,T,Species_SP)
%saving as a folder
cur_dir=pwd;
mkdir(Species_SP);
cd(Species_SP);
%Plot,specific heat(cp)vs temperture range(Temp)))
figure(1)
plot(T,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),'specief heat.jpg');
%plot 2,Enthalpy(H)vs temperature range (temp)
figure(2)
plot(T,H,'linewidth',2,'color','g');
xlabel('Temperture [K]');
ylabel('Enthalpy in [KJ/Mol)]');
title(sprintf('Varying Enthalpy with temperature range of %s',Species_SP));
grid on
saveas(figure(2),'Enthalpy.jpg');
%plot3,Entropy(S)vs Temperature range (temp)
figure(3)
plot(T,S,'linewidth',2,'color','b');
xlabel('Temperture[K]');
ylabel('Entropy in[KJ/(mol-K)]');
title(sprintf('Varying Entropy with temperture 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('%Sn %Sn %fn','Species','Molecular mass',M)
fclose(f2);
end

Code Explanation:

  1. 'clear all'- Clear all the variables from workspace,
  2. 'close all'- Clsoes all the plots and figures,
  3. 'clc'- Clears the command window.
  4. Making a directory using 'mkdir' with location address.
  5. After that, reading the text file'Thermo.dat' file and opening it by using'fopen' and 'r' as reading command.
  6. For reading the line in a text file using 'fgetl'.
  7. To obtain the temperature range from the Thermo.dat file,using 'strsplit' to split the temperature into particular string cell.
  8. Used 'str2num' for convert string cell to number.
  9. Divided the temperature into a string and converted to a number so that the temperature values can be used separately to solve the NASA thermodynamics.
  10. Using 'for & end' loops to skip the next three lines from the text file.
  11. Reading all the 53 species to plot specific heat(Cp),Entropy(E),Enthalpy(H) with temperature values and to find the molecular weights.
  12. Used 'for' loop to to read 53 species.
  13. Used 'strfind' to find the string.
  14. Using 'linspace' to specified the temperature range from low to high.
  15. Adding Universal Gas constant(R)
  16. Extracted lower and higher temperature coefficient by reading line by line from the species.
  17. Calling specific heat,Entropy,Enthalpy function codes.
  18. Calculating Molecular weight.

Output-

Screenshot of the window where all the folders are saved -

Specific heat,Entropy & Enthalpy Plots for 02:

(a)

(b)

(c)

Specific heat,Entropy & Enthalpy plots for N2:

(a)

(b)

(c)

Specific heat,Entropy & Enthalpy plots for Co2:

(a)

(b)

(c)

Molecular weight of all Species:

References:

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

https://in.mathworks.com/matlabcentral/answers/317006-create-new-folders-by-mkdir

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

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.