Challenge

Project 1 - Parsing NASA thermodynamic data

AIM:

To write a code in MATLAB tomparse nasa thermodynamic data file and then calculate thermodynamic properties of various gas species.

OBJECTIVE:

1. write a function that extracts the 14 coefficients and calculates the enthalpy, entropy and specific heats for all the species in the data file.

2.calculate molecular weight of each species.

3.Plotting the specific heat, enthalpy and entropy for the local temperature range.

4.Saving tge plots as images with appropriate names and dumping them in separate folders for each species.

THEORY:

file parsing:

File parsing is a string or symbol either in natural language computer language or data structure conferming to the rules of the former grammer.

RESULT:

1 The code for file parsing is done.

2. The graph for N2 O2 and CO2 is poltted

%function code moecular 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'];

mol_wt = 0;
for i=1:length(species_name)
    for j=1:length(Elements)
        if strcmpi(species_name(i),Elements(j))
            mol_wt = mol_wt + Atomic_mass(j);
            z = j;
        end
    end
    var = str2double(species_name(i));
    if (var>1)
        mol_wt = mol_wt+(Atomic_mass(z)*(var-1));
    end
end
m = mol_wt;
end

%entropy code
function[entropy] = specific_heat_cal(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,~,a14,local_low_temp,local_mid_temp,local_high_temp,T)
if(T>local_mid_temp)
    s = (a1*log(T)+(a2*T)+(a3*(T.^2)/2)+(a4*(T.^3))+(a5*(T.^4)/4)+a7);
else
    s = (a8*log(T)+(a9*T)+(a10*(T.^2)/2)+(a11*(T.^3))+(a12*(T.^4)/4)+a14);
end

%enthalpy code
function[enthalpy] = specific_heat_cal(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,~,a14,local_low_temp,local_mid_temp,local_high_temp,T)
if(T>local_mid_temp)
    h = (a1*T+(a2*(T.^2)/2)+(a3*(T.^3)/3)+(a4*(T.^4)/4)+(a5*(T.^5)/5)+a6);
else
    h = (a8*T+(a9*(T.^2)/2)+(a10*(T.^3)/3)+(a11*(T.^4)/4)+(a12*(T.^5)/5)+a13);
end


%specificheat function
function[c_p] = specific_heat_cal(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,~,a14,local_low_temp,local_mid_temp,local_high_temp,T)
if(T>local_mid_temp)
    c_p = (a1+(a2*t)+(a3*(T.^2))+(a4*(T.^3))+(a5*(T.^4)));
else
    c_p = (a8+(a9*T)+(a10*(T.^2))+(a11*(T.^3))+(a12*(T.^4)));
end


%getting the data file
R = 8.314;
f1 = fopen('THERMO.dat','r');
tline1=fgetl(f1);
tline2=fgetl(f1);

%reading yhe header information

temp = strsplit(tline2,'');
global_low_temp=str2num(temp{2});
global_mid_temp=str2num(temp{3});
global_high_temp=str2num(temp{4});

%neglecting 3 unwamted lines
for i = 1:3
   skippedlines = fgetl(f1);
end

%reading the species
for i=1:53
     tline3=fgetl(f1);
     s = strsplit(tline3,'');
     species_name = s{1};
     A = strfind(tline3, 'G');
     temp_values=tline3(A+4:length(tline3));
     B=strsplit(temp_values,'');
     local_low_temp=str2double(B{1});
     local_mid_temp=str2double(B{3});
     local_high_temp=str2double(B{2});


     tline4 = fgetl(f1);
     f=strfind(tline4,'E');
     a1=str2double(tline4(1:(f(1)+3)));
     a2=str2double(tline4(f(1)+4:(f(2)+3)));
     a3=str2double(tline4(f(2)+4:(f(3)+3)));
     a4=str2double(tline4(f(3)+4:(f(4)+3)));
     a5=str2double(tline4(f(4)+4:(f(5)+3)));


     tline5=fgetl(f1);
     a6=str2double(tline5(1:(f(1)+3)));
     a7=str2double(tline5(f(1)+4:(f(2)+3)));
     a8=str2double(tline5(f(2)+4:(f(3)+3)));
     a9=str2double(tline5(f(3)+4:(f(4)+3)));
     a10=str2double(tline5(f(4)+4:(f(5)+3)));

     tline6=fgetl(f1);
     a11=str2double(tline6(1:(f(1)+3)));
     a12=str2double(tline6(f(1)+4:(f(2)+3)));
     a13=str2double(tline6(f(2)+4:(f(3)+3)));
     a14=str2double(tline6(f(3)+4:(f(4)+3)));

     T = linspace(local_low_temp,local_high_temp,100);
     c_p = R*specific_heat_cal(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,local_low_temp,local_mid_temp,local_high_temp,T);
     s = R*specific_heat_cal(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,local_low_temp,local_mid_temp,local_high_temp,T);
     h = specific_heat_cal(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,local_low_temp,local_mid_temp,local_high_temp,T);
     req_species = ["O2","N2","CO2"];

     if(species_name==req_species(1))||(species_name==req_species(2))||(species_name==req_species(3))
         mkdir(species_name);
         cd(species_name)


         figure(1)
         plot(T,c_p)
         title('specific heat vs temperature')
         xlabel('temperature')
         ylabel('specific heat')
         image=getframe(gfc);
         imwrite(image.cdata,'cp vs T.png')
         saveas(1,'specific_heat','jpg')


         figure(2)
         plot(T,s)
         title('enthalpy vs temperature')
         xlabel('temperature')
         ylabel('enthalpy')
         image=getframe(gfc);
         imwrite(image.cdata,'s vs T.png')
         saveas(2,'enthalpy','jpg')

         figure(3)
         plot(T,s)
         title('entropy vs temperature')
         xlabel('temperature')
         ylabel('entropy')
         image=getframe(gfc);
         imwrite(image.cdata,'cp vs T.png')
         saveas(3,'entropy','jpg')


         cd
     end

     molecular_wt = molecular_weight(species_name);
     k = sprintf('%s mol_wt = %f',species_name,molecular_wt);
     disp(k)
end






     

     


     
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.