# myAirfoil **Repository Path**: openminds/myairfoil ## Basic Information - **Project Name**: myAirfoil - **Description**: 面向无人机(机翼、旋翼、推进螺旋桨)与风力机叶片的翼型/叶片几何工具链,以 FastMCP 4 为统一服务层,覆盖从几何参数化到 2D 气动分析、再到 3D 低阶气动估算(BEMT/LLT)的完整链路。 - **Primary Language**: Unknown - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-10-28 - **Last Updated**: 2026-11-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: XFOIL, BEMT, LLT, MCP, optimization ## README # myAirfoil 面向无人机(机翼、旋翼、推进螺旋桨)与风力机叶片的翼型/叶片几何与气动工具链,以 FastMCP 4 为统一服务层,覆盖从几何参数化、2D 气动分析、3D 低阶气动估算(BEMT/LLT)、平面形状优化到 CAD 导出的完整链路。 项目定位是**依赖可控、许可证干净、架构透明**的个人开源工程基础:不追求代理模型的极致速度,而以"每一环可解释、可调试、可独立替换"为核心价值,不替代成熟的气动设计软件。 - 包版本 **0.3.4** · Python ≥ 3.10 · **Windows x64** · GPL-3.0 · 服务层 FastMCP 4(stdio 默认) > **发行边界(重要)**:本项目按**仓库内运行**发行,不对外发布可运行 wheel/sdist。请 clone 仓库后执行 `uv sync` 运行;`vendor/xfoil-python`(含 `libxfoil.dll`)与 `vendor/pybemt` 是核心运行依赖,有意不随 wheel/sdist 打包,因此脱离仓库目录安装时 XFOIL 与 BEMT 不可用。 ## 能力边界 **系统内核 = XFOIL(2D 气动分析)+ BEMT/LLT(3D 低阶气动估算)。** **边界内**: - 2D 翼型几何参数化:CST(默认)、圆锥前缘 + NURBS(低 Re)、Hicks-Henne(修饰)、PARSEC(可选) - XFOIL 不可压黏流分析:目标 Re 10⁴–10⁶,极曲线扫描与 SQLite 缓存 - 轻量 2D 优化:scipy + CST 设计变量 - Re / Ncrit 敏感性测量:多 Re / 多 Ncrit 极曲线 sweep + 边界层剖面诊断(纯测量工具,只输出描述性统计,不闭环优化) - 展向截面序列 + BEMT:旋翼、螺旋桨、风力机叶片的低阶 3D 气动估算 - 固定翼 3D 低阶分析:Prandtl 升力线(LLT)+ 站位 XFOIL 型阻,输出展向载荷与诱导阻力 - 3D 低阶平面形状优化:在给定截面翼型(CST 固定)下,以 BEMT/LLT 为评估引擎优化展长/旋翼直径/螺旋桨直径、弦长分布、几何扭转与平面形状 - 3D CAD 导出:build123d 将截面序列放样为参数化叶片实体 → STEP/STL(仅限截面放样,不做通用 CAD 建模) **边界外(不做,仅给出项目外推荐路径)**: - RANS CFD / 3D CFD、可压缩与非定常求解 → 推荐使用 FreeCAD/CfdOF 工作台(不做集成) - 基于 CFD 的高保真三维外形优化(曲面造型、弯掠、翼身一体化)→ 推荐在外部 CFD/CAD 工具中完成 - 风力机整机级分析设计 → 推荐使用 WISDEM(不做集成) - 通用 CAD 建模(装配、复杂曲面造型、出图)→ 推荐使用 FreeCAD 等完整 CAD 工具,本项目导出的 STEP 可直接作为其输入 - 黑箱代理模型、多学科耦合框架 → 不引入 **低雷诺数模拟的局限(使用前须知)**: - XFOIL 面元法 + 积分边界层对层流分离泡的预测为工程级精度;大攻角失速后、深分离区结果仅供趋势参考 - e^N 转捩模型为半经验模型;强逆压梯度、表面粗糙/结冰等非标工况下精度下降 - 2D 极曲线不含旋转效应(离心力/科氏力)与三维展向效应;旋翼/螺旋桨应用须在 BEMT 层校正,输出随附该声明 - LLT 为无黏升力线理论(简化诱导阻力),不计三维黏性分离与失速展向扩展;小展弦比或大分离工况仅供趋势参考 - 非定常/动态失速不在范围;Re < 10⁴ 或 > 10⁶ 超出目标区间,结果不作保证 **应用场景限制**:面向小型无人机、旋翼/螺旋桨与中小风力机叶片的设计迭代、方案对比与教学研究;不作为适航认证级气动数据或大型结构定型依据。 ## 为什么聚焦这四个方向 目标场景分为两大类:**无人机**(含机翼、旋翼、推进螺旋桨)与**风力机叶片**。旋翼与螺旋桨是无人机的子类,不是与无人机并列的独立方向。 两大类下的四个目标应用方向——无人机机翼、旋翼、螺旋桨和风力机叶片——有一个决定性的共同特征:**工作雷诺数普遍偏低(Re 10⁴–10⁶),且前缘几何对气动性能极为敏感**。低雷诺数下层流分离泡的形成、移动和破裂对前缘曲率分布高度敏感,因此几何层不能把前缘当作"主体拟合的附属品",而必须作为一等公民独立处理。 同时,这四个方向都涉及**沿展向的翼型截面序列设计**——2D 翼型几何是"展向多截面参数化 + 3D 放样"的前置环节。 ## 核心设计原则 1. **库优先,MCP 为薄层。** 每个能力模块(geometry、database、analysis、rotor 等)都是可独立导入、独立测试的 Python 包。MCP 工具只负责参数校验、路由和结构化返回,不含算法逻辑。 2. **三层几何策略,而非"万能拟合器"。** CST 负责全局参数化,圆锥曲线负责前缘精确构造,Hicks-Henne 只做局部修形,NURBS 作为主体段拟合引擎与交换格式。 3. **长时工具一律后台任务。** XFOIL 极曲线扫描、BEMT/LLT 计算与优化通过 FastMCP 4 的 `task=True` 由进程内 Docket worker 承载(XFOIL 调用本身在子进程 executor 内执行),内存后端,零外部基础设施(无需 Redis)。 4. **XFOIL 子进程隔离,项目整体 GPL-3.0。** xfoil-python 源码 vendored 于 `vendor/xfoil-python/`,分析层在独立子进程内经 ctypes 调用 vendored 库,主进程仅做 IPC 与超时 kill。直接依赖中 geomdl 为 MIT;pyBEMT 源码 vendored 于 `vendor/pybemt/`(MIT),不安装 PyPI 包;FastMCP 4、build123d 为 Apache-2.0,均与 GPL-3.0 兼容;Apache-2.0 依赖保留其 LICENSE 与 NOTICE(如有)。 ## 几何策略三层结构 | 层 | 方法 | 职责 | 定位 | |---|---|---|---| | 全局层 | **CST**(Bernstein 基,默认 8 阶) | 默认全局参数化 | 常规低 Re 翼型的唯一默认策略 | | 前缘层 | **圆锥曲线前缘 + NURBS 主体** | 前缘曲率受控构造,G¹ 拼接为硬约束 | Re < 100k **强制路由**;100k–500k 高 `max_le_error` 时推荐切换 | | 修饰层 | **Hicks-Henne**(5–8 个扰动函数) | 局部修形 | 仅叠加在 CST/NURBS 基准之上,不开放独立入口 | | 可选 | PARSEC(11/12 参数) | 设计空间粗扫 | 降级为可选快速探索工具,非默认 | **合同性字段**:`airfoil_fit`、`airfoil_compare` 必须在**顶层**返回 `max_le_error`(前缘区域 x/c < 5% 最大拟合误差);接受 Re 输入的几何工具(`airfoil_route`、`airfoil_compare`)必须在**顶层**返回 `recommended_strategy` 提示(Re 越界时降级为 `"unspecified"`);`airfoil_generate` 不做拟合与路由,不返回这两个字段;分析工具返回必须包含 `converged` 标志与失败工况列表。输入 Re 超出 10⁴–10⁶ 时返回警示字段 `re_out_of_range: true`(不是错误码)。字段变更视为破坏性变更。实测值 `max_le_error` 与 SectionSpec 的阈值 `max_le_error_limit`(默认 0.005)是两个独立字段,不得混用。 ## 应用场景映射 | 应用方向 | 典型翼型 | 典型 Re | 推荐几何策略 | |---|---|---|---| | 无人机机翼 | E387、FX63-137 | 50k–500k | CST / 圆锥前缘 | | 风力机叶片(中段/尖部) | S809、DU 系列 | 500k–1M | CST | | 旋翼 / 螺旋桨截面(小型) | RAF-6、Clark Y | 50k–200k | 圆锥前缘 | | 旋翼 / 螺旋桨截面(中型以上) | NACA 0012 等 | 100k–10⁶(按设计,含端点) | CST | ## 安装 推荐使用 [uv](https://docs.astral.sh/uv/)(锁文件 `uv.lock` 保证依赖可复现): ```powershell uv sync # 一条命令装齐系统:核心 + CAD 导出(build123d)、BEMT 运行时依赖(matplotlib/pandas) uv sync --extra dev # 可选:pytest(运行测试) ``` UIUC 翼型坐标索引与快照随包数据分发,运行时零网络;预编译 `libxfoil.dll` 随 vendored 源码分发。仅支持仓库内运行:`pip install -e .` 可用于编辑器/工具解析(仍指向仓库内 `vendor/`),非 editable 的 `pip install .` 不携带 `vendor/`,XFOIL 与 BEMT 不可用。 > **依赖同步卡住**:`uv sync` / `uv run` 若长时间停在包下载进度(如 `build123d`),通常是环境变量 `UV_DEFAULT_INDEX` 指向的镜像超时,它会覆盖本仓库 `pyproject.toml` 声明的清华源。可临时改用项目源:`$env:UV_DEFAULT_INDEX='https://pypi.tuna.tsinghua.edu.cn/simple/'`;或在本机已同步过依赖时追加 `--offline`(如 `uv run --extra dev --offline python -m pytest`)。如需长期生效,请修改或删除系统/用户环境变量 `UV_DEFAULT_INDEX`。 ## 运行 ```powershell uv run python -m mcp_server # 以 stdio 启动 MCP 服务(默认 extras 已含 BEMT/CAD) ``` 服务注册 15 个工具(8 个同步 + 7 个后台任务),由智能体客户端(Trae、Claude Desktop 等)经 stdio 接入。长时工具(极曲线扫描、2D 优化、Re/Ncrit 敏感性测量、BEMT/LLT、平面形状优化)以 `task=True` 后台任务执行,客户端轮询任务结果。 ### 智能体客户端配置 在客户端的 MCP 配置中登记本服务(stdio 方式,由客户端拉起进程): ```json { "mcpServers": { "myairfoil": { "command": "uv", "args": [ "run", "--directory", "E:/myWorkspace/myairfoil", "python", "-m", "mcp_server" ] } } } ``` - `--directory` 指向本仓库根目录:自定义(非内置)模板中的 `section_spec_ref` 等相对路径按进程工作目录解析,该参数保证客户端无论从哪里拉起服务,工作目录都锚定在仓库根;内置模板资产(`myairfoil_templates/`)经 `importlib.resources` 定位,与工作目录无关。示例中的 `E:/myWorkspace/myairfoil` 需替换为本机 clone 的绝对路径。 - 配置文件位置:Trae 为项目级 `.trae/mcp.json` 或设置中的 MCP 配置;Claude Desktop 为 `%APPDATA%\Claude\claude_desktop_config.json`;其他客户端参考各自的 MCP 服务器登记方式,同样使用上述 `command` / `args`。 - 可选能力默认随 `uv sync` / `uv run` 安装(`pyproject.toml` 已将其并入核心依赖),启动参数无需再写 `--extra`。 - 若客户端拉起服务时网络受限导致依赖解析缓慢,可在 `args` 中 `--directory` 之前追加 `--offline`(前提是本机已执行过 `uv sync`)。 输入合同要点: - 翼型引用统一走五类来源(`family` / `naca` / `cst` / `uiuc` / `coordinates`),由统一管线解析为归一化坐标 + CST 元数据; - 3D 分析/优化/CAD 导出一律以**应用对象模板**(`tpl.wing.v1` / `tpl.rotor.v1` / `tpl.propeller.v1` / `tpl.blade.v1`)为输入,模板经 `section_spec_ref` 引用 SectionSpec(展向站位序列的数据合同,JSON Schema 2020-12 校验); - 内置模板资产(`myairfoil_templates/`)随包分发,覆盖四类:wing / rotor 示例、propeller 示例与 5 个 blade(IEA/NREL 基准)。注意 SectionSpec 的 `application_type` 取值为 `{fixed_wing, rotor, propeller, wind_turbine}`,模板层为 `{wing, rotor, propeller, blade}`,二者由管线映射,不可混填; - **内置 5 个 MW 级 blade 模板(iea3p4/iea10/iea15mw/iea22/nrel5mw)作为几何与工况基准**:设计工况逐站位 Re 约 3.9×10⁶–5×10⁶,超出 XFOIL 目标区间 10⁴–10⁶。blade 走专用极曲线机制(扩展网格重扫 + 失速锚定合成 + 近圆柱回退,`alpha_source` 标注),`bemt_solve` 可正常收敛(实测 CP:iea10 0.442338、iea15mw 0.469839、iea22 0.464041、iea3p4 0.468803、nrel5mw 0.489020);因部分极曲线为合成段,结果按基准/趋势用途解读,不作高保真气动标定值; - 错误一律返回结构化 `{"error_code", "message"}`,错误码清单冻结(如 `E_SCHEMA_INVALID` / `E_BEMT_NOT_CONVERGED` / `E_LLT_NOT_CONVERGED` / `E_NO_FEASIBLE_EVALUATION` / `E_LE_ERROR_EXCEEDED` 等)。 ## 架构 ``` myairfoil/ ├── geometry/ # 几何策略层 │ ├── strategies/ # cst, conic_le, hicks_henne, parsec(NURBS 主体经 geomdl 在 composite 内) │ ├── sections/ # 翼型族注册表 + SectionSpec 校验/展向再生管线 + 四类应用对象模板 │ ├── router.py # 应用场景/Re → 策略路由 │ └── composite.py # 圆锥前缘 + NURBS 主体,G¹ 拼接 ├── airfoil_source/ # 统一翼型引用解析:五类来源 → 归一化坐标 + CST 元数据 │ └── data/uiuc/ # UIUC 索引 + 坐标快照(随包分发,离线默认) ├── database/ # SQLite 极曲线缓存 + 项目记录(polar_run / 2d_optimization / llt / bemt / shape_optimize)+ shape_eval_cache 评估缓存 ├── analysis/ # XFOIL 分析层 │ └── xfoil/ # 子进程 executor(每任务一进程、超时 kill、崩溃回收)+ 工作进程 ├── vendor/ │ ├── pybemt/ # vendored pyBEMT 源码(MIT,BEMT 求解) │ ├── xfoil-python/ # vendored xfoil-python 源码(GPL-3.0,含预编译 libxfoil.dll) │ ├── airfoilpreppy/ # Viterna 外插参考实现(Apache-2.0,仅审计参考,不参与运行) │ ├── aerosandbox/ # UIUC 快照数据源 + LLT 架构参考(VENDOR.md 登记审计) │ └── uiuc-extra/ # UIUC curated 补充坐标(S809 等) ├── optimization/ # 2D CST 优化 + Re/Ncrit 敏感性测量 + 3D 平面形状优化(问题定义/守卫/评估缓存/DE 优化器) ├── llt/ # 固定翼 3D 低阶分析(极曲线提供器 + 站位桥接 + LLT 编排) ├── rotor/ # 旋翼/螺旋桨/风力机 BEMT │ ├── adapter.py # pyBEMT 极曲线注入适配层 │ ├── viterna.py # ±180° 极曲线外插(风力机) │ ├── bridge.py # SectionSpec 站位 → pyBEMT INI 参数 │ ├── polar_provider.py# 逐站位解前 Re 估算 → XFOIL/SQLite 极曲线 → pyBEMT Airfoil │ ├── bemt_induction.py# Buhl(2005) 高诱导修正(风力机 a>0.4 站位) │ └── workflow.py # 模板 → 求解 → 收敛判定 → 项目记录(record_type: bemt) ├── cad/ # 3D CAD 导出:SectionSpec 展向站位放样 → STEP/STL(build123d) └── mcp_server/ # FastMCP 4 工具定义(8 个同步工具 + 7 个后台任务) ``` ## MCP 工具 | 工具 | 执行方式 | 说明 | |---|---|---| | `airfoil_families` | 同步 | 已注册翼型族与参数 schema | | `template_list` | 同步 | 列出内置模板资产(`ref` / `template_id` / `application_type` / `name` / `section_spec_ref`) | | `template_load` | 同步 | 按 `ref` 加载内置模板并做 schema + SectionSpec 校验;返回模板体、`section_spec_sha256`、真实站位绑定数与告警 | | `airfoil_generate` | 同步 | 族引用 → 坐标 | | `airfoil_fit` | 同步 | CST / 圆锥前缘拟合(含 `max_le_error`) | | `airfoil_route` | 同步 | Re → 几何策略路由 | | `airfoil_compare` | 同步 | 双策略对比报告 | | `airfoil_polar_xfoil` | 后台任务(`task=True`) | XFOIL 粘性极曲线扫描;XFOIL 调用隔离在子进程 executor,结果写入 SQLite 缓存(`cache_key` / `cache_hit` / `rerunnable`),CSV 列序冻结 `alpha,cl,cd,cm,converged` | | `airfoil_optimize_2d` | 后台任务(`task=True`) | 2D CST 轻量优化:8 维子集扰动 + SLSQP,XFOIL 为评估器(复用缓存);目标 `uav_clcd`=max Cl/Cd、`wind_cl15cd`=max Cl^1.5/Cd;约束含厚度下限与收敛性罚项;最优解复核并写 `2d_optimization` 记录 | | `airfoil_re_sensitivity` | 后台任务(`task=True`) | Re 敏感性**测量**工具:多 Re 极曲线 sweep(缺省等比 7 点 50k–500k)+ 边界层剖面诊断(LSB / 转捩位置 / e^N / 分离 α);输出逐 Re 原始曲线与 `descriptive_stats`(range% 与相邻 Re 差分 RMS),只描述变化量、不做"多少算平稳"的判定;`include_bl` 可选 | | `airfoil_ncrit_sensitivity` | 后台任务(`task=True`) | Ncrit 敏感性**测量**工具:固定设计 Re 下多 Ncrit 极曲线 sweep(缺省 4 点 9.0→4.5,降序不重排,首点为干净参考)+ 边界层诊断;输出以干净点为参考的退化统计(drop/rise/shift,**绝对差分**语义,与 Re 版不可比);`n_crit` 在极曲线缓存键中,默认 9.0 兼容既有缓存 | | `llt_solve` | 后台任务(`task=True`) | 固定翼 LLT 求解:输入 `tpl.wing.v1` 模板,经 `section_spec_ref` 展向再生站位;输出 CL/CD/CDi/CDp、逐攻角与展向环量载荷分布、`polar_model` 外插口径、`applicability` 声明;成功写 `llt` 记录,未收敛返回 `E_LLT_NOT_CONVERGED` 并列出失败攻角 | | `bemt_solve` | 后台任务(`task=True`) | 旋翼/螺旋桨/风力机 BEMT 求解:输入 `tpl.rotor.v1` / `tpl.propeller.v1` / `tpl.blade.v1` 模板;输出推力/扭矩/功率、系数(J/CT/CQ/CP/η 或 TSR/CP/CT;**悬停/静态 J=0 时 η 无物理意义、合同返回 `null`,效率请用 `figure_of_merit`**)、悬停/静态的 `figure_of_merit` 与 `p_ideal_w`、逐站位 Cl/Cd/dT/dQ/F/a/ap/Re/AoA、`rotation_effects_declaration`(2D 极曲线不含旋转效应,BEMT 层为校正手段);风力机经 Viterna ±180° 外插并标注,并对 a>0.4 的高诱导站位应用 Buhl(2005) 经验修正(仅 C=−1 站位,旋翼/螺旋桨不受影响);悬停/静态 v_inf=0 时 `a/ap` 为归一化奇点、不具物理意义(输出警告),T/Q/P 与 FM 为省略诱导来流的近似;成功写 `bemt` 记录,不收敛返回 `E_BEMT_NOT_CONVERGED` | | `shape_optimize` | 后台任务(`task=True`) | 3D 平面形状优化:输入四类模板的 `shape_optimize` 形态(含 `optimization` 块:白名单变量/目标/约束/预算);scipy DE 全局搜索(种子可复现)+ 可选 L-BFGS-B/SLSQP polish;候选级适用性守卫(AR/锥度/sweep/上反 ±5°/模式/站位覆盖/叶尖 Mach)+ 评估级双层缓存控成本;目标按场景 `max_l_over_d` / `max_fm` / `max_eta`(仅 propeller 轴流 J>0)/ `max_cp`(`eta_ge` 约束同此限制,解析期校验);输出最优平面参数、目标值、约束余量、`guard_tags`、`budget_exhausted` 与评估历史摘要,写 `shape_optimize` 记录;预算内无任何可收敛且满足约束的候选返回 `E_NO_FEASIBLE_EVALUATION`。返回的 `section_spec_sha256` 为**输入基准 SectionSpec 的规范 JSON 内容哈希**(评估缓存键口径,不随优化结果变化),与模板 `provenance.section_spec_sha256`(SectionSpec 文件字节哈希)口径不同,二者不可直接比对 | | `cad_export_loft` | 同步 | 3D CAD 导出(依赖 build123d):输入四类模板,经 `section_spec_ref` 展向再生站位序列,build123d 放样为叶片实体并导出 STEP/STL(SI 米;wing 半翼、旋翼系单叶片,镜像/阵列属通用 CAD 不做);TE 有限厚度由放样层补 TE 面、te=0 闭合环直接放样;`ruled` 可选直纹放样;输出文件路径、体积/面积/包围盒、`span_semantics` 等合同字段,不写项目记录 | UIUC 坐标默认完全离线:索引与坐标快照随包数据分发(仓库内 `airfoil_source/data/uiuc/`),运行时零网络;如需在线代理,设置 `MYAIRFOIL_UIUC_MODE=proxy`,数据目录可用 `MYAIRFOIL_UIUC_DATA_DIR` 覆盖。代理失败返回 `E_UIUC_UNREACHABLE` / `E_UIUC_COORD_MISSING` / `E_UIUC_COORD_INVALID`,不静默回退。 ## 技术选型 | 能力层 | 选型 | 许可证 | 说明 | |---|---|---|---| | 服务基座 | FastMCP 4 | Apache-2.0 | stdio 默认,HTTP 按需;内存任务后端 | | 全局参数化 | CST(Bernstein 基,自实现) | GPL-3.0(本项目) | 默认策略,默认 8 阶 | | 前缘增强 | 圆锥曲线前缘 + geomdl NURBS 主体 | geomdl MIT / 本项目 GPL-3.0 | 低 Re 推荐策略,G¹ 拼接 | | 局部修饰 | Hicks-Henne | GPL-3.0(本项目) | 仅叠加在 CST/NURBS 基准之上 | | 快速探索(可选) | PARSEC(11/12 参数) | GPL-3.0(本项目) | 非默认 | | XFOIL 分析 | xfoil-python(源码 vendored,ctypes 调用 + 子进程 executor) | GPL-3.0 | 项目整体 GPL-3.0;预编译 libxfoil.dll 随源码分发;每任务一子进程,段错误限于 executor | | BEMT | pyBEMT(源码 vendored,`vendor/pybemt/`) | MIT | 极曲线通过适配层注入,不用内置数据源 | | 固定翼 3D 低阶分析 | Prandtl 升力线自实现(架构参考 AeroSandbox `NonlinearLiftingLine`,MIT;不引入外部 LLT 库) | GPL-3.0(本项目) | 展向环量分布 + 诱导阻力;站位型阻由 XFOIL 极曲线注入 | | ±180° 极曲线外插(风力机) | Viterna 方法自实现 | GPL-3.0(本项目),参考 NREL AirfoilPrep(Apache-2.0) | 有限攻角极曲线 → 全圆攻角 | | 3D 平面形状优化 | scipy DE + 可选 L-BFGS-B/SLSQP polish | BSD-3(scipy) | 种子可复现;评估级双层缓存控 XFOIL 成本 | | 3D CAD 导出 | build123d | Apache-2.0 | 截面序列放样 → STEP/STL,纯 pip 安装 | | 数据库 | SQLite | 公共领域 | 极曲线缓存与项目记录;UIUC 索引与坐标为随包快照(JSON + `.dat`),不建索引表 | ## 测试 ```powershell uv run --extra dev python -m pytest -m fast # 快速门禁(PR,目标 < 3 min) uv run --extra dev python -m pytest -m "not slow" # 合并门禁(含 heavy,不含 slow) uv run --extra dev python -m pytest # 全量(含真实 XFOIL 端到端 slow 用例) ``` pytest 由 `dev` extra 提供,未执行过 `uv sync --extra dev` 时 `uv run --extra dev` 会自动补齐。 ## 许可证 项目整体以 GPL-3.0 分发(全文见根目录 `LICENSE`,Copyright (c) 2026 OpenMINDS):xfoil-python 源码 vendored 于 `vendor/xfoil-python/`(保留其原始 GPL-3.0 LICENSE 与版权声明),经 ctypes 调用并由子进程 executor 隔离。直接依赖中 geomdl 为 MIT;pyBEMT 源码 vendored 于 `vendor/pybemt/`(MIT),不安装 PyPI 包;FastMCP 4、build123d 为 Apache-2.0,均与 GPL-3.0 兼容;Apache-2.0 依赖保留其 LICENSE 与 NOTICE(如有)。UIUC 坐标数据版权归 UIUC / M. Selig 及各位原作者,本项目不对其重新授权;快照随包分发的来源与再分发前提见 `airfoil_source/data/uiuc/NOTICE.md`,生成规则见 `vendor/aerosandbox/VENDOR.md`。 ## 文档 - [优化与敏感性测量模型说明](optimization/MODEL.md) —— 2D 优化模型 + Re/Ncrit 测量工具合同 + 3D 平面形状优化模型(冻结口径) - [LLT 设计手册](docs/llt-manual.md) —— 自实现非线性升力线的离散、残差构造与验证 - [pyBEMT 算法与代码说明书](docs/pybemt-manual.md) —— vendored pyBEMT 0.1.0 的求解器结构、配置口径与 `rotor/` 适配层封装 - [SectionSpec JSON Schema](geometry/sections/schema/section-spec.schema.json) —— 展向截面序列输入的数据合同(JSON Schema 2020-12) - [应用对象模板 Schema](geometry/sections/schema/application-spec.schema.json) —— 公共包装 + [机翼](geometry/sections/schema/wing-spec.schema.json) / [旋翼-螺旋桨](geometry/sections/schema/rotor-propeller-spec.schema.json) / [风力机叶片](geometry/sections/schema/blade-spec.schema.json) 三套子 schema