Skip to content
Gains Summary
Main Navigation 首页 / Home
C++ 编程 / C++ Programming
系统与高性能 / Systems & Performance
Web 开发 / Web Development
人工智能 / Artificial Intelligence
工业软件 / Industrial Software
其他内容 / Other Topics
C++ 编程 / C++系统与性能 / SystemsWeb 开发 / Web人工智能 / AI工业软件 / Industrial

外观

Sidebar Navigation

← 工业软件 / Industrial Software

案例研究 / Case Studies

1. 工业软件架构与迁移案例 / Industrial Software Architecture and Migration Case Studies

2. Ansys 多求解器后处理结果解析与可视化数据转换系统 — 任务拆解与分析 / Task Analysis for an Ansys Multi-Solver Post-Processing and Visualization Pipeline

本页目录

Ansys 多求解器后处理结果解析与可视化数据转换系统 — 任务拆解与分析 / Task Analysis for an Ansys Multi-Solver Post-Processing and Visualization Pipeline ​

日期:2026-05-17 标签:#课程项目 #架构 #Ansys #DPF #FastCAE #后处理 #数据转换 前置知识:工业软件架构、有限元后处理、Python C++ 混合开发、PyDPF


1. 文档目标 ​

本任务的核心需求是:基于 PyDPF 实现 Ansys 多求解器结果文件的统一解析,并将结果转换为 FastCAE 平台可识别的可视化数据格式。

简单来说,数据流向是:

Ansys 结果文件 (.rst/.rth/.d3plot/.cas.h5/.res 等)
       ↓
  PyDPF 统一解析层
       ↓
  统一数据模型 (网格 + 结果场)
       ↓
  FastCAE 适配器层
       ↓
  FastCAE 后处理模块可识别的格式
       ↓
  FastCAE 可视化展示
1
2
3
4
5
6
7
8
9
10
11

2. 需求分析 ​

2.1 Ansys 求解器生态覆盖 ​

根据参考资料,Ansys 生态包含以下求解器和对应结果文件:

┌─────────────────────────────────────────────────────────────────────────────────┐
│                         Ansys 多求解器结果文件一览                              │
├─────────────────────────────────────────────────────────────────────────────────┤
│                                                                                  │
│  求解器              主要应用场景           结果文件格式         DPF 支持版本     │
│  ────────────────   ────────────────      ────────────────     ─────────────    │
│  MAPDL / Mechanical  结构 / 热 / 模态     .rst / .mode        DPF 1.0+ (2021R1)│
│                                          .rth / .rfrq / .rdsp                  │
│                                          .prs / .psd                           │
│  LS-DYNA            显式动力学             .d3plot / .binout    DPF 4.0+ (2022R2)│
│  Fluent             CFD / 流体             .cas.h5 / .dat.h5   DPF 7.0+ (2024R1)│
│                                          .flprj                                  │
│  CFX                流体 / 旋转机械        .cas.dat.cff / .res  DPF 7.0+ (2024R1)│
│                                          .flprj                                  │
│                                                                                  │
└─────────────────────────────────────────────────────────────────────────────────┘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

2.2 物理场类型 ​

物理场典型求解器典型结果量
结构静力MAPDL / Mechanical位移 (U)、应力 (S)、应变 (E)、反作用力 (RF)
结构动力学MAPDL / Mechanical模态位移、频率、振型、瞬态响应
热分析MAPDL / Mechanical温度 (TEMP)、热通量、热应力
显式动力学LS-DYNA应力、应变、塑性、接触力、时间历程
流体动力学Fluent / CFX速度、压力、湍动能、壁面剪切力

2.3 FastCAE 平台数据接口需求 ​

FastCAE 作为国产 CAE 后处理平台,需要接收以下数据:

  • 网格数据:节点坐标、单元拓扑、单元类型(四面体、六面体、壳单元等)
  • 结果场数据:标量场(应力、温度、压力)、矢量场(位移、速度)、张量场(应力张量)
  • 时间序列:瞬态分析的时间步数据
  • 工况/子步信息:多工况、多分析步的结果组织

3. 总体架构设计 ​

┌──────────────────────────────────────────────────────────────────────────────────┐
│                        系统总体架构                                              │
├──────────────────────────────────────────────────────────────────────────────────┤
│                                                                                  │
│  ┌─────────────────────────────────────────────────────────────────────────────┐ │
│  │                    Ansys 结果文件层 (输入层)                                │ │
│  │  ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐               │ │
│  │  │  .rst   │ │ .d3plot │ │cas.h5   │ │  .res   │ │ .rth    │               │ │
│  │  │ MAPDL   │ │LS-DYNA  │ │ Fluent  │ │  CFX    │ │  热     │               │ │
│  │  └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘               │ │
│  └───────┼───────────┼───────────┼───────────┼───────────┼───────────────────────┘ │
│          ↓           ↓           ↓           ↓           ↓                          │
│  ┌─────────────────────────────────────────────────────────────────────────────┐ │
│  │                    PyDPF 统一解析层                                          │ │
│  │                                                                              │ │
│  │   ┌──────────────┐    ┌──────────────┐    ┌──────────────┐                  │ │
│  │   │ MAPDL Reader │    │ LS-DYNA Rd   │    │ Fluent/CFX Rd│                  │ │
│  │   │ (Model/Rst)  │    │(D3plot/Binout)│    │(CFF/CasH5)  │                  │ │
│  │   └──────┬───────┘    └──────┬───────┘    └──────┬───────┘                  │ │
│  │          ↓                   ↓                   ↓                          │ │
│  │   ┌──────────────────────────────────────────────────────────────┐            │ │
│  │   │              DPF Field / Mesh / FieldsContainer            │            │ │
│  │   │           (DPF 核心数据结构,物理场无关)                   │            │ │
│  │   └──────────────────────────────────────────────────────────────┘            │ │
│  └─────────────────────────────────────────────────────────────────────────────┘ │
│                                      ↓                                            │
│  ┌─────────────────────────────────────────────────────────────────────────────┐ │
│  │                    统一数据模型层 (数据抽象层)                              │ │
│  │                                                                              │ │
│  │   ┌─────────────────────────┐   ┌──────────────────────────────┐            │ │
│  │   │      UnifiedMesh        │   │       UnifiedResultField     │            │ │
│  │   │  · 节点坐标 (N×3)       │   │  · 标量场 / 矢量场 / 张量场  │            │ │
│  │   │  · 单元拓扑 (M×N_nodes) │   │  · 时间序列支持               │            │ │
│  │   │  · 单元类型映射         │   │  · 材料坐标系 (可选)          │            │ │
│  │   │  · 命名选择集 (NS)      │   │  · 结果参考坐标系             │            │ │
│  │   └─────────────────────────┘   └──────────────────────────────┘            │ │
│  └─────────────────────────────────────────────────────────────────────────────┘ │
│                                      ↓                                            │
│  ┌─────────────────────────────────────────────────────────────────────────────┐ │
│  │                    FastCAE 适配器层 (输出层)                                │ │
│  │                                                                              │ │
│  │   ┌──────────────────┐    ┌──────────────────┐    ┌──────────────────┐      │ │
│  │   │ VTK Exporter     │    │  FastCAE Native  │    │ REST API Exporter│      │ │
│  │   │ (.vtu / .vtp)    │    │  (.fcaeresult)   │    │  (gRPC/HTTP)    │      │ │
│  │   └──────────────────┘    └──────────────────┘    └──────────────────┘      │ │
│  └─────────────────────────────────────────────────────────────────────────────┘ │
│                                      ↓                                            │
│  ┌─────────────────────────────────────────────────────────────────────────────┐ │
│  │                    FastCAE 后处理模块                                      │ │
│  │             (云图 / 矢量显示 / 变形 / 动画 / 数据提取)                    │ │
│  └─────────────────────────────────────────────────────────────────────────────┘ │
│                                                                                  │
└──────────────────────────────────────────────────────────────────────────────────┘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53

4. 模块拆解 ​

4.1 模块 1:PyDPF 集成层 ​

职责:封装 PyDPF API,提供统一的文件读取接口,屏蔽不同求解器之间的 API 差异。

核心设计思路:

PyDPF 的核心抽象是 Model → Mesh → Field 三层结构:

python
from ansys.dpf.core import Model

model = Model("result.rst")           # 统一入口
mesh = model.metadata.meshed_region   # 获取网格
fields = model.results.displacement() # 获取结果
1
2
3
4
5

每个求解器的读取方式如下:

求解器PyDPF 读取方式关键类/方法
MAPDLModel("file.rst")model.results.displacement(), stress()
LS-DYNAModel("d3plot")model.results.stress() (需指定时间步)
FluentModel("Case.cas.h5")model.results.velocity() 等
CFXModel("Result.res")同 Fluent 接口

该模块需要实现:

  • SolverReader 工厂类:根据文件扩展名自动路由到对应的 Reader
  • 版本兼容性检查:DPF 对不同求解器有不同的最低版本要求(见 2.1 节),需要检测文件版本并给出友好提示
  • 进度回调机制:大文件读取需要支持进度回调,提升用户体验

4.2 模块 2:统一数据模型层 ​

职责:定义一套与求解器无关的数据结构,作为 PyDPF 层和 FastCAE 适配器层之间的稳定接口。

这是整个系统的核心抽象,它的设计质量直接决定了系统的扩展性和可维护性。

UnifiedMesh 统一网格模型:

python
class UnifiedMesh:
    """与求解器无关的统一网格数据结构"""

    def __init__(self):
        self.nodes: np.ndarray          # 节点坐标 (N_nodes × 3)
        self.elements: np.ndarray        # 单元节点索引 (N_elements × MaxNodesPerElem)
        self.element_types: np.ndarray   # 单元类型编码 (N_elements,)
        self.node_ids: np.ndarray        # 节点编号
        self.element_ids: np.ndarray    # 单元编号
        self.named_selections: dict[str, np.ndarray]  # 命名选择集: 名称 → 节点/单元ID列表
        self.coordinate_systems: dict    # 坐标系定义 (材料坐标系等)
1
2
3
4
5
6
7
8
9
10
11

UnifiedResultField 统一结果场模型:

python
class UnifiedResultField:
    """与求解器无关的统一结果场数据结构"""

    def __init__(self):
        self.name: str                  # 结果名称, 如 "位移", "应力"
        self.result_type: str           # "scalar" | "vector" | "tensor"
        self.mesh: UnifiedMesh          # 关联的网格
        self.data: np.ndarray           # 结果值 (N_points × N_components)
        self.location: str              # "Nodal" | "Elemental" | "ElementalNodal"
        self.time_steps: list[float]    # 时间序列 (瞬态分析)
        self.substeps: list[int]        # 子步序列
        self.cyclic_support: object     # 周期对称支持 (可选)
1
2
3
4
5
6
7
8
9
10
11
12

单元类型映射表:

┌──────────────────────────────────────────────────────────────────────────┐
│                        单元类型统一编码                                  │
├──────────────────────────────────────────────────────────────────────────┤
│                                                                          │
│  ANSYS Code    形状         DPF Enum           VTK CellType            │
│  ────────────  ───────────  ────────────────   ───────────────          │
│  SOLID185       六面体        bash_tet4          VTK_HEXAHEDRON (12)     │
│  SOLID186       四面体        shell3,或类似     VTK_TETRA (10)          │
│  SHELL181       四节点壳      shell4             VTK_QUAD (9)            │
│  BEAM188        梁单元        beam                VTK_LINE (3)            │
│  MASS21         质量点        point               VTK_VERTEX (1)          │
│                                                                          │
└──────────────────────────────────────────────────────────────────────────┘
1
2
3
4
5
6
7
8
9
10
11
12
13

该模块需要实现:

  • 网格数据的统一提取(从 DPF Field 转换到 UnifiedMesh)
  • 结果数据的统一提取(从 DPF FieldsContainer 转换到 UnifiedResultField)
  • 单元类型编码的规范化(不同求解器对同一几何形状的单元编码不同)
  • 命名选择集(Named Selection)的提取和映射
  • 时间步信息的组织(瞬态分析支持)

4.3 模块 3:FastCAE 数据导出适配器层 ​

职责:将统一数据模型转换为 FastCAE 平台可识别的数据格式。

这是系统对接 FastCAE 的最后一环,需要根据 FastCAE 的实际数据接口来设计。

方案 A:VTK 文件格式导出(推荐,FastCAE 原生支持 VTK)

python
import pyvista as pv

def export_to_vtu(mesh: UnifiedMesh, fields: list[UnifiedResultField], output_path: str):
    """导出为 VTK UnstructuredGrid (.vtu) 格式"""
    vtk_grid = pv.UnstructuredGrid(mesh.elements, mesh.element_types,
                                    mesh.nodes)

    # 添加标量场
    for field in fields:
        if field.result_type == "scalar":
            vtk_grid[field.name] = field.data

    # 添加矢量场(DPF 矢量默认按分量存储,需要组装)
    # ...

    vtk_grid.save(output_path)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

方案 B:FastCAE 原生格式(需要逆向或获取 FastCAE 数据格式规范)

如果 FastCAE 有自己的结果格式规范(如 .fcaeresult 或 JSON/YAML 格式),则需要实现对应的序列化器。这需要查阅 FastCAE 的开放接口文档。

方案 C:REST API / gRPC(适合插件化集成)

如果 FastCAE 支持插件或外部数据注入,则可以通过 HTTP/gRPC 接口直接将数据推送进去:

我们的转换系统 ←→ HTTP/gRPC API ←→ FastCAE 后处理模块
1

该模块需要实现:

  • VTK 格式导出器(.vtu 文件)
  • FastCAE 原生格式支持(如果格式开放)
  • 批量导出支持(多时间步、多工况)
  • 结果场选择器(用户选择导出哪些结果量)

4.4 模块 4:工作流编排层 ​

职责:串联上述三个模块,提供端到端的自动化转换流程。

python
class AnsysToFastCAEConverter:
    """端到端转换器"""

    def __init__(self, result_file: str):
        self.result_file = result_file
        self.solver_type = self._detect_solver()

    def convert(self, output_path: str, options: ConversionOptions):
        # Step 1: 使用 PyDPF 读取结果
        dpf_model = self._load_dpf_model()

        # Step 2: 提取统一网格
        unified_mesh = self._extract_mesh(dpf_model)

        # Step 3: 提取所有结果场
        result_fields = self._extract_fields(dpf_model, options)

        # Step 4: 导出到 FastCAE 格式
        self._export(unified_mesh, result_fields, output_path, options)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

该模块需要实现:

  • 求解器自动检测
  • 转换选项配置(选择要导出的结果量、时间步范围等)
  • 错误处理和用户提示
  • 批量转换支持(多个文件)

5. 关键技术难点与解决方案 ​

┌────────────────────────────────────────────────────────────────────────────────┐
│                          关键技术难点与解决方案                              │
├────────────────────────────────────────────────────────────────────────────────┤
│                                                                                 │
│  难点 1:不同求解器的网格数据结构差异                                         │
│  ───────────────────────────────────────────────────────────────────────────    │
│  MAPDL 的 .rst 中网格是节点-单元顺序存储;                                    │
│  LS-DYNA 的 .d3plot 中网格随时间步变化(单元删除、侵蚀);                    │
│  Fluent 的 .cas.h5 中网格带边界条件命名面。                                   │
│                                                                                 │
│  解决:                                                                          │
│  → 在 UnifiedMesh 层统一化:始终取"最后一个有效时间步"的网格作为参考网格        │
│  → Fluent 边界条件作为 Named Selection 保留,而非几何网格                      │
│  → DPF 的 MeshedRegion 已经是统一的 VTK-like 抽象,直接利用                   │
│                                                                                 │
│  ────────────────────────────────────────────────────────────────────────────   │
│                                                                                 │
│  难点 2:结果场的时间/频率维度差异                                           │
│  ───────────────────────────────────────────────────────────────────────────    │
│  静力分析:单子步,无时间维度                                                   │
│  瞬态分析:多时间步(离散点)                                                  │
│  模态分析:频率值作为维度(不均匀)                                             │
│  谐响应:频率 + 相位                                                           │
│                                                                                 │
│  解决:                                                                          │
│  → UnifiedResultField 中统一用 time_steps 列表表示                            │
│  → 模态结果:每个振型作为一个 time_step,频率作为元数据                        │
│  → DPF 的 FieldsContainer 已经支持 time/scoping,直接映射即可                   │
│                                                                                 │
│  ────────────────────────────────────────────────────────────────────────────   │
│                                                                                 │
│  难点 3:应力/应变张量的主值 / 分量转换                                       │
│  ───────────────────────────────────────────────────────────────────────────    │
│  不同求解器存储应力的方式不同:                                                │
│  - MAPDL:存储 6 个分量 (S11, S22, S33, S12, S23, S13)                       │
│  - LS-DYNA:存储 Mises 等效应力或全张量                                       │
│  - Fluent:存储压力和黏性应力                                                  │
│                                                                                 │
│  解决:                                                                          │
│  → 通过 DPF Operator 计算等效应力(Mises)、主应力等派生量                     │
│  → 提供标准的 tensor → principal / equivalent 转换接口                        │
│  → 示例:dpf.operators.result.stress_von_mises_fc()                          │
│                                                                                 │
│  ────────────────────────────────────────────────────────────────────────────   │
│                                                                                 │
│  难点 4:DPF 依赖 Ansys 授权(服务端运行模式)                               │
│  ───────────────────────────────────────────────────────────────────────────    │
│  PyDPF-Core 0.15.0+ 默认要求 mTLS 认证,需连接 DPF Server。                   │
│  DPF Server 依赖 Ansys 安装或许可证。                                         │
│                                                                                 │
│  解决:                                                                          │
│  → 方案 A:Ansys 本地安装 + 启动 DPF Server(学术场景可用)                   │
│  → 方案 B:使用 PyDPF 的"离线模式"读取已导出的结果文件                        │
│  → 方案 C:对于 LS-DYNA 等,dpf.lsdyna 模块可独立读取 .d3plot               │
│  → 需要在文档中明确说明许可证依赖                                               │
│                                                                                 │
│  ────────────────────────────────────────────────────────────────────────────   │
│                                                                                 │
│  难点 5:大规模文件的内存和性能管理                                           │
│  ───────────────────────────────────────────────────────────────────────────    │
│  LS-DYNA 的 .d3plot 文件可达数十 GB。                                          │
│  Fluent 的瞬态结果可能包含数百个时间步。                                       │
│                                                                                 │
│  解决:                                                                          │
│  → 流式读取:使用 DPF 的 Scoping 只读取感兴趣的部分(指定节点范围/单元范围)   │
│  → 分块导出:按时间步分块导出 .vtu 文件,FastCAE 支持加载序列                  │
│  → 进度回调:提供进度报告接口                                                  │
│                                                                                 │
└────────────────────────────────────────────────────────────────────────────────┘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69

6. 数据流详细设计 ​

┌─────────────────────────────────────────────────────────────────────────────────┐
│                           完整数据流                                            │
├─────────────────────────────────────────────────────────────────────────────────┤
│                                                                                  │
│  [文件输入]                                                                       │
│       │                                                                          │
│       ├─→ .rst  (MAPDL)                                                         │
│       │         └─→ Model.rst → MeshedRegion + FieldsContainer                 │
│       │                                                                          │
│       ├─→ .d3plot (LS-DYNA)                                                    │
│       │              └─→ Model.d3plot → MeshedRegion + TimeFreqSope             │
│       │                              └─→ 按时间步流式读取                                                │
│       │                                                                          │
│       ├─→ .cas.h5 + .dat.h5 (Fluent)                                           │
│       │              └─→ Model.fluent() → MeshedRegion + FieldsContainer       │
│       │                                                                          │
│       └─→ .res (CFX)                                                            │
│                 └─→ Model.cfx() → MeshedRegion + FieldsContainer                │
│                                                                                  │
│  [DPF 核心处理]                                                                 │
│       │                                                                          │
│       ├─→ MeshedRegion → UnifiedMesh                                           │
│       │         • 节点坐标提取                                                   │
│       │         • 单元拓扑提取 + 单元类型规范化                                    │
│       │         • Named Selection 提取                                           │
│       │                                                                          │
│       └─→ FieldsContainer → list[UnifiedResultField]                            │
│                  • 逐个 Field 提取                                               │
│                  • 计算派生量(von Mises 应力、主应力等)                        │
│                  • 时间/频率 维度整理                                            │
│                  • Nodal/Elemental 位置规范化                                    │
│                                                                                  │
│  [数据导出]                                                                       │
│       │                                                                          │
│       ├─→ .vtu (VTK UnstructuredGrid)                                          │
│       │         单时间步或时间序列 (.pvd)                                        │
│       │                                                                          │
│       ├─→ .vtp (VTK PolyData, 壳单元专用)                                       │
│       │                                                                          │
│       └─→ .vtm (VTK MultiBlock, 多工况)                                         │
│                 └── FastCAE 加载并可视化                                         │
│                                                                                  │
└─────────────────────────────────────────────────────────────────────────────────┘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43

7. 实施路线图 ​

阶段一:基础框架搭建(第 1-2 周) ​

目标:建立项目骨架,实现 MAPDL 结构的 .rst 文件转换。

任务清单:

  1. 项目目录结构设计
  2. UnifiedMesh 和 UnifiedResultField 数据模型实现
  3. MAPDL .rst 文件读取(PyDPF Model)
  4. 基础 VTK 导出(单时间步、结构位移+应力)
  5. 单元类型映射表实现
  6. 基础命令行工具封装

里程碑:能够将一个 .rst 文件转换为 .vtu,并在 VTK/ParaView 中正确显示位移云图。

阶段二:多求解器扩展(第 3-4 周) ​

目标:支持 LS-DYNA、Fluent、CFX 的结果文件。

任务清单:

  1. LS-DYNA .d3plot 读取(按时间步流式读取)
  2. Fluent .cas.h5/.dat.h5 读取
  3. CFX .res 读取
  4. 派生量计算(von Mises 应力、主应力、温度梯度等)
  5. 多物理场结果组织(结构+热耦合分析的网格复用)
  6. 命名选择集(Named Selection)的完整传递

里程碑:能够将四种求解器的结果文件全部转换为 .vtu 格式。

阶段三:高级特性与优化(第 5-6 周) ​

目标:支持瞬态分析、大规模文件优化、FastCAE 深度集成。

任务清单:

  1. 瞬态分析时间序列导出(.pvd / .vtm)
  2. 分块读取优化(避免大文件 OOM)
  3. FastCAE 原生格式支持(如果格式规范可获取)
  4. gRPC/HTTP 插件接口(可选)
  5. 进度回调 UI 集成
  6. 错误处理增强(版本不兼容提示、文件损坏检测)

里程碑:支持 GB 级别的 LS-DYNA 文件和 Fluent 瞬态序列。

阶段四:测试与文档(第 7-8 周) ​

目标:确保系统稳定可用。

任务清单:

  1. 单元测试覆盖(各求解器读取、单元映射、数据转换)
  2. 集成测试(端到端文件转换)
  3. 示例数据集准备(每种求解器至少一个标准案例)
  4. 用户文档和使用说明
  5. FastCAE 集成测试(实际在 FastCAE 中打开转换结果)

8. 项目目录结构建议 ​

ansys_to_fastcae/
├── __init__.py
├── core/
│   ├── __init__.py
│   ├── unified_mesh.py        # UnifiedMesh 数据模型
│   ├── unified_result.py      # UnifiedResultField 数据模型
│   └── unit_converter.py      # 单元类型映射表
├── readers/
│   ├── __init__.py
│   ├── base_reader.py         # 抽象基类 SolverReader
│   ├── reader_factory.py      # 工厂方法,自动路由
│   ├── mapdl_reader.py         # MAPDL (.rst) 读取器
│   ├── lsdyna_reader.py        # LS-DYNA (.d3plot) 读取器
│   └── fluent_cfx_reader.py    # Fluent/CFX 读取器
├── operators/
│   ├── __init__.py
│   ├── derived_field.py       # 派生量计算(von Mises、主应力等)
│   └── field_transform.py     # 结果场变换(张量→主值等)
├── exporters/
│   ├── __init__.py
│   ├── base_exporter.py       # 抽象基类
│   ├── vtk_exporter.py         # VTK 格式导出 (.vtu / .vtp / .pvd)
│   └── fastcae_exporter.py    # FastCAE 原生格式导出
├── workflow/
│   ├── __init__.py
│   └── converter.py           # AnsysToFastCAEConverter 端到端转换器
├── cli/
│   ├── __init__.py
│   └── main.py                 # 命令行入口
└── utils/
    ├── __init__.py
    └── progress.py             # 进度回调工具
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

9. 依赖分析 ​

┌────────────────────────────────────────────────────────────────────────────────┐
│                             依赖库选型                                         │
├────────────────────────────────────────────────────────────────────────────────┤
│                                                                                 │
│  核心依赖                                                                         │
│  ├── PyDPF-Core               统一解析层         pip install ansys-dpf-core     │
│  │       注意:需要 Ansys 许可证 或 DPF Server                                │
│  │                                                                             │
│  ├── PyDPF-Post              结果后处理高级封装   pip install ansys-dpf-post    │
│  │       提供更友好的 high-level API                                          │
│  │                                                                             │
│  ├── pyvista                 VTK Python 绑定      pip install pyvista          │
│  │       用于 .vtu 导出和快速可视化验证                                        │
│  │                                                                             │
│  数据处理                                                                          │
│  ├── numpy                   数值计算                                        │
│  ├── h5py                    HDF5 文件读取(Fluent/CFX 依赖)                 │
│  │                                                                             │
│  项目管理                                                                          │
│  ├── pydantic                数据模型校验(UnifiedMesh/Field 的类型安全)       │
│  ├── rich                   终端美化(进度条、表格)                            │
│  └── typer                   命令行应用构建                                    │
│                                                                                 │
└────────────────────────────────────────────────────────────────────────────────┘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

关于 DPF Server 的特别说明:

PyDPF-Core 的工作模式有两种:

  1. 远程模式:通过 gRPC 连接 DPF Server(需要 Ansys 安装,Server version 需匹配)
  2. 本地模式:DPF Server 内嵌在 Ansys 安装目录中,通过 start_local_server() 启动

学术场景下,如果学校有 Ansys 校园许可证,可以申请 Lab License 来使用 DPF Server。


10. 总结 ​

本系统的设计核心可以概括为三句话:

PyDPF 做解析,Unified Model 做抽象,适配器做输出。

整个系统的扩展性取决于数据模型层(UnifiedMesh + UnifiedResultField)的稳定性——只要这个接口不变,后续接入新的求解器或新的导出格式,都不需要修改已有的代码。

优先推进路径建议:

MAPDL .rst (单求解器, 最成熟)
    ↓  (PyDPF 支持最好, 示例最多)
LS-DYNA .d3plot (显式动力学, 流式读取)
    ↓
Fluent .cas.h5 (CFD, 网格 + 场数据)
    ↓
CFX .res (类似 Fluent, 复用大部分逻辑)
1
2
3
4
5
6
7

下一步建议先确认两件事:

  1. FastCAE 的实际数据接口:是通过 VTK 文件导入,还是有插件/API 接口?这决定了适配器层的具体实现方式。
  2. PyDPF 的许可证可用性:是否能通过 Ansys 校园许可证启动 DPF Server?这是整个系统能否运行的前提条件。

最后更新于:

Pager
上一篇1. 工业软件架构与迁移案例 / Industrial Software Architecture and Migration Case Studies

持续记录,持续成长

Copyright © Tidenflow