一、项目背景
SPHinXsys是一个开源的SPH编程框架,全称为Smoothed Particle Hydrodynamics for industrial complex systems;它提供了用于物理精确模拟的C ++ API,并旨在通过SPH(光滑粒子流体动力学)(一种使用粒子离散化的无网格计算方法) 对包括流体,固体,多体动力学等在内的耦合工业动态系统进行仿真和智能优化。
该编程框架所有的计算公式都基于统一SPH框架,因此对所有物理过程都实现了强耦合,且可以同时进行模拟和优化。目前该框架已经具备如下功能:
1.1 统一的多物理场建模
采用通用的数值离散方法,所有物理模型均采用SPH方法进行离散。 因此,实现了所有连续介质物理的整体耦合。
- 耦合多体动力学(通过SIMBody库
https://simtk.org)
通常,在连续介质力学中,我们根据介质的变形程度将其分为三种类型:
- 第一种是刚性固体,其特征是具有均匀的平动速度和角速度。
- 第二种是弹性固体,其特征是具有规则的速度场和由变形引起的应力。
在SPHinxSys中,所有介质都被建模为SPH(光滑粒子流体动力学)Body。每一个Body由一组SPH粒子组成。如下流固耦合问题:

请注意,一个SPH固体物体可能由多个组件组成。如上图所示,壁面墙体由两个刚性固体组件构成,而流场中的嵌入物则由一个刚性和一个弹性固体组件组成。SPH算法用于离散化连续介质力学方程,并计算粒子的动力学行为,即它们的轨迹、速度和加速度。
- 流体动力学方程的离散化算法基于弱可压缩流体公式,该公式适用于不可压缩流动问题以及低马赫数(小于0.3)的可压缩流动问题。
- 固体动力学方程则通过全拉格朗日公式进行离散化,该公式适合研究涉及线性和非线性弹性材料的问题。
- FSI(流固耦合)耦合算法采用运动学-力方式实现,其中固体结构表面既描述了材料界面,同时又承受着由流体压力和摩擦所产生的表面力。
- SPHinxSys同样采用运动学-力方式将刚体与弹性固体和流体进行耦合,在此过程中,刚体在承受来自弹性固体和/或流体的作用力的同时,其自身及其相互作用(由Simbody库处理)决定了其粒子的位置和速度。
1.2 材料模型
- 流体,包括弱可压缩流体(牛顿和Oldroy-B)和完全可压缩流体
- 固体,包括线性弹性固体,具有Neo-Hookian模型和各向异性肌肉模型的非线性弹性固体

1.3 高性能计算
SPHinXsys使用数组结构(SoA),并引入了粒子排序。 由于缓存友好的设计,此类技术导致计算效率的显着提高
- 定义了一种新的广义粒子数据类,通过该类可以轻松添加任何基于方法的变量,而无需修改粒子类以提高数据重用性和效率
- 对包含复杂FSI和多体动力学的振荡浪涌转换器(OWSC)进行的波相互作用的数值模拟表明,借助新的数据结构, SPHinXsys不仅能够准确预测复杂的动力学,而且还显示出优化的性能。 通过CPU成本分析,并与商业软件包ANSYS FLUENT和其他基于SPH的求解器进行比较,展现了的优越计算性能。

二、Linux编译/运行SPHinXsys
在Windows安装尝试了一下,存在较多的三方库编译问题,最好是直接在Linux系统下编译运行。但是据官方介绍其源码需要在原生Linux系统才支持运行CUDA版本的程序,WSL2暂时不支持完全的统一内存。
2.1 安装依赖库
依次安装如下必须的依赖库:
sudo apt updatesudo apt upgradesudo apt install -y apt-utils # package management related utility programssudo apt install -y build-essential # GCC compilation development suite and Makesudo apt install -y curl zip unzip tar # when starting on a barebone Ubuntu image for bootstrapping vcpkgsudo apt install -y pkg-config # for installing libraries with vcpkgsudo apt install -y gitsudo apt install -y cmakesudo apt install -y ccache # ccache is a compiler cache. It speeds up recompilation by caching previous compilationssudo apt install -y python3-devsudo apt install -y gfortransudo apt-get install autoconf automake autoconf-archive
如果需要调试代码,可安装gdb:sudo apt install -y gdb。
2.2 安装三方库
如下三方库是项目SPHinXsys直接依赖的包,官方建议采用vcpkg来进行三方库的管理:
cd$HOMEgit clone -b 2024.11.16 https://www.github.com/microsoft/vcpkg.gitcd vcpkg./bootstrap-vcpkg.sh./vcpkg install --clean-after-build \ eigen3 \ tbb \ boost-program-options \ boost-geometry \ simbody \ gtest \ pybind11 \ spdlog
上述安装过程需要网络较好,否则某些安装包下载可能会失败。如果要单独安装到特定位置,每个库可以自行下载源码进行编译特定版本,具体可参考博客:Linux下SPHinXsys源码编译安装及使用-CSDN博客。
2.3 编译项目SPHinXsys
cd$HOMEgit clone https://github.com/Xiangyu-Hu/SPHinXsys.git sphinxsyscd sphinxsys && mkdir -p build && cd buildcmake -G "Unix Makefiles" \ -D CMAKE_BUILD_TYPE=Release \ -D CMAKE_C_COMPILER=gcc -D CMAKE_CXX_COMPILER=g++ \ -D CMAKE_TOOLCHAIN_FILE="$HOME/vcpkg/scripts/buildsystems/vcpkg.cmake" \ -D CMAKE_C_COMPILER_LAUNCHER=ccache -D CMAKE_CXX_COMPILER_LAUNCHER=ccache \ -S ../ cd build && cmake --build .# 其中-D CMAKE_TOOLCHAIN_FILE="$HOME/vcpkg/scripts/buildsystems/vcpkg.cmake"# 可链接到刚才安装的三方库
这个编译过程相当的久,建议从项目根目录下的CMakeLists.txt控制具体要编译的测试案例,否则要等很久。项目也主要是将公用基础组件编译成静态库,再利用测试案例链接到静态库。另外需要注意的是,由于我是在WSL2中进行编译的,没有进一步安装SYCL,所以CUDA版本的测试程序会出现编译问题,可直接放弃该测试案例的编译。
2.4 运行测试案例
整个利用GoogleTest构建了测试集,可直接运行ctest来执行所有测试案例:
cd$HOMEcd sphinxsys/buildctest -j 1
运行单个测试案例(二维圆柱绕流):
cd$HOMEcd sphinxsys/build/tests/2d_examples/test_2d_flow_around_cylindermake -j 4 cd bin./test_2d_flow_around_cylinder
生成的结果就在build/tests/.../bin对应目录下,可用paraview可直接打开output内的文件进行可视化:

在项目SPHinXsys中不同的几何域会构建不同的Block,所以会存在一个CylinderBlock和WaterBlock,直接打开:

粒子域分布如下,我已经加密了流体分布:

三维的溃坝流动案例,感觉效果还是不错,粒子在边界处的处理也没有出现穿越壁面或者消失的情况。而且阻挡物弹性薄板并没有出现直接断裂或者粒子溃散掉的情况,值得探索。
计算过程可以发现,其粒子流动时间步长采用了自适应原则,这与我之前探索的想法一致,粒子间的间隔变化明显,必须要基于粒子相对距离对时间步长进行调整。最后一列是固体弹性薄板形变的时间步长,相当于这个案例流固一套程序直接一起耦合计算,结果如下:
SPHinXsys项目还有一个特点是,将传统的有限体积法FVM和光滑粒子SPH统一在一个框架里面,因此同样可以利用FVM方法进行开发,圆柱绕流测试结果:

唯一的区别就是在计算之前SPHinXsys需要先读取一个画好的网格,而不是将计算域构建成粒子。
不过具体两者的数据结构和耦合体系是如何实现的,还没有细看,后续可以研究一下。我反正是很讨厌画网格,如果不用网格就可以将数值模拟搞定,那我就最开心了。
三、总结
SPHinXsys 采用了一种独特的计算框架,将传统的 SPH 方法扩展到了网格形式,从而实现了与传统有限体积法(Finite Volume Method, FVM)的无缝兼容。这种设计使得用户可以在同一个平台上处理不同类型的物理问题,大大提高了工作效率。
而且在并行计算方面,通过引入 SYCL 支持,项目能够充分利用 GPU 的并行计算能力,大幅提升仿真效率,这种异构计算架构使得处理大规模复杂模型成为可能。
整体资料搜索下来发现SPHinXsys项目提供了比较完善的文档和教程,帮助用户快速上手。从基础概念到高级应用,都有详尽的说明和示例代码。
项目地址:https://github.com/Xiangyu-Hu/SPHinXsys
教程手册:https://www.sphinxsys.org/html/sphinx_index.html