每个相态仅支持一种粒子模拟, 边界和刚体是表面光滑的 (目前, 后续可以扩展为: 用户在配置文件中指定粒子类型交互规则)
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| integer, | intent(in) | :: | itype(:) | |||
| integer, | intent(inout) | :: | a |
粒子类型 1, 2 (2X: 边界粒子, 3X: 刚体粒子, 5X: 液体粒子, 11X: 空气粒子, 23X: 弹性固体粒子) |
||
| integer, | intent(inout) | :: | b |
粒子类型 1, 2 (2X: 边界粒子, 3X: 刚体粒子, 5X: 液体粒子, 11X: 空气粒子, 23X: 弹性固体粒子) |
integer function contact_control(itype, a, b)
integer, intent(in) :: itype(:)
integer, intent(inout) :: a, b !! 粒子类型 1, 2 (2X: 边界粒子, 3X: 刚体粒子, 5X: 液体粒子, 11X: 空气粒子, 23X: 弹性固体粒子)
contact_control = itype(a)/10 + itype(b)/10
select case (contact_control)
case (4, 6) ! 无交互粒子对: 边界+边界(4), 刚体+刚体(6)
contact_control = 1
case (10, 16, 22, 46) ! 交互粒子对: 液体+液体(10), 液体+空气(16), 空气+空气(22), 弹性固体+弹性固体(46)
contact_control = 2
case (5, 7, 13, 25, 26, 28, 34)! 排斥力粒子对: 边界+刚体(5), 边界+液体(7), 边界+空气(13),
contact_control = 3 ! 边界+弹性固体(25), 刚体+弹性固体(26), 液体+弹性固体(28), 空气+弹性固体(34)
case (8, 14) ! 压强交互粒子对: 刚体+液体(8), 刚体+空气(14)
contact_control = 4 !@tofix
case default ! 未定义: 其他, 后续读取配置文件
contact_control = 0
end select
end function contact_control