PARSING THERMODYNAMIC DATA IN MATLAB
PARSING OF NASA THERMODYNAMIC DATA
AIM:
- 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.
-
Calculate the molecular weight of each species and display it in the command window
-
Plot the Cp, Enthalpy and Entropy for the local temperature range (low temperature : high temperature) specific for each species.
- 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.
PROGRAM:
clear all
close all
clc
f1=fopen('THERMO.dat','r'); %OPEN THE THERMODYNAMIC DATA
fgetl(f1)%SKIP THE FIRST LINE
A=fgetl(f1);%READ THE NEXT LINE WHICH CONTAINS THE GLOBAL LOW,MEDIUM AND HIGH TEMPERATURE
A=strsplit(A,' '); % CREATE ARRAY TO STORE THE GLOBAL TEMPERATURE VALUES
global_low_temp=str2num(A{2});%CONVERT STRING VALUE INTO NUMERICAL DATA
global_mid_temp=str2num(A{3});%CONVERT STRING VALUE INTO NUMERICAL DATA
global_high_temp=str2num(A{4});%CONVERT STRING VALUE INTO NUMERICAL DATA
%%SKIP THE NEXT THREE LINES WHICH IS IRRELEAVANT FOR THE ANALYSIS PURPOSE
for i=1:3
fgetl(f1);
end
%%COMMANDS TO STORE THE COEFFICIENTS OF TEMPERATURE, LOCAL TEMPERATURES AND
%%CALCULATE THE SPECIFIC HEAT, ENTHALPY AND ENTROPY
for i=1:53
header=fgetl(f1);% READ THE LINE THAT CONTAINS THE SPECIES NAME AND LOCAL TEMPERATURES
x=strsplit(header,' ');% SPLIT THE CHARACTER DATATYPE INTO CELL ARRAY CONTAINING EACH WORD IN DIFERENT CELL, SEPERATED BY A SPACE
species_name=(x{1});%FIRST ARRAY OF X IS STORED WITH NAME OF SPECIES FOR WHICH THE CHARACTERISCTIC CURVES ARE OBTAINED
z=length(x);%CALCULATE THE NUMBER OF CELLS IN ARRAY X
local_low_temp=str2double(x{z-3});% THIRD LAST VALUE OF X ARRAY CONTAINS THE LOCAL LOW TEMPERATURES AND IS CONVERTED INTO FLOATING DATATYPE
local_high_temp=str2double(x{z-2});% SECOND LAST VALUE OF X ARRAY CONTAINS THE LOCAL HIGH TEMPERATURES AND IS CONVERTED INTO FLOATING DATATYPE
local_mid_temp=str2double(x{z-1});% LAST VALUE OF Z ARRAY CONTAINS THE LOCAL MEDIUM TEMPERATURES AND IS CONVERTED INTO FLOATING DATATYPE
t1=local_low_temp; %LOCAL LOW TEMPERATURES IS STORED INTO TEMPORARY VARIABLE t1
t2=local_mid_temp;%LOCAL HIGH TEMPERATURES IS STORED INTO TEMPORARY VARIABLE t2
t3=local_high_temp;%LOCAL MEDIUM TEMPERATURES IS STORED INTO TEMPORARY VARIABLE t3
line_1=fgetl(f1);% READ THE FIRST LINE THAT CONTAINS 5 COEFFICIENTS
a=strfind(line_1,'E');% CREATE AND STORE VALUES IN THE LINE THAT CONTAINS THE LETTER 'E'
a1=str2double(line_1(1:a(1)+3));% STORE THE VALUE OF 1ST COEFFICIENT
a2=str2double(line_1(a(1)+4:a(2)+3));% STORE THE VALUE OF 2ND COEFFICIENT
a3=str2double(line_1(a(2)+4:a(3)+3));% STORE THE VALUE OF 3RD COEFFICIENT
a4=str2double(line_1(a(3)+4:a(4)+3));% STORE THE VALUE OF 4TH COEFFICIENT
a5=str2double(line_1(a(4)+4:a(5)+3)); % STORE THE VALUE OF 5TH COEFFICIENT
line_2=fgetl(f1);% READ THE SECOND LINE THAT CONTAINS 5 COEFFICIENTS
a_1=strfind(line_2,'E');% CREATE AND STORE VALUES IN THE LINE THAT CONTAINS THE LETTER 'E'
a6=str2num(line_2(1:a_1(1)+3));% STORE THE VALUE OF 6TH COEFFICIENT
a7=str2double(line_2(a_1(1)+4:a_1(2)+3));% STORE THE VALUE OF 7TH COEFFICIENT
a8=str2double(line_2(a_1(2)+4:a_1(3)+3));% STORE THE VALUE OF85TH COEFFICIENT
a9=str2double(line_2(a_1(3)+4:a_1(4)+3));% STORE THE VALUE OF 9TH COEFFICIENT
a10=str2double(line_2(a_1(4)+4:a_1(5)+3));% STORE THE VALUE OF 10TH COEFFICIENT
line_3=fgetl(f1);% READ THE THIRD LINE THAT CONTAINS 4 COEFFICIENTS
a_2=strfind(line_1,'E');% CREATE AND STORE VALUES IN THE LINE THAT CONTAINS THE LETTER 'E'
a11=str2double(line_3(1:a_2(1)+3)); %STORE THE VALUE OF 11TH COEFFICIENT
a12=str2double(line_3(a_2(1)+4:a_1(2)+3));%STORE THE VALUE OF 12TH COEFFICIENT
a13=str2double(line_3(a_2(2)+4:a_1(3)+3));%STORE THE VALUE OF 13TH COEFFICIENT
a14=str2double(line_3(a_2(3)+4:a_1(4)+3));%STORE THE VALUE OF 14TH COEFFICIENT
mkdir(species_name);%CREATE A DIRECTORY TO STORE THE SPECIES NAME
T=linspace(t1,t3,1000);% CREATE AN ARRAY TO STORE THE VALUES OF TEMPERTURE IN BETWEEN LOCAL LOW TEMPERATURE AND LOCAL HIGH TEMPERATURE
R=8.314;% INITIALISING THE VALUE OF TEMPERATURE
for k=1:length(T)% LOOP TO CALCULATE THE VALUE OF Cp, H ANS S
if T(k)>t2% IF THE TEMPERATURE IS GEATER THAN THE MEDIUM LOCAL TEMPERATURE, COEFFICENTS A1,A2,A3,A4,A5,A6 AND A7 ARE USED TO CALCULATE THE SPECIFIC HEAT, ENTHALPY AND ENTROPY
cp=(a1+a2.*T+a3.*T.^2+a4.*T.^3+a5.*T.^4)*R; %CALCULATE THE VALUE OF SPECIFIC HEAT
H=(a1+(a2.*T)/2+(a3.*T.^2)/3+(a4.*T.^3)/4+(a5.*T.^4)/5+(a6./T))*R.*T; %CALCULATE THE VALUE OF ENTHALPY
S=a1.*log(T)+a2.*T+(a3.*T.^2)/2+(a4.*T.^3)/3+(a5.*T.^4)/4+a7; %CALCULATE THE VALUE OF ENTROPY
else% IF THE TEMPERATURE IS LESS THAN THE MEDIUM LOCAL TEMPERATURE, TAKE COEFFIEIENTS A8,A9,A10,A11,A12,A13,A14 ARE USED FOR
cp=(a8+a9.*T+a10.*T.^2+a11.*T.^3+a12.*T.^4)*R;%CALCULATE THE VALUE OF SPECIFIC HEAT
H=(a8+(a9.*T)/2+(a10.*T.^2)/3+(a11.*T.^3)/4+(a12.*T.^4)/5+(a13./T))*R.*T; %CALCULATE THE VALUE OF ENTHALPY
S=a8.*log(T)+a9.*T+(a10.*T.^2)/2+(a11.*T.^3)/3+(a12.*T.^4)/4+a14; %CALCULATE THE VALUE OF ENTROPY
end
end
figure(1);%CREATE FIGURE TO PLOT TEMPERATURE VS SPECIFIC HEAT
plot(T,cp);% PLOT THE REQUIRED DATA
grid on ;
title(species_name);
xlabel('Temperature');
ylabel('Specific Heat');
figure(2);;%CREATE FIGURE TO PLOT TEMPERATURE VS ENTHALPY
plot(T,H);% PLOT THE REQUIRED DATA
grid on ;
title(species_name);
xlabel('Temperature');
ylabel('Enthalpy');
figure(3);%CREATE FIGURE TO PLOT TEMPERATURE VS ENTROPY
plot(T,S);% PLOT THE REQUIRED DATA
grid on ;
title(species_name);
xlabel('Temperature');
ylabel('Entropy');
cd (species_name)%OPEN THE OLDER NAMES WITH CORRESPONDING SPECIES NAME
saveas(1,'specific heat','jpg');% SAVE THE FIGURE 1 WITH SPECIFIC HEAT IN JPG FORMAT
saveas(2,'enthalpy','jpg');% SAVE THE FIGURE 2 WITH ENTHALPY IN JPG FORMAT
saveas(3,'entropy','jpg'); % SAVE THE FIGURE 3 WITH ENTROPY IN JPG FORMAT
cd ..% EXIT THE CURRENT FOLDER LOCATION TO CARRY FORWARD THE CALCULATIONS
elements=['H','C','O','N','A'];%CREATE A CHARACTER ARRAY TO STORE THE VALUE OF ELEMENTS OF SPECIES
atomic_weight=[1.0079 12.0107 15.999 14.0067 39.948];%CREATE THE ATOMIC MASS FOR THE CORRESPONDING MATERIALS
mol_mass=0; %INITIALISE THE MOLECULAR MASS =0
for l=1:length(species_name)% CREATE A FOR LOOP TO FIND THE LENGTH OF SPECIES NAME
for m=1:length(atomic_weight)
if strcmp(species_name(l),elements(m))%COMPARE THE VALUE OF SPECIES NAME AND ELEMENTS NAME. IF THE SPECIES NAME AND ELEMENTS NAME ARE EQUAL, MOLECULAR MASS= MOLECULAR MASS+ATOMIC WEIGHT
mol_mass=mol_mass+atomic_weight(m);%IF THE SPECIES NAME AND ELEMENTS NAME ARE EQUAL, MOLECULAR MASS= MOLECULAR MASS+ATOMIC WEIGHT
position=m;
end
end
n=str2double(species_name(l));%COMPARE THE VAUE OF NUMBER OF MOLECULES IN EACH SPECIES.
if n>1%IF THE NUMBER OF MOLECULESIS GREATER THAN 1
mol_mass=mol_mass+atomic_weight(position)*(n-1);% CALCULATE THE MOLECULAR MASS= ATOMIC WEIGHT* NUMBER OF ATOMS
end
end
sprintf('Molecular Weight of %s:%f u',species_name,mol_mass) %PRINT THE MOLECULAR WEIGHT OF THE CORRESPONDING SPECIES
end
fclose(f1)
PRINCIPLE
- The file deals with opening an external data from a text file'Thermo.dat' in Matlab using fopen command
- The name of the species is obtained and stored into an array called 'species_name'
- Local temperatures are stored into the corresponding variable for each variable
- Read the next line which denotes the value of 14 coefficients
- Create a directory for each species.
- Create an array to store the value of temperature for range between the low and high temperature
- Calculate the value of specific heat, enthalpy and entropy
- Create plot for the specific heat , enthalpy and entropy
- Save the plot into different directories
- Calculate the molecular mass for each species
RESULTS
1. C


2. C2H



Thus results of 53 such results are obtained in the corresponding directories

EACH FOLDER CONTAINS THE PLOT OF SPECIFIC HEAT, ENTHALPY AND ENTROPY
