Problem in modelling heat losses along a Plug-Flow Reactor (PFR)

382 views
Skip to first unread message

Francisco Mesquita Guimarães

unread,
Jul 15, 2021, 12:11:50 PM7/15/21
to Cantera Users' Group

Hi everyone,

I’m developing a model of a stabilized burner for the combustion of ammonia/hydrogen. 

My model consists of some Perfectly Stirred Reactors (PSR) and one Plug-Flow Reactor (PFR).

For the modeling of the PFR, I’m using a chain of reactors, as it is done in the example of Cantera’s site (https://cantera.org/examples/python/reactors/pfr.py.html). I also consider heat losses (by conduction and radiation) along the PFR.

However, despite the heat losses, the temperature and emissions stay constant all along the PFR… And they should decrease through it. 

Here are the graphic results and some parts of my code relevant to this issue.

Some previous clarifications:

 - PFZ is the PFR

- CRZ is the psr upstream the PFR

- dSurfArea_PFZ is the surface area of each one of the reactors of the chain (PFR)

- the emissivity (emiss_ext) considered is 0.9

- t is 10 seconds, to attain steady state


# PFZ dimensions
height_PFZ = height_QT - height_ORZ
crossArea_PFZ = np.pi * intDiameter_QT**2 / 4
vol_PFZ = crossArea_PFZ * height_PFZ
surfArea_PFZ = np.pi * intDiameter_QT * height_PFZ
dLength_PFZ = height_PFZ / nReactors
dSurfArea_PFZ = surfArea_PFZ / nReactors
dVol_PFZ = crossArea_PFZ * dLength_PFZ

(...)

wall_PFZ = ct.Wall(left=resAir, right=PFZ, A=dSurfArea_PFZ, U=ovrU_PFZ)
wall_PFZ.emissivity = emiss_ext

(...)
# iterate through the cells
for n in range(nReactors):

# Set the state of the reservoir to match that of the previous reactor
gas.TDY = PFZ.thermo.TDY
CRZ.syncState()

# integrate the reactor forward in time until steady state is reached
# sim.reinitialize()
sim.set_initial_time(0.0)
# sim.advance_to_steady_state()
sim.advance(t)

# output data
resTime_PFZ[i, j, a, b, c] += PFZ.mass / mdotGas_CRZ_PFZ[j]
states_PFZ.append(PFZ.thermo.state, tres=resTime_PFZ[i, j, a, b, c])

dist = np.hstack([dist, dist[-1] + dLength_PFZ])
Temp_predicted = np.hstack([Temp_predicted, PFZ.T])

wmf_NOx = states_PFZ.X[:, gas.species_index('NO')][-1] + states_PFZ.X[:, gas.species_index('NO2')][-1]
wmf_H2O = states_PFZ.X[:, gas.species_index('H2O')][-1]
dmf_NOx = wmf_NOx / (1 - wmf_H2O)
NOx_predicted = np.hstack([NOx_predicted, dmf_NOx])

wmf_O2 = states_PFZ.X[:, gas.species_index('O2')][-1]
wmf_H2O = states_PFZ.X[:, gas.species_index('H2O')][-1]
dmf_O2 = wmf_O2 / (1 - wmf_H2O)
O2_predicted = np.hstack([O2_predicted, dmf_O2])

temperature_along_tube.jpegNOx_along_tube.jpegO2_along_tube.jpeg

Does anyone have any idea what mistake I am making in modelling heat losses along PFR?

Thank you very much in advance!

Francisco

Steven DeCaluwe

unread,
Jul 15, 2021, 3:02:08 PM7/15/21
to <cantera-users@googlegroups.com>
Hi Francisco,

I think that these parts of your code have been omitted, but where do you set the environment properties?  My guess is that, unintentionally, you have set an environment that has a temperature of 1150 K.

Best,
Steven


<temperature_along_tube.jpeg><NOx_along_tube.jpeg><O2_along_tube.jpeg>

Does anyone have any idea what mistake I am making in modelling heat losses along PFR?

Thank you very much in advance!

Francisco

--
You received this message because you are subscribed to the Google Groups "Cantera Users' Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email to cantera-user...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/cantera-users/d1a2c767-63b6-4a76-a16f-7d160c22ad67n%40googlegroups.com.
<NOx_along_tube.jpeg><temperature_along_tube.jpeg><O2_along_tube.jpeg>

Francisco Mesquita Guimarães

unread,
Jul 15, 2021, 6:20:16 PM7/15/21
to Cantera Users' Group
Dear Steven,

Thank you very much for your attention and for such a quick response!

If I am not mistaken, here is the part of the code you are referring to. 
The environment is modelled by the air reservoir, which is at 298 K. See also the wall definition in the message above.
It looks to me like everything is correct but, in fact, from the results, it seems there is no heat loss along the PFR...

P = 101325
T0_air = 298
T0_fuel = 298
T0_intQT = 298

# gaseous fuel
fuel = ct.Solution('Okafor(2019).cti')
fuel.TPX = T0_fuel, P, 'NH3:{:.2f}, H2:{:.2f}'.format(xNH3, xH2) # to change the fuel composition
rhoFuel = fuel.density
M_fuel = fuel.mean_molecular_weight

# gaseous oxidizer
air = ct.Solution('Okafor(2019).cti')
air.TPX = T0_air, P, 'O2:{:.2f}, N2:{:.2f}'.format(xO2, xN2)
rhoAir = air.density
M_air = air.mean_molecular_weight

# initial mixture inside reactors (air)
gas = ct.Solution('Okafor(2019).cti')gas.set_equivalence_ratio(phiPri[j], 'NH3:{:.2f}, H2:{:.2f}'.format(xNH3, xH2),'O2:{:.2f}, N2:{:.2f}'.format(xO2, xN2))
gas.TP = T0_intQT, P
rhoGas = gas.density# Create reservoirs for the two inlet streams
resAir = ct.Reservoir(air)
resFuel = ct.Reservoir(fuel)

Note that I use the same mechanism for both fuel and air (not exactly sure if that is correct). 

Any other ideas on where my mistake might be?

Thanks and best regards,
Francisco

Steven DeCaluwe

unread,
Jul 15, 2021, 10:53:14 PM7/15/21
to <cantera-users@googlegroups.com>
Thanks, Francisco—there is certainly nowhere where you are setting an environment to 1150 K, that is for sure! :)

Have you played with the wall values (surface area of heat transfer coefficient U) to see if they impact the results in meaningful sensible ways (i.e. temperature decreases for increasing A or U)?

That would be the next thing I check.

Best,
Steven


Francisco Mesquita Guimarães

unread,
Jul 16, 2021, 12:05:23 PM7/16/21
to Cantera Users' Group
Hi Steven,

I just found part of the problem: I was misusing the .syncState feature. 
Basically, I was matching the pfr reactor state (PFZ) with the upstream psr state (CRZ.syncState) but in reality it seems that's not correct. So I created a reservoir between CRZ and PFZ to match the state of the PFZ reactors with the state of the reservoir. And the results are better! I don't know if I explained myself well enough... 

Without considering the emissivity at the burner tube wall the results are these (compared with experiments):
T_without_emiss_walls.jpegNOx_without_emiss_walls.jpegO2_without_emiss_walls.jpeg
But when I consider emissivity (=0.8) I obtain this:

T_with_emiss_walls.jpegNOx_with_emiss_walls.jpegO2_with_emiss_walls.jpeg
As I understand, the model is assuming that no reaction is occuring in the pfr so the emissions are the same all along it. But the experiments show a bit different reality...

Any suggestions on how I can improve these results?

Thanks a lot for all the help!

Francisco
Reply all
Reply to author
Forward
0 new messages