Metafor

ULiege - Aerospace & Mechanical Engineering

User Tools

Site Tools


commit:futur:db

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Next revisionBoth sides next revision
commit:futur:db [2018/07/12 10:58] – [File structure] boemercommit:futur:db [2018/07/12 12:23] – [Test cases] boemer
Line 1: Line 1:
 ====== Commit 2018-07-12 ====== ====== 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).+In this commit, the 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).
  
  
Line 12: Line 12:
   prp.put(NBR_CONTACT_INTERACTION, 3)   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.+Hence, if nodes in this ''ContactTraction2DElement'' are slave nodes in contact in the contact interaction 3, the traction force, which is applied to these nodesis set equal to zero.
  
  
Line 23: Line 23:
   * It was necessary to add ''ContactTraction2DElement'' and ''ContactTraction3DElement'' to the functions ''is2D'' and ''is3D'' in ''LoadingInteraction.cpp'' in order to be able to add them to the ''LoadInteraction'' in the Python data set.   * It was necessary to add ''ContactTraction2DElement'' and ''ContactTraction3DElement'' to the functions ''is2D'' and ''is3D'' in ''LoadingInteraction.cpp'' in order to be able to add them to the ''LoadInteraction'' in the Python data set.
   * Untabify in ''ContactElement.h/cpp''.   * Untabify in ''ContactElement.h/cpp''.
-  * ''getSlaveNode()'', previously private method in ''ContactElement.h/cpp'', becomes protected to use it in ''ContactTractionElement.inl''+  * ''getSlaveNode()'', previously private method in ''ContactElement.h/cpp'', becomes public to use it in ''ContactTractionElement.inl''
-  * The method ''isInContactPrev()'' was added in ''ContactElement.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.+  * The method ''isInContactPrev()'' was added in ''ContactElement.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 this could introduce some undesired oscillations.
  
  
Line 30: Line 30:
  
 ===== Implementation ===== ===== Implementation =====
 +
 +Concerning the implementation, the ''ContactTractionElement'' is very similar to the ''TractionElement'' except from parts of the following virtual functions:
 +  * ''checkProps'': This function checks whether the new property ''NBR_CONTACT_INTERACTION'' was set during the initialization of the elements.  If this property was set, it checks whether the specified number corresponds to an existing contact interaction.  Once this interaction is found, pointers to the slave nodes corresponding to the nodes of the ''ContactionTractionElement'' are saved in the new ''ces'' private vector of Contact ElementS (pointer) in the ''ContactTractionElement''.
 +
 +  * ''fillExternalForces'': This function uses the ''fillExternalForces'' function of ''TractionElement'' first and then it sets all contact forces corresponding to nodes in contact equal to zero.  As mentionned earlier, the contact state is determined based on the results of the previous time integration to reduce possible oscillations.
 +
 +  * ''noAnalyticalStiffnessAvailable'':  An analytical stiffness matrix was defined for the ''ContactTractionElement'' Hence, this function can return ''false''.
 +
 +  * ''fillAnalyticalStiffness'': Similar to the ''fillExternalForces'' function, the ''fillAnalyticalStiffness'' of ''TractionElement'' is used first and then the rows corresponding to the traction forces that were set equal to zero are also set equal to zero.  The structure of this matrix is illustrated in a comment of the ''fillAnalyticalStiffness'' function to understand the details.
  
 ===== Test cases ===== ===== Test cases =====
  
 +Two test cases were created in the folder ''mtContact/tests'' to test the ''ContactTractionElement'' in 2D and 3D.  Hence, they have the same names than the elements that are tested: ''contactTraction2DElement.py'' and ''contactTraction3DElement'' The 3D test is the natural extension of the 2D case.  Hence, only some details about the 2D case are explained here.
 +
 +
 +As shown in the previous figure, two squares are crushed by a compression pressure and a contact tool that moves downwards by $2 \; dy$.  In the case on the left, the traditional ''Traction2DElement'' is used, while the new ''ContactTraction2DElement'' is used on the right.  The ''ContactTraction2DElement'' works correctly, if the total force on node $P_{14}$ along $\mathbf{y}$ is equal to the contact force along $\mathbf{y}$ at the end of the computation, i.e. that the traction force has been set to zero for the node in contact.  To check this equality, the difference between both forces (total and contact) is computed in the extractor ''diffTotalAndContactForceInCase2'' The results of the cases with the ''Traction2DElement'' and the ''ContactTraction2DElement'' are also compared by computing the differences of the total force along $\mathbf{y}$ at the nodes $P_{4}$ and $P_{14}$ in the extractor ''diffTotalForcesBetween2Cases'' This difference should be different from 0, unlike the previous one.
  
commit/futur/db.txt · Last modified: 2018/07/17 12:03 by boemer

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki