Challenge

Project 1 - Parsing NASA thermodynamic data

AIM :-
         
TO WRITE A CODE IN MATLAB TO PARSE THE NASA-THERMODYANIC FILE AND TO CALCULATE THE THERMODYNAMIC PROPERTIES(SPECIFIC HEAT, ENTHALPHY,ENTROPHY) AND MOLECULAR WEIGHT AND MAKE PLOTS FOR THE VARIOUS SPECIES.

OBJECTIVES: -
         1. 
TO WRITE  A FUNCTION THAT EXTRACTS THE 14 CO-EFFICIENTS OF THE GIVEN SPECIES.
         2.  TO WRITE A FUNCTION TO CALCULATE THE THERMODYNAMIC PROPERTIES(SPECIFIC HEAT,     ENTHALPHY,ENTROPHY) USING NASA POLYNOMIALS FOR THE GIVEN SPECIES.
         3.  TO WRITE A FUNCTION THAT PLOTS THE CP,S,H OF THE GIVEN SPECIES.
   

COMMANDS EXPLANATION: -

  • IN THIS PROGRAM ‘R’ IS THE UNIVERSAL CONSTANT, R = 8.314.
  • USING “THERMO.dat” FILE WHICH CONTAINS 53 SPECIES.
  • ‘fopen’ COMMAND IS USED TO OPEN THE FILE IN THE REAL MODE DENOTED BY ‘r’ IN THE PROGRAM.
  • THE FILE IS READ LINE BY LINE USING ‘fgetl’ COMMAND.
  • THEN THE TEMPERATURE RANGE WERE CLASSIFIED INTO GLOBAL (MAX, MID, MINI) IN THE PROGRAM.
  • THE ‘strsplit’ COMMAND IS USED TO SPLIT THE VALUES, CONVERTED TO NUMBERS.
  • THE TEMPERATURE ARRAY IS DEFINED BY USING ‘linspace’ COMMAND.
  • THE NEXT THREE LINES ARE COMMENTS IN THE FILE SO THEY WERE IGNORED BY USING ‘for loop’ COMMAND.
  • THE NAME OF THE ELEMENT IS STORED IN A VARIABLE USING ‘strtok’ COMMAND.
  • THE READ LINES ARE CONVERTED INTO NUMBERS USING ‘str2double’ COMMAND AND STORED IN A SPECIFIC VARIABLES.
  • THE LOW_TEMP VALUES ARE STORED AS (a1-a7) AND THE HIGH_TEMP VALUES ARE STORED AS (b1-b7).
  • CALCULATING THE SPECIFIC HEAT USING THE VALUES OF LOW_TEMP AND HIGH_TEMP WITH THE HELP OF USING FUNCTION (SPECIFIC HEAT).
  • CALCULATING THE ENTHALPY USING THE VALUES OF LOW_TEMP AND HIGH_TEMP WITH THE HELP OF USING FUNCTION (ENTHALPY).
  • CALCULATING THE ENTROPY USING THE VALUES OF LOW_TEMP AND HIGH_TEMP WITH THE HELP OF USING FUNCTION (ENTROPY).
  • THE NEXT LINE IS THE REFERNCE TO A FUNCTION WHICH PLOTS GRAPHS USING THE GIVEN INPUTS.
  • THE NEXT LINE IS THE REFERNCE TO A FUNCTION WHICH CALCULATES THE MOLECULAR WEIGHT OF DIFFERENT SPECIES USING THE GIVEN INPUTS.
  • THE NEXT LINE IS THE REFERNCE TO A FUNCTION WHICH STORES THE MOLECULAR WEIGHT OF THE DIFFERENT SPECIES USING THE GIVEN INPUTS.
  • THE FILE IS CLOSED USING ‘fclose’ COMMAND.

 

CALCULATION OF ENTROPY: -

               THE FUNCTION USES INPUTS AS HIGH_TEMP AND LOW_TEMP CO-EFFICIENTS AND UNIVERSAL GAS CONSTANT, GLOBAL (MAX, MID, MINI).

FORMULA: -

           

         USING “if else” CONDITION THE TEMP VALUES ARE COMPARED TO THE GLOBAL MID_TEMP VALUES AND WITH THE APPROPRIATE EQUATION ENTROPY WILL BE CALCULATED AND IT IS REPRESENTED AS ‘S’.

%Function to calculate entropy function

function S = entropy(a1,a2,a3,a4,a5,a6,a7,b1,b2,b3,b4,b5,b6,b7,R,temp,global_min,global_max,global_mid)

    if temp<=global_mid

        S = R*(a1.*log(temp) + a2.*temp + a3.*(temp.^2)./2 + a4.*(temp.^3)./3 + a5.*(temp.^4)./4 + a7);

   else

        S = R*(b1.*log(temp) + b2.*temp + b3.*(temp.^2)./2 + b4.*(temp.^3)./3 + b5.*(temp.^4)./4 + b7);

 end

CALCULATION OF ENTHALPY: -

                  IN THIS FUNCTION THE HIGH_TEMP AND LOW_TEMP CO-EFFICIENTS, UNIVERSAL GAS CONSTANT, GLOBAL (MAX, MID, MIN) TEMPERATURE ARE USED AS INPUT PARAMETERS.

FORMULA: -

        

    USING “if else” CONDITION STATEMENT THE VALUES ARE COMPARED WITH THE GLOBAL_TEMP VALUES AND THE ENTHALPHY IS CALCULATED AND IT IS REPRESENTED AS ‘H’.

%Function to calculate enthalpy function

function H = enthalpy(a1,a2,a3,a4,a5,a6,a7,b1,b2,b3,b4,b5,b6,b7,R,temp,...

    global_min,global_max,global_mid)

    if temp <=global_mid

        H = R.*temp.*(a1 + a2.*(temp./2) + a3.*((temp.^2)./3) + a4.*((temp.^3)./4)...

            + a5.*((temp.^4)./5) + a6./temp);

    else

        H = R.*temp.*(b1 + b2.*(temp./2) + b3.*((temp.^2)./3) + b4.*((temp.^3)./4)...

            + b5.*((temp.^4)./5) + b6./temp);

end

 

CALCULATION OF SPECIFIC HEAT: -

                  IN THIS FUNCTION THE HIGH_TEMP AND LOW_TEMP CO-EFFICIENTS, UNIVERSAL GAS CONSTANT, GLOBAL (MAX, MID, MIN) TEMPERATURE ARE USED AS INPUT PARAMETERS.

FORMULA: -

      

          

 

 USING “if else” CONDITION STATEMENT THE VALUES ARE COMPARED WITH THE GLOBAL_TEMP VALUES AND THE SPECIFIC HEAT IS CALCULATED AND IT IS REPRESENTED AS ‘C_p’.

%Function to calculate specific heat function

function c_p = specific_heat(a1,a2,a3,a4,a5,a6,a7,b1,b2,b3,b4,b5,b6,b7,R,...

    temp,global_min,global_max,global_mid)

    if temp<=global_mid

       c_p = R*(a1 + a2.*temp + a3.*(temp.^2) + a4.*(temp.^3) + a5.*(temp.^4));

    else

        c_p = R*(b1 + b2.*temp+b3.*(temp.^2) + b4.*(temp.^3) + b5.*(temp.^4));

end

 

 

CALCULATION OF MOLECULAR WEIGHT: -

                  THE ELEMENT NAME WERE USED AS A INPUT ARGUMENT AND IT IS SAVED IN THE VARIABLE ‘ELEMENT’ AND THE OUTPUT ARGUMENT IS THE MOLECULAR WEIGHT.

 

  1. A STRING ARRAY IS CREATED WITH THE NAME OF THE ATOMS.
  2. A VARIABLE atomic_wt IS CREATED WHICH CONTAINS THE ATOMIC WEIGHT OF THE RESPECTIVE ATOMS IN STRING ARRAY.
  3. THE ‘strcmp’ COMMAND IS USED TO COMAPRE THE NAME OF THE ELEMENT WITH THE STRING ARRAY.
  4. ‘str2double’ COMMAND IS USED TO FIND THE REPETITION OF ELEMENT AND (n-1) IS MULTIPLIED WITH THE atomic_wt OF THE ELEMENT TO CALCULATE THE MOLECULAR WEIGHT.

 

%Function for clculating molecular weight

function [w] = molecular_weight(element_name)

s = {'H' 'C' 'N' 'O' 'C2H'};

%atomic weight of each elements

atomic_wt = [1 12 14 16 40];                                              

w = 0;                                                                       

for i = 1:length(element_name)

for j = 1:length(s)  

if strcmp(element_name(i), s(j))

 w= w + atomic_wt(j);    

%storing the position of matched element 

position = j;                                                          

end

end   

n = str2double(element_name(i));

if n > 1                                              

w = w + atomic_wt(position)*(n-1);

end

end

end

 

 

FUNCTION TO WRITE THE MOLECULAR WEIGHT OF ALL ELEMENTS TO  A FILE: -

  1. THE NEW FILE IS CREATED WITH THE NAME “mol_wt.dat” AND IT IS OPENED IN APPEND MODE DENOTED BY “a+” SO WE CAN WRITE THE MOLECULAR WEIGHT OF ALL ELEMENTS IN A SINGLE FILE.
  2. THE NAME OF THE ELEMENT ALONG WITH THE MOLECULAR WEIGHT CAN BE WRITTEN TO THE FILE USING “fprintf” COMMAND.

 

%Function to writing molecular weight of elements to a file  

function writing_to_file(element_name,weight)  

dir_name = element_name; 

mol_file = fopen('mol_wt.dat','a+'); 

fprintf(mol_file, 'Molecular weight of %s is %f n', dir_name,weight);

fclose(mol_file); 

end

 

 

 

 

FUNCTION TO PLOT AND SAVE GRAPHS: -

  1. THE ‘mkdir’ COMMAND IS USED TO CREATE A NEW FOLDER IN A CURRENT FOLDER ‘pwd’ WITH THE SAME ELEMENT NAME.
  2. THE FIGURE(1) REPRESENTS THE TEMPERATURE VS SPECIFIC HEAT.
  3. THE FIGURE(2) REPRESENTS THE TEMPERATURE VS ENTHALPY VALUES.
  4. THE FIGURE(3) REPRESENTS THE TEMPERATURE VS ENTROPY VALUES.
  5. USING ‘cd’ COMMAND THE FOLDER IS CHANGED BACK TO ITS ORIGINAL FOLDER.
  6. THIS FUNCTION RUNS ‘53’ TIMES USING ‘for loop’.

       %Function to plot graphs for all elements

function plotting(c_p,H,S,temp,element_name)

cd(pwd);

dir_name=element_name;

mkdir(dir_name);

 %Plotting temperature vs specific heat

figure(1)

plot(temp,c_p,'lineWidth',3,'color','r');

title(sprintf('Specific Heat vs Temperature rn for %s:',element_name));

xlabel('Temperature');

ylabel('Specific Heat');

% Plotting temperature vs Enthalpy

figure(2)

plot(temp,H,'linewidth',3,'color','g');

title(sprintf('Enthalpy vs Temperature rn for %s:',element_name));

xlabel('Temperature');

ylabel('Enthalpy');

% Plotting temperature vs Entropy

figure(3)

plot(temp,S,'linewidth',3,'color','b');

title(sprintf('Entropy vs Temperature rn for %s:',element_name));

xlabel('Temperature');

ylabel('Entropy');

cd(dir_name);

saveas(1,'c_p_vs_temp.png');

saveas(2,'H_vs_temp.png');

saveas(3,'S_vs_temp.png');

cd .. ;

end

MAIN PROGRAM: -

close all

clear all

clc

% inputs

R= 8.314; % gas constant

% Reading the data file

f1=fopen('THERMO.dat','r');

% Reading the first line of the file

L1= fgetl(f1);

% Getting the global max,mid,minimum tempeeratures

L2= fgetl(f1);

t = strsplit(L2);

global_min = str2double(t{2});

global_mid = str2double(t{3});

global_max = str2double(t{4});

%Defining the temperature range

temp = linspace (global_min,global_max,500);

%Ignoring the comments in the file

for i=1:3

fgetl(f1);

end

for i=1:53

    %Reading the first line which includes the information for species

    l=fgetl(f1);  

    %Reading the name of the species

    element_name=strtok(l);

    %Reading the three lines which contains 7 high temp coefficients & 7 low temp

    %coefficients

    l1=fgetl(f1);

    l2=fgetl(f1);

    l3=fgetl(f1);

    %Finding the position of E so that we can extract the coefficients

    a=strfind(l1,'E');

    b=strfind(l2,'E');

    c=strfind(l3,'E');

%Extracting high temp coefficient

    a1=str2double(l1(1:a(1)+3));

    a2=str2double(l1(a(1)+3:a(2)+3));

    a3=str2double(l1(a(2)+4:a(3)+3));

    a4=str2double(l1(a(3)+4:a(4)+3));

    a5=str2double(l1(a(4)+4:a(5)+3));

    a6=str2double(l2(1:b(1)+3));

    a7=str2double(l2(b(1)+4:b(2)+3));

%Extracting low temp coefficient

    b1=str2double(l2(b(2)+4:b(3)+3));

    b2=str2double(l2(b(3)+4:b(4)+3));

    b3=str2double(l2(b(4)+4:b(5)+3));

    b4=str2double(l3(1:c(1)+3));

    b5=str2double(l3(c(1)+4:c(2)+3));

    b6=str2double(l3(c(2)+4:c(3)+3));

    b7=str2double(l3(c(3)+4:c(4)+3));

 %Calculating specific heat

    c_p = specific_heat(a1,a2,a3,a4,a5,a6,a7,b1,b2,b3,b4,b5,b6,b7,R,temp,...

        global_min,global_max,global_mid);

    %Calculalting enthalpy

    H = enthalpy(a1,a2,a3,a4,a5,a6,a7,b1,b2,b3,b4,b5,b6,b7,R,temp,global_min,...

        global_max,global_mid);

    %calculating entropy

    S = entropy(a1,a2,a3,a4,a5,a6,a7,b1,b2,b3,b4,b5,b6,b7,R,temp,global_min,...

        global_max,global_mid);

     %Plotting graphs

    plotting(c_p,H,S,temp,element_name);

    %Calculating molecular weights

    mol_wt(i) = molecular_weight(element_name);

    disp(mol_wt(i));

    Molucular_Weight = strcat(mol_wt(i),element_name)

    %Function to write molecular weight to a file

    weight = mol_wt(i);

    writing_to_file(element_name, weight);

end

fclose(f1)

THE PLOTS FOR CO2: -

 

 

THE PLOTS FOR N2: -

  

THE PLOTS FOR O2: -

THE SCREEN SHOT FOR ELEMENT FOLDERS: -

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.