# Balancing Thermo Regulators and Wheezeworts

## Recommended Posts

I am using a hydrogen spiral radiator to cool a large room.  It is a closed loop that is processed by four serial thermo regulators that are situated in a hydrogen filled abyssalite insulated room pressurized from between 1500g, to 2900g containing 5 wheezeworts. The pipes themselves are also abyssalite (and insulated for visual clarity in gas pipe overlay) until reaching the spiral radiator section which is comprised of granite piping. I have a valve on the return to modulate how much hydrogen gets processed per second by the regulators.

This is my question: How high can I set the valve to keep the Thermo Regulators temperature neutral.

When I first put the room together I kind of just threw stuff at the wall without mathing anything out because I didn't really know the details of wheezeworts or regulators and have been just kind of flying by the seat of my pants with my first colony (I've been very luck and am fortunate enough to break 1200 cycles so far). But I've had to make revisions to the room as I've noticed that the regulators were ever so slowly warming up.  Reading some threads and learning  some details about the heat conversions from the kind folks on the forum I tried to work out exactly what the capacity of the regulators would be with what was currently in the room.

I tried to work out with 1kg of hydrogen per second process of the Wheezeworts giving me 12kw (I saw this number in a thread but wasn't sure how it was worked out until recently) of cooling per wheezewort, resulting in a budget of 60kw, or 15kw of cooling per regulator.  Assuming a regulator processing hydrogen a max capacity requires 33.6kw of cooling I figured a flow rate of 445g/s would give me a very very slight cooling trend on the room.  This was down from 508.(something) when I started.

I feel like the room, though, is cooling faster with 445g/s than it warmed up under ~508g/s which suggests to me that maybe my math is wrong somewhere and I have more of a budget than I realize.

If anyone has read this far, I am would love some advice on how I can be more precise with my balance. The room being cooled by the radiator has warmed slightly from the ~60g second shift in coolant. While I have given up on trying to achieve -38c due to rubberbanding temperatures, I'd like to maximize the coldness of the room with the resources currently devoted to it in order to safely handle as large a field as possible.

Thank you.

##### Share on other sites

Wheezeworts take a while to become "fully active" - they are planted at 20 degrees, with a large heat capacity, which can offset the cooling for a while. EDIT: Fixed wrong tip - it does indeed check gas temperature.

Do not expect strict math to provide the exact results - the game has a pretty serious bug right now, with cold gas on hot gas interaction causing free cooling.

Typical advanced thermo regulator builds include polluted water heatsink, as it has a larger heat capacity than hydrogen (you can easily stack 800kg of pwater in one tile, but only up to ~5kg of hydrogen, barring exploits). Also wolframite wire bridges, because they contact the environment on both ends and thus provide some extra heat transfer where it is needed the most.

##### Share on other sites

Wheezeworts only cool the air by a fixed amount. Their own temperature doesn't play any role in this.

##### Share on other sites

41 minutes ago, Risu said:

Wheezeworts only cool the air by a fixed amount. Their own temperature doesn't play any role in this.

It does, to an extent. As long as they're warmer than the cold gas they're sending out, they warm it back up again. That reduces their performance until they reach their "working temperature".

##### Share on other sites

Is there more information on the gas interaction free cooling bug? If that is playing a factor, that would be great to know.

Regarding the manner in which I am cooling the regulators, respectfully adding polluted water only complicates the system by one of two ways. Either I need to find a way to cool the water after it is heated by the regulators, which means I haven't actually dealt with the energy and only added another layer of heat pumping, or I destroy the water in some fashion and need to find a constant source of cooler water to feed the room's operation.  Which reduces self sufficiency and reliability of the room. Additionally, I'm not having an issue with temperature spikes or capacity.  The regulators themselves have never exceeded 37c in the hundreds of cycles this room has operated. I feel like high thermal capacity (combined with good conductivity) is to smooth out spikes so I am not sure what using polluted water gains me.

Effectively, what I think this room does is attempt to maximize the productivity of the wheezeworts by trying to place them in ideal conditions to destroy the most heat and then pump heat to them to do so. This would be as opposed to a node based cooling scheme in a large room with periodic wheezeworts in a less efficient gas for them. The large structure ultimately being cooled is a sleet wheat farm filled with oxygen to reduce Duplicant downtime from having to run out to breathe.

This issue I'm trying to work out is it seems marginally more effective than the math I've worked out. So I was wondering where I failed in the math or if there is another factor at play. I considered it most likely my math is wrong so I came here to more knowledgeable ONI veterans.

##### Share on other sites

Polluted water would be mostly just for heat sink - thermal regulators can heat up really quickly and just hydrogen atmosphere is generally not enough for constantly used regulators. But if you're on the safe side at all times, it's not needed.

The problem with your math is probably just the assumption that the system in the game is more or less perfect. The fluctuations in gas movement can prevent wheezeworts from operating at full capacity, gas pipe weirdness can slow down regulator usage, power weirdness with transformers can occasionally stop regulators from working for few seconds.

Here's the cooling bug:

##### Share on other sites

If you want to look just at the steady-state conditions to see what would balance, ignoring potential wheezewort inefficiency due to low gas pressure (if they manage to make their intake tile vacuum, then they are not operating at full efficiency), and ignoring heat transfer with other systems, then here's the balance, with a flow rate of x g/s:

Thermo Regulator energy flow out: (x)(14K)(2.4 J/gK)

Wheezewort energy flow to the void: (1000 g/s)(5K)(2.4 J/gK) -- I assume you use the optimal gas for cooling with Wheezeworts, Hydrogen

The specific heats cancel out, because both Thermo Regulator and Wheezewort are cooling hydrogen. So if you have T Thermo Regulators and W wheezeworts, then the flow rate x should be:

x = (1000 g/s)(5W/14T) = 2500/7 g/s * (W/T), or approximately 357 g/s * W/T.

So with a standard 4 Thermo Regulator setup, this is about 89 g/s per Wheezewort. So 11 Wheezeworts would allow you to run near-full capacity at 982 g/s.

Edit: A simpler rule of thumb would be to just always run the Thermo Regulators at full capacity, in which case the flow rate matches the Wheezeworts, and then you can just use their cooling ratios of 14/5 to determine the number of Wheezeworts. In the case of 4 Thermo Regulators, you would need 4*14/5 = 11.2 Wheezeworts to fully offset them. In general it is safe to overcompensate with Wheezeworts because they will self-limit when they reach the stifling temperature of -60C.

##### Share on other sites

7 hours ago, rezecib said:

So with a standard 4 Thermo Regulator setup, this is about 89 g/s per Wheezewort. So 11 Wheezeworts would allow you to run near-full capacity at 982 g/s.

Your help has been wonderful, thank you.  89g/s * 5 wheezeworts lines up with my assessment of 445g/s flow rate for Temperature neutral. Your post as a whole will definitely help me figure out what balancing I need in future projects.

However, I am seeing a cooling trend in the room with the 5 wheezeworts that exceeds my expectations. The room as a whole seems to have dropped like 5 degrees  in the last 20 or so cycles, when at ~500g/s it seems to only increase in temperature much slower. It feels like something else is going on. (unexplained power disruption is probably the answer.) At any rate, I am satisfied with the result the main room has stabilized around -20c and I'm over producing sleet wheat so I think I'm going to scale back anyhow. Thanks again!

8 hours ago, Coolthulhu said:

Polluted water would be mostly just for heat sink - thermal regulators can heat up really quickly and just hydrogen atmosphere is generally not enough for constantly used regulators. But if you're on the safe side at all times, it's not needed.

The problem with your math is probably just the assumption that the system in the game is more or less perfect. The fluctuations in gas movement can prevent wheezeworts from operating at full capacity, gas pipe weirdness can slow down regulator usage, power weirdness with transformers can occasionally stop regulators from working for few seconds.

Here's the cooling bug:

That is a bug I'm familiar with since it has been on the forums recently, but it appears to mainly apply to liquids and not gasses. I was not aware that this applies to gasses and have not seen indication of it. Though I don't discount the possibility.

Regarding thermo regulators in hydrogen, it is absolutely sufficient with reasonable density. I would actually be more concerned with the use of water or polluted water for the risk of flooding. The risks you outline would tend towards reduced cooling effectiveness, and that's actually no the incongruity I am observing, it is exceeding my expectations. Though, I've been careful to mitigate the risks by pressurizing the room to the limit with hydrogen to maximize wheezewort throughput (The room ranges from 1.5+kg per tile of hydrogen to 2.9+kg, wheezeworts tend to pump a lot of pressure upwards), and ameliorating the affects of junctions on gas flow in the pipes so the stream is steady.

And I also tend to have a local side battery on transformers to buffer global shortfalls.  But I haven't had any power problems at all since they fixed the transformers a couple weeks back.

Nope, this is it. I went to take some shots of it and I noticed a flow disruption resulting from a brownout. I haven't seen a brownout for like two weeks, nor had I seen any flow disruptions whenever I looked using the gas pipe overlay. Oddly the main battery banks were completely full. So that is probably that mystery. Thanks you.

I've been reluctant to post pictures because the whole thing looks horrendous because everything has been pretty ad-hoc, but here.

Edit: Also, I apparently forgot to setup the local battery when running the circuit. I added it prior to this picture. I hadn't seen flow disruptions and I'm wondering if powering up a Fertilizer factor bank affected it.

##### Share on other sites

A little bit of an update.  My hydrogen cooling radiator has been operating continuously for over 400 cycles since the original. As you can see, I've bumped the g/s to about 480 and it still maintained a negative Temperature delta in the regulator room.  I imagine in another 200 cycles the wheezeworts will begin to stifle.  I've checked it regularly and have seen no flow disruptions since then. And considering the size of the radiator it has a visible history of flow disruption of about half a cycle.

Probably partly due to the density of my tidied up farm this arrangement will never achieve optimal temperature for the sleet wheat for more than a very brief time on a couple of the fringe crops. However, I have had to move to a pump to remove CO2 as it liquefies towards the bottom.  (I originally decided to remove it because I wanted to get rid of those low pressure boundary gas interactions.

I think I may try making smaller rooms with a regulator to more specifically target a smaller number of sleet wheat and get it to ideal temperature. There is no way I have the capacity with an arrangement this large to get all or most of them in ideal range even with more gas going through the system.  The temperature range is too great despite the spiral pattern.

I'm curious, after Kasuha's examples regarding heat exchange preferences if a top down lateral radiator array will provide more even cooling than a spiral array.  Once I've done some other things with my colony I might experiment with some rooms.  See how many sleet wheat a regulator can handle and what configuration can provide the most even cooling.

My ultimate goal is to get good yields from Planter Boxes to reduce jobs but maintain a limited number of plants.

I still don't understand stand why the regulator room has a negative temperature delta. I thought it was previously unobserved power disruptions causing my regulators to lose power.  But that clearly wasn't the only reason.

##### Share on other sites

Why use regulators at all?  Why not just a pump (or pumps if >500g/s flow)?

Your weezes cool the H2 and the pumps circulate it.  I do not see the need for a regulator to cool the hydrogen and the weeze to cool the hydrogen from the same regulators?

I have done similar setup with regulators outside the room (in ice biome) but for true closed loop, unless there is some benefit to the "fixed temperature change of regulators", this makes no sense from a heat gain/loss.

##### Share on other sites

5 hours ago, chemie said:

Why use regulators at all?

Wheezeworts can only cool the hydrogen to -60C. Heat conduction is based on the temperature difference, so maintaining a larger difference will increase the amount of cooling the system can handle.

For more detail on thermal conductivity, see the game code for it:

```public static float CalculateEnergyFlow(float source_temp, float source_thermal_conductivity, float dest_temp, float dest_thermal_conductivity, float surface_area = 1f, float thickness = 1f)
{
float num = source_temp - dest_temp;
return num * Math.Min(source_thermal_conductivity, dest_thermal_conductivity) * (surface_area / thickness);
}```

Thermal conductivity is W/mK, so the amount of energy transferred scales up with (surface area / thickness) -- the meters part -- and K, the temperature difference.

It may work fine to use Wheezeworts alone, but using Thermo Regulators definitely gives you a big edge in cooling.

##### Share on other sites

Q=m*Cp*dT

so I get your point.  How cold are you running outlet of regulators?

My weeze cooled H2 is about -30C

##### Share on other sites

@chemie I haven't tried cooling sleet wheat farms, but given that the plants start out with 400 kg of genetic ooze at 20C, it might take a lot of cooling.

But for waste processing (freezing CO2 and Chlorine, liquifying oxygen), I was running hydrogen at around -200C.

##### Share on other sites

Yes, I cannot actually get to the ideal range of -35 to -40 with this particular arrangement. (I saw one sleet wheat hit idea for like 30 seconds at one point, but every replanting undoes all the work.)  I might have better luck if I spread them out, but the range is too great to work.  This project was kind of a failure.

But on the lower fringe the temperature gets close to minus 60 and liquefies the CO2 for pumping out of the room.

The outlet on this particular farm goes to about -75 to -95. It is four serial regulators so it is at 52 degree drop between incoming and outgoing. The temperature range depends on how recently a large number of sleet wheat have been replanted.  I get 60 Sleet Wheat of good harvest out of 5 wheezeworts with an oxygen atmosphere for the farm for the Dupes to breathe.

I am going to try another farm where I break it up and try different radiator patterns to cover as many sleet wheat as evenly as possible to get them in ideal.  Hopefully I can use planter boxes with good yields for reduced dupe jobs.  I've 2 full time on these as  it is now.

##### Share on other sites

I am going to try another farm where I break it up and try different radiator patterns to cover as many sleet wheat as evenly as possible to get them in ideal.  Hopefully I can use planter boxes with good yields for reduced dupe jobs.  I've 2 full time on these as  it is now.

Perhaps a flat arrangement with a separate line of piping going up each farm tile? If you use a power-of-2 number of farm tiles (16, 32, 64), then you can do an even splitting just by pipe branching. Otherwise you can use valves, but it may be annoying to tune each one to match.

That way cooling will at least be pretty even.

You could also use ceiling lamps over each plant for fine-tuned heating, controlled by a thermo switch.

##### Share on other sites

Well, two things I'm really curious about is how many sleet wheat can a single regulator overcome and take to -35 reliably. And if, because of the peculiar way heat and cold transition in ONI and poor pipe conductivity, if a top down lateral array provides more even temperature than a spiral array.  I might look at other methods of tweaking after that.

Right now I'm trying to clean up my power and water distribution.  I'm cribbing from your Natgas guide to setup about 14 natgas generators off of two natgas geysers and a water geyser.  And I want to see that if I 'super' cool five of them with 2 wheezeworts in a mostly isolated room so that the output polluted water should be like -20 I can use that to cool the rest plus hydrogen gens and some batteries.

After that and cleaning up some other things, farm experimentation that isn't trying to prop up my only food production in a desperate bid to keep going after melting a cold biome with sleet wheat..

##### Share on other sites

Well, two things I'm really curious about is how many sleet wheat can a single regulator overcome and take to -35 reliably. And if, because of the peculiar way heat and cold transition in ONI and poor pipe conductivity, if a top down lateral array provides more even temperature than a spiral array.  I might look at other methods of tweaking after that.

Hmm, well we can get a rough estimate of the energy output of sleet wheat.

They're made of genetic ooze, starting at 20C, and the ideal temp range is -40C to -35C. So let's say you're keeping the air at -40C; the temperature difference is 60C, and the thermal conductivity of the atmosphere will limit the transfer (best case, chlorine, but CO2 may be more practical, so we'll use 0.0146 W/mK. Surface area and thickness are also part of the calculation. I'm not sure exactly what those values should be, but based on some digging in the code it looks like it's using the default values in the SimTemperatureTransfer component, which are 0.01m for thickness and a surface area of 10 m^2. So, the heat transfer rate should initially be (0.0146 W/mK)*(10 m^2 / 0.01 m)*(60K) = 876W. At maximum capacity, a thermo regulator cooling 1kg packets of hydrogen can do (2.4 J/gK)*(1000 g/s)*(14K) = 33,600W. So a single thermo regulator, assuming you can adequately cool it, should be able to handle up to 38 plants. However, there is likely to be significant heat leakage into the system, and that's harder to quantify without experimentation.

As a side, I was curious how quickly the plant itself would cool under these conditions... (3.47 J/gK)*(400000g)/(876 W) = 1584 s/K, or about 2.6 cycles per K. So.... the plant mass cooling should probably be ignored.

##### Share on other sites

1 hour ago, rezecib said:

Hmm, well we can get a rough estimate of the energy output of sleet wheat.

They're made of genetic ooze, starting at 20C, and the ideal temp range is -40C to -35C. So let's say you're keeping the air at -40C; the temperature difference is 60C, and the thermal conductivity of the atmosphere will limit the transfer (best case, chlorine, but CO2 may be more practical, so we'll use 0.0146 W/mK. Surface area and thickness are also part of the calculation. I'm not sure exactly what those values should be, but based on some digging in the code it looks like it's using the default values in the SimTemperatureTransfer component, which are 0.01m for thickness and a surface area of 10 m^2. So, the heat transfer rate should initially be (0.0146 W/mK)*(10 m^2 / 0.01 m)*(60K) = 876W. At maximum capacity, a thermo regulator cooling 1kg packets of hydrogen can do (2.4 J/gK)*(1000 g/s)*(14K) = 33,600W. So a single thermo regulator, assuming you can adequately cool it, should be able to handle up to 38 plants. However, there is likely to be significant heat leakage into the system, and that's harder to quantify without experimentation.

As a side, I was curious how quickly the plant itself would cool under these conditions... (3.47 J/gK)*(400000g)/(876 W) = 1584 s/K, or about 2.6 cycles per K. So.... the plant mass cooling should probably be ignored.

Thanks a bunch! This gives me a good start when I start playing with it.

##### Share on other sites

4 hours ago, rezecib said:

Hmm, well we can get a rough estimate of the energy output of sleet wheat.

They're made of genetic ooze, starting at 20C, and the ideal temp range is -40C to -35C. So let's say you're keeping the air at -40C; the temperature difference is 60C, and the thermal conductivity of the atmosphere will limit the transfer (best case, chlorine, but CO2 may be more practical, so we'll use 0.0146 W/mK. Surface area and thickness are also part of the calculation. I'm not sure exactly what those values should be, but based on some digging in the code it looks like it's using the default values in the SimTemperatureTransfer component, which are 0.01m for thickness and a surface area of 10 m^2. So, the heat transfer rate should initially be (0.0146 W/mK)*(10 m^2 / 0.01 m)*(60K) = 876W. At maximum capacity, a thermo regulator cooling 1kg packets of hydrogen can do (2.4 J/gK)*(1000 g/s)*(14K) = 33,600W. So a single thermo regulator, assuming you can adequately cool it, should be able to handle up to 38 plants. However, there is likely to be significant heat leakage into the system, and that's harder to quantify without experimentation.

As a side, I was curious how quickly the plant itself would cool under these conditions... (3.47 J/gK)*(400000g)/(876 W) = 1584 s/K, or about 2.6 cycles per K. So.... the plant mass cooling should probably be ignored.

Starting to question whether the constant fields can be trusted. Been doing tests on the breathing system with injections come to find that O2toCO2conversion is not 0.5 as the code would suggest even though it is never changed in the code. It's actually 0.02. Have to either inject code to get values or dive into the mess that is Unity engine. Have to assume every field has been modified by Unity. The private field minCO2ToEmit is 0.02 instead of 0.3.

The O2 consumption rate is 0.1 as the prefab setup would suggest though that can be found in game

Edit: Actually there might be a bigger bug here. Check out this variable dump. watch dt and compare to the timestamp. After the [02:39:03.636] mark I turned on max speed (time scale 3). See anything wrong?

output_log.txt

Edit 2: And this one is running on the ridiculous speed setting (time scale 10).

Edit 3: Okay been reviewing Unity things and I've come to the conclusion that ONI is not using Time.deltaTime correctly. All the code seems to do is use the time it takes for the last frame to be rendered. Essentially ONI is driven by lag.

Edit 4: Moved the debug over to StepTheSim to watch how it's handled and it seems... functional. It's incrementing by the frame so i'm getting 60 lines per second in the output log with dt being very inconsistent.
The dt is multiplied by the time scale and I'm still getting 60 lines every second on max speed. This means the simulator can run more times in a second but I'm not so sure everything is working right, like certain code needs to be called with 0.25 and it doesn't know what to do if that is ever above 0.25.

##### Share on other sites

@Risu Hmm, that is concerning. I have no experience with injection, do you have any pointers on where to get started?

0.02 would match up with the reported value of 2 g/s, given that consumption is 100 g/s. I guess that would mean that mouthbreathers emit 4 g/s?

As a side note, I've been trying to find the code for polluted water emitting polluted oxygen, again without success. I don't suppose you know anything about that?

##### Share on other sites

47 minutes ago, rezecib said:

As a side note, I've been trying to find the code for polluted water emitting polluted oxygen, again without success. I don't suppose you know anything about that?

All leads I have on that is that it happens on the native DLL side with a magic number for the polluted water hash.
The game never tells the DLL to do the interaction. It just does it.

47 minutes ago, rezecib said:

I have no experience with injection, do you have any pointers on where to get started?

Should be easy enough to find tools to handle the IL code injection.
Don't even try decompiling and recompiling it instead. You'll have nightmares.

Edit: Found this.

```private void SimUpdateFirst(float dt)
{
global::Sim.DebugProperties debugProperties;
debugProperties.buildingTemperatureScale = 100f;
debugProperties.contaminatedOxygenEmitProbability = 0.001f;
debugProperties.contaminatedOxygenConversionPercent = 0.001f;
debugProperties.biomeTemperatureLerpRate = 0.001f;
global::SimMessages.NewGameFrame(dt, this.simActiveRegionMin, this.simActiveRegionMax);
global::SimMessages.SetDebugProperties(debugProperties);
if (this.circuitManager != null)
{
this.circuitManager.Update();
}
}```

Edit 2: Setting both to 1 is scary.

##### Share on other sites

I am going to try another farm where I break it up and try different radiator patterns to cover as many sleet wheat as evenly as possible to get them in ideal.

The best arrangement I could figure out is countercurrent radiator. It evens out pipe contents temperature changes. It may not keep each plant at exactly the same air temperature (as that depends on age of the plant) but it will deliver about the same amount of heat drain to each plant, making it easier to keep them all around the same temperature if you keep constant temperature on the gas coming to the radiator.

##### Share on other sites

Well that's fun. I rewrote how the updates are handled and the game is no longer deterministic.
The only thing that doesn't seem right is CO2 breath instances which can murder your dupes at time scale 30.
Not sure why but they REALLY hate being in CO2 at that speed. Instant temperature diseases and suffocation.
Everything else is perfectly happy with destroying my GPU from 5 FPS and cycles flying by.

Normally when you do time scale 30 (Ctrl+U) every consumer creates vacuums because they can suck FAR faster than the simulator can run.

What I did was remove all variable delta time. Everything is handled in 0.25 second intervals and loops until the delta time drops below 0.25 seconds. Then the update is finished and the game moves on to the next frame. In each 0.25 second interval the simulator is called and everything is then handled with the assumption that 0.25 seconds passed. Any remaining delta time gets passed on to the next frame where it could possibly play catch up. At time scale 30 this happens at every single frame multiple times and it's murder on the computer, but it is the correct behavior.

Edit: Loaded a really populated save, zoomed out, and let it run at 30 time scale.
Still perfectly fine except for all the dupes getting diseases and scalding.
Then the SimDLL crashed from a breakpoint being encountered. Wonder what made it mad.

Edit 2: As expected there is another delta time used by state machines using the time between updates.
Can't say I care to change it. It'd be more annoying than it's worth.

##### Share on other sites

10 hours ago, Risu said:

Should be easy enough to find tools to handle the IL code injection.
Don't even try decompiling and recompiling it instead. You'll have nightmares.

I'd been using dnSpy to look at the code. Against your judgement, I gave recompiling it with changes a try (looks like dnSpy doesn't support injection so I'll have to get something else for that). After one false start, I got it to work as you observed, with polluted bubbles everywhere.

But perhaps this approach will fail for anything more complicated.