function u = ctrl_operation(t, x, plant, ref) % CTRL_OPERATION Stabilizing mode controller: hold T_avg at ref.T_avg. % % Proportional feedback on external reactivity (rod worth) driven by % temperature error: % u = Kp * (ref.T_avg - T_avg) % % Sign check: when T_avg > ref.T_avg, error < 0, u < 0 → rods insert, % power drops, T_avg falls. Correct polarity for a PWR. % % Gain Kp is a rough-out value. Scale reasoning: % - alpha_c ~ -1e-4 /K means the moderator already supplies 1e-4/K of % restoring reactivity per Kelvin of temperature error. % - Kp = 1e-4 /K roughly doubles the effective moderator coefficient — % it damps transients without overwhelming the intrinsic feedback. % - Real PWR rod controllers use much smaller gains with a deadband. % We can retune or switch to PI once we care about steady-state offset. % % Inputs: % t - time [s] (unused in this controller, kept for signature) % x - state vector (10 x 1) % plant - parameter struct (unused here; reserved for future gain-scheduling) % ref - struct with field .T_avg = target average coolant temperature [C] Kp = 1e-4; % [dk/k per K] T_avg = x(9); e = ref.T_avg - T_avg; u = Kp * e; end