Continuous density summation
基于连续性方程的连续密度法,计算密度的增量以在时间积分算法中更新密度值
itype 相同才进行密度求和?
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(particle_type), | intent(inout) | :: | particle |
particle |
||
| type(nnps_pairs_type), | intent(in) | :: | pairs |
particle pairs |
||
| integer, | intent(in) | :: | n |
实弹性粒子数, numbers(1) |
pure subroutine continuous_density_summation(particle, pairs, n)
type(particle_type), intent(inout) :: particle !! particle <br>
!! 区域
type(nnps_pairs_type), intent(in) :: pairs !! particle pairs <br>
!! 粒子对
integer, intent(in) :: n !! 实弹性粒子数, numbers(1)
integer :: i
real(rk) :: dvel(2)
particle%drho(:n) = 0.0_rk
do concurrent(i=1:pairs%len)
associate (ip => pairs%items(2*i - 1), jp => pairs%items(2*i))
if (ip <= n .and. jp <= n) then
if (particle%itype(ip) /= particle%itype(jp)) cycle
dvel(:) = particle%vel(:, ip) - particle%vel(:, jp)
associate (vcc => sum(dvel(:)*pairs%wdwdx(2:3, i)))
particle%drho(ip) = particle%drho(ip) + particle%mass(jp)*vcc
particle%drho(jp) = particle%drho(jp) + particle%mass(ip)*vcc
end associate
end if
end associate
end do
end subroutine continuous_density_summation