The 3D sim reads its power coefficient off a single closed-form fitted curve Cp(λ,θ) (the standard wind-turbine parametric fit). This 2D companion never uses that formula at all — instead it solves real blade-element momentum (BEM) theory, splitting the rotor into 14 annular rings and, for each one, iterating the axial and tangential induction factors a, a′ to convergence against a simple lift/drag airfoil polar with stall and Prandtl tip-loss correction:
φ = atan[(1−a)U / ((1+a′)ωr)] α = φ − (β(r)+θ)
Cn = Cl·cosφ + Cd·sinφ Ct = Cl·sinφ − Cd·cosφ
a = 1 / [4F·sin²φ /(σ·Cn) + 1] a′ = 1 / [4F·sinφ·cosφ/(σ·Ct) − 1]
dQ = 4π r³ ρ U ω a′(1−a) F dr P = Q·ω, C_p = P / (½ρAU³)
where σ = B·c(r)/(2πr) is local solidity and F is the Prandtl tip-loss factor. Summing dQ across every ring gives the rotor's hydrodynamic torque at the current ω, U and pitch — a completely independent computation from the 3D engine's fitted curve. The same real torque-balance dynamics then drives the rotor: I·dω/dt = Qhydro(ω) − k·Kgen·ω.
Verified numerically (standalone Node script, not shown in-browser): the BEM sweep's own peak power coefficient comes out to Cp ≈ 0.45 at λ ≈ 7 for zero pitch — below the Betz limit 16/27 ≈ 0.593 as physics requires, and matching the 45–48% real-rotor efficiency the 3D sim's write-up quotes, despite the two curves being computed by entirely different methods. Feathering the pitch collapses Cp the same way in both models. One genuinely new behaviour BEM exposes that the fitted curve does not: at high generator load the rotor's own hydrodynamic torque curve is non-monotonic, so the torque-balance dynamics can settle into a low tip-speed-ratio "stall" equilibrium instead of climbing to the efficient operating point — the same qualitative stall the 3D sim's write-up describes, now an emergent result of the annulus solve rather than a hand-tuned curve shape.
- Rings (front view, right): each annulus shaded by its own converged axial induction factor
a — brighter rings are extracting relatively more momentum from the flow.
- Streamtube (left): particle speed literally follows the local induction: free-stream
U upstream, U(1−a) at the rotor plane, U(1−2a) in the far wake — the classic actuator-disk streamtube expansion.
- Generator load k — as in the 3D sim, too little load lets the rotor overspeed past its efficient λ; too much load can stall it at a low λ where BEM's own torque curve traps it.