<!-- source-page: 111 -->

```prolog
C A = RADIUS 'A' OF THE SPHERICAL HEAD
C SINA = SINE (CONE ANGLE ALPHA)
C COSA = COSINE (CONE ANGLE ALPHA)
C Z0 = ORIGINAL 'Z' COORDINATE OF POINT 'Q'
C
A=5.0
SINA=0.5
COSA=0.86602
Z0=6.0
ZQ=Z0 + U(2,2)
C
C TEST FOR SEGMENT
C
IF(X(1,1)*SINA/COSA.LT.ZQ-X(2,1)) THEN
C
C SPHERE
C
B=SQRT(X(1,1)**2 + (X(2,1)-ZQ)**2)
H=A-B
COSB=X(1,1)/B
SINB=(ZQ-X(2,1))/B
P(1)=A*COSB
P(2)=ZQ-A*SINB
TGT(1,1)=-SINB
TGT(2,1)=-COSB
DNDS(1,1)=-SINB/A
DNDS(2,1)=-COSB/A
ELSE
C CONE
H=-X(1,1)*COSA+(X(2,1)-ZQ)*SINA+A
P(1)=X(1,1) + H*COSA
P(2)=X(2,1) - H*SINA
TGT(1,1)=-SINA
TGT(2,1)=-COSA
DNDS(1,1)=0.
DNDS(2,1)=0.
END IF
RETURN
END 
```

The above case can be directly extended to three dimensions. For this purpose we assume that the radial axis, r, is in the global (x–y) plane, so that

<!-- source-page: 112 -->

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

For $\alpha < z _ { Q } - z$ (the sphere), the overclosure is $h = a - b$ , where again

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

The point $A ^ { \prime }$ on the rigid surface is ( , $\gamma , z _ { Q } - a \sin \beta )$ , where

$$
\cos \gamma = \frac {x _ {1}}{r}, \sin \gamma = \frac {x _ {2}}{r}.
$$

For $r = 0 , \gamma$ is not defined uniquely; in that case we arbitrarily choose $\gamma = 0$ . We now need two tangents to the surface. The tangent $\mathbf { t } ^ { 1 }$ used in the axisymmetric case is now

$$
\mathbf {t} ^ {1} = \left(- \sin \beta \cos \gamma , - \sin \beta \sin \gamma , - \cos \beta\right)
$$

and the orthogonal tangent is

$$
\mathbf {t} ^ {2} = (- \sin \gamma , \cos \gamma , 0).
$$

Again, the positive directions of $\mathbf { t } ^ { 1 }$ and $\mathbf { t } ^ { 2 }$ are chosen so that $\mathbf { t } ^ { 1 } \times \mathbf { t } ^ { 2 }$ defines an outward normal to the surface. The distance measures on the surface are

$$
d S ^ {1} = a d \beta , \quad d S ^ {2} = a \cos \beta d \gamma
$$

so that

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

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

For the conical surface ( $\alpha \geq z _ { Q } - z \ )$ , the surface separation is

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

The point $A ^ { \prime }$ on the rigid surface is $\left( \left( r + h \cos \alpha \right) \cos \gamma , \left( r + h \cos \alpha \right) \sin \gamma , z - h \sin \alpha \right)$ and the surface tangents are

$$
\mathbf {t} ^ {1} = \left(- \sin \alpha \cos \gamma , - \sin \alpha \sin \gamma , - \cos \alpha\right)
$$

$$
\mathbf {t} ^ {2} = (- \sin \gamma , \cos \gamma , 0).
$$

There is no change of with respect to $S ^ { 1 }$ , and, in this case $d S ^ { 2 } = c d \gamma$ , where $c = r + h$ so that

<!-- source-page: 113 -->

$$
\frac {\partial \mathbf {n}}{\partial S ^ {2}} = \left(- \frac {1}{c} \cos \alpha \sin \gamma , + \frac {1}{c} \cos \alpha \cos \gamma , 0\right).
$$

The routine can then be coded as follows:
```fortran
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:
C A = RADIUS 'A' OF THE SPHERICAL HEAD
C SINA = SINE (CONE ANGLE ALPHA)
C COSA = COSINE (CONE ANGLE ALPHA)
C Z0 = ORIGINAL 'Z' COORDINATE OF POINT 'Q'
C
A=5.0
SINA=0.5
COSA=0.86603
Z0=5.0
ZQ= Z0 + U(3,2)
C
C TEST FOR SEGMENT
C
R = SQRT(X(1,1)*X(1,1)+X(2,1)*X(2,1))
IF(R .GT. 0.0) THEN
COSG = X(1,1)/R
SING = X(2,1)/R
ELSE
COSG = 1.0
SING = 0.0
END IF
IF(R*SINA/COSA .LT. ZQ -X(3,1)) THEN
C
C SPHERE
C
B=SQRT(R*R+(X(3,1)-ZQ)**2)
H=A-B
COSB=R/B
SINB=(ZQ-X(3,1))/B 
```

<!-- source-page: 114 -->

```prolog
P(1)=A*COSB*COSG
P(2)=A*COSB*SING
P(3)=ZQ-A*SINB
TGT(1,1)=-SINB*COSG
TGT(2,1)=-SINB*SING
TGT(3,1)=-COSB
TGT(1,2)=-SING
TGT(2,2)=COSG
TGT(3,2)=0.0
DNDS(1,1)=-SINB*COSG/A
DNDS(2,1)=-SINB*SING/A
DNDS(3,1)=-COSB/A
DNDS(1,2)=-SING/A
DNDS(2,2)=COSG/A
DNDS(3,2)=0.0
ELSE
C
C CONE
C
H=-R*COSA+(X(3,1)-ZQ)*SINA+A
P(1)=(R+H*COSA)*COSG
P(2)=(R+H*COSA)*SING
P(3)=X(3,1)-H*SINA
TGT(1,1)=-SINA*COSG
TGT(2,1)=-SINA*SING
TGT(3,1)=-COSA
TGT(1,2)=-SING
TGT(2,2)=COSG
TGT(3,2)=0.0
DNDS(1,1)=0.0
DNDS(2,1)=0.0
DNDS(3,1)=0.0
C=R+H*COSA
DNDS(1,2)=-COSA*SING/C
DNDS(2,2)=COSA*COSG/C
DNDS(3,2)=0.0
END IF
C
RETURN
END 
```

<!-- source-page: 115 -->

# 1.1.17 SDVINI: User subroutine to define initial solution-dependent state variable fields.

# Product: Abaqus/Standard

# References

• “User subroutines: overview,” Section 18.1.1 of the Abaqus Analysis User’s Guide   
• \*INITIAL CONDITIONS   
• “SDVINI,” Section 4.1.11 of the Abaqus Verification Guide

# Overview

# User subroutine SDVINI:

• will be called for user-subroutine-defined initial solution-dependent state variable fields at particular material points, shell section points, contact slave nodes, or for user elements (see “Initial conditions in Abaqus/Standard and Abaqus/Explicit,” Section 34.2.1 of the Abaqus Analysis User’s Guide);   
• can be used to initialize solution-dependent state variables allocated as described in “Allocating space” in “User subroutines: overview,” Section 18.1.1 of the Abaqus Analysis User’s Guide; and   
• returns a value of zero for any solution-dependent state variables that have no defined initial condition.

# Use of solution-dependent state variables in other user subroutines

Solution-dependent state variables initialized in SDVINI can be used and updated in the following user subroutines:

• CREEP   
• FRIC   
• HETVAL   
• UEL   
• UEXPAN   
• UGENS   
• UHARD   
• UMAT   
• UMATHT   
• USDFLD   
• UTRS

The solution-dependent state variables are passed into these routines in the order in which they are entered in SDVINI.

<!-- source-page: 116 -->

User subroutine interface   
```prolog
SUBROUTINE SDVINI (STATEV, COORDS, NSTATV, NCRDS, NOEL, NPT, 1 LAYER, KSPT)
C
INCLUDE 'ABA_PARAM.INC'
C
DIMENSION STATEV (NSTATV), COORDS (NCRDS)
user coding to define STATEV (NSTATV)
RETURN
END 
```

Variables to be defined   
```txt
STATEV (1)
First solution-dependent state variable.

STATEV (2)
Second solution-dependent state variable.

STATEV (3)
Third solution-dependent state variable.

Etc.
Only NSTATV solution-dependent state variable values should be defined. 
```

Variables passed in for information   
```txt
COORDS
An array containing the initial coordinates of this point. Coordinates are not available for user elements.

NSTATV
User-defined number of solution-dependent state variables (see “Allocating space” in “User subroutines: overview,” Section 18.1.1 of the Abaqus Analysis User’s Guide).

NCRDS
Number of coordinates. This value is zero for user elements.

NOEL
Element number. 
```

<!-- source-page: 117 -->

# NPT

Integration point number in the element (not relevant for user elements).

# LAYER

Layer number (for composite shells and layered solids).

# KSPT

Section point number within the current layer or section. Section point 1 is used for all pure heat transfer, coupled temperature-displacement, and coupled thermal-electrical-structural analyses.

<!-- source-page: 118 -->

<!-- source-page: 119 -->

# 1.1.18 SIGINI: User subroutine to define an initial stress field.

# Product: Abaqus/Standard

# References

• “Initial conditions in Abaqus/Standard and Abaqus/Explicit,” Section 34.2.1 of the Abaqus Analysis User’s Guide   
• \*INITIAL CONDITIONS

# Overview

User subroutine SIGINI:

• will be called for user-subroutine-defined initial stress fields at particular material points (these are the effective stress values for soils analysis);   
• is called at the start of the analysis for each applicable material calculation point in the model; and   
• can be used to define all active initial stress components at material points as functions of coordinates, element number, integration point number, etc.

# Stress components

The number of stress components that must be defined depends on the element type for which this call is being made. Part VI, “Elements,” of the Abaqus Analysis User’s Guide,” describes the element stresses. The order in which the components must be defined is the same as in the element definition. For example, in three-dimensional continuum elements six stress components must be defined in the order 011,022,033,012,013,023.

# Initial stress field equilibrium

You should ensure that the initial stress field is in equilibrium with the applied forces and distributed loads by using a static step or a geostatic step to check the equilibrium of the initial stress field before starting the response history. See “Geostatic stress state,” Section 6.8.2 of the Abaqus Analysis User’s Guide, for a discussion of defining initial equilibrium conditions for problems that include pore fluid pressure.

# User subroutine interface

```txt
SUBROUTINE SIGINI (SIGMA, COORDS, NTENS, NCRDS, NOEL, NPT, LAYER, 1 KSPT, LREBAR, NAMES)
C
INCLUDE 'ABA_PARAM.INC'
C 
```

<!-- source-page: 120 -->

DIMENSION SIGMA(NTENS),COORDS(NCRDS) CHARACTER NAMES(2)\*80

user coding to define SIGMA(NTENS)

RETURN END

# Variables to be defined

# SIGMA(1)

First stress component.

# SIGMA(2)

Second stress component.

# SIGMA(3)

Third stress component.

# Etc.

Only NTENS stress values should be defined, where NTENS depends on the element type.

# Variables passed in for information

# COORDS

An array containing the initial coordinates of this point.

# NTENS

Number of stresses to be defined, which depends on the element type.

# NCRDS

Number of coordinates.

# NOEL

Element number.

# NPT

Integration point number in the element.

# LAYER

Layer number (for composite shells and layered solids).

# KSPT

Section point number within the current layer.
