# Engine Subroutine SIGEPSnn for Solid Elements

This subroutine calculates the stress tensor versus the strain tensor, strain rate tensor, density, volume, internal energy, or user-defined variables.

## Arguments

The argument list of SIGEPSnn and its individual arguments and descriptions are:
C-----------------------------------------------------------------------------------------
SUBROUTINE SIGEPS29 (
1     NEL    ,NUPARAM,NUVAR   ,NFUNC   ,IFUNC   ,NPF
2     TF     ,TIME   ,TIMESTEP,UPARAM  ,RHO0    ,RHO    ,
3     VOLUME ,EINT   ,
4     EPSPXX ,EPSPYY ,EPSPZZ  ,EPSPXY  ,EPSPYZ  ,EPSPZX ,
5     DEPSXX ,DEPSYY ,DEPSZZ  ,DEPSXY  ,DEPSYZ  ,DEPSZX ,
6     EPSXX  ,EPSYY  ,EPSZZ   ,EPSXY   ,EPSYZ   ,EPSZX  ,
7     SIGOXX ,SIGOYY ,SIGOZZ  ,SIGOXY  ,SIGOYZ  ,SIGOZX ,
8     SIGNXX ,SIGNYY ,SIGNZZ  ,SIGNXY  ,SIGNYZ  ,SIGNZX ,
9     SIGVXX ,SIGVYY ,SIGVZZ  ,SIGVXY  ,SIGVYZ  ,SIGVZX ,
A     SOUNDSP,VISCMAX,UVAR    ,OFF     )
C-----------------------------------------------------------------------------------------
The user’s material law can be used in isotropic or orthotropic modes.
• With isotropic mode, the directions XX, YY, ... are the global reference frame axis. The old elastoplastic stresses (arrays SIGOXX, SIGOYY, ...) are already rotated to take into account the rigid body rotation.
• With orthotropic mode, the directions are the orthotropic frame axis
Use the Fortran float external function FINTER (shown below) to get the value Y of the function for the abscissa X.
Y=FINTER(IFUNC(I),X,NPF,TF,DYDX)
Where,
Variable
Description
Y
Interpolated value
X
Abscissa value of the function
I
The ith user’s function
DYDX
Slope
NPF, TF
Private function parameters

The SOUNDSP array is used in the calculation of the stability time step, the hourglass forces, and the artificial viscous pressure Q.

For isotropic materials, the sound speed value should be equal to the plane wave speed.

For elastic or elastoplastic materials, the sound speed is given by:(1) $c=\sqrt{\frac{K+\text{4G}/\text{3}}{{\rho }_{\text{0}}}}=\sqrt{\frac{\lambda +\text{2μ}}{{\rho }_{\text{0}}}}$
Where,
Variable
Description
K
Bulk modulus
$K=\frac{E}{\text{3}\left(\text{1}-\text{2υ}\right)}$
G
Shear modulus
$G=\mu =\frac{E}{\text{2}\left(\text{1}+\upsilon \right)}$
$\lambda$ and $\mu$
Lame parameters
$\lambda +\text{2μ}=\frac{E\left(\text{1}-\upsilon \right)}{\left(\text{1}+\upsilon \right)\left(\text{1}-\text{2υ}\right)}$

Use VISCMAX to calculate the time step stability when the material law formulation is viscous.

## Definitions

Argument Format Description
NEL Integer read only scalar Number of elements per group. In Radioss Engine subroutines, the element data are treated by groups for vectorization. This argument is machine-dependent and set by Radioss.
NUPARAM Integer read only scalar Size of the user parameter array.
NUVAR Integer read only scalar Number of user element variables.
NFUNC Integer read only scalar Number of functions used for material law.
IFUNC Integer array read only Array of size NFUNC with function indexes.
NPF Integer array private data Array used by FINTER (float external function).
TF Integer array private data Array used by FINTER (float external function).
TIME Float read only Current time.
TIMESTEP Float read only Current time step.
UPARAM Float array read only User material parameter array of size NUPARAM.
RHO0 Float array read only Array of size NEL containing initial densities.
RHO Float array read only Array of size NEL containing current densities.
VOLUME Float array read only Array of size NEL containing current element volumes.
EINT Float array read only Array of size NEL containing total internal energy.
EPSPXX, EPSPYY, EPSPZZ, EPSPXY, EPSPYZ, EPSPZX Float array read only Arrays of size NEL containing $\text{ε}$ strain rates in directions XX, YY, and ZZ and $\gamma$ strain rates in directions XY, YZ, ZX.
DEPSXX, DEPSYY, DEPSZZ, DEPSXY, DEPSYZ, DEPSZX Float array read only Arrays of size NEL containing $\text{ε}$ strain increments in directions XX, YY, and ZZ and $\gamma$ strain increments in directions XY, YZ, and ZX.
EPSXX, EPSYY, EPSZZ, EPSXY, EPSYZ, EPSZX Float array read only Array of size NEL containing $\text{ε}$ strains in directions XX, YY, and ZZ and $\gamma$ strains in directions XY, YZ, and ZX.
SIGOXX, SIGOYY, SIGOZZ, SIGOXY, SIGOYZ, SIGOZX Float array read only Array of size NEL with old (previous time step) elastoplastic stresses in directions XX, YY, ZZ, XY, YZ, and ZX.
SIGNXX, SIGNYY, SIGNZZ, SIGNXY, SIGNYZ, SIGNZX Float array write only Array of size NEL with new computed elastoplastic stresses in directions XX, YY, ZZ, XY, YZ, and ZX.
SIGVXX, SIGVYY, SIGVZZ, SIGVXY, SIGVYZ, SIGVZX Float array write only Array of size NEL containing viscous stresses in directions XX, YY, ZZ, XY, YZ, and ZX.
SOUNDSP Float array write only Array of size NEL containing sound speed.
VISCMAX Float array write only Array of size NEL containing the maximum damping modulus.
UVAR Float array read write Array of size NEL*NUVAR containing user element variables.
OFF Float array read write Array of size NEL containing deleted element flags.
0
If the element is OFF
1
If the element is ON

## Data Necessary for HEPH Compatibility

You must provide Radioss with plasticity information to calculate physical stabilization forces of HEPH. Yield and Plastic strain values must be given back to Radioss in the user law (SIGEPS29.F, SIGEPS.F, or SIGEPS.F) to be compatible with the HEPH element. This can be done through a call to routine SET_U_SOLPLAS.

The prototype of this routine and the necessary data to provide are:
C---------------------------------------------------------------------
C     New routine : SET_U_SOLPLAS allows to return to Altair Radioss,
C                                Yield and Plastic strain for all elements.
C
C      Description of the arguments to be given to
C      SET_U_SOLPLAS(NEL,YLD,PLA) :
C---------+-----------+---+--------------------------------------------
C VAR     | SIZE      |TYP| DEFINITION
C----------+--------+---+----------------------------------------------
C NEL    |  1         | I  |   NUMBER OF ELEMENTS
C YLD    |  NEL    | F |  YIELD VALUE FOR EACH ELEMENT,
C                              (FOR THE CURRENT INTEGRATION POINT)
C PLA    |  NEL     | F |  PLASTIC STRAIN VALUE FOR EACH ELEMENT,
C                              (FOR THE CURRENT INTEGRATION POINT)
C---------+---------+---+---------------------------------------------

The arrays YLD and PLA, defined in the routine SET_U_SOLPLAS, have to be declared as local variables in the user material routines SIGEPS29.F, SIGEPS30.F, and SIGEPS31.F with a sufficiently-long NEL.

It is recommended to use the following statement, if these routines are compiled with a compiler that supports Fortran 90.
DOUBLE PRECISION YLD(NEL), PLA(NEL)
This statement is not possible if the compiler only supports Fortran 77, since NEL is set by Radioss and given as an argument to the user routine. Therefore, the dynamic allocation is intended in this statement.
DOUBLE PRECISION YLD(4096), PLA(4096)

The statement must be sufficient in all cases, meaning the value of NEL given from Radioss to the user routine should be less than 4096.