continuous_density_summation Subroutine

private pure subroutine continuous_density_summation(particle, pairs, n)

Continuous density summation
基于连续性方程的连续密度法,计算密度的增量以在时间积分算法中更新密度值

Arguments

Type IntentOptional Attributes Name
type(particle_type), intent(inout) :: particle

particle
区域

type(nnps_pairs_type), intent(in) :: pairs

particle pairs
粒子对

integer, intent(in) :: n

实弹性粒子数, numbers(1)


Contents


Source Code

    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