核心架构

模块结构

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[结果输出]

设计原则

  1. 面向对象:每个物理概念对应独立的C++类
  2. 接口抽象:通过虚函数和抽象基类实现多后端支持
  3. 数据局部性:优化内存访问模式,提升缓存命中率
  4. 可扩展性:新单元类型、新求解器易于集成