File: RELATIVE:/../../../mfix.git/model/des/cfslide.f

1     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
2     !
3     !  Subroutine: CFSLIDE(V_TANG, PARTICLE_SLIDE, MU)
4     !  Purpose:  Check for Coulombs friction law - calculate sliding
5     !            friction
6     !
7     !  Author: Jay Boyalakuntla                           Date: 12-Jun-04
8     !  Reviewer:                                          Date:
9     !
10     !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
11     
12           SUBROUTINE CFSLIDE(V_TANG, PARTICLE_SLIDE, MU, FT_tmp, FN_tmp)
13     
14     !-----------------------------------------------
15     ! Modules
16     !-----------------------------------------------
17           USE discretelement, only: DEBUG_DES
18           IMPLICIT NONE
19     !-----------------------------------------------
20     ! Dummy arguments
21     !-----------------------------------------------
22     ! tangent to the plane of contact
23           DOUBLE PRECISION, INTENT(IN) :: V_TANG(3)
24     ! logic set to T when a sliding contact occurs
25           LOGICAL, INTENT(OUT) :: PARTICLE_SLIDE
26     ! Coefficient of friction
27           DOUBLE PRECISION, INTENT(IN) :: MU
28     ! normal force
29           DOUBLE PRECISION, DIMENSION(3), INTENT(IN) :: FN_tmp
30     ! tangential force
31           DOUBLE PRECISION, DIMENSION(3), INTENT(INOUT) :: FT_tmp
32     !-----------------------------------------------
33     ! Local variables
34     !-----------------------------------------------
35     ! squared magnitude of tangential and normal forces
36           DOUBLE PRECISION FTMD, FNMD
37     !-----------------------------------------------
38     
39           FTMD = dot_product(FT_tmp(:),FT_tmp(:))
40           FNMD = dot_product(FN_tmp(:),FN_tmp(:))
41     
42           IF (FTMD.GT.(MU*MU*FNMD)) THEN
43     ! tangential force based on sliding friction
44              PARTICLE_SLIDE = .TRUE.
45              IF(ALL(V_TANG.EQ.0)) THEN
46                 FT_tmp(:) =  MU * FT_tmp(:) * SQRT(FNMD/FTMD)
47              ELSE
48                 FT_tmp(:) = -MU * V_TANG(:) * SQRT(FNMD/dot_product(V_TANG,V_TANG))
49              ENDIF
50     
51              IF(DEBUG_DES) THEN
52                 WRITE(*,'(7X,A)') &
53                      'FROM CFSLIDE.F ---------->'
54                 WRITE(*,'(9X,A)') 'PARTICLE_SLIDE = T'
55                 WRITE(*,'(9X,A,2(ES15.7,1X))')&
56                      'FTMD, mu*FNMD = ', FTMD, MU*FNMD
57                 WRITE(*,'(7X,A)') '<----------END CFSLIDE.F'
58              ENDIF
59     
60           ENDIF
61     
62           RETURN
63           END SUBROUTINE CFSLIDE
64