.. _contact-definition:

************************
Contact Definition Block
************************

The following set of commands are used to define contact. The contact definition block is placed in the ``REGION`` command scope. For an example of how to create a basic contact definition block, see :numref:`contact-examples`.

.. parsed-literal::

   BEGIN CONTACT DEFINITION <string>name

     # Contact surface definition commands:

     SKIN ALL BLOCKS = <string>ON|OFF(OFF)
       [EXCLUDE <string list> block_names]
       # see :numref:`contact-skin-all-blocks`
     
     CONTACT SURFACE <string>name CONTAINS <string list>surface_names | assembly_names
       # see :numref:`contact-surface-command-line`
     
     CONTACT NODE SET <string>surface_name | assembly_name
       CONTAINS <string>nodelist_names 
       # see :numref:`contact-surfaces-nodeset`

     RESTRICT CONTACT TO SUBDOMAIN DEFINED BY RADIUS <real> AND POINT <real> <real> <real>
       # see :numref:`contact-surface-restriction`

     BEGIN CONTACT SURFACE <string>name
       # ... see :numref:`contact-surface-command-block`
     END [CONTACT SURFACE <string>name]
     
     # friction model definition commands:
       # ... see :numref:`contact-friction`
            
     #  interaction definition commands:

     BEGIN INTERACTION DEFAULTS
       # ... see :numref:`contact-interactions-defaults`
     END [INTERACTION DEFAULTS]
     
     BEGIN INTERACTION [<string>name]
       # ... see :numref:`contact-interactions-specific`
     END [INTERACTION <string>name]
     
     ACTIVE PERIODS = <string list>period_names
       # see :numref:`contact-periods`

     # contact algorithm option commands:

     SEARCH = <string> DASH(DASH)
       # see :numref:`contact-algorithm-library`

     BEGIN DASH OPTIONS
       # ... see :numref:`contact-algorithm-dash`
     END

     ENFORCEMENT = <string>AL\|KINEMATIC(AL) |implicit_mini|
      # see :numref:`contact-algorithm-enforcement`

     CONTACT RESIDUAL NORM SCALE FACTOR = <real>scale |implicit_mini|

     INITIAL OVERLAP REMOVAL = ON|OFF(OFF)       
     BEGIN REMOVE INITIAL OVERLAP
       # ... see :numref:`contact-algorithm-overlap`
     END [REMOVE INITIAL OVERLAP]
     OVERLAP REMOVAL ONLY = OFF|ON(OFF)

     BEGIN SURFACE OPTIONS
       # ... see :numref:`contact-algorithm-lofted-suface-options`
     END [SURFACE OPTIONS]

     BEGIN SEARCH OPTIONS [<string>name]
       # ... see :numref:`contact-algorithm-search`
     END [SEARCH OPTIONS <string>name]

     BEGIN ENFORCEMENT OPTIONS [<string>name] |explicit_mini|
       # ... see :numref:`contact-algorithm-enforcementoptions`
     END [ENFORCEMENT OPTIONS <string>name]

     COMPUTE CONTACT VARIABLES = ON|OFF|EVERY_STEP(ON) |explicit_mini|
      # see :numref:`contact-specific`

     BEGIN DEBUG [<string>name]
       # ... see :numref:`contact-specific-debug`
     END [DEBUG <string>name]

   END [CONTACT DEFINITION <string>name]

The command block begins with the input line:

.. code-block:: sierrainput

   BEGIN CONTACT DEFINITION <string>name

and is terminated with the input line:

.. code-block:: sierrainput

   END [CONTACT DEFINITION <string>name]

The string ``name`` is a name for this contact definition. The name should be unique among all the contact definitions in an analysis and is used in diagnostics printed in the log file or error messages related to the contact definition.

A typical analysis will have only one ``CONTACT DEFINITION`` command block. However, more than one contact definition may be used. Each ``CONTACT DEFINITION`` command block creates its own set of contact constraints that operate independently from one another. Use of fewer contact definition commands blocks will tend to provide more efficient processing and better conflict resolutions when different types of contact constraints come into conflict.

Contact behaves somewhat differently in explicit versus implicit analyses. The current contact enforcement library is Dash. The detailed descriptions of each command show what options are available based on analysis type. Unless otherwise noted the behavior of a command is the same for both explicit and implicit.
