GET_CONTACT_POST

Utility/Data Access SubroutineExtract body contact results.

Use

This subroutine can be used to extract rigid or flexible body contact results from within the CONTACTPOST subroutine in MotionSolve.

Format

Fortran Calling Syntax
CALL GET_CONTACT_POST(ID, I_GRA_ID, J_GRA_ID, TYPE, RM, INDEX, RESULT, NRESULTS, ERRFLG)
C/C++ Calling Syntax
c_get_contact_post(id, i_gra_id, j_gra_id, type, rm, index, result, nresults, errflg)
Python Calling Syntax
[result, errflg] = py_get_contact_post (id, i_gra_id, j_gra_id, type, rm, index):

Attributes

ID
[integer]
The ID of the contact force modeling element (Force_Contact in the XML) for which the results are desired.
I_GRA_ID
[integer]
The ID of the I body's graphic representation. If the body is flexible, this attribute is ignored, and any integer value can be provided.
J_GRA_ID
[integer]
The ID of the J body's graphic representation. If the body is flexible, this attribute is ignored, and any integer value can be provided.
TYPE
[string]
The type of contact result that is requested. Choose from:
Type
Description
"PD"
Penetration depth (scalar).
"PD_VEL"
Penetration rate, in other words, the first time derivative of the penetration depth (scalar).
"SLIP_VEL"
Slip velocity (scalar).
"POS"
Position of the point of contact (vector).
"VEL"
Velocity of the point of contact (vector).
"NORMAL_FORCE"
Normal contact force (vector).
"TANGENTIAL_FORCE"
Tangential contact force (vector).
"TOTAL_FORCE"
Total contact force (vector).
"HAS_TRIA_ID"
A flag for determining whether the geometry in contact is tessellated (scalar).
"TRIA_ID_I"
The ID of the triangle(s) or element(s) that is/are in contact on the I body (scalar or list, based on the number of triangles/elements in contact).
This type only makes sense if HAS_TRIA_ID is true.
"TRIA_ID_J"
The ID of the triangle(s) or element(s) that is/are in contact on the J body (scalar or list, based on the number of triangles/elements in contact).
"INTERSECTION_ID"
An ID that is common between all the contact points that belong to the same contact patch. This is useful for determining the number of contact patches at the current time in the simulation. See Comment 2 for a definition of contact patch.
All the above quantities are represented in model units, wherever applicable.
RM
[integer]
The ID of a reference marker that allows you to request contact states with respect to a frame of reference of your choice. This frame of reference is only applicable to the following types:
  • type = "POS"
  • type = "VEL"
  • type = "NORMAL_FORCE"
  • type = "TANGENTIAL_FORCE"
  • type = "TOTAL_FORCE"
INDEX
[integer]
There may be several locations where contact occurs between the I and J body at a particular time in the simulation. The INDEX input tells MotionSolve which contact the states are being requested for. The INDEX is a 1-based index and can have a maximum value of what is returned by the utility function GET_NCONTACTS. Thus,

1 <= INDEX <= GET_NCONTACTS().

Output

RESULT
[double]
A scalar, vector, or a list of the values returned by GET_CONTACT_POST.
NRESULTS
[integer]
The size of RESULT. This is not required while using the Python utility function.
ERRFLG
[logical]
A value that is true if an error occurs during the call to GET_CONTACT_POST.

Comments

  1. The GET_CONTACT_POST utility function is applicable to both mesh based and semi-analytical (for example, sphere-mesh) based contact modeling. However, this utility function is not supported for legacy models that make use of the old (OPCODE) collision engine.
  2. A contact patch is defined as a collection of points of contact between body I and J. If these points of contacts are not connected with one another, then these are termed as separate contact patches.

    Figure 1 shows two spur gears in contact with each other; two separate contact patches are illustrated.



    Figure 1. Illustration of Contact Patches

    You may use the type = "INTERSECTION_ID" to keep track of different contact patches at the given time in the simulation.

    Note: The intersection ID may change across time steps.