Thermal System
The thermal system models heat produced by your unit’s devices and power system, then exchanges that heat with internal fluids and the surrounding environment. It works with Fluid Processing, which is also unreleased.
How temperature changes
Section titled “How temperature changes”Each component has a mass, specific heat, and temperature. Thermal energy is tracked in joules, and calculations use the actual elapsed time between updates.
The development model uses a 70 kg body with a specific heat of 100 J/kg°C, giving a thermal capacity of 7,000 J/°C. Before cooling is considered, adding 5,000 joules raises its temperature by approximately 0.71°C.
Heat exchange approaches equilibrium over time:
temperatureChange = (equilibriumTemperature - initialTemperature) × (1 - exp(-conductivity × elapsedTime))Coolant and lubricant
Section titled “Coolant and lubricant”Coolant provides active cooling. Lubricant acts as passive thermal mass: it absorbs and releases heat through the reservoir walls, slowing temperature changes.
| Property | Coolant | Lubricant |
|---|---|---|
| Main role | Active cooling circuit | Passive thermal mass |
| Density | 1.0 kg/L | 0.9 kg/L |
| Specific heat | 5,000 J/kg°C | 2,500 J/kg°C |
| Thermal capacity at 1 L | 5,000 J/°C | 2,250 J/°C |
| Volume participating in heat exchange | Limited by flow rate and elapsed time | Full reservoir volume |
| Heat dissipation | Active radiator | Passive transfer through reservoir walls |
Lubricant temperature naturally follows body temperature. It is not pumped through the coolant radiator circuit.
Cooling cycle
Section titled “Cooling cycle”Heat moves from the body to the fluids first, then from the fluids to the environment. This allows coolant to absorb heat before dissipating it through the radiator.
Fluid level affects cooling. Low volumes provide less thermal capacity and warm more quickly; levels below roughly 100 ml provide little buffering in the development model. If fluids are disabled or both reservoirs are empty, fluid cooling is skipped.
Flow-limited coolant
Section titled “Flow-limited coolant”Only the coolant that can circulate during an update participates in that update’s heat exchange:
effectiveVolume = min(flowRate × elapsedTime, availableVolume)At 5 ml/s over 10 seconds, up to 50 ml participates, even if the reservoir contains more. A full tank with a low flow rate can still have limited cooling capacity.
Reservoir mixing
Section titled “Reservoir mixing”Heated coolant mixes back into the fluid remaining in its reservoir. Larger reservoirs change temperature more slowly because they have more thermal mass.
finalTemperature = (circulatedVolume × returnTemperature + remainingVolume × originalTemperature) / totalVolumeFor example, mixing 1 ml at 100°C with 999 ml at 25°C gives a reservoir temperature of 25.075°C.
Fluid purity
Section titled “Fluid purity”Mixtures use weighted thermal properties. Coolant has a specific heat of 5,000 J/kg°C, lubricant 2,500 J/kg°C, and other fluids 1,000 J/kg°C in the documented model.
A mixture weighted as 70% coolant and 30% other fluid has a specific heat of 3,800 J/kg°C, or 76% of the pure-coolant value. Flow rate and composition both affect cooling; see reservoir filters for handling unwanted fluids.
Fans and temperature regulation
Section titled “Fans and temperature regulation”The current design targets 60°C. Below the target, heat dissipates passively. Above it, fans and coolant circulation increase their cooling response.
Fan speed and fluid conductivity respond to:
- How far the temperature is above target.
- How long the system has been above target.
- How quickly the temperature is rising.
- The temperature of the environment or coolant receiving the heat.
The cooling-time target is approximately 1.5 times the heating duration. A proportional boost increases cooling as temperature approaches 100°C, where the design calls for maximum cooling output. This is a control target, not a guarantee that every load can be held below that temperature.
Default fan
Section titled “Default fan”| Setting | Development value |
|---|---|
| Maximum speed | 5,000 RPM |
| Minimum speed | 250 RPM |
| Maximum airflow | 500 CFM |
| Default fan count | One |
Airflow scales linearly with fan speed, and the contributions of multiple fans are added together. SystemFan stores fan state; HvacService calculates cooling from airflow.
currentCfm = maxCfm × (currentSpeed / maxSpeed)conductivity = 0.035 × currentCfmThe documented active fluid-conductivity ranges are 5.0–170.0 for body-to-coolant exchange and 0.35–70.0 for the radiator. Lubricant uses constant conductivity of 0.05 through the reservoir walls and 0.01 for passive environmental dissipation.
Fluid losses
Section titled “Fluid losses”Coolant and lubricant are modeled as mostly recirculating fluids. Losses represent evaporation, micro-leaks, and degradation rather than the entire circulating volume being consumed. Organic fluids degrade more readily.
The documented thermal attrition base rate is flowRate / 10000, with type and temperature multipliers:
| Fluid | Base multiplier | Temperature behavior |
|---|---|---|
| Coolant | 0.01 | Stable through 80°C; temperature multiplier rises to a cap of 1.2 at 200°C. |
| Lubricant | 0.1 | Temperature multiplier rises by 1.0 per 40°C above 20°C. |
| Organic | 1.0 | Temperature multiplier rises by 1.5 per 40°C above 20°C. |
| Unknown | 0.1 | Uses the lubricant temperature scaling. |
Other consumption behavior, including arousal-related lubricant use, is described in Fluid Processing.
Power and heat
Section titled “Power and heat”The development model converts component electrical consumption into internal heat. Battery losses add heat equivalent to 2% of energy supplied during discharge and 5% of energy received during charging.
Optional attachments such as the Synthetic Womb participate through the shared device thermal behavior.
Component integration
Section titled “Component integration”For developers working on the unreleased implementation:
- Implement
HvacSubscriberand useThermalStatTrait. - Initialize a
ThermalStatwhen the component is attached or constructed. - Exchange heat with the body in
on_temperature_report, using conductivity and elapsed time. - Return the component’s thermal stat from
on_report_temperature.
HvacService coordinates fluid cooling, environmental exchange, component reporting, and persistence of the unit’s temperature. Reservoir temperatures are stored separately on the reservoir models.

