update_particle_init Subroutine

private pure subroutine update_particle_init(self, particles, dt)

初始化leapfrog算法,基于加速度,推进速度半步长

Type Bound

float_object_type

Arguments

Type IntentOptional Attributes Name
class(float_object_type), intent(inout) :: self

浮体粒子集

type(particle_type), intent(inout) :: particles

区域

real(kind=rk), intent(in) :: dt

时间步长


Contents

Source Code


Source Code

    pure subroutine update_particle_init(self, particles, dt)
        class(float_object_type), intent(inout) :: self  !! 浮体粒子集
        type(particle_type), intent(inout) :: particles  !! 区域
        real(rk), intent(in) :: dt  !! 时间步长
        integer :: i

        associate (halfdt => dt/2)
            self%vel = self%vel + self%acc*halfdt
            self%ang_vel = self%ang_vel + self%ang_acc*halfdt
        end associate

        ! 更新粒子
        do i = self%istart, self%iend
            particles%vel(:, i) = self%vel(:) + cross_product_local2( &
                                  self%ang_vel, &
                                  particles%loc(:, i) - self%loc(:))
            particles%loc(:, i) = particles%loc(:, i) + particles%vel(:, i)*dt
        end do

        self%loc = self%loc + self%vel*dt

    end subroutine update_particle_init