Actions

Difference between revisions of "Furnace temperature and pressure math"

From Unofficial Stationeers Wiki

 
(37 intermediate revisions by 4 users not shown)
Line 1: Line 1:
''The data used was collected in version 0.2.2800.''
+
=== Introduction ===
 +
This page is about predicting combustion temperatures and pressures inside furnaces. It's not about engineering or design.
 +
 
 +
The furnace is one of the most important objects in the entire game, but it can also be complicated and hard to use, especially when making alloys and super-alloys. There is no real need to know anything written on this page, because it's possible to engineer solutions that doesn't require placing fuel inside a furnace. Hot gas can also be made elsewhere (with an Air Conditioner or by combusting fuel in a pipe) and stored in insulated tanks, and just be pumped directly into a furnace as needed.
 +
 
 +
There are two MIPS scripts here (click the links to expand/collapse the code), that can do the math described on this page inside the game. The first script is used to predict what temperature and pressure a furnace will reach when the current gas content is ignited. The second script is used to predict how much perfect fuel (33.33% oxygen and 66.67% volatiles) and how much other gas (not fuel) that needs to be added in order to reach a desired temperature and pressure on ignition. There are two alloys that are tricky however: Waspaloy and Solder. That is because the gas mixes to make these two tends to be too dilute to ignite (below 5% oxygen), but there are ways around that, the furnace could for example be ignited after adding only half the dilutant and then the remainder is added afterwards).
 +
 
 +
<div class="mw-collapsible mw-collapsed" data-expandtext="{{int:EXPAND - a MIPS script that predicts the ignition temperature and pressure of a furnace based on the gases inside of it}}" data-collapsetext="{{int:COLLAPSE - a MIPS script that predicts the ignition temperature and pressure of a furnace based on the gases inside of it}}">
 +
<pre>
 +
#prediction of the ignition temperature and pressure of a furnace
 +
#if combustion can't occur, display current temperature and pressure
 +
 
 +
alias furnace d0        #advanced or regular
 +
alias consoleTemp d1    #console, small LED
 +
alias consolePres d2    #console, small LED
 +
 
 +
alias ratioOx r5
 +
alias ratioVol r6
 +
alias specificHeat r12
 +
alias fuel r13
 +
alias temp r14
 +
alias pres r15
 +
 
 +
define energyReleased 563452
 +
define specificHeatInc 172.615
 +
define gasMolInc 5.7
 +
 
 +
main:
 +
yield
 +
#calculate the specific heat of the gas mix
 +
l r5 furnace RatioOxygen
 +
l r6 furnace RatioVolatiles
 +
l r7 furnace RatioCarbonDioxide
 +
l r8 furnace RatioPollutant
 +
l r9 furnace RatioNitrogen
 +
l r10 furnace RatioNitrousOxide
 +
l r11 furnace RatioWater
 +
mul r0 r5 21.1
 +
mul r1 r6 20.4
 +
add r0 r0 r1
 +
mul r1 r7 28.2
 +
add r0 r0 r1
 +
mul r1 r8 24.8
 +
add r0 r0 r1
 +
mul r1 r9 20.6
 +
add r0 r0 r1
 +
mul r1 r10 23
 +
add r0 r0 r1
 +
mul r1 r11 72
 +
add specificHeat r0 r1
 +
#calculate the fuel amount
 +
div ratioVol ratioVol 2
 +
min fuel ratioOx ratioVol
 +
#calculate Temp after ignition
 +
mul r0 fuel specificHeatInc
 +
add r0 r0 specificHeat
 +
mul r1 fuel energyReleased
 +
l r2 furnace Temperature
 +
mul r2 r2 specificHeat
 +
add r1 r1 r2
 +
div temp r1 r0
 +
#calculate Pressure after ignition
 +
l r0 furnace Temperature
 +
l r1 furnace Pressure
 +
mul r2 fuel gasMolInc
 +
add r2 r2 1
 +
mul r2 r2 temp
 +
mul r2 r2 r1
 +
div pres r2 r0
 +
#check if pressure <10kPa and ratios <0.05
 +
blt r1 10 noCombustion
 +
blt ratioOx 0.05 noCombustion
 +
blt ratioVol 0.05 noCombustion
 +
s consoleTemp Color 6
 +
s consolePres Color 1
 +
j displayResults
 +
noCombustion:
 +
s consoleTemp Color 3
 +
s consolePres Color 2
 +
move temp r0
 +
move pres r1
 +
displayResults:
 +
s consoleTemp Setting temp
 +
s consolePres Setting pres
 +
j main
 +
 
 +
### End Script ###
 +
</pre>
 +
</div>
 +
<br>
 +
 
 +
<div class="mw-collapsible mw-collapsed" data-expandtext="{{int:EXPAND - a MIPS script that calculates how to mix fuel and diluting gas inside a furnace to reach a desired temperature and pressure}}" data-collapsetext="{{int:COLLAPSE - a MIPS script that calculates how to mix fuel and diluting gas inside a furnace to reach a desired temperature and pressure}}">
 +
<pre>
 +
#A script for calculating how to dilute fuel..
 +
#..inside a furnace to reach a desired temperature..
 +
#..and pressure on ignition
 +
 
 +
# This script requires perfect fuel (O2 + 2 H2)
 +
# The diluting gas can be anything, even a mix
 +
# Temperature of fuel and dilutant can be different
 +
# BLUE color = dilutant must provide missing oxygen
 +
# ORANGE color = gas will ignite
 +
 
 +
#Inputs are desired temperature (K) and pressure (kPa)
 +
#Outputs are the pressure of fuel (kPa) and the..
 +
#..total pressure (kPa) after adding the dilutant
 +
 
 +
alias inputTemp d0          #logic memory
 +
alias inputPres d1          #logic memory
 +
alias outputFuel d2        #console, small LED
 +
alias outputTotal d3        #console, small LED
 +
alias fuelAnalyzer d4      #pipe analyzer
 +
alias dilutantAnalyzer d5  #pipe analyzer
 +
 
 +
alias oldTmix r10
 +
alias Tmix r11
 +
alias fuelSpecificHeat r12
 +
alias dilutantSpecificHeat r13
 +
alias ratioFuel r14
 +
alias pressureTotal r15
 +
s outputTotal Color 1
 +
 
 +
main:
 +
yield
 +
s outputFuel Color 3
 +
#calculate specific heat values
 +
div r0 61.9 3
 +
move fuelSpecificHeat r0
 +
jal specficHeatCalculation
 +
#calculate how to reach input values
 +
l r5 fuelAnalyzer Temperature
 +
l r6 inputTemp Setting
 +
l r7 dilutantAnalyzer Temperature
 +
move oldTmix r5
 +
move r9 5
 +
iterate:
 +
jal fuelRatioCalculation
 +
jal temperatureMixCalculation
 +
sub r9 r9 1
 +
move oldTmix Tmix
 +
blt r9 1 iterate
 +
#calculate total fuel+dilutant pressure
 +
l r8 inputPres Setting
 +
mul r1 ratioFuel 1.9
 +
add r1 r1 1
 +
mul r1 r1 r6
 +
mul r0 r8 Tmix
 +
div pressureTotal r0 r1
 +
#calculate fuel pressure
 +
mul r0 r5 pressureTotal
 +
mul r0 ratioFuel r0
 +
div r0 r0 Tmix
 +
#calculate dilutant pressure (not used)
 +
#sub r1 1 ratioFuel
 +
#mul r1 r1 pressureTotal
 +
#mul r1 r1 r7
 +
#div r1 r1 Tmix
 +
#check for too high input temperature
 +
blt pressureTotal r0 noCombustion
 +
#display result
 +
bltal ratioFuel 0.15 dilutantMustHaveOxygen
 +
bltal ratioFuel 0.10 noCombustion
 +
s outputFuel Setting r0
 +
s outputTotal Setting pressureTotal
 +
j main
 +
noCombustion:
 +
s outputFuel Setting -1
 +
s outputTotal Setting -1
 +
j main
 +
dilutantMustHaveOxygen:
 +
s outputFuel Color 0
 +
j ra
 +
 
 +
fuelRatioCalculation:
 +
div r0 563452 3
 +
sub r4 fuelSpecificHeat dilutantSpecificHeat
 +
mul r1 Tmix r4
 +
add r0 r0 r1
 +
mul r1 r6 r4
 +
sub r0 r0 r1
 +
div r1 172.615 3
 +
mul r1 r6 r1
 +
sub r0 r0 r1
 +
sub r1 r6 Tmix
 +
mul r1 r1 dilutantSpecificHeat
 +
div ratioFuel r1 r0
 +
j ra
 +
temperatureMixCalculation:
 +
sub r4 1 ratioFuel
 +
mul r0 dilutantSpecificHeat r4
 +
mul r1 ratioFuel fuelSpecificHeat
 +
add r3 r0 r1
 +
mul r0 r7 r4
 +
mul r0 r0 dilutantSpecificHeat
 +
mul r1 r5 ratioFuel
 +
mul r1 r1 fuelSpecificHeat
 +
add r0 r0 r1
 +
div Tmix r0 r3
 +
j ra
 +
specficHeatCalculation:
 +
l r5 d5 RatioOxygen
 +
l r6 d5 RatioVolatiles
 +
l r7 d5 RatioCarbonDioxide
 +
l r8 d5 RatioPollutant
 +
l r9 d5 RatioNitrogen
 +
l r10 d5 RatioNitrousOxide
 +
bne r5 r5 noCombustion #protection against null
 +
mul r0 r5 21.1
 +
mul r1 r6 20.4
 +
add r0 r0 r1
 +
mul r1 r7 28.2
 +
add r0 r0 r1
 +
mul r1 r8 24.8
 +
add r0 r0 r1
 +
mul r1 r9 20.6
 +
add r0 r0 r1
 +
mul r1 r10 23
 +
add dilutantSpecificHeat r0 r1
 +
j ra
 +
 
 +
### End Script ###
 +
 
 +
</pre>
 +
</div>
  
 
=== Furnace behaviour ===
 
=== Furnace behaviour ===
*Only the gas inside the furnace have temperature, the furnace itself do not, nor does it take any energy from the gas.
+
*Only the gas inside the furnace have a temperature (the furnace itself has no temperature, nor will it take heat away from the gas inside)
*For a combustion to occur, there must be at least 5% each of both O2 and H2
+
*No side reactions have been observed (fuel can be mixed with any other gas with predictable results)
 +
*For a combustion to occur, the gas must have at least 5% each of both O2 and H2
 +
*For a combustion to occur, there must be a minimum pressure of 10 kPa ''(0.2.2733.13309 changelog)''
 
*A combustion will consume 95% of the limiting ingredient, O2 or H2 (if there is 10 mol H2, and excess O2, 0.5 mol H2 will remain afterwards)
 
*A combustion will consume 95% of the limiting ingredient, O2 or H2 (if there is 10 mol H2, and excess O2, 0.5 mol H2 will remain afterwards)
*Combustion reaction formula: 1 O2 + 2 H2 -> 6 CO2 + 3 X + 595kJ
+
*Combustion reaction formula: 1 O2 + 2 H2 -> 6 CO2 + 3 X + 593 107.3684 J ''(this energy value is an approximation, see discussions for details)''
*No side reactions have been observed so far
+
*Each press of ignite adds 5 J of energy to the furnace (only the advanced furnace was tested) ''(see discussions)''
 +
*A furnace, as any other device with internal atmosphere, except insulated ones, constantly radiates temperature into void, even when built in a sealed room with vacuum or inside a fully welded frame. This should simulate entropy and radiative heat exchange with space, but does not account if device is placed in a room. And also this does not increase temperature when it's lower than global atmosphere's temperature.
 +
*Ores placed in a furnace will release gases, this reduces the temperature and increases the mols of gas.
 +
*Ingots placed in a furnace will reduce the temperature (~half compared to the ore, only copper tested) without releasing gas.
 +
*Inserted ores/ingots are processed at a speed of 10 per second, so 5 seconds per stack of 50.
  
 
Regular furnace
 
Regular furnace
Line 18: Line 247:
 
*Unlike the regular furnace, the advanced one always have a volume of 1000 L, regardless of how many pipes are attached to it. This saves a little bit of fuel.
 
*Unlike the regular furnace, the advanced one always have a volume of 1000 L, regardless of how many pipes are attached to it. This saves a little bit of fuel.
  
 +
=== Known errors of the math formulas ===
  
=== Using perfect 2:1 fuel ===
+
The formulas were created by hand, no data mining or peeking into the game code.
 +
<br>The calculation for temperature and pressure of a gas mix have a tiny unexplained error that can appear in the 6th digit and it's most noticeable at very low fuel pressures.
 +
<br>The reverse calculation (to know how much fuel and diluting gas to add to reach a desired temperature and pressure) requires iteration in order to calculate the temperature obtained after mixing the fuel and the dilutant, but the impact of the starting temperature is still pretty small to begin with, and after a few iterations this error will become negligible.
 +
 
 +
 
 +
=== Using perfect O2 + 2 H2 fuel ===
 +
The amount of fuel that combusts has no impact on the final temperature. Only the purity of the fuel (more on dirty fuel in the next section) and the temperature of the fuel matters, but the latter can be ignored for practical purposes (only around 3% difference in combustion temperature between fuel that is 1K and fuel that has room temperature). More fuel will always release more total energy, which means it takes increasingly longer for the furnace to cool down.
  
 
'''Temperature peak'''
 
'''Temperature peak'''
  
*T(after) = ( T(before)*61.9 + 565250 ) / 234.515
+
*T(after) = ( T(before)*61.9 + 563452 ) / 234.515
 
**T(after) is the temperature in Kelvin after ignition
 
**T(after) is the temperature in Kelvin after ignition
 
**T(before) is the temperature in Kelvin before ignition
 
**T(before) is the temperature in Kelvin before ignition
**The 565250 value is because of the 95% combustion efficiency, the full 595kJ isn't released
+
**The 563452 value is the released energy per mol at 95% combustion efficiency, the full energy isn't released
 
**61.9 is the heat capacity for 1 mol O2 and 2 mol H2, the sum of their specific heat values, the mol amounts comes from the reaction formula
 
**61.9 is the heat capacity for 1 mol O2 and 2 mol H2, the sum of their specific heat values, the mol amounts comes from the reaction formula
 
**234.515 is the heat capacity for the gas obtained when 1 mol O2 and 2 mol H2 combusts with 95% efficiency (243.6 * 0.95 + 61.9 * 0.05)  
 
**234.515 is the heat capacity for the gas obtained when 1 mol O2 and 2 mol H2 combusts with 95% efficiency (243.6 * 0.95 + 61.9 * 0.05)  
*The number of moles combusted doesn't actually matter for the temperature, it will always reach the same value. More fuel will however release more total energy which means it takes longer for the furnace to cool down.
+
*The equation can be arrived at by using the released energy per mol and the specific heat per mol of the mixture before and after combustion, also account for the 95% combustion efficiency.
  
 
'''Pressure peak'''
 
'''Pressure peak'''
Line 39: Line 275:
 
**T(before) is the temperature in Kelvin before ignition
 
**T(before) is the temperature in Kelvin before ignition
 
**2.9 is the multiple of the number of mol inside the furnace after combustion with 95% efficiency based on the reaction formula
 
**2.9 is the multiple of the number of mol inside the furnace after combustion with 95% efficiency based on the reaction formula
 +
*The equation can be made from two sets of PV=nRT (one before and one after combustion), linking them via n (combustion makes 3 mols of gas turn into 9 mols), and adjust for the 95% combustion efficiency.
  
  
 
=== Using diluted fuel ===
 
=== Using diluted fuel ===
 
+
[[File:Advanced-furnace-gas-mixing.png|thumb|gas mixing for 2H2+O2+dilutant]]
Unreactive gases can be added before the ignition to increase pressure and decrease temperature. An excess of either O2 or H2 also counts as unreactive.
+
Dirty fuel combusts at a lower temperature, the non-combustible gases also helps to increase the pressure. This can be very useful. Adding unreactive gases to a furnace on purpose means that the combustion temperature will be lower and the pressure higher, which helps when making certain alloys. An excess of either oxygen or volatiles will also count as unreactive since they don't take part in the combustion.
  
 
'''Temperature peak'''
 
'''Temperature peak'''
  
*T(after) = ( T(before) * sum(specific heat * ratio(gas)(before)) + min(ratio(O2), ratio(H2) * 0.5) * 0.95 * 595000 ) / ( sum(specific heat * ratio(gas)(before)) + min(ratio(O2), ratio(H2)*0.5) * 0.95 * 181.7)
+
*T(after) = ( T(before) * sum(specific heat * ratio(gas)(before)) + min(ratio(O2), ratio(H2)*0.5) * 563452 ) / ( sum(specific heat * ratio(gas)(before)) + min(ratio(O2), ratio(H2)*0.5) * 172.615)
 
**T(after) is the temperature in Kelvin after ignition
 
**T(after) is the temperature in Kelvin after ignition
 
**T(before) is the temperature in Kelvin before ignition
 
**T(before) is the temperature in Kelvin before ignition
**sum(x*y) is the sum of all x*y products, one product for every gas in the mix, before ignition
+
**sum(x*y) is the sum of all x*y products, used to calculate the total sum of each gas specific heat multiplied with its ratio
**specific heat is the value given for each gas, it's how much energy is needed to increase the temperature by 1K/mol
+
**specific heat is the value given for each gas, it refers to how much energy that is needed to increase the temperature by 1K per mol
 
**ratio(gas)(before) is the molecular ratio, given by the tablet as % values for each gas in the mix, before ignition
 
**ratio(gas)(before) is the molecular ratio, given by the tablet as % values for each gas in the mix, before ignition
 
**min(x,y) returns the smallest value of x and y
 
**min(x,y) returns the smallest value of x and y
**181.7 comes from 243.6-61.9, the increase in heat capacity (specific heat*number of mol) when 1 mol of O2 and 2 mol of H2 is combusted to 100%
+
**563452 comes from the energy released when 1 mol O2 and 2 mol H2 combusts with 95% efficiency
 +
**172.615 comes from 0.95*(243.6-61.9), this is the change in heat capacity (specific heat*number of mol) of the gas when 1 mol O2 and 2 mol H2 combusts with 95% efficiency into its new compounds
 
**The equation comes from calculating the Thermal Energy (temperature*specific heat per mol) before combustion, add the released energy calculated from the ratio of O2, then divide with the ''specific heat per mol'' of the gas obtained after combustion, which is known thanks to the reaction formula, all of this becomes the temperature on ignition
 
**The equation comes from calculating the Thermal Energy (temperature*specific heat per mol) before combustion, add the released energy calculated from the ratio of O2, then divide with the ''specific heat per mol'' of the gas obtained after combustion, which is known thanks to the reaction formula, all of this becomes the temperature on ignition
 +
 +
same thing but possibly easier to read
 +
*T(after) = ( T(before) * specificHeat(before) + fuel * 563452 ) / ( specificHeat(before) + fuel * 172.615)
 +
**specificHeat(before) = RatioOxygen*21.1 + RatioVolatile*20.4 + RatioCarbonDioxide*28.2 + RatioPollutant*24.8 + RatioNitrogen*20.6 + RatioNitrousOxide*23
 +
**fuel = min(RatioOxygen,RatioVolatile/2)
 +
**Notice that water isn't included. That's because this haven't been verified, but water is probably treated as a gas by the game so a good guess is that it can be included simply by adding RatioWater*72 to the specificHeat sum.
  
 
'''Pressure peak'''
 
'''Pressure peak'''
Line 61: Line 305:
 
*P(after) = P(before) * T(after) * ( 1 + 5.7*min(ratio(O2), ratio(H2)*0.5) ) / T(before)
 
*P(after) = P(before) * T(after) * ( 1 + 5.7*min(ratio(O2), ratio(H2)*0.5) ) / T(before)
 
**this expression comes from two sets of PV=nRT, one after and one before combustion. The reaction formula say that for each mol consumed O2 we gain 6 mol gas (9-3), this creates a link between the equations, n(after) = n(before)*(1+min(ratio(O2), ratio(H2)*0.5)*6), then include the 0.95 efficiency as well
 
**this expression comes from two sets of PV=nRT, one after and one before combustion. The reaction formula say that for each mol consumed O2 we gain 6 mol gas (9-3), this creates a link between the equations, n(after) = n(before)*(1+min(ratio(O2), ratio(H2)*0.5)*6), then include the 0.95 efficiency as well
 
  
 
=== Using Ice(Oxite) and Ice(Volatiles) ===
 
=== Using Ice(Oxite) and Ice(Volatiles) ===
Line 272: Line 515:
  
 
Observations
 
Observations
*the rate of cooling is temperature dependent, hotter cools faster (furnace temp - surrounding temp? how do vaccum behave?)
+
*the rate of cooling is temperature dependent, hotter cools faster  
 +
* Furnaces do not lose heat through conduction if in a vacuum.  This can be very useful for recipes that have tight temperature or pressure windows, although you will have to have an alternate mechanism to tweak the values if you overshoot (such as a valve leading to a pipe with a radiator out in the atmosphere, or a backpressure regulator).
 
*the rate of cooling is time dependent (game tick speed is once per 0.5 seconds)
 
*the rate of cooling is time dependent (game tick speed is once per 0.5 seconds)
 
*the rate of cooling is mol dependent (small amounts cool faster)
 
*the rate of cooling is mol dependent (small amounts cool faster)
Line 281: Line 525:
 
*Hold a tablet with an atmos cartridge in the right hand (so it can be read when the game is paused). Aim the tablet against the furnace and pause with ESC, double tap ESC to move the game forward one tick, record the temperatures.
 
*Hold a tablet with an atmos cartridge in the right hand (so it can be read when the game is paused). Aim the tablet against the furnace and pause with ESC, double tap ESC to move the game forward one tick, record the temperatures.
 
*Remember to record the ''total amount of moles'' as well
 
*Remember to record the ''total amount of moles'' as well
 
 
=== Resetting the furnace ===
 
Since only gas have temperature, evacuating all gas means resetting the temperature.
 
 
  
 
=== Calculating how to reach a desired Temperature and Pressure on ignition ===
 
=== Calculating how to reach a desired Temperature and Pressure on ignition ===
Line 295: Line 534:
 
#The specific heat value of the gas used to dilute the fuel (if a mix of gases is used, the specific heat to use is the average specific heat per mol, example calculation below)
 
#The specific heat value of the gas used to dilute the fuel (if a mix of gases is used, the specific heat to use is the average specific heat per mol, example calculation below)
  
The equations will give these results
+
<br>The equations will give these results
 
#The ratio(fuel) in the fuel-dilutant mix. (0.75 means 75% perfect 1:2 fuel mols (O2 and H2 added together)†, the other 25% will be dilutant gas mols, making it a 1:2:1 mix of O2:H2:dilutant)
 
#The ratio(fuel) in the fuel-dilutant mix. (0.75 means 75% perfect 1:2 fuel mols (O2 and H2 added together)†, the other 25% will be dilutant gas mols, making it a 1:2:1 mix of O2:H2:dilutant)
 
#The total pressure of the fuel-dilutant mix inside the furnace before ignition
 
#The total pressure of the fuel-dilutant mix inside the furnace before ignition
 
†It's helpful to separate out the fuel part like this since everyone should be using pre-mixed fuel, it makes the diluting easier and has a lower risk to cause confusion when using either O2 or H2 to be the dilutant gas
 
†It's helpful to separate out the fuel part like this since everyone should be using pre-mixed fuel, it makes the diluting easier and has a lower risk to cause confusion when using either O2 or H2 to be the dilutant gas
  
To freely control the temperature and pressure, the fuel must be diluted with a non-combustable gas. This can be added either before or after ignition, doing so before ignition makes it alot easier to predict, doing so after ignition is more of an art than a science (it depends on how the furnace is built and how fast the operator can work). The method prefered here is to add the non-combustable gas before ignition.  
+
To freely control the temperature and pressure, the fuel must be diluted with a non-combustible gas. This can be added either before or after ignition, doing so before ignition makes it a lot easier to predict, doing so after ignition is more of an art than a science (it depends on how the furnace is built and how fast the operator can work). The method prefered here is to add the non-combustible gas before ignition.  
  
 
Diluting the fuel can be done in the furnace directly or in pipes outside of it. There are good and bad points with both ways. Diluting outside fits the advanced furnace best (the built-in volume pump can easily move all of the prepared gas inside), diluting inside fits the regular furnace best (the exhaust outlet can be used as an inlet but it's a little bit quirky, and diluting in pipes outside means not all of the prepared gas can be moved into the furnace (the pipe directly on the furnace inlet will hold on to some of the diluted fuel) so extra gas must always be prepared).
 
Diluting the fuel can be done in the furnace directly or in pipes outside of it. There are good and bad points with both ways. Diluting outside fits the advanced furnace best (the built-in volume pump can easily move all of the prepared gas inside), diluting inside fits the regular furnace best (the exhaust outlet can be used as an inlet but it's a little bit quirky, and diluting in pipes outside means not all of the prepared gas can be moved into the furnace (the pipe directly on the furnace inlet will hold on to some of the diluted fuel) so extra gas must always be prepared).
  
The dilution can be double checked by using the tablet and looking at the mol% values for the fuel mix. If the outlet on the regular furnace was used as an inlet, the first gas that entered there will have been mostly pushed back into the furnace, making the mol% values diffrent but the total number of mol are still the same.
+
It is worth noting that for some temperatures and pressures suitable for advanced alloys, the calculation can suggest a fuel ratio below 0.15. This will not work however, since it means having less than 5% oxygen, that mix will not combust (unless the dilutant contains extra oxygen). This is a particular problem with '''Waspaloy''' (400-800K, 50+MPa), that can be solved by having oxygen in the diluting gas (a 5% ratio, having more doesn't help), but it's easier to just ignite the furnace prematurely and then finish adding the remaining dilutant.
 +
 
 +
The dilution can be always be double checked by using the tablet and looking at the mol% values for the fuel mix. If the outlet on the regular furnace was used as an inlet, the first gas that entered there will have been mostly pushed back into the furnace, making the mol% values different but the total number of mol are still the same.
  
 
'''Calculating the fuel ratio'''
 
'''Calculating the fuel ratio'''
  
*ratio(fuel) = n(fuel)/( n(fuel)+n(dilutant) ) = s*( T(after) - T(before) ) / ( T(before)*(61.9/3-s) + (0.95*595000/3) - T(after)*(61.9-s) - T(after)*(0.95*181.7/3) )
+
*ratio(fuel) = s*( T(after) - T(before) ) / ( 187817 + T(before)*(20.633 - s) - T(after)*(78.172 - s) )
**ratio(fuel), 1 = 100% fuel = 33.3% O2 and 66.7% H2
+
**ratio(fuel), 1 = 100% fuel which is 33.33% O2 and 66.67% H2
**T(after) is the chosen temperature after ignition
+
**T(after) is the chosen temperature after ignition, in K
**T(before) is the furnace temperature before ignition
+
**T(before) is the furnace temperature before ignition, in K
 
**s = specific heat of diluting gas
 
**s = specific heat of diluting gas
 
***if the dilutant is a mix of gases, calculate the average specific heat in that mix per mol
 
***if the dilutant is a mix of gases, calculate the average specific heat in that mix per mol
 
***example: 15% N2 and 85% CO2 as dilutant -> specific heat = 0.15*20.6 + 0.85*28.2 = 27.06
 
***example: 15% N2 and 85% CO2 as dilutant -> specific heat = 0.15*20.6 + 0.85*28.2 = 27.06
**n(fuel) = total mols of fuel = n(O2)+n(H2) together (always in the perfect 1:2 ratio, if either O2 or H2 are in excess the extra amount is considered a dilutant)
+
*This equation comes from the equation under ''Using diluted fuel'', it was arrived at by doing the following things
**n(dilutant) = total mols of non-combusting gas (this can be an excess of O2 or H2 if that is used as dilutant)
+
**ratio(fuel) was introduced (which is 3 times higher than min(ratio(O2),ratio(H2)*0.5), everyone should be using pre-mixed fuel so this should make things simpler, having 1 represent 100% fuel is also more intuitive than having 0.333 mean 100% fuel
*If you wonder how the equation from ''Using diluted fuel'' turned into this, its because
+
**everything is calculated per 1 mol fuel here, the original one uses per 3 mol fuel (1 mol O2 + 2 mol H2), so several values must be divided by 3
**ratio(fuel) was introduced (which is 3 times higher than min(ratio(O2),ratio(H2)*0.5), I think it helps if O2 or H2 is used to dilute the fuel later, and 1 being 100% fuel is more intutive than 0.333 being 100% fuel
 
 
**the dilutant (even a mix) can be treated as a single gas, which turns ''sum(specific heat * mol of gas (before))'' into ''ratio(fuel)*(specific heat(O2)+2*specific heat(H2) )/3 + (1-ratio(fuel))*specific heat(dilutant)''
 
**the dilutant (even a mix) can be treated as a single gas, which turns ''sum(specific heat * mol of gas (before))'' into ''ratio(fuel)*(specific heat(O2)+2*specific heat(H2) )/3 + (1-ratio(fuel))*specific heat(dilutant)''
**61.9/3 is the specific heat for the 2:1 fuel per mol fuel, the 181.7 value was explained under ''Using diluted fuel'' above
+
**min(ratio(O2),ratio(H2)*0.5) will now always be ratio(fuel)/3, so it can be replaced with that
**min(ratio(O2),ratio(H2)*0.5) will now always output ratio(fuel)/3, so it can be replaced with that
+
**without any rounding the formula is: ratio(fuel) = s*(T(after) - T(before)) / ( T(before)*(61.9/3-s) + (0.95*593107.3684/3) - T(after)*(61.9/3-s) - T(after)*(0.95*181.7/3) )
  
 
'''Calculating the pressure before ignition'''
 
'''Calculating the pressure before ignition'''
  
*P(before) = P(after)*T(before) / ( T(after) * (1 + ratio(fuel)*2*0.95) )
+
*P(before) = P(after)*T(before) / ( T(after) * (1 + ratio(fuel)*1.9) )
 
**ratio(fuel) is the result from the temperature calculation above
 
**ratio(fuel) is the result from the temperature calculation above
**P(after) = desired value, in Pa
+
**P(after) = the chosen pressure value, in Pa
**T(before) = temperature of fuel mix in the furnace before ignition
+
**T(before) = temperature of fuel mix in the furnace before ignition, in K
**T(after) = the chosen value used in the temperature calculation above
+
**T(after) = the chosen value used in the temperature calculation above, in K
 +
*This equation was arrived at by starting with the one under ''Using diluted fuel'' and replacing min(ratio(O2),ratio(H2)*0.5) with ratio(fuel)/3
  
 
'''Diluting fuel'''
 
'''Diluting fuel'''
  
Mixing gas is temperature sensitive. This is because pressure is used as an indirect measure of the amount of mol (n=PV/(RT)) being transfered, and pressure is also dependent on temperature. It is however possible to get around this issue with a bit of math.
+
Mixing gas is temperature sensitive. This is because pressure is used as an indirect measure of the amount of mol (n=PV/(RT)) being transferred, and pressure is also dependent on temperature. It is however possible to get around this issue with a bit of math.
  
A) Same temperature of fuel and dilutant
+
'''A)''' When fuel and dilutant have the same temperature
 
*Add the fuel
 
*Add the fuel
 
**fuel pressure = ratio(fuel) * P(before)
 
**fuel pressure = ratio(fuel) * P(before)
 
*Add the dilutant until the pressure P(before) is reached  
 
*Add the dilutant until the pressure P(before) is reached  
  
B) Different temperature of fuel and dilutant
+
'''B)''' When fuel and dilutant have different temperature
 
*T(mix) = sum( T(before)*ratio(after)*sh ) / sum( ratio(after)*sh )
 
*T(mix) = sum( T(before)*ratio(after)*sh ) / sum( ratio(after)*sh )
 
**T(mix) is the temperature after combining all gases
 
**T(mix) is the temperature after combining all gases
Line 348: Line 589:
  
 
''(same thing, different way of writing it)''
 
''(same thing, different way of writing it)''
*T(mix) = ( T(fuel)*ratio(fuel)*61.9/3 + T(dilutant)*ratio(dilutant)*s ) / ( ratio(fuel)*61.9/3 + ratio(dilutant)*s )
+
*T(mix) = ( T(fuel)*ratio(fuel)*20.633 + T(dilutant)*ratio(dilutant)*s ) / ( ratio(fuel)*20.633 + ratio(dilutant)*s )
 
**T(mix) is the temperature ''after'' combining the fuel and dilutant
 
**T(mix) is the temperature ''after'' combining the fuel and dilutant
 
**T(fuel) is the temperature of the fuel ''before'' mixing
 
**T(fuel) is the temperature of the fuel ''before'' mixing
Line 375: Line 616:
 
It's a warm and sunny day on Europa and a stationeer wants to make some invar. The desired temperature and pressure will be chosen as be the upper limit for invar, so 1500K and 20MPa. Adding ore to the furnace will reduce its temperature and increase the amount of gas (and pressure) inside of it, but the stationeer hopes that 100g of invar will be too little to have much of an effect. The furnace is exposed to the atmosphere and will be loosing temperature and pressure fairly fast which could be an issue, but making the alloy should be quick enough. The dilutant gas will be pure O2 from the atmosphere, which has a specific heat value of 21.1. The starting temperature of the fuel and the atmosphere are both at -140°C.
 
It's a warm and sunny day on Europa and a stationeer wants to make some invar. The desired temperature and pressure will be chosen as be the upper limit for invar, so 1500K and 20MPa. Adding ore to the furnace will reduce its temperature and increase the amount of gas (and pressure) inside of it, but the stationeer hopes that 100g of invar will be too little to have much of an effect. The furnace is exposed to the atmosphere and will be loosing temperature and pressure fairly fast which could be an issue, but making the alloy should be quick enough. The dilutant gas will be pure O2 from the atmosphere, which has a specific heat value of 21.1. The starting temperature of the fuel and the atmosphere are both at -140°C.
  
*ratio(fuel) = s*(T(after) - T(before)) / ( T(before)*(61.9/3-s) + (0.95*595000/3) - T(after)*(61.9-s) - T(after)*(0.95*181.7/3) )
+
*ratio(fuel) = s*( T(after) - T(before) ) / ( 187817 + T(before)*(20.633 - s) - T(after)*(78.172 - s) )
 
**s = specific heat of the dilutant = 21.1
 
**s = specific heat of the dilutant = 21.1
 
**T(after) = 1500K (this is the chosen value)
 
**T(after) = 1500K (this is the chosen value)
 
**T(before) = -140C = 133K (temperature inside the furnace before ignition)
 
**T(before) = -140C = 133K (temperature inside the furnace before ignition)
*ratio(fuel) = 0.281
+
*ratio(fuel) = 0.28237
 +
*This is high enough for combustion to occur
 +
**H2 is the limiting gas so %H2 must be at least 5%, the minimum value can be expressed as %H2 = ratio(fuel)*2/3 = 5%, solving for ratio(fuel) gives us 0.075, which is the lowest ratio(fuel) at which combustion can occur
  
 
The necessary pressure of the pre-ignition fuel mix inside the furnace will be
 
The necessary pressure of the pre-ignition fuel mix inside the furnace will be
*P(before) = P(after)*T(before) / ( T(after) * (1 + ratio(fuel)*2*0.95) )
+
*P(before) = P(after)*T(before) / ( T(after) * (1 + ratio(fuel)*1.9) )
**ratio(fuel) = 0.281
+
**ratio(fuel) = 0.28237
 
**P(after) = 20MPa (this is the chosen value)
 
**P(after) = 20MPa (this is the chosen value)
 
**T(before) = -140C = 133K
 
**T(before) = -140C = 133K
 
**T(after) = 1500K (this is the chosen value used in the temperature calculation)
 
**T(after) = 1500K (this is the chosen value used in the temperature calculation)
*P(before) = 1156.5kPa
+
*P(before) = 1154.1kPa
  
 
Dilution calculations
 
Dilution calculations
 
*The needed pressure of pure fuel inside the furnace will be
 
*The needed pressure of pure fuel inside the furnace will be
**P(fuel) = ratio(fuel) * P(before) = 0.281 * 1156.5kPa = 325kPa
+
**P(fuel) = ratio(fuel) * P(before) = 0.28237 * 1154.1kPa = 325.88kPa
*The dilutant will then be added to the furnace to reach the P(before) pressure at 1.16MPa
+
*The dilutant will then be added to the furnace to reach the P(before) pressure at 1.16MPa (1154kPa rounded up)
 
*The ratio of H2 inside the furnace before ignition can be checked with the tablet, it should be
 
*The ratio of H2 inside the furnace before ignition can be checked with the tablet, it should be
**ratio(H2) = 0.281 * 2/3 = 0.187 = 19%
+
**ratio(H2) = 0.28237 * 2/3 = 0.188 = 19%
  
The added ores reduced the temperature and increased the pressure a bit, pushing the pressure up above 20MPa and out of the needed range. After waiting for the pressure to drop back down, the temperature was still high enough to produce the desired alloy. In hindsight, 20MPa was a bit too high and 1500K a bit too low, but it was good enough to make 100g of invar.
+
This was tested in practice. After adding fuel and dilutant the game was saved, then the furnace was ignited. Adding the ores reduced the temperature and increased the pressure a bit, which pushed the pressure up above 20MPa and out of the needed range. After waiting for the pressure to drop back down, the temperature was still high enough to make the desired alloy with several seconds to spare. In hindsight, 20MPa was a bit too high and 1500K a bit too low, better values could definitely have been chosen.
  
Reloading the save and placing the furnace inside a welded frame to insulate it (no loss of temperature or pressure) showed the following. The furnace reached 1477K and 19.90MPa after ignition. The correct fuel amount was pretty much spot on (furnace showed: 325kPa, 133K), but the diluting O2 was slightly too cold (furnace showed: 1.16MPa, 130K), so slightly too much dilutant ended up being added (since cold gas has lower pressure). The dilutant was inserted via the furnace outlet, so checking the mol% with the tablet showed 3% H2 in the outlet pipe and 20% inside the furnace instead of 19% in both, the total number of H2 mol was unchanged. The loss of temperature is probably mostly from using too much dilutant but also from having a lower starting temperature. The lower pressure is related to the temperature, going from 1500K to 1477K should mean -1.5% pressure, but the change was just -0.5%, which shows that too much dilutant had been added. Other small mistakes were probably also made, everything was built outdoors and exposed to the daily temperature cycle.
+
Reloading the save and placing the furnace inside a welded frame to insulate it (no loss of temperature or pressure) showed the following. The furnace reached 1477K and 19.90MPa after ignition. The fuel was added with a regulator (the furnace showed: 325kPa, 133K), the fuel mix was decent but not a perfect 1:2. Then the diluting O2 was added, it was slightly too cold (the furnace now showed: 1.16MPa, 130K), so a bit too much dilutant was added to the furnace (since cold gas has a lower pressure). The dilutant was inserted via the furnace outlet, checking the mol% with the tablet showed 3% H2 in the outlet pipe and 20% inside the furnace instead of 19% in both, the total number of H2 mol was unchanged. The temperature and pressure was really close to the calculated ones, even though the execution was a bit sloppy. The observed loss of temperature could be explained by using too much dilutant, using a lower starting temperature and a flawed fuel mix. The lower pressure is related to the temperature, going from 1500K to 1477K should mean -1.5% reduction in pressure, but the change was just -0.5%, an indication that too much dilutant had been added.
 +
 
 +
 
 +
===Charts for fuel and dilutant mixes at 25°C===
 +
 
 +
{| class="wikitable"
 +
! colspan="4" |'''Pure fuel at 25°C (perfect mix, 33.33% O2 and 66.67% H2)'''
 +
|-
 +
! colspan="1" rowspan="1" |'''Temperature (K)'''
 +
! colspan="1" rowspan="1" |'''Pressure'''
 +
! colspan="1" rowspan="1" |'''Fuel (25°C, 298K)'''
 +
! colspan="1" rowspan="1" |'''Comment'''
 +
|-
 +
| 2481 K
 +
| 1.5 MPa
 +
| 62 kPa
 +
|
 +
|-
 +
| 2481 K
 +
| 22 MPa
 +
| 911 kPa
 +
|
 +
|-
 +
| 2481 K
 +
| 60 MPa
 +
| 2485 kPa
 +
| Explosion warning
 +
|}
 +
 
 +
 
 +
{| class="wikitable"
 +
! colspan="6" |'''Perfect fuel diluted with CO2 (specific heat = 28.5, highest value)'''
 +
|-
 +
! colspan="1" rowspan="1" |'''Temperature (K)'''
 +
! colspan="1" rowspan="1" |'''Pressure'''
 +
! colspan="1" rowspan="1" |'''Fuel (25°C, 298K)'''
 +
! colspan="1" rowspan="1" |'''Dilutant (25°C, 298K)'''
 +
! colspan="1" rowspan="1" |'''Fuel + Dilutant (25°C, 298K)'''
 +
! colspan="1" rowspan="1" |'''Comment'''
 +
|-
 +
| 550 K
 +
| 1.5 MPa
 +
| 34 kPa
 +
| 715 kPa
 +
| 749 kPa
 +
| Will not ignite (must ignite before all dilutant is added)
 +
|-
 +
| 1200 K
 +
| 1.5 MPa
 +
| 54.5 kPa
 +
| 214.5 kPa
 +
| 269 kPa
 +
|
 +
|-
 +
| 1200 K
 +
| 22 MPa
 +
| 800 kPa
 +
| 3144 kPa
 +
| 3944 kPa
 +
|
 +
|-
 +
| 1500 K
 +
| 19 MPa
 +
| 731 kPa
 +
| 1655 kPa
 +
| 2386 kPa
 +
|
 +
|}
 +
 
 +
 
 +
{| class="wikitable"
 +
! colspan="6" |'''Perfect fuel diluted with H2 (specific heat = 20.4, lowest value)'''
 +
|-
 +
! colspan="1" rowspan="1" |'''Temperature (K)'''
 +
! colspan="1" rowspan="1" |'''Pressure'''
 +
! colspan="1" rowspan="1" |'''Fuel (25°C, 298K)'''
 +
! colspan="1" rowspan="1" |'''Dilutant (25°C, 298K)'''
 +
! colspan="1" rowspan="1" |'''Fuel + Dilutant (25°C, 298K)'''
 +
! colspan="1" rowspan="1" |'''Comment'''
 +
|-
 +
| 550 K
 +
| 1.5 MPa
 +
| 25 kPa
 +
| 740 kPa
 +
| 765 kPa
 +
| Will not ignite (must ignite before all dilutant is added)
 +
|-
 +
| 1200 K
 +
| 1.5 MPa
 +
| 44.5 kPa
 +
| 243.5 kPa
 +
| 288 kPa
 +
|
 +
|-
 +
| 1200 K
 +
| 22 MPa
 +
| 652 kPa
 +
| 3572 kPa
 +
| 4224 kPa
 +
|
 +
|-
 +
| 1500 K
 +
| 19 MPa
 +
| 624 kPa
 +
| 1966 kPa
 +
| 2590 kPa
 +
|
 +
|}

Latest revision as of 16:22, 18 December 2023

Introduction[edit]

This page is about predicting combustion temperatures and pressures inside furnaces. It's not about engineering or design.

The furnace is one of the most important objects in the entire game, but it can also be complicated and hard to use, especially when making alloys and super-alloys. There is no real need to know anything written on this page, because it's possible to engineer solutions that doesn't require placing fuel inside a furnace. Hot gas can also be made elsewhere (with an Air Conditioner or by combusting fuel in a pipe) and stored in insulated tanks, and just be pumped directly into a furnace as needed.

There are two MIPS scripts here (click the links to expand/collapse the code), that can do the math described on this page inside the game. The first script is used to predict what temperature and pressure a furnace will reach when the current gas content is ignited. The second script is used to predict how much perfect fuel (33.33% oxygen and 66.67% volatiles) and how much other gas (not fuel) that needs to be added in order to reach a desired temperature and pressure on ignition. There are two alloys that are tricky however: Waspaloy and Solder. That is because the gas mixes to make these two tends to be too dilute to ignite (below 5% oxygen), but there are ways around that, the furnace could for example be ignited after adding only half the dilutant and then the remainder is added afterwards).

#prediction of the ignition temperature and pressure of a furnace
#if combustion can't occur, display current temperature and pressure

alias furnace d0        #advanced or regular
alias consoleTemp d1    #console, small LED
alias consolePres d2    #console, small LED

alias ratioOx r5
alias ratioVol r6
alias specificHeat r12
alias fuel r13
alias temp r14
alias pres r15

define energyReleased 563452
define specificHeatInc 172.615
define gasMolInc 5.7

main:
yield
#calculate the specific heat of the gas mix
l r5 furnace RatioOxygen
l r6 furnace RatioVolatiles
l r7 furnace RatioCarbonDioxide
l r8 furnace RatioPollutant
l r9 furnace RatioNitrogen
l r10 furnace RatioNitrousOxide
l r11 furnace RatioWater
mul r0 r5 21.1
mul r1 r6 20.4
add r0 r0 r1
mul r1 r7 28.2
add r0 r0 r1
mul r1 r8 24.8
add r0 r0 r1
mul r1 r9 20.6
add r0 r0 r1
mul r1 r10 23
add r0 r0 r1
mul r1 r11 72
add specificHeat r0 r1
#calculate the fuel amount
div ratioVol ratioVol 2
min fuel ratioOx ratioVol
#calculate Temp after ignition
mul r0 fuel specificHeatInc
add r0 r0 specificHeat
mul r1 fuel energyReleased
l r2 furnace Temperature
mul r2 r2 specificHeat
add r1 r1 r2
div temp r1 r0
#calculate Pressure after ignition
l r0 furnace Temperature
l r1 furnace Pressure
mul r2 fuel gasMolInc
add r2 r2 1
mul r2 r2 temp
mul r2 r2 r1
div pres r2 r0
#check if pressure <10kPa and ratios <0.05
blt r1 10 noCombustion
blt ratioOx 0.05 noCombustion
blt ratioVol 0.05 noCombustion
s consoleTemp Color 6
s consolePres Color 1
j displayResults
noCombustion:
s consoleTemp Color 3
s consolePres Color 2
move temp r0
move pres r1
displayResults:
s consoleTemp Setting temp
s consolePres Setting pres
j main

### End Script ###


#A script for calculating how to dilute fuel..
#..inside a furnace to reach a desired temperature..
#..and pressure on ignition

# This script requires perfect fuel (O2 + 2 H2)
# The diluting gas can be anything, even a mix
# Temperature of fuel and dilutant can be different
# BLUE color = dilutant must provide missing oxygen
# ORANGE color = gas will ignite

#Inputs are desired temperature (K) and pressure (kPa)
#Outputs are the pressure of fuel (kPa) and the..
#..total pressure (kPa) after adding the dilutant

alias inputTemp d0          #logic memory
alias inputPres d1          #logic memory
alias outputFuel d2         #console, small LED
alias outputTotal d3        #console, small LED
alias fuelAnalyzer d4       #pipe analyzer
alias dilutantAnalyzer d5   #pipe analyzer

alias oldTmix r10
alias Tmix r11
alias fuelSpecificHeat r12
alias dilutantSpecificHeat r13
alias ratioFuel r14
alias pressureTotal r15
s outputTotal Color 1

main:
yield
s outputFuel Color 3
#calculate specific heat values
div r0 61.9 3
move fuelSpecificHeat r0
jal specficHeatCalculation
#calculate how to reach input values
l r5 fuelAnalyzer Temperature
l r6 inputTemp Setting
l r7 dilutantAnalyzer Temperature
move oldTmix r5
move r9 5
iterate:
jal fuelRatioCalculation
jal temperatureMixCalculation
sub r9 r9 1
move oldTmix Tmix
blt r9 1 iterate
#calculate total fuel+dilutant pressure
l r8 inputPres Setting
mul r1 ratioFuel 1.9
add r1 r1 1
mul r1 r1 r6
mul r0 r8 Tmix
div pressureTotal r0 r1
#calculate fuel pressure
mul r0 r5 pressureTotal
mul r0 ratioFuel r0
div r0 r0 Tmix
#calculate dilutant pressure (not used)
#sub r1 1 ratioFuel
#mul r1 r1 pressureTotal
#mul r1 r1 r7
#div r1 r1 Tmix
#check for too high input temperature
blt pressureTotal r0 noCombustion
#display result
bltal ratioFuel 0.15 dilutantMustHaveOxygen
bltal ratioFuel 0.10 noCombustion
s outputFuel Setting r0
s outputTotal Setting pressureTotal
j main
noCombustion:
s outputFuel Setting -1
s outputTotal Setting -1
j main
dilutantMustHaveOxygen:
s outputFuel Color 0
j ra

fuelRatioCalculation:
div r0 563452 3
sub r4 fuelSpecificHeat dilutantSpecificHeat
mul r1 Tmix r4
add r0 r0 r1
mul r1 r6 r4
sub r0 r0 r1
div r1 172.615 3
mul r1 r6 r1
sub r0 r0 r1
sub r1 r6 Tmix
mul r1 r1 dilutantSpecificHeat
div ratioFuel r1 r0
j ra
temperatureMixCalculation:
sub r4 1 ratioFuel
mul r0 dilutantSpecificHeat r4
mul r1 ratioFuel fuelSpecificHeat
add r3 r0 r1
mul r0 r7 r4
mul r0 r0 dilutantSpecificHeat
mul r1 r5 ratioFuel
mul r1 r1 fuelSpecificHeat
add r0 r0 r1
div Tmix r0 r3
j ra
specficHeatCalculation:
l r5 d5 RatioOxygen
l r6 d5 RatioVolatiles
l r7 d5 RatioCarbonDioxide
l r8 d5 RatioPollutant
l r9 d5 RatioNitrogen
l r10 d5 RatioNitrousOxide
bne r5 r5 noCombustion #protection against null
mul r0 r5 21.1
mul r1 r6 20.4
add r0 r0 r1
mul r1 r7 28.2
add r0 r0 r1
mul r1 r8 24.8
add r0 r0 r1
mul r1 r9 20.6
add r0 r0 r1
mul r1 r10 23
add dilutantSpecificHeat r0 r1
j ra

### End Script ###

Furnace behaviour[edit]

  • Only the gas inside the furnace have a temperature (the furnace itself has no temperature, nor will it take heat away from the gas inside)
  • No side reactions have been observed (fuel can be mixed with any other gas with predictable results)
  • For a combustion to occur, the gas must have at least 5% each of both O2 and H2
  • For a combustion to occur, there must be a minimum pressure of 10 kPa (0.2.2733.13309 changelog)
  • A combustion will consume 95% of the limiting ingredient, O2 or H2 (if there is 10 mol H2, and excess O2, 0.5 mol H2 will remain afterwards)
  • Combustion reaction formula: 1 O2 + 2 H2 -> 6 CO2 + 3 X + 593 107.3684 J (this energy value is an approximation, see discussions for details)
  • Each press of ignite adds 5 J of energy to the furnace (only the advanced furnace was tested) (see discussions)
  • A furnace, as any other device with internal atmosphere, except insulated ones, constantly radiates temperature into void, even when built in a sealed room with vacuum or inside a fully welded frame. This should simulate entropy and radiative heat exchange with space, but does not account if device is placed in a room. And also this does not increase temperature when it's lower than global atmosphere's temperature.
  • Ores placed in a furnace will release gases, this reduces the temperature and increases the mols of gas.
  • Ingots placed in a furnace will reduce the temperature (~half compared to the ore, only copper tested) without releasing gas.
  • Inserted ores/ingots are processed at a speed of 10 per second, so 5 seconds per stack of 50.

Regular furnace

  • The inlet pipe will only allow gas to enter the furnace, and it will only do so if the pressure in the pipe is higher than the pressure inside the furnace. This behaviour is similar to that of the pressure regulator.
  • The outlet pipe acts like an extension of the furnace, increasing it's volume by 100L per pipe section, and it can be used as an alternative inlet point if so desired (but it acts a little bit quirky, the pipe and the furnace will have different %gas proportions when doing so, because the gas will only move when there is a pressure difference between the two). A larger furnace volume basically only means it will require a bit more gas, +10% more mol for each unsealed pipe section attached to it, everything else will be the same. The number of junctions on a pipe doesn't matter, the volume is always 100L.
  • Removing pipes connected to the outlet side should be avoided when the furnace is filled with fuel, doing so can cause some of the gas to vanish permanently.

Advanced furnace

  • The inlet pipe is the only place where gas can enter the furnace (not counting the ore slot). It has a built in volume pump.
  • The outlet pipe is the only place where gas can exit the furnace. It has a built in volume pump.
  • Unlike the regular furnace, the advanced one always have a volume of 1000 L, regardless of how many pipes are attached to it. This saves a little bit of fuel.

Known errors of the math formulas[edit]

The formulas were created by hand, no data mining or peeking into the game code.
The calculation for temperature and pressure of a gas mix have a tiny unexplained error that can appear in the 6th digit and it's most noticeable at very low fuel pressures.
The reverse calculation (to know how much fuel and diluting gas to add to reach a desired temperature and pressure) requires iteration in order to calculate the temperature obtained after mixing the fuel and the dilutant, but the impact of the starting temperature is still pretty small to begin with, and after a few iterations this error will become negligible.


Using perfect O2 + 2 H2 fuel[edit]

The amount of fuel that combusts has no impact on the final temperature. Only the purity of the fuel (more on dirty fuel in the next section) and the temperature of the fuel matters, but the latter can be ignored for practical purposes (only around 3% difference in combustion temperature between fuel that is 1K and fuel that has room temperature). More fuel will always release more total energy, which means it takes increasingly longer for the furnace to cool down.

Temperature peak

  • T(after) = ( T(before)*61.9 + 563452 ) / 234.515
    • T(after) is the temperature in Kelvin after ignition
    • T(before) is the temperature in Kelvin before ignition
    • The 563452 value is the released energy per mol at 95% combustion efficiency, the full energy isn't released
    • 61.9 is the heat capacity for 1 mol O2 and 2 mol H2, the sum of their specific heat values, the mol amounts comes from the reaction formula
    • 234.515 is the heat capacity for the gas obtained when 1 mol O2 and 2 mol H2 combusts with 95% efficiency (243.6 * 0.95 + 61.9 * 0.05)
  • The equation can be arrived at by using the released energy per mol and the specific heat per mol of the mixture before and after combustion, also account for the 95% combustion efficiency.

Pressure peak

  • P(after) = 2.9 * P(before) * T(after) / T(before)
    • P(after) is the pressure in Pa after ignition
    • P(before) is the pressure in Pa before ignition
    • T(after) is the temperature in Kelvin after ignition
    • T(before) is the temperature in Kelvin before ignition
    • 2.9 is the multiple of the number of mol inside the furnace after combustion with 95% efficiency based on the reaction formula
  • The equation can be made from two sets of PV=nRT (one before and one after combustion), linking them via n (combustion makes 3 mols of gas turn into 9 mols), and adjust for the 95% combustion efficiency.


Using diluted fuel[edit]

gas mixing for 2H2+O2+dilutant

Dirty fuel combusts at a lower temperature, the non-combustible gases also helps to increase the pressure. This can be very useful. Adding unreactive gases to a furnace on purpose means that the combustion temperature will be lower and the pressure higher, which helps when making certain alloys. An excess of either oxygen or volatiles will also count as unreactive since they don't take part in the combustion.

Temperature peak

  • T(after) = ( T(before) * sum(specific heat * ratio(gas)(before)) + min(ratio(O2), ratio(H2)*0.5) * 563452 ) / ( sum(specific heat * ratio(gas)(before)) + min(ratio(O2), ratio(H2)*0.5) * 172.615)
    • T(after) is the temperature in Kelvin after ignition
    • T(before) is the temperature in Kelvin before ignition
    • sum(x*y) is the sum of all x*y products, used to calculate the total sum of each gas specific heat multiplied with its ratio
    • specific heat is the value given for each gas, it refers to how much energy that is needed to increase the temperature by 1K per mol
    • ratio(gas)(before) is the molecular ratio, given by the tablet as % values for each gas in the mix, before ignition
    • min(x,y) returns the smallest value of x and y
    • 563452 comes from the energy released when 1 mol O2 and 2 mol H2 combusts with 95% efficiency
    • 172.615 comes from 0.95*(243.6-61.9), this is the change in heat capacity (specific heat*number of mol) of the gas when 1 mol O2 and 2 mol H2 combusts with 95% efficiency into its new compounds
    • The equation comes from calculating the Thermal Energy (temperature*specific heat per mol) before combustion, add the released energy calculated from the ratio of O2, then divide with the specific heat per mol of the gas obtained after combustion, which is known thanks to the reaction formula, all of this becomes the temperature on ignition

same thing but possibly easier to read

  • T(after) = ( T(before) * specificHeat(before) + fuel * 563452 ) / ( specificHeat(before) + fuel * 172.615)
    • specificHeat(before) = RatioOxygen*21.1 + RatioVolatile*20.4 + RatioCarbonDioxide*28.2 + RatioPollutant*24.8 + RatioNitrogen*20.6 + RatioNitrousOxide*23
    • fuel = min(RatioOxygen,RatioVolatile/2)
    • Notice that water isn't included. That's because this haven't been verified, but water is probably treated as a gas by the game so a good guess is that it can be included simply by adding RatioWater*72 to the specificHeat sum.

Pressure peak

  • P(after) = P(before) * T(after) * ( 1 + 5.7*min(ratio(O2), ratio(H2)*0.5) ) / T(before)
    • this expression comes from two sets of PV=nRT, one after and one before combustion. The reaction formula say that for each mol consumed O2 we gain 6 mol gas (9-3), this creates a link between the equations, n(after) = n(before)*(1+min(ratio(O2), ratio(H2)*0.5)*6), then include the 0.95 efficiency as well

Using Ice(Oxite) and Ice(Volatiles)[edit]

There is a minor difference between which ice is added first. One can also observe a fluctuation in the combustion efficiency compared to when a furnace is fueled with gas. The end result also matters a little bit on how fast the ignition button is pressed when the first ice type is added while doing larger batches.

small batch, oxite first

  • Adding 1 oxite + 1 volatile, in that order
    • Temperature: 2222K, Pressure: 2.03MPa, moles of O2/H2 combusted: 11/21, Combustion efficiency (H2 limited): 95%
  • Adding 1 oxite + 2 volatiles, in that order
    • Temperature: 2514K, Pressure: 4.13MPa, moles of O2/H2 combusted: 22/43, Combustion efficiency (H2 limited): 98%

small batch, volatiles first

  • Adding 1 volatile + 1 oxite, in that order
    • Temperature: 2224K, Pressure: 2.03MPa, moles of O2/H2 combusted: 11/21, Combustion efficiency (H2 limited): 95%
  • Adding 2 volatiles + 1 oxite, in that order
    • Temperature: 2432K, Pressure: 3.93MPa, moles of O2/H2 combusted: 21/42, Combustion efficiency (H2 limited): 95%

large batch, oxite first

  • Adding 5 oxite + 10 volatiles, in that order
    • Temperature: 2463K, Pressure: 18.76MPa, moles of O2/H2 combusted: 96/190, Combustion efficiency (H2 limited): 86%
  • Adding 8 oxite + 16 volatiles, in that order
    • Temperature: 2537K, Pressure: 33.28MPa, moles of O2/H2 combusted: 172/344, Combustion efficiency (H2 limited): 98%


The difference in combustion efficiency is a mystery. One possibility is that this deviation is a result of multiple consecutive ignitions during the same game tick as the second ice is added, and then the gassy products are added on the following tick. Whatever the reason, using ice in a furnace creates some unpredictability, which give calculations a certain degree of error. So instead of using math, it seems better to write down a table of temperatures and pressure resulting from different amounts of ice.

Empty furnace, oxite first, no pipes attached
Ice 1 oxite 2 oxite 3 oxite 4 oxite 5 oxite 6 oxite 7 oxite 8 oxite
1 volatile 2222K
2.03MPa
 ?  ?  ?  ?  ?  ? 1094K
2.59MPa
2 volatile 2514K
4.13MPa
 ?  ?  ?  ?  ?  ?  ?
3 volatile  ?  ?  ?  ?  ?  ?  ?  ?
4 volatile  ?  ?  ?  ?  ?  ?  ?  ?
5 volatile  ?  ?  ?  ?  ?  ?  ?  ?
6 volatile  ?  ?  ?  ?  ?  ?  ?  ?
7 volatile  ?  ?  ?  ?  ?  ?  ?  ?
8 volatile  ?  ?  ?  ?  ?  ?  ?  ?
9 volatile  ?  ?  ?  ?  ?  ?  ?  ?
10 volatile  ?  ?  ?  ? 2463K
18.76MPa
 ?  ? 2400K
21.40MPa
11 volatile  ?  ?  ?  ?  ?  ?  ? 2451K
23.41MPa
12 volatile  ?  ?  ?  ?  ?  ?  ?  ?
13 volatile  ?  ?  ?  ?  ?  ?  ?  ?
14 volatile  ?  ?  ?  ?  ?  ?  ?  ?
15 volatile  ?  ?  ?  ?  ?  ?  ?  ?
16 volatile  ?  ?  ?  ?  ?  ?  ? 2537K
33.28MPa


Furnace cooling rate (unfinished)[edit]

unknown

Observations

  • the rate of cooling is temperature dependent, hotter cools faster
  • Furnaces do not lose heat through conduction if in a vacuum. This can be very useful for recipes that have tight temperature or pressure windows, although you will have to have an alternate mechanism to tweak the values if you overshoot (such as a valve leading to a pipe with a radiator out in the atmosphere, or a backpressure regulator).
  • the rate of cooling is time dependent (game tick speed is once per 0.5 seconds)
  • the rate of cooling is mol dependent (small amounts cool faster)
  • pipes attached to the exhaust effect the cooling rate, and since they effectively increase the volume of the furnace the amount of mol of hot gas will be different too
  • adding ores decreases the temperature (do melting cost energy? or is this just from heating the trapped gases inside the ore?)

Possible experimental setup to measure dT/dt

  • Hold a tablet with an atmos cartridge in the right hand (so it can be read when the game is paused). Aim the tablet against the furnace and pause with ESC, double tap ESC to move the game forward one tick, record the temperatures.
  • Remember to record the total amount of moles as well

Calculating how to reach a desired Temperature and Pressure on ignition[edit]

There are only 4 variables required for this calculation.

  1. Intial fuel mix temperature (furnace temperature before ignition)
  2. Desired temperature on ignition (you choose)
  3. Desired pressure on ignition (you choose)
  4. The specific heat value of the gas used to dilute the fuel (if a mix of gases is used, the specific heat to use is the average specific heat per mol, example calculation below)


The equations will give these results

  1. The ratio(fuel) in the fuel-dilutant mix. (0.75 means 75% perfect 1:2 fuel mols (O2 and H2 added together)†, the other 25% will be dilutant gas mols, making it a 1:2:1 mix of O2:H2:dilutant)
  2. The total pressure of the fuel-dilutant mix inside the furnace before ignition

†It's helpful to separate out the fuel part like this since everyone should be using pre-mixed fuel, it makes the diluting easier and has a lower risk to cause confusion when using either O2 or H2 to be the dilutant gas

To freely control the temperature and pressure, the fuel must be diluted with a non-combustible gas. This can be added either before or after ignition, doing so before ignition makes it a lot easier to predict, doing so after ignition is more of an art than a science (it depends on how the furnace is built and how fast the operator can work). The method prefered here is to add the non-combustible gas before ignition.

Diluting the fuel can be done in the furnace directly or in pipes outside of it. There are good and bad points with both ways. Diluting outside fits the advanced furnace best (the built-in volume pump can easily move all of the prepared gas inside), diluting inside fits the regular furnace best (the exhaust outlet can be used as an inlet but it's a little bit quirky, and diluting in pipes outside means not all of the prepared gas can be moved into the furnace (the pipe directly on the furnace inlet will hold on to some of the diluted fuel) so extra gas must always be prepared).

It is worth noting that for some temperatures and pressures suitable for advanced alloys, the calculation can suggest a fuel ratio below 0.15. This will not work however, since it means having less than 5% oxygen, that mix will not combust (unless the dilutant contains extra oxygen). This is a particular problem with Waspaloy (400-800K, 50+MPa), that can be solved by having oxygen in the diluting gas (a 5% ratio, having more doesn't help), but it's easier to just ignite the furnace prematurely and then finish adding the remaining dilutant.

The dilution can be always be double checked by using the tablet and looking at the mol% values for the fuel mix. If the outlet on the regular furnace was used as an inlet, the first gas that entered there will have been mostly pushed back into the furnace, making the mol% values different but the total number of mol are still the same.

Calculating the fuel ratio

  • ratio(fuel) = s*( T(after) - T(before) ) / ( 187817 + T(before)*(20.633 - s) - T(after)*(78.172 - s) )
    • ratio(fuel), 1 = 100% fuel which is 33.33% O2 and 66.67% H2
    • T(after) is the chosen temperature after ignition, in K
    • T(before) is the furnace temperature before ignition, in K
    • s = specific heat of diluting gas
      • if the dilutant is a mix of gases, calculate the average specific heat in that mix per mol
      • example: 15% N2 and 85% CO2 as dilutant -> specific heat = 0.15*20.6 + 0.85*28.2 = 27.06
  • This equation comes from the equation under Using diluted fuel, it was arrived at by doing the following things
    • ratio(fuel) was introduced (which is 3 times higher than min(ratio(O2),ratio(H2)*0.5), everyone should be using pre-mixed fuel so this should make things simpler, having 1 represent 100% fuel is also more intuitive than having 0.333 mean 100% fuel
    • everything is calculated per 1 mol fuel here, the original one uses per 3 mol fuel (1 mol O2 + 2 mol H2), so several values must be divided by 3
    • the dilutant (even a mix) can be treated as a single gas, which turns sum(specific heat * mol of gas (before)) into ratio(fuel)*(specific heat(O2)+2*specific heat(H2) )/3 + (1-ratio(fuel))*specific heat(dilutant)
    • min(ratio(O2),ratio(H2)*0.5) will now always be ratio(fuel)/3, so it can be replaced with that
    • without any rounding the formula is: ratio(fuel) = s*(T(after) - T(before)) / ( T(before)*(61.9/3-s) + (0.95*593107.3684/3) - T(after)*(61.9/3-s) - T(after)*(0.95*181.7/3) )

Calculating the pressure before ignition

  • P(before) = P(after)*T(before) / ( T(after) * (1 + ratio(fuel)*1.9) )
    • ratio(fuel) is the result from the temperature calculation above
    • P(after) = the chosen pressure value, in Pa
    • T(before) = temperature of fuel mix in the furnace before ignition, in K
    • T(after) = the chosen value used in the temperature calculation above, in K
  • This equation was arrived at by starting with the one under Using diluted fuel and replacing min(ratio(O2),ratio(H2)*0.5) with ratio(fuel)/3

Diluting fuel

Mixing gas is temperature sensitive. This is because pressure is used as an indirect measure of the amount of mol (n=PV/(RT)) being transferred, and pressure is also dependent on temperature. It is however possible to get around this issue with a bit of math.

A) When fuel and dilutant have the same temperature

  • Add the fuel
    • fuel pressure = ratio(fuel) * P(before)
  • Add the dilutant until the pressure P(before) is reached

B) When fuel and dilutant have different temperature

  • T(mix) = sum( T(before)*ratio(after)*sh ) / sum( ratio(after)*sh )
    • T(mix) is the temperature after combining all gases
    • T(before) is the temperature that each individual gas compound involved (O2, H2, CO2 etc) has before mixing them
    • ratio(after) is a value between 0 and 1, the %mol ratio, in the final mix
    • sh is the specific heat for each individual gas

(same thing, different way of writing it)

  • T(mix) = ( T(fuel)*ratio(fuel)*20.633 + T(dilutant)*ratio(dilutant)*s ) / ( ratio(fuel)*20.633 + ratio(dilutant)*s )
    • T(mix) is the temperature after combining the fuel and dilutant
    • T(fuel) is the temperature of the fuel before mixing
    • T(dilutant) is the temperature of the dilutant before mixing
    • ratio(fuel) is the ratio of fuel after mixing everything
    • ratio(dilutant) is the ratio of dilutant after mixing everything
    • s is the specific heat of the dilutant (if the dilutant is a mix of gases, see example under the calculation for ratio(fuel) above)

Mixing fuel and dilutant of different temperature

  • Add the fuel
    • fuel pressure = ratio(fuel) * P(before) * T(fuel) / T(mix)
  • Add the dilutant
    • keep adding until the pressure P(before) is reached
  • The temperature should now be the same as the calculated T(mix) value, unless there was warming or cooling of the gases during the mixing process (in that case, the fuel-dilutant mix has slightly too much or too little dilutant in it, use the tablet to check the ratio of H2 or O2)

Double-checking the fuel-dilutant mix

Use the tablet with the amtospherics cartridge and compare the measured mol% with one of the following equations. If neither O2 nor H2 is used as dilutant, they will both give the same result.

  • When O2 is in excess
    • ratio(H2) = ratio(fuel)*2/3
  • When H2 is in excess
    • ratio(O2) = ratio(fuel)/3


Example calculation[edit]

It's a warm and sunny day on Europa and a stationeer wants to make some invar. The desired temperature and pressure will be chosen as be the upper limit for invar, so 1500K and 20MPa. Adding ore to the furnace will reduce its temperature and increase the amount of gas (and pressure) inside of it, but the stationeer hopes that 100g of invar will be too little to have much of an effect. The furnace is exposed to the atmosphere and will be loosing temperature and pressure fairly fast which could be an issue, but making the alloy should be quick enough. The dilutant gas will be pure O2 from the atmosphere, which has a specific heat value of 21.1. The starting temperature of the fuel and the atmosphere are both at -140°C.

  • ratio(fuel) = s*( T(after) - T(before) ) / ( 187817 + T(before)*(20.633 - s) - T(after)*(78.172 - s) )
    • s = specific heat of the dilutant = 21.1
    • T(after) = 1500K (this is the chosen value)
    • T(before) = -140C = 133K (temperature inside the furnace before ignition)
  • ratio(fuel) = 0.28237
  • This is high enough for combustion to occur
    • H2 is the limiting gas so %H2 must be at least 5%, the minimum value can be expressed as %H2 = ratio(fuel)*2/3 = 5%, solving for ratio(fuel) gives us 0.075, which is the lowest ratio(fuel) at which combustion can occur

The necessary pressure of the pre-ignition fuel mix inside the furnace will be

  • P(before) = P(after)*T(before) / ( T(after) * (1 + ratio(fuel)*1.9) )
    • ratio(fuel) = 0.28237
    • P(after) = 20MPa (this is the chosen value)
    • T(before) = -140C = 133K
    • T(after) = 1500K (this is the chosen value used in the temperature calculation)
  • P(before) = 1154.1kPa

Dilution calculations

  • The needed pressure of pure fuel inside the furnace will be
    • P(fuel) = ratio(fuel) * P(before) = 0.28237 * 1154.1kPa = 325.88kPa
  • The dilutant will then be added to the furnace to reach the P(before) pressure at 1.16MPa (1154kPa rounded up)
  • The ratio of H2 inside the furnace before ignition can be checked with the tablet, it should be
    • ratio(H2) = 0.28237 * 2/3 = 0.188 = 19%

This was tested in practice. After adding fuel and dilutant the game was saved, then the furnace was ignited. Adding the ores reduced the temperature and increased the pressure a bit, which pushed the pressure up above 20MPa and out of the needed range. After waiting for the pressure to drop back down, the temperature was still high enough to make the desired alloy with several seconds to spare. In hindsight, 20MPa was a bit too high and 1500K a bit too low, better values could definitely have been chosen.

Reloading the save and placing the furnace inside a welded frame to insulate it (no loss of temperature or pressure) showed the following. The furnace reached 1477K and 19.90MPa after ignition. The fuel was added with a regulator (the furnace showed: 325kPa, 133K), the fuel mix was decent but not a perfect 1:2. Then the diluting O2 was added, it was slightly too cold (the furnace now showed: 1.16MPa, 130K), so a bit too much dilutant was added to the furnace (since cold gas has a lower pressure). The dilutant was inserted via the furnace outlet, checking the mol% with the tablet showed 3% H2 in the outlet pipe and 20% inside the furnace instead of 19% in both, the total number of H2 mol was unchanged. The temperature and pressure was really close to the calculated ones, even though the execution was a bit sloppy. The observed loss of temperature could be explained by using too much dilutant, using a lower starting temperature and a flawed fuel mix. The lower pressure is related to the temperature, going from 1500K to 1477K should mean -1.5% reduction in pressure, but the change was just -0.5%, an indication that too much dilutant had been added.


Charts for fuel and dilutant mixes at 25°C[edit]

Pure fuel at 25°C (perfect mix, 33.33% O2 and 66.67% H2)
Temperature (K) Pressure Fuel (25°C, 298K) Comment
2481 K 1.5 MPa 62 kPa
2481 K 22 MPa 911 kPa
2481 K 60 MPa 2485 kPa Explosion warning


Perfect fuel diluted with CO2 (specific heat = 28.5, highest value)
Temperature (K) Pressure Fuel (25°C, 298K) Dilutant (25°C, 298K) Fuel + Dilutant (25°C, 298K) Comment
550 K 1.5 MPa 34 kPa 715 kPa 749 kPa Will not ignite (must ignite before all dilutant is added)
1200 K 1.5 MPa 54.5 kPa 214.5 kPa 269 kPa
1200 K 22 MPa 800 kPa 3144 kPa 3944 kPa
1500 K 19 MPa 731 kPa 1655 kPa 2386 kPa


Perfect fuel diluted with H2 (specific heat = 20.4, lowest value)
Temperature (K) Pressure Fuel (25°C, 298K) Dilutant (25°C, 298K) Fuel + Dilutant (25°C, 298K) Comment
550 K 1.5 MPa 25 kPa 740 kPa 765 kPa Will not ignite (must ignite before all dilutant is added)
1200 K 1.5 MPa 44.5 kPa 243.5 kPa 288 kPa
1200 K 22 MPa 652 kPa 3572 kPa 4224 kPa
1500 K 19 MPa 624 kPa 1966 kPa 2590 kPa