核心架构¶
模块结构¶
PhysEngine采用模块化设计,各模块职责清晰,便于维护和扩展:
PhysEngine/
├── Solver/ # 求解器模块
│ ├── SPHSolver.cc # SPH流体求解器
│ ├── FESolver.cc # FEM结构求解器
│ ├── FSISolver.cc # 流固耦合求解器
│ └── Octree.cc # 八叉树邻居搜索
├── Mesh/ # 网格模块
│ ├── MeshReader.cc # 网格读取(ABAQUS .inp)
│ └── MeshData.cc # 网格数据结构
├── Method/ # 有限元方法
│ ├── ShapeFunction.cc # 形状函数计算
│ ├── Integration.cc # 数值积分规则
│ ├── H1R_Quad.cc # 四边形单元
│ └── H1R_Hex.cc # 六面体单元
├── LinearAlgebra/ # 线性代数库
│ ├── Vector.cc # 向量运算
│ ├── DenseMatrix.cc # 稠密矩阵
│ ├── SparseMat.cc # 稀疏矩阵(CSR格式)
│ └── LUDecompose.cc # LU分解求解器
└── General/ # 通用基础设施
├── Array.cc # 数组操作
├── Memory.cc # 内存管理
└── Backends/ # 计算后端抽象
├── CPU.cc # CPU后端
├── CUDA.cc # CUDA GPU后端
└── HIP.cc # HIP GPU后端
核心模块功能¶
| 模块 | 描述 |
|---|---|
| Solver | 提供SPH、FEM、FSI三种核心求解器实现 |
| Mesh | 解析和存储ABAQUS .inp格式网格数据 |
| Method | 实现有限元形状函数、高斯积分等核心算法 |
| LinearAlgebra | 提供Vector、DenseMatrix、SparseMat等数据结构及LU分解等求解器 |
| General | 统一内存管理、跨平台后端抽象(CPU/CUDA/HIP) |
数据流架构¶
graph TD
A[输入网格文件] --> B[Mesh模块解析]
B --> C[网格数据初始化]
C --> D[物理参数设置]
D --> E{求解类型}
E -->|纯流体| F[SPHSolver]
E -->|纯结构| G[FESolver]
E -->|流固耦合| H[FSISolver]
F --> I[八叉树搜索]
G --> J[刚度矩阵组装]
H --> K[界面数据交换]
I --> L[时间步迭代]
J --> L
K --> L
L --> M[结果输出]
设计原则¶
- 面向对象:每个物理概念对应独立的C++类
- 接口抽象:通过虚函数和抽象基类实现多后端支持
- 数据局部性:优化内存访问模式,提升缓存命中率
- 可扩展性:新单元类型、新求解器易于集成