Skip to content

feat: forced transition (xstrip) support#16

Merged
aeronauty-flexcompute merged 3 commits intomainfrom
dev
Apr 8, 2026
Merged

feat: forced transition (xstrip) support#16
aeronauty-flexcompute merged 3 commits intomainfrom
dev

Conversation

@aeronauty-flexcompute
Copy link
Copy Markdown
Collaborator

Summary

  • Add forced transition via xstrip_upper / xstrip_lower parameters (x/c chord fraction, 0–1; default 1.0 = free transition) — equivalent to XFOIL's XSTRIP command
  • Thread through all layers: Rust core → XFOIL-faithful path → coupling solver → Python bindings → WASM → Web UI
  • Natural e^N transition takes precedence when it occurs before the forced location, matching XFOIL behaviour
  • Bump versions: UI 1.1.3 → 1.1.4, Python 1.1.5 → 1.1.6

Test plan

  • 387 Rust lib tests pass (no regression)
  • 114 Python tests pass (12 new forced transition tests at binding + API level)
  • Verified XFOIL parity: natural transition matches reference to 0.01% CL, 0.001% CD, 0.004% xtr
  • Forced transition verified: xtr lands at specified location, drag increases, e^N wins when earlier
  • Beta deployed and verified at foil.flexcompute.com/flexfoil-beta/
  • Merging to main triggers pypi-publish.yml → builds wheels → publishes flexfoil 1.1.6 to PyPI

🤖 Generated with Claude Code

aeronauty and others added 3 commits April 8, 2026 21:43
Add XFOIL-equivalent forced transition via xstrip_upper/xstrip_lower
parameters (x/c chord fraction, 0-1; default 1.0 = free transition).
Thread through all layers: Rust core -> XFOIL-faithful path -> coupling
solver -> Python bindings -> WASM bindings -> Web UI.

The low-level trchek2_full() already handled x_forced; this change
plumbs the user-specified xstrip value down to it via xstrip_to_xiforc
conversion (XFOIL's XIFSET equivalent). Natural e^N transition takes
precedence when it occurs before the forced location.

Includes 12 new Python tests (binding + API level), Trip Upper/Lower
inputs in the Solve panel, and updated docs/README.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…nsition

UI: 1.1.3 → 1.1.4
Python: 1.1.5 → 1.1.6

Merge to main triggers pypi-publish.yml which builds wheels for all
platforms and publishes to PyPI automatically.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@aeronauty-flexcompute aeronauty-flexcompute merged commit ec792da into main Apr 8, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants