基于光滑粒子流体动力学(SPH)的Python溃坝程序

 

上图为基于光滑粒子流体动力学(SPH)的Python溃坝程序图,Python程序点此下载  py-sph

1:本文为转发文章:原文地址:https://github.com/arachih/SPH_Fluid_Simulation#smoothed-particle-hydrodynamics-sph-simulation

2:程序概述

这是2D平滑粒子流体动力学(SPH)模拟的Python实现,用于模拟溃坝场景中的流体行为。该模拟使用SPH方法对二维域中的流体行为进行建模。它包括粒子特性、域维度、时间步长和其他特定于模拟的设置的参数。

3:运行说明

Python运行依赖项为numpy,matplotlib,pyvista,其中pyvista用于获取vtk输出,以使用ParaView来可视化流动。可以使用以下命令安装它们:pip安装numpy matplotlib pyvista

通过执行Python脚本运行模拟:python sph.py

4:相关文件介绍

4-1
acceleration.py: 该模块包含基于各种力和相互作用计算粒子加速度的函数。它考虑了重力、压力梯度和人工粘度来更新每个粒子的加速度分量。

4-2
boundary_conditions.py:文件定义了负责处理边界条件的函数。它确保与边界(如墙)相互作用的粒子发生非弹性碰撞,并适当地反射或投影,以保持模拟的完整性。

4-3
density_pressure.py 本模块中可以找到与计算粒子密度和压力相关的函数。它采用SPH方法根据相邻粒子的贡献来估计密度,并使用状态方程(EOS)来计算相应的压力。

4-4
euler.py:实现欧拉时间积分方案。它根据计算的加速度更新粒子的速度和位置。该方案用于以离散时间步长推进模拟。

4-5
hash_function.py:提供了HashFunction类,该类实现了空间哈希技术。它有助于有效地找到给定细胞内粒子的邻居,优化邻居搜索过程和整体模拟性能。

4-6
post.py:处理模拟结果的后处理任务。它生成PNG图像以可视化粒子分布,还生成VTK文件以使用Paraview等可视化工具进行进一步分析。

5:程序参数定义:

N:
粒子数

h:
平滑长度

edge:
壁面限制

width:
域宽度

height:
域高度

m:粒子质量

rho0:参考密度

c0:声速

alpha:粘度系数

gamma:Tait方程gamma

dt:时间步长

k: EOS系数

g:
重力加速度

final_time:最终模拟时间

frequency:图像的输出频率

vtk_freq:vtk文件的输出频率

visc:人工粘度

eps:
Epsilon值

bdry_reflec:边界非弹性碰撞的反射系数

bdry_proj_dist:将粒子推离边界的距离

此图为效果图,SPH流固耦合,看起来很炫,所以贴出来。