This is an old revision of the document!
−Table of Contents
Commit 2018-07-12
In this commit, a new contact traction element was created to set the traction force to zero at the nodes that are in contact within a specified contact interaction. This feature is required in the coupling procedure with Metalub (see commit 3186 of Metafor and commit 1456 of Metalub for more details).
How to use the new feature
A ContactTraction2DElement
or ContactTraction3DElement
is created like a Traction2DElement
or Traction3DElement
. The only additional property that has to be set is NBR_CONTACT_INTERACTION
, which is the number of the contact interaction. For instance,
prp = ElementProperties(ContactTraction2DElement) prp.put(PRESSURE, -p['pMax']) prp.put(NBR_CONTACT_INTERACTION, 3)
Hence, if nodes in this ContactTraction2DElement
are slave nodes in contact (in the previous mechanical iteration) in the contact interaction 3, the traction force applied to these nodes is set to zero.
File structure
Instead of implementing the new feature directly in the TractionElement
of the mtElement
package, a new template class ContactTractionElement
was created in the mtContact
(elements) package. It had to be moved to the mtContact
package (instead of the mtElement
package) in order to have access to the contact features via include “ContactInteraction.h”
. Moreover, the ContactTractionElement
derives of TractionElement
to minimize duplicate code. In a similar way to the TractionElement
, 2D and 3D elements were created: ContactTraction2DElement
and ContactTraction3DElement
. This required to export all methods of Traction2DElement
and Traction3DElement
via MTELEMENTS_API
(+ ELEMENT_CPP_MACRO2
extension), which only had to be added in Traction3DElement
since it was already done for Traction2DElement
, certainly to derive it in mtXFEM
.
Some minor modifications:
- The new property
NBR_CONTACT_INTERACTION
was added inmtElements.h/cpp
as an integer property. - It was necessary to add
ContactTraction2DElement
andContactTraction3DElement
to the functionsis2D
andis3D
inLoadingInteraction.cpp
in order to be able to add them to theLoadInteraction
in the Python data set. - Untabify in
ContactElement.h/cpp
. getSlaveNode()
, previously private method inContactElement.h/cpp
, becomes protected to use it inContactTractionElement.inl
.- The method
isInContactPrev()
was added inContactElement.h/cpp
to get the contact status at the end of the previous time iteration. Using this contact status has the advantage that the contact traction activation/deactivation does not happen during the same time step, i.e. during the mechanical iteration. It might be possible to use the current contact status but it might introduce some undesired oscillations.