Challenge

Project 1 - Parsing NASA thermodynamic data

AIM OF CHALLENGE: To calculate the molecular weight of different species and to plot the cp,enthaly and entropy for the local temperature ranges for O2,N2 & CO2 by parsing the NASA thermodynamic data given to us.


File parsing in simple language means to split the data and various inputs into different pieces of data and storing it.

Definitions of ethalpy,entropy and speific heat:-

Enthalpy- a thermodynamic quantity equivalent to the total heat content of a system. It is equal to the internal energy of the system plus the product of pressure and volume.

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.

Specific heat- the heat required to raise the temperature of the unit mass of a given substance by a given amount (usually one degree).

Molecular weight- It can be defined as the weight of the given molecule.

Atomic mass- The atomic mass of an element is the average mass of the atoms of an element measured in atomic mass unit (amu, also known as daltons, D). The atomic mass is a weighted average of all of the isotopes of that element, in which the mass of each isotope is multiplied by the abundance of that particular isotope.

Now, we have been given 3 formulaes through which we have to find out specific heat(c_p), enthalpy(H) and entropy(S)

We know that the first 7 coefficients have to be taken high temp ranges and next 7 coefficients have to be taken low temp ranges.
In this case taking variable b, we hav [b1-b7=high temp coefficient & b8-b14=low temp coefficient] also, R=gas constant=8.314


We start with fopen command to open the file 'THERMO.dat'

Main Programe:-

close all
clear all
clc

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

%First reading header information
fgetl(f1);

%taking global temperatures into account
t_line=fgetl(f1);

a=strsplit(t_line,' ');

global_low_temp=str2double(a{2});
global_mid_temp=str2double(a{3});
global_high_temp=str2double(a{4});

%inorder to neglect the three lines
fgetl(f1);
fgetl(f1);
fgetl(f1);

for i=1:53
    t_line2=fgetl(f1);
    s=strsplit(t_line2,' ');
    species_name=s{1};
    A=strfind(t_line2,'G');
    temp_values=t_line2(A+4:length(t_line2));
    B=strsplit(temp_values,' ');

    local_low_temp=str2double(B{1});
    local_mid_temp=str2double(B{2});
    local_high_temp=str2double(B{3});

    t_line=fgetl(f1);
    b=findstr(t_line,'E');
    %1st coefficient
    b1=t_line(1:b(1)+3);
    b1=str2num(b1);
    %2nd coefficient
    b2=t_line(b(1)+4:b(2)+3);
    b2=str2num(b2);
    %3rd coeffiecient
    b3=t_line(b(2)+4:b(3)+3);
    b3=str2num(b3);
    %4th coefficient
    b4=t_line(b(3)+4:b(4)+3);
    b4=str2num(b4);
    %5th coefficient
    b5=t_line(b(4)+4:b(5)+3);
    b5=str2num(b5);

    %line 2
    line2=fgetl(f1);
    %6th coefficient
    b6=line2(1:b(1)+3);
    b6=str2num(b6);
    %7th coefficient
    b7=line2(b(1)+4:b(2)+3);
    b7=str2num(b7);
    %8th coefficient
    b8=line2(b(2)+4:b(3)+3);
    b8=str2num(b8);
    %9th coefficient
    b9=line2(b(3)+4:b(4)+3);
    b9=str2num(b9);
    %10th coefficient
    b10=line2(b(4)+4:b(5)+3);
    b10=str2num(b10);

    %line3
    line3=fgetl(f1);
    %11th coefficient
    b11=line3(1:b(1)+3);
    b11=str2num(b11);
    %12th coefficient
    b12=line3(b(1)+4:b(2)+3);
    b12=str2num(b12);
    %13th coefficient
    b13=line3(b(2)+4:b(3)+3);
    b13=str2num(b13);
    %14th coefficient
    b14=line3(b(3)+4:b(4)+3);
    b14=str2num(b14);

    %universal gas constant
    R=8.314;

    t=linspace(local_low_temp,local_high_temp,100);

    %to calculate specific heat
    c_p=specific_heat(b1,b2,b3,b4,b5,b8,b9,b10,b11,b12,local_mid_temp,t,R);
    %to calculate enthalpy
    H=enthalpy(b1,b2,b3,b4,b5,b6,b8,b9,b10,b11,b12,b13,local_mid_temp,t,R);
    %to calculate entropy
    S=entropy(b1,b2,b3,b4,b5,b7,b8,b9,b10,b11,b12,b14,local_mid_temp,t,R);

    %creating a folder
    mkdir(species_name)
    cd(species_name)

    %plotting for

    %temp vs specific heat
    figure(1)
    plot(t,c_p)
    xlabel('temperature')
    ylabel('specific heat')
    title('temperature vs specific heat')
    image=getframe(gcf);
    imwrite(image.cdata,'t vs cp.png')
    saveas(1,'specific heat','jpg')

    %temperature vs enthalpy
    figure(2)
    plot(t,H)
    xlabel('temperature')
    ylabel('enthalpy')
    title('temperature vs enthalpy')
    image=getframe(gcf);
    imwrite(image.cdata,'t vs H.png')
    saveas(1,'specific heat','jpg')

    %temperature vs entropy
    figure(3)
    plot(t,S)
    xlabel('temperature')
    ylabel('entropy')
    title('temperature vs entropy')
    image=getframe(gcf);
    imwrite(image.cdata,'t vs S.png')
    saveas(1,'specific heat','jpg')
    cd ..

    %calculating molecular weight

   [M]=molecular_weight(species_name);
   K=sprintf('%s molecular_weight=%f', species_name, M);
   disp(K)
   

end

Function for specific heat:-

%For Specific Heat

function [c_p]=specific_heat(b1,b2,b3,b4,b5,b8,b9,b10,b11,b12,local_mid_temp,t,R)
if(t>local_mid_temp)
    c_p=R*(b1+(b2.*t)+(b3.*(t.^2))+(b4.*(t.^3))+(b5.*(t.^4)));
else
    c_p=R*(b8+(b9.*t)+(b10.*(t.^2))+(b11.*(t.^3))+(b12.*(t.^4)));
end

Function for enthalpy:-

%for enthalpy

function [H] = enthalpy(b1,b2,b3,b4,b5,b6,b8,b9,b10,b11,b12,b13,local_mid_temp,t,R)
if(t>local_mid_temp)
    H=(b1+((b2.*t)/2)+((b3.*(t.^2))/3)+((b4.*(t.^3))/4)+((b5.*(t.^4))/5)+(b6./t)).*t*R;
else
    H=(b8+((b9.*t)/2)+((b10.*(t.^2))/3)+((b11.*(t.^3))/4)+((b12.*(t.^4))/5)+(b13./t)).*t*R;
end

Function for entropy:-

%for entropy
function[S] = entropy(b1,b2,b3,b4,b5,b7,b8,b9,b10,b11,b12,b14,local_mid_temp,t,R)
if (t>local_mid_temp)
    S=((b1.*logt)+(b2.*t)+((b3.*(t.^2))/2)+((b4.*(t.^3))/3)+(b5.*(t.^4))+b7);
else
    S=((b8.*log(t))+(b9.*t)+((b10.*(t.^2))/2)+((b11.*(t.^3))/3)+(b12.*(t.^4))+b14)*R;
end

Function for molecular weight:-

%for molecular weight

function [M]=molecular_weight(species_name)

atomic_mass=[15.999,1.008,12.011,14.007,39.948];
elements=['O','H','C','N','A'];

molecular_weight=0;
for i=1:length(species_name)
    for j=1:length(elements)
        if strcmpi(species_name(i),elements(j))
            molecular_weight=molecular_weight+atomic_mass(j);
            z=j;
        end
    end
    t=str2double(species_name(i));
    if (t>1)
        molecular_weight=molecular_weight+(atomic_mass(z)*(t-1));
    end
end
[M]=molecular_weight
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.