feat(vpm): compute in-plane hub force (H-force) in the free-wake march#11
Open
mcroomp wants to merge 1 commit into
Open
feat(vpm): compute in-plane hub force (H-force) in the free-wake march#11mcroomp wants to merge 1 commit into
mcroomp wants to merge 1 commit into
Conversation
The VPM free-wake rotor previously accumulated only the out-of-plane thrust (and hub moments) and passed 0.0, 0.0 for the in-plane hub force into assemble_result, so F_world carried no H-force. Accumulate it directly in the loads loop, per element: fx += dF_t*sin(psi) - dT*sin(beta_b)*cos(psi) fy += dF_t*cos(psi) + dT*sin(beta_b)*sin(psi) The first term is the profile/induced-drag H-force (same pairing as bem_common::SweepCtx::run); the second is the flapping-tilt term, resolved instantaneously from the real time-domain flap DOF (no b1c/b1s harmonics, exactly zero for a rigid rotor). Unlike the BEM-family models the VPM needs no apply_flap_dynamics -- flapback emerges from the marched disk geometry. - Thread fx_hub/fy_hub through VpmRotorResult and step()->assemble_result. - New validation: vpm_hforce_directional (downwind H-force in edgewise flow, ~0 in hover). Full suite 166/166 pass. - Docs: VPM_DESIGN sec 5.5.5 + sec 8.1 table; AGENTS.md H-force section.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Follow-up to #10. The BEM-family models (QS BEM, Pitt-Peters, Oye) now report the in-plane hub force ("H-force"), but the VPM free-wake rotor did not: it accumulated only the out-of-plane thrust and hub moments, then passed
0.0, 0.0forfx_hub/fy_hubintoassemble_result, soF_worldcarried no in-plane force for VPM.This PR closes that gap by accumulating the H-force directly in the VPM time-domain loads loop.
What changed
dynbem_rs/src/vpm/march.rs— per element, accumulate:fx += dF_t*sin(psi) - dT*sin(beta_b)*cos(psi)fy += dF_t*cos(psi) + dT*sin(beta_b)*sin(psi)The first term is the profile/induced-drag H-force (identical pairing to
bem_common::SweepCtx::run). The second is the flapping-tilt term, resolved instantaneously from the real per-blade flap DOFbeta_b— nob1c/b1sharmonics, and exactly zero for a rigid rotor. Unlike the BEM-family models the VPM needs noapply_flap_dynamics: flapback emerges from the marched disk geometry.dynbem_rs/src/vpm/mod.rs— threadfx_hub/fy_hubthroughVpmRotorResultand pass them fromstep()intoassemble_result(removed the TODO).validation_rs— newvpm_hforce_directionalcheck: downwind H-force in edgewise flow, ~0 in hover, mostly aligned with the flow axis, larger than the hover baseline. Registered inchecks/mod.rs; fixed theVpmRotorResultinitializer incyclic_phase_servo.rs.Docs —
VPM_DESIGN.md§5.5.5 (hub-load equations) + §8.1 validation table;AGENTS.mdnew "VPM in-plane H-force" subsection documenting the sign convention.Sign note
FlightCondition::v_hubis the freestream air velocity in the hub frame (relative wind =v_hub− blade velocity), so a+Xfreestream yields a downwind+Xin-plane force — matching the level-disk crosswind direction validated inchecks/h_force.rs.Validation
validation_rssuite: 166/166 pass (was 162, +4 new VPM H-force assertions).cargo test --release -p dynbem_rs -- vpm: 18 pass.cargo fmtclean;dynbemPyO3 crate builds.Note: the untracked
steady_flight_simple/directory is intentionally excluded as unrelated.