p82.mw

> restart:#"m15_p82"

> read`../therm_eq.m`:read`../therm_chem.m`:with(therm_chem);with(therm_proc):with(plots):

[Ateo, Mf, PCI, PCS, eqEQ, eqMIX, eq_fit, get_hgs_data, hgs_r25, nulist, seqEBE]

Considérese la combustión de gas natural (supóngase metano puro) con aire. Se pide:
a) Relación aire/combustible usada, y composición a la salida, cuando las fracciones de CO2 y de O2 a la salida sean iguales (mezcla pobre).
b) Poder calorífico inferior (másico y molar) y temperatura de combustión adiabática en el caso anterior.
c) Relación aire/combustible usada, y composición a la salida, si las fracciones de CO2 y de CO a la salida fuesen iguales (mezcla rica).
d) Poder calorífico inferior (másico y molar) y temperatura de combustión adiabática en el caso anterior.
e) Comparar las dos temperaturas adiabáticas obtenidas, justificando la diferencia.
Datos:

> su0:="Aire":fuel:="CH4":dat:=[]:eq1:=x[CO2]=x[O2];eq2:=x[CO2]=x[CO];

Typesetting:-mprintslash([eq1 := x[CO2] = x[O2]], [x[CO2] = x[O2]])
Typesetting:-mprintslash([eq2 := x[CO2] = x[CO]], [x[CO2] = x[CO]])

Eqs. const.:

> dat:=op(subs(g=g0,[Const])),op(dat),SI2,SI1:Adat:=get_gas_data(su0):Fdat:=get_gas_data(fuel):

a) Relación aire/combustible usada, y composición a la salida, cuando las fracciones de CO2 y de O2 a la salida sean iguales (mezcla pobre).

Si sale tanto O2 será mezcla pobre, i.e. con A>A0.

> eqST:=CH4+2*O2=CO2+2*H2O;eqM1:=eqMIX(subs(dat,a*CH4+a*A*(c21*O2+c79*N2))=[2,3,4,5]);seqEBE(%);sol1:=(solve(subs(dat,{eqNX,eqBC,eqBH,eqBO,eqBN,eq1}),{a,A,x[CO2],x[H2O],x[O2],x[N2]}));eqA0:=Ateo(fuel);eql1:=lambda=subs(sol1,A/rhs(eqA0));

Typesetting:-mprintslash([eqST := `+`(CH4, `*`(2, `*`(O2))) = `+`(CO2, `*`(2, `*`(H2O)))], [`+`(CH4, `*`(2, `*`(O2))) = `+`(CO2, `*`(2, `*`(H2O)))])
Typesetting:-mprintslash([eqM1 := `+`(`*`(a, `*`(CH4)), `*`(a, `*`(A, `*`(`+`(`*`(.79, `*`(N2)), `*`(.21, `*`(O2))))))) = `+`(`*`(CO2, `*`(x[CO2])), `*`(H2O, `*`(x[H2O])), `*`(N2, `*`(x[N2])), `*`(O2,...
0 = `+`(x[CO2], `-`(a)), 0 = `+`(`*`(2, `*`(x[H2O])), `-`(`*`(4, `*`(a)))), 0 = `+`(`-`(`*`(`/`(21, 50), `*`(a, `*`(A)))), `*`(2, `*`(x[O2])), `*`(2, `*`(x[CO2])), x[H2O]), 0 = `+`(`-`(`*`(`/`(79, 50)...
Typesetting:-mprintslash([sol1 := {A = `/`(100, 7), a = `/`(7, 107), x[CO2] = `/`(7, 107), x[H2O] = `/`(14, 107), x[N2] = `/`(79, 107), x[O2] = `/`(7, 107)}], [{A = `/`(100, 7), a = `/`(7, 107), x[CO2...
Typesetting:-mprintslash([eqA0 := A[0] = 9.523809524], [A[0] = 9.523809524])
Typesetting:-mprintslash([eql1 := lambda = 1.500000000], [lambda = 1.500000000]) (1)

i.e. se quema con una relación aire/combustible relativa de 1,5 (50 % de exceso de aire respecto al teórico).

b) Poder calorífico inferior (másico y molar) y temperatura de combustión adiabática en el caso anterior.

> PCImix_:=PCI(subs(sol1,eqM1));'a*PCI'=subs(sol1,a*PCI_);PCI_:=PCI(eqST);PCImass_:=%/subs(Fdat,M);eq15_7_2;eqTa_:=subs(sol1,cpComp,dat,eqTa);

Typesetting:-mprintslash([PCImix_ := `+`(`/`(`*`(52487.57010, `*`(J_)), `*`(mol_)))], [`+`(`/`(`*`(52487.57010, `*`(J_)), `*`(mol_)))])
`*`(a, `*`(PCI)) = `+`(`*`(`/`(7, 107), `*`(PCI_)))
Typesetting:-mprintslash([PCI_ := `+`(`/`(`*`(802310.00, `*`(J_)), `*`(mol_)))], [`+`(`/`(`*`(802310.00, `*`(J_)), `*`(mol_)))])
Typesetting:-mprintslash([PCImass_ := `+`(`/`(`*`(50144375.00, `*`(J_)), `*`(kg_)))], [`+`(`/`(`*`(50144375.00, `*`(J_)), `*`(kg_)))])
Ta = `+`(T25, `/`(`*`(a, `*`(PCI)), `*`(Sum(`*`(x[Com[i]], `*`(c[p, i])), i = 1 .. CP))))
Typesetting:-mprintslash([eqTa_ := Ta = `+`(`*`(1716.374747, `*`(K_)))], [Ta = `+`(`*`(1716.374747, `*`(K_)))]) (2)

i.e. PCI=50 MJ/kg=802 kJ/mol de fuel, y Ta=1720 K

c) Relación aire/combustible usada, y composición a la salida, si las fracciones de CO2 y de CO a la salida fuesen iguales (mezcla rica).

Si sale tanto CO será mezcla rica.

> eqM2:=eqMIX(subs(dat,a*CH4+a*A*(c21*O2+c79*N2))=[3,4,7,5]);seqEBE(%);sol2:=op(solve(subs(dat,[eqNX,eqBC,eqBH,eqBO,eqBN,eq2]),[a,A,x[CO],x[H2O],x[CO2],x[N2]]));eql2:=lambda=subs(sol2,A/rhs(eqA0));

Typesetting:-mprintslash([eqM2 := `+`(`*`(a, `*`(CH4)), `*`(a, `*`(A, `*`(`+`(`*`(.79, `*`(N2)), `*`(.21, `*`(O2))))))) = `+`(`*`(CO, `*`(x[CO])), `*`(CO2, `*`(x[CO2])), `*`(H2O, `*`(x[H2O])), `*`(N2,...
0 = `+`(x[CO2], x[CO], `-`(a)), 0 = `+`(`*`(2, `*`(x[H2O])), `-`(`*`(4, `*`(a)))), 0 = `+`(`-`(`*`(`/`(21, 50), `*`(a, `*`(A)))), `*`(2, `*`(x[CO2])), x[H2O], x[CO]), 0 = `+`(`-`(`*`(`/`(79, 50), `*`(...
Typesetting:-mprintslash([sol2 := [a = `/`(12, 115), A = `/`(25, 3), x[CO] = `/`(6, 115), x[H2O] = `/`(24, 115), x[CO2] = `/`(6, 115), x[N2] = `/`(79, 115)]], [[a = `/`(12, 115), A = `/`(25, 3), x[CO]...
Typesetting:-mprintslash([eql2 := lambda = .8750000000], [lambda = .8750000000]) (3)

i.e. se quema con una relación aire/combustible relativa de 0,88 (12 % de defecto de aire respecto al teórico).

d) Poder calorífico inferior (másico y molar) y temperatura de combustión adiabática en el caso anterior.

> PCI_:='PCI_':PCImix_:=PCI(subs(sol2,eqM2/a));PCImass_:=%/subs(Fdat,M);eqTa_:=subs(PCI_=PCImix_,sol2,cpComp,dat,eqTa);

Typesetting:-mprintslash([PCImix_ := `+`(`/`(`*`(660815.0000, `*`(J_)), `*`(mol_)))], [`+`(`/`(`*`(660815.0000, `*`(J_)), `*`(mol_)))])
Typesetting:-mprintslash([PCImass_ := `+`(`/`(`*`(41300937.50, `*`(J_)), `*`(kg_)))], [`+`(`/`(`*`(41300937.50, `*`(J_)), `*`(kg_)))])
Typesetting:-mprintslash([eqTa_ := Ta = `+`(`*`(2124.446638, `*`(K_)))], [Ta = `+`(`*`(2124.446638, `*`(K_)))]) (4)

.e. PCI=41 MJ/kg=661 kJ/mol de fuel, y Ta=2120 K.

e) Comparar las dos temperaturas adiabáticas obtenidas, justificando la diferencia.

Quemando con exceo de aire se obtiene una temperatura adiabática menor que quemando con defecto de aire (1720 K frente a 2120 K) porque hay más cantidad de gases a calentar, pese a que el poder calorífico es menor con mezcla rica (no se oxida completamente).

ADICIONAL

> eqM0:=eqMIX(subs(dat,a*CH4+a*A*(c21*O2+c79*N2))=[3,4,5]);sol0:=op(solve(subs(A=rhs(eqA0),dat,[eqNX,eqBC,eqBH,eqBO,eqBN]),[a,A,x[CO2],x[H2O],x[N2]]));PCI0_:=PCI(eqST);PCImass_:=%/subs(Fdat,M);eqTa0_:=subs(PCI_=PCI0_,sol0,cpComp,dat,eqTa);

Typesetting:-mprintslash([eqM0 := `+`(`*`(a, `*`(CH4)), `*`(a, `*`(A, `*`(`+`(`*`(.79, `*`(N2)), `*`(.21, `*`(O2))))))) = `+`(`*`(CO2, `*`(x[CO2])), `*`(H2O, `*`(x[H2O])), `*`(N2, `*`(x[N2])))], [`+`(...
Typesetting:-mprintslash([sol0 := [a = 0.9502262442e-1, A = A, x[CO2] = 0.9502262442e-1, x[H2O] = .1900452488, x[N2] = .7149321267]], [[a = 0.9502262442e-1, A = A, x[CO2] = 0.9502262442e-1, x[H2O] = ....
Typesetting:-mprintslash([PCI0_ := `+`(`/`(`*`(802310.00, `*`(J_)), `*`(mol_)))], [`+`(`/`(`*`(802310.00, `*`(J_)), `*`(mol_)))])
Typesetting:-mprintslash([PCImass_ := `+`(`/`(`*`(50144375.00, `*`(J_)), `*`(kg_)))], [`+`(`/`(`*`(50144375.00, `*`(J_)), `*`(kg_)))])
Typesetting:-mprintslash([eqTa0_ := Ta = `+`(`*`(2285.002594, `*`(K_)))], [Ta = `+`(`*`(2285.002594, `*`(K_)))]) (5)

i.e. en la combustión teórica se obtendría un PCI=50 MJ/kg=802 kJ/mol, igual que con exceso de aire, pero una Ta=2285 K, que será la máxima obtenible. En función de lambda:

lambda>1

> N:=2;m:=Matrix(N,7):eqM:=eqMIX(subs(dat,a*CH4+a*A*(c21*O2+c79*N2))=[2,3,4,5]);for ii from 1 to N do A_:=rhs(eqA0)*(1+2*(ii-1)/N);sol:=op(solve(subs(A=A_,dat,[eqNX,eqBC,eqBH,eqBO,eqBN]),[a,x[CO2],x[H2O],x[O2],x[N2]]));PCImix_:=PCI(subs(sol,eqM));eqTa_:=subs(a=PCImix_/PCI_,sol,cpComp,dat,eqTa);m(ii,1):=subs(sol,x[CO2]);m(ii,2):=subs(sol,x[H2O]);m(ii,3):=subs(sol,x[O2]);m(ii,4):=subs(sol,x[N2]);m(ii,5):=A_/rhs(eqA0);m(ii,6):=subs(sol,PCImix_/(a*PCI0_));m(ii,7):=rhs(eqTa_)/rhs(eqTa0_):od:pl1:=plot([seq([m(ii,5),m(ii,1)],ii=1..N)],lambda=1..2,0..1):pl2:=plot([seq([m(ii,5),m(ii,2)],ii=1..N)],1..2,0..1):pl3:=plot([seq([m(ii,5),m(ii,3)],ii=1..N)],1..2,0..1):pl4:=plot([seq([m(ii,5),m(ii,4)],ii=1..N)],1..2,0..1):pl6:=plot([seq([m(ii,5),m(ii,6)],ii=1..N)],1..2,0..1,color=black):pl7:=plot([seq([m(ii,5),m(ii,7)],ii=1..N)],1..2,0..1,color=blue):display(pl1,pl2,pl3,pl4,pl6,pl7):

Typesetting:-mprintslash([N := 2], [2])
Typesetting:-mprintslash([eqM := `+`(`*`(a, `*`(CH4)), `*`(a, `*`(A, `*`(`+`(`*`(.79, `*`(N2)), `*`(.21, `*`(O2))))))) = `+`(`*`(CO2, `*`(x[CO2])), `*`(H2O, `*`(x[H2O])), `*`(N2, `*`(x[N2])), `*`(O2, ... (6)

lambda<1

> N:=6;m:=Matrix(N,3):eqM:=eqMIX(subs(dat,a*CH4+a*A*(c21*O2+c79*N2))=[3,4,7,5]);for ii from 1 to N do A_:=rhs(eqA0)*(1-0.8*(ii-1)/N);sol:=op(solve(subs(A=A_,dat,[eqNX,eqBC,eqBH,eqBO,eqBN]),[a,x[CO2],x[H2O],x[CO],x[N2]]));PCImix_:=PCI(subs(sol,eqM));eqTa_:=subs(a=PCImix_/PCI_,sol,cpComp,dat,eqTa);m(ii,1):=subs(sol,x[CO2]);m(ii,2):=subs(sol,x[H2O]);m(ii,3):=subs(sol,x[CO]);m(ii,4):=subs(sol,x[N2]);m(ii,5):=A_/rhs(eqA0);m(ii,6):=subs(sol,PCImix_/(a*PCI0_));m(ii,7):=rhs(eqTa_)/rhs(eqTa0_):od:pl1_:=plot([seq([m(ii,5),m(ii,1)],ii=1..N)],1..2,0..1):pl2_:=plot([seq([m(ii,5),m(ii,2)],ii=1..N)],1..2,0..1):pl3_:=plot([seq([m(ii,5),m(ii,3)],ii=1..N)],1..2,0..1):pl4_:=plot([seq([m(ii,5),m(ii,4)],ii=1..N)],1..2,0..1):pl6_:=plot([seq([m(ii,5),m(ii,6)],ii=1..N)],1..2,0..1,color=black):pl7_:=plot([seq([m(ii,5),m(ii,7)],ii=1..N)],0..1,0..1,color=blue):display(pl1_,pl2_,pl3_,pl4_,pl6_,pl7_):

Typesetting:-mprintslash([N := 6], [6])
Typesetting:-mprintslash([eqM := `+`(`*`(a, `*`(CH4)), `*`(a, `*`(A, `*`(`+`(`*`(.79, `*`(N2)), `*`(.21, `*`(O2))))))) = `+`(`*`(CO, `*`(x[CO])), `*`(CO2, `*`(x[CO2])), `*`(H2O, `*`(x[H2O])), `*`(N2, ... (7)

> pt1:=PLOT(TEXT([2,0.95],'PCI/PCI0'),TEXT([1.3,0.9],'Tad/Tad0'),TEXT([1.3,0.7],'x[N2]'),TEXT([1.3,0.2],'x[H2O]'),TEXT([1.3,0.1],'x[CO2]'),TEXT([1.3,0.05],'x[O2]')):pt1_:=PLOT(TEXT([0.4,0.05],'PCI/PCI0'),TEXT([0.5,0.7],'Tad/Tad0'),TEXT([0.7,0.65],'x[N2]'),TEXT([0.7,0.25],'x[H2O]'),TEXT([0.8,0.03],'x[CO2]'),TEXT([0.7,0.15],'x[CO]')):display(pl1,pl2,pl3,pl4,pl6,pl7,pt1,pl1_,pl2_,pl3_,pl4_,pl6_,pl7_,pt1_);

Plot_2d

>