Welcome Guest, you are in: Login

FUBAR Labs Hackerspace Wiki



Search the wiki

Back to the Main Rocket Page


I’ve been working now for a few months now on the design of my first regenerative cooled engine and I feel that I’ve gotten far enough to share what I’ve learned in case others may find it useful. This article will discuss my progress to date, some things I’ve learned, and cover the things I do not fully understand (yet!).


The math described below is typically kept at a fairly high level so as not to bore readers looking for a general overview. For a more detailed overview of the mathematics I would strong suggest reading Huzel and Huang. This is where I learned most of the math and it has some very good examples with worked results. I’ve also made available here a copy of the calculations I used in my regenerative engine. Feel free to use these in your projects; however, please cite this if used in any publications. I’d also appreciate a link if you re-use anything here. This is just for my personal interest to see what others have done.

I expect there to be mistakes in what I’ve written so bear that in mind if trying to reproduce these results and please, if you find a mistake let me know so that I can correct it.


On the surface the math behind rocket engines is relatively simple. There is a mass flow of propellant being injected into a chamber at a certain pressure. This is then combusted and produces thrust at a calculable exhaust velocity and temperature.

It’s that last parameter, temperature, which is of particular interest to me...

The reason being is that a typical oxygen, hydrocarbon (ie. kerosene or alcohol) engine combusts at temperatures at or exceeding 4000o Fahrenheit. A quick Web Search reveals that there are very few materials on Earth that will not melt at that temperature so cooling quickly becomes a critical component of most engine designs.

I also mentioned that engine math is relatively simple. I should note that heat transfer, at least in my view, is not. I quickly found myself going from simple algebra to chopping geometry into stations and then into the wild world of FEA(Finite Element Analysis) and partial differential equations. Not to mention the strange new variables such as estimated stagnation recovery factor, which I did not at all understand.

This little engine runs at 4000F and cannot fire for more than a few seconds before melting.

This little engine runs at 4000F and cannot fire for more than a few seconds before melting.

Dealing with Heat

There are 3 main approaches to dealing with these high temperatures in an engine:
  1. Ablative Cooling: using special materials that protect the inside of engines from high heats.
  2. Film Cooling: injecting a film of (typically) liquid onto the inside engine walls to produce a higher fuel/oxidizer ratio and thus reduce combustion temperature on the internal walls of the engine.
  3. Regenerative Cooling: flowing either the fuel (usually) or oxidizer (occasionally) through internal passageways in the engine, which transfers the heat from the hot walls of the engine to the liquid. This also has the benefit of adding a small amount of energy (ie. due to heat transfer) to the propellants and thus marginally increases performance.

Tell me how Regenerative Cooling Works

A 3D design with cooling passages running the length of the engine.

A 3D design with cooling passages running the length
of the engine.

At a high level regenerative cooling is quite simple to explain. It works by injecting the coolant into channels or tubes inside of the engine walls. Think of the engine as a cylinder with a fixed wall thickness. In between the internal and external walls are tubes or channels that circulate a fluid. This fluid soaks up the heat and keeps the engine from getting too hot.

The channels or tubes usually go vertically through the engine starting at either exit nozzle or injector top and working their way to the other side. There are single, double, and tipple, etc... designs that flow the coolant one way, round-trip, round-trip-and-a-half, etc… respectively. Another approach is to use a helical jacket that flows coolant through the engine in a spiral.

I am primarily interested in tube and channel single pass designs. The reason for this is that tubes can be machined fairly easily and channels are easy to create if printing an engine. These are the 2 fabrication approaches I’m currently considering.

If the design works correctly you achieve steady-state heat transfer, which means the engine reaches an equilibrium temperature. This is our goal because once the engine reaches steady state it will not get any hotter. If we can accurately calculate this steady state temperature and incorporate it into our design we can build an engine that is less likely to fail due to over-heating.

The Basic Math behind Regenerative Cooling

At the most basic level there are only a few parameters to deal with:
  • Gas Side Heat Transfer Coefficient (hgc) - This is the heat transfer coefficient on the hot gas side (eg. inside the engine).
  • Coolant Side Heat Transfer Coefficient (hc) - This is the heat transfer coefficient of the liquid coolant (eg. the stuff running in channels through the engine)
  • Heat Flux (q) - the amount of heat transferred from the hot side to the walls of the engine.

The idea is to keep the gas side heat transfer coefficient as low as possible to prevent a lot of heat from being transferred to the walls. Then keep the coolant side heat transfer coefficient as high as possible to suck up all the heat, which is transferred to the walls.

Here are the basic equations that govern heat transfer as can be found in Huzel and Huang (eq 4-19 - 4-22) :


Easy enough so far.

The challenge starts as we try to figure out what the values for hgc, hc, and q should be and as I’m sure you expect the calculations are not at all trivial.

Working out the Heat Transfer Numbers

There are multiple ways to calculate heat transfer and one can get very sophisticated as will be seen later. However, the approach I initially took is to first calculate hgc, followed, by q and finally hc. Note- that this is the same approach outlined in Huzel and Huang section 4.4. If you have a copy of this text or can find one online I’d strongly suggest referencing this instead as it is for more complete than what I’m about to describe below.

Calculating Gas Side Heat Transfer (hgc)

The simplest approach and the one that I initially started with is to focus mainly on the throat which is the point of the highest heat transfer and thus the worst case condition. The idea being that if the throat can handle the heat transfer the rest of the engine should be fine as well.

To calculate hgc one typically uses the Bartz correlation which calculates heat transfer as a function of throat diameter, viscosity of the gas, thermal conductivity of the gas, chamber pressure, specific heat, area ratio, and correlation factor(σ).


Some numbers such as throat diameter, chamber pressure, and area-ratio are fairly straightforward to select. There are some good worked examples in Huzel and Huang (see sample calculation 4-3) but some of the parameters such as specific heat, viscosity, thermal conductivity, and correlation factor (σ) were difficult to select. I suspect this is mainly because these are discussed in other engineering texts and not necessarily unique to liquid rocket engines. However, for someone like myself that comes from a more Software Engineering background I did find I struggled with these a bit.

Calculating Heat Flux (q)

Once, the gas side heat transfer is known calculating the heat transferred to the engine wall or heat flux (q) is fairly trivial. This is done via equation 4-10 in Huzel and Huang and measures the difference between the hot gas side wall temp and the adiabatic wall temp multiplied by the gas side heat transfer coefficient.


The trick used in the method from H&H is to choose an allowable wall temp. This is based off the Material Data Sheet for the particular wall material in use. Choose a value that is high but not so high that structural failures could occur.

The value of adiabatic wall temp of the gas was a bit trickier. It’s easy to see how small changes in this value could lead to significantly different heat-flux calculations so I was keen to get this right, however, this proved to be a bit of an enigma as discussed below.

In Sample Calculation 4-4 (a) of H&H it is mentioned that adiabatic wall temp can be calculated as the combustion temperature times the estimated stagnation recovery factor. However, the later term is not clearly explained and it instead uses a mysterious 0.923 value.

An alternative approach prescribed by H&H (eq 4-10a) calculates this value as a factor f the local: Mach number, specific heat ratio, and Prandtl number.


Although the term estimated stagnation recovery factor was not clearly explained in H&H in conversations with Rocket Moonlighting (RM)** it was explained as follows:

**More on who RM is and his invaluable contributions in a bit

“In the barrel section of the chamber, the hot gasses are moving at subsonic speeds, and relatively slowly - their temperature is very close to the maximum flame temperature. As the gas approaches the throat, the velocity increases, the pressure decreases, and the temperature decreases as well… However, even at the throat, gas near the wall is moving very slowly - this is the "no-slip condition" where the velocity of gas in direct contact with a wall is zero. Consequently, the gas at the wall is much hotter than the bulk of the flow because it is moving slowly (like the gas in the barrel section). In practice, we have found that the temperature at the wall doesn't quite reach the total temperature - only some of the temperature is "recovered" - hence the term recovery factor.”

RM goes on to further recommend that the most conservative approach is to select an estimated stagnation recovery of 1. This effectively assumes that all heat is recovered and the hot gas temperature equals the adiabatic wall temp. Remember, if our primary goal is to make sure the engine doesn’t fail this is a sensible assumption.

Regardless of how this value is selected it has a significant impact on heat transfer and as will be seen shortly, the rest of the outputs. Selecting an appropriate value is therefore of noteworthy importance.

Calculating the Coolant Side Heat Transfer Coefficient (hc)

I found the method for calculating hc clever and practical. Sample Calculation 4-4 of H&H describes this best. It works by first calculating hc by rebalancing 4-20 using the now known values for q and hgc.

Then it uses the Sieder-Tate equations for turbulent heat transfer to liquids flowing in channels to calculate the number of and diameter of coolant passages needed to adequately cool the engine.

The reason I like this approach so much is that it gives the designer the ability to choose values for the heat transfer coefficients as well as flux and then select coolant passage geometry to meet those particular conditions.


Note that Sieder-Tate deals with non-boiling subcritical temperature regions, which means the additional heat-transfer provided by a phenomenon called nucleate boiling are not considered. I like this because it is conservative. In other words should my calculations be wrong I know the engine may have a bit of additional cooling capacity due to nucleate boiling.

Wrap Up

Once the primary heat transfer parameters are known it is possible to calculate the heat transferred to the coolant, the coolant bulk temperature increase and the maximum cooling capacity of the coolant. Sample calculations for these can be found in my engine math spreadsheet and in H&H.

Ok Where are We?

We talked a bit about heat transfer, what it is and why it’s important. We also looked at some basic (but far from easy!) math for estimating heat transfer at the throat of an engine in H&H.

This gives a good introductory approximation of heat transfer and a hopefully sufficient method for amateur efforts of small engines such as the type I’m working on. However, a more sophisticated effort such as in the research of commercial engines would require a more detailed analysis.

In the next section I will discuss some additional tools that can be used to do heat transfer analysis.

Introduction to Additional Heat Transfer Approaches

Being a non-engineer, it took me a long time to wrap my head around some of the concepts in heat transfer, thermodynamics, and a bit of chemistry. I spent a lot of time researching these fundamentals and I was amazed that it’s even possible to roughly estimate some of these highly sophisticated phenomena.

Most of my initial heat-transfer research was in the first half of 2012 (this is not my day-job so I tend to move at a snail’s pace!) and during that time 2 interesting things happened.

First a frequent Arocket contributor Rocket Moonlighting or RM generously posted some fairly sophisticated Heat Transfer software called Coolant, which is licensed under GPL on Google Code. Thanks to RM, I was also introduced to a technique called Finite Element Analysis or FEA (more on this in a bit).

The second interesting thing is that Alexander Ponomarenko who is the author of the software package Rocket Propulsion Analysis or RPA introduced a new module to calculate heat transfer properties. RPA is a commercial software package, however, it is used fairly regularly by the Arcoket community and there is a good deal of confidence in the calculations.

This gave me the opportunity to evaluate other approaches and more importantly improve my understanding of heat transfer.

The next section talks a bit more about these additional approaches. The interested reader is encouraged to follow-up with the relevant references for further information.


Coolant was written in Python and is a compact yet sophisticated piece of code. It uses the SciPy library, which is an open source library of algorithms and mathematical tools for the Python programming language.

It also uses a sophisticated fluid properties calculation engine called REFPROP or Reference Fluid Thermodynamic and Transport Properties and is published by the NIST. REFPROP claims to be the most accurate thermophysical program available. The downside is that its released only under a paid license.

Coolant chops up the geometry of an engine into small chunks called stations. Each station represents a finite length of the engine. It then proceeds to solve the heat transfer equations for each section as one flows into the next. So for example, the output of the first station becomes the input for the next station. This gives a more detailed view of what is happening in the engine at a particular point.

Coolant produces a number of outputs, however, the primary ones are: coolant temperature, inner wall temperature, coolant wall temperature, and pressure drop through the jacket. Note that heat transfer outputs are calculated via the Bartz equation.


RPA produces results for different types of cooling techniques, such as: radiation, regenerative for both tubes and channels (think cylinders or 3D rectangles), as well as film cooling. It publishes documentation on the mathematics used in heat transfer analysis along with references.

RPA provides the option of using 2 different equations for calculating heat transfer. These are the Bartz equation, which has been discussed previously or the Ievlev equation. It also supports producing output as an average of Ievlev and Bartz.

From speaking with the author of RPA I’ve been informed that Ievlev is the more accurate algorithm for small engines. Details on Ievlev can be found here: (also see references section). I’m not familiar enough with Ievlev to validate this; however, it appears to be a Russian analysis technique. As an aside, this is a nice benefit of using RPA as the author includes both Russian and American techniques in its calculations.

For my purposes I’m interested in the algorithm that produces the most heat-transfer because I want to consider the worst case scenario. So generally speaking I will always check both and won’t average results.

Another nice feature of RPA is that it has an easy-to-use interface that produces some graphs and it also supports an API like scripting interface. A small downside to RPA’s heat transfer analysis is that it does not support as many cooling fluids as Coolant does. This is not a big deal because the list of coolants used in a typical engine is quite low although it could make analyzing exotic cooling techniques more difficult.

Finite Element Analysis (FEA) Agros and Hermes

Closeup of Agros2D Heat Transfer Analysis

Closeup of Agros2D Heat Transfer Analysis

While RM was helping me get Coolant up and running he mentioned a technique called Finite Element Analysis or FEA, which could be used for doing more sophisticated heat transfer analyses. FEA uses differential and partial differential (PDE) equations to solve complex physics problems. I won't say more on this as I'm far from an expert myself but the interested reader can reference the Wikipedia article as a starting point for further information.

In particular we looked at 2 FEA packages: Hermes, which is a PDE/FEA solver maintained by the University of Reno. We also looked at using a GUI tool called Agros2D, which is effectively a wrapper for Hermes. RM was interested in incorporating his Coolant software into Hermes to provide a more sophisticated heat-transfer analysis. I also felt this would be a worthwhile and useful feature and decided to attempt to integrate the 2.

Unfortunately, while I was able to get the Hermes API working I had a bit of trouble producing reasonably accurate results. This was no fault of Hermes but more due to my lack of knowledge on the mathematical fundamentals of FEA.

After an honest attempt with this I decided to put FEA on the back-burner to re-focus back on engine design. This is primarily because I could see that learning FEA would have been a significant time investment that would have taken me away from my primary goal of building a regenerative engine. Having said this though from what I did start to learn of FEA I was fascinated by the mathematics and I do intend to jump back into this at some point as FEA is a fascinating tool.

Where are we? Or: Summary of Analytical Approaches

Ok so to recap on what we’ve covered:

  • We looked at the fundamentals of heat transfer in an engine and why it’s important:
  • We did a quick review of the Bartz and Sieder-Tate equations and an overview of the basic but useful analysis prescribed in Huzel and Huang.
  • Then we talked a bit about the different approaches used by: Coolant, RPA, as well as FEA tools such as Agros and Hermes

Summary of Analytical Approaches

As I final wrap-up I thought I thought it would be interesting to compare the outputs of the different approaches for my proposed regenerative engine.

My current engine design has the following specs:
  • 50 lbf thrust
  • 0.1 kg/sec of Ethanol/GOX Propellant
  • 1:1 O/F Mixture Ratio
  • 2575o Kelvin Chamber Temp
  • 150psi Chamber Pressure
  • Regenerative Cooled by cycling 100% of the Ethanol through the chamber.
  • Single pass with 15 coolant channels 0.8 x 0.8 mm dimensions.

...and here are the results:

Parameter                         My Calcs RPA - Ievlev RPA - Bartz Coolant Agros 2d
(w/ Coolant
Heat Inputs)
Throat Gas Side Heat Transfer Coefficient (Hgc) - 6.2 3.1 7.366.2N/AkW/m2-K
Throat Heat Flux (q) -7638457067497325N/AkW/m2-K
Throat Coolant Side Heat Transfer Coefficient (Hc) -11.59N/AN/A9.67N/AkW/m2-K
Internal Wall Temp (Twg) -13211105143514061300oK
Coolant Wall Temp (Twc) -93987810981040990oK
Coolant Temp after Leaving the Cooling Jacket (Tc) -585451519445N/AoK

Looking at these I’m actually quite pleased with the output. Everything is in general agreement and there are no outputs that significantly deviate. The differences where present could be reasonably attributable to the various approaches used to calculate results. For example, RPA - Ievlev and Agros2d both use different algorithms than those used by Coolant, RPA-Bartz and my calculations. So some discrepancy there is to be expected.

It is interesting to note the difference between the heat-flux and wall temps outputs produced by Coolant and RPA-Bartz versus my calculations. The difference seems to be mainly attributable to the fact that Coolant/RPA divide the engine up into stations (sections) and calculate the heat transfer values whereas mine simply looks at the throat, chamber, and exit section. Thus for my equations you are getting more of a high-level estimate whereas coolant and RPA are producing much more accurate figures. This being said I do find it quite interesting that Agros seems to agree more with my calculations than either Coolant or RPA. I do not have an explanation for this.

I've noticed that one of the more significant factors in the cooling capability is the distance between the inner wall and the cooling tubes (thickness). The thinner the wall the better the cooling capabilities. Therefore it makes sense to keep this as thin as possible without risking structural failure. I'm not yet sure how to optimally balance these.

Where some numbers converge, for example the Hgc from my calculations and Coolant this is more than coincidence. Coolant currently doesn’t support calculation of this variable and it must be manually input. That issue was fairly trivial to deal with as I could calculate this number myself or use RPA.

However, this brings up another point: no tool is totally self-reliant. By this I mean that each tool requires certain input parameters to be already known. This means there is inherently some sharing of data between tools, which ultimately influences their general agreement in results.

And What About Film Cooling?

At the beginning of this article I mentioned that film cooling was also important. The reason for this is quite-simple:

Regenerative cooling alone is not always sufficient.

Take, for example, my engine design that was used in the analysis section above. This engine circulates ethanol through 15 coolant passages. Taking these parameters I can calculate the max cooling capacity or Qmax of the coolant as the result of: mass-flow * coolant-specific-heat * (critical-coolant-temp - initial-coolant-temp). I can also approximate the actual heat transferred to the coolant by integrating the surface area of the chamber and then using that plus hgc.

For my proposed design I get: 30.75 kW - Max Coolant Capacity (Qmax) 19.89 kW - Actual heat transferred (q)

This means that my design has approximately 10 kW of unused cooling capacity. However, I'm not particularly confident in these numbers because looking at the results of RPA-Bartz I can see the coolant temp approaches its critical temperature or the point where it can no longer be held in a liquid state. This suggests my cooling margins are actually a bit smaller than what I've calculated.

So what should I do?

Well I could adjust my geometry to decrease the tube diameter and the wall thickness. However, there is a practicl limit to how small I can go here. The other option is to reduce the hot-gas temperature at the internal chamber wall. I can do this by using film-cooling at the throat, which is the region of highest heat transfer. Injecting a portion of propellant into the throat effectively reduces the gas-temperature near the wall. This in-turn reduces the value of hgc and the actual heat transferred to a value below the Qmax.

As I mentioned earlier my mathematical understanding of film cooling is quite limited so I will not delve any further into this topic in this article.

Final Thoughts and Conclusions

In this article we discussed the justification for cooling an engine. Then we looked at the basic math behind regenerative cooling. This was followed by a summary of some tools used to calculate cooling as well as a comparison of their outputs for an engine I’m designing.

I’d like to summarize by making a few final observations

From my research I find that calculating cooling properties in a rocket engine is far from trivial. Further, there does not seem to be a generally accepted best practice for calculating cooling properties. My hope is that this changes soon as it is too important not to prescribe standard approaches for solving as there are for values like specific impulse, mass flow, and exhaust-velocity.

In order for this to occur, I think a few things need to happen.
  1. The writers of the main rocket propulsion text books (this is probably Sutton currently), need to dedicate more time to regenerative, film, ablative, as well as radiation cooling. While the approach in H&H works the book is fairly old and there is not enough coverage of some variables. Doing this would enable the practitioners to lay out the fundamentals so that people interested in learning about cooling will have a single source that can be used to study the basic approaches.
  2. It may be helpful if additional amateurs publish the mathematics they used in their cooling designs and made the outputs of their test results publicly available. Doing this will allow other designers to compare and evaluate different approaches and hopefully there will be some convergence in terms of best practices.

Most importantly, I hope this article was useful. For casual readers, I hope this at least gives a better understanding of why cooling is important and the next time you see a SpaceX Test you’ll understand why the engine doesn’t just melt.

For those looking to replicate these results I hope you find this useful in your own projects.


  1. Modern Engineering for Design of Liquid-Propellant Rocket Engines. Dieter K. Huzel, David H. Huang. AIAA, 1992. Online version can be found here.
  2. Rocket Propulsion Elements (8th Edition). George P. Sutton, Oscar Biblarz. John Wiley & Sons, 2010. Online version can be found here.
  3. Rocket Propulsion Analysis (RPA). SoftwareSoftware, Theory.
  4. Coolant Heat Transfer Analysis. Software
  5. Hermes FEA Analysis API. Software. Produced by the hp-FEM group at the University of Nevada.
  6. Agros2d Tool for Solving Physics Problems. Software. Developed by a group at the University of West Bohemia in Pilsen
  7. Lemmon, E.W., Huber, M.L., McLinden, M.O. NIST Standard Reference Database 23: Reference Fluid Thermodynamic and Transport Properties-REFPROP, Version 9.1, National Institute of Standards and Technology, Standard Reference Data Program, Gaithersburg, 2013.

ScrewTurn Wiki version Some of the icons created by FamFamFam.