Where is the tangentialoverlap in API_v3_1

Raheem Sterling_22160
Raheem Sterling_22160 Altair Community Member
edited July 2023 in Community Q&A

Hi,

I have looked through the CHertzMindlin_v_3_1.cpp, I just saw the use of tangentialoverlap in some functions, but I didn't found where it come from, it isn't in the contact information.

In my understanding, the tangentialoverlap is CSimple3Dvector(0.0,0.0,0.0) at initial,  until the sliding, then the tangentialoverlap decreases or increases with tangential velocity? 

Thanks

Tagged:

Answers

  • Stephen Cole
    Stephen Cole
    Altair Employee
    edited July 2023

    Tangential overlap is a cumulative value calculated over multiple time-steps.  This is unlike Normal Overlap which is calculated instantaneously from the particle positions the Tangential Overlap increases with the sliding velocity.

     

    This can get reset to 0 if slippage occurs or increase depending on the friction values and the forces.  In the API 2022.2 or earlier it is the following for CPU:

             * @param tangentialPhysicalOverlap  (INPUT AND RETURN VALUE), The tangential physical overlap.

    The contact model is allowed to change the value of the tangential physical overlap.

     

    Or for GPU

    __device__ real3 & 

    getTangentialOverlap ()

    Returns the overlap occurring on a tangent between the contacting elements. 

    However this was a bit misleading as both were able to get and set the value so now in 2022.3 this is replaced with getTangOverlap() or setTangOverlap()

     

    Regards

    Stephen

  • Raheem Sterling_22160
    Raheem Sterling_22160 Altair Community Member
    edited July 2023

    Tangential overlap is a cumulative value calculated over multiple time-steps.  This is unlike Normal Overlap which is calculated instantaneously from the particle positions the Tangential Overlap increases with the sliding velocity.

     

    This can get reset to 0 if slippage occurs or increase depending on the friction values and the forces.  In the API 2022.2 or earlier it is the following for CPU:

             * @param tangentialPhysicalOverlap  (INPUT AND RETURN VALUE), The tangential physical overlap.

    The contact model is allowed to change the value of the tangential physical overlap.

     

    Or for GPU

    __device__ real3 & 

    getTangentialOverlap ()

    Returns the overlap occurring on a tangent between the contacting elements. 

    However this was a bit misleading as both were able to get and set the value so now in 2022.3 this is replaced with getTangOverlap() or setTangOverlap()

     

    Regards

    Stephen

    Thanks Stephen,

    So it can be understand that tangntialoverlap is a value from EDEM self-defined, but is different from the value like particle velcoity, uses can change the value of tangential overlap.

    In the version 2.4, I saw the tangential overlap changes with the tangential velocity as below,

     //Tangential overlap.may also be wrong         nOverlap_t -= relVel_t * timestep;          //the normal velocity is unaffected, but the tangential one might be different         //this approximation assumes the particles are spheres.         vel1 += angVel1.cross(unitCPVect*(elem1PhysicalRadius - elem1ContactRadius));          if(true == elem2IsSurf)         {             vel2 += angVel2.cross(-unitCPVect * (elem2PhysicalRadius - elem2ContactRadius));         }          relVel =  vel1 - vel2;         relVel_n  = unitCPVect * unitCPVect.dot( relVel);         relVel_t = relVel - relVel_n;          nOverlap_t += relVel_t * timestep;

     but in the version 3.1, I can't see the overlap changes with relvel_t, only can be seen in the variation with slippage, are they the same thing? Or just because some changings in the code of EDEM. The latest version about HM model in the forum is version 3.1

    if (ft2 > fn2)         {             newF_t = F_t * sqrt(fn2 / ft2);             tangentialOverlap = newF_t * (-1.0 / tangentialStiffness); //slippage has occurred so the tangential overlap is reduced a bit                                                                         //at this point we get energy loss from the sliding!             F_td = newF_t;         }

    Best regards

    Raheem