SPHysics 是采用SPH(光滑粒子流)方法研究流体动力学的开源软件。源码中用到了均匀空间划分方法和邻居粒子碰撞搜索(searching & interaction),作为完善前两篇的实例。本文学习SPHysics这部分代码(FORTRAN)。仅供参考。
首先,SPH方法程序实现大致有如下几个过程:空间划分、构造粒子链表;碰撞(interaction)对搜索、粒子变量更新(加速度、速度、位移、压强、密度..)
// 链表初始化
subroutine ini_divide(kind_p)
do i=1, nct !对划分格子(单元)循环
nc(i, kind_p) =0 !单元内粒子数目初始为0
ibox(i,kind_p,1:nplink_max)=0 !当前单元内"碰撞对"为0
enddo
return
end subroutine
subroutine divide(n_start, n_end, kind_p)
do k=n_start, n_end !对所有流体粒子循环
if(iflag(k).ne.1) then
dx=xp(k)-xmin
dz=zp(k)-zmin
icell= int(dx*one_over_2h)+1
!粒子k落入单元的X编号
kcell=int (d