Pick coils from the item list, set the steam flow, and watch the turbine build. Every number comes from the mod's own TurbineLogic and TurbineData code, not from creative-mode testing.
The tuner only changes the count of the last coil row and keeps the rest as they are. It stays at or below the tier's gauge max RPM.
Efficiency and bonus are averaged across every coil block, but drag is summed. A single insanite block in a ring of iron adds only its share to the average.
eff = Σefficiency × 0.33 / n bonus = max(1, Σbonus / n) drag = rpm × 0.1 × ΣextractionRateTurbineData.update · TurbineData$CoilStats.accept
Power is drag^bonus × eff. With bonus above 1, bigger turbines gain more than linearly, so a high-tier coil can put out more RF than the steam carries in.
rf/t = drag^bonus × eff × rpmFactorTurbineLogic.update
The RPM factor is a cosine that peaks every ~898 RPM. Below 500 RPM it's capped at 50%. Running at 900 needs about twice the coils of 1800, and power is nearly the same.
f = 0.25·cos(rpm / 142.9425) + 0.75 if rpm < 500: f = min(0.5, f)TurbineLogic.update
Rotor energy is only clamped at zero. The simulation never limits speed to the tier's 1,000 / 2,000 RPM "max", so steady RPM follows a closed form:
rpm = (steamRF − mass·0.01)
/ (0.1·Σextraction + 0.00025·blades)
TurbineData.setRotorEnergy · MultiblockTurbine.getRotorSpeed
Each blade handles 15 (Basic) or 25 (Reinforced) mB/t. Steam beyond that still hits the rotor, but only at blades / needed efficiency.
needed = floor(flow / perBlade) extraRF × (1 − (needed − blades) / needed)TurbineLogic.update
Every blade and shaft block adds mass (8 Basic, 10 Reinforced). Mass costs a flat 0.01 RF/t per unit whatever the RPM, and it also sets how long the rotor takes to spin up.
friction = (blades + shaft) × mass × 0.01 spin-up τ = blades × mass / dragCoef (ticks)TurbineData.update · TurbineVariant