Challenge

Project 1 - Parsing NASA thermodynamic data

Aim:-

to parse the NASA thermodynamic data and to calculate the molecular weight of the species and to plot the cp,enthalpy,entropy for the local temperature range.

theory:-

Parsing: Parsing a file means reading in a data stream and building a memory model of the content of that data. This aims at facilitating perfoming some kind of transformation on the data. Parsing splits a file or other input into pieces of data that can be easily stored or manipulated.

These parsers are usually programmatically built based on particular data to read, analyse, transform, and provide more structured results. Now, with lots of open-source technologies and several active programming communities, we could find several data parsing tools online that can automate several business use-cases for free. However, when the data is complex, we might need to write some additional rules and conditions, which are sometimes challenging.

Parsers have different algorithms that each have their strengths and weaknesses. Usually, there are two strategies; top-down parsing and bottom-up parsing. Both are defined using the parse tree as generated by the parser.

A top-down parser functions

to identify the root of the parse tree first and then goes to the subtrees and then the tree's leaves. In comparison, a bottom-up parser begins from the bottom of the tree and works its way up until the tree's root. This is how usually we parse through different kinds of files.

entropy:-a thermodynamic quantity representing the unavailability of a system's thermal energy for conversion into mechanical work, often interpreted as the degree of disorder or randomness in the system.

clear all
close all
clc

%Input
R=8.314; % Gas Constant
% Reading data file
% open file and reading THERMO.dat file.
f1 fopen('THERMO.dat', 'r')
get fgetl(f1);
% Now Reading Temperature from this file
temp = fgetl(f1);
%spliting
s = strsplit(temp);
% converting strings cells into numbers
templow str2num(s{2)):
tempmid str2num(s(3));
temphigh str2num(s{4});
% Temperature Range T= linspace(templow, temphigh, 1000);
%Skipping comment lines 
for i=1:3
get=fgetl(f1);
end
% Reading the Species
for j=1:53 tline fgetl(f1);
A-strsplit(tline,' '); spliting into cell array
species (A{1});
% To read the name of the species.
% Converting string to number lowtemp = str2num(A(end-3)):
midtemp str2num(A(end-2));
hightemp = str2num(A{end-1});
tlinel = fgetl(f1); % getting next line a strfind(tline1, 'E');
% Finding the string
% Finding First 7 higher and second 7 lower coefficients.
%Finding Higher coefficients
altline1(1:a(1)+3); 
a1 =str2num(at);
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(25);
tline2 fgetl(f1);
b = strfind(tline2, 'E');
a6 =tline2(1:b(1)+3);)
a6 =str2num(a6); 
a7 =tline2(b(1)+4:b(2)+3);
a7 =str2num(a7);
% Finding Lower coefficients:
a8 =tline2(b(2)+4:b(3)+3);
a8 =str2num(28);
a9 =tline2(b(3)+4:b(4)+3);
a9 =str2num (29);
a10 =tline2(b(4)+4:b(5)+3); 
a10 =str2num(a10);

tline3 fgetl(f1);
cstrfind(tline3, 'E');
a11 =str2num(11);
a12 =tline3(c(1)+4:C(2)+3);
a12 =str2num(a12);
a13 =tline3(c(2)+4:c(3)+3):
a13 = str2num(a13);
a14 =tline3(c(3)+4:c(4)+3); 
a14 =str2num(a14);
% calculate specific heat.
Cp =Specific_heat(a1,a2, a3, a4, a5, a8,a9, a10.a11,a12,T,R,tempmid);
% calculate Entropy
S = Entropy(al,a2,a3 ,a4,a5 ,a7, a8,a9,10,11,a12,a14,T,R, tempmid);
% claculate Enthalpy
H = Enthalpy (al,a2 ,a3 ,a4 ,a5,a6,a8,a9, a10,a11,a12,a13, T,R, tempmid);
% Calculate Molecular weight of the Species W Molecular weight(species);
% writing molecular weight file Mw_file = fopen( 'Molecular weight.txt", 'w');
fprintf(MW_file, 'Molecular weight of %s is %d', species, W); fclose(Mw_file); % Closing the file
%Plotting Cp, H and S with Temperature % Saving in a folder
cd('C:/Users/Mudit Verma/Desktop/skill lync/Species') % changing directory
mkdir (species); %creating directory.
cd(species);
% Plot 1 Cp vs T
figure(1)
plot(T, Cp, 'linewidth',2, 'color', 'b'); 
xlabel(Temperature(K)');
ylabel('Specific Heat (KJ)';
title(sprintf('Specific heat vs Temperature range of %s',species));
grid on
saveas (figure(1), 'Specific Heat.jpg');
% Plot 2 5 vs. T figure(2)
plot(1,5, 'linewidth',2,'color', 1);
xlabel('Temperature');
ylabel('Entropy(KJ/mol-K)');
title(sprintf('Entropy vs Temperature range of %s', species)); 
grid on
saveas (figure(2), 'Entropy.jpg');
% Plot 3 Cp vs T
figure(3) plot(T,H, 'linewidth',2,'color','g');
xlabel('Temperature');
ylabel('Enthalpy (kJ/mol)');
title(sprintf('Enthalpy vs temperature range of %s',species));
grid on
Temperature range of %s' species));
saveas (figure(3), 'Enthalpy.jpg');
cd('C:/Users/Mudit Verma/Desktop/skill lync') 
%Changing directory to Original matlab

% Molecular weight 
W = Molecular_weight(species)
end

steps:-

• Firstly, we will Input the parameter R and we will open a file THERMO.dat file and reading this fileusing fopen command.
• Then, we will read first THERMO using fgetl command and then we read temperature file and we will split the temperatures using strsplit command to convert it into cell array and then we will convert this string to number using str2num command to find low, high and mid temperatures.
• Then we will assign temperature range using linspace command. Then we run loop to skip command .ines the data file using fgetl command inside the loop.
• Now, we will run the loop to find 53 element in the data file by assigning fgetl command and then spliting into the cell array to find the species line and then find the species name and then find the number of the temperatures in the species line.
• Then we read the new line. In order to read the coefficient in the data file we will first find the 'E' string using strfind command to find before and after numbers of the coefficients then we will find remaining 14 coefficients and convert them to numbers from strings.
• Out of which we will find first 7 Coefficients which are for Higher temperature and then Second 7 Coefficients which are for Lower temperature.
• Now we will specify Specific heat Cp, Entropy S, Enthalpy H functions to find these parameters using these 14 coefficients for Lower and higher Temperature. then we will specify molecular weight W function to find the Molecular weight of the different species.
• Now we will write the Molecular weight.txt file and fprintf all the molecular weights of the species, and then close the txt file using fclose command.
• Now we change the directory using cd command and then creating directory folder where we have to save our files using mkdir command and then we will change the directory to this created folder.
• Now, we will plot Specific heat, Entropy and Enthalpy with the Temperature for different species. We will use scanf command to in the title command to create different species title.
• Then we will use saveas command to save the plots of different species in the directory folder. Now we will change the directory to which our main code file runs in the MATLAB.
%function to find specific heqat:-

function Cp = Specific_heat (a1, a2, a3, a4, a5, a8, a9, a10, a11,a12, T, R, tempmid)
% calculating specific heat
% calculating specific heat for higher and lower temperature repectively.
if (T<= tempmid)
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 S = Entropy (a1, a2, a3, a4, a5, a7, a8,a9, a10, a11,a12, a14, T, R, tempmid)
% calculating entropy
% calculating entropy for higher and lower temperature repectively.
if (T<tempmid)
S = R* (a8.*log (T) + (a9*T) + ((a10* (T).^2)/2) + ((a11*(T).^3)/3) + ((a12* (T).^4)+a14)/4)
S = R* (a1.*log(T) + (a2*T) + ((a3* (T).^2)/2) + ((a4* (T).^3)/3) + ((a5* (T).^4)/4)+a7); 
else
end
function H = enthalpy (a1, a2, a3, a4, a5, a7, a8,a9, a10, a11,a12, a14, T, R, tempmid)
% calculating enthalpy
% calculating enthalpy for higher and lower temperature repectively.
if (T<tempmid)
H = R*T.* (a8.*log (T) + (a9*T) + ((a10* (T).^2)/2) + ((a11*(T).^3)/3) + ((a12* (T).^4))/5);+((a13./T))
else
H = R*T.* (a1.*log(T) + (a2*T) + ((a3* (T).^2)/2) + ((a4* (T).^3)/3) + ((a5* (T).^4)/4)+a7); 
end
end
function W =Molecular_weight(species)
% Defining Atomic name of the species
atomic_name = ['H', 'C', '0', 'N', 'Ar'];
% Defining Atomic masses of main species. atomic_weight = [1.008 12.011 15.999 14.007 39.948];
W=0; % Molecular weight starting range
for i=1:length(species) % Loop runs to the length of the species 
    for j=1:length(atomic_name) % Loop runs to the length of the atomic names 
         if strcmp(species (i), atomic_name(j)) %function to compare 2 strings 
              W = W + atomic_weight(j);
position = j:
end
end n = str2num(species);
if n>1
W = W + atomic_weight(position)*(n-1);
end.
end
% Now we will find if there is more element in the species
end
fprintf(['Molecular Weight of %s:-' ,species);
    fprintf('%f',W);
disp(' ')
end
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.