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.