### Re: Contact Mechanics - Friction Test

Posted:

**22 Jul 2019, 19:28**Did the same steps, received the same results, normal loads way too high. Built a similar model from scratch and made my own sif, same result, normal loads way too high.

Bulletin Board for Elmer FEM Users

http://www.elmerfem.org/forum/

Page **4** of **7**

Posted: **22 Jul 2019, 19:28**

Did the same steps, received the same results, normal loads way too high. Built a similar model from scratch and made my own sif, same result, normal loads way too high.

Posted: **23 Jul 2019, 10:59**

Thank you so much for your effort.

Unfortunately I cannot find out how and where "NormalLoadVar % Values" gets its values. I also tried to put the Normalload as a Boundary Condition at the bottom of the cube (Force 3 = -9.81 * 7810.0 and Force 3 = -9.81 * 7810.0 * 10.0e-6, because I did not know if volume is considered in a bc) instead of the body force. But the values are stil way too high. I don't know where NormalLoadVar" gets its values from..

Unfortunately I cannot find out how and where "NormalLoadVar % Values" gets its values. I also tried to put the Normalload as a Boundary Condition at the bottom of the cube (Force 3 = -9.81 * 7810.0 and Force 3 = -9.81 * 7810.0 * 10.0e-6, because I did not know if volume is considered in a bc) instead of the body force. But the values are stil way too high. I don't know where NormalLoadVar" gets its values from..

Posted: **23 Jul 2019, 11:21**

I think this is the first time NormalLoadVar is called in SolverUtils:

NormalLoadVar => VariableGet( Model % Variables,&

TRIM(VarName)//' Contact Normalload')

But "Displacement Contact Normalload" is a variable that is calculated and outputted in vtu or if you want through SaveScalars, but not a variable you could set as a bc. If you try to set it as a bc, you get an error. I cannot find another line where NormalLoadVar gets any values..

NormalLoadVar => VariableGet( Model % Variables,&

TRIM(VarName)//' Contact Normalload')

But "Displacement Contact Normalload" is a variable that is calculated and outputted in vtu or if you want through SaveScalars, but not a variable you could set as a bc. If you try to set it as a bc, you get an error. I cannot find another line where NormalLoadVar gets any values..

Posted: **23 Jul 2019, 12:32**

Do loop starting at line 3052 in Subroutine CalculateContactPressure

sums the nodal forces into NodalForce then calculate NormalLoadVector

DO i=1,n

j = NormalLoadVar % Perm( Indexes(i) )

IF( .NOT. NodeDone( Indexes(i) ) ) THEN

NodeDone( Indexes(i) ) = .TRUE.

WeightVar % Values(j) = 0.0_dp

NormalLoadVar % Values(j) = 0.0_dp

SlipLoadVar % Values(j) = 0.0_dp

END IF

k = FieldPerm( Indexes(i) )

IF( k == 0 .OR. j == 0 ) CYCLE

DO l=1,dofs

NodalForce(l) = LoadValues(dofs*(k-1)+l)

END DO

IF( ThisRotatedContact ) THEN

NormalForce = NodalForce(1)

ELSE

NormalForce = SUM( NodalForce * Normal )

END IF

SlipForce = SQRT( SUM( NodalForce**2 ) - NormalForce**2 )

NormalLoadVar % Values(j) = NormalLoadVar % Values(j) - &

s * Basis(i) * NormalForce

SlipLoadVar % Values(j) = SlipLoadVar % Values(j) + &

s * Basis(i) * SlipForce

WeightVar % Values(j) = WeightVar % Values(j) + s * Basis(i)

END DO

sums the nodal forces into NodalForce then calculate NormalLoadVector

DO i=1,n

j = NormalLoadVar % Perm( Indexes(i) )

IF( .NOT. NodeDone( Indexes(i) ) ) THEN

NodeDone( Indexes(i) ) = .TRUE.

WeightVar % Values(j) = 0.0_dp

NormalLoadVar % Values(j) = 0.0_dp

SlipLoadVar % Values(j) = 0.0_dp

END IF

k = FieldPerm( Indexes(i) )

IF( k == 0 .OR. j == 0 ) CYCLE

DO l=1,dofs

NodalForce(l) = LoadValues(dofs*(k-1)+l)

END DO

IF( ThisRotatedContact ) THEN

NormalForce = NodalForce(1)

ELSE

NormalForce = SUM( NodalForce * Normal )

END IF

SlipForce = SQRT( SUM( NodalForce**2 ) - NormalForce**2 )

NormalLoadVar % Values(j) = NormalLoadVar % Values(j) - &

s * Basis(i) * NormalForce

SlipLoadVar % Values(j) = SlipLoadVar % Values(j) + &

s * Basis(i) * SlipForce

WeightVar % Values(j) = WeightVar % Values(j) + s * Basis(i)

END DO

Posted: **23 Jul 2019, 13:01**

That is interesting. In the comment above it says

! The nodal loads may be given either in cartesian or n-t coordinate system.

and in the comment above the Subroutine CalculateContactLoad() ist also says

! If we have normal-tangential coordinate system then also the load is in

! the same coordinate system.

Maybe one needs to define the load differently, I mean instead of using Force 1,2,3 Force N or T or something like that? Is that even possible?

! The nodal loads may be given either in cartesian or n-t coordinate system.

and in the comment above the Subroutine CalculateContactLoad() ist also says

! If we have normal-tangential coordinate system then also the load is in

! the same coordinate system.

Maybe one needs to define the load differently, I mean instead of using Force 1,2,3 Force N or T or something like that? Is that even possible?

Posted: **23 Jul 2019, 14:55**

Well I tried to put Normal Force as a bc but still wrong results..

So after trying to get this Fortran Code for a second I am even more confused:

So CalculateContactPressure gets its normalloads from LoadValues, LoadValues is

LoadVar => CalculateContactLoad()

LoadValues => LoadVar % Values,

CalculateContactLoad calls CalculateLoads using LoadVar as the Parameter "NodalLoads"

LoadVar => VariableGet( Model % Variables, &

TRIM(VarName) // ' Contact Load',ThisOnly = .TRUE. ).

But you cannot set Displacement Contact Load anywhere, but only get it as an output. I don't quite understand the sense of calculating loads using loads that are to be calculated.

In line 6345 and following in subroutine SetNodalLoads it appears that they are calculating loads based on the body force one has defined. But I don't know when and where they are used, apparently not for the normalload we are outputting.

So after trying to get this Fortran Code for a second I am even more confused:

So CalculateContactPressure gets its normalloads from LoadValues, LoadValues is

LoadVar => CalculateContactLoad()

LoadValues => LoadVar % Values,

CalculateContactLoad calls CalculateLoads using LoadVar as the Parameter "NodalLoads"

LoadVar => VariableGet( Model % Variables, &

TRIM(VarName) // ' Contact Load',ThisOnly = .TRUE. ).

But you cannot set Displacement Contact Load anywhere, but only get it as an output. I don't quite understand the sense of calculating loads using loads that are to be calculated.

In line 6345 and following in subroutine SetNodalLoads it appears that they are calculating loads based on the body force one has defined. But I don't know when and where they are used, apparently not for the normalload we are outputting.

Posted: **23 Jul 2019, 15:20**

or as in line 5521 in ElasticSolve.F90. I wonder if one could just get the NodalLoad in SolverUtils like that too.

Posted: **24 Jul 2019, 01:50**

Changed Contact Friction = Logical True to Contact Friction = Logical False and the normal load and slip load are much more reasonable. The value of the coefficient of friction still does not change the results.

Posted: **24 Jul 2019, 02:03**

Using Contact Friction = Logical False, turned off the gravity (body force load) applied a Normal Force = Real -10. to the top face of the cube and the contact normal load is exactly 10.

Posted: **24 Jul 2019, 11:01**

If you turn off friction contact, the friction coefficients do not have any effect, because in the subroutine TangentContactSet the if-condition

IF( FrictionContact .AND. &

ListGetLogical( BC,'Stick Contact Global',Found ) ) THEN

is not met (when there is no friction the tangent contact set is empty).

I tried the same thing but I don't get Displacement Contact Normalload = 10 neither in Paraview nor in my SaveScalars-Output.. can you send me your sif?

IF( FrictionContact .AND. &

ListGetLogical( BC,'Stick Contact Global',Found ) ) THEN

is not met (when there is no friction the tangent contact set is empty).

I tried the same thing but I don't get Displacement Contact Normalload = 10 neither in Paraview nor in my SaveScalars-Output.. can you send me your sif?