Computes collisions with a Linearized Spring Dashpot model.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=wp), | intent(in) | :: | r1(3) |
Position |
||
| real(kind=wp), | intent(in) | :: | r2(3) |
Position |
||
| real(kind=wp), | intent(in) | :: | d1 |
Diameter |
||
| real(kind=wp), | intent(in) | :: | d2 |
Diameter |
||
| real(kind=wp), | intent(in) | :: | m1 |
Masses of each particle |
||
| real(kind=wp), | intent(in) | :: | m2 |
Masses of each particle |
||
| real(kind=wp), | intent(in) | :: | v1(3) |
Velocities |
||
| real(kind=wp), | intent(in) | :: | v2(3) |
Velocities |
||
| real(kind=wp), | intent(in) | :: | w1(3) |
Rotation rates |
||
| real(kind=wp), | intent(in) | :: | w2(3) |
Rotation rates |
||
| real(kind=wp), | intent(in) | :: | tcol |
Collision time |
||
| real(kind=wp), | intent(in) | :: | edry |
Dry restitution coefficent |
||
| real(kind=wp), | intent(in) | :: | muc |
Coulomb friction factor |
pure function DEM_col(r1,r2,d1,d2,m1,m2,v1,v2,w1,w2,tcol,edry,muc) result (val) !> Computes collisions with a Linearized Spring Dashpot model. implicit none real(wp), intent(in) :: r1(3), r2(3) !! Position real(wp), intent(in) :: d1, d2 !! Diameter real(wp), intent(in) :: m1, m2 !! Masses of each particle real(wp), intent(in) :: v1(3), v2(3) !! Velocities real(wp), intent(in) :: w1(3), w2(3) !! Rotation rates real(wp), intent(in) :: tcol !! Collision time real(wp), intent(in) :: edry !! Dry restitution coefficent real(wp), intent(in) :: muc !! Coulomb friction factor real(wp) :: val(3) ! Work variable real(wP) :: deltan !! Overlap between particles real(wp) :: d12 !! Distance between centers real(wp) :: n12(3) !! Unitary vector connecting the two centroids real(wp) :: t12(3) !! Unitary tangential vector real(wp) :: v12(3) !! Relative velocity at contact point real(wp) :: v12t(3) !! Tangential relative velocity real(wp) :: me !! Reduced mass real(wp) :: kn !! Normal spring stiffness real(wp) :: etan !! Normal dashpot coefficient real(wp) :: Fn,Ft !! Normal and tangential forces real(wp),parameter :: Pi=4.0_wp*atan(1.0_wp) ! Initialization val = 0.0_wp ! Distance between centers d12 = norm2(r1-r2) ! Compute overlap distance deltan = 0.5_wp*(d1+d2) - d12 if (deltan.gt.0.0_wp) then ! deltan>0: The two particles overlap ! We proceed to dry collision calculation ! Unitary vector connecting the two centers n12 = (r2-r1)/d12 ! Relative velocity at the contact point v12 = v1-v2 + 0.5_wp*d1*cross_product(w1,n12) & + 0.5_wp*d2*cross_product(w2,n12) ! Compute normal collision force F^q_{ij,n} ! - Spring coefficient in normal direction me = m1*m2/(m1+m2) kn = me*(Pi**2+log(edry)**2)/tcol**2 ! - Dashpot coefficient in normal direction etan = -2.0_wp*me*log(edry)/tcol ! - Normal force Fn = -kn*deltan -etan*dot_product(v12,n12) ! Compute tangential collision force ! - Tangential relative velocity v12t = v12 - dot_product(v12,n12)*n12 t12 = v12t/(norm2(v12t)+epsilon(1.0_wp)) ! - Tangential force Ft = -muc*abs(Fn) val = Fn*n12 +Ft*t12 end if return end function DEM_col