Adamo wrote: ↑Fri Aug 23, 2019 10:04 am
McDuff wrote: ↑Fri Aug 23, 2019 9:58 am
To be clear, I think we realize the prototype technically allows for it. The question, for me, is whether the simulation still runs well with more extreme temperatures. It may be that it doesn't have a problem, but, things can surprise you.
The boiler is already acting as a "heat pump" in the sense that it can put out steam at a higher temperature than it takes in, by, I am hoping, but haven't tested for sure, scaling the temperature in and temperature out by the specific_heat values of the boiler and the steam.
I think that is a respectable and reasonable position, too, Adamo. Kinder than I am, when I think about changes, since I more take the view that if it breaks some design or whatever, I'll either wait out the bug fix from Wube, or they get to keep both broken parts.
Not that I can release anything right now, dangit, but hey. Now I know your mods are safer to randomly drop in
In terms of the heat simulation... I have a mental model that "heat" doesn't exist, only energy exists. I'm not sure it is strictly true, but it seems effective at predicting the behaviour of the system. That is, a "heat" property is just a store of energy, and behaves exactly identically to an accumulator or battery in terms of how it behaves. Just, y'know, a different type of wire connecting it from source to sink.
Given that, eg, heat is never lost in transfer, and temperature generally doesn't change without specific action (eg: transform to another energy form, use in a machine, add energy with a heat increasing device), I think this is more likely to give the right intuitive answers.
Anyway, beyond that, to answer McDuff with the details I omitted from my previous comment to you, Adamo, how it hangs together:
The specific_heat is relevant
only in that it tells you how much energy movement is required to raise or lower the temperature of the device. For the reactor the relevant properties for the system are:
Code: Select all
consumption = "40MW",
heat_buffer = {
max_temperature = 1000,
specific_heat = "10MJ",
max_transfer = "10GW",
}
Consumption defines how much fuel is consumed per ... unit time. Second, I think, and checking
it is a Types/Energy tells me that the unit is watts, which is the "power" version of "joules", so one watt == one joule per second, making this 40MJ of fuel consumed per second, and internally, 40MJ of energy that can be fed into the heat_buffer.
The specific_heat of the heat_buffer is how much energy is required to raise or lower the temperature by 1ºC, so in this case our 40MW input means we can raise the temperature by 4ºC per second while consuming fuel.
The max_temperature is just when it caps: if it would go above that temp because of input energy, it just throws away the extra heat. Otherwise the temperature rises, and the power is perfectly conserved in the form of heat energy. I'm pretty certain that a heat *generator* throws away extra heat, but a heat *consumer* caps and stops drawing heat. Like, maybe 95 percent sure, so energy loss only applies when the reactor (which is the only thing to consume fuel without work) is unable to send enough heat away. I'm not at all sure what sequence this happens in, so if the reactor was 999ºC, and attached devices could consume 3ºC of heat per second it'd be min(1000, 999+4-3)ºC afterwards, or if it'd be min(1000, 999+4)-3ºC afterwards. (I suspect the first, because Wube are kind, as a rule of thumb.)
Finally, max_transfer tells us what the limit of output is. Apparently, at 10GW cap, we can export 10,000MW of energy per second, or... 1,000ºC in a second, given 1ºC == 10MJ for this device, and J to W is just appending per-second.... so if something can consume 10GW of heat, it'll happily run a reactor down to 0ºC in a second.
Meanwhile, the heat-exchanger is a boiler, and has:
Code: Select all
energy_consumption = "10MW",
energy_source = {
type = "heat",
max_temperature = 1000,
specific_heat = "1MJ",
max_transfer = "2GW",
min_working_temperature = 500,
}
So, it can move 10MW of power -- 10MJ per second of energy -- from heat to steam, which will then apply to the water (at 15ºC base) to produce steam based on the specific_energy of the fluid. A heat-exchanger with a non-water fluid would apply the same energy transfer rate to that fluid, producing output with the same energy, but possibly different temperature. (eg: if the specific_energy of the non-water was twice the specific_energy of water / steam, it'd have twice the energy per unit of fluid when it came out, at the same temperature.)
Meanwhile, on the way in ... max_transfer of heat is 2GW, so we can completely tap a reactor with 5 x heat-exchanger -- at that point they hit the 10GW output limit. Once the heat-exchanger has that 2GW of power in it applies it to the temperature it "owns", raising 1ºC for every specific_heat, or 1MJ, in. Which means it can go up... 20,000MJ, or 20,000ºC per second, I guess? Uh, probably not gonna be able to tap that one out.
I guess assuming you can supply water fast enough, and on the basis Wube are kind, you could move the 19,000MJ of energy out as steam from the device, subject to fluid system transfer limits. I'm gonna guess that Wube must be kind here, because otherwise this'd be really hard to use efficiently, and honestly, pretty slow at making steam. I don't /think/ the "optimal ratio" calculations support that. Yay, another proof of niceness.
Oh, and I didn't look at heat pipes, but I think they are a significant part of the limitations on power, and I didn't touch on the boost reactors get from proximity, which can push them up to 140MW (energy_consumption) and ... IDK what additional changes to the heat_buffer, if any, come with that.
Hope that helps you understand how to follow the properties through their behaviour, McDuff. In my experience, so long as your numbers are in the "safe integer-in-double" range all the way through the math, the simulation is pretty robust to whatever silly numbers you throw in. I do know that, eg, Krastorio doubles the numbers on a whole bunch of vanilla power entities around nuclear power (steam turbines, etc) so you get the same output energy with half the number of devices, and that works.
OTOH, their super-duper beacon did push things out past safe limits and cause ... issues with the simulation, so Adamo is right, you can't just assume it'll be safe to push numbers up to any level and have it work sensibly.