1!------------------------------------------------------------- 2! Gives the x(or y) component of tangential reaction force 3! multiplied by a friction coefficient. 4! 5! The subroutine is needed because when we use the model for 6! friction force where the nodal loads in normal direction is 7! multiplied by a friction coefficient we end in problems for 8! normal-tangential coordinate system. There we need to eliminate 9! the tangential reaction force from the loads. 10!------------------------------------------------------------- 11 FUNCTION TangentForce( Model, n, t ) RESULT(f) 12 USE DefUtils 13 IMPLICIT NONE 14 15 TYPE(Model_t) :: Model 16 INTEGER :: n 17 REAL(KIND=dp) :: t,f 18!------------------------------------------------------------- 19 INTEGER :: i,j,LoadDofs 20 REAL(KIND=dp) :: Normal(3), Force(3),NormalForce,Mu 21 TYPE(Element_t), POINTER :: Element 22 TYPE(Nodes_t) :: ElementNodes 23 TYPE(Variable_t), POINTER :: LoadVar 24 INTEGER, POINTER :: LoadPerm(:) 25 REAL(KIND=dp), POINTER :: LoadValues(:) 26 LOGICAL :: Visited = .FALSE. 27 28 SAVE Visited, ElementNodes, LoadPerm, LoadDofs, LoadValues 29 30 31 IF( .NOT. Visited ) THEN 32 LoadVar => VariableGet( Model % Variables,'Displacement Loads') 33 IF( .NOT. ASSOCIATED( LoadVar ) ) THEN 34 CALL Fatal('TangentForce','No > Displacement Loads < given!') 35 END IF 36 LoadDofs = LoadVar % Dofs 37 IF( LoadDofs /= 2 ) THEN 38 CALL Fatal('TangentForce','Implemented only for 2D!') 39 END IF 40 41 LoadValues => LoadVar % Values 42 LoadPerm => LoadVar % Perm 43 END IF 44 45 Mu = 0.5_dp 46 47 Element => Model % CurrentElement 48 CALL GetElementNodes( ElementNodes, Element ) 49 Normal = NormalVector( Element, ElementNodes, 0.0d0, 0.0d0 ) 50 51 Force = 0.0_dp 52 DO i=1,LoadDofs 53 j = LoadPerm(n) 54 IF( j == 0 ) CYCLE 55 Force(i) = LoadValues( LoadDofs * (j-1) + i ) 56 END DO 57 58 ! This sign convention seems to be consistent for outer normals 59 NormalForce = -SUM( Force * Normal ) 60 61 f = Mu * NormalForce 62 63 END FUNCTION TangentForce 64!------------------------------------------------------------- 65 66