# 11.2. Contact on Smooth Surfaces

A developmental option is available for contact on smooth surfaces (such as pins rotating in holes or ball bearings). In its current implementation, contact constructs a patch for each face in `Side A` that is in contact. For quad faces, this patch is a Gregory patch (following the method of [[1]]), while for tri3 faces, it is a Nagata patch (following the method of [[2]]). This is done to predict the curvature of the face from an average node normal calculation. The node normals are updated every timestep in order to capture the deformation of the smooth surface. The contact gap and resulting forces are computed in this current configuration, and the forces are distributed out to the nodes via the linear shape functions of the original face. Convergence is achieved via this method due to the Augmented Lagrangian enforcement iterations performed by DASH. Example syntax is shown below:

    BEGIN CONTACT DEFINITION EXAMPLE_SMOOTH_CONTACT
      CONTACT SMOOTH SURFACE SMOOTH_SURF CONTAINS SURFACE_1
      CONTACT NODE SET NODE_SIDE CONTAINS NODELIST_1000
      BEGIN INTERACTION SMOOTH_1
        CONSTRAINT FORMULATION = NODE_FACE
        SIDE A = SMOOTH_SURF
        SIDE B = NODE_SIDE
      END
    END

Warning

Smooth contact is only available for solid quad and tri3 faces.

Warning

This option is only implemented for node-face contact. If unspecified it will default to node-face.

`Side A` is the smooth surface side and `Side B` is the node side in a smooth contact node-face interaction.

## 11.2.1. Surface Normals and Curvature Metrics

Smooth surfaces have two metrics that allow us to assess the curvature of the surface `smooth_surface_altitude` and `smooth_surface_curvature`. Both of these are calculated on the interior nodes of the smooth contact surfaces. Interior nodes are nodes that belong to only one smooth surface. The nodal variables `smooth_surface_curvature` and `smooth_surface_altitude` can be requested for output onto the results file. `smooth_surface_altitude` is calculated as the average signed distance of adjacent nodes to the plane created at the node with the nodal normal of the smooth surface, the average is scaled with the characteristic length. The `curvature` is the mean curvature calculated using the method of [[3]].

The min and max curvature metrics are collected and printed to the log file for each smooth surface. For example:

    -------- DASH SMOOTH SURFACE METRICS --------
    Contact Entity    Surf Index   Node Normal              Min Altitude   Max Altitude   Min Curvature   Max Curvature
    ---------------   ----------   ----------------------   ------------   ------------   -------------   -------------
    smooth_surf       0            smooth_surface_normal    5.105e-02      5.105e-02      2.500e-01       2.500e-01

In addition the table in the log file indicates the nodal variable name used for the smooth surface nodal normal for each smooth surface. Each smooth surface has a unique normal so nodes shared between smooth surfaces will have multiple normals. The node normal variable can be used to visualize the smooth surface normal, when visualizing surface normals care should be taken to match the node normal variable name with the surface being visualized.

Warning

Multiple smooth surfaces can be defined but a maximum of 5 surfaces can share a common node.

Warning

Node normals are crucial for accurate smooth surfaces. Symmetry boundaries have a lack of information for the normal calculation, which leads to unexpected behavior. Modeling with symmetry boundaries are not currently recommended.

## 11.2.2. Automatic Selection of Side A and Side B

The best way to guarantee that a surface is used as a smooth surface is to set `Side A` using the `side a =` command to setup contact. The automatic selection of `Side A` and `Side B` occurs when the surface are specified with `surfaces =`. The same selection logic applied to node-face contact is used when the characteristic lengths of the two sides are not within `2x` of each other. Otherwise, if one side is smooth and the other surface is not the `Side A` is set to the smooth side. Then if one side is flat and the other side has curvature, the side with curvature is used as `Side A`. If both sides have curvature the side with the lower curvature is used as `Side A`.

Warning

In the case of two smooth surfaces, the current method will always assign a flat surface (i.e. one with zero curvature) as `Side B`. If the intention is that the flat surface should be smoothed, e.g. in the case where it is expected to deform substantially, then it must be directly specified as `Side A` or it must be the only smooth surface in the interaction.

[1]

M. A. Puso and T. A. Laursen. A 3d contact smoothing method using gregory patches. International Journal for Numerical Methods in Engineering, 54(8):1161–1194, 2002.

[2]

D. M. Neto, M. C. Oliveira, L. F. Menezes, and J. L. Alves. Improving nagata patch interpolation applied for tool surface description in sheet metal forming simulation. Computer-Aided Design, 45(3):639–656, 2013.

[3]

S Rusinkiewicz. Estimating curvatures and their derivatives on triangle meshes. Proceedings. 2nd International Symposium on 3D Data Processing, Visualization and Transmission, pages 486–493, 2004.