Jet fuel integration in simple combustor model

916 views
Skip to first unread message

emanuel...@gmail.com

unread,
Oct 16, 2015, 11:48:50 AM10/16/15
to Cantera Users' Group
Hi All,

I am an aerospace engineer new to Cantera and I am exploring the opportunity to use it to zero-dimensionally simulate the combustion of jet fuel in a gas turbine combustor.

I am currently using python and I have started fiddling with the example "reactor1.py" (http://www.cantera.org/docs/sphinx/html/cython/examples/reactors_reactor1.html) where I successfully changed the reacting species to methane and air (components: CH4, O2, N2, AR, CO2, H2O).

My next step would be to set jet fuel as reactant substituting in the above list CH4 with a suitable entry, but I am struggling to find a practical way of doing it.

Can you please suggest something or point me to a reference?

I have seen a few previous posts regarding the use of jet fuel, for example
https://groups.google.com/forum/#!searchin/cantera-users/jet$20fuel/cantera-users/9wVvG6LywUo/gRB3pQefkNoJ
but I did not understand if they are relevant to my problem.

Regards,

Emanuele

PS: I am also open to suggestions on different ways to undertake the simulation. E.g. I have seen the combustor.py example that in principle is closer to what I intend to achieve but it appears to be too complicated for my needs.

Bryan W. Weber

unread,
Oct 16, 2015, 1:36:28 PM10/16/15
to Cantera Users' Group
Dear Emanuele,

Its not really clear from your post what your objective is. You mention that you were able to change the fuel to methane, and that you want to change to jet fuel. What have you tried in terms of making that change? Have you downloaded a jet fuel mechanism?

In addition, you mention using combustor.py as an example in the future and that its closer to what you want to achieve. What is it that is your end goal? It might be that combustor.py is what you need, but it equally might be that that example is not what you need, as you note. Please clarify.

Regards,
Bryan

emanuel...@gmail.com

unread,
Oct 17, 2015, 11:13:08 AM10/17/15
to Cantera Users' Group
Hi Bryan,

unfortunately, being a beginner, I could not try anything in practice to make the change from methane to jet fuel. I have just searched for a while looking for a suggestion with no luck. I have found a few documents with the composition of some jet fuel types but (obviously) they contain a large number of hydrocarbons that would be impractical to input by hand and that I don't even know if their properties are all included in the database installed with Cantera.

Regarding the jet fuel mechanism (probably with reference to the link in my first message), I do not understand why and how I would need it. In my simple test with methane, I don't need to specify any mechanism (only the reactants) and I was expecting the same to happen with jet fuel.

It is quite clear that I am still far from understanding how Cantera works (although I have had a look at some of its documentation). I would be grateful if you could point me to a specific part that I may have missed and that is relevant to my question.

Finally, my end goal would be to use Cantera in my gas turbine simulation program to compute the thermodynamic properties of the working fluid as well as model the combustion phase. Cantera will be called by an external (or "master") program that will control and calculate many of the aspects implemented in the combustor.py example (e.g. mass flows, equivalence ratio,...) However, please note that I did not mention all this in my first message to keep my question concise and because I am still quite far away from the mentioned goal.

At the moment, what I would like to do is simply zero-dimensionally model the combustion of jet fuel with air in python. The way reactor1.py does it would be satisfactory at this stage.

Thanks for your time in my question, I hope now I have made things a bit more clear.

Regards,

Emanuele

Bryan W. Weber

unread,
Oct 17, 2015, 11:55:01 AM10/17/15
to Cantera Users' Group
Dear Emanuele,

Thank you for clarifying! Now I know where to start. As it turns out, even in the simple example, you do need to specify the mechanism; in the example, this is done in the line

gri3 = ct.Solution('gri30.xml')

This loads the GRI 3.0 mechanism that is designed for combustion of natural gas (primarily CH4). The mechanism is loaded into a class called a Solution, which stores the thermochemistry and kinetic data, as well as the current pressure, temperature, and other state variables. So, you will need to specify a mechanism, which you can download from many places on the Internet (LLNL might be a good choice). There are two formats for the mechanisms accepted by Cantera, one called CTML (with the file extension .xml) and one called CTI (with file extension .cti). The format that the mechanism from LLNL (and most other places as well) will come in is called the CHEMKIN format. There is a utility included with Cantera called ck2cti that converts ChemKin 2 CTI. Unfortunately, the documentation for ck2cti is a bit sparse, but you can find some here: http://www.cantera.org/docs/sphinx/html/matlab/input-tutorial.html?highlight=ck2cti#converting-ck-format-files. You can find further help by typing

ck2cti -h

at the command line, either Windows or Linux.

From there, you can load the mechanism into your simulation by replacing the gri3 line:

jet_fuel = ct.Solution('chem.cti')

and then using jet_fuel in place of gri3 everywhere else in the code.

To specify the composition, you're going to need to do a bit of research. As you noted, there are hundreds or thousands of chemicals in real jet fuel, most of which we don't have mechanisms for. Therefore, researchers have developed a number of so-called surrogate fuels, with a limited number of components that can be modeled, but which still reproduce either the chemical or physical behavior of jet fuel. As I said, you'll have to do some research to find out the best surrogate for your needs. After that, you can specify the composition the same was as you did for the methane, just using the names of the new fuel molecules instead of the methane.

Depending on what kind of information you're going to need, Cantera may or may not be able to provide that. Certainly, many or all of the gas-phase situations are covered, but if you need liquid phase data, Cantera might not have all the tools you're looking for, but happily, you should be able to add whatever you need!

Please let me (us) know if we can help any more!

Best,
Bryan

emanuel...@gmail.com

unread,
Oct 17, 2015, 1:38:12 PM10/17/15
to Cantera Users' Group
Superb answer, Bryan. Thank you very much!

I have started googling around but it seems I will need some time until I come back here to report success or to ask for more information.

For now, thanks again.

Regards,

Emanuele

emanuel...@gmail.com

unread,
Oct 19, 2015, 9:40:07 AM10/19/15
to Cantera Users' Group
Hello again,

I'm one step further. I have now a cti file for a jet-fuel mechanism (imported from a Chemkin format) that seems to work with a rudimental jet-fuel surrogate.

I have two questions:

1. During the generation of the cti file and when I run my python script, I read a number of (worrying) warnings about discontinuities (up to 9% of the value at midpoint) in cp and entropy of a number of species. Would Cantera take care of this in some way (by means of interpolation, for example) or I should expect my simulations to be wrong every time the mid-temperature is crossed and the reported species are involved?

2. While playing with the composition of the jet fuel surrogate, I am having a hard time to check in the cti file if some species are supported by the mechanism or not (for example, aromatics). My general way to proceed is to refer to the general formula and translate it into an ASCII code, but I suspect this is not always true (e.g. toluene that has general formula "C7H8" is recorded as "C6H5CH3"). Is there a convention or a document I can check? Maybe there is a Chemkin standard for this? Many searches on line weren't successful. I am not a chemical engineer, so please excuse my possibly naive question.

Thank you.

Regards,

Emanuele

Bryan W. Weber

unread,
Oct 19, 2015, 10:52:29 AM10/19/15
to Cantera Users' Group
Dear Emanuele,

Two very good questions.

1) Unfortunately, there is nothing to be done for this, except to re-generate the polynomials that represent the thermodynamic properties of the species. The same discontinuity occurs in CHEMKIN (which is the software that most people use), so your results should match with their results, despite the discontinuity. It is presently not possible to disable that warning, although if you would like to modify the source code of Cantera to do so, please feel free to share your work!

2) Unfortunately (again), there is no standard for how the species are named. In fact, the name can be any arbitrary ASCII string up to a certain length, and with the possible exception of a few characters. In general, the authors of the mechanism and associated paper may have described some of the species in the paper or its supplemental material, but this is not common. You may have to look at the reactions a species undergoes to try and guess the type of molecule it is, or you may need to email the authors.

Hope it helps!
Bryan

emanuel...@gmail.com

unread,
Oct 20, 2015, 7:12:55 AM10/20/15
to Cantera Users' Group
Hi Bryan,

thanks for your answers, always very helpful.

I wish I had the skills to work on Cantera's source code, but unfortunately I'm less than a beginner in C++ and simply a beginner in Python.

Regarding the discontinuity in the thermodynamic properties, is there a way to check the pattern of reactions (and the relevant species involved) after a simulation of a reactor have run? It would be nice to check the "problematic" species are not used for peace of mind.

I have to report a problem with a mechanism that will be converted ok by ck2cti but will not validate and run if the species "CSOLID" is present in the cti file:

---%<--- begin cti file ----------

<snip>

ideal_gas(name='jetf',
          elements="C H O N Ar He",
          species=""" <snip> CSOLID <snip>""",
          reactions='all',
          transport='Mix',
          initial_state=state(temperature=300.0, pressure=OneAtm))

<snip>

species(name=u'CSOLID',
        atoms='C:1',
        thermo=(NASA([300.00, 1470.00],
                     [-8.82758554E-01,  8.35110072E-03, -7.65453624E-06,
                       3.34520060E-09, -5.61346186E-13, -4.88639663E+01,
                       3.53849619E+00]),
                NASA([1470.00, 3500.00],
                     [ 1.73007911E+00,  1.24133836E-03, -3.99676695E-07,
                       5.50148663E-11, -1.79078883E-15, -8.17038240E+02,
                      -1.00735633E+01])),
        transport=gas_transport(geom='nonlinear',
                                diam=12.91,
                                well_depth=2302.0,
                                polar=45.0,
                                rot_relax=1.0))

<snip>

reaction('CSOLID + O2 => CO2', [1.000000e+08, 0.0, 80000.0])

<snip>

---%<--- end cti file ----------

I have copied only the relevant part of the huge cti file (hoping it is enough). When converting or loading the mechanism, I obtain the following error:

***********************************************************************
CanteraError thrown by GasTransportData::validate:
invalid geometry for species 'CSOLID'. 'nonlinear' specified, but species only contains 1 atoms.
***********************************************************************

Is this a problem with the mechanism or a limitation of Cantera? The quick and dirty fix for now is just to remove the relevant parts shown above from the cti file and cross my fingers. For now, it seems that "CSOLID" (I suspect it would be the atomic carbon) is not used in my simulations, but I would like to learn more in case in the future I will use this mechanism for other simulations.

Cheers,

Emanuele

Bryan W. Weber

unread,
Oct 20, 2015, 11:36:35 AM10/20/15
to Cantera Users' Group
Dear Emanuele,

Certainly, you can print the mole fractions of each species at each time step during the run, to check whether certain species are important. I would expect that you would not see any too-bad behavior in all but some exceptional cases - after all, people have been using these mechanisms for many years without trouble. For CSOLID, I guess you have two options: 1) If CSOLID does not participate in any reactions, it is safe to remove from the species list or 2) Change the transport option to "linear" instead of "nonlinear". The error occurs because the transport properties (i.e., diffusivity, etc) depend on the molecular shape (e.g., CO2 is linear, H2O is nonlinear), but of course, monatomic species can only be linear. Check the value of that property for another species such as Argon, and copy that value.

Best regards,
Bryan

emanuel...@gmail.com

unread,
Oct 20, 2015, 12:14:49 PM10/20/15
to Cantera Users' Group
Hi Bryan,

thanks.

Probably I'm overly worried about the species discontinuities. (I've been bitten some time ago when I wrongly implemented the same NASA polynomial with a discontinuity in a program of mine that tricked the root-finding algorithm.)

Concerning CSOLID, good idea to check Argon (I should have thought of it myself!). It has geometry "atom" ("0" in CHEMKIN format). Probably that's the right one.

If I'll have enough time in the coming days, I'll work on the Fortran integration (maybe I can contribute a little bit there, but I cannot make promises now).

Cheers,

Emanuele

ahas...@aggies.ncat.edu

unread,
Mar 13, 2018, 1:20:06 PM3/13/18
to Cantera Users' Group
I guess monatomic species can only be atomic not linear!
Correct me If it is wrong!

Bryan W. Weber

unread,
Mar 13, 2018, 4:23:34 PM3/13/18
to Cantera Users' Group
Yes, that is correct, I made a typo! Thanks for correcting it.

Best,
Bryan
Reply all
Reply to author
Forward
0 new messages