Page 1 of 1

Steam Engines Power output is capped

Posted: Wed Feb 11, 2015 1:57 am
by jnotaro
I created a new liquid that behaves the same as water however its max temperature is significantly higher then normal water. This should in theory make the steam engine output a higher amount of energy however once the water hits temperatures of 300 raising the temperature has no affect on the power output from steam engines. I have been tearing through the protypes and see nothing that should cap the power output or that should make make it behave asymptotically. What is causing the power output to be capped.

I'm assuming I am doing something wrong, but I have created a new liquid (well had it previously) and set its max temperature to 8000, heat capacity to 1MJ and default temp to 15. However when i get the tempurature up to like 2500 degrees it is still not increase power output.

Edit again
I used the suggested method of created a duplicate water called unpresurized water and setting the pump to give that then changed waters heat cap to 1 MJ and 8000 temp
It works beutifully only im outputing way to much power now. I can run over 20K lasor turrets with just 1 stem engine lolz. got to scale it down Thank you for all the help

Re: Steam Engines Power output is capped

Posted: Wed Feb 11, 2015 2:36 am
by FreeER
The generator's buffer size is hard coded in C++ based on the max temp of water, not entirely sure why.
A 'workaround' of sorts would be to create a duplicate of water with a different name, change offshore-pumps give the duplicate and change the max temp of the original water to some large value. That would 'prevent' the generator capacity cap and allow 'proper' energy values, at least if my logic is correct :)

edit: fairly sure this was mentioned some time back (probably what helped me think of the 'workaround'), but I can't seem to find the topic...

edit:
buffer capacity seems to be calculated like so:

Code: Select all

(water.max_temperature - water.default_temperature) * generator.fluid_usage_per_tick * water.heat_capacity * generator.effectivity * (32/30)
power (per tick, 60 ticks in a second) is calculated like so:

Code: Select all

min(
  generator.fluid_usage_per_tick * (current_fluid.temperature - current_fluid.default_temperature)
                                 * current_fluid.heat_capacity * generator.effectivity,
  buffer.capacity - buffer.energy
)

Re: Steam Engines Power output is capped

Posted: Wed Feb 11, 2015 2:39 am
by Fatmice
Hi, engine power output is directly related to the energy_consumption * 16/15. This is hard-coded and related to this topic here.

The actual reason has to do with the size of .energy, which is a buffer that holds energy to be converted. The size of .energy = energy_consumption * (1 + 2(idle_consumption/30)), where idle_consumption for steam generator is 1. This means you can never output more energy / s than the .energy / s. For vanilla steam engines, this is 544/6 J/s.

Power output is not capped however...well up to a point.

Liquid seems to have a maximum throughput of 240 units of liquid / s, so the most energy you can supply is (240 * heat_capacity* (max_temp - min_temp))/s. So if you want huge power output, you will need to increase heat_capacity and max_temp. Look here if you want some formulas to use to estimate the fluid usage and power output for any set of {heat_capacity, max_temp, min_temp} parameters. The formulas will only work for vanilla like fluid characteristics {pressure_to_speed_ratio = 0.4, flow_to_energy_ratio = 0.59,}.

Re: Steam Engines Power output is capped

Posted: Wed Feb 11, 2015 3:27 pm
by starholme
If you want to get exact output values, have a look at https://github.com/Starholme/factorio-g ... our-entity
Those calcs work just fine for vanilla generators.