DEM_col Function

private 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.

Arguments

Type IntentOptional 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

Return Value real(kind=wp), (3)


Calls

proc~~dem_col~~CallsGraph proc~dem_col DEM_col proc~cross_product~3 cross_product proc~dem_col->proc~cross_product~3

Called by

proc~~dem_col~~CalledByGraph proc~dem_col DEM_col proc~collision_obj_computecollisionsppvib collision_obj%collision_obj_ComputeCollisionsPPvIB proc~collision_obj_computecollisionsppvib->proc~dem_col proc~collision_obj_computecollisionsppvpp collision_obj%collision_obj_ComputeCollisionsPPvPP proc~collision_obj_computecollisionsppvpp->proc~dem_col proc~collision_obj_computecollisionsppvwall collision_obj%collision_obj_ComputeCollisionsPPvWALL proc~collision_obj_computecollisionsppvwall->proc~dem_col proc~collision_obj_computecollisionsrpvib collision_obj%collision_obj_ComputeCollisionsRPvIB proc~collision_obj_computecollisionsrpvib->proc~dem_col proc~collision_obj_computecollisionsrpvpp collision_obj%collision_obj_ComputeCollisionsRPvPP proc~collision_obj_computecollisionsrpvpp->proc~dem_col proc~collision_obj_computecollisionsrpvrp collision_obj%collision_obj_ComputeCollisionsRPvRP proc~collision_obj_computecollisionsrpvrp->proc~dem_col proc~collision_obj_computecollisionsrpvwall collision_obj%collision_obj_ComputeCollisionsRPvWALL proc~collision_obj_computecollisionsrpvwall->proc~dem_col proc~collision_obj_computecollisions collision_obj%collision_obj_ComputeCollisions proc~collision_obj_computecollisions->proc~collision_obj_computecollisionsppvpp proc~collision_obj_computecollisions->proc~collision_obj_computecollisionsppvwall proc~collision_obj_computecollisions->proc~collision_obj_computecollisionsrpvib proc~collision_obj_computecollisions->proc~collision_obj_computecollisionsrpvpp proc~collision_obj_computecollisions->proc~collision_obj_computecollisionsrpvrp proc~collision_obj_computecollisions->proc~collision_obj_computecollisionsrpvwall proc~cdifs_obj_updatecollisions cdifs_obj_UpdateCollisions proc~cdifs_obj_updatecollisions->proc~collision_obj_computecollisions proc~grans_obj_advancesolution_computecollisionforces grans_obj_AdvanceSolution_ComputeCollisionForces proc~grans_obj_advancesolution_computecollisionforces->proc~collision_obj_computecollisions proc~cdifs_obj_advancesolutionrp cdifs_obj_AdvanceSolutionRP proc~cdifs_obj_advancesolutionrp->proc~cdifs_obj_updatecollisions proc~grans_obj_advancesolution grans_obj_AdvanceSolution proc~grans_obj_advancesolution->proc~grans_obj_advancesolution_computecollisionforces interface~grans_obj_advancesolution grans_obj%grans_obj_AdvanceSolution interface~grans_obj_advancesolution->proc~grans_obj_advancesolution proc~cdifs_obj_advancesolution cdifs_obj_AdvanceSolution proc~cdifs_obj_advancesolution->proc~cdifs_obj_advancesolutionrp interface~cdifs_obj_advancesolution cdifs_obj%cdifs_obj_AdvanceSolution interface~cdifs_obj_advancesolution->proc~cdifs_obj_advancesolution

Source Code

    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