Challenge

Project 1 - Parsing NASA thermodynamic data

Aim of the project:

We are required to write a code to parse the thermodynamic data file and calculate the thermodynamic properties of various gas species.

Objective

  •  Write a function that extracts the 14 coefficients and calculates the enthalpy, entropy, and specific heats for all the species in the data file.
  •  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 (low temperature: high temperature) specific for each species.

  •  Save the plots as images with appropriate names and dump them in separate folders for each species with a proper name. All these should be generated automatically.

  •  The main program you submit will just take the "THERMO.dat" file as an input and generate Cp, H, and S plots.

  • Screenshot of the window where all the folders are saved.
  • Plots for o2, N2, and Co2 species.

The formulas known to us are given below:

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 program.

                      

It indeed is very hard trying to find necessary information from a data file if it is not organized. Here comes the necessity of parsing a file.

Parsing, syntax analysis, or syntactic analysis is the process of analyzing a string of symbols, either in natural language, computer languages, or data structures, conforming to the rules of formal grammar. Parse essentially means to ''resolve (a sentence) into its component parts and describe their syntactic roles''. The term parsing comes from Latin pars (orationis), meaning part (of speech). Within computational linguistics the term is used to refer to the formal analysis by a computer of a sentence or other string of words into its constituents, resulting in a parse tree showing their syntactic relation to each other, which may also contain semantic and other information. Some parsing algorithms may generate a parse forest or list of parse trees for a syntactically ambiguous input.

Parsing a file means reading in a data stream of some sort and building an in-memory model of the semantic content of that data. This aims at facilitating performing some kind of transformation on the data.

Process of File Parsing:

  • Step 1 - Define the function
  • Step 2 - Create an InputParser object
  • Step 3 - Add inputs to the scheme.
  • Step 4 - Set properties to adjust parsing.
  • Step 5 - Parse the inputs. 
  • Step 6 - Use the inputs in the function.
  • Step 7 - Calling function. 

NASA Thermodynamic File:-

THERMO.dat file is a data file containing 14 coefficients for 53 different elements given by NASA. These coefficients are utilized to calculate a particular element's specific heat, enthalpy & entropy. Each element has its own range of local temperatures. Below a screenshot of the THERMO.dat file is displayed.

NASA thermodynamics file which is THERMO.dat file in which there are temperature range and 53 species are given in these data and each species contains 14 coefficients and temperature ranges and we have to parse these 14 coefficients to find Specific heat, Entropy and Enthalpy using formula as:-

where,

           R = Universal Gas constant 

           T = Temperature

           Cp = Specific heat (KJ)

            S = Entropy(KJ/mol-K)

            H = Enthalpy(KJ/mol)

            a(i) = Coefficients  where, i = 1 to 14

 List of 53 Elements contained in 'THERMO.dat' file:

AR              C                     C2H                 C2H2               C2H3               C2H4 

C2H5          C2H6               C3H7                C3H8               CH                  CH2    

CH2(S)       CH2CHO          CH2CO              CH2O               CH2OH            CH3

CH3CHO      CH3O              CH3OH              CH4                 CN                   CO

CO2             H                    H2                    H2CN              H2O                 H2O2

HCCO          CCOH              HCN                  HCNN              HCNO              HCO

HNCO          HNO                HO2                  HOCN              N                    N2

N2O            NCO                 NH                   NH2                 NH3                NNH

NO              NO2                 O                     O2                   OH

Specific Heat:-

The specific heat is the amount of heat per unit mass required to raise the temperature by one degree Celsius. The relationship between heat and temperature change is usually expressed in the form shown below where c is the specific heat.

Cp = R*(a1 + (a2*T) + (a3*(T).^2) + (a4*(T).^3) + (a5*(T).^4))

Function Code for Specific Heat:

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

Explanation: We made a function named 'Specificheat' which will have output 'Cp'. By using the formula provided to us we calculate Cp. We know the first 7 are higher temperature coefficients in the data file and the rest 7 are lower temperature coefficients. So we use a for loop to execute that logic. 

Entropy:-

Entropy measures a system's thermal energy per unit temperature that is unavailable for doing valuable work. Because work is obtained from ordered molecular motion, the amount of entropy is also a measure of a system's molecular disorder or randomness.
 
S = R*(a1.*log(T) + (a2*T) + ((a3*(T).^2)/2) + ((a4*(T).^3)/3) + ((a5*(T).^4)/4) + a7)
 
Function Code for Entropy:
 
% Entropy Calculation function

function S = Entropy_calc(a1,a2,a3,a4,a5,a7,a8,a9,a10,a11,a12,a14,Temp,R,global_medium_temp)         
% Comparing with global temperature
% If less than global temperature - minimum coefficients are taken
 
    if Temp <= global_medium_temp
        S = R.*(a8.*log(Temp) + (a9.*Temp) + (a10*((Temp).^2)/2) + (a11*((Temp).^3)/3) + (a12*((Temp).^4)/4) + a14);
    else
 
% Else - maximum coefficients are taken
        S = R.*(a1.*log(Temp) + (a2.*Temp) + (a3*((Temp).^2)/2) + (a4*((Temp).^3)/3) + (a5*((Temp).^4)/4) + a7);
end
 
Explanation: We use the same logic as before but with the formula for the entropy provided to us. 
 

Enthalpy:-
 
Enthalpy, a property of a thermodynamic system, is equal to the system's internal energy plus the product of its pressure and volume. In a system contained so as to prevent mass transfer, for processes at constant pressure, the heat absorbed or released equals the change in enthalpy.
 
H = R*T.*(a1 + ((a2*T)/2) + ((a3*(T).^2)/3) + ((a4*(T).^3)/4) + ((a5*(T).^4)/5) + ((a6./T)))
 
Function code for Enthalpy:

% Enthalpy Calculation function

function H = Enthalpy(a1,a2,a3,a4,a5,a6,a8,a9,a10,a11,a12,a13,Temp,R,global_medium_temp)    
% Comparing with global temperature
% If less than global temperature - minimum coefficients are taken
 
       if Temp <= global_medium_temp
        H = R*Temp.*(a8 + ((a9*Temp)/2) + ((a10*(Temp).^2)/3) + ((a11*(Temp).^3)/4) + ((a12*(Temp).^4)/5) +((a13./Temp)));
       else
% Else maximum coefficients are taken 
           
        H = R*Temp.*(a1 + ((a2*Temp)/2) + ((a3*(Temp).^2)/3) + ((a4*(Temp).^3)/4) + ((a5*(Temp).^4)/5) +((a6./Temp)));
end​
 Explanation: Here also we do the same thing using the same logic but use the formula for enthalpy. 

4. Molecular Weight:

The molecular mass is the mass of a given molecule: it is measured in daltons. Different molecules of the same compound may have different molecular mass because they contain different isotopes of an element.

Function code 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
         
         % Standard Atomic Number
         Atomic_Weight = [1.008 12.011 15.999 14.007 39.948];     
         % Starting Range of Molecule           
         Molecularweight = 0;                                   
        
         �ding 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      
end
Explanation: We first store the atom names and their respective atomic weights. We use 'for loops' to iterate and an if-else statement to compare the strings to calculate the final molecular weight in total. 
 
Screenshots of the THERMO.dat file is provided below: 
 
 
 
 
Main Code:
close all 
clc

% We initialize by reading the 'THERMO.dat' file
% We use 'r' for reading the file
f1 = fopen('THERMO.dat', 'r');
gt = fgetl(f1); %Getting the header for the file

% We obtain the temperatures by reading the Header Information
% Getting the first line as the 'global_temp'  
global_temp = fgetl(f1);

% We split the string into a matrix for convenience
t = strsplit(global_temp);

% Converting the cells in the matrix using str2num
global_low_temp = str2num(t{2});
global_medium_temp = str2num(t{3});
global_high_temp = str2num(t{4});

% We assume the temperature range and declare the gas constant
Temp = linspace(global_low_temp,global_high_temp,1000);
R = 8.314; %Unit -> J/mol-K

% There are three comment lines in the file which we need to skip
% We can just use a for loop to skip through these lines
for i = 1:3
    gt = fgetl(f1);
end

for i = 1:53
    % For the first iteration, first element will be picked
    gt = fgetl(f1);
    A = strsplit(gt,' ');
    Species_SP = (A{1})
    
    line_1 = fgetl(f1);
    % Finding 'E' to be replaced
    a = strfind(line_1, 'E');
    % Extracting higher and lower temperature coeffiecients
    % 1st line - We take string 3 letters more after finding 'E's
    % This will make the first 7 co-efficients
    % 1st line for the current iteration
    a1 = line_1(1:a(1)+3);
    a1 = str2num(a1);
    % 2nd line for the current iteration
    a2 = line_1(a(1)+4:a(2)+3);
    a2 = str2num(a2);
    % 3rd line for the current iteration
    a3 = line_1(a(2)+4:a(3)+3);
    a3 = str2num(a3);
    % 4th line for the current iteration
    a4 = line_1(a(3)+4:a(4)+3);
    a4 = str2num(a4);
    % 5th line for the current iteration
    a5 = line_1(a(4)+4:a(5)+3);
    a5 = str2num(a5);
    
    % Going to the second line 
    line_2 = fgetl(f1);
    % 2nd line - We take string 3 letters more after finding 'E's
    b = strfind(line_1,'E');
    % 6th line for the current iteration
    a6 = line_2(1:b(1)+3);
    a6 = str2num(a6);
    % 7th line for the current iteration
    a7 = line_2(a(1)+4:b(2)+3);
    a7 = str2num(a7);  
    
    % This will make the second 7 co-efficients
    % 8th line for the current iteration
    a8 = line_2(b(2)+4:b(3)+3);         
    a8 = str2num(a8);
    % 9th line for the current iteration
    a9 = line_2(b(3)+4:b(4)+3);
    a9 = str2num(a9);
    th line for the current iteration
    a10 = line_2(b(4)+4:b(5)+3);
    a10 = str2num(a10); 
    
    % Going to the third line
    line_3 = fgetl(f1);
    % 3rd line - We take string 3 letters more after finding 'E's
    c = strfind(line_1,'E');
    th line for the current iteration
    a11 = line_3(1:c(1)+3);
    a11 = str2num(a11);
    th line for the current iteration
    a12 = line_3(c(1)+4:c(2)+3);
    a12 = str2num(a12);
    th line for the current iteration
    a13 = line_3(c(2)+4:c(3)+3);
    a13 = str2num(a13);
    th line for the current iteration
    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,Temp,R,global_medium_temp);
 
    % Enthalpy calculation
    H = Enthalpy(a1,a2,a3,a4,a5,a6,a8,a9,a10,a11,a12,a13,Temp,R,global_medium_temp);
 
    % Entropy calculation
    S = Entropy_calc(a1,a2,a3,a4,a5,a7,a8,a9,a10,a11,a12,a14,Temp,R,global_medium_temp);

    �lculating 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);
    
    % plotting(CP,H,S,Temp,Species_SP)
    % Saving as a folder
           cur_dir = pwd;
           mkdir(Species_SP);
           cd(Species_SP);
    
    % Plot 1, Specific heat (CP) vs Temperature Range (Temp)
 
        figure(1)
        plot(Temp,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),'Specific Heat.jpg');
        
     % Plot 2, Enthalpy (H) vs Temperature Range (Temp)
 
        figure(2)
        plot(Temp,H,'linewidth',2,'color','g');
        xlabel('Temperature [K]');
        ylabel('Enthalpy in [kJ/(mol)]');
        title(sprintf('Varying Enthalpy with Temperature Range of %s',Species_SP));
        grid on
        saveas(figure(2),'Ethalpy.jpg');
        
     % Plot 3, Entropy (S) vs Temperature Range (Temp)
 
        figure(3)
        plot(Temp,S,'linewidth',2,'color','b');
        xlabel('Temperature [K]');
        ylabel('Entropy in [kJ/(mol-K)]');
        title(sprintf('Varying Entropy with Temperature Range of %s',Species_SP));
        grid on
        saveas(figure(3),'Entropy.jpg');
 
        cd(cur_dir); 
        
     % Molecular weight
        
      M = Molecular_weight(Species_SP);
      fprintf('molecular weight %s :',Species_SP);
      fprintf('f\n\n',M);
end
 
Step by Step Explanation:

Syntax Used during Coding

Fopen :

Open a file or obtain information about open files

‘r’ :

Open the file for reading

fgetl

Read line from file

strsplit

Split string or character vector at specified delimiter

str2num

Convert character array or string to numeric array

 

strfind

Find one string within another

linspace

Generate linearly spaced vectors

fprintf

Write formatted data to file

pwd

Identify current directory

mkdir

Make new directory

cd

Change working directory

  • close all
    clc

We first start by resetting and clearing everything

  • % We initialize by reading the 'THERMO.dat' file
    % We use 'r' for reading the file
    f1 = fopen('THERMO.dat', 'r');
    gt = fgetl(f1); %Getting the header for the file

We then read the 'THERMO.dat' file by opening it and getting the header for the file.

  • % We obtain the temperatures by reading the Header Information
    % Getting the first line as the 'global_temp'
    global_temp = fgetl(f1);

After the header line in the file, we see the global temperatures are given in the next line. So we get the next line and store it to 'global_temp'.

  • % We split the string into a matrix for convenience
    t = strsplit(global_temp);
We then use 'strsplit' to split the global temperatures.
  • % Converting the cells in the matrix using str2num
    global_low_temp = str2num(t{2});
    global_medium_temp = str2num(t{3});
    global_high_temp = str2num(t{4});

We then convert the strings into numbers for usage. Three split strings are converted into numbers and are stored into variables.

  • % We assume the temperature range and declare the gas constant
    Temp = linspace(global_low_temp,global_high_temp,1000);
    R = 8.314; %Unit -> J/mol-K

We now take a temperature range array by using linspace and declare the Gas Constant.

  • % There are three comment lines in the file which we need to skip
    % We can just use a for loop to skip through these lines
    for i = 1:3
    gt = fgetl(f1);
    end
 The next three comment lines are skipped using a for loop which iterates thrice.
 
 A detailed explanation of the main for loop:
 
  • for i = 1:53
    % For the first iteration, first element will be picked
    gt = fgetl(f1);
    A = strsplit(gt,' ');
    Species_SP = (A{1})

    line_1 = fgetl(f1);
    % Finding 'E' to be replaced
    a = strfind(line_1, 'E');
    % Extracting higher and lower temperature coeffiecients
    % 1st line - We take string 3 letters more after finding 'E's
    % This will make the first 7 co-efficients
    % 1st line for the current iteration
    a1 = line_1(1:a(1)+3);
    a1 = str2num(a1);
    % 2nd line for the current iteration
    a2 = line_1(a(1)+4:a(2)+3);
    a2 = str2num(a2);
    % 3rd line for the current iteration
    a3 = line_1(a(2)+4:a(3)+3);
    a3 = str2num(a3);
    % 4th line for the current iteration
    a4 = line_1(a(3)+4:a(4)+3);
    a4 = str2num(a4);
    % 5th line for the current iteration
    a5 = line_1(a(4)+4:a(5)+3);
    a5 = str2num(a5);

    % Going to the second line
    line_2 = fgetl(f1);
    % 2nd line - We take string 3 letters more after finding 'E's
    b = strfind(line_1,'E');
    % 6th line for the current iteration
    a6 = line_2(1:b(1)+3);
    a6 = str2num(a6);
    % 7th line for the current iteration
    a7 = line_2(a(1)+4:b(2)+3);
    a7 = str2num(a7);

    % This will make the second 7 co-efficients
    % 8th line for the current iteration
    a8 = line_2(b(2)+4:b(3)+3);
    a8 = str2num(a8);
    % 9th line for the current iteration
    a9 = line_2(b(3)+4:b(4)+3);
    a9 = str2num(a9);
    th line for the current iteration
    a10 = line_2(b(4)+4:b(5)+3);
    a10 = str2num(a10);

    % Going to the third line
    line_3 = fgetl(f1);
    % 3rd line - We take string 3 letters more after finding 'E's
    c = strfind(line_1,'E');
    th line for the current iteration
    a11 = line_3(1:c(1)+3);
    a11 = str2num(a11);
    th line for the current iteration
    a12 = line_3(c(1)+4:c(2)+3);
    a12 = str2num(a12);
    th line for the current iteration
    a13 = line_3(c(2)+4:c(3)+3);
    a13 = str2num(a13);
    th line for the current iteration
    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,Temp,R,global_medium_temp);

    % Enthalpy calculation
    H = Enthalpy(a1,a2,a3,a4,a5,a6,a8,a9,a10,a11,a12,a13,Temp,R,global_medium_temp);

    % Entropy calculation
    S = Entropy_calc(a1,a2,a3,a4,a5,a7,a8,a9,a10,a11,a12,a14,Temp,R,global_medium_temp);

    �lculating 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);

    % plotting(CP,H,S,Temp,Species_SP)
    % Saving as a folder
    cur_dir = pwd;
    mkdir(Species_SP);
    cd(Species_SP);

    % Plot 1, Specific heat (CP) vs Temperature Range (Temp)

    figure(1)
    plot(Temp,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),'Specific Heat.jpg');

    % Plot 2, Enthalpy (H) vs Temperature Range (Temp)

    figure(2)
    plot(Temp,H,'linewidth',2,'color','g');
    xlabel('Temperature [K]');
    ylabel('Enthalpy in [kJ/(mol)]');
    title(sprintf('Varying Enthalpy with Temperature Range of %s',Species_SP));
    grid on
    saveas(figure(2),'Ethalpy.jpg');

    % Plot 3, Entropy (S) vs Temperature Range (Temp)

    figure(3)
    plot(Temp,S,'linewidth',2,'color','b');
    xlabel('Temperature [K]');
    ylabel('Entropy in [kJ/(mol-K)]');
    title(sprintf('Varying Entropy with Temperature 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('%s n %s n %f n','species','Molecular mass',M)
    fclose(f2)
    end

 For each loop, the following steps are done:
 
-> We get the first line and split the string. The first index that we see is the element's chemical formula. It is stored in 'Species_SP'.
-> Now we get to the next line and take a variable 'a' which will find the position of 'E' in the data file. One co-efficient is basically three more strings after E. From this concept, we store the coefficients in the variables a1, a2, a3, a4, a5. After five coefficients, the line ends. We then go to the next line and take another variable 'b' which will also find the index of 'E' from the first line and with the same concept like before we take a6 and a7. 
-> We know that here for 1 element, there are 7 higher coefficients and 7 lower coefficients. So, after taking 7 coefficients,  we use comments and store the rest of the variables in a8, a9, a10, a11, a12, a13, a14.
-> We use the values "a1,a2,a3,a4,a5,a8,a9,a10,a11,a12,Temp,R,global_medium_temp" and calculate the specific heat by the function named 'specificheat'. We then store it to Cp. 
-> Again we use the values "a1,a2,a3,a4,a5,a8,a9,a10,a11,a12,Temp,R,global_medium_temp" and calculate the Enthalpy by the function named 'Enthalpy'. We then store it to H.
-> We then calculate entropy by the same variables and function named 'Entropy_calc' and store it to S. 
-> For the current element in the iteration, we get the molecular weight by the function 'Molecular_weight'. We open a text file named 'Molecular weight.txt' and then store the values of the element's molecular number in each loop.
-> To store the plots for different graphs in a picture, we create a folder in the name of the element. 
-> We then plot the following graphs:
  1. Specific Heat VS Temperature
  2. Enthalpy VS Temperature
  3. Entropy VS Temperature

After plotting we save them according to our convention as 'jpg' file. 

-> Then we print the molecular weight to the console also.

Thus we terminate our for loop and our code is completed. 

Code Output in Console:

Species_SP =

    'O'

molecular weight O :   15.999000


Species_SP =

    'O2'

molecular weight O2 :   31.998000


Species_SP =

    'H'

molecular weight H :    1.008000


Species_SP =

    'H2'

molecular weight H2 :    2.016000


Species_SP =

    'OH'

molecular weight OH :   17.007000


Species_SP =

    'H2O'

molecular weight H2O :   18.015000


Species_SP =

    'HO2'

molecular weight HO2 :   33.006000


Species_SP =

    'H2O2'

molecular weight H2O2 :   34.014000


Species_SP =

    'C'

molecular weight C :   12.011000


Species_SP =

    'CH'

molecular weight CH :   13.019000


Species_SP =

    'CH2'

molecular weight CH2 :   14.027000


Species_SP =

    'CH2(S)'

molecular weight CH2(S) :   14.027000


Species_SP =

    'CH3'

molecular weight CH3 :   15.035000


Species_SP =

    'CH4'

molecular weight CH4 :   16.043000


Species_SP =

    'CO'

molecular weight CO :   28.010000


Species_SP =

    'CO2'

molecular weight CO2 :   44.009000


Species_SP =

    'HCO'

molecular weight HCO :   29.018000


Species_SP =

    'CH2O'

molecular weight CH2O :   30.026000


Species_SP =

    'CH2OH'

molecular weight CH2OH :   31.034000


Species_SP =

    'CH3O'

molecular weight CH3O :   31.034000


Species_SP =

    'CH3OH'

molecular weight CH3OH :   32.042000


Species_SP =

    'C2H'

molecular weight C2H :   25.030000


Species_SP =

    'C2H2'

molecular weight C2H2 :   26.038000


Species_SP =

    'C2H3'

molecular weight C2H3 :   27.046000


Species_SP =

    'C2H4'

molecular weight C2H4 :   28.054000


Species_SP =

    'C2H5'

molecular weight C2H5 :   29.062000


Species_SP =

    'C2H6'

molecular weight C2H6 :   30.070000


Species_SP =

    'CH2CO'

molecular weight CH2CO :   42.037000


Species_SP =

    'HCCO'

molecular weight HCCO :   41.029000


Species_SP =

    'HCCOH'

molecular weight HCCOH :   42.037000


Species_SP =

    'H2CN'

molecular weight H2CN :   28.034000


Species_SP =

    'HCN'

molecular weight HCN :   27.026000


Species_SP =

    'HNO'

molecular weight HNO :   31.014000


Species_SP =

    'N'

molecular weight N :   14.007000


Species_SP =

    'NNH'

molecular weight NNH :   29.022000


Species_SP =

    'N2O'

molecular weight N2O :   44.013000


Species_SP =

    'NH'

molecular weight NH :   15.015000


Species_SP =

    'NH2'

molecular weight NH2 :   16.023000


Species_SP =

    'NH3'

molecular weight NH3 :   17.031000


Species_SP =

    'NO'

molecular weight NO :   30.006000


Species_SP =

    'NO2'

molecular weight NO2 :   46.005000


Species_SP =

    'HCNO'

molecular weight HCNO :   43.025000


Species_SP =

    'HOCN'

molecular weight HOCN :   43.025000


Species_SP =

    'HNCO'

molecular weight HNCO :   43.025000


Species_SP =

    'NCO'

molecular weight NCO :   42.017000


Species_SP =

    'CN'

molecular weight CN :   26.018000


Species_SP =

    'HCNN'

molecular weight HCNN :   41.033000


Species_SP =

    'N2'

molecular weight N2 :   28.014000


Species_SP =

    'AR'

molecular weight AR :   39.948000


Species_SP =

    'C3H8'

molecular weight C3H8 :   44.097000


Species_SP =

    'C3H7'

molecular weight C3H7 :   43.089000


Species_SP =

    'CH3CHO'

molecular weight CH3CHO :   44.053000


Species_SP =

    'CH2CHO'

molecular weight CH2CHO :   43.045000
Errors Faced: 
Error 1: 
This happened as I made a mistake in putting the proper function name. 
 
Error 2:
This error occurred as I made mistakes with indexing properly and it resulted in a coefficient variable having two values.
 
 
Conclusion:
 
We can see that our code ran successfully. This project made me understand the importance of file parsing. How we can make a data file usable and can gain necessary information from it is what I learned from this project. We can see the provided 'THERMO.dat' file was not readable before file parsing! But due to parsing the file properly, we gained the necessary information from the file and gained benefits from it by observing the thermodynamics relationship graphs for different elements.  
 
 
 

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.