Challenge

Project 1 - Parsing NASA thermodynamic data

Main Code

clear all
close all
clc

% Make directory
mkdir 'C:UserAdminDesktopNASA File Parsing '

% Reading Data File - NASA Thermodynamics
f1 = fopen('THERMO.dat','r')
gt = fgetl(f1);

% Obtain temprature - by reading header information
global_temp = fgetl(f1);

t = strsplit(global_temp);

% Covering string cells
global_low_temp = str2num(t{2});
global_medium_temp = str2num(t{3});
global_high_temp = str2num(t{4});

% Temprature Range 
Temp = linspace(global_low_temp,global_high_temp,1000);

% Universal Gas Constant J/(mol-K)
R = 8.314;

% Skipping Comment Lines
for i = 1:3
    gt = fgetl(f1);
end

for i = 1:53
    gt = fgetl(f1);
    A = strsplit(gt,' ');
    Species_SP = (A{1})

    line_1 = fgetl(f1);
    a = strfind(line_1,'E');

    % Extracting higher temperature coefficients
    a1 = line_1(1:a(1)+3);
    a1 = str2num(a1);

    a2 = line_1(a(1)+4:a(2)+3);
    a2 = str2num(a2);

    a3 = line_1(a(2)+4:a(3)+3);
    a3 = str2num(a3);

    a4 = line_1(a(3)+4:a(4)+3);
    a4 = str2num(a4);

    a5 = line_1(a(4)+4:a(5)+3);
    a5 = str2num(a5);

    line_2 = fgetl(f1);
    b= strfind(line_1,'E');;
    a6 = line_2(1:b(1)+3);
    a6 = str2num(a6);

    a7 = line_2(a(1)+4:b(2)+3);
    a7 = str2num(a7);

    % Extracting Low Temperature Coefficients
    a8 = line_2(b(2)+4:b(3)+3);
    a8 = str2num(a8);

    a9 = line_2(b(3)+4:b(4)+3);
    a9 = str2num(a9);

    a10 = line_2(b(4)+4:b(5)+3);
    a10 = str2num(a10);

    line_3 = fgetl(f1);
    c = strfind(line_1,'E');

    a11 = line_3(1:c(1)+3);
    a11 = str2num(a11);

    a12 = line_3(c(1)+4:c(2)+3);
    a12 = str2num(a12);

    a13 = line_3(c(2)+4:c(3)+3);
    a13 = str2num(a13);

    a14 = line_3(c(3)+4:c(4)+3);
    a14 = str2num(a14);

    % Specific Heat Calculations
    Cp = Specific_heat(a1,a2,a3,a4,a5,a8,a9,a10,a11,a12,Temp,R,global_medium_temp);

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

    % Entropy Calculation
    S = Entropy_clc(a1,a2,a3,a4,a5,a7,a8,a9,a10,a11,a12,a14,Temp,R,global_medium_temp);
    
    % Calculating molecular weight of species
    Molecularweight(i) = Molecular_weight(Species_SP);

    % Read and 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',3,'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',3,'Color','b');
    xlabel('Temperature [K]');
    ylabel('Enthalpy [kJ/(mol)]');
    title(sprintf('Varying Enthalpy with Temperature Range of %s',Species_SP));
    grid on
    saveas(figure(2),'Enthalpy.jpg');

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

    figure(3)
    plot(Temp,S,'LineWidth',3,'Color','g');
    xlabel('Temperature [K]');
    ylabel('Entropy [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

Specific Heat function

function Cp = Specific_heat(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 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 coefficints are taken

end

Enthalpy Function

% 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

Entropy Function

% Entropy Calculation Function

function S = Entropy_clc(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

Molecular Weight Function

function Molecularweight = Molecular_weight(Species_SP)

% Standard - Atomic Name
atomic_name = ['H','C','O','N','A'];
%Hydrogen, Carbon, Oxygen, Nitrogen, Argon

fprintf('Molecular Weight of');
fprintf(Species_SP);
fprintf(' : ');

% Standard Atomic Number
Atomic_Weight = [1.008 12.011 15.999 14.007 39.948];

% Starting Range of Molecule
Molecularweight = 0;

% Adding 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);

    if n>1
        Molecularweight = Molecularweight + Atomic_Weight(position)*(n-1);
    end
end

fprintf('Molecular weight %s :',Species_SP);
fprintf('%d',Molecularweight);
disp(' ');
end

Code Explaination

mkdir To create new folder and save all graphs of code in that folder.

fopen To open the file.

fgetl To get reqiured information from data file.

strsplit To split temp and convert it into cell array.

str2num To convert string into numbers.

linspace To decide appropriate temperature range.

fprintf To take the molecular weight of all species form txt file.

fclose To close txt file.

cd To change the directory to save files.

Molecular wight of all species displayed in command window

Screenshot of directory where all all species 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.