Challenge

Project 1 - Parsing NASA thermodynamic data

Aim : To write the Mathlab code for parsing the NASA thermodynamic data file and extract 14 coefficients of thermodynamic properties like specific heat, enthalpy and entropy for all the species in the given data file.

And also to find the molecular mass of each species and finally to plot the graph of specific heat, enthalpy and entropy with respect to temperature.

Theory :

NASA came up with polynomials that can be used to evaluate thermodynamic propities. These coefficients are utilized to calculate the specific heat ,enthalpy and entropy for a particular element. Each element has its own range of local temperatures. Thermodynamics data is usually presented as a table or chart of function value for one mole of a substance. A thermodynamic datafiles is a set of equation parameter for which the numerical data values can be calculated.

  •  Based on the given formulas we are evaluating the cp,enthalpy and entropy.

Function for specific heat(cp) programe code :

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

% calculating specific heat for higher and lower temperatures
if (T<=global_mid_temp)
    Cp = R.*(a8+a9.*T+a10.*T.^2+a11.*T.^3+a12.*T.^4);
else
    Cp = R.*(a1+a2.*T+a3.*T.^2+a4.*T.^3+a5.*T.^4);
end

Function for enthalpy(H) programe code :

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

% calculating Enthalpy for higher and lower temperatures
if(T<=global_mid_temp)

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

Function for entropy (S) program code :

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

% calculating entropy for higher and lower temperatuers

if(T<=global_mid_temp)
    S = R.*(a8.*log(T)+a9.*T+a10.*(T.^2)./2+a11.*(T.^3)./3+a12.*(T.^4)./4);
else
    S = R.*(a1.*log(T)+a2.*T+a3.*(T.^2)./2+a4.*(T.^3)./3+a5.*(T.^4)./5+a7);
end

Function code for calculating the Molecular Weight :

In this molecular weight is calculated using function command here atomic name and atomic weight are given as inputs to the species. A loop is created for calculating molecular weights of species.

#code

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

Main programe :

  • We use THERMO.dat command to open the file.
  • R is called as universal gas constant.
  • And T is called as temperature.
  • Firstly to read the data file fopen command is used and to get the information fgetl is used.
  • Using strsplit we get th global temperatures and then using fgetl command we skip the lines which are not required.
  • Loop command is created to get the values of all the temperatures and coefficients present in the file.
  • To get the temperatures and coefficients values we use strfind to specify them accurately.
  • There are 53 species are present in the data file.
  • So the data is in string formate in order to convert it into a numbers str2double command is used.
  • To make a folder mkdir command is used by specifing the directory.
  • By using the plot command to plot O2,N2 and CO2.
  • Then te molecular weight is calculated by calling the molecular weight calculated function.
  • We use 'cd' to change or to store all the plots in the same folder of the dpecies.
  • 'fprintf' command is used to getting the outputs of the molecular weights.

Main code :

clear all
close all
clc

% R = universal gas constant
R = 8.314;

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

% to read lines
line1 = fgetl(f1);
line2 = fgetl(f1);

value = strsplit(line2,' ');

% to get global temperatures
global_low_temp = str2num(value{2})
global_mid_temp = str2num(value{3})
global_high_temp = str2num(value{4})

% temperature range
T = linspace(global_low_temp,global_high_temp,1000);

% these lines are not recognised
line3 = fgetl(f1);
line4 = fgetl(f1);
line5 = fgetl(f1);

% Reading species,calculating sprcific heat,enthalpy, entropy, 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);

    % calculating the specific heat(cp), enthalpy(H), entropy(s)
    Cp = Specific_heat(a1,a2,a3,a4,a5,a8,a9,a10,a11,a12,T,R,global_mid_temp);
    H = Enthalpy(a1,a2,a3,a4,a5,a6,a8,a9,a10,a11,a12,a13,T,R,global_mid_temp);
    S = Entropy(a1,a2,a3,a4,a5,a7,a8,a9,a10,a11,a12,a14,T,R,global_mid_temp);

    % calculating molucular weight and printing of it
    Molecular_weight = wt(name_of_species);
    fprintf('molecular weight of %s = %fn',name_of_species,Molecular_weight);

    
    % creating folder
    mkdir(name_of_species)
    cd(name_of_species)

    % plotting T vs cp

    figure(1)
    plot(T,Cp,'LineWidth',3,'Color','g')
   
    xlabel('Temperature(T)')
    ylabel('Specific heat(cp)')
    grid on
    title(name_of_species)
    saveas(figure(1),'specific heat.jpg');

    % poltting T vs H
    figure(2)
    plot(T,H,'LineWidth',3,'Color','r')
    
    xlabel('Temperature(T)')
    ylabel('Enthalpy(H)')
    title(name_of_species)
    saveas(figure(2),'Enthalpy.jpg');

    % plotting T vs S
    figure(3)
    plot(T,S,'LineWidth',3,'Color','b')
    
    xlabel('Temperature(T)')
    ylabel('Entropy(S)')
    title(name_of_species)
    saveas(figure(3),'Entropy.jpg');
    cd ..
end

Plot for O2 :

Plot for N2 :

Plot for CO2 :

 Species folders :

Work space :

Molecular weights :

Result :

Hence the parsing of the following NASA thermodynamic file is done and trhe following values are taken as output as per the concern the molecular weights of the following species are shown in the command window.

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.