Sliding contact along a curved boundary

Numerical methods and mathematical models of Elmer
Post Reply
DGEckold
Posts: 10
Joined: 10 May 2021, 18:09
Antispam: Yes

Sliding contact along a curved boundary

Post by DGEckold »

Hi,

I've been attempting to model the contact between a set of gear teeth. So far,
using the mortar method in slide contact mode I've been able to produce
static cases that are in good agreement with the Hertzian analytical solution.

However, when I add the "rigidmeshmapper" solver to produce a quasi-static model,
where the gear segments are rotating about their centres. After a couple of initial
time steps that seem to solve correctly, the contact detection seems to stop working
properly, and the model becomes nonsensical. Using smaller time steps and/or a finer
mesh also seems to make it worse.

Interestingly, I seem to almost be able to get it working if I turn off mesh displacement
in the elastic solver, or use low enough forces. However, having the mesh displacement
is rather important for calculating the load share between teeth, especially for polymer
gears where deflections are expected to be high.

What doesn't really make sense is the solver is working in early time steps,
but not in later time steps. But the actual stresses should be exactly the
same, just on the next tooth over.

Anyone have any ideas?

Thanks,
David
Attachments
Case.zip
(870.19 KiB) Downloaded 153 times
Mesh.zip
Mesh should be unzipped into the case dir under ./mesh/
(761.98 KiB) Downloaded 143 times
raback
Site Admin
Posts: 4801
Joined: 22 Aug 2009, 11:57
Antispam: Yes
Location: Espoo, Finland
Contact:

Re: Sliding contact along a curved boundary

Post by raback »

Hi David,

Interesting stuff! I only glanced the sif file so this is not that well educated even.

I'm a little bit unsure whether it is a good idea to combine RigidMeshMapper + Elasticity solver. It might be. But I've a feeling that the rigid rotations should be applied to the Displacement field as well. Perhaps the end-state will not be affected though...

I don't see a picture of your case but I imagine that there is some set of nodes that are made to rotate. Perhaps you could write some MATC/LUA/UDF for those Dirichlet nodes instead of the RigidMeshMapper.

The formulation of the elasticity equation is such that it solves for the full displacement field. This serves poorly in large displacement contact mechanics. Hence I would look at some of the examples that use "Linear System Residual Mode = True". These are much more robust for contact mechanics.

-Peter
DGEckold
Posts: 10
Joined: 10 May 2021, 18:09
Antispam: Yes

Re: Sliding contact along a curved boundary

Post by DGEckold »

Hi Pete,

Sorry, I removed the results files to get the file size small enough to post. An image of the setup is shown below.
case.jpg
case.jpg (13.66 KiB) Viewed 2540 times
The keyword "Linear System Residual Mode = True" seems to have made a big difference, it almost works perfectly even with "displace mesh = true". I've attached images of the principal stress at the first point of contact, at the pitchpoint, and last point of contact. I've also included the displacement_contact_active results for the last timestep where it can be seen the contact projector is behaving strangely on only the 3rd tooth.

As you can see, the principal stress at the start of contact, and at the mid point look about correct, but much later in the solution it still isn't quite right. I will change it to not use rigidmeshmapper. Am I correct in thinking I should leave the driving gear having force boundary conditions defined, and then set boundaries on the driven gear to move with a displacement as a function of time, not dissimilar to the body force for RigidMeshMapper?

Thanks,
David

Edit: changed attachments to a zip so I could include more files.
Attachments
results_images.zip
(198.31 KiB) Downloaded 141 times
Last edited by DGEckold on 29 Jul 2021, 16:22, edited 1 time in total.
DGEckold
Posts: 10
Joined: 10 May 2021, 18:09
Antispam: Yes

Re: Sliding contact along a curved boundary

Post by DGEckold »

Hi,

I have updated the boundaries on the pinion and removed RigidMeshMapper. However, the solution still becomes nonsensical from about 80% of the way though the timesteps, please see attached video and image of peak stress compared with calculated Hertzian pressure. The gentler transition in stress is expected with polymer teeth due to higher tooth bending.

Many Thanks,
David

fea_vs_hertz.jpg
fea_vs_hertz.jpg (33.93 KiB) Viewed 2560 times
Attachments
case.zip
Results removed for file size
(989.42 KiB) Downloaded 138 times
principal_stress_mag.m4v
(177.81 KiB) Downloaded 145 times
DGEckold
Posts: 10
Joined: 10 May 2021, 18:09
Antispam: Yes

Re: Sliding contact along a curved boundary

Post by DGEckold »

Hi,

So having played with the files some more, in both steady state analysis and in smaller subsets of angles the gears rotate through. If I change the number of time steps, the model always starts to go wrong around the same percentage though the simulation. For the mesh attached previously, the angles the gears rotate though for the complete contact of the centre tooth are approx -8.1 to 8.1 degrees.

However, if I run a steady state simulation with the mesh already in the later positions*, the simulation has no issues. Also, if I start instead at the pitch point (0 degrees) and simulate through to 8.1 degrees to model the last half of the contact. The model also performs correctly.

This makes me wonder if the issue is caused by the initial normal-tangential coordinate directions used in the plane projector to be sufficiently wrong after so much rotation that it can no longer correctly calculate the contact? Is there a way to reset the NT coordinate system from the sif file e.g. every x time-steps?

Many Thanks,
David

*Although for some reason I had to set the contact for the earlier teeth (which should have no contact) to passive, I assume because of the order they are defined in the sif file.
DGEckold
Posts: 10
Joined: 10 May 2021, 18:09
Antispam: Yes

Re: Sliding contact along a curved boundary

Post by DGEckold »

Hi,

So running with the idea above, I wrote a short solver, copied below, to be called after each timestep that checks if a BC has a Plane Projector Normal, and if so removes it. The idea being that then the subroutine PlaneInterfaceMeshes in MeshUtils.F90 will rerun the part that generates the plane projector normal.

The solver runs and I can see PlaneInterfaceMeshes recalculating a new plane each timestep that changes from the timestep before. But the problem still persists with no difference from before. So it must be something else. Any Ideas?

Thanks,
David

Code: Select all

!> Standard API for Solver
!---------------------------------------------------------------------
SUBROUTINE RemoveProjectorNormals( Model, Solver, dt, Transient )
!---------------------------------------------------------------------
  USE DefUtils

  IMPLICIT NONE
!---------------------------------------------------------------------
TYPE(Solver_t) :: Solver
TYPE(Model_t) :: Model
REAL(KIND=dp) :: dt
LOGICAL :: Transient
!--------------------------------------------------------------------
! Local Variables
!--------------------------------------------------------------------
TYPE(MortarBC_t),POINTER :: MortarBC
TYPE(ValueList_t),POINTER :: BC
REAL(KIND=dp), POINTER :: PNormal(:,:)
LOGICAL :: Found
INTEGER :: bc_ind

Do bc_ind=1, Model % NumberOfBCs
  MortarBC => Model % Solver % MortarBCs(bc_ind)
  ! If( .NOT.ASSOCIATED( MortarBC ) ) CYCLE
  BC => Model % BCs(bc_ind) % Values
  
  PNormal => ListGetConstRealArray(BC, 'Plane Projector Normal', Found)
  IF(.Not. Found) Then
    CALL Info('RemoveProjectorNormals','No plane projector found, skipping', Level=12)
    CYCLE
  ELSE
    CALL Info('RemoveProjectorNormals','Removing plane projector for BC ',Level=3)
    CALL ListRemove(BC, 'Plane Projector Normal')
  END IF
END DO
!---------------------------------------------------------------------
ENDSUBROUTINE RemoveProjectorNormals
!--------------------------------------------------------------------
Attachments
case.zip
Current case including removeprojectornormals.so
(964.13 KiB) Downloaded 138 times
DGEckold
Posts: 10
Joined: 10 May 2021, 18:09
Antispam: Yes

Re: Sliding contact along a curved boundary

Post by DGEckold »

Hi,

By dropping the number of nodal points on meshing face curve from 50 to 30, it now solves pretty nicely. In both cases using second order elements from gmsh. I'll run with this mesh configuration for now.

But I am still interested in any help to make it more robust to meshing as my plan is to procedurally generate these meshes using various gear form parameters.

David
Post Reply