Challenge

Project 1 - Parsing NASA thermodynamic data

Specific heat:

%cp=(a1+a2T+a3T^2+a4T^3+a5T^4)*R

%function for specific heat

function Cp = specificheat(a1,a2,a3,a4,a5,a8,a9,a10,a11,a12,T,local_mid_temp,R)
%comparing with global Terature

if T> local_mid_temp
% for first a1 to a7 seven coeff
Cp = R*(a1 + a2*(T) + a3*((T).^2) + a4*((T).^3) + a5*((T).^4));

else
% for last a8 to a14 seven coeff
Cp=R*(a8 + a9*(T) + a10*((T).^2) + a11*((T).^3) + a12*((T).^4));

% Cp=((a8+a9.*T+a10.*T.^2+a11.*T.^3+a12.*T.^4).*R);
end

end

Enthalpy:


%H = (a1 + a2T/2 + a3T^2/3 + a4T^3/4 + a5T^4/5 + a6/T)*R*T
% Enthalpy calculation function
function H = Enthalpy(a1,a2,a3,a4,a5,a6,a8,a9,a10,a11,a12,a13,T,local_mid_temp,R)

%comparing with global Terature

if T > local_mid_temp

%for first a1 to a7 seven coefficient
H = (a1+(a2.*T./2)+(a3.*T.^2/3)+(a4.*T.^3/4)+(a5.*T.^4/5)+(a6./T).*R.*T); %H=enthalpy
else
% for last a8 to a14 seven coeff
H = (a8+(a9.*T./2)+(a10.*T.^2/3)+(a11.*T.^3/4)+(a12.*T.^4/5)+(a13./T).*R.*T);
end
end

Entropy:


%S = (a1lnT + a2T + a3T^2/2 + a4T^3/3 + a5T^4/4 +a7)*R

% entropy function
function S = entropy(a1,a2,a3,a4,a5,a7,a8,a9,a10,a11,a12,a13,T,local_mid_temp,R)
%comparing with global Terature
if T>local_mid_temp
%for first a1 to a7 seven coefficient
S = ((a1*log(T)+(a2.*T)+(a3.*T.^2/2)+(a4.*T.^3/3)+(a5.*T.^4/4)+a7).*R); %S=entropy
else
%for first a8 to a14 seven coefficient
S = ((a8*log(T)+(a9.*T)+(a10.*T.^2/2)+(a11.*T.^3/3)+(a12.*T.^4/4)+a13).*R) ;
end
end

Molecular weight:

function Molecularweight = Molecularweight(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 = str2double(Species_SP(i));

if n>1
Molecularweight = Molecularweight + (Atomic_weight(position))*(n-1);
end
end
fprintf('molecular weight %s :', Species_SP);
fprintf('%d', Molecularweight);
disp(' ');
end

Main code:

clear all
close all
clc

% Reading data file- NASA thermodynamics
% open a file & 'r'open file for reading
f1 = fopen('THERMO.dat','r');
gt = fgetl(f1);

% obtain temperature by reading the Header info
global_temp = fgetl(f1);

%spliting
t=strsplit(global_temp);
% converting string cells to numbers using str2num
global_low_temp = str2double(t{2});
global_medium_temp = str2double(t{3});
global_high_temp = str2double(t{4});

%temprature range and gas constant
%temperature range assumed

% Universal gas constant J/(mol-K)
R = 8.314;

% skipping 3 comment lines in the file
for i = 1:3
gt = fgetl(f1);
end

for i = 1:53
gt1 = fgetl(f1);

A = strsplit(gt1,' ');
Species_SP = (A{1}) ;
local_low_temp=str2num(A{end-3});
local_mid_temp=str2num(A{end-1});
local_high_temp=str2num(A{end-2});
line_1 = fgetl(f1);
a= strfind(line_1,'E');

% Extracting higher and lower temperature coefficent
a1= line_1(1:a(1)+3);
a1=str2double(a1);
a2= line_1(a(1)+4:a(2)+3);
a2= str2double(a2);
a3= line_1(a(2)+4:a(3)+3);
a3= str2double(a3);
a4= line_1(a(3)+4:a(4)+3);
a4= str2double(a4);
a5= line_1(a(4)+4:a(5)+3);
a5= str2double(a5);

line_2 = fgetl(f1);
b = strfind(line_1, 'E');

a6= line_2(1:b(1)+3);
a6= str2double(a6);
a7= line_2(b(1)+4:b(2)+3);
a7= str2double(a7);
a8= line_2(b(2)+4:b(3)+3);
a8= str2double(a8);
a9= line_2(b(3)+4:b(4)+3);
a9= str2double(a9);
a10= line_2(b(4)+4:b(5)+3);
a10= str2double(a10);

line_3 = fgetl(f1);
c = strfind(line_1, 'E');
a11 = line_3(1:c(1)+3);
a11= str2double(a11);
a12= line_3(c(1)+4:c(2)+3);
a12= str2double(a12);
a13= line_3(c(2)+4:c(3)+3);
a13= str2double(a13);
a14= line_3(c(3)+4:c(4)+3);
a14= str2double(a14);

T=linspace(local_low_temp,local_high_temp,100);

Cp = specificheat(a1,a2,a3,a4,a5,a8,a9,a10,a11,a12,T,local_mid_temp,R);
H = Enthalpy(a1,a2,a3,a4,a5,a6,a8,a9,a10,a11,a12,a13,T,local_mid_temp,R);
S= entropy(a1,a2,a3,a4,a5,a7,a8,a9,a10,a11,a12,a14,T,local_mid_temp,R);


M_WT= Molecularweight(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,M_WT);
fclose(Molecular_list);


%plotting(Cp,H,S,Temp,Species_SP)
cur_dir=pwd;
mkdir(Species_SP);
cd(Species_SP);

%plot 1 specific heat (Cp) (VS) Temperature range (Temp)

figure(1)
plot(Cp,T,'linewidth',2,'color','r');
xlabel('Temprature [K]');
ylabel('Specific Heat [kJ]');
title(sprintf('Varying Specific heat with Temperature Range of %s',Species_SP));
grid on
saveas (1,'specific heat.jpg');

%plot 2 Enthalpy (H) (VS) Temperature range (Temp)

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

%plot 3, Entropy (S) (VS) Temperature range (Temp)

figure(3)
plot(S,T,'linewidth',2,'color','g');
xlabel('Temprature [K]');
ylabel('entropy in [kJ/(mol-K)]');
title(sprintf('Varying entropy with Temperature Range of %s',Species_SP));
grid on
saveas (3,'entropy.jpg');

cd ..
end

Explaination:

1) Making directory using 'mkdir' using location address

2) After that reading the test file 'Thermo.dat' file and opening it by using 'fopen' and 'r' as reading command

3) For reading the line in file using 'fgetl'

4) To obtain the temperature range from Thermo.dat file 'strsplit' to split the temperature into particular string cell

5) 'str2num' for converting numbers into function

6) using for & end loops to skip the next three comment lines in text file

7) reading all the 53 species using specific heat(Cp) enthalpy(H) entropy(S) .

8) use 'for' loop to read 53 species

9) Use 'strfind' to find the string

10) Using 'linspace' specified the temperature range from low to high

11) Adding universal gas consultant value 'R'

Command window:

Molecular Weight ofO:molecular weight O :1.599900e+01
Warning: Directory already exists.
> In File_parsing (line 95)
Molecular Weight ofO2:molecular weight O2 :3.199800e+01
Warning: Directory already exists.
> In File_parsing (line 95)
Molecular Weight ofH:molecular weight H :1.008000e+00
Warning: Directory already exists.
> In File_parsing (line 95)
Molecular Weight ofH2:molecular weight H2 :2.016000e+00
Warning: Directory already exists.
> In File_parsing (line 95)
Molecular Weight ofOH:molecular weight OH :1.700700e+01
Warning: Directory already exists.
> In File_parsing (line 95)
Molecular Weight ofH2O:molecular weight H2O :1.801500e+01
Warning: Directory already exists.
> In File_parsing (line 95)
Molecular Weight ofHO2:molecular weight HO2 :3.300600e+01
Warning: Directory already exists.
> In File_parsing (line 95)
Molecular Weight ofH2O2:molecular weight H2O2 :3.401400e+01
Warning: Directory already exists.
> In File_parsing (line 95)
Molecular Weight ofC:molecular weight C :1.201100e+01
Warning: Directory already exists.
> In File_parsing (line 95)
Molecular Weight ofCH:molecular weight CH :1.301900e+01
Warning: Directory already exists.
> In File_parsing (line 95)
Molecular Weight ofCH2:molecular weight CH2 :1.402700e+01
Warning: Directory already exists.
> In File_parsing (line 95)
Molecular Weight ofCH2(S):molecular weight CH2(S) :1.402700e+01
Warning: Directory already exists.
> In File_parsing (line 95)
Molecular Weight ofCH3:molecular weight CH3 :1.503500e+01
Warning: Directory already exists.
> In File_parsing (line 95)
Molecular Weight ofCH4:molecular weight CH4 :1.604300e+01
Warning: Directory already exists.
> In File_parsing (line 95)
Molecular Weight ofCO:molecular weight CO :2.801000e+01
Warning: Directory already exists.
> In File_parsing (line 95)
Molecular Weight ofCO2:molecular weight CO2 :4.400900e+01
Warning: Directory already exists.
> In File_parsing (line 95)
Molecular Weight ofHCO:molecular weight HCO :2.901800e+01
Warning: Directory already exists.
> In File_parsing (line 95)
Molecular Weight ofCH2O:molecular weight CH2O :3.002600e+01
Warning: Directory already exists.
> In File_parsing (line 95)
Molecular Weight ofCH2OH:molecular weight CH2OH :3.103400e+01
Warning: Directory already exists.
> In File_parsing (line 95)
Molecular Weight ofCH3O:molecular weight CH3O :3.103400e+01
Warning: Directory already exists.
> In File_parsing (line 95)
Molecular Weight ofCH3OH:molecular weight CH3OH :3.204200e+01
Warning: Directory already exists.
> In File_parsing (line 95)
Molecular Weight ofC2H:molecular weight C2H :2.503000e+01
Warning: Directory already exists.
> In File_parsing (line 95)
Molecular Weight ofC2H2:molecular weight C2H2 :2.603800e+01
Warning: Directory already exists.
> In File_parsing (line 95)
Molecular Weight ofC2H3:molecular weight C2H3 :2.704600e+01
Warning: Directory already exists.
> In File_parsing (line 95)
Molecular Weight ofC2H4:molecular weight C2H4 :2.805400e+01
Warning: Directory already exists.
> In File_parsing (line 95)
Molecular Weight ofC2H5:molecular weight C2H5 :2.906200e+01
Warning: Directory already exists.
> In File_parsing (line 95)
Molecular Weight ofC2H6:molecular weight C2H6 :3.007000e+01
Warning: Directory already exists.
> In File_parsing (line 95)
Molecular Weight ofCH2CO:molecular weight CH2CO :4.203700e+01
Warning: Directory already exists.
> In File_parsing (line 95)
Molecular Weight ofHCCO:molecular weight HCCO :4.102900e+01
Warning: Directory already exists.
> In File_parsing (line 95)
Molecular Weight ofHCCOH:molecular weight HCCOH :4.203700e+01
Warning: Directory already exists.
> In File_parsing (line 95)
Molecular Weight ofH2CN:molecular weight H2CN :2.803400e+01
Warning: Directory already exists.
> In File_parsing (line 95)
Molecular Weight ofHCN:molecular weight HCN :2.702600e+01
Warning: Directory already exists.
> In File_parsing (line 95)
Molecular Weight ofHNO:molecular weight HNO :3.101400e+01
Warning: Directory already exists.
> In File_parsing (line 95)
Molecular Weight ofN:molecular weight N :1.400700e+01
Warning: Directory already exists.
> In File_parsing (line 95)
Molecular Weight ofNNH:molecular weight NNH :2.902200e+01
Warning: Directory already exists.
> In File_parsing (line 95)
Molecular Weight ofN2O:molecular weight N2O :4.401300e+01
Warning: Directory already exists.
> In File_parsing (line 95)
Molecular Weight ofNH:molecular weight NH :1.501500e+01
Warning: Directory already exists.
> In File_parsing (line 95)
Molecular Weight ofNH2:molecular weight NH2 :1.602300e+01
Warning: Directory already exists.
> In File_parsing (line 95)
Molecular Weight ofNH3:molecular weight NH3 :1.703100e+01
Warning: Directory already exists.
> In File_parsing (line 95)
Molecular Weight ofNO:molecular weight NO :3.000600e+01
Warning: Directory already exists.
> In File_parsing (line 95)
Molecular Weight ofNO2:molecular weight NO2 :4.600500e+01
Warning: Directory already exists.
> In File_parsing (line 95)
Molecular Weight ofHCNO:molecular weight HCNO :4.302500e+01
Warning: Directory already exists.
> In File_parsing (line 95)
Molecular Weight ofHOCN:molecular weight HOCN :4.302500e+01
Warning: Directory already exists.
> In File_parsing (line 95)
Molecular Weight ofHNCO:molecular weight HNCO :4.302500e+01
Warning: Directory already exists.
> In File_parsing (line 95)
Molecular Weight ofNCO:molecular weight NCO :4.201700e+01
Warning: Directory already exists.
> In File_parsing (line 95)
Molecular Weight ofCN:molecular weight CN :2.601800e+01
Warning: Directory already exists.
> In File_parsing (line 95)
Molecular Weight ofHCNN:molecular weight HCNN :4.103300e+01
Warning: Directory already exists.
> In File_parsing (line 95)
Molecular Weight ofN2:molecular weight N2 :2.801400e+01
Warning: Directory already exists.
> In File_parsing (line 95)
Molecular Weight ofAR:molecular weight AR :3.994800e+01
Warning: Directory already exists.
> In File_parsing (line 95)
Molecular Weight ofC3H8:molecular weight C3H8 :4.409700e+01
Warning: Directory already exists.
> In File_parsing (line 95)
Molecular Weight ofC3H7:molecular weight C3H7 :4.308900e+01
Warning: Directory already exists.
> In File_parsing (line 95)
Molecular Weight ofCH3CHO:molecular weight CH3CHO :4.405300e+01
Warning: Directory already exists.
> In File_parsing (line 95)
Molecular Weight ofCH2CHO:molecular weight CH2CHO :4.304500e+01
Warning: Directory already exists.
> In File_parsing (line 95)

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.