Computes collisions between Point and Resolved Particles.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(collision_obj), | intent(inout) | :: | this |
Collision utility |
pure subroutine collision_obj_ComputeCollisionsRPvPP(this) !> Computes collisions between Point and Resolved Particles. implicit none class(collision_obj), intent(inout) :: this !! Collision utility ! Work variable integer :: ic,jc,kc integer :: i,j,k integer :: key1,key2 integer :: id1,id2 real(wp):: r1(3), r2(3) real(wp):: d1 , d2 real(wp):: m1 , m2 real(wp):: v1(3), v2(3) real(wp):: w1(3), w2(3) real(wp):: n12(3) real(wp):: Fcol(3) real(wp):: Tcol(3) real(wp), parameter :: Pi=4.0_wp*atan(1.0_wp) associate (lo =>this%cblock%lo, hi=>this%cblock%hi) ! Loop over bins select type(type1=>this%RP%p) type is(ResPart_obj) select type (type2=>this%PP%p) type is (particle_obj) ! Loop over collision grid do kc=lo(3),hi(3) do jc=lo(2),hi(2) do ic=lo(1),hi(1) ! Loop over objects in this cell do key1 = 1,this%RPobjincell(ic,jc,kc) ! Get particle ID call this%RPneighbors(ic,jc,kc)%get(key=key1,val=id1) r1 = type1(id1)%p d1 = type1(id1)%d m1 = type1(id1)%rho*Pi/6.0_wp*type1(id1)%d**3 v1 = type1(id1)%v w1 = type1(id1)%w ! Check collisions with neighbors do k = kc-1,kc+1 do j = jc-1,jc+1 do i = ic-1,ic+1 do key2 = 1,this%PPobjincell(i,j,k) call this%PPneighbors(i,j,k)%get(key=key2,val=id2) r2 = type2(id2)%p d2 = type2(id2)%d m2 = type2(id2)%rho*Pi/6.0_wp*type2(id2)%d**3 v2 = type2(id2)%v w2 = type2(id2)%w ! Force Fcol = DEM_col(r1,r2,d1,d2,m1,m2,v1,v2,w1,w2,this%tcol,this%edry,this%muc) ! Torque n12 = (r2-r1)/(norm2(r2-r1)+epsilon(1.0_wp)) Tcol = cross_product (0.5_wp*d1*n12,Fcol) type1(id1)%Fc = type1(id1)%Fc + Fcol type1(id1)%Tc = type1(id1)%Tc + Tcol end do end do end do end do end do ! Loop over objects in this cell do key1 = 1,this%PPobjincell(ic,jc,kc) ! Get particle ID call this%PPneighbors(ic,jc,kc)%get(key=key1,val=id1) r1 = type2(id1)%p d1 = type2(id1)%d m1 = type2(id1)%rho*Pi/6.0_wp*type2(id1)%d**3 v1 = type2(id1)%v w1 = type2(id1)%w ! Check collisions with neighbors do k = kc-1,kc+1 do j = jc-1,jc+1 do i = ic-1,ic+1 do key2 = 1,this%RPobjincell(i,j,k) call this%RPneighbors(i,j,k)%get(key=key2,val=id2) r2 = type1(id2)%p d2 = type1(id2)%d m2 = type1(id2)%rho*Pi/6.0_wp*type1(id2)%d**3 v2 = type1(id2)%v w2 = type1(id2)%w ! Force Fcol = DEM_col(r1,r2,d1,d2,m1,m2,v1,v2,w1,w2,this%tcol,this%edry,this%muc) ! Torque n12 = (r2-r1)/(norm2(r2-r1)+epsilon(1.0_wp)) Tcol = cross_product (0.5_wp*d1*n12,Fcol) type2(id1)%Fc = type2(id1)%Fc + Fcol type2(id1)%Tc = type2(id1)%Tc + Tcol end do end do end do end do end do end do end do end do end select end select end associate return end subroutine collision_obj_ComputeCollisionsRPvPP