Challenge

Project 1 - Parsing NASA thermodynamic data

 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. You will be reading this file NASA thermodynamic data(Tip: use fopen and fgetl). The formulae are shown below.

 Here R is the universal gas constant, T is the temeprature

Here R is the universal gas constant, T is the temperature.


 Calculate the molecular weight of each species and display it in the command window.

  • Plot the Cp, Enthalpy, and Entropy for the local temperature range (lowtemperature: high temperature) concrete for each species.
  •  Preserve the plots as images with felicitous names and dump them in separate folders for each species with a congruous designation. All of these should be engendered automatically.
  • The main program that you will submit will just take the "THERMO.dat" file as an input and engender Cp, H, and S plots.

NASA Thermodynamic data File:

'THERMO.dat' record is an information document containing 14 coefficients for 53 unique components given by NASA. These coefficients are used to compute the particular warmth, enthalpy, and entropy for a specific component. Every component has its own scope of neighborhood temperature.

 Process of explasation:

Data parsing:

Data parsing is a process of extracting data from a file and utilize that data for further calculation or study or making some consequential conclusions and how that information can be utilized in a computer program.

MATLAB Program:

NASA main program:

% Program to Parse NASA's thermodynamic data
clear all
close all
clc

% Universal Gas constant(R)
R = 8.314;

% loading data file
File = fopen('THERMO.dat','r');

% reads 1st line
fgetl(File);

% collect Global temprature
tline = fgetl(File);
Global_Temp = strsplit(tline,' ');
Gobal_low_temp = str2num(Global_Temp{2});
Gobal_mid_temp = str2num(Global_Temp{3});
Gobal_high_temp = str2num(Global_Temp{4});

% skip comments
fgetl(File);
fgetl(File);
fgetl(File);

for i = 1 : 53  % to iterate through all 53 elements

    % reads species
    line1 = fgetl(File);
    species = get_species(line1);
    
    % calculate molecular weight and print it
    molecular_weight = get_molecular_weight(species);
    fprintf('\nMolecular Weight of %s is : %d',species,molecular_weight)
    
    % Collect local temprature range
    local_temp_range = get_local_temp_range(line1);

    % collect Coefficient data
    a(1:5) = get_coeff(fgetl(File));
    a(6:10) = get_coeff(fgetl(File));
    a(11:14) = get_coeff(fgetl(File));

    % Temprature 
    T = linspace(local_temp_range(1),local_temp_range(3),500);

    % Specific Heat
    Cp = Specific_heat(a, local_temp_range, T, R);

    % Enthalpy
    H = Enthalpy(a, local_temp_range, T, R);

    % Entropy
    S = Entropy(a, local_temp_range, T, R);

    % Plotting and saving in folder

    current_dir = pwd;
    mkdir(species);     % creates new folder with species name
    cd(species);        % open that folder

    % plotting temprature vs specific heat
    figure(1)
    plot(T,Cp,'linewidth',2,'color','b')
    xlabel('Temprature[K]');
    ylabel('Specific Heat[KJ/Kg-K]');
    title(sprintf('Temprature vs Specific Heat plot for %s',species))
    grid on

    % Save jpg of figure(1)
    saveas(figure(1), 'Specific Heat.jpg')

    % plotting temprature vs enthalpy
    figure(2)
    plot(T,H,'linewidth',2,'color','b')
    xlabel('Temprature[K]');
    ylabel('Enthalpy[KJ/Kg]');
    title(sprintf('Temprature vs Enthalpy plot for %s',species))
    grid on

    % Save jpg of figure(2)
    saveas(figure(2), 'Enthalpy.jpg')

    % plotting temprature vs entropy
    figure(3)
    plot(T,S,'linewidth',2,'color','b')
    xlabel('Temprature[K]');
    ylabel('Entropy[KJ/Kg-K]');
    title(sprintf('Temprature vs Entropy plot for %s',species))
    grid on

    % Save jpg of figure(3)
    saveas(figure(3), 'Entropy.jpg')

    cd(current_dir) % goes back to parent folder

end

 Function for calaculating the Molecular weght:

% for molecular weight of each species and atoms

function molecular_weight = get_molecular_weight(species)

molecular_weight = 0;
Atoms = ['O', 'H', 'N', 'C', 'S', 'A'];
Atomic_weights = [16, 1, 14, 12, 32, 40];

for i = 1 : length(species)
    for j = 1 : length(Atoms)
        if strcmpi(species(i), Atoms(j))
            molecular_weight = molecular_weight + Atomic_weights(j);
            mark = j;
        end
    end
    k = str2num(species(i));
        if k>1
            molecular_weight = molecular_weight + Atomic_weights(mark)*(k-1);
        end
        
    
end

 Function for the cp (specfic heat ):

function Cp = Specific_heat(a, local_temp_range, T, R)

for i = 1 : length(T)
    if T(i) <= local_temp_range(2)
        Cp(i) = R*(a(8) + a(9)*T(i) + a(10)*T(i)^2 + a(11)*T(i)^3 + a(12)*T(i)^4);
    else
        Cp(i) = R*(a(1) + a(2)*T(i) + a(3)*T(i)^2 + a(4)*T(i)^3 + a(5)*T(i)^4);
    end
end

 Function for calculating Enthalpy:

function H = Enthalpy(a, local_temp_range, T, R)

for i = 1 : length(T)
    if T(i) <= local_temp_range(2)
        H(i) = R*T(i)*(a(8) + a(9)*T(i)/2 + a(10)*(T(i)^2)/3 + a(11)*(T(i)^3)/4 + a(12)*(T(i)^4)/5 + a(13)/T(i));
    else
        H(i) = R*T(i)*(a(1) + a(2)*T(i)/2 + a(3)*(T(i)^2)/3 + a(4)*(T(i)^3)/4 + a(5)*(T(i)^4)/5 + a(6)/T(i));
    end
end

 Function for calaulating Entropy: 

function S = Entropy(a, local_temp_range, T, R)

for i = 1 : length(T)
    if T(i) <= local_temp_range(2)
        S(i) = R*(a(8)*log(T(i)) + a(9)*T(i) + a(10)*(T(i)^2)/2 + a(11)*(T(i)^3)/3 + a(12)*(T(i)^4)/4 + a(14));
    else
        S(i) = R*(a(1)*log(T(i)) + a(2)*T(i) + a(3)*(T(i)^2)/2 + a(4)*(T(i)^3)/3 + a(5)*(T(i)^4)/4 + a(7));
    end
end

 Function for calaculating Species:

function species = get_species(line)

temp = strsplit(line, ' ');
species = (temp{1});

end

Function for calculating coeffcients:

function [a] = get_coeff(line)

E = findstr(line,'E');
a(1) = str2num(line(1:E(1)+3));
for i = 1 : length(E)-1
    temp = str2num(line(E(i)+4:E(i+1)+3));
    a(i+1) = temp;
end

end

 Function for calaculating Low-Temperture Range: 

function [temp] = get_local_temp_range(line)

split = strsplit(line, ' ');
l = length(split);
mid_temp = str2num(split{l-1});
high_temp = str2num(split{l-2});
low_temp = str2num(split{l-3});

temp = [low_temp mid_temp high_temp];
end

 Steps:

1) Start the program with 'clear all','close all', and 'clc' orders

2) The main incentive for input is the estimation of widespread gas steady for example 8.314 J/mol-k.

3) NASA's information record 'THERMO.dat' is opened utilizing 'fopen()'.

4) Using 'fgetl()' we move to the following line.

5) For circle is utilized as the procedure should be rehashed for all the 53 components.

6) Data required like species name, worldwide and neighborhood temperatures are gathered utilizing orders like 'strsplit()' which is utilized to part the line into a cluster, and utilizing ordering of the line we can get the necessary information.

7) 'str2num()' is utilized to change over string information into numeric information. It is utilized in extraction a1 to a14 values and furthermore for finding the quantity of particles in the components like N2. The quantity of particles of N is 2.

8) The capacities are made for sub-atomic weight and properties (enthalpy, entropy, and explicit warmth where dependent on the low-temperature run the coefficients to be utilized for count of the properties are resolved).

9) The capacities return the qualities to the fundamental program and the outcome is imprinted in the order window.

10) Plots are plotted for temperature versus (enthalpy, entropy, and explicit warmth) individually for every single component and they are spared in independent envelopes utilizing save as order by changing the registry before sparing and exchanging back to the first catalog subsequent to sparing so that, the procedure is rehashed for all species.

Results:

Showing the command window output:

File are automatically cerated :

Plots :

N2

O2

CO2:

 There are no complicated error found and typo error.

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.