跳转至

数据输出与解释

SHARPy 的原始输出格式为 HDF5 和 VTK。工程实践任务通常还需要一层抽取与标准化,以下仅为参考,你可以根据你的实际情况自行定义结构化的输出。

为什么需要标准化输出

SHARPy 的原生输出直接来自求解器内部数据结构,存在以下问题:

  1. 字段命名不稳定:不同求解器版本的输出键名可能变化。
  2. 坐标系不透明:原始输出不携带坐标轴、符号和单位元数据。
  3. 多工况对比困难:每个算例的原始输出分散在不同目录中,缺乏统一索引。

因此,可以在 SHARPy 原始输出之上构建标准化数据集层,包含索引文件、元数据文件和按约定格式导出的 CSV/JSON 数据。

标准化输出目录结构

以下为推荐的输出目录结构:

outputs/<experiment_name>/
├── manifest.json                          # 全局清单
├── summary.json                           # 汇总统计
├── README.md                              # 实验说明
├── plots/                                 # 快速诊断图
│   ├── peak_tip_uz_by_matrix.png
│   └── peak_lift_by_matrix.png
├── sharpy_runs/
│   └── <case_id>/                         # 每个独立算例
│       ├── raw_results.json               # 从 SHARPy HDF5 提取的结构化 JSON
│       ├── wake_coordinates.json          # 尾迹几何坐标
│       ├── sharpy_stdout.log              # SHARPy 标准输出
│       ├── csv/
│       │   ├── time_series.csv            # 时间序列数据
│       │   ├── tip_load.csv               # 翼尖载荷
│       │   ├── root_resultants.csv        # 根部反力/内力/外力
│       │   ├── nodes.csv                  # 节点位移与转角
│       │   ├── distributed_strain.csv     # 分布应变
│       │   └── spanwise_aero_forces.csv   # 展向气动力分布
│       └── beam/                          # SHARPy VTK 梁输出
│       └── aero/                          # SHARPy VTK 气动输出
└── standardized_dataset/                  # 统一数据集视图
    ├── metadata/
    │   ├── case_index.json                # 全部 case_id 索引
    │   ├── case_index.csv
    │   └── dataset_metadata.json          # 数据集模式与版本
    ├── structure_cases/
    ├── load_cases/
    ├── responses/
    ├── figures/
    └── quality/

主要数据文件说明

manifest.json

全局清单文件,逐 case 记录:

  • case_id:唯一标识。
  • statuscompletedfailed
  • output_dir:算例输出目录。
  • csv_paths:各 CSV 文件路径。
  • raw_result_path:原始结果 JSON 路径。
  • log_paths:stdout / stderr 日志路径。
  • error:失败原因(如有)。

raw_results.json

从 SHARPy HDF5 提取的结构化数据,是后续所有 CSV 和 analysis 的源。顶层结构:

{
  "case": "alpha_5_deg_U25",
  "alpha_deg": 5.0,
  "velocity_m_per_s": 25.0,
  "time_history": [ ... ],
  "peak_response": {
    "tip": { "displacement_m": [ux, uy, uz], "rotation_rad": [rx, ry, rz] },
    "total_aero_force_N": [Fx, Fy, Fz],
    "total_lift_N": <scalar>
  },
  "units": { "displacement": "m", "rotation": "rad", "force": "N", ... },
  "conventions": { ... }
}

time_series.csv

每个采样点一行,常用列如下:

含义 单位
time_s 时间 s
frequency_hz 激励频率 Hz
applied_load_raw_N 原始外加载荷 N 或 N·m
tip_ux_m, tip_uy_m, tip_uz_m 翼尖位移三分量 m
tip_rx_rad, tip_ry_rad, tip_rz_rad 翼尖转角三分量 rad
total_aero_force_x_N, total_aero_force_y_N, total_aero_force_z_N 总气动力分量 N
total_lift_N 总升力 N

nodes.csv

每个采样点的全节点位移/转角,列结构:

含义
time_s, case_id, frequency_hz 元数据
node 节点编号
y_m 节点展向坐标
ux_m, uy_m, uz_m 节点位移三分量
rx_rad, ry_rad, rz_rad 节点转角三分量

distributed_strain.csv

每个采样点的全单元应变/曲率/内力,列结构:

含义 单位
element_index 单元编号
epsilon_x 轴向应变 无量纲
gamma_y, gamma_z 剪切应变 无量纲
kappa_x_1_per_m 扭转曲率 m⁻¹
kappa_y_1_per_m, kappa_z_1_per_m 弯曲曲率 m⁻¹
internal_Fxinternal_Mz 截面内力 N / N·m

root_resultants.csv

每个采样点的根部合力/合矩,列结构:

含义
quantity root_external_resultant / root_internal_resultant / root_reaction
FxMz 对应的力/力矩分量

spanwise_aero_forces.csv

展向气动力分布,每个翼展站位的气动力分量和合升力。

字段命名原则

本项目的标准化命名遵循以下约定:

  1. 物理量和单位写在同一个列名中:tip_uz_m(翼尖 z 位移,米)、frequency_hz(频率,赫兹)。
  2. 列名用下划线分隔:total_lift_Nepsilon_xkappa_z_1_per_m
  3. 力分量使用 Fx / Fy / Fz,力矩分量使用 Mx / My / Mz
  4. 转角使用 rx / ry / rz,单位为弧度。
  5. 元数据列包括 case_idtime_sfrequency_hzalpha_degvelocity_m_per_s 等。

schema_version 与版本管理

每个标准化 JSON 文件都携带以下元数据:

{
  "schema_version": "1.0.0",
  "generated_at_utc": "2026-06-15T00:00:00Z",
  "units": { ... },
  "coordinates": { ... },
  "conventions": { ... }
}

下游代码应从 case_index.json 入口开始,而不是硬编码算例目录路径。

数据质量检查

本项目的数据质量检查(QC)覆盖以下方面:

  1. 结构刚度检查:刚度数据库行是否对称正定。
  2. 载荷覆盖率:是否覆盖全部三类结构 case × 全部载荷方向 × 全部载荷形式。
  3. 根部平衡:静态工况下 \(\text{root\_reaction} + \text{root\_external\_resultant} \approx 0\)
  4. 响应有界性:位移和转角是否在物理合理范围内(阈值 10 m / 10 rad)。
  5. 动态非零信号检测:动态全状态快照是否包含非零振动信号。
  6. 图像有效性:生成的 PNG 图片是否可正常读取。

QC 报告写入 quality/quality_report.json(机器可读)和 quality/quality_report.md(可读格式)。

实操建议

  1. 下游分析代码应通过 case_index.json 遍历算例,而不是硬编码目录。
  2. 读取响应文件前,先读取其中的 unitscoordinatesconventions 元数据块。
  3. 纯结构算例和耦合算例的坐标轴可能对换(梁轴 \(x\) ↔ 翼展 \(y\)),对比前要先确认方向一致。
  4. 原始 VTK 和 HDF5 文件体积较大,建议使用 DVC 等外部存储管理,Git 只保存指针文件。