Challenge

Project 1 - Parsing NASA thermodynamic data

Aim:Write a matlab code to parse nasa thermodyamic file of various gas species.

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

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

The FIRST 7 coefficients are HIGH-temperature coefficients and the SECOND 7 coefficients are LOW-temperature coefficients.

Also use the LOCAL TEMPERATURE RANGES which is unique for each individual species, not the GLOBAL TEMPERATURE RANGE.

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

3. Plot the Cp, Enthalpy and Entropy for the local temperature range (low temperature : high temperature) specific for each species.

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

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

6. Please write a detailed report to describe your logic.

Theory:

Parsing: Parsing a file means reading in a data stream and building a memory model of the content of that data. ... Parsing splits a file or other input into pieces of data that can be easily stored or manipulated

Main code:

clear all 
close all
clc
 %input
 R=8.314;%Gas constant
 
 %open file and reading THERMO.dat file
 f1 = fopen('THERMO.dat','r');
 get = fgetl(f1);
 
 %Now Reading Temperature from this file
 temp = fgetl(f1);
 
 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,'');
     species = (A{1});
     
    
     tline1 = fgetl(f1);
     a = strfind(tline1,'E');
     
     %Finding First 7 higher and second 7 lower coefficients
     a1 = tline1(1:a(1)+3);
     a1 =str2num(a1);
     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(a5);
          
          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(a8);
           a9 = tline2(b(3)+4:b(4)+3);
           a9 = str2num(a9);
           a10 = tline2(b(4)+4:b(5)+3); 
           a10 = str2num(a10);
           
           tline3 = fgetl(f1);
           c = strfind(tline3,'E');
           a11 = tline3(1:c(1)+3);
           a11 = str2num(a11);
           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(a1,a2,a3,a4,a5,a7,a8,a9,a10,a11,a12,a14,T,R,tempmid);
             
             %calculate enthalpy 
             H = Enthalpy(a1,a2,a3,a4,a5,a6,a8,a9,a10,a11,a12,a13,T,R,tempmid);
             
             %calculate molecular weight of species 
             w = Molecular_weight(species);
             
             %wrting molecular weight file 
             MW_file = fopen('Molecular Weight.txt','w');
             fprintf(MW_file,'Molecular weight of %s is %d',species, w);
             fclose(MW_file); 
             
             %plotting Cp, H and S with temperature 
             cd('C:/Users/Ayush/Desktop/skill lync/species')
             mkdir(species);
             cd(species);
             
             
             %plot 1 Cpvs T 
             figure(1)
             plot(T,Cp,'linewidth',2,'color','b');
             xlabel('Temperature(K)');
             ylabel('Specific Heat(KJ)');
             saveas(figure(1),'Specific Heat.jpg');
             
             
             %plot 2 S vs T
             figure(2)
             plot(T,S,'linewidth',2,'color','r');
             xlabel('temperature');
             ylabel('Entropy(KJ/mol-k)');
             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)');
             saveas(figure(3),'Enthalpy.jpg');
             
             cd('C:/Users/Ayush/Desktop/skill lync')
             %Molecular weigth 
             W = Molecular_weight(species);
 end
 

Code for Specific_heat

function Cp = specific_heat(a1,a2,a3,a4,a5,a8,a9,a10,a11,a12,T,R,tempmid)
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

Code for Entropy:

function S  = Entropy(a1,a2,a3,a4,a5,a7,a8,a9,a10,a11,a12,a14,T,R,tempmid)
if(T <=tempmid)
    S = R*(a8.*log(T)+(a9*T)+((a10*(T).^2)/2)+((a11*(T).^3)/3)+((a12*(T).^4)/4)+a14);
else
     S = R*(a1.*log(T)+(a2*T)+((a3*(T).^2)/2)+((a4*(T).^3)/3)+((a5*(T).^4)/4)+a14);
end

Code for Enthaply

function H = Enthalpy(a1,a2,a3,a4,a5,a6,a8,a9,a10,a11,a12,a13,T,R,tempmid)
if(T <= tempmid)
    H=R*T.*(a8+((a9*T)/2)+((a10*(T).^2)/3)+((a11*(T).^3)/4)+((a12*(T).^4)/5)+((a13./T)));
else
    H=R*T.*(a1+((a2*T)/2)+((a3*(T).^2)/3)+((a4*(T).^3)/4)+((a5*(T).^4)/5)+((a6./T)));
end

    

Code for Molecular weight:

function W = Molecular_weight(species)

atomic_name=['H','C','O','N','Ar'];

atomic_weight=[1.008 12.011 15.99 14.007 39.948];
 
W=0;

for i=1:length(species)
    for j=1:length(atomic_name)
        if strcmp(species(i),atomic_name(j))
            W = W+atomic_weight(j);
            position = j;
        end
    end
    n=str2num(species);
    if n>1
        W=W+atomic_weight(position)*(n-1);
    end
end

Results:

Plot of O2

Enthalpy

Entropy

Specific heat

Plot of N2

Enthalpy:

Entropy:

Specific heat:

Plot of CO2

  • Screenshot of the window where all the folders are saved.

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.