<!-- source-page: 101 -->

# 1.1.15 ORIENT: User subroutine to provide an orientation for defining local material directions or local directions for kinematic coupling constraints or local rigid body directions for inertia relief.

Product: Abaqus/Standard

# References

• “Orientations,” Section 2.2.5 of the Abaqus Analysis User’s Guide   
• \*ORIENTATION   
• “Eigenvalue analysis of a piezoelectric transducer,” Section 7.1.1 of the Abaqus Example Problems Guide

# Overview

# User subroutine ORIENT:

• will be called at the start of the analysis at each location (material point, special-purpose element, coupling node, or reference point for inertia relief) for which local directions are defined with a user-subroutine-defined orientation;   
• is used to define the direction cosines of a local system of (material) directions with respect to the default basis directions (default basis directions are defined as the global directions for continuum elements and as the default surface directions for shell, membrane, and surface elements, as described in “Conventions,” Section 1.2.2 of the Abaqus Analysis User’s Guide);   
• can be used to define the direction cosines orienting the layer of reinforcing material in membrane, shell, or surface elements (see “Defining reinforcement,” Section 2.2.3 of the Abaqus Analysis User’s Guide);   
• can be used to provide a local system for defining the direction of action of rotary inertia, spring, dashpot, flexible joint, and elastic-plastic joint elements;   
• can be used with gasket elements to define the local in-plane directions for three-dimensional area and three-dimensional link elements that consider transverse shear and membrane deformations (see “Defining the gasket behavior directly using a gasket behavior model,” Section 32.6.6 of the Abaqus Analysis User’s Guide);   
• can be used to define a local system in which coupling constraints are applied (see “Coupling constraints,” Section 35.3.2 of the Abaqus Analysis User’s Guide, and “Kinematic coupling constraints,” Section 35.2.3 of the Abaqus Analysis User’s Guide);   
• can be used to define a local system at the reference point for the rigid body directions in which inertia relief loads are applied for the entire model (see “Inertia relief,” Section 11.1.1 of the Abaqus Analysis User’s Guide);   
• will ignore rotation angles defined for layers of composite solids (see “Solid (continuum) elements,” Section 28.1.1 of the Abaqus Analysis User’s Guide) but will take into account rotation angles

<!-- source-page: 102 -->

defined for layers of composite shells (see “Using a shell section integrated during the analysis to define the section behavior,” Section 29.6.5 of the Abaqus Analysis User’s Guide, and “Using a general shell section to define the section behavior,” Section 29.6.6 of the Abaqus Analysis User’s Guide); and

• ignores any data specified for the associated orientation definition outside the user subroutine.

The local directions defined by user subroutine ORIENT must be specified relative to the default basis directions.

User subroutine interface   
```txt
SUBROUTINE ORIENT(T, NOEL, NPT, LAYER, KSPT, COORDS, BASIS, 1 ORNAME, NNODES, CNODES, JNNUM)
C
INCLUDE 'ABA_PARAM.INC'
C
CHARACTER*80 ORNAME
C
DIMENSION T(3, 3), COORDS(3), BASIS(3, 3), CNODES(3, NNODES)
DIMENSION JNNUM(NNODES)
user coding to define T
RETURN
END 
```  
Variable to be defined

T

An array containing the direction cosines of the preferred orientation in terms of the default basis directions. T(1,1), T(2,1), T(3,1) give the (1, 2, 3) components of the first direction; T(1,2), T(2,2), T(3,2) give the second direction; etc. For shell and membrane elements only the first and second directions are used. The directions do not have to be normalized. If the second direction is not orthogonal to the first direction, Abaqus/Standard will orthogonalize and normalize the second direction with respect to the first. The third direction is then determined by taking the cross product of the first and second directions. For planar elements the first two directions must lie in the plane of the element.

For use with coupling constraints (“Coupling constraints,” Section 35.3.2 of the Abaqus Analysis User’s Guide), the local basis directions are used as the local constraint directions for application of the kinematic constraint.

For use with inertia relief loads, the local basis directions are used as the rigid body direction vectors for computing the loads.

<!-- source-page: 103 -->

# NOEL

Element number. This value is zero when the subroutine is called for use with coupling constraints or inertia relief loads.

# NPT

Integration point number. This variable is set only for relevant uses.

# LAYER

Layer number (for composite shells and layered solids). This variable is set only when relevant. It is equal to zero when it is irrelevant, such as in a regular solid element or in a shell element when transverse shear stiffness calculations are performed.

# KSPT

Section point number within the current layer. This variable is set only when relevant. It is equal to zero when it is irrelevant, such as in a regular solid element or in a shell element when transverse shear stiffness calculations are performed.

# COORDS

An array containing the initial coordinates of this point. This array contains the coordinates of the reference point for inertia relief loads.

# BASIS

An array containing the direction cosines of the normal material basis directions in terms of the global coordinates in the original configuration. BASIS(1,1), BASIS(2,1), BASIS(3,1) give the 1- direction, etc. This is useful only in shells or membranes since in all other cases the basis is the global coordinate system.

# ORNAME

User-specified orientation name, left justified, with one exception. When an overall section orientation is specified for a composite solid or shell section and the individual layer orientations are specified by an orientation angle, Abaqus defines an internal orientation name to represent the actual orientation of the layer. To avoid internal names, provide an orientation name rather than an orientation angle as part of the layer definition for each individual layer of a composite section.

# NNODES

Number of element nodes. This value is two when the subroutine is called for use with a kinematic coupling definition, where the two nodes are the reference and current coupling node. When used with a distributing coupling definition, this number is equal to the number of coupling nodes plus one for the reference node. It is one when used with inertia relief loads since the local basis is defined at the reference point.

<!-- source-page: 104 -->

# CNODES

An array containing the original coordinates of the nodes. When used with a kinematic coupling definition, the first entry defines the reference node coordinates, and the second entry defines the coupling node coordinates. When used with a distributing coupling definition, the first entry defines the reference node coordinates, and the subsequent entries define the coupling node coordinates in the order defined by the JNNUM array. When used with inertia relief loads, this array is not used. For all other uses the entry order follows that of the element definition node ordering.

# JNNUM

An array containing the NNODES node numbers. When used with a kinematic coupling definition, the first entry is the reference node number, and the second entry is the node number for the current coupling node. When used with a distributing coupling definition, the first entry is the reference node number followed by the node numbers of all coupling nodes. When used with inertia relief loads, this array is not used. For all other uses the entry order follows that of the element definition node ordering.

<!-- source-page: 105 -->

# 1.1.16 RSURFU: User subroutine to define a rigid surface.

# Product: Abaqus/Standard

# References

• “Analytical rigid surface definition,” Section 2.3.4 of the Abaqus Analysis User’s Guide   
• \*SURFACE   
• \*RIGID BODY   
• “RSURFU,” Section 4.1.10 of the Abaqus Verification Guide

# Overview

# User subroutine RSURFU:

• is used to define the surface of a rigid body for use in contact pairs;   
• can be used to define a complex rigid surface if the various capabilities provided for defining a surface in Abaqus (see “Analytical rigid surface definition,” Section 2.3.4 of the Abaqus Analysis User’s Guide) are too restrictive;   
• will be called at points on the slave surface of a contact pair or, if contact elements are used, at each integration point of each contact element with which the rigid surface is associated; and   
• requires the definition of the closest point on the rigid surface, the normal and tangent directions, and the surface curvature.

# Overpenetration constraint

This routine must determine if a point on the slave surface has penetrated the rigid surface and define the local surface geometry. If the deforming and rigid surfaces are in contact at this point, Abaqus/Standard will impose a constraint at the point to prevent overpenetration. The local surface geometry must be defined to provide the necessary orientation for the constraint equations and friction directions and to allow Abaqus/Standard to compute the rate of change of these equations as the point moves around on the surface—the “tangent stiffness matrix” for the surface in the Newton algorithm. For the purpose of these calculations, it is best to define a smooth surface. If the surface is defined in a discontinuous manner, convergence may be adversely affected.

# Calculations to be performed

Each time RSURFU is called, Abaqus/Standard gives the current position of point A on the surface of the deforming structure, $\mathbf { x } _ { A }$ ; the current position of the rigid body reference point, $\mathbf { x } _ { C } \mathrm { ; }$ ; the total displacements of both of these points, $\mathbf { u } _ { A }$ and $\mathbf { u } _ { C }$ ; and the total rotation of the rigid body reference point, $\phi _ { C }$ .

The routine should perform the following calculations:

<!-- source-page: 106 -->

1. A point, $A ^ { \prime } ,$ must be found on the rigid surface at which the normal to the surface passes through $\mathbf { x } _ { A }$ . If there is not a unique point $A ^ { \prime } ,$ the routine must choose the most suitable point (usually the closest A′ to A). The routine must pass back the coordinates of $A ^ { \prime }$ to Abaqus/Standard. For the surface-to-surface contact formulation, the slave normal, not the master normal, should be used.   
2. RSURFU must define the distance, h, by which A has penetrated the surface below A′. A negative value of h means that A is outside the surface of the rigid body.   
3. If the surfaces are in contact, which may sometimes be the case even if h is negative, RSURFU must define the local surface geometry.

# Defining the local surface geometry

There are two scenarios under which it is mandatory that the routine define the local surface geometry: if A has penetrated the surface— if the surface behavior is truly rigid, or h is greater than the maximum overclosure value specified for modified surface behavior using either contact controls (see “Adjusting contact controls in Abaqus/Standard,” Section 36.3.6 of the Abaqus Analysis User’s Guide) or a modified pressure-overclosure relationship (see “Contact pressure-overclosure relationships,” Section 37.1.2 of the Abaqus Analysis User’s Guide)—and if A was in contact at the beginning of the increment, in which case the flag LCLOSE=1 (see the variable list for the definition of LCLOSE). The variable LCLOSE is not relevant for the surface-to-surface contact formulation and is always passed in as 0. The routine can be coded so that local surface geometry definitions are always provided regardless of the scenario.

The local surface geometry is specified by two orthogonal tangents to the rigid surface at $A ^ { \prime } ,$ as well as the rates of change of the outward pointing normal at $A ^ { \prime } ,$ , , with respect to local surface coordinates that are distance measuring along the tangents, $S ^ { 1 }$ and $S ^ { 2 }$ (see Figure 1.1.16–1).

![](images/page-106_32d8871bb49521cac077e0a411d498a3f2dd8f21b9fae691fccd87ad51d6a9b7.jpg)

<details>
<summary>text_image</summary>

n
A
t²
S²
A′
S¹
t¹
</details>

Figure 1.1.16–1 Local geometry on a rigid surface.

The tangents to the surface at $A ^ { \prime }$ must be defined so that their positive, right-handed cross product is the outward normal to the surface. For two-dimensional cases Abaqus/Standard assumes that the second tangent is (0, 0, −1), so that when you give the direction cosines of the first tangent as $( t _ { 1 } , t _ { 2 } , 0 )$ , the

<!-- source-page: 107 -->

outward normal will be $( - t _ { 2 } , t _ { 1 } , 0 )$ . The rates of change of the normal with respect to $S ^ { 1 }$ and $S ^ { 2 }$ are required to define the local curvature of the surface.

User subroutine interface   
```txt
SUBROUTINE RSURFU(H, P, TGT, DNDS, X, TIME, U, CINAME, SLNAME, 1 MSNAME, NOEL, NODE, LCLOSE)
C
INCLUDE 'ABA_PARAM.INC'
C
CHARACTER*80 CINAME, SLNAME, MSNAME
C
DIMENSION P(3), TGT(3, 2), DNDS(3, 2), X(3, 3), TIME(2), U(6, 2)
user coding to define H, P, TGT, and DNDS
RETURN
END 
```  
Variables to be defined

H

Penetration of the point A on the deforming structure into the surface of the rigid body, measured down the outward normal to the rigid surface. A negative value of H indicates that A is outside the rigid surface. Even for a completely rigid surface, $A$ may appear to penetrate the surface during the iterations because the kinematic constraints are not fully satisfied until an increment converges.

P(3)

Position of the point $A ^ { \prime }$ on the surface of the rigid body closest to point A on the surface of the deforming structure.

TGT(3,2)

Direction cosines of the two unit tangents to the surface, $\mathbf { t } ^ { 1 }$ and $\mathbf { t } ^ { 2 } ,$ , at point A′. For two-dimensional cases only the first two components of $\mathbf { t } ^ { 1 }$ need be given since in this case Abaqus/Standard assumes that $\mathbf { t } ^ { 2 }$ is (0, 0, −1).

DNDS(3,2)

Rates of change of the surface normal, , at $A ^ { \prime } ,$ with respect to distance measuring coordinates, $S ^ { 1 }$ and $S ^ { 2 }$ , along $\mathbf { t } ^ { 1 }$ and $\mathbf { t } ^ { 2 }$ . For two-dimensional cases only the first two entries in the first column of DNDS $( \partial n _ { 1 } / \partial S ^ { 1 } , \partial n _ { 2 } / \partial S ^ { 1 } )$ are required. The array DNDS is not required to be assigned for the surface-tosurface contact formulation.

<!-- source-page: 108 -->

# Variables passed in for information

X(K1,1)

Current coordinates of point A on the surface of the deforming structure.

X(K1,2)

Current coordinates of the rigid body reference point.

X(K1,3)

Unit normal vector for point A; relevant only for the surface-to-surface contact formulation.

TIME(1)

Value of step time at the end of the increment.

TIME(2)

Value of total time at the end of the increment.

U(K1,1)

Total displacement of point A on the surface of the deforming structure.

U(K1,2)

Total displacement and rotation of the rigid body reference point; $k _ { 1 } = 1 , 2 , 3$ are the displacement components, $k _ { 1 } = 4 , 5 , 6$ are the rotation components. For two-dimensional cases the only nonzero rotation component is $k _ { 1 } = 6 \mathrm { : }$ : U(4,2) and U(5,2) are both zero.

# CINAME

User-specified surface interaction name, left justified. For user-defined contact elements it is either the element set name given for the interface definition or the optional name assigned to the interface definition.

# SLNAME

Slave surface name. Passed in as blank if RSURFU is called for contact elements.

# MSNAME

Master surface name. Passed in as blank if RSURFU is called for contact elements.

NOEL

Element label for contact elements. Passed in as zero if RSURFU is called for a contact pair.

NODE

Node number for point A. For the surface-to-surface contact formulation, this quantity is passed in as 0.

LCLOSE

Flag indicating contact status at the beginning of the increment. LCLOSE=1 indicates that A is in contact (closed) at the beginning of the increment. LCLOSE=0 indicates that A is not in contact (open)

<!-- source-page: 109 -->

at the beginning of the increment. If LCLOSE=1, P, TGT and DNDS must be defined even if A opens during this increment. LCLOSE is not used for the surface-to-surface contact formulation and is passed in as 0.

# Example: Rigid punch

The input files for the following examples can be found in “RSURFU,” Section 4.1.10 of the Abaqus Verification Guide. The following discussion pertains only to the node-to-surface contact formulation.

Consider the punch shown in Figure 1.1.16–2.

![](images/page-109_086fc60d83bb4dd3ca546f95e72b72562e5de88c25b26de1643aa118f2966d60.jpg)

<details>
<summary>text_image</summary>

z
x₁
A′
t¹
α
Q
α
β
b
a
x₁
A′
t¹
r
</details>

Figure 1.1.16–2 Cross-section of a rigid punch.

It consists of a spherical head of radius a, smoothly merging into a conical section with cone angle . The center of the sphere lies on the z-axis at Q. We assume that the punch is being driven down the z-axis by a prescribed displacement at the rigid body reference node defined as a boundary condition. (This same surface could be defined directly as a three-dimensional surface of revolution, as described in “Analytical rigid surface definition,” Section 2.3.4 of the Abaqus Analysis User’s Guide. We define it here in RSURFU as an illustration.)

A point (slave node) on the surface of the deforming body will be associated with the spherical head or with the conical part of the punch, depending on whether it lies above or below the cone that passes through $Q$ and the circle of intersection of the sphere and cone. Thus, define

$$
r = \sqrt {x _ {1} ^ {2} + x _ {2} ^ {2}}, \quad z = x _ {3}
$$

<!-- source-page: 110 -->

in the three-dimensional case or

$$
r = x _ {1}, \quad z = x _ {2}
$$

in the axisymmetric case. Then, if $\alpha < z _ { Q } - z _  $ , the point is associated with the spherical surface. Otherwise, it is associated with the cone (both cases are indicated in Figure 1.1.16–2).

Consider first the axisymmetric case. Then, for $\alpha < z _ { Q } - z$ (the sphere) the overclosure is

$$
h = a - b,
$$

where

$$
b = \sqrt {r ^ {2} + (z - z _ {Q}) ^ {2}}.
$$

The position of the point A′ on the rigid surface is ( $\beta , z _ { Q } - a$ , 0), where

$$
\cos \beta = r / b, \quad \mathrm{and} \quad \sin \beta = (z _ {Q} - z) / b.
$$

The tangent to the rigid surface at A′ is $\mathbf { t } ^ { 1 } = \left( - \sin { \beta } , - \cos { \beta } , 0 \right)$ The positive direction for $\mathbf { t } ^ { 1 }$ must be chosen so that the normal satisfies the right-hand rule with respect to $\mathbf { t } ^ { 1 }$ and $\mathbf { t } ^ { 2 }$ and points out of the rigid body. Also, $d S ^ { 1 } = a d \beta$ , so that

$$
\frac {\partial \mathbf {n}}{\partial S ^ {1}} = (- \frac {1}{a} \sin \beta , - \frac {1}{a} \cos \beta , 0).
$$

For $\alpha > z _ { Q } - z$ (the conical surface) the clearance is

$$
h = - r \cos \alpha + (z - z _ {Q}) \sin \alpha + a,
$$

and the position of the point A′ on the rigid surface is $( r + h \cos \alpha , z - h \sin \alpha )$ The surface tangent is $\mathbf { t } ^ { 1 } = \left( - \sin \alpha , - \cos \alpha , 0 \right)$ and there is no change in with position, so that

$$
\frac {\partial \mathbf {n}}{\partial S ^ {1}} = (0, 0, 0).
$$

The routine can then be coded as follows:
```csv
SUBROUTINE RSURFU(H,P,TGT,DNDS,X,TIME,U,CINAME,SLNAME,1 MSNAME,NOEL,NODE,LCLOSE)
C
INCLUDE 'ABA_PARAM.INC'
C
CHARACTER*80 CINAME,SLNAME,MSNAME
DIMENSION P(3),TGT(3,2),DNDS(3,2),X(3,2),TIME(2),U(6,2)
C
C DEFINE THE FOLLOWING QUANTITIES: 
```
