## Study on Friction in Contact

Elmer cases by the users for the users
kevinarden
Posts: 1788
Joined: 25 Jan 2019, 01:28
Antispam: Yes

### Study on Friction in Contact

Performed an extensive study on friction between a block and a base. All files are here
https://github.com/mrkearden/friction-in-elmer
There are a couple of videos that look like good solutions.

The normal force in the block is correct since the stress values and vertical down displacements are correct.

However, it is difficult to make sense of the reported contact values and the block always moves in the lateral direction regardless of friction coefficient used. In addition the results are the same regardless of friction coefficient used.
The first number is the value at a node in paraview, it is then followed by a boundary sum or mean, it looks like I should have used mean on the displcement contact normalload variable
The Friction Contact = Logical True would crash with a system error after 1 or 2 steps.
comparison.png (51.04 KiB) Viewed 53 times
results.png
(141.86 KiB) Not downloaded yet
kevinarden
Posts: 1788
Joined: 25 Jan 2019, 01:28
Antispam: Yes

### Re: Study on Friction in Contact

In SolverUtils.F90 this section of code below is never called for slip or stick contact, which is why
Static Friction Coefficient = Real .125
Dynamic Friction Coefficient = Real .125
Stick Contact Coefficient = Real .125
has no impact on the solution
starting at line 3512
mustatic = ListGetRealAtNode( BC,'Static Friction Coefficient', j )
mudynamic = ListGetRealAtNode( BC,'Dynamic Friction Coefficient', j )

IF( mustatic <= mudynamic ) THEN
CALL Warn('TangentContactSet','Static friction coefficient should be larger than dynamic!')
END IF

IF( MortarBC % Active(IndT1) ) THEN
IF( TangentLoad > mustatic * ABS( NodeLoad ) ) THEN
removed = removed + 1
MortarBC % Active(indT1) = .FALSE.
IF( Dofs == 3 ) MortarBC % Active(indT2) = .FALSE.
END IF
ELSE
stickcoeff = ListGetRealAtNode( BC,'Stick Contact Coefficient', j, Found )

It is not called becuase of the goto 100 in lines 3442 through 3445

! For stick and tie contact inherit the active flag from the normal component
IF( SlipContact ) THEN
MortarBC % Active( DofT1 :: Dofs ) = .FALSE.
IF( Dofs == 3 ) THEN
MortarBC % Active( DofT2 :: Dofs ) = .FALSE.
END IF
GOTO 100
ELSE IF( StickContact .OR. TieContact ) THEN
MortarBC % Active( DofT1 :: Dofs ) = MortarBC % Active( DofN :: Dofs )
IF( Dofs == 3 ) THEN
MortarBC % Active( DofT2 :: Dofs ) = MortarBC % Active( DofN :: Dofs )
END IF
GOTO 100
END IF
kevinarden
Posts: 1788
Joined: 25 Jan 2019, 01:28
Antispam: Yes

### Re: Study on Friction in Contact

The friction contact works if the tangential applied force is small relative to the stick force caused by the contact. Other wise it crashes with a system error.

If I remove the goto 100 from the code above when using stick contact so that the code
stickcoeff = ListGetRealAtNode( BC,'Stick Contact Coefficient', j, Found )

is visited then stick (or slide) also has the issue of a system error, if the tangential applied force is greater than the stick force.