Anda di halaman 1dari 143

RADIOSS USER’S CODE INTERFACE

Octobre 2011

Altair Engineering, Inc., World Headquarters: 1820 E. Big Beaver Rd., Troy MI 48083-2031 USA
Phone: +1.248.614.2400 • Fax: +1.248.614.2411 • www.altair.com • info@altair.com
RADIOSS USER’S CODE CONTENTS

TABLE OF CONTENTS

TABLE OF CONTENTS ......................................................................................................................... 1

INTRODUCTION .................................................................................................................................... 3

1 GLOBAL USER WINDOW............................................................................................................ 7


1.1 STARTER SUBROUTINE USERWIS ............................................................................................................ 7
1.2 ENGINE SUBROUTINE USERWI ................................................................................................................. 8
1.3 EXAMPLE of user window ............................................................................................................................ 10
1.3.1 Starter user’s subroutine USERWIS ........................................................................................................ 10
1.3.2 Engine user’s subroutine USERWI .......................................................................................................... 11
2 USER MATERIAL LAWS 29, 30, 31 .......................................................................................... 12
2.1. STARTER SUBROUTINE LECMnn .................................................................................................... 12
2.2. ENGINE SUBROUTINE SIGEPSnn for SOLID elements ................................................................... 13
2.2.1. Additional necessary data for compatibility with HEPH ................................................................... 16
2.3. EXAMPLE of user’s material law for SOLID elements ........................................................................ 17
2.3.1. User’s input data (/MAT/USERn/ option)........................................................................................ 17
2.3.2. Starter user’s subroutine LECMnn .................................................................................................... 17
2.3.3. Engine user’s subroutine SIGEPSnn ................................................................................................. 19
2.4. ENGINE SUBROUTINE SIGEPSnnC for SHELL elements ................................................................ 20
2.4.1. Shell element law output ................................................................................................................... 23
2.4.2. Additional data necessary for compatibility with QEPH ................................................................... 24
2.5. EXAMPLE of user’s material law for SHELL elements ........................................................................ 25
2.5.1. User’s input data (/MAT/USERn/ option)......................................................................................... 25
2.5.2. Starter user’s subroutine LECMnn .................................................................................................... 25
2.5.3. Engine user’s subroutine SIGEPSnnC............................................................................................... 27
3 EXTENDED USER MATERIAL LAWS ......................................................................................... 35
3.1 STARTER SUBROUTINE LECMUSERnn .............................................................................................. 35
3.2 ENGINE SUBROUTINE LUSERnn for SOLID elements......................................................................... 36
3.2.1 Additional necessary data for compatibility with HEPH ................................................................... 39
3.3 EXAMPLE of user’s material law for SOLID elements ............................................................................. 39
3.3.1 User’s input data (/MAT/USERnn/ option) ...................................................................................... 40
3.3.2 Starter user’s subroutine LECMUSERnn .......................................................................................... 40
3.3.3 Engine user’s subroutine LUSERnn .................................................................................................. 41
3.4 ENGINE SUBROUTINE LUSERnnC for SHELL elements ..................................................................... 44
3.4.1 Shell element law output ................................................................................................................... 47
3.4.2 Additional data necessary for compatibility with QEPH ................................................................... 48
3.5 EXAMPLE of user’s material law for SHELL elements ............................................................................ 48
3.5.1 User’s input data (/MAT/USERnn/ option) ....................................................................................... 48
3.5.2 Starter user’s subroutine LECMUSERnn .......................................................................................... 49
3.5.3 Engine user’s subroutine LUSERnnC ............................................................................................... 50
4. USER PROPERTY ELEMENTS ..................................................................................................... 59
4.1 STARTER SUBROUTINE LECGnn for SPRING and SOLID elements .................................................. 59
4.2 STARTER SUBROUTINE initialization RINInn for SPRING elements ................................................... 60
4.3 STARTER SUBROUTINE initialization SINInn for SOLID elements...................................................... 61
4.4 ENGINE SUBROUTINE RUSERnn for SPRING elements ...................................................................... 63
4.5 ENGINE SUBROUTINE SUSERnn for SOLID elements ......................................................................... 65
4.6 Functions to access user’s properties and materials .................................................................................... 68
4.6.1 Store and restore functions for user subroutines ................................................................................ 68
4.6.2 The storage functions : ...................................................................................................................... 68
4.6.3 The restore functions for user properties, materials and functions: ................................................... 69
4.6.4 Example of storage / retrieve procedures for RADIOSS functions and tables .................................. 71

October, 2011 1
RADIOSS USER’S CODE CONTENTS

4.7 EXAMPLE of user’s SPRING element ...................................................................................................... 74


4.7.1 User’s input data (/PROP/USERn/ option) ....................................................................................... 74
4.7.2 Starter property user’s subroutine LECGnn ...................................................................................... 75
4.7.3 Starter property initialization user’s subroutine RINInn.................................................................... 76
4.7.4 Starter material user’s subroutine LECMnn ...................................................................................... 79
4.7.5 Engine property user’s subroutine RUSERnn ................................................................................... 81
4.8 EXAMPLE of user’s triangular SHELL elements (using solid property) ................................................... 85
4.8.1 User’s input data (/MAT/PROPn/ option) ......................................................................................... 85
4.8.2 Starter property user’s subroutine LECGnn ...................................................................................... 85
4.8.3 Starter property initialization user’s subroutine SINInn .................................................................... 87
4.8.4 Starter material user’s subroutine LECMnn ...................................................................................... 91
4.8.5 Engine property user’s subroutine SUSERnn .................................................................................... 92
4.8.6 Engine material user’s subroutine SIGEPSnn ................................................................................. 101
5 USER SENSORS .......................................................................................................................... 103
5.1 STARTER SUBROUTINE LECSEN_USRn ............................................................................................... 103
5.1.1 Storage functions for sensor parameters (starter only) .................................................................... 103
5.2 ENGINE SUBROUTINE USER_SENSn ................................................................................................ 104
5.3 Functions for user’s sensors ...................................................................................................................... 104
5.3.1 Restore functions for sensor parameters: ......................................................................................... 104
5.3.2 Read / write functions of working array buffer:.............................................................................. 104
5.3.3 Setting/ checking global activation flag.......................................................................................... 105
5.3.4 Access functions to RADIOSS time/cycle variables. ...................................................................... 105
5.3.5 Nodal value access : ........................................................................................................................ 105
5.3.6 Accelerator access functions ........................................................................................................... 106
5.4 EXAMPLE of user’s sensor ...................................................................................................................... 107
5.4.1 User’s input data (/SENSOR/USERm option) ................................................................................ 107
5.4.2 Starter sensor user’s subroutine LECSEN_USRm .......................................................................... 107
5.4.3 Starter material user’s subroutine LECMnn .................................................................................... 108
5.4.4 Engine sensor user’s subroutine USER_SENSm............................................................................. 110
5.4.5 Engine material user’s subroutine SIGEPSnnC for shell elements .................................................. 111
6. USER FAILURE MODELS ............................................................................................................ 113
6.2 ENGINE Subroutine for solid elements (FnnLAW): .................................................................................... 114
6.4 EXAMPLE SUBROUTINE OF USER FAILURE MODEL FOR SHELL and SOLID elements for
RADIOSS STARTER ......................................................................................................................................... 118
6.4.1 Engine user’s subroutine for SOLID elements ....................................................................................... 119
6.4.2 Engine user’s subroutine for SHELL elements................................................................................ 120
APPENDIX ........................................................................................................................................... 123

APPENDIX 1 – Creating user’s executables ..................................................................................... 124

APPENDIX 2 – Available user’s arguments ..................................................................................... 128


1. Available starter user’s arguments ............................................................................................................ 128
2. Available engine user’s arguments............................................................................................................ 130
APPENDIX 3 – Communication between user’s subroutines and RADIOSS code ...................... 134

APPENDIX 4 – General user’s subroutine format with material laws 29, 30, 31 ......................... 139
1. Starter format (example) ........................................................................................................................... 139
2. Engine format (example) .......................................................................................................................... 140
APPENDIX 5 – General user’s subroutine format with extended user material laws ................. 141
1. Starter format (example) ................................................................................................................................. 141
2. Engine format (example) ................................................................................................................................. 142

October, 2011 2
RADIOSS USER’S CODE INTRODUCTION

INTRODUCTION

This document describes the interface between RADIOSS and user’s subroutines.

RADIOSS allows user to define a private code of five different categories:


- User window (general interface for external code)
- User material laws for solids and shells
- User spring elements
- User solid elements (may be degenerated to shell or beam elements)
- User sensors

To link to RADIOSS a user module of each category, one has to provide two subroutines ;
one linked with RADIOSS STARTER and the other with RADIOSS ENGINE. The
STARTER subroutines are only used to read user data and initialise specified parameters. The
ENGINE subroutines define and execute user programs. Storage arrays are provided for each
type of application. The communication between RADIOSS and the User’s subroutines is
done by passing function arguments and by specialized functions. The function arguments are
used for general purpose user window interface, user materials and elements. Only integer and
float variables or arrays are used. The float arguments are DOUBLE PRECISION on
workstation (DEC, HP, SGI, SUN, IBM...) and REAL on CRAY.

Otherwise, all user subroutines may use special access functions to retrieve information
from RADIOSS database.

In next chapters we will describe the standarized headers for each user subroutine, the
access functions and link procedures. Example program codes for each category will also be
provided.

October, 2011 3
RADIOSS USER’S CODE INTRODUCTION

Table 1: RADIOSS STARTER/ ENGINE subroutines and executables.

RADIOSS STARTER RADIOSS ENGINE

USER’S INPUT OPTIONS ENGINE FILE OPTIONS


(specify user data and storrage arrays) (save user variables in animations)

User material /MAT/USERn


/ANIM/keyword/USRi
User property /PROP/USERn
/ANIM/keyword/USRj/k
User sensor /SENSOR/USERm

USER’S SUBROUTINES

Read and initialise user data: Define and execute user programs:

User window USERWIS.f USERWI.f

User material shell LECMnn.f SIGEPSnnC.f


laws 29, 30, 31 solid LECMnn.f SIGEPSnn.f

spring LECGnn.f and RINInn.f RUSERnn.f


User property
solid LECGnn.f and SINInn.f SUSERnn.f

User sensor LECSEN_USERm.f USER_SENm.f

OBJECT FILES (compile user’s subroutines to get object files)

User window USERWIS.o USERWI.o


User shell LECMnn.o SIGEPSnnC.o
material
laws 29, 30, solid LECMnn.o SIGEPSnn.o
31

User spring LECGnn.o and RINInn.o RUSERnn.o


property solid LECGnn.o and SINInn.o SUSERnn.o

User sensor LECSEN_USERm.o USER_SENm.o

OBJECT LIBRARY (link object files to get new executables)

"RADIOSS_engine_library".a "RADIOSS_starter_library".a

USER’S EXECUTABLES
"user_engine_executable" "user_starter_executable"

(nn = 29, 30 or 31 ; n = 1, 2 or 3 ; m = 1, 2, 3, … ; i = 1 to 18 ; j = 1 to 99 ; k = 1 to 99)

October, 2011 4
RADIOSS USER’S CODE INTRODUCTION

RADIOSS Materials Materials RADIOSS


STARTER Properties Properties ENGINE
Sensors Sensors

Read user’s data stored in Define and execute


user’s options (starter input file) user’s program(s)

Initialize user’s variables

Communication by: Return user’s input data using: Communication by:


- user’s arguments - starter user’s arguments - user’s arguments
(defined in headers) - access functions (GET_U) (defined in headers)

RADIOSS STARTER STARTER USER’S ENGINE USER’S RADIOSS ENGINE


CODE (database) SUBROUTNE(S) SUBROUTNE(S) CODE (database)

Compile Compile
STARTER library ENGINE library

Link Link

STARTER EXECUTABLE ENGINE EXECUTABLE

Program starter Engine file D01 Program engine

Save general results


Save user’s variables
Starter INPUT file RESTART file Engine OUTPUT file
General
options
User’s options
Starter LISTING file Engine LISTING file
Print report about general model Print report about general model
Print information about user’s options Print information about user’s options

Figure 1: STARTER and ENGINE procedures including user’s options.

Save user’s variable in the animation file:

The user’s variables UVAR(element_number,i) defined in the user’s material law can be
saved in animation file using the output USERi as keyword3 in the engine option /ANIM/
keyword2/ keyword3. The number of saved variables is limited to 18 ( 1 ≤ i ≤ 18 ). Results is
saved for each integration point.
Example: The user variable number 1 UVAR(element_number,1) is saved in animations by
the engine option: /ANIM/ELEM/USER1.
The number of user’s variables is set in NUVAR (starter argument).

October, 2011 5
RADIOSS USER’S CODE USER’S SUBROUTINES DESCRIPTION

USER’S SUBROUTINES DESCRIPTION

October, 2011 6
RADIOSS USER’S CODE GLOBAL USER’S WINDOW

1 GLOBAL USER WINDOW

Since version 4.4 of RADIOSS, it is possible to define a global user window. This is the
most general interface between Rasioss and external code.
To define a user’s window, one has to provide two subroutines. One of them must be linked
with RADIOSS STARTER and the other with RADIOSS ENGINE.
The STARTER subroutine is called USERWIS used to read the global data and to
initialize global memory.
The ENGINE subroutine is called USERWI and is used to compute the forces and
moments.

All communications between RADIOSS and the User’s subroutines are done through
the argument list.

1.1 STARTER SUBROUTINE USERWIS


This subroutine is used to read the User’s input data. The number of specific cards and the
format of these cards is fixed by the user.
The argument list of USERWIS is as follows:
-----------------------------------------------------------------------------------------
SUBROUTINE USERWIS(
1 IIN ,IOUT ,MAXNUVAR,NUVAR ,MAXNUVARI ,NUVARI ,
2 NUMNOD,IUPARAM,IUVAR ,ITAB ,
3 UVAR ,X ,V ,VR ,MASS ,INER )
-----------------------------------------------------------------------------------------
Where:
IIN (integer read only scalar): input file unit (starter input file) on which the data
are read.

IOUT (integer read only scalar): output file unit (starter listing file).

MAXNUVAR (integer scalar): maximum possible size of global user float array.
This is the maximum memory size available for float. If MAXNUVAR is smaller
than what you need, you have to increase the memory request in /MEMORY
option.

NUVAR (integer scalar): needed size of global user float array

MAXNUVARI (integer scalar): maximum possible size of global user integer


array. This is the maximum memory size available for integer. If MAXNUVARI
is smaller than what you need, you have to increase the memory request in
/MEMORY option.

October, 2011 7
RADIOSS USER’S CODE GLOBAL USER’S WINDOW

NUVARI (integer scalar): needed size of global user integer array.

NUMNOD (integer scalar): number of nodes (defined with /NODE option)

IUPARAM(*) (integer array): parameters to be transferred to RADIOSS. This


array is not yet used.

IUVAR(MAXNUVARI) (integer array): is an array of size MAXNUVARI in


RADIOSS Starter. This array is transmitted versus restart file to RADIOSS
Engine. In RADIOSS Engine this array has a size of NUVARI.

ITAB(NUMNOD) (integer array): is an array of size NUMNOD. This array define


the node ID versus RADIOSS internal node number.

UVAR(MAXNUVAR) (float array): is an array of size MAXNUVAR in


RADIOSS Starter. This array is transmitted versus restart file to RADIOSS
Engine. In RADIOSS Engine this array has a size of NUVAR.

X(3,NUMNOD) (float array): Nodal coordinates.

V(3,NUMNOD) (float array): Nodal initial velocities.

VR(3,NUMNOD) (float array): Nodal initial rotational velocities.

MASS(NUMNOD) (float array): Nodal mass.

INER(NUMNOD) (float array): Nodal spherical inertia.

1.2 ENGINE SUBROUTINE USERWI

This subroutine calculates the internal forces and moments versus the velocity, the old
forces and moments and user’s variables and parameters.

The argument list of USERWI is as follows:


-----------------------------------------------------------------------------------------
SUBROUTINE USERWI(
1 IIN ,IOUT ,NUVAR ,NUVARI ,NUMNOD ,NCYCLE ,
2 LENWA ,IUVAR ,ITAB ,
3 TT ,DT1 ,DT2 ,USREINT,EXWORK ,
4 UVAR ,D ,X ,V ,VR ,MASS ,
5 INER ,STIFN ,STIFR ,A ,AR ,WA )
-----------------------------------------------------------------------------------------

October, 2011 8
RADIOSS USER’S CODE GLOBAL USER’S WINDOW

where:
IIN (integer read only scalar): input file unit (engine file)

IOUT (integer read only scalar): output file unit (listing file)

NUVAR (integer read only scalar): size of user float array.

NUVARI (integer read only scalar): size of user integer array.

NUMNOD (integer read only scalar): number of nodes

NCYCLE (integer read only scalar): current cycle number

IUVAR(NUVARI) (integer read-write array): is an array of size NUVARI. This


array contain user data and variables and is saved on restart file.

ITAB(NUMNOD) (integer read only array): is an array of size NUMNOD. This


array define the node ID versus RADIOSS internal node number.

TT (float read only scalar): current time

DT1 (float read only scalar): current time step

DT2 (float write only scalar): user stability time step. With element time step
formulation DT2 has to be computed at each cycle.

USREINT (float read write scalar):user window internal energy.

EXWORK (float read write scalar):external work. variable has to be increased if


needed..

UVAR(NUVAR) (float read-write array): is an array of size NUVAR . This array


contain user data and variables and is saved on restart file.

D(3,NUMNOD) (float read only array): Nodal displacements.

X(3,NUMNOD) (float read only array): Nodal coordinates.

V(3,NUMNOD) (float read only array): Nodal initial velocities.

VR(3,NUMNOD) (float read only array): Nodal initial rotational velocities.

MASS(NUMNOD) (float read only array): Nodal mass.

INER(NUMNOD) (float read only array): Nodal spherical inertia.

October, 2011 9
RADIOSS USER’S CODE GLOBAL USER’S WINDOW

STIFN(NUMNOD) (float read write array): Nodal stiffness for nodal time step
formulation. The added user stiffness has to be added to STIFN.

STIFR(NUMNOD) (float read write array): Nodal rotational stiffness for nodal
time step formulation. The added user stiffness has to be added to STIFR.

A(3,NUMNOD) (float read write array): Nodal forces. User forces have to be
added to A.

AR(3,NUMNOD) (float read write array): Nodal moments. User moments have to
be added to AR.

STIFN, STIFR are used by RADIOSS to compute the nodal or the element time
step. DT2 is needed to compute element.

1.3 EXAMPLE of user window

1.3.1 Starter user’s subroutine USERWIS

C-------------------------------------------------------------------------
C This subroutine initialize global user’s window
C-------------------------------------------------------------------------
SUBROUTINE USERWIS(
1 IIN ,IOUT ,MAXNUVAR,NUVAR ,MAXNUVARI ,NUVARI ,
2 NUMNOD,IUPARAM,IUVAR ,ITAB ,
3 UVAR ,X ,V ,VR ,MASS ,INER )
C-----------------------------------------------
C I m p l i c i t T y p e s
C-----------------------------------------------
C#include "implicit_f.inc"
C-----------------------------------------------
C The user’s data can be stored in UVAR for foating points and
C IUVAR for integers
C-----------------------------------------------
C D u m m y A r g u m e n t s
C-----------------------------------------------
DOUBLE PRECISION
. UVAR(MAXNUVAR) ,X(3,NUMNOD) ,V(3,NUMNOD) ,VR(3,NUMNOD) ,
. MASS(NUMNOD) ,INER(NUMNOD)
INTEGER
1 IIN ,IOUT ,MAXNUVAR ,NUVAR ,MAXNUVARI ,NUVARI ,
2 NUMNOD,IUVAR(MAXNUVARI),ITAB(NUMNOD),IUPARAM(*)
C

October, 2011 10
RADIOSS USER’S CODE GLOBAL USER’S WINDOW

RETURN
END

1.3.2 Engine user’s subroutine USERWI

C-------------------------------------------------------------------------
C Global user window subroutine
C-------------------------------------------------------------------------
SUBROUTINE USERWI(
1 IIN ,IOUT ,NUVAR ,NUVARI ,NUMNOD ,NCYCLE ,
2 LENWA ,IUVAR ,ITAB ,
3 TT ,DT1 ,DT2 ,USREINT,EXWORK ,
4 UVAR ,D ,X ,V ,VR ,MASS ,
5 INER ,STIFN ,STIFR ,A ,AR ,WA )
C
C-----------------------------------------------
C I m p l i c i t T y p e s
C-----------------------------------------------
C#include "implicit_f.inc"
C----------------------------------------------------------
C D u m m y A r g u m e n t s a n d F u n c t i o n
C----------------------------------------------------------
INTEGER
1 IIN ,IOUT ,NUVAR ,NUVARI,NUMNOD,NCYCLE ,LENWA,
2 IUVAR(NUVARI) ,ITAB(NUMNOD)
DOUBLE PRECISION
1 TT ,DT1 ,DT2 ,USREINT,EXWORK ,
2 UVAR(NUVAR) ,D(3,NUMNOD) ,X(3,NUMNOD) ,V(3,NUMNOD) ,
3 VR(3,NUMNOD) ,A(3,NUMNOD) ,AR(3,NUMNOD) ,MASS(NUMNOD) ,
4 INER(NUMNOD) ,STIFN(NUMNOD) ,STIFR(NUMNOD),WA(LENWA)
C=================================================================
C
C EXAMPLE :
C
C=================================================================
C-----------------------------------------------
C L o c a l V a r i a b l e s
C-----------------------------------------------
C-------------------------------
RETURN
END

October, 2011 11
RADIOSS USER’S CODE USER’S MATERIAL LAWS

2 USER MATERIAL LAWS 29, 30, 31

From version 2.3 of RADIOSS, it is possible to define up to 3 material user’s laws (law
number 29, 30 and 31) for 3D and 2D solid elements, and for 3D shell elements. User’s law
for beam or truss elements are not yet available.
To define a user’s law, one has to provide two subroutines for each law. One of this
subroutine must be linked with RADIOSS STARTER and the other with RADIOSS ENGINE.
The STARTER subroutine is called LECM29, LECM30 or LECM31 and is used to read
the material data and to initialize material parameters.
The ENGINE subroutine for solids is called SIGEPS29, SIGEPS30 or SIGEPS31 and is
used to compute the solid element stress tensor at the integration point. The corresponding
shell subroutines are SIGEPS29C, SIGEPS30C or SIGEPS31C.

All communications between RADIOSS and the User’s subroutines are done through
the argument list.

2.1. STARTER SUBROUTINE LECMnn


This subroutine is used to read the User’s law input data. The seven first material cards (see
RADIOSS STARTER Input manual 3.1 to 4.1) are read before this subroutine is called. The
number of specific material cards and the format of these cards is free.
The argument list of LECMnn is as follows:
------------------------------------------------------------------------------------------
SUBROUTINE LECMnn(IIN ,IOUT ,UPARAM ,MAXUPARAM,NUPARAM,
. NUVAR,IFUNC,MAXFUNC,NFUNC,PARMAT )
------------------------------------------------------------------------------------------

IIN (integer read only scalar): input file unit (starter input file) on which the data
are read.

IOUT (integer read only scalar): output file unit (starter listing file)

UPARAM (float array): array with a size NUPARAM used to store the material
data.

MAXNUPARAM (integer read only scalar): maximum possible size of UPARAM.

NUPARAM (integer scalar): effective size of UPARAM


(MAXNUPARAMŠNUPARAM, MAXNUPARAM is set to 1000)

NUVAR (integer scalar): number of extra variables needed for each element in
SIGEPSnn

October, 2011 12
RADIOSS USER’S CODE USER’S MATERIAL LAWS

IFUNC (integer array): Array with a size of NFUNC containing the list of
RADIOSS functions used for this law. The function numbers have to be stored in
this array and not in UPARAM because of a possible renumbering of the function
numbers.

MAXFUNC (integer read only scalar): maximum possible size of IFUNC.

NFUNC (integer scalar): number of RADIOSS functions. (MAXFUNCŠNFUNC,


MAXFUNC is set to 100)

STIFINT (float scalar): modulus needed to compute the interface stiffness. The
Young’s or the bulk modulus can be used to define this value. This value is also
used in RADIOSS STARTER to make an estimation of the time step.

2.2. 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 variables.

The argument list of SIGEPSnn is as follows:


------------------------------------------------------------------------------------------
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 )
------------------------------------------------------------------------------------------
The user’s material law can be used in isotropic or orthotropic mode. In isotropic mode the
directions XX, YY,... are the global reference frame axis. In isotropic mode the old
elastoplastic stresses (arrays SIGOXX, SIGOYY,...) are already rotated to take into account
the rigid body rotation.
In orthotropic mode the directions are the orthotropic frame axis.
One must use the Fortran float external function FINTER to get the value Y of the function
for the abscissa X.

October, 2011 13
RADIOSS USER’S CODE USER’S MATERIAL LAWS

Y=FINTER(IFUNC(I),X,NPF,TF,DYDX) with:
Y the interpolated value
X the abscissa value of the function
I the ith user’s function
DYDX is the slope
NPF and TF are private function parameters.
The SOUNDSP array should always be set by the user. It is used in the calculation of the
stability time step, of the hourglass forces and of the artificial viscous pressure Q. In isotropic
material the sound speed value should be equal to the plane wave speed.
For an elastic or elastoplastic material the sound speed is given by:

K + 4G / 3 λ + 2µ
c= =
ρ0 ρ0
with K the bulk modulus, G the shear modulus and λ and µ the Lame parameters.
E
K=
3(1 − 2υ )
E
G=µ=
2(1 + υ )
E (1 − υ )
λ + 2µ =
(1 + υ )(1 − 2υ )
The VISCMAX is used when the material law formulation is viscous and is used in the
calculation of the time step stability.
Argument description:

NEL (integer read only scalar): number of element per group. In RADIOSS
ENGINE the element data are treated by groups (for vectorization purpose). NEL
is machine dependent and is 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 this material law.

IFUNC (integer array read only): array of size NFUNC containing 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.

October, 2011 14
RADIOSS USER’S CODE USER’S MATERIAL LAWS

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 ε strain rates in directions XX, YY, ZZ and γ
strain rates in directions XY, YZ, ZX.

DEPSXX, DEPSYY, DEPSZZ, DEPSXY, DEPSYZ, DEPSZX (float array read


only): arrays of size NEL containing ε strain increments in directions XX, YY, ZZ
and γ strain increments in directions XY, YZ, ZX.

EPSXX, EPSYY, EPSZZ, EPSXY, EPSYZ, EPSZX (float array read only): array
of size NEL containing ε strains in directions XX, YY, ZZ and γ strains in
directions XY, YZ, ZX.

SIGOXX, SIGOYY, SIGOZZ, SIGOXY, SIGOYZ, SIGOZX (float array read


only): array of size NEL containing old (previous time step) elastoplastic stresses
in directions XX, YY, ZZ, XY, YZ, ZX.

SIGNXX, SIGNYY, SIGNZZ, SIGNXY, SIGNYZ, SIGNZX (float array write


only): array of size NEL containing new computed elastoplastic stresses in
directions XX, YY, ZZ, XY, YZ, 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, 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.
The values should be 0 if the element is OFF and 1 if the element is ON.

October, 2011 15
RADIOSS USER’S CODE USER’S MATERIAL LAWS

2.2.1. Additional necessary data for compatibility with HEPH


Since version 44q : an addition has been made so that user material routines can be
compatibled with HEPH solid elements.
A way has been introduced for the user material routines to send back to RADIOSS
additional information relative to plasticity, which is necessary for HEPH. The arguments of
sigeps29.F, sigeps30.F, sigeps31.F remain the same.
Yield value and Plastic strain value must be given back to RADIOSS in the user law
(sigeps29.F, sigeps30.F, or sigeps31.F) in order this law to be compatible with HEPH element.
This can be done through a call to routine SET_U_SOLPLAS, since version 44q.
The prototype of this routine and the necessary data to provide are described below.
C---------------------------------------------------------------------------
C New routine : SET_U_SOLPLAS allows to return to 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 which are defined in the routine SET_U_SOLPLAS have to be
declared as local variables in the user material routines sigeps29.F, sigeps30.F, sigeps31.F
with a sufficient length NEL.
It is recommanded to use the following statement in case of these routines are compiled with a
compiler which supports FORTRAN 90 :
DOUBLE PRECISION YLD(NEL), PLA(NEL)
But 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. In such a case, one can state :
DOUBLE PRECISION YLD(4096), PLA(4096)
which must be sufficient in all cases (the value of NEL given from RADIOSS to the user
routine is less than 4096).

October, 2011 16
RADIOSS USER’S CODE USER’S MATERIAL LAWS

2.3. EXAMPLE of user’s material law for SOLID elements

EXAMPLE: An elastic material law is defined for solid elements.


Input user’s data are: - density,
- Young’s modulus,
- Poisson ratio.

Model is made up with solid elements:

2.3.1. User’s input data (/MAT/USERn/ option)

[…]
#--1---|---2---|---3---|---4---|---5---|---6---|---7---|---8---|---9---|--10---|
/MAT/USER1/2/user’s elastic material law
# RHO
0.0027
# E Nu
60400 0.33
#--1---|---2---|---3---|---4---|---5---|---6---|---7---|---8---|---9---|--10---|
[…]

2.3.2. Starter user’s subroutine LECMnn

C=================================================================
C This subroutine reads the user material parameters.
C=================================================================
SUBROUTINE LECM29(IIN ,IOUT ,UPARAM ,MAXUPARAM,NUPARAM,
. NUVAR,IFUNC,MAXFUNC,NFUNC ,STIFINT)
C-----------------------------------------------
C I m p l i c i t T y p e s
C-----------------------------------------------
C IMPLICIT NONE
C-----------------------------------------------
C D u m m y A r g u m e n t s
C-----------------------------------------------
INTEGER IIN,IOUT,MAXUPARAM,NUPARAM,NUVAR,MAXFUNC,NFUNC,
. IFUNC(MAXFUNC)
DOUBLE PRECISION UPARAM(MAXUPARAM),STIFINT
C-----------------------------------------------
C L o c a l V a r i a b l e s
C-----------------------------------------------
DOUBLE PRECISION E,NU,A11,A12,A44
C
C======================================
C ELASTIC LAW WITH SOLIDS
C======================================
C

October, 2011 17
RADIOSS USER’S CODE USER’S MATERIAL LAWS

C-----------------------------------------------
C INPUT FILE READING (USER DATA)
C-----------------------------------------------
READ(IIN,'(2F16.0)')E,NU
A11 = E * (1.-NU) / (1.+NU) / (1.-2.*NU)
A12 = E * NU / (1.+NU) / (1.-2.*NU)
A44 = E / 2. / (1.+NU)
C
C-----------------------------------------------
C DATA CHECKING
C-----------------------------------------------
IF(NU.LT.0.0.OR.NU.GE.0.5)THEN
WRITE(IOUT,*)' ** ERROR : WRONG NU VALUE'
ENDIF
NUPARAM = 3
IF(NUPARAM.GT.MAXUPARAM)THEN
WRITE(IOUT,*)' ** ERROR : NUPARAM GT MAXUPARAM'
WRITE(IOUT,*)' NUPARAM =',NUPARAM,
. ' MAXUPARAM =',MAXUPARAM
ELSE
C-----------------------------------------------
C USER MATERIAL PARAMETERS DEFINITION
C-----------------------------------------------
C used in sigeps29 (solid 2d,3d)
UPARAM(1) = A11
UPARAM(2) = A12
UPARAM(3) = A44
ENDIF
C
C-------------------------------------------------
C NUMBER OF USER ELEMENT VARIABLES AND CURVES
C-------------------------------------------------
NUVAR = 0
NFUNC = 0
C
C-----------------------------------------------
C USED FOR SOLIDS
C-----------------------------------------------
C used for interface (solid+shell)
STIFINT = A11
C
C-------------------------------------------------
C OUTPUT FILE PRINT
C-------------------------------------------------
WRITE(IOUT,1000)
WRITE(IOUT,1100)E,NU
C
1000 FORMAT(
& 5X,' ELASTIC USER LAW 29',/,
& 5X,' ------------------ ',//)
1100 FORMAT(
& 5X,'E . . . . . . . . . . . . . . . . . . .=',E12.4/
& 5X,'NU. . . . . . . . . . . . . . . . . . .=',E12.4//)
C
C-------------------------------------------------
RETURN
END

October, 2011 18
RADIOSS USER’S CODE USER’S MATERIAL LAWS

2.3.3. Engine user’s subroutine SIGEPSnn

C=================================================================
C This subroutine computes elastic stresses.
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-----------------------------------------------
C I m p l i c i t T y p e s
C-----------------------------------------------
C IMPLICIT NONE
C-----------------------------------------------
C I N P U T A r g u m e n t s
C-----------------------------------------------
C
INTEGER NEL, NUPARAM, NUVAR
DOUBLE PRECISION TIME,TIMESTEP,UPARAM(NUPARAM),
. RHO(NEL),RHO0(NEL),VOLUME(NEL),EINT(NEL),
. EPSPXX(NEL),EPSPYY(NEL),EPSPZZ(NEL),
. EPSPXY(NEL),EPSPYZ(NEL),EPSPZX(NEL),
. DEPSXX(NEL),DEPSYY(NEL),DEPSZZ(NEL),
. DEPSXY(NEL),DEPSYZ(NEL),DEPSZX(NEL),
. EPSXX(NEL) ,EPSYY(NEL) ,EPSZZ(NEL) ,
. EPSXY(NEL) ,EPSYZ(NEL) ,EPSZX(NEL) ,
. SIGOXX(NEL),SIGOYY(NEL),SIGOZZ(NEL),
. SIGOXY(NEL),SIGOYZ(NEL),SIGOZX(NEL)
C-----------------------------------------------
C O U T P U T A r g u m e n t s
C-----------------------------------------------
DOUBLE PRECISION
. SIGNXX(NEL),SIGNYY(NEL),SIGNZZ(NEL),
. SIGNXY(NEL),SIGNYZ(NEL),SIGNZX(NEL),
. SIGVXX(NEL),SIGVYY(NEL),SIGVZZ(NEL),
. SIGVXY(NEL),SIGVYZ(NEL),SIGVZX(NEL),
. SOUNDSP(NEL),VISCMAX(NEL)
C-----------------------------------------------
C I N P U T O U T P U T A r g u m e n t s
C-----------------------------------------------
DOUBLE PRECISION UVAR(NEL,NUVAR), OFF(NEL)
C
C-----------------------------------------------
C VARIABLES FOR FUNCTION INTERPOLATION
C-----------------------------------------------
INTEGER NPF(*), NFUNC, IFUNC(NFUNC)
DOUBLE PRECISION FINTER ,TF(*)
EXTERNAL FINTER
C Y = FINTER(IFUNC(J),X,NPF,TF,DYDX)
C Y : y = f(x)

October, 2011 19
RADIOSS USER’S CODE USER’S MATERIAL LAWS

C X : x
C DYDX : f'(x) = dy/dx
C IFUNC(J): FUNCTION INDEX
C J : FIRST(J=1), SECOND(J=2) .. FUNCTION USED FOR THIS LAW
C NPF,TF : FUNCTION PARAMETER
C-----------------------------------------------
C L o c a l V a r i a b l e s
C-----------------------------------------------
INTEGER I,J
DOUBLE PRECISION A11,A12,A44
C . YLD(NEL),PLA(NEL)
C======================================
C
C ELASTIC LAW FOR SOLID - PROGRAM
C
C======================================
C
C-----------------------------------------------
C ELASTIC SOLUTION
C-----------------------------------------------
DO I=1,NEL
C
A11 = UPARAM(1)
A12 = UPARAM(2)
A44 = UPARAM(3)
C
SIGNXX(I) = A11 * EPSXX(I) + A12 * EPSYY(I) + A12 * EPSZZ(I)
SIGNYY(I) = A12 * EPSXX(I) + A11 * EPSYY(I) + A12 * EPSZZ(I)
SIGNZZ(I) = A12 * EPSXX(I) + A12 * EPSYY(I) + A11 * EPSZZ(I)
SIGNXY(I) = A44 * EPSXY(I)
SIGNYZ(I) = A44 * EPSYZ(I)
SIGNZX(I) = A44 * EPSZX(I)
C
SOUNDSP(I) = SQRT(A11/RHO0(I))
VISCMAX(I) = 0.
ENDDO
C
C-----------------------------------------------
C PLASTIC STRAIN
C (for compatibility with HEPH elements)
C-----------------------------------------------
C DO I=1,NEL
C YLD(I) = 1. E+20
C PLA(I)= 0.
C ENDDO
C CALL SET_U_SOLPLAS(NEL,YLD,PLA)
C-----------------------------------------------
RETURN
END

2.4. ENGINE SUBROUTINE SIGEPSnnC for SHELL elements

This subroutine calculates the stress tensor versus the strain tensor, strain rate tensor, or
user variables.

October, 2011 20
RADIOSS USER’S CODE USER’S MATERIAL LAWS

The argument list of SIGEPSnnC is as follows:


------------------------------------------------------------------------------------------
SUBROUTINE SIGEPS29C(
1 NEL ,NUPARAM,NUVAR ,NFUNC ,IFUNC ,
2 NPF ,NPT ,IPT ,IFLAG ,
2 TF ,TIME ,TIMESTEP,UPARAM ,RHO0 ,
3 AREA ,EINT ,THKLY ,
4 EPSPXX ,EPSPYY ,EPSPXY ,EPSPYZ ,EPSPZX ,
5 DEPSXX ,DEPSYY ,DEPSXY ,DEPSYZ ,DEPSZX ,
6 EPSXX ,EPSYY ,EPSXY ,EPSYZ ,EPSZX ,
7 SIGOXX ,SIGOYY ,SIGOXY ,SIGOYZ ,SIGOZX ,
8 SIGNXX ,SIGNYY ,SIGNXY ,SIGNYZ ,SIGNZX ,
9 SIGVXX ,SIGVYY ,SIGVXY ,SIGVYZ ,SIGVZX ,
A SOUNDSP,VISCMAX,THK ,PLA ,UVAR ,
B OFF ,NGL ,SHF)
------------------------------------------------------------------------------------------

The user’s material law can be used in isotropic mode with PID 1 or in orthotropic mode
with PID 9,10,11. The directions XX, YY,... are the shell local reference frame axis. Stress are
computed at each integration point.
One must use the Fortran float external function FINTER to get the value Y of the function
for the abscissa X.
Y=FINTER(IFUNC(I),X,NPF,TF,DYDX) with:
Y the interpolated value
X the abscissa value of the function
I the ith user’s function
DYDX is the slope
NPF and TF are private function parameters.

The SOUNDSP array should always be set by the user. It is used in the calculation of the
stability time step, of the hourglass forces. The sound speed value should be equal to the plane
wave speed.
For an elastic or elastoplastic material the sound speed is given by:

E
c=
(1 − υ )ρ
2
0

The VISCMAX is used when the material law formulation is viscous and is used in the
calculation of the time step stability.

October, 2011 21
RADIOSS USER’S CODE USER’S MATERIAL LAWS

Arguments description:

NEL (integer read only scalar): number of element per group. In RADIOSS
ENGINE the element data are treated by groups (for vectorization purpose). NEL
is machine dependent and is 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 this material law.

IFUNC (integer array read only): array of size NFUNC containing function indexes.

NPF (integer array private data): array used by FINTER (float external function).

NPT (integer read only scalar): number of layers or integration points.

IPT (integer read only scalar): current layer or integration point.

IFLAG (integer array read only scalar) : array of size NEL containing the
geometrical flags

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.

AREA (float array read only): array of size NEL containing current element
surfaces.

EINT (float array read only): array of size 2*NEL containing internal membrane
and bending energy.

THKLY (float array write only): array of size NEL containing the layer thickness at
each integration point.

EPSPXX, EPSPYY, EPSPXY, EPSPYZ, EPSPZX (float array read only): arrays
of size NEL containing ε strain rates in directions XX, YY and γ strain rates in
directions XY, YZ, ZX.

October, 2011 22
RADIOSS USER’S CODE USER’S MATERIAL LAWS

DEPSXX, DEPSYY, DEPSXY, DEPSYZ, DEPSZX (float array read only):


arrays of size NEL containing ε strain increments in directions XX, YY and γ
strain increments in directions XY, YZ, ZX.

EPSXX, EPSYY, EPSXY, EPSYZ, EPSZX (float array read only): array of size
NEL containing ε strains in directions XX, YY and γ strains in directions XY, YZ,
ZX.

SIGOXX, SIGOYY, SIGOZZ, SIGOXY, SIGOYZ, SIGOZX (float array read


only): array of size NEL containing old (previous time step) elastoplastic stresses
in directions XX, YY, ZZ, XY, YZ, ZX.

SIGNXX, SIGNYY, SIGNXY, SIGNYZ, SIGNZX (float array write only): array
of size NEL containing new computed elastoplastic stresses in directions XX, YY,
XY, YZ, ZX.

SIGVXX, SIGVYY, SIGVZZ, SIGVXY, SIGVYZ, SIGVZX (float array write


only): array of size NEL containing viscous stresses in directions XX, YY, XY,
YZ, 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

THK (float array read write): array of size NEL containing total thickness.

PLA (float array read write): array of size NEL containing plastic strain.

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.
The values should be 0 if the element is OFF and 1 if the element is ON.

NGL (integer array read only) : array of size NEL containing the external element
number

2.4.1. Shell element law output

Unlike solid elements, no variable specific to user’s law for shell elements are saved in
time-history and animation.

October, 2011 23
RADIOSS USER’S CODE USER’S MATERIAL LAWS

2.4.2. Additional data necessary for compatibility with QEPH


Since version 44q : an addition has been made so that user material routines can be
compatibled with QEPH shell elements.
A way has been introduced for the user material routines to send back to RADIOSS
additional information relative to plasticity, which is necessary for QEPH. The arguments of
sigeps29c.F, sigeps30c.F, sigeps31c.F remain the same.
Yield value and value Et/E (tangent modulus divided by Young modulus) must be given
back to RADIOSS in the user law (sigeps29c.F, sigeps30c.F, or sigeps31c.F) in order this law
to be compatible with QEPH element. This can be done through a call to routine
SET_U_SHLPLAS, since version 44q.
The prototype of this routine and the necessary data to provide are described below.
C---------------------------------------------------------------------------

C New routine : SET_U_SHLPLAS allows to return to RADIOSS,

C Yield and Et/E for all elements.

C Description of the arguments to be given to

C SET_U_SHLPLAS(NEL,YLD,ETSE) :

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 ETSE | NEL | F | VALUE FOR EACH ELEMENT,

C AND THE CURRENT INTEGRATION POINT OF :

C ETSE = 1 in case of an elastic increment

C = H/(H+E) in case of a plastic increment

C where H : plastic tangent modulus,


C E : Young modulus

C---------+---------+---+---+--------------------------------------------

The arrays YLD and ETSE which are defined in the routine SET_U_SHLPLAS have to be
declared as local variables in the user material routines sigeps29c.F, sigeps30c.F, sigeps31c.F
with a sufficient length NEL.
It is recommanded to use the following statement in case of these routines are compiled with a
compiler which supports FORTRAN 90 :
DOUBLE PRECISION YLD(NEL), ETSE(NEL)
But 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. In such a case, one can state :

October, 2011 24
RADIOSS USER’S CODE USER’S MATERIAL LAWS

DOUBLE PRECISION YLD(4096), ETSE(4096)


which must be sufficient in all cases (the value of NEL given from RADIOSS to the user
routine is less than 4096).

2.5. EXAMPLE of user’s material law for SHELL elements


EXAMPLE: A Johnson-Cook elasto-plastic material law is defined for shell elements.

The user’s input data are: - density,


- Young’s modulus,
- Poisson ratio,
- Yield stress,
- hardening parameter,
- hardening modulus,
- maximum stress,
- maximum strain.

The used Johnson Cook model is: σ = A + Bε plN .

Maximum stress and plastic strain are taken into account. Shells thickness is variable.

Two methods are available to compute plastically admissible stresses:


- Projection by return radial,
- Iterative projection with three Newton iterations.

Mesh example made up with shell elements:

2.5.1. User’s input data (/MAT/USERn/ option)

[…]
#--1---|---2---|---3---|---4---|---5---|---6---|---7---|---8---|---9---|--10---|
/MAT/USER1/1/user’s elasto-plastic material law
# RHO
0.0027
# E Nu
60400 0.33
# A B N EPSM SIGM
90.266 223.14 0.375 0 175
#--1---|---2---|---3---|---4---|---5---|---6---|---7---|---8---|---9---|--10---|
[…]

2.5.2. Starter user’s subroutine LECMnn


C=================================================================

October, 2011 25
RADIOSS USER’S CODE USER’S MATERIAL LAWS

C This subroutine reads the user material parameters.


C=================================================================
SUBROUTINE LECM29(IIN ,IOUT ,UPARAM ,MAXUPARAM,NUPARAM,
. NUVAR,IFUNC,MAXFUNC,NFUNC ,PARMAT )
C-----------------------------------------------
C I m p l i c i t T y p e s
C-----------------------------------------------
IMPLICIT NONE
C-----------------------------------------------
C D u m m y A r g u m e n t s
C-----------------------------------------------
INTEGER IIN,IOUT,MAXUPARAM,NUPARAM,NUVAR,MAXFUNC,NFUNC,
. IFUNC(MAXFUNC)
DOUBLE PRECISION UPARAM(MAXUPARAM),PARMAT(*)
C
C-----------------------------------------------
C L o c a l V a r i a b l e s
C-----------------------------------------------
DOUBLE PRECISION E,NU,CA,CB,CN,EPSM,SIGM,G
C
C===============================================
C ELASTO-PLASTIC LAW (Y=A+B*PLA^N)
C===============================================
C
C-----------------------------------------------
C INPUT FILE READING (USER DATA)
C-----------------------------------------------
READ(IIN,'(2F16.0)')E,NU
READ(IIN,'(5F16.0)')CA,CB,CN,EPSM,SIGM
C
C-----------------------------------------------
C DATA CHECKING
C-----------------------------------------------
IF(NU.LT.0.0.OR.NU.GE.0.5)THEN
WRITE(IOUT,*)' ** ERROR : WRONG NU VALUE'
ENDIF
IF(CN.EQ.0.0.OR.CN.EQ.1.) CN = 1.0001
IF(EPSM.EQ.0.) EPSM = 1.E+30
IF(SIGM.EQ.0.) SIGM = 1.E+30
NUPARAM = 10
IF(NUPARAM.GT.MAXUPARAM)THEN
WRITE(IOUT,*)' ** ERROR : NUPARAM GT MAXUPARAM'
WRITE(IOUT,*)' NUPARAM =',NUPARAM,
. ' MAXUPARAM =',MAXUPARAM
ELSE
C-----------------------------------------------
C USER MATERIAL PARAMETERS DEFINITION
C-----------------------------------------------
UPARAM(1) = E
UPARAM(2) = NU
G = 0.5*E/(1.+NU)
UPARAM(3) = G
UPARAM(4) = CA
UPARAM(5) = CB
UPARAM(6) = CN
UPARAM(7) = EPSM
UPARAM(8) = SIGM
UPARAM(9) = E/(1.-NU*NU)

October, 2011 26
RADIOSS USER’S CODE USER’S MATERIAL LAWS

UPARAM(10) = NU*E/(1.-NU*NU)
ENDIF
C

C-----------------------------------------------
C USED FOR SHELLS
C-----------------------------------------------
C PARMAT(1) = C1 (interface for solid)
PARMAT(2) = E
PARMAT(3) = NU
C
C-------------------------------------------------
C NUMBER OF USER ELEMENT VARIABLES AND CURVES
C-------------------------------------------------
NUVAR = 4
NFUNC = 0
C
C-------------------------------------------------
C OUTPUT FILE PRINT
C-------------------------------------------------
WRITE(IOUT,1000)
WRITE(IOUT,1100)E,NU,G,
. CA,CB,CN,EPSM,SIGM
C
1000 FORMAT(
& 5X,' ELASTO-PLASTIC LAW (SIG=A+B*EPSp^N) ',/,
& 5X,' -------------------------------------',//)
1100 FORMAT(
& 5X,'YOUNG MODULUS. . . . . . . . . . . . .=',E12.4/
& 5X,'POISSON RATIO. . . . . . . . . . . . .=',E12.4/
& 5X,'SHEAR MODULUS . . . . . . . . . . . . .=',E12.4/
& 5X,'YIELD COEFFICIENT A . . . . . . . . . .=',E12.4/
& 5X,'YIELD COEFFICIENT B . . . . . . . . . .=',E12.4/
& 5X,'YIELD COEFFICIENT N . . . . . . . . . .=',E12.4/
& 5X,'EPS-MAX . . . . . . . . . . . . . . . .=',E12.4/
& 5X,'SIG-MAX . . . . . . . . . . . . . . . =',E12.4//)
C
C-------------------------------------------------
C END
C-------------------------------------------------
RETURN
END

2.5.3. Engine user’s subroutine SIGEPSnnC

SUBROUTINE SIGEPS29C(
1 NEL ,NUPARAM,NUVAR ,NFUNC ,IFUNC ,
2 NPF ,NPT ,IPT ,IFLAG ,
2 TF ,TIME ,TIMESTEP,UPARAM ,RHO0 ,
3 AREA ,EINT ,THKLY ,
4 EPSPXX ,EPSPYY ,EPSPXY ,EPSPYZ ,EPSPZX ,
5 DEPSXX ,DEPSYY ,DEPSXY ,DEPSYZ ,DEPSZX ,
6 EPSXX ,EPSYY ,EPSXY ,EPSYZ ,EPSZX ,
7 SIGOXX ,SIGOYY ,SIGOXY ,SIGOYZ ,SIGOZX ,
8 SIGNXX ,SIGNYY ,SIGNXY ,SIGNYZ ,SIGNZX ,
9 SIGVXX ,SIGVYY ,SIGVXY ,SIGVYZ ,SIGVZX ,

October, 2011 27
RADIOSS USER’S CODE USER’S MATERIAL LAWS

A SOUNDSP,VISCMAX,THK ,PLA ,UVAR ,


B OFF ,NGL )
C

C-----------------------------------------------
C I m p l i c i t T y p e s
C-----------------------------------------------
IMPLICIT NONE
C-----------------------------------------------
C I N P U T A r g u m e n t s
C-----------------------------------------------
C
INTEGER NEL, NUPARAM, NUVAR, NPT, IPT,IFLAG(*),
. NGL(NEL)
DOUBLE PRECISION
. TIME,TIMESTEP,UPARAM(NUPARAM),
. AREA(NEL),RHO0(NEL),EINT(2,NEL),
. THKLY(NEL),PLA(NEL),SHF(NEL),
. EPSPXX(NEL),EPSPYY(NEL),
. EPSPXY(NEL),EPSPYZ(NEL),EPSPZX(NEL),
. DEPSXX(NEL),DEPSYY(NEL),
. DEPSXY(NEL),DEPSYZ(NEL),DEPSZX(NEL),
. EPSXX(NEL) ,EPSYY(NEL) ,
. EPSXY(NEL) ,EPSYZ(NEL) ,EPSZX(NEL) ,
. SIGOXX(NEL),SIGOYY(NEL),
. SIGOXY(NEL),SIGOYZ(NEL),SIGOZX(NEL)
C-----------------------------------------------
C O U T P U T A r g u m e n t s
C-----------------------------------------------
DOUBLE PRECISION
. SIGNXX(NEL),SIGNYY(NEL),
. SIGNXY(NEL),SIGNYZ(NEL),SIGNZX(NEL),
. SIGVXX(NEL),SIGVYY(NEL),
. SIGVXY(NEL),SIGVYZ(NEL),SIGVZX(NEL),
. SOUNDSP(NEL),VISCMAX(NEL)
C-----------------------------------------------
C I N P U T O U T P U T A r g u m e n t s
C-----------------------------------------------
DOUBLE PRECISION UVAR(NEL,NUVAR),OFF(NEL),THK(NEL)
C-----------------------------------------------
C VARIABLES FOR FUNCTION INTERPOLATION
C-----------------------------------------------
INTEGER NPF(*), NFUNC, IFUNC(NFUNC)
DOUBLE PRECISION FINTER ,TF(*)
EXTERNAL FINTER
C Y = FINTER(IFUNC(J),X,NPF,TF,DYDX)
C Y : y = f(x)
C X : x
C DYDX : f'(x) = dy/dx
C IFUNC(J): FUNCTION INDEX
C J : FIRST(J=1), SECOND(J=2)
C NPF,TF : FUNCTION PARAMETER
C-----------------------------------------------
C L o c a l V a r i a b l e s
C-----------------------------------------------
INTEGER I,J,INDEX(NEL),NMAX,N,NINDX,IPLAS
DOUBLE PRECISION
. E,NU,G,CA,CB,CN,EPSM,SIGM,

October, 2011 28
RADIOSS USER’S CODE USER’S MATERIAL LAWS

. A1,A2,G3,
. CH1,QH1,
. NNU1,NU1,S1,S2,S3,
. R,RR,UMR,DEZZ,UN,EM20,ZERO,
. L,M,
. S11,S22,P2,S1S2,S122,NNU2,NU4,NU6,
. C,NU,S12,F,DF,Q2,YLD_I,NU3,NU2
.
DOUBLE PRECISION
. SVM(NEL),AA(NEL),BB(NEL),PP(NEL),QQ(NEL),
. DPLA_I(NEL),X1(NEL),Y1(NEL),Z1(NEL),SVM1(NEL),
. A(NEL),VM2(NEL),DPLA_J(NEL),DR(NEL)
C
DATA ZERO/0.0/,UN/1.0/,NMAX/3/,EM20/1.E-20/
C
C===============================================
C
C ELASTO-PLASTIC LAW (Y=A+B*PLA^N)
C
C===============================================
C
C-----------------------------------------------
C PARAMETERS READING
C-----------------------------------------------
E = UPARAM(1)
NU = UPARAM(2)
G = UPARAM(3)
CA = UPARAM(4)
CB = UPARAM(5)
CN = UPARAM(6)
EPSM = UPARAM(7)
SIGM = UPARAM(8)
A1 = UPARAM(9)
A2 = UPARAM(10)
C
C-----------------------------------------------
C USER VARIABLES INITIALIZATION
C-----------------------------------------------
IF(TIME.EQ.0.0)THEN
DO I=1,NEL
UVAR(I,1)=0.
UVAR(I,2)=0.
UVAR(I,3)=0.
UVAR(I,4)=0.
ENDDO
ENDIF
C
G3 = 3. * G
NNU1 = NU / (1. - NU)
NU1 = 1.-NNU1
NU2 = 1./(1.+NU)
NU3 = 1./(1.-NU)
C
C Plastically admissible stresses computation:
IF(IFLAG(1).EQ.0) THEN
IPLAS = 0
ELSEIF(IFLAG(1).EQ.1) THEN
IPLAS = 1

October, 2011 29
RADIOSS USER’S CODE USER’S MATERIAL LAWS

ELSEIF(IFLAG(1).EQ.2) THEN
IPLAS = 2
ENDIF
C
C========================================================
C I - ELASTIC STRESSES COMPUTATION
C========================================================
DO I=1,NEL
C
SIGNXX(I)=SIGOXX(I)+A1*DEPSXX(I)+A2*DEPSYY(I)
SIGNYY(I)=SIGOYY(I)+A2*DEPSXX(I)+A1*DEPSYY(I)
SIGNXY(I)=SIGOXY(I)+G *DEPSXY(I)
SIGNYZ(I)=SIGOYZ(I)+G *DEPSYZ(I)
SIGNZX(I)=SIGOZX(I)+G *DEPSZX(I)
C
SOUNDSP(I) = SQRT(A1/RHO0(I))
VISCMAX(I) = 0.
C
ENDDO
C
C========================================================
C II - ELASTO-PLASTIC COMPUTATION
C========================================================
C
C===============================================
C A - COMPUTE CURRENT YIELD STRESS
C===============================================
DO I=1,NEL
IF(UVAR(I,1).LE.0.) THEN
CH1=CA
ELSEIF(UVAR(I,1).GT.EPSM) THEN
CH1=CA+CB*EPSM**CN
ELSE
CH1=CA+CB*UVAR(I,1)**CN
ENDIF
UVAR(I,2)=MIN(SIGM,CH1)
ENDDO
C
C===============================================
C B- COMPUTE HARDENING MODULUS H
C===============================================
DO I=1,NEL
IF(UVAR(I,1).GT.0. AND .CN.GE.1) THEN
QH1= CB*CN*UVAR(I,1)**(CN-1.)
ELSEIF(UVAR(I,1).GT.0. AND .CN.LT.1)THEN
QH1= CB*CN*UVAR(I,1)**(1.-CN)
ELSE
QH1=0.
ENDIF
UVAR(I,3)=QH1
ENDDO
C
C
C=============================================================
C C - STRESSES, PLASTIC STRAIN AND THICKNESS CALCULATION
C
C COMPUTE PLASTICALLY ADMISSIBLE STRESSES
C Two available computations according to IPLAS flag

October, 2011 30
RADIOSS USER’S CODE USER’S MATERIAL LAWS

C=============================================================
C

IF(IPLAS.EQ.0)THEN
C=============================================================
C 1 - PROJECTION by RADIAL RETURN (Iplas=0)
C=============================================================
C
C print *, 'PROJECTION by RADIAL RETURN - Iplas=0'
C
C-----------------------------------------------
C -> Plastic strain evaluation
C-----------------------------------------------
DO I=1,NEL
UVAR(I,1) = 0.5*( EPSXX(I)+EPSYY(I)
. + SQRT( (EPSXX(I)-EPSYY(I))*(EPSXX(I)-EPSYY(I))
. + EPSXY(I)*EPSXY(I) ) )
ENDDO
C
C-----------------------------------------------
C -> Von Mises criterion (non principal stresses)
C-----------------------------------------------
DO I=1,NEL
SVM(I)=SQRT(SIGNXX(I)*SIGNXX(I)
. +SIGNYY(I)*SIGNYY(I)
. -SIGNXX(I)*SIGNYY(I)
. +3.*SIGNXY(I)*SIGNXY(I))
ENDDO
C
C-----------------------------------------------
C -> Projection on criterion
C-----------------------------------------------
DO I=1,NEL
R = MIN(UN,UVAR(I,2)/MAX(EM20,SVM(I)))
SIGNXX(I)=SIGNXX(I)*R
SIGNYY(I)=SIGNYY(I)*R
SIGNXY(I)=SIGNXY(I)*R
ENDDO
C
C-----------------------------------------------
C -> Compute plastic strain
C-----------------------------------------------
DO I=1,NEL
UMR = 1.-R
DPLA_I(I) = OFF(I)*SVM(I)*UMR/E
UVAR(I,1) = UVAR(I,1) + DPLA_I(I)
PLA(I) = PLA(I) + DPLA_I(I)
ENDDO
C
C-----------------------------------------------
C -> Compute thickness
C-----------------------------------------------
DO I=1,NEL
DEZZ = DPLA_I(I) * 0.5*(SIGNXX(I)+SIGNYY(I)) /UVAR(I,2)
DEZZ=-(DEPSXX(I)+DEPSYY(I))*NNU1-NU1*DEZZ
THK(I) = THK(I) + DEZZ*THKLY(I)
ENDDO

October, 2011 31
RADIOSS USER’S CODE USER’S MATERIAL LAWS

C
C

ELSEIF(IPLAS.EQ.1)THEN
C=============================================================
C 2 - ITERATIVE PROJECTION (Iplas =1 )
C with 3 Newton iterations
C=============================================================
C
C print *, 'ITERATIVE PROJECTION - Iplas=1'
C
C-----------------------------------------------
C -> Von Mises criterion (non principal stresses)
C-----------------------------------------------
DO I=1,NEL
UVAR(I,3) = MAX(ZERO,UVAR(I,3))
S1=SIGNXX(I)+SIGNYY(I)
S2=SIGNXX(I)-SIGNYY(I)
S3=SIGNXY(I)
AA(I)=0.25*S1*S1
BB(I)=0.75*S2*S2+3.*S3*S3
SVM(I)=SQRT(AA(I)+BB(I))
DEZZ = -(DEPSXX(I)+DEPSYY(I))*NNU1
THK(I) = THK(I) + DEZZ*THKLY(I)
ENDDO
C
C-----------------------------------------------
C -> Gather plastic flow - Plasticity check
C-----------------------------------------------
NINDX=0
DO I=1,NEL
IF(SVM(I).GT.UVAR(I,2).AND.OFF(I).EQ.1.) THEN
NINDX=NINDX+1
INDEX(NINDX)=I
ENDIF
ENDDO
IF(NINDX.EQ.0) RETURN
C
C-----------------------------------------------
C -> Plastic plane stress
C-----------------------------------------------
DO J=1,NINDX
I=INDEX(J)
DPLA_J(I)=(SVM(I)-UVAR(I,2))/(G3+UVAR(I,3))
C
ENDDO
C NMAX: number of iterations
DO N=1,NMAX
DO J=1,NINDX
I=INDEX(J)
DPLA_I(I) = DPLA_J(I)
YLD_I = UVAR(I,2)+UVAR(I,3)*DPLA_I(I)
DR(I) = 0.5*E*DPLA_I(I)/YLD_I
PP(I) = 1./(1.+DR(I)*NU3)
QQ(I) = 1./(1.+3.*DR(I)*NU2)
P2 = PP(I)*PP(I)
Q2 = QQ(I)*QQ(I)

October, 2011 32
RADIOSS USER’S CODE USER’S MATERIAL LAWS

F = AA(I)*P2+BB(I)*Q2-YLD_I*YLD_I
DF = -(AA(I)*NU3*P2*PP(I)+3.*BB(I)*NU2*Q2*QQ(I))
. *(E-2.*DR(I)*UVAR(I,3))/YLD_I
. -2.*UVAR(I,3)*YLD_I
IF(DPLA_I(I).GT.0.) THEN
DPLA_J(I)=MAX(ZERO,DPLA_I(I)-F/DF)
ELSE
DPLA_J(I)=0.
ENDIF
C
ENDDO
C
ENDDO
C
C------------------------------------------
C -> Plastic strain
C -> Plastically admissible stresses
C -> Thickness
C------------------------------------------
C
DO J=1,NINDX
I=INDEX(J)
UVAR(I,1) = UVAR(I,1) + DPLA_I(I)
PLA(I) = UVAR(I,1)
S1=(SIGNXX(I)+SIGNYY(I))*PP(I)
S2=(SIGNXX(I)-SIGNYY(I))*QQ(I)
SIGNXX(I)=0.5*(S1+S2)
SIGNYY(I)=0.5*(S1-S2)
SIGNXY(I)=SIGNXY(I)*QQ(I)
DEZZ = - NU1*DR(I)*S1/E
THK(I) = THK(I) + DEZZ*THKLY(I)
ENDDO
C
C
ELSEIF(IPLAS.EQ.2)THEN
C=============================================================
C 3 - PROJECTION by RADIAL RETURN with correction (Iplas=2)
C=============================================================
C
C print *, 'PROJECTION by RADIAL RETURN - Iplas=2'

DO I=1,NEL
C
PP(I) = -(SIGNXX(I)+SIGNYY(I))*0.33333333
S11 = SIGNXX(I)+PP(I)
S22 = SIGNYY(I)+PP(I)
S12 = SIGNXY(I)
P2 = PP(I)*PP(I)
S1S2 = S11*S22
S122 = S12*S12
C
NNU2 = NNU1*NNU1
NU4 = 1 + NNU2 + NNU1
NU6 = 0.5 - NNU2 + 0.5*NNU1
C
QQ(I) = (1.-NNU1)*PP(I)
AA(I) = P2*NU4 + 3.*(S122 - S1S2)
BB(I) = P2*NU6

October, 2011 33
RADIOSS USER’S CODE USER’S MATERIAL LAWS

C = QQ(I)*QQ(I)
VM2(I)= AA(I)+BB(I)+BB(I)+C
C = C - UVAR(I,2)*UVAR(I,2)
C
R = MAX(ZERO,BB(I)*BB(I)-AA(I)*C)
R = MIN(UN,(-BB(I)+ SQRT(R))/MAX(AA(I) ,EM20))
C
UMR = 1 - R
QQ(I) = QQ(I)*UMR
SIGNXX(I) = SIGNXX(I)*R - QQ(I)
SIGNYY(I) = SIGNYY(I)*R - QQ(I)
SIGNXY(I) = S12*R
DPLA_I(I) = OFF(I)*SQRT(VM2(I))*UMR/(G3)
S1=0.5*(SIGNXX(I)+SIGNYY(I))
UVAR(I,1) = UVAR(I,1) + DPLA_I(I)
PLA(I) = UVAR(I,1)
DEZZ = DPLA_I(I) * S1 /UVAR(I,2)
DEZZ=-(DEPSXX(I)+DEPSYY(I))*NNU1-NU1*DEZZ
THK(I) = THK(I) + DEZZ*THKLY(I)
C
C-----------------------------------------------
ENDDO
C
ENDIF
C
C-----------------------------------------------
C
RETURN
END

October, 2011 34
RADIOSS USER’S CODE USER’S MATERIAL LAWS

3 EXTENDED USER MATERIAL LAWS

From version 5.2 of RADIOSS, it is possible to define 99 material user’s laws for 3D and
2D solid elements, and for 3D shell elements. User’s law for beam or truss elements are not
yet available.
To define a user’s law, one has to provide two subroutines for each law. One of this
subroutine must be linked with RADIOSS STARTER and the other with RADIOSS ENGINE.
The STARTER subroutine is called LECMUSERnn where nn = 01, 02, 03, … 99 and is
used to read the material data and to initialize material parameters.
The ENGINE subroutine for solids is called LUSERnn where nn = 01, 02, 03, … 99 and
is used to compute the solid element stress tensor at the integration point. The corresponding
shell subroutines are LUSERnnC, nn = 01, 02, 03, … 99.

All communications between RADIOSS and the User’s subroutines are done through
the argument list.

3.1 STARTER SUBROUTINE LECMUSERnn


This subroutine is used to read the User’s law input data. The seven first material cards (see
RADIOSS STARTER Input manual 3.1 to 4.1) are read before this subroutine is called. The
number of specific material cards and the format of these cards is free.
The argument list of LECMUSERnn is as follows:
SUBROUTINE LECMUSERnn(IIN ,IOUT ,UPARAM ,MAXUPARAM,NUPARAM,
. NUVAR,IFUNC,MAXFUNC,NFUNC,PARMAT, USERBUF )

IIN (integer read only scalar): input file unit (starter input file) on which the data are
read.

IOUT (integer read only scalar): output file unit (starter listing file)

UPARAM (float array): array with a size NUPARAM used to store the material
data.

MAXNUPARAM (integer read only scalar): maximum possible size of UPARAM.

NUPARAM (integer scalar): effective size of UPARAM


(MAXNUPARAMŠNUPARAM, MAXNUPARAM is set to 1000)

NUVAR (integer scalar): number of extra variables needed for each element in
SIGEPSnn

IFUNC (integer array): Array with a size of NFUNC containing the list of
RADIOSS functions used for this law. The function numbers have to be stored in

October, 2011 35
RADIOSS USER’S CODE USER’S MATERIAL LAWS

this array and not in UPARAM because of a possible renumbering of the function
numbers.

MAXFUNC (integer read only scalar): maximum possible size of IFUNC.

NFUNC (integer scalar): number of RADIOSS functions. (MAXFUNCŠNFUNC,


MAXFUNC is set to 100)

STIFINT (float scalar): modulus needed to compute the interface stiffness. The
Young’s or the bulk modulus can be used to define this value. This value is also
used in RADIOSS STARTER to make an estimation of the time step.

USERBUF (data structure read-write) is defined in LAW_USER.mod Inside


LECMUSERnn this module has to be used.

This data structure contains:

NAME (Character array read only): array of size 100 containing material
name

ID (Integer read only scalar): material ID defined in starter input deck

3.2 ENGINE SUBROUTINE LUSERnn for SOLID elements

This subroutine calculates the stress tensor versus the strain tensor, strain rate tensor,
density, volume, internal energy or user variables.
The argument list of LUSERnn is as follows:
SUBROUTINE LUSERnn (
1 NEL ,NUPARAM,NUVAR ,NFUNC ,IFUNC ,NPF ,
2 TF ,TIME ,TIMESTEP,UPARAM ,RHO , VOLUME ,
3 EINT , NGL, SOUNDSP,VISCMAX,UVAR ,OFF ,
4 SIGY , PLA , USERBUF )
------------------------------------------------------------------------------------------
The user’s material law can be used in isotropic or orthotropic mode. In isotropic mode the
directions XX, YY,... are the global reference frame axis. In isotropic mode the old
elastoplastic stresses (arrays SIGOXX, SIGOYY,...) are already rotated to take into account
the rigid body rotation.
In orthotropic mode the directions are the orthotropic frame axis.
One must use the Fortran float external function FINTER to get the value Y of the function
for the abscissa X.
Y=FINTER(IFUNC(I),X,NPF,TF,DYDX) with:

October, 2011 36
RADIOSS USER’S CODE USER’S MATERIAL LAWS

Y the interpolated value


X the abscissa value of the function
I the ith user’s function
DYDX is the slope
NPF and TF are private function parameters.
The SOUNDSP array should always be set by the user. It is used in the calculation of the
stability time step, of the hourglass forces and of the artificial viscous pressure Q. In isotropic
material the sound speed value should be equal to the plane wave speed.

For an elastic or elastoplastic material the sound speed is given by:

K + 4G / 3 λ + 2µ
c= =
ρ0 ρ0
with K the bulk modulus, G the shear modulus and λ and µ the Lame parameters.
E
K=
3(1 − 2υ )
E
G=µ=
2(1 + υ )
E (1 − υ )
λ + 2µ =
(1 + υ )(1 − 2υ )
The VISCMAX is used when the material law formulation is viscous and is used in the
calculation of the time step stability.
Argument description:

NEL (integer read only scalar): number of element per group. In RADIOSS
ENGINE the element data are treated by groups (for vectorization purpose). NEL
is machine dependent and is 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 this material law.

IFUNC (integer array read only): array of size NFUNC containing 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.

October, 2011 37
RADIOSS USER’S CODE USER’S MATERIAL LAWS

UPARAM (float array read only): user material parameter array of size
NUPARAM.

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.

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.
The values should be 0 if the element is OFF and 1 if the element is ON.

USERBUF (data structure read-write) is defined in LAW_USERSO.mod Inside LUSERnn


this module has to be used.

This data structure contains:

ID (Integer read only): material ID defined in


starter input deck.

NCYCLE (Integer read only): cycle number,


first cycle is equal to zero.

IPTR (Integer read only): integration point


(direction r).

IPTS (Integer read only): integration point


(direction r).

IPTT (Integer read only): integration point


(direction r).

EPSPXX, EPSPYY, EPSPZZ, EPSPXY, EPSPYZ, EPSPZX (float


array read only): arrays of size NEL containing ε strain rates in
directions XX, YY, ZZ and γ strain rates in directions XY, YZ, ZX.

DEPSXX, DEPSYY, DEPSZZ, DEPSXY, DEPSYZ, DEPSZX (float


array read only): arrays of size NEL containing ε strain increments in

October, 2011 38
RADIOSS USER’S CODE USER’S MATERIAL LAWS

directions XX, YY, ZZ and γ strain increments in directions XY, YZ,


ZX.

EPSXX, EPSYY, EPSZZ, EPSXY, EPSYZ, EPSZX (float array read


only): array of size NEL containing ε strains in directions XX, YY, ZZ
and γ strains in directions XY, YZ, ZX.

SIGOXX, SIGOYY, SIGOZZ, SIGOXY, SIGOYZ, SIGOZX (float


array read only): array of size NEL containing old (previous time step)
elastoplastic stresses in directions XX, YY, ZZ, XY, YZ, ZX.

R11, R12, R13, R21, R22, R23, R31, R32, R33 (float array write only):
array of size NEL containing rotation matrix from global skew system to
element skew system.

SIGNXX, SIGNYY, SIGNZZ, SIGNXY, SIGNYZ, SIGNZX (float


array write only): array of size NEL containing new computed
elastoplastic stresses in directions XX, YY, ZZ, XY, YZ, 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, ZX.

RHO0 (float array read only): array of size NEL containing initial
densities.

DPLA (float array write only): array of size NEL containing incremental
plastic strain.

3.2.1 Additional necessary data for compatibility with HEPH

PLA (float array write only): array of size NEL containing plastic strain.

SIGY (float array read only): array of size NEL containing yield stress.

3.3 EXAMPLE of user’s material law for SOLID elements

EXAMPLE: An elastic material law is defined for solid elements.


Input user’s data are: - density,
• Young’s modulus,
• Poisson ratio.

October, 2011 39
RADIOSS USER’S CODE USER’S MATERIAL LAWS

Model is made up with solid elements:

3.3.1 User’s input data (/MAT/USERnn/ option)

[…]
#--1---|---2---|---3---|---4---|---5---|---6---|---7---|---8---|---9---|--10---|
/MAT/USER1/2/user’s elastic material law
# RHO
0.0027
# E Nu
60400 0.33
#--1---|---2---|---3---|---4---|---5---|---6---|---7---|---8---|---9---|--10---|
[…]

3.3.2 Starter user’s subroutine LECMUSERnn

C=================================================================
C This subroutine reads the user material parameters.
C=================================================================
SUBROUTINE LECMUSERnn(IIN,IOUT,UPARAM,MAXUPARAM,NUPARAM,
. NUVAR,IFUNC,MAXFUNC,NFUNC,STIFINT,
. USERBUF)

USE LAW_USER
C-----------------------------------------------
C I m p l i c i t T y p e s
C-----------------------------------------------
C IMPLICIT NONE
C-----------------------------------------------
C D u m m y A r g u m e n t s
C-----------------------------------------------
INTEGER IIN,IOUT,MAXUPARAM,NUPARAM,NUVAR,MAXFUNC,NFUNC,
. IFUNC(MAXFUNC)
DOUBLE PRECISION UPARAM(MAXUPARAM),STIFINT
C-----------------------------------------------
TYPE(ULAWBUF) :: USERBUF
C-----------------------------------------------
C L o c a l V a r i a b l e s
C-----------------------------------------------
DOUBLE PRECISION E,NU,A11,A12,A44
C
C======================================
C ELASTIC LAW WITH SOLIDS
C======================================
C
C-----------------------------------------------

October, 2011 40
RADIOSS USER’S CODE USER’S MATERIAL LAWS

C INPUT FILE READING (USER DATA)


C-----------------------------------------------
READ(IIN,’(2F16.0)’)E,NU
A11 = E * (1.-NU) / (1.+NU) / (1.-2.*NU)
A12 = E * NU / (1.+NU) / (1.-2.*NU)
A44 = E / 2. / (1.+NU)
C
C-----------------------------------------------
C DATA CHECKING
C-----------------------------------------------
IF(NU.LT.0.0.OR.NU.GE.0.5)THEN
WRITE(IOUT,*)’ ** ERROR : WRONG NU VALUE’
ENDIF
NUPARAM = 3
IF(NUPARAM.GT.MAXUPARAM)THEN
WRITE(IOUT,*)’ ** ERROR : NUPARAM GT MAXUPARAM’
WRITE(IOUT,*)’ NUPARAM =’,NUPARAM,
. ‘ MAXUPARAM =’,MAXUPARAM
ELSE
C-----------------------------------------------
C USER MATERIAL PARAMETERS DEFINITION
C-----------------------------------------------
C used in sigeps29 (solid 2d,3d)
UPARAM(1) = A11
UPARAM(2) = A12
UPARAM(3) = A44
ENDIF
C
C-------------------------------------------------
C NUMBER OF USER ELEMENT VARIABLES AND CURVES
C-------------------------------------------------
NUVAR = 0
NFUNC = 0
C
C-----------------------------------------------
C USED FOR SOLIDS
C-----------------------------------------------
C used for interface (solid+shell)
STIFINT = A11
C
C-------------------------------------------------
C OUTPUT FILE PRINT
C-------------------------------------------------
WRITE(IOUT,1000)
WRITE(IOUT,1100)E,NU
C
1000 FORMAT(
& 5X,’ ELASTIC USER LAW 29’,/,
& 5X,’ ------------------ ‚,//)
1100 FORMAT(
& 5X,’E . . . . . . . . . . . . . . . . . . .=’,E12.4/
& 5X,’NU. . . . . . . . . . . . . . . . . . .=’,E12.4//)
C
C-------------------------------------------------
RETURN
END

3.3.3 Engine user’s subroutine LUSERnn

October, 2011 41
RADIOSS USER’S CODE USER’S MATERIAL LAWS

C=================================================================
C This subroutine computes elastic stresses.
C=================================================================
SUBROUTINE LUSER01 (
1 NEL ,NUPARAM,NUVAR ,NFUNC ,IFUNC ,NPF ,
2 TF ,TIME ,TIMESTEP,UPARAM ,RHO ,VOLUME ,
3 EINT ,NGL ,SOUNDSP ,VISCMAX ,UVAR ,OFF ,
4 SIGY ,PLA ,USERBUF)
C -----------------------------------------------------------------
USE LAW_USERSO
C
C INPUT DATA
C
INTEGER NEL, NUPARAM, NUVAR,NGL(NEL)
DOUBLE PRECISION
. TIME,TIMESTEP,UPARAM(NUPARAM),
. RHO(NEL),VOLUME(NEL),EINT(NEL),
. EPSPXX(NEL),EPSPYY(NEL),EPSPZZ(NEL),
. EPSPXY(NEL),EPSPYZ(NEL),EPSPZX(NEL),
. DEPSXX(NEL),DEPSYY(NEL),DEPSZZ(NEL),
. DEPSXY(NEL),DEPSYZ(NEL),DEPSZX(NEL),
. EPSXX(NEL) ,EPSYY(NEL) ,EPSZZ(NEL),
. EPSXY(NEL) ,EPSYZ(NEL) ,EPSZX(NEL),
. SIGOXX(NEL),SIGOYY(NEL),SIGOZZ(NEL),
. SIGOXY(NEL),SIGOYZ(NEL),SIGOZX(NEL),
. RHO0(NEL)
C-----------------------------------------------
C O U T P U T DATA
C-----------------------------------------------
DOUBLE PRECISION
. SOUNDSP(NEL),VISCMAX(NEL),
. SIGNXX(NEL),SIGNYY(NEL),SIGNZZ(NEL),
. SIGNXY(NEL),SIGNYZ(NEL),SIGNZX(NEL),
. SIGVXX(NEL),SIGVYY(NEL),SIGVZZ(NEL),
. SIGVXY(NEL),SIGVYZ(NEL),SIGVZX(NEL),
. DPLA(NEL)
C-----------------------------------------------
C I N P U T O U T P U T A r g u m e n ts
C-----------------------------------------------
DOUBLE PRECISION
. UVAR(NEL,NUVAR), OFF(NEL),PLA(NEL), SIGY(NEL)
C-----------------------------------------------
TYPE(ULAWINTBUF) :: USERBUF
C-----------------------------------------------
INTEGER NPF(*), NFUNC, IFUNC(NFUNC)
DOUBLE PRECISION
. FINTER ,TF(*)
EXTERNAL FINTER
C Y = FINTER(IFUNC(J),X,NPF,TF,DYDX)
C Y : y = f(x)
C X : x
C DYDX : f’(x) = dy/dx
C IFUNC(J): FUNCTION INDEX
C J : FIRST(J=1), SECOND(J=2) .. FUNCTION USED FOR THIS LAW
C NPF,TF : FUNCTION PARAMETER
C -----------------------------------------------
C-----------------------------------------------

October, 2011 42
RADIOSS USER’S CODE USER’S MATERIAL LAWS

C L o c a l V a r i a b l e s
C-----------------------------------------------
INTEGER I,J
DOUBLE PRECISION
. A11,A12,G
C-----------------------------------------------
C USER VARIABLES INITIALIZATION
C-----------------------------------------------
A11 = UPARAM(1)
A12 = UPARAM(2)
G = UPARAM(3)
C Input Data structure
SIGOXX = USERBUF%SIGOXX
SIGOYY = USERBUF%SIGOYY
SIGOZZ = USERBUF%SIGOZZ
SIGOXY = USERBUF%SIGOXY
SIGOYZ = USERBUF%SIGOYZ
SIGOZX = USERBUF%SIGOZX
C
EPSPXX = USERBUF%EPSPXX
EPSPYY = USERBUF%EPSPYY
EPSPZZ = USERBUF%EPSPZZ
EPSPXY = USERBUF%EPSPXY
EPSPYZ = USERBUF%EPSPYZ
EPSPZX = USERBUF%EPSPZX
C
EPSXX = USERBUF%EPSXX
EPSYY = USERBUF%EPSYY
EPSZZ = USERBUF%EPSZZ
EPSXY = USERBUF%EPSXY
EPSYZ = USERBUF%EPSYZ
EPSZX = USERBUF%EPSZX
C
DEPSXX = USERBUF%DEPSXX
DEPSYY = USERBUF%DEPSYY
DEPSZZ = USERBUF%DEPSZZ
DEPSXY = USERBUF%DEPSXY
DEPSYZ = USERBUF%DEPSYZ
DEPSZX = USERBUF%DEPSZX
C
SIGNXX = USERBUF%SIGNXX
SIGNYY = USERBUF%SIGNYY
SIGNZZ = USERBUF%SIGNZZ
SIGNXY = USERBUF%SIGNXY
SIGNYZ = USERBUF%SIGNYZ
SIGNZX = USERBUF%SIGNZX
C

SIGVXX = USERBUF%SIGVXX
SIGVYY = USERBUF%SIGVYY
SIGVZZ = USERBUF%SIGVZZ
SIGVXY = USERBUF%SIGVXY
SIGVYZ = USERBUF%SIGVYZ
SIGVZX = USERBUF%SIGVZX
RHO0 = USERBUF%RHO0
DPLA = USERBUF%DPLA
C
C --- Trial stress

October, 2011 43
RADIOSS USER’S CODE USER’S MATERIAL LAWS

C
DO I = 1,NEL
SIGNXX(I)=SIGOXX(I) + A11*DEPSXX(I)
.+ A12*(DEPSYY(I) + DEPSZZ(I))
SIGNYY(I)=SIGOYY(I) + A11*DEPSYY(I)
.+ A12*(DEPSXX(I) + DEPSZZ(I))
SIGNZZ(I)=SIGOZZ(I) + A11*DEPSZZ(I)
.+ A12*(DEPSYY(I) + DEPSXX(I))
SIGNXY(I)=SIGOXY(I) + G*DEPSXY(I)
SIGNYZ(I)=SIGOYZ(I) + G*DEPSYZ(I)
SIGNZX(I)=SIGOZX(I) + G*DEPSZX(I)
C sound velocity
SOUNDSP(I) = SQRT(A11/RHO0(I))
VISCMAX(I) = ZERO
ENDDO
C Outp data structure
USERBUF%SIGNXX = SIGNXX
USERBUF%SIGNYY = SIGNYY
USERBUF%SIGNZZ = SIGNZZ
USERBUF%SIGNXY = SIGNXY
USERBUF%SIGNYZ = SIGNYZ
USERBUF%SIGNZX = SIGNZX
C
USERBUF%SIGVXX = SIGVXX
USERBUF%SIGVYY = SIGVYY
USERBUF%SIGVZZ = SIGVZZ
USERBUF%SIGVXY = SIGVXY
USERBUF%SIGVYZ = SIGVYZ
USERBUF%SIGVZX = SIGVZX
USERBUF%DPLA = DPLA
RETURN
END

3.4 ENGINE SUBROUTINE LUSERnnC for SHELL elements

This subroutine calculates the stress tensor versus the strain tensor, strain rate tensor, or
user variables.
The argument list of LUSERnnC is as follows:
SUBROUTINE LUSERnnC(
1 NEL,NUPARAM,NUVAR,NFUNC,IFUNC,
2 NPF,NGL,TF,TIME,TIMESTEP,
3 UPARAM,RHO0,AREA,EINT,SHF,
4 SOUNDSP,VISCMAX,PLA,UVAR,OFF,
5 SIGY,USERBUF)
--------------------------------------------------------------------------------
----------

The user’s material law can be used in isotropic mode with PID 1 or in orthotropic mode
with PID 9,10,11. The directions XX, YY,... are the shell local reference frame axis. Stress are
computed at each integration point.
One must use the Fortran float external function FINTER to get the value Y of the function
for the abscissa X.
Y=FINTER(IFUNC(I),X,NPF,TF,DYDX) with:

October, 2011 44
RADIOSS USER’S CODE USER’S MATERIAL LAWS

Y the interpolated value


X the abscissa value of the function
I the ith user’s function
DYDX is the slope
NPF and TF are private function parameters.

The SOUNDSP array should always be set by the user. It is used in the calculation of the
stability time step, of the hourglass forces. The sound speed value should be equal to the plane
wave speed.
For an elastic or elastoplastic material the sound speed is given by:

E
c=
(1 − υ )ρ
2
0

The VISCMAX is used when the material law formulation is viscous and is used in the
calculation of the time step stability.

Arguments description:

NEL (integer read only scalar): number of element per group. In RADIOSS
ENGINE the element data are treated by groups (for vectorization purpose). NEL
is machine dependent and is 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 this material law.

IFUNC (integer array read only): array of size NFUNC containing 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.

October, 2011 45
RADIOSS USER’S CODE USER’S MATERIAL LAWS

AREA (float array read only): array of size NEL containing current element
surfaces.

EINT (float array read only): array of size 2*NEL containing internal membrane
and bending energy.

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

PLA (float array read write): array of size NEL containing plastic strain.

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.
The values should be 0 if the element is OFF and 1 if the element is ON.

NGL (integer array read only) : array of size NEL containing the external element
number

SIGY (float array read-write): array of size NEL containing yield stress.

USERBUF (data structure read-write) is defined in LAW_USERSH.mod Inside


LUSERnnC this module should be used to relink the executable.

This module contains :

INTEGER NCYCLE

INTEGER ID

INTEGER ILAYER

INTEGER IG

NCYCLE (integer read only scalar): current cycle.

ID (integer read only scalar): user material ID.

ILAYER (integer read only scalar): current cycle.

IG (integer read only scalar): integration point (surface)..

NPTA (integer read only scalar): number of layers or integration points.

October, 2011 46
RADIOSS USER’S CODE USER’S MATERIAL LAWS

IFLAG (integer array read only scalar) : array of size NEL containing the
geometrical flags

R11,R12,R13,R21,R22,R23,R31,R32,R33, (float arrays read only scalar):

Rotational matrix (global => local).

THKLYL (float array read only): array of size NEL containing the layer thickness
at each integration point.

THKN(float array read write): array of size NEL containing total thickness.

EPSPXX, EPSPYY, EPSPXY, EPSPYZ, EPSPZX (float array read only): arrays
of size NEL containing ε strain rates in directions XX, YY and γ strain rates in
directions XY, YZ, ZX.

DEPSXX, DEPSYY, DEPSXY, DEPSYZ, DEPSZX (float array read only):


arrays of size NEL containing ε strain increments in directions XX, YY and γ
strain increments in directions XY, YZ, ZX.

EPSXX, EPSYY, EPSXY, EPSYZ, EPSZX (float array read only): array of size
NEL containing ε strains in directions XX, YY and γ strains in directions XY, YZ,
ZX.

SIGOXX, SIGOYY, SIGOZZ, SIGOXY, SIGOYZ, SIGOZX (float array read


only): array of size NEL containing old (previous time step) elastoplastic stresses
in directions XX, YY, ZZ, XY, YZ, ZX.

SIGNXX, SIGNYY, SIGNXY, SIGNYZ, SIGNZX (float array write only): array
of size NEL containing new computed elastoplastic stresses in directions XX, YY,
XY, YZ, ZX.

SIGVXX, SIGVYY, SIGVZZ, SIGVXY, SIGVYZ, SIGVZX (float array write


only): array of size NEL containing viscous stresses in directions XX, YY, XY,
YZ, ZX.

DPLA (float array write only): array of size NEL containing the plastic strain

ETSE (float array write only): array of size NEL containing Et/E (tangent modulus
divided by Young modulus).

3.4.1 Shell element law output

Contrary to solid elements, no specific user’s law variable law for shell elements are saved
in time-history and animation.

October, 2011 47
RADIOSS USER’S CODE USER’S MATERIAL LAWS

3.4.2 Additional data necessary for compatibility with QEPH


Yield value and value Et/E (tangent modulus divided by Young modulus) must be given in
order this law to be compatible with QEPH element. The prototype of this routine and the
necessary data to provide are described below.

3.5 EXAMPLE of user’s material law for SHELL elements


EXAMPLE: A Johnson-Cook elasto-plastic material law is defined for shell elements.
The user’s input data are:
• Density
• Young’s modulus,
• Poisson ratio,
• Yield stress,
• Hardening parameter,
• Hardening modulus,
• Maximum stress,
• Maximum strain.

The used Johnson Cook model is: σ = A + Bε plN .

Maximum stress and plastic strain are taken into account. Shells thickness is variable.
Two methods are available to compute plastically admissible stresses:
- Projection by return radial,
- Iterative projection with three Newton iterations.

Mesh example made up with shell elements:

3.5.1 User’s input data (/MAT/USERnn/ option)

[…]
#--1---|---2---|---3---|---4---|---5---|---6---|---7---|---8---|---9---|--10---|
/MAT/USER1/1/user’s elasto-plastic material law
# RHO

October, 2011 48
RADIOSS USER’S CODE USER’S MATERIAL LAWS

0.0027
# E Nu
60400 0.33
# A B N EPSM SIGM
90.266 223.14 0.375 0 175
#--1---|---2---|---3---|---4---|---5---|---6---|---7---|---8---|---9---|--10---|
[…]

3.5.2 Starter user’s subroutine LECMUSERnn


C=================================================================
C This subroutine reads the user material parameters.
C=================================================================
SUBROUTINE LECMUSER01(IIN ,IOUT ,UPARAM ,MAXUPARAM,NUPARAM,
. NUVAR,IFUNC,MAXFUNC,NFUNC ,PARMAT )
C-----------------------------------------------
C I m p l i c i t T y p e s
C-----------------------------------------------
IMPLICIT NONE
C-----------------------------------------------
C D u m m y A r g u m e n t s
C-----------------------------------------------
INTEGER IIN,IOUT,MAXUPARAM,NUPARAM,NUVAR,MAXFUNC,NFUNC,
. IFUNC(MAXFUNC)
DOUBLE PRECISION UPARAM(MAXUPARAM),PARMAT(*)
C
C-----------------------------------------------
C L o c a l V a r i a b l e s
C-----------------------------------------------
DOUBLE PRECISION E,NU,CA,CB,CN,EPSM,SIGM,G
C
C===============================================
C ELASTO-PLASTIC LAW (Y=A+B*PLA^N)
C===============================================
C
C-----------------------------------------------
C INPUT FILE READING (USER DATA)
C-----------------------------------------------
READ(IIN,’(2F16.0)’)E,NU
READ(IIN,’(5F16.0)’)CA,CB,CN,EPSM,SIGM
C
C-----------------------------------------------
C DATA CHECKING
C-----------------------------------------------
IF(NU.LT.0.0.OR.NU.GE.0.5)THEN
WRITE(IOUT,*)’ ** ERROR : WRONG NU VALUE’
ENDIF
IF(CN.EQ.0.0.OR.CN.EQ.1.) CN = 1.0001
IF(EPSM.EQ.0.) EPSM = 1.E+30
IF(SIGM.EQ.0.) SIGM = 1.E+30
NUPARAM = 10
IF(NUPARAM.GT.MAXUPARAM)THEN
WRITE(IOUT,*)’ ** ERROR : NUPARAM GT MAXUPARAM’
WRITE(IOUT,*)’ NUPARAM =’,NUPARAM,
. ‘ MAXUPARAM =’,MAXUPARAM
ELSE
C-----------------------------------------------

October, 2011 49
RADIOSS USER’S CODE USER’S MATERIAL LAWS

C USER MATERIAL PARAMETERS DEFINITION


C-----------------------------------------------
UPARAM(1) = E
UPARAM(2) = NU
G = 0.5*E/(1.+NU)
UPARAM(3) = G
UPARAM(4) = CA
UPARAM(5) = CB
UPARAM(6) = CN
UPARAM(7) = EPSM
UPARAM(8) = SIGM
UPARAM(9) = E/(1.-NU*NU)
UPARAM(10) = NU*E/(1.-NU*NU)
ENDIF
C
C-----------------------------------------------
C USED FOR SHELLS
C-----------------------------------------------
C PARMAT(1) = C1 (interface for solid)
PARMAT(2) = E
PARMAT(3) = NU
C
C-------------------------------------------------
C NUMBER OF USER ELEMENT VARIABLES AND CURVES
C-------------------------------------------------
NUVAR = 4
NFUNC = 0
C
C-------------------------------------------------
C OUTPUT FILE PRINT
C-------------------------------------------------
WRITE(IOUT,1000)
WRITE(IOUT,1100)E,NU,G,
. CA,CB,CN,EPSM,SIGM
C
1000 FORMAT(
& 5X,’ ELASTO-PLASTIC LAW (SIG=A+B*EPSp^N) ‘,/,
& 5X,’ -------------------------------------‘,//)
1100 FORMAT(
& 5X,’YOUNG MODULUS. . . . . . . . . . . . .=’,E12.4/
& 5X,’POISSON RATIO. . . . . . . . . . . . .=’,E12.4/
& 5X,’SHEAR MODULUS . . . . . . . . . . . . .=’,E12.4/
& 5X,’YIELD COEFFICIENT A . . . . . . . . . .=’,E12.4/
& 5X,’YIELD COEFFICIENT B . . . . . . . . . .=’,E12.4/
& 5X,’YIELD COEFFICIENT N . . . . . . . . . .=’,E12.4/
& 5X,’EPS-MAX . . . . . . . . . . . . . . . .=’,E12.4/
& 5X,’SIG-MAX . . . . . . . . . . . . . . . =’,E12.4//)
C
C-------------------------------------------------
C END
C-------------------------------------------------
RETURN
END

3.5.3 Engine user’s subroutine LUSERnnC

SUBROUTINE LUSER01C(

October, 2011 50
RADIOSS USER’S CODE USER’S MATERIAL LAWS

1 NEL ,NUPARAM,NUVAR ,NFUNC ,IFUNC ,


2 NPF , NGL , TF ,TIME ,TIMESTEP ,
3 UPARAM ,RHO0 , AREA ,EINT ,SHF ,
4 SOUNDSP,VISCMAX, PLA ,UVAR , OFF ,
5 SIGY ,USERBUF )

C
USE LAW_USERSH
C
C-----------------------------------------------
C I m p l i c i t T y p e s
C-----------------------------------------------
IMPLICIT NONE
C-----------------------------------------------
C I N P U T-OUTP DATA strcture
C-----------------------------------------------
C
TYPE(ULAWCINTBUF) :: USERBUF
C
C-----------------------------------------------
C I N P U T DATA
C-----------------------------------------------

INTEGER NEL, NUPARAM, NUVAR, NPT, IPT,IFLAG(*),


. NGL(NEL)
DOUBLE PRECISION
. TIME,TIMESTEP,UPARAM(NUPARAM),
. AREA(NEL),RHO0(NEL),EINT(2,NEL),
. THKLY(NEL),PLA(NEL),SHF(NEL),
. EPSPXX(NEL),EPSPYY(NEL),
. EPSPXY(NEL),EPSPYZ(NEL),EPSPZX(NEL),
. DEPSXX(NEL),DEPSYY(NEL),
. DEPSXY(NEL),DEPSYZ(NEL),DEPSZX(NEL),
. EPSXX(NEL) ,EPSYY(NEL) ,
. EPSXY(NEL) ,EPSYZ(NEL) ,EPSZX(NEL) ,
. SIGOXX(NEL),SIGOYY(NEL),
. SIGOXY(NEL),SIGOYZ(NEL),SIGOZX(NEL)
C-----------------------------------------------
C O U T P U T DATA
C-----------------------------------------------
DOUBLE PRECISION
. SIGNXX(NEL),SIGNYY(NEL),
. SIGNXY(NEL),SIGNYZ(NEL),SIGNZX(NEL),
. SIGVXX(NEL),SIGVYY(NEL),
. SIGVXY(NEL),SIGVYZ(NEL),SIGVZX(NEL),
. SOUNDSP(NEL),VISCMAX(NEL)
C-----------------------------------------------
C I N P U T O U T P U T A r g u m e n t s
C-----------------------------------------------
DOUBLE PRECISION UVAR(NEL,NUVAR),OFF(NEL),THK(NEL)
C-----------------------------------------------
C VARIABLES FOR FUNCTION INTERPOLATION
C-----------------------------------------------
INTEGER NPF(*), NFUNC, IFUNC(NFUNC)
DOUBLE PRECISION FINTER ,TF(*)
EXTERNAL FINTER
C Y = FINTER(IFUNC(J),X,NPF,TF,DYDX)
C Y : y = f(x)

October, 2011 51
RADIOSS USER’S CODE USER’S MATERIAL LAWS

C X : x
C DYDX : f’(x) = dy/dx
C IFUNC(J): FUNCTION INDEX
C J : FIRST(J=1), SECOND(J=2)
C NPF,TF : FUNCTION PARAMETER
C-----------------------------------------------
C L o c a l V a r i a b l e s
C-----------------------------------------------
INTEGER I,J,INDEX(NEL),NMAX,N,NINDX,IPLAS
DOUBLE PRECISION
. E,NU,G,CA,CB,CN,EPSM,SIGM,
. A1,A2,G3,
. CH1,QH1,
. NNU1,NU1,S1,S2,S3,
. R,RR,UMR,DEZZ,UN,EM20,ZERO,
. L,M,
. S11,S22,P2,S1S2,S122,NNU2,NU4,NU6,
. C,NU,S12,F,DF,Q2,YLD_I,NU3,NU2
DOUBLE PRECISION
. SVM(NEL),AA(NEL),BB(NEL),PP(NEL),QQ(NEL),
. DPLA_I(NEL),X1(NEL),Y1(NEL),Z1(NEL),SVM1(NEL),
. A(NEL),VM2(NEL),DPLA_J(NEL),DR(NEL)
C
DATA ZERO/0.0/,UN/1.0/,NMAX/3/,EM20/1.E-20/
C
C===============================================
C
C ELASTO-PLASTIC LAW (Y=A+B*PLA^N)
C
C===============================================
C
C-----------------------------------------------
C PARAMETERS READING
C-----------------------------------------------
E = UPARAM(1)
NU = UPARAM(2)
G = UPARAM(3)
CA = UPARAM(4)
CB = UPARAM(5)
CN = UPARAM(6)
EPSM = UPARAM(7)
SIGM = UPARAM(8)
A1 = UPARAM(9)
A2 = UPARAM(10)
C
C-----------------------------------------------
C USER VARIABLES INITIALIZATION
C-----------------------------------------------
IF(TIME.EQ.0.0)THEN
DO I=1,NEL
UVAR(I,1)=0.
UVAR(I,2)=0.
UVAR(I,3)=0.
UVAR(I,4)=0.
ENDDO
ENDIF
C
G3 = 3. * G

October, 2011 52
RADIOSS USER’S CODE USER’S MATERIAL LAWS

NNU1 = NU / (1. - NU)


NU1 = 1.-NNU1
NU2 = 1./(1.+NU)
NU3 = 1./(1.-NU)
C
C input data structure
C
IPT= USERBUF%ILAYER
NPT = USERBUF%NPTA
IPLAS =USERBUF%IFLAG
C
SIGOXX = USERBUF%SIGOXX
SIGOYY = USERBUF%SIGOYY
SIGOXY = USERBUF%SIGOXY
SIGOYZ = USERBUF%SIGOYZ
SIGOZX = USERBUF%SIGOZX
C
EPSPXX = USERBUF%EPSPXX
EPSPYY = USERBUF%EPSPYY
EPSPXY = USERBUF%EPSPXY
EPSPYZ = USERBUF%EPSPYZ
EPSPZX = USERBUF%EPSPZX
C
EPSXX = USERBUF%EPSXX
EPSYY = USERBUF%EPSYY
EPSXY = USERBUF%EPSXY
EPSYZ = USERBUF%EPSYZ
EPSZX = USERBUF%EPSZX
C
DEPSXX = USERBUF%DEPSXX
DEPSYY = USERBUF%DEPSYY
DEPSXY = USERBUF%DEPSXY
DEPSYZ = USERBUF%DEPSYZ
DEPSZX = USERBUF%DEPSZX
THKLY =USERBUF%THKLYL
THK = USERBUF%THKN
C initialisation
SIGNXX = USERBUF%SIGNXX
SIGNYY = USERBUF%SIGNYY
SIGNXY = USERBUF%SIGNXY
SIGNYZ = USERBUF%SIGNYZ
SIGNZX = USERBUF%SIGNZX
C
SIGVXX = USERBUF%SIGVXX
SIGVYY = USERBUF%SIGVYY
SIGVXY = USERBUF%SIGVXY
SIGVYZ = USERBUF%SIGVYZ
SIGVZX = USERBUF%SIGVZX
ETSE = USERBUF%ETSE
DPLA = USERBUF%DPLA
C========================================================
C I - ELASTIC STRESSES COMPUTATION
C========================================================
DO I=1,NEL
C
SIGNXX(I)=SIGOXX(I)+A1*DEPSXX(I)+A2*DEPSYY(I)
SIGNYY(I)=SIGOYY(I)+A2*DEPSXX(I)+A1*DEPSYY(I)
SIGNXY(I)=SIGOXY(I)+G *DEPSXY(I)

October, 2011 53
RADIOSS USER’S CODE USER’S MATERIAL LAWS

SIGNYZ(I)=SIGOYZ(I)+G *DEPSYZ(I)
SIGNZX(I)=SIGOZX(I)+G *DEPSZX(I)
C
SOUNDSP(I) = SQRT(A1/RHO0(I))
VISCMAX(I) = 0.
ENDDO
C
C========================================================
C II - ELASTO-PLASTIC COMPUTATION
C========================================================
C
C===============================================
C A - COMPUTE CURRENT YIELD STRESS
C===============================================
DO I=1,NEL
IF(UVAR(I,1).LE.0.) THEN
CH1=CA
ELSEIF(UVAR(I,1).GT.EPSM) THEN
CH1=CA+CB*EPSM**CN
ELSE
CH1=CA+CB*UVAR(I,1)**CN
ENDIF
UVAR(I,2)=MIN(SIGM,CH1)
ENDDO
C
C===============================================
C B- COMPUTE HARDENING MODULUS H
C===============================================
DO I=1,NEL
IF(UVAR(I,1).GT.0. AND .CN.GE.1) THEN
QH1= CB*CN*UVAR(I,1)**(CN-1.)
ELSEIF(UVAR(I,1).GT.0. AND .CN.LT.1)THEN
QH1= CB*CN*UVAR(I,1)**(1.-CN)
ELSE
QH1=0.
ENDIF
UVAR(I,3)=QH1
ENDDO
C
C
C=============================================================
C C - STRESSES, PLASTIC STRAIN AND THICKNESS CALCULATION
C
C COMPUTE PLASTICALLY ADMISSIBLE STRESSES
C Two available computations according to IPLAS flag
C=============================================================
C

IF(IPLAS.EQ.0)THEN
C=============================================================
C 1 - PROJECTION by RADIAL RETURN (Iplas=0)
C=============================================================
C
C print *, ‘PROJECTION by RADIAL RETURN - Iplas=0’
C
C-----------------------------------------------
C -> Plastic strain evaluation
C-----------------------------------------------

October, 2011 54
RADIOSS USER’S CODE USER’S MATERIAL LAWS

DO I=1,NEL
UVAR(I,1) = 0.5*( EPSXX(I)+EPSYY(I)
. + SQRT( (EPSXX(I)-EPSYY(I))*(EPSXX(I)-EPSYY(I))
. + EPSXY(I)*EPSXY(I) ) )
ENDDO
C
C-----------------------------------------------
C -> Von Mises criterion (non principal stresses)
C-----------------------------------------------
DO I=1,NEL
SVM(I)=SQRT(SIGNXX(I)*SIGNXX(I)
. +SIGNYY(I)*SIGNYY(I)
. -SIGNXX(I)*SIGNYY(I)
. +3.*SIGNXY(I)*SIGNXY(I))
ENDDO
C
C-----------------------------------------------
C -> Projection on criterion
C-----------------------------------------------
DO I=1,NEL
R = MIN(UN,UVAR(I,2)/MAX(EM20,SVM(I)))
SIGNXX(I)=SIGNXX(I)*R
SIGNYY(I)=SIGNYY(I)*R
SIGNXY(I)=SIGNXY(I)*R
ENDDO
C
C-----------------------------------------------
C -> Compute plastic strain
C-----------------------------------------------
DO I=1,NEL
UMR = 1.-R
DPLA(I) = OFF(I)*SVM(I)*UMR/E
UVAR(I,1) = UVAR(I,1) + DPLA(I)
PLA(I) = PLA(I) + DPLA(I)
ENDDO
C
C-----------------------------------------------
C -> Compute thickness
C-----------------------------------------------
DO I=1,NEL
DEZZ = DPLA_I(I) * 0.5*(SIGNXX(I)+SIGNYY(I)) /UVAR(I,2)
DEZZ=-(DEPSXX(I)+DEPSYY(I))*NNU1-NU1*DEZZ
THK(I) = THK(I) + DEZZ*THKLY(I)
ENDDO
C
C

ELSEIF(IPLAS.EQ.1)THEN
C=============================================================
C 2 - ITERATIVE PROJECTION (Iplas =1 )
C with 3 Newton iterations
C=============================================================
C
C print *, ‘ITERATIVE PROJECTION - Iplas=1’
C
C-----------------------------------------------
C -> Von Mises criterion (non principal stresses)
C-----------------------------------------------

October, 2011 55
RADIOSS USER’S CODE USER’S MATERIAL LAWS

DO I=1,NEL
UVAR(I,3) = MAX(ZERO,UVAR(I,3))
S1=SIGNXX(I)+SIGNYY(I)
S2=SIGNXX(I)-SIGNYY(I)
S3=SIGNXY(I)
AA(I)=0.25*S1*S1
BB(I)=0.75*S2*S2+3.*S3*S3
SVM(I)=SQRT(AA(I)+BB(I))
DEZZ = -(DEPSXX(I)+DEPSYY(I))*NNU1
THK(I) = THK(I) + DEZZ*THKLY(I)
ENDDO
C
C-----------------------------------------------
C -> Gather plastic flow - Plasticity check
C-----------------------------------------------
NINDX=0
DO I=1,NEL
IF(SVM(I).GT.UVAR(I,2).AND.OFF(I).EQ.1.) THEN
NINDX=NINDX+1
INDEX(NINDX)=I
ENDIF
ENDDO
IF(NINDX.EQ.0) RETURN
C
C-----------------------------------------------
C -> Plastic plane stress
C-----------------------------------------------
DO J=1,NINDX
I=INDEX(J)
DPLA_J(I)=(SVM(I)-UVAR(I,2))/(G3+UVAR(I,3))
ENDDO
C NMAX: number of iterations
DO N=1,NMAX
DO J=1,NINDX
I=INDEX(J)
DPLA(I) = DPLA_J(I)
YLD_I = UVAR(I,2)+UVAR(I,3)*DPLA_I(I)
DR(I) = 0.5*E*DPLA(I)/YLD_I
PP(I) = 1./(1.+DR(I)*NU3)
QQ(I) = 1./(1.+3.*DR(I)*NU2)
P2 = PP(I)*PP(I)
Q2 = QQ(I)*QQ(I)
F = AA(I)*P2+BB(I)*Q2-YLD_I*YLD_I
DF = -(AA(I)*NU3*P2*PP(I)+3.*BB(I)*NU2*Q2*QQ(I))
. *(E-2.*DR(I)*UVAR(I,3))/YLD_I
. -2.*UVAR(I,3)*YLD_I
IF(DPLA_I(I).GT.0.) THEN
DPLA_J(I)=MAX(ZERO,DPLA(I)-F/DF)
ELSE
DPLA_J(I)=0.
ENDIF
C
ENDDO
C
ENDDO
C
C------------------------------------------
C -> Plastic strain

October, 2011 56
RADIOSS USER’S CODE USER’S MATERIAL LAWS

C -> Plastically admissible stresses


C -> Thickness
C------------------------------------------
C
DO J=1,NINDX
I=INDEX(J)
UVAR(I,1) = UVAR(I,1) + DPLA(I)
PLA(I) = UVAR(I,1)
S1=(SIGNXX(I)+SIGNYY(I))*PP(I)
S2=(SIGNXX(I)-SIGNYY(I))*QQ(I)
SIGNXX(I)=0.5*(S1+S2)
SIGNYY(I)=0.5*(S1-S2)
SIGNXY(I)=SIGNXY(I)*QQ(I)
DEZZ = - NU1*DR(I)*S1/E
THK(I) = THK(I) + DEZZ*THKLY(I)
ENDDO
C
ELSEIF(IPLAS.EQ.2)THEN
C=============================================================
C 3 - PROJECTION by RADIAL RETURN with correction (Iplas=2)
C=============================================================
C
C print *, ‘PROJECTION by RADIAL RETURN - Iplas=2’
DO I=1,NEL
C
PP(I) = -(SIGNXX(I)+SIGNYY(I))*0.33333333
S11 = SIGNXX(I)+PP(I)
S22 = SIGNYY(I)+PP(I)
S12 = SIGNXY(I)
P2 = PP(I)*PP(I)
S1S2 = S11*S22
S122 = S12*S12
C
NNU2 = NNU1*NNU1
NU4 = 1 + NNU2 + NNU1
NU6 = 0.5 - NNU2 + 0.5*NNU1
C
QQ(I) = (1.-NNU1)*PP(I)
AA(I) = P2*NU4 + 3.*(S122 - S1S2)
BB(I) = P2*NU6
C = QQ(I)*QQ(I)
VM2(I)= AA(I)+BB(I)+BB(I)+C
C = C - UVAR(I,2)*UVAR(I,2)
C
R = MAX(ZERO,BB(I)*BB(I)-AA(I)*C)
R = MIN(UN,(-BB(I)+ SQRT®)/MAX(AA(I) ,EM20))
C
UMR = 1 - R
QQ(I) = QQ(I)*UMR
SIGNXX(I) = SIGNXX(I)*R - QQ(I)
SIGNYY(I) = SIGNYY(I)*R - QQ(I)
SIGNXY(I) = S12*R
DPLA(I) = OFF(I)*SQRT(VM2(I))*UMR/(G3)
S1=0.5*(SIGNXX(I)+SIGNYY(I))
UVAR(I,1) = UVAR(I,1) + DPLA(I)
PLA(I) = UVAR(I,1)
DEZZ = DPLA_I(I) * S1 /UVAR(I,2)
DEZZ=-(DEPSXX(I)+DEPSYY(I))*NNU1-NU1*DEZZ

October, 2011 57
RADIOSS USER’S CODE USER’S MATERIAL LAWS

THK(I) = THK(I) + DEZZ*THKLY(I)


C
C-----------------------------------------------
ENDDO
ENDIF
C
C outp data structure
USERBUF%SIGNXX = SIGNXX
USERBUF%SIGNYY = SIGNYY
USERBUF%SIGNXY = SIGNXY
USERBUF%SIGNYZ = SIGNYZ
USERBUF%SIGNZX = SIGNZX
c
USERBUF%SIGVXX = SIGVXX
USERBUF%SIGVYY = SIGVYY
USERBUF%SIGVXY = SIGVXY
USERBUF%SIGVYZ = SIGVYZ
USERBUF%SIGVZX = SIGVZX
USERBUF%DPLA = DPLA
USERBUF%ETSE = ETSE
USERBUF%THKN = THK
C
C-----------------------------------------------
RETURN

October, 2011 58
RADIOSS USER’S CODE USER’S ELEMENTS

4. USER PROPERTY ELEMENTS

Since version 4.1 of RADIOSS, it is possible to define up to 3 spring user’s properties


(property number 29, 30 and 31) for spring elements.
Property type 29 may be referenced as USER1 in block format input, 30 as USER2, and 31
as USER3.
To define a user’s property, one has to provide three subroutines for each property. Two of
them must be linked with RADIOSS STARTER and the other with RADIOSS ENGINE.
The STARTER subroutines are called LECG29, LECG30 or LECG31 used to read the
property data and RINI29, RINI30, RINI31 to initialize spring parameters.
The ENGINE subroutine is called RUSER29, RUSER30 or RUSER31 and is used to
compute the spring element forces and moments.

The communication between RADIOSS and the User’s subroutines are done through the
argument list or through specialized functions.

4.1 STARTER SUBROUTINE LECGnn for SPRING and SOLID elements

This subroutine is used to read the User’s property input data. The number of sp
ecific property cards and the format of these cards is fixed by the user.
The argument list of LECGnn is as follows:
------------------------------------------------------------------------------------------
SUBROUTINE LECGnn(IIN ,IOUT ,NUVAR , PARGEO)
------------------------------------------------------------------------------------------
where:

IIN (integer read only scalar): input file unit (starter input file) on which the data
are read.

IOUT (integer read only scalar): output file unit (starter listing file)

NUVAR (integer scalar): number of extra variables needed for each spring element
in RINInn and/or RUSERnn

PARGEO (float scalar): is an array of size 3. PARGEO(1) is the skew frame ID to


define local frame(optional). PARGEO(2) is a stiffness for interface, and
PARGEO(3) is not yet used. Those values are used in RADIOSS STARTER to
make an estimation of the time step.

October, 2011 59
RADIOSS USER’S CODE USER’S ELEMENTS

4.2 STARTER SUBROUTINE initialization RINInn for SPRING elements

This subroutine is used to initialize the User’s spring element.

The argument list of RINInn is as follows:


-----------------------------------------------------------------------------------------
SUBROUTINE RINI30(NEL ,IOUT ,IPROP ,
3 IX ,XL ,MASS ,XINER ,STIFM ,
4 STIFR ,VISCM ,VISCR ,UVAR ,NUVAR )
------------------------------------------------------------------------------------------
where:

NEL (integer read only scalar): number of element per group. In RADIOSS
ENGINE the element data are treated by groups (for vectorization purpose). NEL
is machine dependent and is set by RADIOSS.

IOUT (integer read only scalar): output file unit (ROOTL00)

IPROP (integer read only scalar): property number.

IX (integer array read only): array of size 4*NEL containing spring connectivity.
IX(1,i) first node ID, IX(2,i) second node ID, IX(3,i) third node ID(optional),
IX(4,i) spring ID,

XL (float array read only): array of size NEL containing current element length.

MASS (float array write only): array of size NEL containing element mass.

XINER (float array write only): array of size NEL containing element spherical
inertia.

STIFM (float array write only): array of size NEL containing element translational
stiffness(time step computation).

STIFR (float array write only): array of size NEL containing element rotational
stiffness(time step computation).

VISCM (float array write only): array of size NEL containing element translational
viscosity(time step computation).

VISCR (float array write only): array of size NEL containing element rotational
viscosity(time step computation).

NUVAR (integer read only scalar): number of user element variables.

October, 2011 60
RADIOSS USER’S CODE USER’S ELEMENTS

UVAR (float array read-write): array of size NEL*NUVAR containing user element
variables.

4.3 STARTER SUBROUTINE initialization SINInn for SOLID elements

This subroutine is used to initialize the User’s solid element (nodal mass and inertia).

The argument list of SINInn is as follows:


-----------------------------------------------------------------------------------------
SUBROUTINE SINInn(
1 NEL ,NUVAR,IOUT ,IPROP ,IMAT,SOLID_ID,
2 EINT ,VOL ,UVAR ,OFF,RHO ,SIG ,
3 XX1 ,XX2 ,XX3 ,XX4 ,XX5 ,XX6 ,XX7 ,XX8 ,
4 YY1 ,YY2 ,YY3 ,YY4 ,YY5 ,YY6 ,YY7 ,YY8 ,
5 ZZ1 ,ZZ2 ,ZZ3 ,ZZ4 ,ZZ5 ,ZZ6 ,ZZ7 ,ZZ8 ,
6 VX1 ,VX2 ,VX3 ,VX4 ,VX5 ,VX6 ,VX7 ,VX8 ,
7 VY1 ,VY2 ,VY3 ,VY4 ,VY5 ,VY6 ,VY7 ,VY8 ,
8 VZ1 ,VZ2 ,VZ3 ,VZ4 ,VZ5 ,VZ6 ,VZ7 ,VZ8 ,
9 VRX1 ,VRX2 ,VRX3 ,VRX4 ,VRX5 ,VRX6 ,VRX7 ,VRX8 ,
A VRY1 ,VRY2 ,VRY3 ,VRY4 ,VRY5 ,VRY6 ,VRY7 ,VRY8 ,
B VRZ1 ,VRZ2 ,VRZ3 ,VRZ4 ,VRZ5 ,VRZ6 ,VRZ7 ,VRZ8 ,
C MAS1 ,MAS2 ,MAS3 ,MAS4 ,MAS5 ,MAS6 ,MAS7 ,MAS8 ,
D INN1 ,INN2 ,INN3 ,INN4 ,INN5 ,INN6 ,INN7 ,INN8 ,
C STIFM,STIFR,VISCM,VISCR)
-----------------------------------------------------------------------------------------
where:

NEL (integer read only scalar): number of element per group. In RADIOSS
ENGINE the element data are treated by groups (for vectorization purpose). NEL
is machine dependent and is set by RADIOSS.

NUVAR (integer scalar): number of extra variables needed for each solid element
in SINInn and/or SUSERnn

IOUT (integer read only scalar): output file unit (L00 file)

IPROP (integer read only scalar): property number.

October, 2011 61
RADIOSS USER’S CODE USER’S ELEMENTS

IMAT (integer read only scalar): material number.

IPROP (integer read only scalar): property number.

SOLID_ID (integer read only scalar): array of size NEL containing solid element
ID

EINT (float array write only): array of size NEL containing initial total internal
energy.

VOL (float array read-write): array of size NEL containing initial element volumes.
Incoming value is computed with one integration point, this value can be
recomputed.

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.
The values should be 0 if the element is OFF and 1 if the element is ON.

RHO (float array read-write): array of size NEL containing initial densities.

SIG (float array read-write): array of size 6*NEL containing initial stress tensor SX,
SY, SZ, SXY, SYZ, SZX.

XX1 (float array read only): array of size NEL containing initial X coordinate at
node 1 in global frame.

VX1 (float array read only): array of size NEL containing initial X velocity at node
1 in global frame.

VRX1 (float array read only): array of size NEL containing initial X rotational
velocity at node 1 in global frame.

MAS1 (float array read only): array of size NEL containing mass at node 1.

INN1 (float array read only): array of size NEL containing inertia at node 1.

STIFM (float array write only): array of size NEL containing element translational
stiffness(time step computation).

STIFR (float array write only): array of size NEL containing element rotational
stiffness(time step computation).

VISCM (float array write only): array of size NEL containing element translational
viscosity(time step computation).

VISCR (float array write only): array of size NEL containing element rotational
viscosity(time step computation).

October, 2011 62
RADIOSS USER’S CODE USER’S ELEMENTS

4.4 ENGINE SUBROUTINE RUSERnn for SPRING elements

This subroutine calculates the internal forces and moments versus the velocity, the old
forces and moments and user’s variables and parameters.

The argument list of RUSERnn is as follows:


------------------------------------------------------------------------------------------
SUBROUTINE RUSERnn(NEL ,IOUT ,IPROP ,UVAR ,NUVAR ,
2 FX ,FY ,FZ ,XMOM ,YMOM ,
3 ZMOM ,E ,OFF ,STIFM ,STIFR ,
4 VISCM ,VISCR ,MASS ,XINER ,DT ,
5 XL ,VX ,RY1 ,RZ1 ,RX ,
6 RY2 ,RZ2 ,FR_WAVE)
------------------------------------------------------------------------------------------
where:

NEL (integer read only scalar): number of element per group. In RADIOSS
ENGINE the element data are treated by groups (for vectorization purpose). NEL
is machine dependent and is set by RADIOSS.

IOUT (integer read only scalar): output file unit (ROOTL00)

IPROP (integer read only scalar): property number.

UVAR (float array read-write): array of size NEL*NUVAR containing user element
variables.

NUVAR (integer read only scalar): number of user element variables.

FX (float array read write): array of size NEL containing old internal local X force
as input and new one as output. Nodal X forces at node 1 and 2 in local frame are
defined as FX1 = FX and FX2 = -FX.

FY (float array read write): array of size NEL containing old internal local Y force
as input and new one as output. Nodal Y forces at node 1 and 2 in local frame are
defined as FY1 = FY and FY2 = -FY.

FZ (float array read write): array of size NEL containing old internal local Z force
as input and new one as output. Nodal Z forces at node 1 and 2 in local frame are
defined as FZ1 = FZ and FZ2 = -FZ.

XMOM (float array read write): array of size NEL containing old internal local X
moment as input and new one as output. Nodal X moments at node 1 and 2 in
local frame are defined as MX1 = MX and MX2 = -MX.

October, 2011 63
RADIOSS USER’S CODE USER’S ELEMENTS

YMOM (float array read write): array of size NEL containing old internal local Y
moment as input and new one as output. Nodal Y moments at node 1 and 2 in
local frame are defined as MY1 = MY - 1/2*XL*FZ and
MY2 = -MY - 1/2*XL*FZ.

ZMOM (float array read write): array of size NEL containing old internal local Z
moment as input and new one as output. Nodal Z moments at node 1 and 2 in
local frame are defined as MZ1 = MZ + 1/2*XL*FY and
MZ2 = -MZ + 1/2*XL*FY.

EINT (float array read only): array of size NEL containing internal energy.

OFF (float array read-write): array of size NEL containing deleted element flags.
The values should be 0 if the element is OFF and 1 if the element is ON.

STIFM (float array write only): array of size NEL containing element translational
stiffness(time step computation).

STIFR (float array write only): array of size NEL containing element rotational
stiffness(time step computation).

VISCM (float array write only): array of size NEL containing element translational
viscosity(time step computation).

VISCR (float array write only): array of size NEL containing element rotational
viscosity(time step computation).

MASS (float array write only): this array of size NEL should contain element mass
until RADIOSS release 4.1d (included); it is no more used by RADIOSS ENGINE
since RADIOSS release 4.1e, for which the element mass which is considered for
time step computation is the one which was returned by the initialization routine
RINInn into RADIOSS STARTER.

XINER (float array write only): array of size NEL containing element spherical
inertia.

DT (float read only): current time step.

XL (float array read only): array of size NEL containing current element length.

VX (float array read only): array of size NEL containing X velocity. Nodal
velocities at node 1 and 2 in local frame are defined as VX1 = -VX/2 and VX2 =
VX/2.

RY1 (float array read only): array of size NEL containing Y rotational velocity at
node 1.

RZ1 (float array read only): array of size NEL containing Z rotational velocity at
node 1.

October, 2011 64
RADIOSS USER’S CODE USER’S ELEMENTS

RX (float array read only): array of size NEL containing torsional velocity. Nodal
torsional velocities at node 1 and 2 in local frame are defined as RX1 = -RX/2 and
RX2 = RX/2

RY2 (float array read only): array of size NEL containing Y rotational velocity at
node 2.

RZ2 (float array read only): array of size NEL containing Z rotational velocity at
node 2.

FR_WAVE (float array read only): array of size NEL not yet used.

STIFM, STIFR, VISCM, VISCR are used by RADIOSS to compute the nodal or the
element time step. MASS and XINER are needed to compute element time step.

4.5 ENGINE SUBROUTINE SUSERnn for SOLID elements

This subroutine calculates the internal forces and moments.

The argument list of RUSERnn is as follows:


------------------------------------------------------------------------------------------
SUBROUTINE SUSER29(
1 NEL ,NUVAR ,IOUT ,IPROP ,IMAT ,SOLID_ID,TIME ,TIMESTEP,
2 EINT ,VOL ,UVAR ,FR_WAVE,OFF ,RHO ,SIG ,
3 XX1 ,XX2 ,XX3 ,XX4 ,XX5 ,XX6 ,XX7 ,XX8 ,
4 YY1 ,YY2 ,YY3 ,YY4 ,YY5 ,YY6 ,YY7 ,YY8 ,
5 ZZ1 ,ZZ2 ,ZZ3 ,ZZ4 ,ZZ5 ,ZZ6 ,ZZ7 ,ZZ8 ,
6 UX1 ,UX2 ,UX3 ,UX4 ,UX5 ,UX6 ,UX7 ,UX8 ,
7 UY1 ,UY2 ,UY3 ,UY4 ,UY5 ,UY6 ,UY7 ,UY8 ,
8 UZ1 ,UZ2 ,UZ3 ,UZ4 ,UZ5 ,UZ6 ,UZ7 ,UZ8 ,
9 VX1 ,VX2 ,VX3 ,VX4 ,VX5 ,VX6 ,VX7 ,VX8 ,
A VY1 ,VY2 ,VY3 ,VY4 ,VY5 ,VY6 ,VY7 ,VY8 ,
B VZ1 ,VZ2 ,VZ3 ,VZ4 ,VZ5 ,VZ6 ,VZ7 ,VZ8 ,
C VRX1 ,VRX2 ,VRX3 ,VRX4 ,VRX5 ,VRX6 ,VRX7 ,VRX8 ,
D VRY1 ,VRY2 ,VRY3 ,VRY4 ,VRY5 ,VRY6 ,VRY7 ,VRY8 ,
E VRZ1 ,VRZ2 ,VRZ3 ,VRZ4 ,VRZ5 ,VRZ6 ,VRZ7 ,VRZ8 ,
F FX1 ,FX2 ,FX3 ,FX4 ,FX5 ,FX6 ,FX7 ,FX8 ,

October, 2011 65
RADIOSS USER’S CODE USER’S ELEMENTS

G FY1 ,FY2 ,FY3 ,FY4 ,FY5 ,FY6 ,FY7 ,FY8 ,


H FZ1 ,FZ2 ,FZ3 ,FZ4 ,FZ5 ,FZ6 ,FZ7 ,FZ8 ,
I MX1 ,MX2 ,MX3 ,MX4 ,MX5 ,MX6 ,MX7 ,MX8 ,
J MY1 ,MY2 ,MY3 ,MY4 ,MY5 ,MY6 ,MY7 ,MY8 ,
K MZ1 ,MZ2 ,MZ3 ,MZ4 ,MZ5 ,MZ6 ,MZ7 ,MZ8 ,
L STIFM ,STIFR ,VISCM ,VISCR )
------------------------------------------------------------------------------------------
where:

NEL (integer read only scalar): number of element per group. In RADIOSS
ENGINE the element data are treated by groups (for vectorization purpose). NEL
is machine dependent and is set by RADIOSS.

NUVAR (integer scalar): number of extra variables needed for each solid element
in SINInn and/or SUSERnn

IOUT (integer read only scalar): output file unit (L01 file)

IPROP (integer read only scalar): property number.

IMAT (integer read only scalar): material number.

IPROP (integer read only scalar): property number.

SOLID_ID (integer read only scalar): array of size NEL containing solid element
ID

TIME (float read only): current time.

TIMESTEP (float read only): current time step.

EINT (float array read only): array of size NEL containing current total internal
energy.

VOL (float array read only): array of size NEL containing current element volumes.
Incoming value is computed with one integration point, this value can be
recomputed.

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.
The values should be 0 if the element is OFF and 1 if the element is ON.

RHO (float array read-write): array of size NEL containing current densities.

October, 2011 66
RADIOSS USER’S CODE USER’S ELEMENTS

SIG (float array read-write): array of size 6*NEL containing current stress tensor
SX, SY, SZ, SXY, SYZ, SZX.

XX1 (float array read only): array of size NEL containing X coordinate at node 1 in
global frame at time TIME.

UX1 (float array read only): array of size NEL containing X displacement at node 1
in global frame at time TIME.

VX1 (float array read only): array of size NEL containing initial X velocity at node
1 in global frame at time TIME.

VRX1 (float array read only): array of size NEL containing initial X rotational
velocity at node 1 in global frame at time TIME.

FX1 (float array write only): array of size NEL containing X force at node 1 at time
TIME.

MX1 (float array write only): array of size NEL containing X moment at node 1 at
time TIME.

STIFM (float array write only): array of size NEL containing element translational
stiffness(time step computation).

STIFR (float array write only): array of size NEL containing element rotational
stiffness(time step computation).

VISCM (float array write only): array of size NEL containing element translational
viscosity(time step computation).

VISCR (float array write only): array of size NEL containing element rotational
viscosity(time step computation).

STIFM, STIFR, VISCM, VISCR are used by RADIOSS to compute the nodal or the
element time step. MASS and XINER are needed to compute element time step.
RHO and SIG can be used for post processing in Time History and Animation. The
modification of these variables has only effect on output. If these value are not modified RHO
and SIG are initial values.

October, 2011 67
RADIOSS USER’S CODE USER’S ELEMENTS

4.6 Functions to access user’s properties and materials

4.6.1 Store and restore functions for user subroutines


The user’s property parameters are stored in RADIOSS arrays through specialized
functions. This method allows a hierarchical property reference (one user’s property can refer
to another user’s property or an user’s material). They may be also used in user window
interface.

Glossary of function arguments


mid material identifier (starter input number)
pid property identifier
fun_id function identifier
sens_id sensor identifier
imat material number (internal RADIOSS marerial index)
iprop property number
ifunc function number
isens sensor number
mat_index material index in user property buffer
prop_index property index in user property buffer
func_index function index in user material or property buffer
KFUNC=29 parameter, indicates access to function buffer in user property
KMAT =31 parameter, indicates access to material buffer in user property
KFUNC=33 parameter, indicates access to property buffer in user property
KTABLE=37 parameter, indicates access to property buffer in user property

4.6.2 The storage functions :

integer ierror = SET_U_PNU (integer func_index, integer fun_id, KFUNC)

integer ierror = SET_U_PNU (integer func_index, integer fun_id, KTABLE)

integer ierror = SET_U_PNU (integer mat_index, integer mid, KMAT)

integer ierror = SET_U_PNU (integer prop_index, integer pid, KPROP)

The user property may relate to other proprties, materials, or functions.The above
routine stores relative function, material and property identifiers in current user
property. These identifiers are indexed independently for each category, and are
specified by func_index, mat_index, or prop_index respectively. The access to
different property buffers are distinguished by parameter values KFUNC, KMAT,
KPROP, KTABLE.

October, 2011 68
RADIOSS USER’S CODE USER’S ELEMENTS

The function returns integer flag ierror = 0 if no error, ierror = maximum allowed
index value if index larger than maximum. It is called in RADIOSS Starter.

Examples:

ierror = SET_U_PNU(2, 5, KFUNC) store a RADIOSS function decsribed by ID=5 as


a second function in current property.

ierror = SET_U_PNU(2, 5, KTABLE) store a RADIOSS table decsribed by ID=5 as a


second table in current property.

ierror = SET_U_PNU(1, 3, KMAT) store a RADIOSS material property MID=3 as a


first material in current property.

ierror = SET_U_PNU(2, 2,KPROP) store property PID = 2 as second property


referenced by current property.

integer ierror = SET_U_GEO(integer value_index, float value)


This function stores a value in current user property buffer at a position referenced by
value_index. It returns a flag ierror = 0 if no error, ierror = maximum allowed index
value if index larger than maximum. It is called in RADIOSS Starter.

4.6.3 The restore functions for user properties, materials and functions:

float value = GET_U_GEO(integer value_index, integer iprop)


This function returns a parameter value stored in property buffer iprop at the position
specified by value_index. It is called in RADIOSS Engine and Starter intialisation
routines.
example: MASS = GET_U_GEO(2, iprop) restore MASS from second parameter
of current property.
Since iprop is not the PID, but the property number, it must be retrieved using one of
the following functions:
integer iprop = GET_U_P(integer prop_id)
This function simply translates property ID into proprty number. To reduce CPU
cost it is recommended to use this function only in RADIOSS Starter and store the
result in user array.

integer jprop = GET_U_PNU(integer prop_index, integer iprop, KPROP).


This function retrieves an internal number of a property (jprop) referred by another
user property iprop at the position specified by prop_index. Iprop is a property
number which refers to jprop. This is reverse function to SET_U_PNU function.
Note that SET_U_PNU need a PID as input and that GET_U_PNU returns a
property number.

October, 2011 69
RADIOSS USER’S CODE USER’S ELEMENTS

integer pid = GET_U_PID(integer iprop)


This is a reverse function to GET_U_P. If pid number is needed, it may be obtained
from property number iprop using this function.

float value = GET_U_MAT(integer value_index, integer imat)


This function is very similar to described GET_U_GEO. It returns a material parameter
value stored in material imat at the position specified by integer value_index. Imat is
material number that may be retrieved by following translation function:

integer imat = GET_U_M(integer mid)

If the material is referenced by a user property iprop, its number may be also
restored using:
integer imat = GET_U_PNU(integer mat_index, integer iprop, KMAT)
Iprop is the “master” property number, KMAT is a parameter indicating material
buffer of this property, and mat_index is the position at which the material is stored
in this buffer.

integer mid = GET_U_MID(integer imat)


This is a reverse function to GET_U_M. If mid number is needed, it may be
obtained from known material number imat using this function.

integer y = GET_U_FUNC(integer ifunc, float x, float dydx)


This function returns an interpolated value of a function ifunc, corresponding to
abscissa x. Dxdy is function slope at x. Integer ifunc is the internal RADIOSS
function number.

integer ifunc = GET_U_NUMFUN(integer fun_id),

This function restores the function number from function identifier.

integer fun_id = GET_U_FID(integer ifunc),

This function restores the function ID from function number.

If a function is referenced by a user property iprop, or by user material imat, its


internal number may be also obtained using following functions:

integer ifunc = GET_U_MNU(integer mat_index, integer imat, KFUNC)

integer ifunc = GET_U_PNU(integer prop_index, integer iprop, KFUNC)

integer itable = GET_U_PNU(integer prop_index, integer iprop, KTABLE)

October, 2011 70
RADIOSS USER’S CODE USER’S ELEMENTS

where mat_index and prop_index are the function indexes stored in imat material or
iprop property, respectively. KFUNC is a parameter indicating a function storage buffer
in user property or material. KTABLE is a parameter indicating a table storage buffer in
user property or material.

4.6.4 Example of storage / retrieve procedures for RADIOSS functions and tables

a) Direct access via function/table ID

Engine:

ifunc = GET_U_NUMFUN(fun_id)

y = GET_U_FUNC(ifunc, x, dydx)

itable = GET_U_NUMTABLE(table_id)

CALL GET_U_TABLE(itable, x, y)

Function ID (resp. table ID) must be stored in starter in user buffer to be


available in engine routine. This is the simplest manner to access RADIOSS
functions (resp. tables), but may be costly if the model contains a large
number of functions (resp. tables) (GET_U_NUMFUN is called at each cycle
to find a function number out of its ID number). It is recommended for small
RADIOSS models.

a) Direct access via function number

Starter:

ifunc = GET_U_NUMFUN(fun_id)

itable = GET_U_NUMTABLE(table_id)

Engine:

y = GET_U_FUNC(ifunc, x, dydx)

CALL GET_U_TABLE(itable, x, y)

The function number is retrieved once in starter and stored in user buffer.
Engine subroutine access the function directly by its number.

October, 2011 71
RADIOSS USER’S CODE USER’S ELEMENTS

Note: GET_U_NUMFUN may be called in starter version 44 or higher, with


block input format.

a) Function access via user property or user material index

Starter:

ifunc = GET_U_PNU(prop_index, iprop, KFUNC), or

ifunc = GET_U_MNU(mat_index, imat, KFUNC)

itable = GET_U_PNU(prop_index, iprop, KTABLE)

(inside user material laws itable can be stored in UPARAM array).

Engine:

y = GET_U_FUNC(ifunc, x, dydx)

CALL GET_U_TABLE(itable, x, y)

The function number is restored in starter using internal function indexes in


user property or material.

Note: prop_index, or mat_index are independent for each user property (iprop
or imat) and numerotated from one to max number of functions in related
property. Engine routines access the function values directly by its stored
number, as previous. This is the recommended manner for big RADIOSS
models if an old RADIOSS version is used.
Note: The same principles apply to user property or material, with the exception that
storing property or material numbers are possible only in Starter initialisation routines, and not
lecture routines (for details, see user property examples).

October, 2011 72
RADIOSS USER’S CODE USER’S ELEMENTS

Table 1: User access functions call range


Access function User routine
lecsen_us user_sens
userwis userwi lecgxx rinixx ruserxx
rx x
set_u_geo x
set_u_pnu x
set_u_sens_value x x X
set_u_sens_ipar x
set_u_sens_fpar x
set_u_sens_acti x x X
get_u_geo x x x x x X
get_u_mat x x x x x x X
get_u_pnu x x x x x X
get_u_mnu x x x x x x X
get_u_pid x x x x x X
get_u_mid x x x x x x X
get_u_m x x x x x x X
get_u_p x x x x x X
get_u_func x x x x x x X
get_u_table* x x x x x x X
get_u_numfun x x x x x x X
get_u_numtable* x x x x x x X
get_u_skew x x x x x x X
get_u_skew_num x x x x x x X
get_u_sens_ipar x x X
get_u_sens_ipar x x X
get_u_numsens x x X
get_u_idsens x x X
get_u_sens_value x x X
get_u_sens_acti x x X
get_u_numacc x x X
get_u_accel x x X
get_u_numnod x x X
get_u_nod_x x x X
get_u_nod_d x x x
get_u_nod_v x x x
get_u_nod_a
get_u_time
get_u_cycle
* usage of get_u_numtable and get_u_table
need the use of fortran module INTERFACE_UTABLE_MOD :
USE INTERFACE_UTABLE_MOD
included either in library either in user module package(windows)

October, 2011 73
RADIOSS USER’S CODE USER’S ELEMENTS

4.7 EXAMPLE of user’s SPRING element

EXAMPLE: An elastic beam is defined with one user property (type 1) refering two user
properties (one for each beam end, type 2). Each secondary user property defines beam
geometry and refers to one user material.

Spring elements:

(Refer to the Predit Property option (pid36) described in the Starter Input Manual for more
explanation about this spring property)

4.7.1 User’s input data (/PROP/USERn/ option)


[…]
#--1---|---2---|---3---|---4---|---5---|---6---|---7---|---8---|---9---|--10---|
/MAT/USER1/7/mat7 used by property 3
# Init. dens. Ref. dens.
0.0078 0.0078
# E Nu
200000 0.3
#--1---|---2---|---3---|---4---|---5---|---6---|---7---|---8---|---9---|--10---|
/MAT/USER1/9/mat9 used by property 5
# Init. dens. Ref. dens.
0.0078 0.0078
# E Nu
200000 0.3
#--1---|---2---|---3---|---4---|---5---|---6---|---7---|---8---|---9---|--10---|
/SPRING/1
# Id N1 N2 N3
1 1 2 100
#--1---|---2---|---3---|---4---|---5---|---6---|---7---|---8---|---9---|--10---|
/PROP/USER1/1/pid1 using property 3 and 5
# Iutyp
1
# skew prop1 prop2
0 3 5
# xk
0
#--1---|---2---|---3---|---4---|---5---|---6---|---7---|---8---|---9---|--10---|
/PROP/USER1/3/property 3 used by property 1
# Iutyp
2
# mat
7
# Area Ixx Iyy Izz
36 216 108 108
#--1---|---2---|---3---|---4---|---5---|---6---|---7---|---8---|---9---|--10---|
/PROP/USER1/5/property 5 used by property 1
# Iutyp
2
# mat
9
# Area Ixx Iyy Izz
36 216 108 108
#--1---|---2---|---3---|---4---|---5---|---6---|---7---|---8---|---9---|--10---|
[…]

October, 2011 74
RADIOSS USER’S CODE USER’S ELEMENTS

4.7.2 Starter property user’s subroutine LECGnn


C=================================================================
C This subroutine reads the user geometry parameters.
C=================================================================
SUBROUTINE LECG29(IIN ,IOUT ,NUVAR ,PARGEO)
C-----------------------------------------------
C I m p l i c i t T y p e s
C-----------------------------------------------
C#include "implicit_f.inc"
C-----------------------------------------------
C D u m m y A r g u m e n t s
C-----------------------------------------------
INTEGER IIN,IOUT,NUVAR
DOUBLE PRECISION
. PARGEO(*)
INTEGER SET_U_PNU,SET_U_GEO,
. KFUNC,KMAT,KPROP
EXTERNAL SET_U_PNU,SET_U_GEO
PARAMETER (KFUNC=29)
PARAMETER (KMAT=31)
PARAMETER (KPROP=33)
C
C-----------------------------------------------
C L o c a l V a r i a b l e s
C-----------------------------------------------
INTEGER ISK,IUTYP,PID1,PID2,MID1,IERROR
DOUBLE PRECISION
. XK,AREA,IXX,IYY,IZZ,AA
C
READ(IIN,'(I8)',ERR=999,END=999)IUTYP
C
IF(IUTYP.EQ.1)THEN
C-------------------------------------------------------
NUVAR = 10
AA = IUTYP
IERROR = SET_U_GEO(1,AA)
C
C
READ(IIN,ERR=999,END=999,FMT='(3I8)')ISK,PID1,PID2
C
C PID1 and PID2 are USER property IDs
IERROR = SET_U_PNU(1,PID1,KPROP)
IERROR = SET_U_PNU(2,PID2,KPROP)
C
READ(IIN,ERR=999,END=999,FMT='(F16.0)')XK
C
PARGEO(1) = ISK
PARGEO(2) = XK
C
WRITE(IOUT,1000)ISK,PID1,PID2,XK
C
ELSEIF(IUTYP.EQ.2)THEN
C-------------------------------------------------------
READ(IIN,ERR=999,END=999,FMT='(2I8)')MID1
C MID1 is a USER material ID
IERROR = SET_U_PNU(1,MID1,KMAT)
C

October, 2011 75
RADIOSS USER’S CODE USER’S ELEMENTS

READ(IIN,ERR=999,END=999,FMT='(4F16.0)')AREA,IXX,IYY,IZZ
C
NUVAR = 0
AA = IUTYP
IERROR = SET_U_GEO(1,AA)
IERROR = SET_U_GEO(2,AREA)
IERROR = SET_U_GEO(3,IXX)
IERROR = SET_U_GEO(4,IYY)
IERROR = SET_U_GEO(5,IZZ)
C
WRITE(IOUT,2000)MID1,AREA,IXX,IYY,IZZ
C
ENDIF
C
RETURN
999 CONTINUE
WRITE(IOUT,*)' **ERROR IN USER PROPERTY INPUT'
RETURN
1000 FORMAT(
& 5X,' USER PROPERTY TYPE 1 (used by spring elements) ',/,
& 5X,' -------------------- ',//,
& 5X,'SKEW ID . . . . . . . . . . . . . . . .=',I8/
& 5X,'FIRST END TYPE 2 USER PROPERTY ID . . .=',I8/
& 5X,'SECOND END TYPE 2 USER PROPERTY ID. . .=',I8/
& 5X,'STIFNESS FOR INTERFACE. . . . . . . . .=',E12.4//)
2000 FORMAT(
& 5X,' USER PROPERTY TYPE 2 (used by property type 1) ',/,
& 5X,' -------------------- ',//,
& 5X,'USER MATERIAL ID. . . . . . . . . . . .=',I8/,
& 5X,'AREA. . . . . . . . . . . . . . . . . .=',E12.4/,
& 5X,'TORSION SECTION INERTIA . . . . . . . .=',E12.4/,
& 5X,'BENDIG SECTION INERTIA IYY. . . . . . .=',E12.4/,
& 5X,'BENDIG SECTION INERTIA IZZ. . . . . . .=',E12.4//)
END

4.7.3 Starter property initialization user’s subroutine RINInn

C-------------------------------------------------------------------------
C This subroutine initialize springs using user properties.
C-------------------------------------------------------------------------
SUBROUTINE RINI29(NEL ,IOUT ,IPROP ,
3 IX ,XL ,MASS ,XINER ,STIFM ,
4 STIFR ,VISCM ,VISCR ,UVAR ,NUVAR )
C-----------------------------------------------
C I m p l i c i t T y p e s
C-----------------------------------------------
C#include "implicit_f.inc"
C----------------------------------------------------------
C D u m m y A r g u m e n t s a n d F u n c t i o n
C----------------------------------------------------------
INTEGER IOUT,NUVAR,NEL,IPROP,
. IX(4,NEL) ,
. GET_U_PNU,GET_U_PID,GET_U_MID,GET_U_MNU,
. KFUNC,KMAT,KPROP
DOUBLE PRECISION

October, 2011 76
RADIOSS USER’S CODE USER’S ELEMENTS

. XL(NEL) ,MASS(NEL) ,XINER(NEL) ,STIFM(NEL) ,


. STIFR(NEL),VISCM(NEL) ,VISCR(NEL),UVAR(NUVAR,*),
. GET_U_MAT,GET_U_GEO
EXTERNAL GET_U_PNU,GET_U_MNU,GET_U_MAT,GET_U_GEO,GET_U_PID,
. GET_U_MID
PARAMETER (KFUNC=29)
PARAMETER (KMAT=31)
PARAMETER (KPROP=33)
C-----------------------------------------------
C L o c a l V a r i a b l e s
C-----------------------------------------------
DOUBLE PRECISION
. FAC,RHO,AREA,IXX,IYY,IZZ,IMYZ,YOUNG,G,
. AREA1,IXX1,IYY1,IZZ1,RHO1,YOUNG1,G1,
. AREA2,IXX2,IYY2,IZZ2,RHO2,YOUNG2,G2,
. K11,K22,K26,K33,K35,K44,K55,K5B,K66,K6C
INTEGER I,IUTYP,
. IMAT1,IPROP1,IUTYP1,
. IMAT2,IPROP2,IUTYP2
C-----------------------------------------------
C Property number return
C-----------------------------------------------
IPROP1 = GET_U_PNU(1,IPROP,KPROP)
IPROP2 = GET_U_PNU(2,IPROP,KPROP)
IUTYP = NINT(GET_U_GEO(1,IPROP))
IF(IUTYP.NE.1)THEN
WRITE(IOUT,*)' **ERROR IN SPRING USER PROPERTY',
. GET_U_PID(IPROP)
ENDIF
C NOT USED IN THIS EXAMPLE
C IMAT = GET_U_PNU(1,IPROP,KMAT)
C IFUNC = GET_U_PNU(1,IPROP,KFUNC)
C-----------------------------------------------
C FIRST END:
C-----------------------------------------------
IUTYP1 = NINT(GET_U_GEO(1,IPROP1))
IF(IUTYP1.NE.2)THEN
WRITE(IOUT,*)' **ERROR SPRING USER PROPERTY',
. GET_U_PID(IPROP),' REFERS TO WRONG USER PROPERTY',
. GET_U_PID(IPROP1)
ENDIF
AREA1 = GET_U_GEO(2,IPROP1)
IXX1 = GET_U_GEO(3,IPROP1)
IYY1 = GET_U_GEO(4,IPROP1)
IZZ1 = GET_U_GEO(5,IPROP1)
C NOT USED IN THIS EXAMPLE
C IFUNC = GET_U_PNU(1,IPROP1,KFUNC)
C IPROP = GET_U_PNU(1,IPROP1,KPROP)
IMAT1 = GET_U_PNU(1,IPROP1,KMAT)
YOUNG1 = GET_U_MAT(7,IMAT1)
G1 = GET_U_MAT(6,IMAT1)
RHO1 = GET_U_MAT(0,IMAT1)
C-----------------------------------------------
C SECOND END:
C-----------------------------------------------
IUTYP2 = NINT(GET_U_GEO(1,IPROP2))
IF(IUTYP2.NE.2)THEN
WRITE(IOUT,*)' **ERROR SPRING USER PROPERTY',

October, 2011 77
RADIOSS USER’S CODE USER’S ELEMENTS

. GET_U_PID(IPROP),' REFERS TO WRONG USER PROPERTY',


. GET_U_PID(IPROP2)
ENDIF
AREA2 = GET_U_GEO(2,IPROP2)
IXX2 = GET_U_GEO(3,IPROP2)
IYY2 = GET_U_GEO(4,IPROP2)
IZZ2 = GET_U_GEO(5,IPROP2)
C SEE LECM29 FOR USER MATERIAL PARAMETER STORAGE (RHO IS ALLWAYS AT 0)
IMAT2 = GET_U_PNU(1,IPROP2,KMAT)
YOUNG2 = GET_U_MAT(7,IMAT2)
G2 = GET_U_MAT(6,IMAT2)
RHO2 = GET_U_MAT(0,IMAT2)
C-----------------------------------------------
C MEAN VALUES:
C-----------------------------------------------
FAC = 0.5*(AREA1*RHO1+AREA2*RHO2)
AREA = 0.5*(AREA1+AREA2)
RHO = 0.5*(RHO1+RHO2)
FAC = AREA*RHO
IXX = 0.5*(IXX1+IXX2)
IYY = 0.5*(IYY1+IYY2)
IZZ = 0.5*(IZZ1+IZZ2)
IMYZ = MAX(IYY,IZZ)
YOUNG = 0.5*(YOUNG1+YOUNG2)
G = 0.5*(G1+G2)
C--------------------------------------
C ELEMENT CHECK
C--------------------------------------
DO I=1,NEL
IF(XL(I).EQ.0.0)THEN
WRITE(IOUT,*)' **ERROR ZERO LENGTH SPRING :'
ENDIF
ENDDO
C--------------------------------------
C ELEMENT INITIALIZATION
C--------------------------------------
DO I=1,NEL
MASS(I) = XL(I)*FAC
XINER(I) = XL(I)*RHO*MAX(IXX,IMYZ+AREA*XL(I)*XL(I)/12)
K11 = YOUNG * AREA / XL(I)
K22 = 12. * YOUNG * IZZ / (XL(I)*XL(I)*XL(I))
K26 = 0.5 * XL(I) * K22
K33 = 12. * YOUNG * IYY / (XL(I)*XL(I)*XL(I))
K35 = - 0.5 * XL(I) * K33
K44 = G * IXX / XL(I)
K55 = 4. * YOUNG * IYY / XL(I)
K5B = 0.5 * K55
K66 = 4. * YOUNG * IZZ / XL(I)
K6C = 0.5 * K66
UVAR(1,I) = K11
UVAR(2,I) = K22
UVAR(3,I) = K26
UVAR(4,I) = K33
UVAR(5,I) = K35
UVAR(6,I) = K44
UVAR(7,I) = K55
UVAR(8,I) = K5B
UVAR(9,I) = K66

October, 2011 78
RADIOSS USER’S CODE USER’S ELEMENTS

UVAR(10,I)= K6C
C--------------------------------------
C VALUES PRINT
C--------------------------------------
print *, 'UVAR(1,2) =',UVAR(1,2)
print *, 'UVAR(2,2) =',UVAR(2,2)
print *, 'UVAR(3,2) =',UVAR(3,2)
print *, 'UVAR(4,2) =',UVAR(4,2)
print *, 'UVAR(5,2) =',UVAR(5,2)
print *, 'UVAR(6,2) =',UVAR(6,2)
print *, 'UVAR(7,2) =',UVAR(7,2)
print *, 'UVAR(8,2) =',UVAR(8,2)
print *, 'UVAR(9,2) =',UVAR(9,2)
print *, 'UVAR(10,2) =',UVAR(10,2)
print *, 'YOUNG1 =',YOUNG1
print *, 'YOUNG2 =',YOUNG2
print *, 'AREA =',AREA

C--------------------------------------
C NODAL AND ELEMENT TIME STEP COMPUTATION
C--------------------------------------
STIFM(I) = MAX(K11,K22,K33)
STIFR(I) = MAX(K44,K55,K66)
VISCM(I) = 0.
VISCR(I) = 0.
C--------------------------------------
ENDDO
C--------------------------------------
RETURN
END

4.7.4 Starter material user’s subroutine LECMnn


C-------------------------------------------------------------------------
C This subroutine reads user material parameters stored in /MAT/USER1
C-------------------------------------------------------------------------
SUBROUTINE LECM29(IIN ,IOUT ,UPARAM ,MAXUPARAM,NUPARAM,
. NUVAR,IFUNC,MAXFUNC,NFUNC ,PARMAT )
C-----------------------------------------------
C I m p l i c i t T y p e s
C-----------------------------------------------
IMPLICIT NONE
C-----------------------------------------------
C D u m m y A r g u m e n t s
C-----------------------------------------------
INTEGER IIN,IOUT,MAXUPARAM,NUPARAM,NUVAR,MAXFUNC,NFUNC,
. IFUNC(MAXFUNC)
DOUBLE PRECISION UPARAM(MAXUPARAM),PARMAT(*)
C-----------------------------------------------
C L o c a l V a r i a b l e s
C-----------------------------------------------
DOUBLE PRECISION E,NU,A11,A12,A44
C======================================
C
C ELASTIC LAW WITH SHELLS
C
C======================================

October, 2011 79
RADIOSS USER’S CODE USER’S ELEMENTS

C
C-----------------------------------------------
C INPUT FILE READING (USER DATA)
C-----------------------------------------------
READ(IIN,'(2F16.0)')E,NU
C
A11 = E * (1.-NU) / (1.+NU) / (1.-2.*NU)
A12 = E * NU / (1.+NU) / (1.-2.*NU)
A44 = E / 2. / (1.+NU)
C
C-----------------------------------------------
C DATA CHECKING
C-----------------------------------------------
IF(NU.LT.0.0.OR.NU.GE.0.5)THEN
WRITE(IOUT,*)' ** ERROR : WRONG NU VALUE'
ENDIF
NUPARAM = 7
IF(NUPARAM.GT.MAXUPARAM)THEN
WRITE(IOUT,*)' ** ERROR : NUPARAM GT MAXUPARAM'
WRITE(IOUT,*)' NUPARAM =',NUPARAM,
. ' MAXUPARAM =',MAXUPARAM
ELSE
C-----------------------------------------------
C USER MATERIAL PARAMETERS DEFINITION
C-----------------------------------------------
C
UPARAM(1) = A11
UPARAM(2) = A12
UPARAM(3) = A44
UPARAM(4) = E/(1.-NU*NU)
UPARAM(5) = NU*E/(1.-NU*NU)
UPARAM(6) = 0.5*E/(1.+NU)
UPARAM(7) = E
ENDIF
C
PARMAT(1) = A11
PARMAT(2) = E
PARMAT(3) = NU
C
C-------------------------------------------------
C NUMBER OF USER ELEMENT VARIABLES AND CURVES
C-------------------------------------------------
NUVAR = 10
NFUNC = 0
C
C-------------------------------------------------
C OUTPUT FILE PRINT
C-------------------------------------------------
WRITE(IOUT,1000)
WRITE(IOUT,1100)E,NU
C
1000 FORMAT(
& 5X,' ELASTIC USER LAW 29',/,
& 5X,' used in property ',/,
& 5X,' ------------------ ',//)
1100 FORMAT(
& 5X,'E . . . . . . . . . . . . . . . . . . .=',E12.4/
& 5X,'NU. . . . . . . . . . . . . . . . . . .=',E12.4//)

October, 2011 80
RADIOSS USER’S CODE USER’S ELEMENTS

C
C-------------------------------------------------
C END
C-------------------------------------------------
RETURN
END

4.7.5 Engine property user’s subroutine RUSERnn


C-------------------------------------------------------------------------
C This subroutine computes springs forces and moments.
C-------------------------------------------------------------------------
SUBROUTINE RUSER29(NEL,IOUT ,IPROP ,UVAR ,NUVAR ,
2 FX ,FY ,FZ ,XMOM ,YMOM ,
3 ZMOM ,E ,OFF ,STIFM ,STIFR ,
4 VISCM ,VISCR ,MASS ,XINER ,DT ,
5 XL ,VX ,RY1 ,RZ1 ,RX ,
6 RY2 ,RZ2 ,FR_WAVE)
C-----------------------------------------------
C I m p l i c i t T y p e s
C-----------------------------------------------
C#include "implicit_f.inc"
C----------------------------------------------------------
C D u m m y A r g u m e n t s a n d F u n c t i o n
C----------------------------------------------------------
INTEGER IOUT,NEL,NUVAR,IPROP,
. GET_U_PNU,GET_U_PID,GET_U_MID,GET_U_MNU,
. KFUNC,KMAT,KPROP
DOUBLE PRECISION
. UVAR(NUVAR,*),DT ,
. FX(*), FY(*), FZ(*), E(*), VX(*),MASS(*) ,XINER(*),
. RY1(*), RZ1(*), OFF(*), XMOM(*), YMOM(*),
. ZMOM(*), RX(*), RY2(*), RZ2(*),XL(*),
. STIFM(*) ,STIFR(*) , VISCM(*) ,VISCR(*) ,FR_WAVE(*) ,
. GET_U_MAT, GET_U_GEO, GET_U_FUNC
EXTERNAL GET_U_MNU,GET_U_PNU,GET_U_MID,GET_U_PID,
. GET_U_MAT,GET_U_GEO, GET_U_FUNC
PARAMETER (KFUNC=29)
PARAMETER (KMAT=31)
PARAMETER (KPROP=33)
C
C-----------------------------------------------
C L o c a l V a r i a b l e s
C-----------------------------------------------
INTEGER I,KCST,
. IMAT1,IPROP1,IUTYP1,
. IMAT2,IPROP2,IUTYP2
DOUBLE PRECISION
. RHO,AREA,IXX,IYY,IZZ,IMYZ,YOUNG,G,
. AREA1,IXX1,IYY1,IZZ1,RHO1,YOUNG1,G1,
. AREA2,IXX2,IYY2,IZZ2,RHO2,YOUNG2,G2,
. K11,K22,K26,K33,K35,K44,K55,K5B,K66,K6C
C-----------------------------------------------
C KCST = 0
KCST = 1
C

October, 2011 81
RADIOSS USER’S CODE USER’S ELEMENTS

IPROP1 = GET_U_PNU(1,IPROP,KPROP)
AREA1 = GET_U_GEO(2,IPROP1)
IXX1 = GET_U_GEO(3,IPROP1)
IYY1 = GET_U_GEO(4,IPROP1)
IZZ1 = GET_U_GEO(5,IPROP1)
IPROP2 = GET_U_PNU(2,IPROP,KPROP)
AREA2 = GET_U_GEO(2,IPROP2)
IXX2 = GET_U_GEO(3,IPROP2)
IYY2 = GET_U_GEO(4,IPROP2)
IZZ2 = GET_U_GEO(5,IPROP2)
IMAT1 = GET_U_PNU(1,IPROP1,KMAT)
YOUNG1 = GET_U_MAT(7,IMAT1)
G1 = GET_U_MAT(6,IMAT1)
RHO1 = GET_U_MAT(0,IMAT1)
IMAT2 = GET_U_PNU(1,IPROP2,KMAT)
YOUNG2 = GET_U_MAT(7,IMAT2)
G2 = GET_U_MAT(6,IMAT2)
RHO2 = GET_U_MAT(0,IMAT2)
C
RHO = 0.5*(RHO1+RHO2)
AREA = 0.5*(AREA1+AREA2)
IXX = 0.5*(IXX1+IXX2)
IYY = 0.5*(IYY1+IYY2)
IZZ = 0.5*(IZZ1+IZZ2)
IMYZ = MAX(IYY,IZZ)
YOUNG = 0.5*(YOUNG1+YOUNG2)
G = 0.5*(G1+G2)
C
DO I=1,NEL
IF(KCST.EQ.1)THEN
K11 = UVAR(1,I)
K22 = UVAR(2,I)
K26 = UVAR(3,I)
K33 = UVAR(4,I)
K35 = UVAR(5,I)
K44 = UVAR(6,I)
K55 = UVAR(7,I)
K5B = UVAR(8,I)
K66 = UVAR(9,I)
K6C = UVAR(10,I)
ELSE
K11 = YOUNG * AREA / XL(I)
K22 = 12. * YOUNG * IZZ / (XL(I)*XL(I)*XL(I))
K26 = 0.5 * XL(I) * K22
K33 = 12. * YOUNG * IYY / (XL(I)*XL(I)*XL(I))
K35 = - 0.5 * XL(I) * K33
K44 = G * IXX / XL(I)
K55 = 4. * YOUNG * IYY / XL(I)
K5B = 0.5 * K55
K66 = 4. * YOUNG * IZZ / XL(I)
K6C = 0.5 * K66
ENDIF
C==========================================
C NODAL VELOCITIES IN COROTATIONAL FRAME :
C==========================================
C VX1 = -VX(I)/2 (FRAME IS ATTACHED BETWEEN NODE 1 AND 2)
C VX2 = VX(I)/2
C VY1 = VY2 = VZ1 = VZ2 = 0

October, 2011 82
RADIOSS USER’S CODE USER’S ELEMENTS

C RX1 = -RX(I)/2 ( FRAME IS ATTACHED TO MEAN


C RX2 = RX(I)/2 X ROTATION OF NODE 1 AND 2 )
C RY1(I), RY2(I), RZ1(I), RZ2(I)
C
C=========================================================
C NODAL FORCES AND MOMENTS RATES VERSUS NODAL VELOCITIES:
C=========================================================
C -D(FX1)/DT = K11 * VX1 - K11 * VX2
C -D(FY1)/DT = K22 * VY1 + K26 * RZ1 - K22 * VY2 + K26 * RZ2
C -D(FZ1)/DT = K33 * VZ1 + K35 * RY1 - K33 * VZ2 + K35 * RY2
C -D(MX1)/DT = K44 * RX1 - K44 * RX2
C -D(MY1)/DT = K35 * VZ1 + K55 * RY1 - K35 * VZ2 + K5B * RY2
C -D(MZ1)/DT = K26 * VY1 + K66 * RZ1 - K26 * VY2 + K6C * RZ2
C -D(FX2)/DT = - K11 * VX1 + K11 * VX2
C -D(FY2)/DT = - K22 * VY1 - K26 * RZ1 + K22 * VY2 - K26 * RZ2
C -D(FZ2)/DT = - K33 * VZ1 - K35 * RY1 + K33 * VZ2 - K35 * RY2
C -D(MX2)/DT = - K44 * RX1 + K44 * RX2
C -D(MY2)/DT = K35 * VZ1 + K5B * RY1 - K35 * VZ2 + K55 * RY2
C -D(MZ2)/DT = K26 * VY1 + K6C * RZ1 - K26 * VY2 + K66 * RZ2
C
C============================================
C ELEMENT VERSUS NODAL FORCES AND MOMENTS :
C============================================
C FX(I) = FX(I) - DT * D(FX2)/DT
C FY(I) = FY(I) - DT * D(FY2)/DT
C FZ(I) = FZ(I) - DT * D(FZ2)/DT
C
C XMOM(I) = XMOM(I) - 0.5*DT*(D(MX2)/DT - D(MX1)/DT)
C YMOM(I) = YMOM(I) - 0.5*DT*(D(MY2)/DT - D(MY1)/DT)
C ZMOM(I) = ZMOM(I) - 0.5*DT*(D(MZ2)/DT - D(MZ1)/DT)
C============================================
FX(I) = FX(I) + DT * K11 * VX(I)
FY(I) = FY(I) - DT * K26 * (RZ1(I) + RZ2(I))
FZ(I) = FZ(I) - DT * K35 * (RY1(I) + RY2(I))
C
XMOM(I) = XMOM(I) + DT * K44 * RX(I)
YMOM(I) = YMOM(I) + 0.5 * DT * (K55 - K5B) * (RY2(I) - RY1(I))
ZMOM(I) = ZMOM(I) + 0.5 * DT * (K66 - K6C) * (RZ2(I) - RZ1(I))

C print *, 'FX(2) =',FX(2)


C print *, 'FY(2) =',FY(2)
C print *, 'FZ(2) =',FZ(2)
C print *, 'XMOM(2) =',XMOM(2)
C print *, 'YMOM(2) =',YMOM(2)
C print *, 'ZMOM(2) =',ZMOM(2)
C print *, 'K11 =',K11
C print *, 'VX(2) =',VX(2)
C print *, 'KCST =',KCST
C print *, 'UVAR(1,2) =',UVAR(1,2)

C============================================
C NODAL VERSUS ELEMENT FORCES AND MOMENTS :
C ( COMPUTED BY RADIOSS )
C============================================
C FX1 = FX(I)
C FY1 = FY(I)
C FZ1 = FZ(I)
C FX2 = -FX(I)

October, 2011 83
RADIOSS USER’S CODE USER’S ELEMENTS

C FY2 = -FY(I)
C FZ2 = -FZ(I)
C MX1 = XMOM(I)
C MY1 = YMOM(I)-0.5*XL(I)*FZ(I)
C MZ1 = ZMOM(I)+0.5*XL(I)*FY(I)
C MX2 = -XMOM(I)
C MY2 = -YMOM(I)-0.5*XL(I)*FZ(I)
C MZ2 = -ZMOM(I)+0.5*XL(I)*FY(I)
C============================================
C TIME STEP
C============================================
STIFM(I) = MAX(K11,K22,K33)
STIFR(I) = MAX(K44,K55,K66)
VISCM(I) = 0.
VISCR(I) = 0.
XINER(I) = XL(I)*RHO*MAX(IXX,IMYZ+AREA*XL(I)*XL(I)/12)
ENDDO

C-------------------------------
RETURN

END

October, 2011 84
RADIOSS USER’S CODE USER’S ELEMENTS

4.8 EXAMPLE of user’s triangular SHELL elements (using solid property)

EXAMPLE: A triangular shell property is defined using a user’s solid property with rotational
degrees of freedom at nodes. Bricks are degenerated to 3 node shells. Property reads stresses
computed in a user’s material. Internal forces, internal moments and strain increments are
written..

3-node-shell mesh is made up with two degenarated


brick elements:

Element degeneration: 7 8 3-7


3 4

6 5
2-6 1-4-5-8
2 1
Connectivity: 1 2 3 4 5 6 7 8 Connectivity: 1 2 3 1 1 2 3 1

4.8.1 User’s input data (/MAT/PROPn/ option)

[…]
#--1---|---2---|---3---|---4---|---5---|---6---|---7---|---8---|---9---|--10---|
/MAT/USER1/1/user material used for property
# Init. dens. Ref. dens.
0.00785 0
# E Nu
3102.75 0.3
#--1---|---2---|---3---|---4---|---5---|---6---|---7---|---8---|---9---|--10---|
/PROP/USER1/1/triangular shell element
# THICK
12.7
# MID1
1
#--1---|---2---|---3---|---4---|---5---|---6---|---7---|---8---|---9---|--10---|
/BRICK/1
# Id N1 N2 N3 N4 N5 N6 N7 N8
1 1 2 3 1 1 2 3 1
2 2 4 3 2 2 4 3 2
#--1---|---2---|---3---|---4---|---5---|---6---|---7---|---8---|---9---|--10---|
[…]

4.8.2 Starter property user’s subroutine LECGnn

C=================================================================
C This subroutine reads the user geometry parameters.
C=================================================================
SUBROUTINE LECG29(IIN ,IOUT ,NUVAR ,PARGEO)
C-----------------------------------------------
C I m p l i c i t T y p e s
C-----------------------------------------------
C#include "implicit_f.inc"

October, 2011 85
RADIOSS USER’S CODE USER’S ELEMENTS

C-----------------------------------------------
C D u m m y A r g u m e n t s
C-----------------------------------------------
INTEGER IIN,IOUT,NUVAR
DOUBLEPRECISION
. PARGEO(*)
INTEGER SET_U_PNU,SET_U_GEO,
. KFUNC,KMAT,KPROP
EXTERNAL SET_U_PNU,SET_U_GEO
PARAMETER (KFUNC=29)
PARAMETER (KMAT=31)
PARAMETER (KPROP=33)
C
C-----------------------------------------------
C L o c a l V a r i a b l e s
C-----------------------------------------------
INTEGER MID1,IERROR
DOUBLEPRECISION
. THK
C====================================================
C
C ELASTIC TRIANGULAR SHELL ELEMENT
C
C====================================================
C
NUVAR = 7
C
READ(IIN,ERR=999,END=999,FMT='(F16.0)')THK
C
C THICK is stored in index value 1
IERROR = SET_U_GEO(1,THK)
C
READ(IIN,ERR=999,END=999,FMT='(2I8)')MID1
C MID1 is a USER material ID:
IERROR = SET_U_PNU(1,MID1,KMAT)
C
C READ(IIN,ERR=999,END=999,FMT='(2I8)')NIP
C
C NIP is stored in index value 2
C IERROR = SET_U_GEO(2,NIP)
C
WRITE(IOUT,1000)THK,MID1
C
C
RETURN
999 CONTINUE
WRITE(IOUT,*)' **ERROR IN USER PROPERTY INPUT'
RETURN
1000 FORMAT(
& 5X,' USER TRIANGULAR SHELL PROPERTY ',/,
& 5X,' ------------------------------ ',//,
& 5X,'THICKNESS . . . . . . . . . . . . . . .=',E12.4/,
& 5X,'USER MATERIAL ID . . . . . . . . . . .=',I8//)
C & 5X,'Integration points . . . . . . . . . .=',I8//)
END

October, 2011 86
RADIOSS USER’S CODE USER’S ELEMENTS

4.8.3 Starter property initialization user’s subroutine SINInn

C=================================================================
C This subroutine initialize triangular shell properties
C=================================================================
SUBROUTINE SINI29(
1 NEL ,NUVAR,IOUT ,IPROP ,IMAT,SOLID_ID,
2 EINT ,VOL ,UVAR ,OFF,RHO ,SIG ,
3 XX1 ,XX2 ,XX3 ,XX4 ,XX5 ,XX6 ,XX7 ,XX8 ,
4 YY1 ,YY2 ,YY3 ,YY4 ,YY5 ,YY6 ,YY7 ,YY8 ,
5 ZZ1 ,ZZ2 ,ZZ3 ,ZZ4 ,ZZ5 ,ZZ6 ,ZZ7 ,ZZ8 ,
6 VX1 ,VX2 ,VX3 ,VX4 ,VX5 ,VX6 ,VX7 ,VX8 ,
7 VY1 ,VY2 ,VY3 ,VY4 ,VY5 ,VY6 ,VY7 ,VY8 ,
8 VZ1 ,VZ2 ,VZ3 ,VZ4 ,VZ5 ,VZ6 ,VZ7 ,VZ8 ,
9 VRX1 ,VRX2 ,VRX3 ,VRX4 ,VRX5 ,VRX6 ,VRX7 ,VRX8 ,
A VRY1 ,VRY2 ,VRY3 ,VRY4 ,VRY5 ,VRY6 ,VRY7 ,VRY8 ,
B VRZ1 ,VRZ2 ,VRZ3 ,VRZ4 ,VRZ5 ,VRZ6 ,VRZ7 ,VRZ8 ,
C MAS1 ,MAS2 ,MAS3 ,MAS4 ,MAS5 ,MAS6 ,MAS7 ,MAS8 ,
D INN1 ,INN2 ,INN3 ,INN4 ,INN5 ,INN6 ,INN7 ,INN8 ,
C STIFM,STIFR,VISCM,VISCR)
C----------------------------------------------------------
C I m p l i c i t T y p e s
C----------------------------------------------------------
C#include "implicit_f.inc"
C----------------------------------------------------------
C D u m m y A r g u m e n t s
C----------------------------------------------------------
INTEGER NEL,NUVAR,IOUT,IPROP,IMAT,SOLID_ID(*)
DOUBLEPRECISION
. UVAR(NEL,NUVAR),
. STIFM(*) ,STIFR(*) , VISCM(*) ,VISCR(*) ,
. OFF(*) ,EINT(*) , RHO(*) ,VOL(*) ,SIG(6,*),
2 XX1(*),XX2(*),XX3(*),XX4(*),XX5(*),XX6(*),XX7(*),XX8(*),
3 YY1(*),YY2(*),YY3(*),YY4(*),YY5(*),YY6(*),YY7(*),YY8(*),
4 ZZ1(*),ZZ2(*),ZZ3(*),ZZ4(*),ZZ5(*),ZZ6(*),ZZ7(*),ZZ8(*),
5 VX1(*),VX2(*),VX3(*),VX4(*),VX5(*),VX6(*),VX7(*),VX8(*),
6 VY1(*),VY2(*),VY3(*),VY4(*),VY5(*),VY6(*),VY7(*),VY8(*),
7 VZ1(*),VZ2(*),VZ3(*),VZ4(*),VZ5(*),VZ6(*),VZ7(*),VZ8(*),
8 VRX1(*),VRX2(*),VRX3(*),VRX4(*),VRX5(*),VRX6(*),VRX7(*),VRX8(*),
9 VRY1(*),VRY2(*),VRY3(*),VRY4(*),VRY5(*),VRY6(*),VRY7(*),VRY8(*),
A VRZ1(*),VRZ2(*),VRZ3(*),VRZ4(*),VRZ5(*),VRZ6(*),VRZ7(*),VRZ8(*),
C MAS1(*),MAS2(*),MAS3(*),MAS4(*),MAS5(*),MAS6(*),MAS7(*),MAS8(*),
D INN1(*),INN2(*),INN3(*),INN4(*),INN5(*),INN6(*),INN7(*),INN8(*)
C----------------------------------------------------------
C E x t e r n a l F u n c t i o n
C----------------------------------------------------------
INTEGER GET_U_PNU,GET_U_PID,GET_U_MID,GET_U_MNU
DOUBLEPRECISION
. GET_U_MAT, GET_U_GEO, GET_U_FUNC
EXTERNAL GET_U_MNU,GET_U_PNU,GET_U_MID,GET_U_PID,
. GET_U_MAT,GET_U_GEO, GET_U_FUNC
INTEGER KFUNC,KMAT,KPROP
PARAMETER (KFUNC=29)
PARAMETER (KMAT=31)
PARAMETER (KPROP=33)

October, 2011 87
RADIOSS USER’S CODE USER’S ELEMENTS

C-----------------------------------------------
C L o c a l V a r i a b l e s
C-----------------------------------------------
INTEGER I
DOUBLEPRECISION
. MASS(NEL),INER(NEL),ALMAX(NEL),
. AREA(NEL),E,G,THK,NU,
. P1(NEL),P2(NEL),P3(NEL),
. L1(NEL),L2(NEL),L3(NEL),
. A1(NEL),A2(NEL),A3(NEL),
. AL1,AL2,AL3,
. X21(NEL),Y21(NEL),Z21(NEL),
. X31(NEL),Y31(NEL),Z31(NEL),
. X32(NEL),Y32(NEL),Z32(NEL),
. E1X(NEL),E1Y(NEL),E1Z(NEL),
. E2X(NEL),E2Y(NEL),E2Z(NEL),
. E3X(NEL),E3Y(NEL),E3Z(NEL),
. LE1(NEL),LE2(NEL),LE3(NEL),
. X3(NEL),Y3(NEL),X2(NEL),ALDT(NEL)
C
IMAT = GET_U_PNU(1,IPROP,KMAT)
G = GET_U_MAT(3,IMAT)
E = GET_U_MAT(4,IMAT)
NU = GET_U_MAT(5,IMAT)
THK = GET_U_GEO(1,IPROP)
C
C-----------------------------------------------------------------------
DO I=1,NEL
C-----------------------------------------------------------------------
C
C-----------------------------------------------------------------------
C ELEMENT DEGENERATION - nodes distribution (tetra element)
C-----------------------------------------------------------------------
XX4(I) = XX1(I)
YY4(I) = YY1(I)
ZZ4(I) = ZZ1(I)
XX5(I) = XX1(I)
YY5(I) = YY1(I)
ZZ5(I) = ZZ1(I)
XX6(I) = XX2(I)
YY6(I) = YY2(I)
ZZ6(I) = ZZ2(I)
XX7(I) = XX3(I)
YY7(I) = YY3(I)
ZZ7(I) = ZZ3(I)
XX8(I) = XX1(I)
YY8(I) = YY1(I)
ZZ8(I) = ZZ1(I)
C
C-----------------------------------------------------------------------
C SHAPE FUNCTION -> local reference frame definition
C-----------------------------------------------------------------------
C -> Components of edges
X21(I)=XX2(I)-XX1(I)
Y21(I)=YY2(I)-YY1(I)
Z21(I)=ZZ2(I)-ZZ1(I)
X31(I)=XX3(I)-XX1(I)
Y31(I)=YY3(I)-YY1(I)
Z31(I)=ZZ3(I)-ZZ1(I)
X32(I)=XX3(I)-XX2(I)
Y32(I)=YY3(I)-YY2(I)

October, 2011 88
RADIOSS USER’S CODE USER’S ELEMENTS

Z32(I)=ZZ3(I)-ZZ2(I)
C
C LOCAL FRAME:
C (where E: vector component)
C
C -> Components of vector E1 defining local X direction (edge 1-2)
E1X(I)= X21(I)
E1Y(I)= Y21(I)
E1Z(I)= Z21(I)
LE1(I) = SQRT(E1X(I)*E1X(I)+E1Y(I)*E1Y(I)+E1Z(I)*E1Z(I))
E1X(I)=E1X(I)/LE1(I)
E1Y(I)=E1Y(I)/LE1(I)
E1Z(I)=E1Z(I)/LE1(I)
C
C -> Components of vector E3 defining local Z direction (normal to the
C plane)
E3X(I)=Y31(I)*Z32(I)-Z31(I)*Y32(I)
E3Y(I)=Z31(I)*X32(I)-X31(I)*Z32(I)
E3Z(I)=X31(I)*Y32(I)-Y31(I)*X32(I)
LE3(I) = SQRT(E3X(I)*E3X(I)+E3Y(I)*E3Y(I)+E3Z(I)*E3Z(I))
E3X(I)=E3X(I)/LE3(I)
E3Y(I)=E3Y(I)/LE3(I)
E3Z(I)=E3Z(I)/LE3(I)
C
C -> Components of vector E2 defining local Y direction (cross product)
E2X(I)=E3Y(I)*E1Z(I)-E3Z(I)*E1Y(I)
E2Y(I)=E3Z(I)*E1X(I)-E3X(I)*E1Z(I)
E2Z(I)=E3X(I)*E1Y(I)-E3Y(I)*E1X(I)
LE2(I) = SQRT(E2X(I)*E2X(I)+E2Y(I)*E2Y(I)+E2Z(I)*E2Z(I))
E2X(I)=E2X(I)/LE2(I)
E2Y(I)=E2Y(I)/LE2(I)
E2Z(I)=E2Z(I)/LE2(I)
C
C-----------------------------------------------------------------------
C SIMPLIFIED MASS AND INERTIA COMPUTATION
C-----------------------------------------------------------------------
C Edge 1-2 length:
L1(I) = SQRT(X21(I)*X21(I)+Y21(I)*Y21(I)+Z21(I)*Z21(I))
C Edge 1-3 length:
L2(I) = SQRT(X31(I)*X31(I)+Y31(I)*Y31(I)+Z31(I)*Z31(I))
C Edge 2-3 length:
L3(I) = SQRT(X32(I)*X32(I)+Y32(I)*Y32(I)+Z32(I)*Z32(I))
C
C Angle node 1 :
A1(I) = (L1(I)*L1(I)+ L2(I)*L2(I)-L3(I)*L3(I)) / (2*L1(I)*L2(I))
A1(I) = ACOS(A1(I))
C Angle node 2 :
A2(I) = (L1(I)*L1(I)+L3(I)*L3(I)-L2(I)*L2(I))/(2*L1(I)*L3(I))
A2(I) = ACOS(A2(I))
C Angle node 3 :
A3(I) = (L2(I)*L2(I)+L3(I)*L3(I)-L1(I)*L1(I))/(2*L2(I)*L3(I))
A3(I) = ACOS(A3(I))
C
C Area of the shell element surface
AREA(I) = LE3(I)/2
C
C Element volume
VOL(I)=AREA(I)*THK

October, 2011 89
RADIOSS USER’S CODE USER’S ELEMENTS

C
C Element mass
MASS(I) = RHO(I)*VOL(I)
C
C Mass moment of inertia (element)
C INER(I) = MASS(I)*((2*AREA(I)/6)+(THK*THK/12))
C INER(I) = MASS(I)*((AREA(I)/9)+(THK*THK/12))
INER(I) = 0.0
C
C Mass distribution at nodes
MAS1(I) = MASS(I)/3
MAS2(I) = MASS(I)/3
MAS3(I) = MASS(I)/3
MAS4(I) = 0
MAS5(I) = 0
MAS6(I) = 0
MAS7(I) = 0
MAS8(I) = 0
C
C Inertia distribution at nodes
INN1(I) = A1(I)*INER(I)/3.14
INN2(I) = A2(I)*INER(I)/3.14
INN3(I) = A3(I)*INER(I)/3.14
INN4(I) = 0
INN5(I) = 0
INN6(I) = 0
INN7(I) = 0
INN8(I) = 0
C
C-----------------------------------------------------------------------
C TIME STEP CONTROL
C-----------------------------------------------------------------------
C
C Characteristic length ALDT for computing the critical time step:
Y3(I)=E2X(I)*X31(I)+E2Y(I)*Y31(I)+E2Z(I)*Z31(I)
X3(I)=E1X(I)*X31(I)+E1Y(I)*Y31(I)+E1Z(I)*Z31(I)
X2(I)=E1X(I)*X21(I)+E1Y(I)*Y21(I)+E1Z(I)*Z21(I)
AL1 = X2(I)*X2(I)
AL2 = (X3(I)-X2(I))*(X3(I)-X2(I))+(Y3(I)*Y3(I))
AL3 = X3(I)*X3(I)+Y3(I)*Y3(I)
ALMAX(I) = MAX(AL1,AL2,AL3)
ALMAX(I) = SQRT(ALMAX(I))
C ALDT(I) = MAX(L1(I),L2(I),L3(I))
ALDT(I)= 2*AREA(I) / ALMAX(I)
C
C Variables for element and nodal time step computation:
STIFM(I) = 2*VOL(I) * E / (3*ALDT(I)*ALDT(I))
C STIFR(I) = 0
STIFR(I) = STIFM(I) * (THK * THK / 12 + AREA(I) /9.)
C STIFR(I) = STIFM(I) * (THK * THK / 12
C . + SHF(I) * AREA(I) * G/(4*E))
VISCM(I) = 0
VISCR(I) = 0
C
C-----------------------------------------------------------------------
ENDDO
C-----------------------------------------------------------------------
C

October, 2011 90
RADIOSS USER’S CODE USER’S ELEMENTS

DO I=1,1
print *, 'Parameters CHECK:'
print *, 'Angle 1 =',A1(I)
print *, 'Angle 2 =',A2(I)
print *, 'Angle 3 =',A3(I)
print *, 'Area =',AREA(I)
print *, 'volume =',VOL(I)
print *, 'Global mass =',MASS(I)
print *, 'mass 1 =',MAS1(I)
print *, 'mass 2 =',MAS2(I)
print *, 'mass 3 =',MAS3(I)
print *, 'lC =',ALDT(I)
ENDDO
C
C-----------------------------------------------------------------------
C
RETURN
END

4.8.4 Starter material user’s subroutine LECMnn


C=================================================================
C This subroutine reads the user material parameters.
C=================================================================
SUBROUTINE LECM29(IIN ,IOUT ,UPARAM ,MAXUPARAM,NUPARAM,
. NUVAR,IFUNC,MAXFUNC,NFUNC ,STIFINT)
C-----------------------------------------------
C I m p l i c i t T y p e s
C-----------------------------------------------
C IMPLICIT NONE
C-----------------------------------------------
C D u m m y A r g u m e n t s
C-----------------------------------------------
INTEGER IIN,IOUT,MAXUPARAM,NUPARAM,NUVAR,MAXFUNC,NFUNC,
. IFUNC(MAXFUNC)
DOUBLE PRECISION UPARAM(MAXUPARAM),STIFINT
C-----------------------------------------------
C L o c a l V a r i a b l e s
C-----------------------------------------------
DOUBLE PRECISION E,NU,A11,A12,A44
C
C-----------------------------------------------
C INPUT FILE READING (USER DATA)
C-----------------------------------------------
READ(IIN,'(2F16.0)')E,NU
A11 = E * (1.-NU) / (1.+NU) / (1.-2.*NU)
A12 = E * NU / (1.+NU) / (1.-2.*NU)
A44 = E / 2. / (1.+NU)
C
C-----------------------------------------------
C DATA CHECKING
C-----------------------------------------------
IF(NU.LT.0.0.OR.NU.GE.0.5)THEN
WRITE(IOUT,*)' ** ERROR : WRONG NU VALUE'
ENDIF

October, 2011 91
RADIOSS USER’S CODE USER’S ELEMENTS

NUPARAM = 5
IF(NUPARAM.GT.MAXUPARAM)THEN
WRITE(IOUT,*)' ** ERROR : NUPARAM GT MAXUPARAM'
WRITE(IOUT,*)' NUPARAM =',NUPARAM,
. ' MAXUPARAM =',MAXUPARAM
ELSE
C-----------------------------------------------
C USER MATERIAL PARAMETERS DEFINITION
C-----------------------------------------------
C
UPARAM(1) = E/(1.-NU*NU)
UPARAM(2) = NU*E/(1.-NU*NU)
UPARAM(3) = 0.5*E/(1.+NU)
UPARAM(4) = E
UPARAM(5) = NU
C
ENDIF
C
C-------------------------------------------------
C NUMBER OF USER ELEMENT VARIABLES AND CURVES
C-------------------------------------------------
NUVAR = 7
NFUNC = 0
C
C-----------------------------------------------
C USED FOR SOLIDS (interface)
C-----------------------------------------------
STIFINT = A11
C
C-------------------------------------------------
C OUTPUT FILE PRINT
C-------------------------------------------------
WRITE(IOUT,1000)
WRITE(IOUT,1100)E,NU
C
1000 FORMAT(
& 5X,' ELASTIC USER LAW 29',/,
& 5X,' ------------------ ',//)
1100 FORMAT(
& 5X,'E . . . . . . . . . . . . . . . . . . .=',E12.4/
& 5X,'NU. . . . . . . . . . . . . . . . . . .=',E12.4//)
C
C-------------------------------------------------
C END
C-------------------------------------------------
RETURN
END

4.8.5 Engine property user’s subroutine SUSERnn

C=============================================================================
C This subroutine computes strain, forces and moments (triangular SHELL).
C Solid elements are degenarated to triangular shells.
C=============================================================================
SUBROUTINE SUSER29(
1 NEL ,NUVAR ,IOUT ,IPROP ,IMAT ,SOLID_ID,TIME ,TIMESTEP,

October, 2011 92
RADIOSS USER’S CODE USER’S ELEMENTS

2 EINT ,VOL ,UVAR ,FR_WAVE,OFF ,RHO ,SIG ,


3 XX1 ,XX2 ,XX3 ,XX4 ,XX5 ,XX6 ,XX7 ,XX8 ,
4 YY1 ,YY2 ,YY3 ,YY4 ,YY5 ,YY6 ,YY7 ,YY8 ,
5 ZZ1 ,ZZ2 ,ZZ3 ,ZZ4 ,ZZ5 ,ZZ6 ,ZZ7 ,ZZ8 ,
6 UX1 ,UX2 ,UX3 ,UX4 ,UX5 ,UX6 ,UX7 ,UX8 ,
7 UY1 ,UY2 ,UY3 ,UY4 ,UY5 ,UY6 ,UY7 ,UY8 ,
8 UZ1 ,UZ2 ,UZ3 ,UZ4 ,UZ5 ,UZ6 ,UZ7 ,UZ8 ,
9 VX1 ,VX2 ,VX3 ,VX4 ,VX5 ,VX6 ,VX7 ,VX8 ,
A VY1 ,VY2 ,VY3 ,VY4 ,VY5 ,VY6 ,VY7 ,VY8 ,
B VZ1 ,VZ2 ,VZ3 ,VZ4 ,VZ5 ,VZ6 ,VZ7 ,VZ8 ,
C VRX1 ,VRX2 ,VRX3 ,VRX4 ,VRX5 ,VRX6 ,VRX7 ,VRX8 ,
D VRY1 ,VRY2 ,VRY3 ,VRY4 ,VRY5 ,VRY6 ,VRY7 ,VRY8 ,
E VRZ1 ,VRZ2 ,VRZ3 ,VRZ4 ,VRZ5 ,VRZ6 ,VRZ7 ,VRZ8 ,
F FX1 ,FX2 ,FX3 ,FX4 ,FX5 ,FX6 ,FX7 ,FX8 ,
G FY1 ,FY2 ,FY3 ,FY4 ,FY5 ,FY6 ,FY7 ,FY8 ,
H FZ1 ,FZ2 ,FZ3 ,FZ4 ,FZ5 ,FZ6 ,FZ7 ,FZ8 ,
I MX1 ,MX2 ,MX3 ,MX4 ,MX5 ,MX6 ,MX7 ,MX8 ,
J MY1 ,MY2 ,MY3 ,MY4 ,MY5 ,MY6 ,MY7 ,MY8 ,
K MZ1 ,MZ2 ,MZ3 ,MZ4 ,MZ5 ,MZ6 ,MZ7 ,MZ8 ,
L STIFM ,STIFR ,VISCM ,VISCR )
C
C-----------------------------------------------
C I m p l i c i t T y p e s
C-----------------------------------------------
C#include "implicit_f.inc"
C----------------------------------------------------------
C D u m m y A r g u m e n t s
C----------------------------------------------------------
INTEGER NEL,NUVAR,IOUT,IPROP,IMAT,SOLID_ID(*)
DOUBLEPRECISION
. TIME,TIMESTEP,UVAR(NEL,NUVAR),
. STIFM(*) ,STIFR(*) , VISCM(*) ,VISCR(*) ,FR_WAVE(*),
. OFF(*) ,EINT(*) , RHO(*) ,VOL(*) ,SIG(6,*),
2 XX1(*),XX2(*),XX3(*),XX4(*),XX5(*),XX6(*),XX7(*),XX8(*),
3 YY1(*),YY2(*),YY3(*),YY4(*),YY5(*),YY6(*),YY7(*),YY8(*),
4 ZZ1(*),ZZ2(*),ZZ3(*),ZZ4(*),ZZ5(*),ZZ6(*),ZZ7(*),ZZ8(*),
2 UX1(*),UX2(*),UX3(*),UX4(*),UX5(*),UX6(*),UX7(*),UX8(*),
3 UY1(*),UY2(*),UY3(*),UY4(*),UY5(*),UY6(*),UY7(*),UY8(*),
4 UZ1(*),UZ2(*),UZ3(*),UZ4(*),UZ5(*),UZ6(*),UZ7(*),UZ8(*),
5 VX1(*),VX2(*),VX3(*),VX4(*),VX5(*),VX6(*),VX7(*),VX8(*),
6 VY1(*),VY2(*),VY3(*),VY4(*),VY5(*),VY6(*),VY7(*),VY8(*),
7 VZ1(*),VZ2(*),VZ3(*),VZ4(*),VZ5(*),VZ6(*),VZ7(*),VZ8(*),
8 VRX1(*),VRX2(*),VRX3(*),VRX4(*),VRX5(*),VRX6(*),VRX7(*),VRX8(*),
9 VRY1(*),VRY2(*),VRY3(*),VRY4(*),VRY5(*),VRY6(*),VRY7(*),VRY8(*),
A VRZ1(*),VRZ2(*),VRZ3(*),VRZ4(*),VRZ5(*),VRZ6(*),VRZ7(*),VRZ8(*),
B FX1(*),FX2(*),FX3(*),FX4(*),FX5(*),FX6(*),FX7(*),FX8(*),
C FY1(*),FY2(*),FY3(*),FY4(*),FY5(*),FY6(*),FY7(*),FY8(*),
D FZ1(*),FZ2(*),FZ3(*),FZ4(*),FZ5(*),FZ6(*),FZ7(*),FZ8(*),
E MX1(*),MX2(*),MX3(*),MX4(*),MX5(*),MX6(*),MX7(*),MX8(*),
F MY1(*),MY2(*),MY3(*),MY4(*),MY5(*),MY6(*),MY7(*),MY8(*),
G MZ1(*),MZ2(*),MZ3(*),MZ4(*),MZ5(*),MZ6(*),MZ7(*),MZ8(*)
C----------------------------------------------------------
C E x t e r n a l F u n c t i o n
C----------------------------------------------------------
INTEGER GET_U_PNU,GET_U_PID,GET_U_MID,GET_U_MNU
DOUBLEPRECISION
. GET_U_MAT, GET_U_GEO, GET_U_FUNC
EXTERNAL GET_U_MNU,GET_U_PNU,GET_U_MID,GET_U_PID,
. GET_U_MAT,GET_U_GEO, GET_U_FUNC
INTEGER KFUNC,KMAT,KPROP
PARAMETER (KFUNC=29)
PARAMETER (KMAT=31)
PARAMETER (KPROP=33)
C-----------------------------------------------
C L O C A L V A R I A B L E S
C-----------------------------------------------
INTEGER I,J,NUMARAM
DOUBLEPRECISION THK(NEL),AREA(NEL),THK0,NU,NNU,X,
. RHO0,UPARAM(3),A1,A2,G,
. ALMAX(NEL),ALDT(NEL),AL1,AL2,AL3,
. X21(NEL),Y21(NEL),Z21(NEL),X31(NEL),Y31(NEL),Z31(NEL),
. X32(NEL),Y32(NEL),Z32(NEL),

October, 2011 93
RADIOSS USER’S CODE USER’S ELEMENTS

. E1X(NEL),E1Y(NEL),E1Z(NEL),LE1(NEL),
. E2X(NEL),E2Y(NEL),E2Z(NEL),LE2(NEL),
. E3X(NEL),E3Y(NEL),E3Z(NEL),LE3(NEL),
. Y3(NEL),X3(NEL),X2(NEL),PX1(NEL),PY1(NEL),PX2(NEL),PY2(NEL),
. PY3(NEL),DT1V4,DT1V4B,
. TMP1,TMP2,TMP11,TMP22,VX10,VX20,VX30,
. EXX(NEL),EYY(NEL),EXY(NEL),EZY(NEL),DEZZ,EZZ,
. EZX(NEL),KXX(NEL),KYY(NEL),KXY(NEL),EXZ(NEL),EYZ(NEL),
. VXE1(NEL),VXE2(NEL),VXE3(NEL),
. VYE1(NEL),VYE2(NEL),VYE3(NEL),
. VZE1(NEL),VZE2(NEL),VZE3(NEL),
. VX12(NEL),VY12(NEL),VX13(NEL),VY13(NEL),
. VX23(NEL),VY23(NEL),VZ12(NEL),VZ13(NEL),VZ23(NEL),
. VRXE1(NEL),VRXE2(NEL),VRXE3(NEL),
. VRYE1(NEL),VRYE2(NEL),VRYE3(NEL),
. VRY12(NEL),VRY13(NEL),VRY23(NEL),
. VRX12(NEL),VRX13(NEL),VRX23(NEL),RYAVT,RXAVT,
. SIGNXX(NEL),SIGNYY(NEL),SIGNXY(NEL),SIGNYZ(NEL),SIGNZX(NEL),
. SIGOXX(NEL),SIGOYY(NEL),SIGOXY(NEL),SIGOYZ(NEL),SIGOZX(NEL),
. DEPSXX(NEL),DEPSYY(NEL),DEPSXY(NEL),DEPSYZ(NEL),DEPSZX(NEL),
. EPSXX(NEL),EPSYY(NEL),EPSXY(NEL),EPSYZ(NEL),EPSZX(NEL),
. FOR(5,NEL),MOM(3,NEL),
. F1(NEL),F2(NEL),F3(NEL),F4(NEL),F5(NEL),TH2,
. F11(NEL),F22(NEL),
. FX11(NEL),FX22(NEL),FX33(NEL),FY11(NEL),FY22(NEL),FY33(NEL),
. FZ11(NEL),FZ22(NEL),FZ33(NEL),
. MX11(NEL),MX22(NEL),MX33(NEL),MY11(NEL),MY22(NEL),MY33(NEL),
. M1,M2,M3,M4,M5
C
C-----------------------------------------------------------------------
DO I=1,NEL
C-----------------------------------------------------------------------
C
C=======================================================================
C ELEMENT DEGENERATION - nodes distribution initialization
C=======================================================================
XX4(I) = XX1(I)
YY4(I) = YY1(I)
ZZ4(I) = ZZ1(I)
XX5(I) = XX1(I)
YY5(I) = YY1(I)
ZZ5(I) = ZZ1(I)
XX6(I) = XX2(I)
YY6(I) = YY2(I)
ZZ6(I) = ZZ2(I)
XX7(I) = XX3(I)
YY7(I) = YY3(I)
ZZ7(I) = ZZ3(I)
XX8(I) = XX1(I)
YY8(I) = YY1(I)
ZZ8(I) = ZZ1(I)
C
C=======================================================================
C SHAPE FUNCTION (linear: a+bx+cy) -> local coordinates
C=======================================================================
C -> Components of edges
X21(I)=XX2(I)-XX1(I)
Y21(I)=YY2(I)-YY1(I)
Z21(I)=ZZ2(I)-ZZ1(I)
X31(I)=XX3(I)-XX1(I)
Y31(I)=YY3(I)-YY1(I)
Z31(I)=ZZ3(I)-ZZ1(I)
X32(I)=XX3(I)-XX2(I)
Y32(I)=YY3(I)-YY2(I)
Z32(I)=ZZ3(I)-ZZ2(I)
C
C 1) LOCAL FRAME DEFINITION:
C
C -> Components of vector E1 defining local X direction (edge 1-2)
E1X(I)= X21(I)
E1Y(I)= Y21(I)
E1Z(I)= Z21(I)

October, 2011 94
RADIOSS USER’S CODE USER’S ELEMENTS

LE1(I) = SQRT(E1X(I)*E1X(I)+E1Y(I)*E1Y(I)+E1Z(I)*E1Z(I))
E1X(I)=E1X(I)/LE1(I)
E1Y(I)=E1Y(I)/LE1(I)
E1Z(I)=E1Z(I)/LE1(I)
C
C -> Components of vector E3 defining local Z direction (normal to the plane)
E3X(I)=Y31(I)*Z32(I)-Z31(I)*Y32(I)
E3Y(I)=Z31(I)*X32(I)-X31(I)*Z32(I)
E3Z(I)=X31(I)*Y32(I)-Y31(I)*X32(I)
LE3(I) = SQRT(E3X(I)*E3X(I)+E3Y(I)*E3Y(I)+E3Z(I)*E3Z(I))
E3X(I)=E3X(I)/LE3(I)
E3Y(I)=E3Y(I)/LE3(I)
E3Z(I)=E3Z(I)/LE3(I)
C
C -> Components of vector E2 defining local Y direction (cross product)
E2X(I)=E3Y(I)*E1Z(I)-E3Z(I)*E1Y(I)
E2Y(I)=E3Z(I)*E1X(I)-E3X(I)*E1Z(I)
E2Z(I)=E3X(I)*E1Y(I)-E3Y(I)*E1X(I)
LE2(I) = SQRT(E2X(I)*E2X(I)+E2Y(I)*E2Y(I)+E2Z(I)*E2Z(I))
E2X(I)=E2X(I)/LE2(I)
E2Y(I)=E2Y(I)/LE2(I)
E2Z(I)=E2Z(I)/LE2(I)
C
C 2) DERIVATIVES OF THE SHAPE FUNCTIONS (matrix B):
C
Y3(I)=E2X(I)*X31(I)+E2Y(I)*Y31(I)+E2Z(I)*Z31(I)
X3(I)=E1X(I)*X31(I)+E1Y(I)*Y31(I)+E1Z(I)*Z31(I)
X2(I)=E1X(I)*X21(I)+E1Y(I)*Y21(I)+E1Z(I)*Z21(I)
C
C AREA(I) = X2(I)*Y3(I)*0.5
AREA(I) = LE3(I)/2
C
PX1(I) = -Y3(I)/(2*AREA(I))
PY1(I) = (X3(I)-X2(I))/(2*AREA(I))
PX2(I) = Y3(I)/(2*AREA(I))
PY2(I) = -X3(I)/(2*AREA(I))
PY3(I) = X3(I)/(2*AREA(I))
C
C=======================================================================
C STRAIN RATE CALCULATION (p108-109 and p140 Theory manual)
C=======================================================================
C
C------------------------------------------------
C MEMBRANE STRAIN RATE: exx, eyy, exy (e=Bv)
C------------------------------------------------
C
C -> Element degenaration:
VX4(I)= VX1(I)
VY4(I)= VY1(I)
VZ4(I)= VZ1(I)
VX5(I)= VX1(I)
VY5(I)= VY1(I)
VZ5(I)= VZ1(I)
VX6(I)= VX2(I)
VY6(I)= VY2(I)
VZ6(I)= VZ2(I)
VX7(I)= VX3(I)
VY7(I)= VY3(I)
VZ7(I)= VZ3(I)
VX8(I)= VX1(I)
VY8(I)= VY1(I)
VZ8(I)= VZ1(I)
C
C -> Velocity field in local frame:
VXE1(I)=E1X(I)*VX1(I)+E1Y(I)*VY1(I)+E1Z(I)*VZ1(I)
VXE2(I)=E1X(I)*VX2(I)+E1Y(I)*VY2(I)+E1Z(I)*VZ2(I)
VXE3(I)=E1X(I)*VX3(I)+E1Y(I)*VY3(I)+E1Z(I)*VZ3(I)
C
VYE1(I)=E2X(I)*VX1(I)+E2Y(I)*VY1(I)+E2Z(I)*VZ1(I)
VYE2(I)=E2X(I)*VX2(I)+E2Y(I)*VY2(I)+E2Z(I)*VZ2(I)
VYE3(I)=E2X(I)*VX3(I)+E2Y(I)*VY3(I)+E2Z(I)*VZ3(I)
C

October, 2011 95
RADIOSS USER’S CODE USER’S ELEMENTS

VZE1(I)=E3X(I)*VX1(I)+E3Y(I)*VY1(I)+E3Z(I)*VZ1(I)
VZE2(I)=E3X(I)*VX2(I)+E3Y(I)*VY2(I)+E3Z(I)*VZ2(I)
VZE3(I)=E3X(I)*VX3(I)+E3Y(I)*VY3(I)+E3Z(I)*VZ3(I)
C
C -> Membrane strain rate in local frame:
EXX(I)=PX1(I)*VXE1(I) + PX2(I)*VXE2(I)
EYY(I)=PY1(I)*VYE1(I) + PY2(I)*VYE2(I)
EXY(I)=PY1(I)*VXE1(I) + PX1(I)*VYE1(I) + PY2(I)*VXE2(I)
. + PX2(I)*VYE2(I)
C
C------------------------------------------------
C BENDING STRAIN RATE: kx, ky, 2kxy, 2ezx, 2eyz
C------------------------------------------------
C
C -> Element degenaration:
VRX4(I)= VRX1(I)
VRY4(I)= VRY1(I)
VRZ4(I)= VRZ1(I)
VRX5(I)= VRX1(I)
VRY5(I)= VRY1(I)
VRZ5(I)= VRZ1(I)
VRX6(I)= VRX2(I)
VRY6(I)= VRY2(I)
VRZ6(I)= VRZ2(I)
VRX7(I)= VRX3(I)
VRY7(I)= VRY3(I)
VRZ7(I)= VRZ3(I)
VRX8(I)= VRX1(I)
VRY8(I)= VRY1(I)
VRZ8(I)= VRZ1(I)
C
C -> Rotational velocities in local frame:
VRXE1(I)=E1X(I)*VRX1(I)+E1Y(I)*VRY1(I)+E1Z(I)*VRZ1(I)
VRYE1(I)=E2X(I)*VRX1(I)+E2Y(I)*VRY1(I)+E2Z(I)*VRZ1(I)
VRYE2(I)=E2X(I)*VRX2(I)+E2Y(I)*VRY2(I)+E2Z(I)*VRZ2(I)
VRXE2(I)=E1X(I)*VRX2(I)+E1Y(I)*VRY2(I)+E1Z(I)*VRZ2(I)
VRXE3(I)=E1X(I)*VRX3(I)+E1Y(I)*VRY3(I)+E1Z(I)*VRZ3(I)
VRYE3(I)=E2X(I)*VRX3(I)+E2Y(I)*VRY3(I)+E2Z(I)*VRZ3(I)
C
C -> Bending strain rate in local frame:
KXX(I)=PX1(I)*VRYE1(I) + PX2(I)*VRYE2(I)
KYY(I)=-PY1(I)*VRXE1(I) - PY2(I)*VRXE2(I)
KXY(I)=PY1(I)*VRYE1(I) - PX1(I)*VRXE1(I) + PY2(I)*VRYE2(I)
. - PX2(I)*VRXE2(I)
C
EXZ(I) = (VRYE1(I)+VRYE2(I)+VRYE3(I))/3
. + PX1(I)*VZE1(I) + PX2(I)*VZE2(I)
EYZ(I) = (VRX1(I)+VRXE2(I)+VRXE3(I))/3
. + PY1(I)*VZE1(I) + PY2(I)*VZE2(I)
C
C=======================================================================
C STRAIN INCREMENT COMPUTATION
C=======================================================================
C
DEPSXX(I) = EXX(I) * TIMESTEP
DEPSYY(I) = EYY(I) * TIMESTEP
DEPSXY(I) = EXY(I) * TIMESTEP
DEPSYZ(I) = EYZ(I) * TIMESTEP
DEPSZX(I) = EXZ(I) * TIMESTEP
C
C=======================================================================
C STRESSES from material subroutine SIGEPS29
C=======================================================================
C
C Stresses initialization:
IF (TIME.EQ.0.0) THEN
SIGOXX(I) = 0
SIGOYY(I) = 0
SIGOXY(I) = 0
SIGOYZ(I) = 0
SIGOZX(I) = 0
UVAR(I,1) = 0

October, 2011 96
RADIOSS USER’S CODE USER’S ELEMENTS

UVAR(I,2) = 0
UVAR(I,3) = 0
UVAR(I,4) = 0
UVAR(I,5) = 0
ELSE
SIGOXX(I) = UVAR(I,1)
SIGOYY(I) = UVAR(I,2)
SIGOXY(I) = UVAR(I,3)
SIGOYZ(I) = UVAR(I,4)
SIGOZX(I) = UVAR(I,5)
ENDIF
SIGNXX(I) = 0
SIGNYY(I) = 0
SIGNXY(I) = 0
SIGNYZ(I) = 0
SIGNZX(I) = 0
C
C Sigeps29 variables initialization:
X = 0
NUPARAM = 5
IMAT = GET_U_PNU(1,IPROP,KMAT)
RHO0 = GET_U_MAT(0,IMAT)
UPARAM(1) = GET_U_MAT(1,IMAT)
UPARAM(2) = GET_U_MAT(2,IMAT)
UPARAM(3) = GET_U_MAT(3,IMAT)
C
C-----------------------------------------------------------------------
ENDDO
C-----------------------------------------------------------------------
C
C Material SUBROUTINE SIGEPS29 call:
C (X = not used variables -> set to zero)
C
CALL SIGEPS29(
1 NEL ,NUPARAM,X ,X ,X ,X ,
2 X ,TIME ,TIMESTEP,UPARAM ,RHO0 ,X ,
3 X ,X ,
4 X ,X ,X ,X ,X ,X ,
5 DEPSXX ,DEPSYY ,DEPSZZ ,DEPSXY ,DEPSYZ ,DEPSZX ,
6 X ,X ,X ,X ,X ,X ,
7 SIGOXX ,SIGOYY ,SIGOZZ ,SIGOXY ,SIGOYZ ,SIGOZX ,
8 SIGNXX ,SIGNYY ,SIGNZZ ,SIGNXY ,SIGNYZ ,SIGNZX ,
9 X ,X ,X ,X ,X ,X ,
A X ,X ,X ,X )
C
C-----------------------------------------------------------------------
DO I=1,NEL
C-----------------------------------------------------------------------
C
C Updated "Old stresses" used in material law 29 (stored in user variables):
UVAR(I,1) = SIGNXX(I)
UVAR(I,2) = SIGNYY(I)
UVAR(I,3) = SIGNXY(I)
UVAR(I,4) = SIGNYZ(I)
UVAR(I,5) = SIGNZX(I)
C
C Von Mises stress equivalent:
UVAR(I,6) = SQRT(SIGNXX(I)*SIGNXX(I)
. +SIGNYY(I)*SIGNYY(I)
. -SIGNXX(I)*SIGNYY(I)
. +3.*SIGNXY(I)*SIGNXY(I))
C
C=======================================================================
C INTERNAL FORCES COMPUTATION
C=======================================================================
C
C Element without hourglass
C See the Theory manual p140 for the matrix of shape function gradients
C
C------------------------------------------------
C -> Thickness change computation:
C------------------------------------------------

October, 2011 97
RADIOSS USER’S CODE USER’S ELEMENTS

C Functions to returns values stored in property and material:


IMAT = GET_U_PNU(1,IPROP,KMAT)
NU = GET_U_MAT(5,IMAT)
THK0 = GET_U_GEO(1,IPROP)
NNU = NU/(1.-NU)
C
C Increment of normal strain:
DEZZ = -(DEPSXX(I)+DEPSYY(I))*NNU
C
C Thickness change calculation (using a user variable):
IF (TIME.EQ.0.0) THEN
UVAR(I,7) = THK0
ELSE
UVAR(I,7) = UVAR(I,7) + DEZZ*UVAR(I,7)
ENDIF
THK(I) = UVAR(I,7)
C
C------------------------------------------------
C -> Global forces and moments computation:
C------------------------------------------------

FOR(1,I) = THK(I) * SIGNXX(I)


FOR(2,I) = THK(I) * SIGNYY(I)
FOR(3,I) = THK(I) * SIGNXY(I)
FOR(4,I) = THK(I) * SIGNYZ(I)
FOR(5,I) = THK(I) * SIGNZX(I)
MOM(1,I) = THK(I)*THK(I)*SIGNXX(I)/3
MOM(2,I) = THK(I)*THK(I)*SIGNYY(I)/3
MOM(3,I) = THK(I)*THK(I)*SIGNXY(I)/3
C
C------------------------------------------------
C -> Nodal force vectors computation (Fint=Bt.SIG.V)
C------------------------------------------------
C
C F = stress * volume :
F1(I) = FOR(1,I)*AREA(I)
F2(I) = FOR(2,I)*AREA(I)
F3(I) = FOR(3,I)*AREA(I)
F4(I) = FOR(4,I)*AREA(I)
F5(I) = FOR(5,I)*AREA(I)
C
C Nodal force = Matrix of shape function gradients * F :
C
C 1) Expressed in local frame:
C
C -> Force vector components - node 1:
FX1(I)= F1(I)*PX1(I)+F3(I)*PY1(I)
FY1(I)= F2(I)*PY1(I)+F3(I)*PX1(I)
FZ1(I)= F5(I)*PX1(I)+F4(I)*PY1(I)
C -> Force vector components - node 2:
FX2(I)= F1(I)*PX2(I)+F3(I)*PY2(I)
FY2(I)= F2(I)*PY2(I)+F3(I)*PX2(I)
FZ2(I)= F5(I)*PX2(I)+F4(I)*PY2(I)
C
C 2) Expressed in global frame:
C
C -> Force vector components - node 1:
FX11(I)=E1X(I)*FX1(I)+E2X(I)*FY1(I)+E3X(I)*FZ1(I)
FY11(I)=E1Y(I)*FX1(I)+E2Y(I)*FY1(I)+E3Y(I)*FZ1(I)
FZ11(I)=E1Z(I)*FX1(I)+E2Z(I)*FY1(I)+E3Z(I)*FZ1(I)
FX1(I)= -FX11(I)
FY1(I)= -FY11(I)
FZ1(I)= -FZ11(I)
C -> Force vector components - node 2:
FX22(I)=E1X(I)*FX2(I)+E2X(I)*FY2(I)+E3X(I)*FZ2(I)
FY22(I)=E1Y(I)*FX2(I)+E2Y(I)*FY2(I)+E3Y(I)*FZ2(I)
FZ22(I)=E1Z(I)*FX2(I)+E2Z(I)*FY2(I)+E3Z(I)*FZ2(I)
FX2(I)= -FX22(I)
FY2(I)= -FY22(I)
FZ2(I)= -FZ22(I)
C -> Force vector components - node 3:
FX3(I) = - FX1(I) - FX2(I)

October, 2011 98
RADIOSS USER’S CODE USER’S ELEMENTS

FY3(I) = - FY1(I) - FY2(I)


FZ3(I) = - FZ1(I) - FZ2(I)
C -> Force vector components - nodes >3:
FX4(I) = 0
FX5(I) = 0
FX6(I) = 0
FX7(I) = 0
FX8(I) = 0
FY4(I) = 0
FY5(I) = 0
FY6(I) = 0
FY7(I) = 0
FY8(I) = 0
FZ4(I) = 0
FZ5(I) = 0
FZ6(I) = 0
FZ7(I) = 0
FZ8(I) = 0
C
C------------------------------------------------
C -> Nodal moment computation
C------------------------------------------------
TH2 = THK(I)*THK(I)
C
M1 = MOM(1,I)*TH2
M2 = MOM(2,I)*TH2
M3 = MOM(3,I)*TH2
M4 = F4(I) * AREA(I)
M5 = F5(I) * AREA(I)
C M4 = F4 / 3
C M5 = F5 / 3
C
C 1) Nodal moment expressed in local frame:
C
C -> Moment vector components - node 1:
MX1(I) = -M2 * PY1(I) - M3 * PX1(I)
MY1(I) = M1 * PX1(I) + M3 * PY1(I)
C -> Moment vector components - node 2:
MX2(I) = -M2 * PY2(I) - M3 * PX2(I)
MY2(I) = M1 * PX2(I) + M3 * PY2(I)
C
C 2) Nodal moment expressed in global frame:
C
C -> Moment vector components - node 1:
MX11(I)=E1X(I)*MX1(I)+E2X(I)*MY1(I)
MY11(I)=E1Y(I)*MX1(I)+E2Y(I)*MY1(I)
MZ1(I)=E1Z(I)*MX1(I)+E2Z(I)*MY1(I)
MX1(I)=MX11(I)
MY1(I)=MY11(I)
C -> Moment vector components - node 2:
MX22(I)=E1X(I)*MX2(I)+E2X(I)*MY2(I)
MY22(I)=E1Y(I)*MX2(I)+E2Y(I)*MY2(I)
MZ2(I)=E1Z(I)*MX2(I)+E2Z(I)*MY2(I)
MX2(I)=MX22(I)
MY2(I)=MY22(I)
C -> Moment vector components - node 3:
MX3(I) = -MX1(I) - MX2(I)
MY3(I) = -MY1(I) - MY2(I)
MZ3(I) = -MZ1(I) - MZ2(I)
C -> Moment vector components - nodes >3:
MX4(I) = 0
MX5(I) = 0
MX6(I) = 0
MX7(I) = 0
MX8(I) = 0
MY4(I) = 0
MY5(I) = 0
MY6(I) = 0
MY7(I) = 0
MY8(I) = 0
MZ4(I) = 0
MZ5(I) = 0

October, 2011 99
RADIOSS USER’S CODE USER’S ELEMENTS

MZ6(I) = 0
MZ7(I) = 0
MZ8(I) = 0
C
C=======================================================================
C TIME STEP
C=======================================================================
C
C Element volume:
AREA(I) = LE3(I)/2
VOL(I) = AREA(I)*THK(I)
C
C Characteristic length ALDT:
AL1 = X2(I)*X2(I)
AL2 = (X3(I)-X2(I))*(X3(I)-X2(I))+(Y3(I)*Y3(I))
AL3 = X3(I)*X3(I)+Y3(I)*Y3(I)
ALMAX(I) = MAX(AL1,AL2,AL3)
ALMAX(I) = SQRT(ALMAX(I))
ALDT(I)= 2*AREA(I) / ALMAX(I)
C
E = GET_U_MAT(4,IMAT)
C
C Parametrers used in time step computation:
STIFM(I) = 2*VOL(I) * E / (3*ALDT(I)*ALDT(I))
STIFR(I) = 1000
C STIFR(I) = STIFM(I) * (THK(I) * THK(I) / 12 + AREA(I) /9.)
C . + 0.5 * SHF(I) * AREA(I) * G/A11(I))
VISCM(I) = 0
VISCR(I) = 0
C
C-----------------------------------------------------------------------
ENDDO
C-----------------------------------------------------------------------
C
C=======================================================================
C SAVE IN ANIMATIONS: Stresses, Von Mises stress and thikness are saved in
C anim file as USERi keywords from user's variables UVAR(I,i).
C
C -> Stress X: User Var 1 /ANIM/ELEM/USER1 <-> UVAR(I,1)
C -> Stress Y: User Var 2 /ANIM/ELEM/USER2 <-> UVAR(I,2)
C -> Stress XY: User Var 3 /ANIM/ELEM/USER3 <-> UVAR(I,3)
C -> Stress YZ: User Var 4 /ANIM/ELEM/USER4 <-> UVAR(I,4)
C -> Stress ZX: User Var 5 /ANIM/ELEM/USER5 <-> UVAR(I,5)
C -> Von Mises: User Var 6 /ANIM/ELEM/USER6 <-> UVAR(I,6)
C -> Thickness: User Var 7 /ANIM/ELEM/USER7 <-> UVAR(I,7)
C
C=======================================================================
C CHECK (first element):
DO I=1
print *, '******** ELEMENT',I,'********'
print *, ' --> Results at',TIME ,'ms'
print *, '( time step =',TIMESTEP,')'
print *, 'volume =',VOL(I)
print *, 'area =',AREA(I)
print *, 'thickness =',THK(I)
print *, 'FX1 =',FX1(I)
print *, 'FX2 =',FX2(I)
print *, 'FX3 =',FX3(I)
print *, 'FY1 =',FY1(I)
print *, 'FY2 =',FY2(I)
print *, 'FY3 =',FY3(I)
ENDDO
C-----------------------------------------------------------------------
C
RETURN
END

October, 2011 100


RADIOSS USER’S CODE USER’S ELEMENTS

4.8.6 Engine material user’s subroutine SIGEPSnn

C======================================
C ELASTIC LAW FOR SOLID ELEMENTS
C Stresses computation
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-----------------------------------------------
C I m p l i c i t T y p e s
C-----------------------------------------------
C IMPLICIT NONE
C-----------------------------------------------
C I N P U T A r g u m e n t s
C-----------------------------------------------
C
INTEGER NEL, NUPARAM, NUVAR
DOUBLE PRECISION TIME,TIMESTEP,UPARAM(NUPARAM),
. RHO(NEL),RHO0(NEL),VOLUME(NEL),EINT(NEL),
. EPSPXX(NEL),EPSPYY(NEL),EPSPZZ(NEL),
. EPSPXY(NEL),EPSPYZ(NEL),EPSPZX(NEL),
. DEPSXX(NEL),DEPSYY(NEL),DEPSZZ(NEL),
. DEPSXY(NEL),DEPSYZ(NEL),DEPSZX(NEL),
. EPSXX(NEL) ,EPSYY(NEL) ,EPSZZ(NEL) ,
. EPSXY(NEL) ,EPSYZ(NEL) ,EPSZX(NEL) ,
. SIGOXX(NEL),SIGOYY(NEL),SIGOZZ(NEL),
. SIGOXY(NEL),SIGOYZ(NEL),SIGOZX(NEL)
C-----------------------------------------------
C O U T P U T A r g u m e n t s
C-----------------------------------------------
DOUBLE PRECISION
. SIGNXX(NEL),SIGNYY(NEL),SIGNZZ(NEL),
. SIGNXY(NEL),SIGNYZ(NEL),SIGNZX(NEL),
. SIGVXX(NEL),SIGVYY(NEL),SIGVZZ(NEL),
. SIGVXY(NEL),SIGVYZ(NEL),SIGVZX(NEL),
. SOUNDSP(NEL),VISCMAX(NEL)
C-----------------------------------------------
C I N P U T O U T P U T A r g u m e n t s
C-----------------------------------------------
DOUBLE PRECISION UVAR(NEL,NUVAR), OFF(NEL)
C-----------------------------------------------
C VARIABLES FOR FUNCTION INTERPOLATION
C-----------------------------------------------
INTEGER NPF(*), NFUNC, IFUNC(NFUNC)
DOUBLE PRECISION FINTER ,TF(*)
EXTERNAL FINTER
C Y = FINTER(IFUNC(J),X,NPF,TF,DYDX)
C Y : y = f(x)

October, 2011 101


RADIOSS USER’S CODE USER’S ELEMENTS

C X : x
C DYDX : f'(x) = dy/dx
C IFUNC(J): FUNCTION INDEX
C J : FIRST(J=1), SECOND(J=2)
C NPF,TF : FUNCTION PARAMETER
C-----------------------------------------------
C L o c a l V a r i a b l e s
C-----------------------------------------------
INTEGER I,J
DOUBLE PRECISION A1,A2,G,
. SIGNXX(NEL),SIGNYY(NEL),SIGNZZ(NEL),
. SIGNXY(NEL),SIGNYZ(NEL),SIGNZX(NEL)
C
C-----------------------------------------------
C ELASTIC SOLUTION
C-----------------------------------------------
DO I=1,NEL
C
A1 = UPARAM(1)
A2 = UPARAM(2)
G = UPARAM(3)
C
SIGNXX(I)=SIGOXX(I)+A1*DEPSXX(I)+A2*DEPSYY(I)
SIGNYY(I)=SIGOYY(I)+A2*DEPSXX(I)+A1*DEPSYY(I)
SIGNXY(I)=SIGOXY(I)+G *DEPSXY(I)
SIGNYZ(I)=SIGOYZ(I)+G *DEPSYZ(I)
SIGNZX(I)=SIGOZX(I)+G *DEPSZX(I)
C
SOUNDSP(I) = SQRT(A1/RHO0(I))
VISCMAX(I) = 0.
C
ENDDO
C
C-----------------------------------------------
RETURN
END

October, 2011 102


RADIOSS USER’S CODE USER’S SENSORS

5 USER SENSORS

From version 4.4 of RADIOSS it is possible to define up to 3 types of user sensors.


Two subroutines are needed to define a new sensor. One must be linked with RADIOSS
STARTER and the other with RADIOSS ENGINE.
The STARTER subroutines are called LECSEN_USR1, LECSEN_USR2, or
LECSEN_USR3. They are used to read sensor data and to initialize parameters.
The ENGINE subroutines are called USER_SENS1, USER_SENS2 or USER_SENS3 and
perform a user defined action.
The only argument passed to the user routines in RADIOSS engine is the sensor identifier.
User sensors can be used in RADIOSS in the same way as standard sensors. They may
activate or desactivate other sensors, airbags, springs, boundary conditions, imposed velocities
/ displacements, concentrated loads, etc. Their specificity is the user defined activation
condition and sensor action. User sensor may retrieve RADIOSS variables using special
access functions. All data may be stored in sensor buffer for user defined processing or for
passing information to other parts of user code.

5.1 STARTER SUBROUTINE LECSEN_USRn

This subroutine is used to read the User’s sensor input data. The number of cards and the
format of these cards is free.

The argument list of LECSEN_USRn is as follows:


------------------------------------------------------------------------------------------
SUBROUTINE LECSEN_USRn(IIN, IOUT)
------------------------------------------------------------------------------------------

IIN (integer read only scalar): input file unit (starter input file) on which the data are
read.

IOUT (integer read only scalar): output file unit (starter listing file)

5.1.1 Storage functions for sensor parameters (starter only)

To store a data in sensor’s parameter buffers, one may use the following functions:

integer ierr = SET_U_SENS_IPAR(integer isens, integer sens_index, integer var)

integer ierr = SET_U_SENS_FPAR(integer isens, integer sens_index, float var)

These functions allows to store an integer or a float variable in respective buffers, at a


position indicated by sens_index (independent in each buffer). The length of sensor parameter
buffers are limited to 12 integer variables and 20 float variables.

October, 2011 103


RADIOSS USER’S CODE USER’S SENSORS

5.2 ENGINE SUBROUTINE USER_SENSn

This subroutine performs an user defined action with a given sensor.


------------------------------------------------------------------------------------------
SUBROUTINE USER_SENS1(SENS_ID)
------------------------------------------------------------------------------------------

where SENS_ID is a sensor identifier (integer).

5.3 Functions for user’s sensors

5.3.1 Restore functions for sensor parameters:


The user can access to the integer and float sensor parameter buffers, using two functions,
symmetric to those used in starter:
integer ierr = GET_U_SENS_IPAR(integer isens, sens_index, integer var)
integer ierr = GET_U_SENS_FPAR(integer isens, sens_index, float var)
The sensor parameter buffers are read only in engine.

Note: For the reason of performance, the internal RADIOSS sensor numbers isens, not
sensor identifiers are used to acces the parameter buffers. The additional function is provided
to translate a sensor Id into internal sensor number:

integer isens = GET_U_NUMSENS(integer sens_id)

The function returns 0 if the sensor Id is not found in RADIOSS database. The user can
store the value in a local variable for multiple acces to parameter buffers, or call the buffer
acces functions directly with the sensor Id, using the GET_U_NUMSENS function:

ierr = GET_U_SENS_IPAR(GET_U_NUMSENS(sens_id),sens_index,var)

5.3.2 Read / write functions of working array buffer:


To store and read current information one can use a user array (float). Its length is limited
to 100 variables, and is accessed by the following functions:

integer ierr =SET_U_SENS_VALUE (integer isens,integer sens_index,float var)


integer ierr =GET_U_SENS_VALUE(integer isens,integer sens_index,float var)
The user variables are stored and retrieved from a buffer of sensor isens, using buffer
index sens_index.
A function inverse to GET_U_NUMSENS is also provided in case if a sensor
identifier is needed. It translates a sensor number into its ID:

integer isens = GET_U_SENS_ID(integer sens_id)

October, 2011 104


RADIOSS USER’S CODE USER’S SENSORS

5.3.3 Setting/ checking global activation flag


For user sensor it is possible to use the same mechanism of activation/ deactivation as
standard RADIOSS sensors. This way, they may be used to activate springs, interfaces, rigid
walls or other sensors using a specific user condition. In the same manner, the user sensor may
form a part of a hierarchy of RADIOSS sensors (ex logical sensors), or use standard sensors as
input. To standard activation flags, we will use the following functions:

integer ierr = SET_U_SENS_ACTI(integer isens)


This function activates user sensor isens. The activation time is set as current time.
Note: the sensor activation will be actually delayed one cycle to preserve a
hierarchical sensor activation order in parallel processing.

float dtime = GET_U_SENS_ACTI(integer isens)


This function returns a time delay since the first activation of sensor number isens.
If dtime > 0, the sensor is actif. This function may be used to check state of standard
sensors, or other user sensors, if the ACTI_U_SENS function was used to activate
them.
User sensors may access RADIOSS variables only by specialized fuctions. The list
of these fuctions is open ended. Actually, the available functions are:

5.3.4 Access functions to RADIOSS time/cycle variables.

float Time = GET_U_TIME()


This function returns the actual simulation time
integer Ncyc = GET_U_CYCLE()
This function returns the actual cycle number

5.3.5 Nodal value access :


These functions allow access to node coordinates, displacements, velocities and
accelerations. All use an internal node number as an argument, not a node identifier as an
argument, for the sake of performance. Integer function :
integer inode = GET_U_NUMNOD(node_id)
may be used to restore an internal node number inode from a node identifier
node_id. It is recommended to call this function once and store the result in local
variable, if multiple access is needed. The nodal access functions are:
integer ierr = GET_U_NOD_X(integer inode, float x, float y, float z)
integer ierr = GET_U_NOD_D(integer inode, float dx, float dy, float dz)
integer ierr = GET_U_NOD_V(integer inode, float vx, float vy, float vz)
integer ierr = GET_U_NOD_A(integer inode, float ax, float ay, float az)

where:
x, y, z are node coordinates
dx, dy, dz are node displacement components

October, 2011 105


RADIOSS USER’S CODE USER’S SENSORS

vx, vy, vz are node velocity components


ax, ay, az are node acceleration components

5.3.6 Accelerator access functions

The following function gives access to RADIOSS accelerometer values:


integer ierr = GET_U_ACCEL(integer iacc, float ax, float ay, float az)
ax, ay, az are acceleration components
iacc is the accelerometer number
Accelerometer number may be restored from its identifier using function:
integer iacc = GET_U_NUMACC(integer acc_id)

Note: Sensor may also use RADIOSS functions and user properties/materials (see previous
chapters of general storage/restore functions).

October, 2011 106


RADIOSS USER’S CODE USER’S SENSORS

5.4 EXAMPLE of user’s sensor

EXAMPLE: A sensor stores a maximum Von Mises stress value (F).

CR = 1 sensor parameter (read in starter by sensor user’s subroutine LECSEN_USRm)


F = 1 sensor variable (written to sensor buffer by the material user’s subroutine SIGESPnn)

Sensor is activated if F > CR


The activation time of sensor is displayed.

Mesh example (4-node-shell element):


Loading case: imposed velocities applied on two nodes.

5.4.1 User’s input data (/SENSOR/USERm option)

[…]
#--1---|---2---|---3---|---4---|---5---|---6---|---7---|---8---|---9---|--10---|
#- 4. MATERIALS:
#--1---|---2---|---3---|---4---|---5---|---6---|---7---|---8---|---9---|--10---|
/MAT/USER1/1/User’s elastic material law
# Init. dens. Ref. dens.
0.00785 0
# E Nu
3102.75 0.3
#--1---|---2---|---3---|---4---|---5---|---6---|---7---|---8---|---9---|--10---|
#- 15. SENSOR:
#--1---|---2---|---3---|---4---|---5---|---6---|---7---|---8---|---9---|--10---|
/SENSOR/USER1/1/User's sensor 1
# Tdelay
0.0
# CR
5.1
#--1---|---2---|---3---|---4---|---5---|---6---|---7---|---8---|---9---|--10---|
[…]

5.4.2 Starter sensor user’s subroutine LECSEN_USRm


C==========================================================
C This subroutine reads the user sensor parameters
C==========================================================
SUBROUTINE LECSEN_USR1(IIN,IOUT)
C
C----------------------------------------------------------
C D u m m y A r g u m e n t s
C----------------------------------------------------------
INTEGER IIN, IOUT
INTEGER SET_U_SENS_IPAR
DOUBLE PRECISION SET_U_SENS_FPAR
EXTERNAL SET_U_SENS_IPAR,SET_U_SENS_FPAR
C
C----------------------------------------------------------
C L o c a l V a r i a b l e s
C----------------------------------------------------------

October, 2011 107


RADIOSS USER’S CODE USER’S SENSORS

INTEGER IERROR
DOUBLE PRECISION CR
C
C----------------------------------------------------------
C R e a d U s e r' s P a r a m e t e r s
C----------------------------------------------------------
READ(IIN,ERR=999,FMT='(F16.0)') CR
C
C----------------------------------------------------------
C W r i t e in S e n s o r B u f f e r
C----------------------------------------------------------
C Write float sensor parameter CR in sensor buffer 1:
IERROR = SET_U_SENS_FPAR(1,CR)
C
C----------------------------------------------------------
C O u t p u t P r i n t
C----------------------------------------------------------
WRITE(IOUT,1000) CR
C
RETURN
C
999 CONTINUE
WRITE(IOUT,*)' **ERROR IN USER SENSOR INPUT'
C
1000 FORMAT(/' CHARGE CRITIQUE. . . . . . . . . . . ',E12.4/)
C
C----------------------------------------------------------
RETURN
END

5.4.3 Starter material user’s subroutine LECMnn


C==========================================================
C This subroutine read the user material parameters.
C==========================================================
SUBROUTINE LECM29(IIN ,IOUT ,UPARAM ,MAXUPARAM,NUPARAM,
. NUVAR,IFUNC,MAXFUNC,NFUNC ,PARMAT )
C
C-----------------------------------------------
C I m p l i c i t T y p e s
C-----------------------------------------------
IMPLICIT NONE
C-----------------------------------------------
C D u m m y A r g u m e n t s
C-----------------------------------------------
INTEGER IIN,IOUT,MAXUPARAM,NUPARAM,NUVAR,MAXFUNC,NFUNC,
. IFUNC(MAXFUNC)
DOUBLE PRECISION UPARAM(MAXUPARAM),PARMAT(*)
C-----------------------------------------------
C L o c a l V a r i a b l e s
C-----------------------------------------------
DOUBLE PRECISION E,NU,A11,A12,A44
C
C-----------------------------------------------
C INPUT FILE READING (USER DATA)
C-----------------------------------------------
READ(IIN,'(2F16.0)')E,NU

October, 2011 108


RADIOSS USER’S CODE USER’S SENSORS

A11 = E * (1.-NU) / (1.+NU) / (1.-2.*NU)


A12 = E * NU / (1.+NU) / (1.-2.*NU)
A44 = E / 2. / (1.+NU)
C
C-----------------------------------------------
C DATA CHECKING
C-----------------------------------------------
IF(NU.LT.0.0.OR.NU.GE.0.5)THEN
WRITE(IOUT,*)' ** ERROR : WRONG NU VALUE'
ENDIF
NUPARAM = 6
IF(NUPARAM.GT.MAXUPARAM)THEN
WRITE(IOUT,*)' ** ERROR : NUPARAM GT MAXUPARAM'
WRITE(IOUT,*)' NUPARAM =',NUPARAM,
. ' MAXUPARAM =',MAXUPARAM
ELSE
C-----------------------------------------------
C USER MATERIAL PARAMETERS DEFINITION
C-----------------------------------------------
C used in sigeps29c (shell 3n,4n)
UPARAM(1) = E/(1.-NU*NU)
UPARAM(2) = NU*E/(1.-NU*NU)
UPARAM(3) = 0.5*E/(1.+NU)
ENDIF
C
C-------------------------------------------------
C NUMBER OF USER ELEMENT VARIABLES AND CURVES
C-------------------------------------------------
NUVAR = 0
NFUNC = 0
C
C-----------------------------------------------
C USED FOR SHELLS
C-----------------------------------------------
PARMAT(2) = E
PARMAT(3) = NU
C
C-------------------------------------------------
C OUTPUT FILE PRINT
C-------------------------------------------------
WRITE(IOUT,1000)
WRITE(IOUT,1100)E,NU
C
1000 FORMAT(
& 5X,' ELASTIC USER LAW 29',/,
& 5X,' ------------------ ',//)
1100 FORMAT(
& 5X,'E . . . . . . . . . . . . . . . . . . .=',E12.4/
& 5X,'NU. . . . . . . . . . . . . . . . . . .=',E12.4//)
C
C-------------------------------------------------
RETURN
END

October, 2011 109


RADIOSS USER’S CODE USER’S SENSORS

5.4.4 Engine sensor user’s subroutine USER_SENSm


C==========================================================
C This subroutine activates sensor
C==========================================================
SUBROUTINE USER_SENS1(ID)
C
C----------------------------------------------------------
C L o c a l V a r i a b l e s
C----------------------------------------------------------
INTEGER IERR,NSENS
DOUBLE PRECISION CR,F,DTIME,TIME,ACTI
C
C----------------------------------------------------------
C R e s t o r e F u n c t i o n s
C----------------------------------------------------------
C Get the sensor number:
NSENS = GET_U_NUMSENS(ID)
C
C Retrieve a float sensor parameter from sensor buffer 1:
IERR = GET_U_SENS_FPAR(NSENS,1,CR)
C
C Read material variable F (see SIGEPS29) from sensor buffer 1:
IERR = GET_U_SENS_VALUE(NSENS,1,F)
C
C----------------------------------------------------------
C S e n s o r A c t i v a t i o n
C----------------------------------------------------------
IF (F.GT.CR) THEN
C Activate sensor number nsens:
IERR = SET_U_SENS_ACTI(NSENS)
C Time delay since the first activation of sensor number nsens:
DTIME = GET_U_SENS_ACTI(NSENS)
C Current time:
TIME = GET_U_TIME()
C Activation time:
ACTI = TIME - DTIME
C
C----------------------------------------------------------
C C h e c k S e n s o r S t a t e
C----------------------------------------------------------
IF (TIME.EQ.ACTI) THEN
print *,' --> Activation time of sensor id',NSENS,'=',ACTI
print *,' [Critical Von Mises value reached =',F,'MPa]'
ENDIF
C
C----------------------------------------------------------
ENDIF
C----------------------------------------------------------
RETURN
END

October, 2011 110


RADIOSS USER’S CODE USER’S SENSORS

5.4.5 Engine material user’s subroutine SIGEPSnnC for shell elements


C==========================================================
C This subroutine computes elastic stresses
C A variable is stored in sensor buffer
C==========================================================
SUBROUTINE SIGEPS29C(
1 NEL ,NUPARAM,NUVAR ,NFUNC ,IFUNC ,
2 NPF ,NPT ,IPT ,IFLAG ,
2 TF ,TIME ,TIMESTEP,UPARAM ,RHO0 ,
3 AREA ,EINT ,THKLY ,
4 EPSPXX ,EPSPYY ,EPSPXY ,EPSPYZ ,EPSPZX ,
5 DEPSXX ,DEPSYY ,DEPSXY ,DEPSYZ ,DEPSZX ,
6 EPSXX ,EPSYY ,EPSXY ,EPSYZ ,EPSZX ,
7 SIGOXX ,SIGOYY ,SIGOXY ,SIGOYZ ,SIGOZX ,
8 SIGNXX ,SIGNYY ,SIGNXY ,SIGNYZ ,SIGNZX ,
9 SIGVXX ,SIGVYY ,SIGVXY ,SIGVYZ ,SIGVZX ,
A SOUNDSP,VISCMAX,THK ,PLA ,UVAR ,
B OFF ,NGL ,SHF)
C
C-----------------------------------------------
C I m p l i c i t T y p e s
C-----------------------------------------------
IMPLICIT NONE
C-----------------------------------------------
C I N P U T A r g u m e n t s
C-----------------------------------------------
C
INTEGER NEL, NUPARAM, NUVAR, NPT, IPT,IFLAG(*),
. NGL(NEL)
DOUBLE PRECISION TIME,TIMESTEP,UPARAM(NUPARAM),
. AREA(NEL),RHO0(NEL),EINT(2,NEL),
. THKLY(NEL),PLA(NEL),SHF(NEL),
. EPSPXX(NEL),EPSPYY(NEL),
. EPSPXY(NEL),EPSPYZ(NEL),EPSPZX(NEL),
. DEPSXX(NEL),DEPSYY(NEL),
. DEPSXY(NEL),DEPSYZ(NEL),DEPSZX(NEL),
. EPSXX(NEL) ,EPSYY(NEL) ,
. EPSXY(NEL) ,EPSYZ(NEL) ,EPSZX(NEL) ,
. SIGOXX(NEL),SIGOYY(NEL),
. SIGOXY(NEL),SIGOYZ(NEL),SIGOZX(NEL)
C-----------------------------------------------
C VARIABLES FOR FUNCTION INTERPOLATION
C-----------------------------------------------
INTEGER NPF(*), NFUNC, IFUNC(NFUNC)
DOUBLE PRECISION FINTER ,TF(*)
EXTERNAL FINTER
C Y = FINTER(IFUNC(J),X,NPF,TF,DYDX)
C Y : y = f(x)
C X : x
C DYDX : f'(x) = dy/dx
C IFUNC(J): FUNCTION INDEX
C J : FIRST(J=1), SECOND(J=2) ..
C NPF,TF : FUNCTION PARAMETER
C-----------------------------------------------
C O U T P U T A r g u m e n t s
C-----------------------------------------------
DOUBLE PRECISION

October, 2011 111


RADIOSS USER’S CODE USER’S SENSORS

. SIGNXX(NEL),SIGNYY(NEL),
. SIGNXY(NEL),SIGNYZ(NEL),SIGNZX(NEL),
. SIGVXX(NEL),SIGVYY(NEL),
. SIGVXY(NEL),SIGVYZ(NEL),SIGVZX(NEL),
. SOUNDSP(NEL),VISCMAX(NEL)
C-----------------------------------------------
C I N P U T O U T P U T A r g u m e n t s
C-----------------------------------------------
DOUBLE PRECISION UVAR(NEL,NUVAR), OFF(NEL),THK(NEL)
C
C----------------------------------------------------------
C F u n c t i o n F o r U s e r' s S e n s o r
C----------------------------------------------------------
INTEGER ID
INTEGER GET_U_NUMSENS
DOUBLE PRECISION SET_U_SENS_VALUE
EXTERNAL SET_U_SENS_VALUE,GET_U_NUMSENS
C
C-----------------------------------------------
C L o c a l V a r i a b l e s
C-----------------------------------------------
INTEGER I,IERR
DOUBLE PRECISION A1,A2,G,F
C
C-----------------------------------------------
C ELASTIC SOLUTION
C-----------------------------------------------
DO I=1,NEL
C
A1 = UPARAM(1)
A2 = UPARAM(2)
G = UPARAM(3)
C
SIGNXX(I)=SIGOXX(I)+A1*DEPSXX(I)+A2*DEPSYY(I)
SIGNYY(I)=SIGOYY(I)+A2*DEPSXX(I)+A1*DEPSYY(I)
SIGNXY(I)=SIGOXY(I)+G *DEPSXY(I)
SIGNYZ(I)=SIGOYZ(I)+G *DEPSYZ(I)
SIGNZX(I)=SIGOZX(I)+G *DEPSZX(I)
C
SOUNDSP(I) = SQRT(A1/RHO0(I))
VISCMAX(I) = 0.
C
C Von Mises stress (used in user's subroutine USER_SEN1):
F = SQRT(SIGNXX(I)*SIGNXX(I)
. +SIGNYY(I)*SIGNYY(I)
. -SIGNXX(I)*SIGNYY(I)
. +3.*SIGNXY(I)*SIGNXY(I))
C
C-----------------------------------------------
C S t o r e i n S e n s o r B u f f e r
C-----------------------------------------------
C Write the variable F in the sensor buffer number 1:
IERR = SET_U_SENS_VALUE(1,1,F)
C
ENDDO
C-----------------------------------------------
RETURN
END

October, 2011 112


RADIOSS USER’S CODE USER’S SENSORS

6. USER FAILURE MODELS

From Version 5.1 of Radioss it is possible to define up to 3 user’s failure models (USER1,
USER2, USER3 ) for shell and solid element.
User’s failure model for beam and truss are not yet available.

To define a user’s failure model, one has to provide two or three subroutines for each failure
model. One of this subroutine must linked with RADIOSS STARTER and two other (one for
shell, one for solid) with RADIOSS ENGINE.

The STARTER subroutine is called lecr04, lecr05, lecr06 and is used to read the failure data
model and to initialize failure material parameters.

The ENGINE subroutine for solids is called, f04law, f05law and f06law and is used to compute
failure criteria at integration point. The corresponding shell subroutine are f04lawc, f05lawc,
f06lawc.

All communication between RADIOSS and User’s subroutine is done through the argument list.

6.1 STARTER Subroutine LECRnn

----------------------------------------------------------------------------------------
SUBROUTINE LECRnn (IIN ,IOUT ,UPARAM ,MAXUPARAM,NUPARAM,
NUVAR,IFUNC,MAXFUNC,NFUNC)
------------------------------------------------------------------------------------------------------

This subroutine is used to read User’s failure model input data. The number of specific failure
model card and the format of these cards is free.

The argument list of lecfnn is on follows:

IIN (Integer read only scalar) : input file unit (ROOTD00, ROOT_nnnn.rad) on
wich the data are read.

IOUT(Integer read only format) : outp file unit (ROOT_nnnn.lis).

UPARAM(float array) : array with a size NUPARAM used to store the


failure material data.

MAXUPARAM (Integer read only scalar) : maximum possible size of UPARAM.

NUPARAM (Integer scalar): effective size UPARAM.


(MAXUPARAM, NUPARAM, MAXUPARAM is set to 1000).

NUVAR (integer scalar) : number of extra variables needed for each integration
point of each element.

October, 2011 113


RADIOSS USER’S CODE USER’S SENSORS

IFUNC (integer array) : Array with a size of NFUNC containing the list of
RADIOSS functions used for this failure model. The function numbers have to be stored in this
array and not in UPARAM because of a possible renumbering of the functions numbers.

MAXFUNC(Integer read only scalar): maximum possible size of IFUNC.

NFUNC (Integer scalar) : number of RADIOSS functions.

6.2 ENGINE Subroutine for solid elements (FnnLAW):

-----------------------------------------------------------------------------------------
----
SUBROUTINE FnnLAW (
1 NEL ,NUPARAM ,NUVAR ,NFUNC ,IFUNC ,
2 NPF ,TF ,TIME ,TIMESTEP ,UPARAM ,
3 NGL ,NOT_USE_I1 ,NOT_USE_I2 ,NOT_USE_I3 ,NOT_USE_I4,
4 EPSPXX ,EPSPYY ,EPSPZZ ,EPSPXY ,EPSPYZ ,EPSPZX ,
5 EPSXX ,EPSYY ,EPSZZ ,EPSXY ,EPSYZ ,EPSZX ,
6 SIGNXX ,SIGNYY ,SIGNZZ ,SIGNXY ,SIGNYZ ,SIGNZX ,
7 PLA ,DPLA ,EPSP ,UVAR ,OFF ,
8 NOT_USED1, NOT_USED2 ,NOT_USED3 ,NOT_USED4 ,NOT_USED5 )

This subroutine calculates the criteria of failure model.


We can use the float external function FINTER to get the value Y of the function for the
abscissa X.

Y = FINTER(IFUNC(1), X, NPF, TF, DYDX) with :


Y the interpolated value.
X the abscissa value of the function.
I the ith user’s function.
DYDX is the slope.
NPF and TF are private function parameters.

The arguments list of Fnnlaw is as follows:

NEL (interger read only scalar): number of element per group. In RADIOSS ENGINE
the element data are treated by groups (for victorisation purpose) NEL is machine dependent
and is set by RADIOSS

NUPARAM(integer read only scalar) : size of the user parameter array.

NUVAR (integer read only scalar) : number of user integration point element
variables.

NFUNC(integer read only scalar) : number of function used for this failure model
Materials.

October, 2011 114


RADIOSS USER’S CODE USER’S SENSORS

IFUNC(integer array read only) : array of size NFUNC containing function indexes.

NPF(integer array private data) : array used by FINTER (float external functions).

TF (float array private data) : array used by FINTER (float external functions).

TIME(float read only) : current time.

TIMESTEP(float read only) : current time step.

UPARAM(float array read only) : user ailurematerial parameter array of size


NUPARAM.

NGL(integer array read only) : array of size NEL containing the external element
number.

EPSPXX ,EPSPYY ,EPSPZZ ,EPSPXY ,EPSPYZ ,EPSPZX )


(flaot array read only) :array of size NEL containing ε& strain rates in directions
XX, YY, ZZ, and γ& strain rates in directions XY,
YZ,ZX.

EPSXX ,EPSYY,EPSZZ,EPSXY,EPSYZ ,EPSZX )


(flaot array read only) : array of size NEL containing ε strain in directions
XX, YY, ZZ, and γ strain in directions XY, YZ,ZX.

SIGNXX ,SIGNYY ,SIGNZZ,SIGNXY,SIGNYZ ,SIGNZX )


(float array read-write) : array of size NEL containing stress in directions
XX, YY, ZZ, XY, YZ,ZX.

PLA (float array read only) : array of size NEL contaning equivalent plastic strain.

DPLA(float array read only) : array of size NEL containing incremental equivalent
platic strain.

EPSP (flaot array read only) : array of size NEL, equivalent of strain rate.

UVAR(float array read-write) : array of size NEL*NUVAR containing integration


point
element variables.

OFF (float array read-write) : array of size NEL contining deleted element flags. The
value set to 0 if the element is OFF (By default OFF = 1).

NOT_USE_I1,NOT_USE_I2,NOT_USE_I3,NOT_USE_I4 ( integer scalar) : is not used.


Can be used in the future.

NOT_USED1,NOT_USED2,NOT_USED3,NOT_USED,NOT_USED5 (float scalar): are


not used. Can be used in the future.

October, 2011 115


RADIOSS USER’S CODE USER’S SENSORS

6.3 ENGINE Subroutine for shell elements (FnnLAWC):

------------------------------------------------------------------------------------------
---
SUBROUTINE FnnLAWC (
1 NEL ,NUPARAM ,NUVAR ,NFUNC ,IFUNC , NPF ,
2 TF ,TIME ,TIMESTEP ,UPARAM , NGL , IPT
3 NPT0 ,NOT_USE_I1 ,NOT_USE_I2 , NOT_USE_I3 ,
4 SIGNXX ,SIGNYY ,SIGNXY ,SIGNYZ ,SIGNZX ,
5 EPSPXX ,EPSPYY ,EPSPXY ,EPSPYZ ,EPSPZX ,
5 EPSXX ,EPSYY ,EPSXY ,EPSYZ ,EPSZX ,
7 PLA ,DPLA ,EPSP ,UVAR ,UEL ,
8 OFF ,NOT_USED1, NOT_USED2,NOT_USED3 ,NOT_USED4 ,NOT_USED5)
-------------------------------------------------------------------------------------------------------------
--

This subroutine calculates the criteria of failure model.


We can use the fortran float external function FINTER to get the value Y of the function for
the abscissa X.

Y = FINTER(IFUNC(1), X, NPF, TF, DYDX) with :


Y the interpolated value.
X the abscissa value of the function.
I the ith user’s function.
DYDX is the slope.
NPF and TF are private function parameters.

The arguments list of Fnnlawc is as follows:

NEL (interger read only scalar): number of element per group. In RADIOSS ENGINE
the element data are treated by groups (for visctorisation purpose)

NEL is machine dependent and is set by RADIOSS

NUPARAM(integer read only scalar) : size of the user parameter array.

NUVAR (integer read only scalar) : number of user integration point element
variables.

NFUNC(integer read only scalar) : number of function used for this failure model
Materials.

INFUNC(integer array read only) : array of size NFUNC containing function indexes.

NPF(integer array private data) : array used by FINTER (float external functions).

TF (float array private data) : array used by FINTER (float external functions).

October, 2011 116


RADIOSS USER’S CODE USER’S SENSORS

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.

IPT (integer scalar read only ) : current layer or integration points.

NPT0 (integer scalar read only) : numbers of layers or integration points

NGL(integer array read only) : array of size NEL containing the external element
number..

EPSPXX ,EPSPYY,EPSPXY,EPSPYZ ,EPSPZX


(flaot array read only) : array of size NEL containing ε& strain rates in
directions XX, YY, and γ& strain rates in directions

XY, YZ,ZX,EPSXX ,EPSYY ,EPSXY ,EPSYZ ,EPSZX


(flaot array read only) : array of size NEL containing ε strain in directions
XX, YY, and γ strain in directions XY, YZ,ZX.

SIGNXX ,SIGNYY,SIGNXY,SIGNYZ ,SIGNZX


(float array read-write) : array of size NEL containing stress in directions
XX, YY, XY, YZ,ZX.

PLA (float array read only) : array of size NEL contaning equivalent plastic strain.

DPLA(float array read only) :array of size NEL containing incremental equivalent
plastic strain.

EPSP (flaot array read only) : array of size NEL, equivalent of strain rate.

UVAR(float array read-write) : array of size NEL*NUVAR containing user


integration point element variables

UEL(float array read-write) : array of size NEL, containing the number of layers in
which the failure criteria is satisfied for all elements

OFF (float array read-write) : array of size NEL contining deleted element flags.
The value is set to 0 if the element is OFF( by default OFF = 1)

NOT_USE_I1,NOT_USE_I2,NOT_USE_I3 ( integer scalar) : is not used. Can be used in


the
future.

NOT_USED1,NOT_USED2,NOT_USED3,NOT_USED,NOT_USED5 (float scalar): are


not used. Can be used in the future.

October, 2011 117


RADIOSS USER’S CODE USER’S SENSORS

6.4 EXAMPLE SUBROUTINE OF USER FAILURE MODEL FOR SHELL


and SOLID elements for RADIOSS STARTER

SUBROUTINE LECR04(IIN ,IOUT ,UPARAM ,MAXUPARAM,NUPARAM,


. NUVAR,IFUNC,MAXFUNC,NFUNC)
C---------------------------------------------------------------------
C I m p l i c i t T y p e s
C---------------------------------------------------------------------
IMPLICIT NONE
C----------+--------+--+--+-------------------------------------------
C VAR | SIZE |TYP| RW| DEFINITION
C----------+--------+--+--+-------------------------------------------
C IIN | 1 | I | R | INPUT FILE UNIT (D00 file)
C IOUT | 1 | I | R | OUTPUT FILE UNIT (L00 file)
C UPARAM | NUPARAM | F | W | USER FAILURE MODEL PARAMETER ARRAY
C MAXUPARAM| 1 | I | R | MAXIMUM SIZE OF UPARAM
C NUPARAM | 1 | I | W | SIZE OF UPARAM =< MAXUPARAM
C NUVAR | 1 | I | W | NUMBER OF USER VARIABLES
C----------+--------+--+--+-------------------------------------------
C IFUNC | NFUNC | I | W | FUNCTION NUMBER ARRAY
C MAXFUNC | 1 | I | R | MAXIMUM SIZE OF IFUNC
C NFUNC | 1 | I | W | SIZE OF IFUNC =< MAXFUNC
C----------+--------+--+--+-------------------------------------------

C-----------------------------------------------
C D u m m y A r g u m e n t s
C-----------------------------------------------
INTEGER IIN,IOUT,MAXUPARAM,NUPARAM,NUVAR,MAXFUNC,NFUNC,
. IFUNC(MAXFUNC)
DOUBLE PRECISION UPARAM(MAXUPARAM)
C-----------------------------------------------
C L o c a l V a r i a b l e s
C-----------------------------------------------
INTEGER ISHELL, ISOLID
DOUBLE PRECISION PLAMAX
C======================================
C
C EX : element is off if pla > plamax
C
C======================================
C
READ(IIN,F16.0)PLAMAX
IF(PLA_MAX.EQ.0)LLA_MAX= 1E20

UPARAM(1) = PLAMAX
NUPARAM = 1
NUVAR = 0
C
NFUNC = 0
WRITE(IOUT, 1000)PLAMAX
C for shell
WRITE(IOUT, 1100)
c for solid
WRITE(IOUT, 2100)

1000 FORMAT(
& 5X,40H PARAMETER ,/,
& 5X,40H ----------------------------- ,/,
& 5X,'MAXIMUM PLASTIC STRAIN .... .. =',E12.4//)
1100 FORMAT(
& 5X,' SHELL ELEMENT DELETION ')
2100 FORMAT(
& 5X,' SOLID ELEMENT DELETION ')

October, 2011 118


RADIOSS USER’S CODE USER’S SENSORS

RETURN
END

6.4.1 Engine user’s subroutine for SOLID elements

SUBROUTINE F04LAW (
1 NEL ,NUPARAM ,NUVAR ,NFUNC ,IFUNC ,
2 NPF ,TF ,TIME ,TIMESTEP ,UPARAM ,
3 NGL ,NOT_USE_I1 ,NOT_USE_I2,NOT_USE_I3,NOT_USE_I4,
4 EPSPXX ,EPSPYY ,EPSPZZ ,EPSPXY ,EPSPYZ ,EPSPZX ,
5 EPSXX ,EPSYY ,EPSZZ ,EPSXY ,EPSYZ ,EPSZX ,
6 SIGNXX ,SIGNYY ,SIGNZZ ,SIGNXY ,SIGNYZ ,SIGNZX ,
7 PLA ,DPLA ,EPSP ,UVAR ,OFF ,
8 NOT_USED1,NOT_USED2,NOT_USED3,NOT_USED4,NOT_USED5 )
C--------------------------------------------------------------------
C I m p l i c i t T y p e s
C--------------------------------------------------------------------
IMPLICIT NONE
C---------+--------+--+--+-------------------------------------------
C VAR | SIZE |TYP| RW| DEFINITION
C---------+--------+--+--+-------------------------------------------
C NEL | 1 | I | R | SIZE OF THE ELEMENT GROUP NEL
C NUPARAM | 1 | I | R | SIZE OF THE USER PARAMETER ARRAY
C NUVAR | 1 | I | R | NUMBER OF FAILURE ELEMENT VARIABLES
C---------+--------+--+--+-------------------------------------------
C NFUNC | 1 | I | R | NUMBER FUNCTION USED FOR THIS USER LAW
C IFUNC | NFUNC | I | R | FUNCTION INDEX
C NPF | * | I | R | FUNCTION ARRAY
C TF | * | F | R | FUNCTION ARRAY
C---------+--------+--+--+-------------------------------------------
C TIME | 1 | F | R | CURRENT TIME
C TIMESTEP| 1 | F | R | CURRENT TIME STEP
C UPARAM | NUPARAM | F | R | USER FAILURE PARAMETER ARRAY
C---------+--------+--+--+-------------------------------------------
C---------+--------+--+--+-------------------------------------------
C EPSPXX | NEL | F | R | STRAIN RATE XX
C EPSPYY | NEL | F | R | STRAIN RATE YY
C ... | | | |
C EPSXX | NEL | F | R | STRAIN XX
C EPSYY | NEL | F | R | STRAIN YY
C ... | | | |
C SIGNXX | NEL | F |R/W| NEW ELASTO PLASTIC STRESS XX
C SIGNYY | NEL | F |R/W| NEW ELASTO PLASTIC STRESS YY
C ... | | | |
C ... | | | |
C PLA | NEL | F | R | PLASTIC STRAIN
C DPLA | NEL | F | R | INCREMENTAL PLASTIC STRAIN
C EPSP | NEL | F | R | EQUIVALENT STRAIN RATE
C---------+--------+--+--+-------------------------------------------
C UVAR |NEL*NUVAR| F |R/W| USER ELEMENT VARIABLE ARRAY
C OFF | NEL | F |R/W| DELETED ELEMENT FLAG (=1. ON, =0. OFF)
C---------+--------+--+--+-------------------------------------------

C I N P U T A r g u m e n t s
C-----------------------------------------------
C
INTEGER NEL, NUPARAM,NPROPMI, NUVAR,NGL(NEL),NOT_USE_I1,
. NOT_USE_I2,NOT_USE_I3,NOT_USE_I4
DOUBLE PRECISION TIME,TIMESTEP,UPARAM(NUPARAM),
. DPLA(NEL),EPSP(NEL),PLA(NEL),
. EPSPXX(NEL),EPSPYY(NEL),EPSPZZ(NEL),
. EPSPXY(NEL),EPSPYZ(NEL),EPSPZX(NEL),
. EPSXX(NEL) ,EPSYY(NEL) ,EPSZZ(NEL) ,
. EPSXY(NEL) ,EPSYZ(NEL) ,EPSZX(NEL) ,

October, 2011 119


RADIOSS USER’S CODE USER’S SENSORS

. NOT_USED1,NOT_USED2,NOT_USED3,NOT_USED4,
. NOT_USED5
C-----------------------------------------------
C I N P U T O U T P U T A r g u m e n t s
C-----------------------------------------------
DOUBLE PRECISION UVAR(NEL,NUVAR), OFF(NEL),
. SIGNXX(NEL),SIGNYY(NEL),SIGNZZ(NEL),
. SIGNXY(NEL),SIGNYZ(NEL),SIGNZX(NEL)
C-----------------------------------------------
C VARIABLES FOR FUNCTION INTERPOLATION
C-----------------------------------------------
INTEGER NPF(*), NFUNC, IFUNC(NFUNC)
DOUBLE PRECISION FINTER ,TF(*)
EXTERNAL FINTER
C Y = FINTER(IFUNC(J),X,NPF,TF,DYDX)
C Y : y = f(x)
C X : x
C DYDX : f'(x) = dy/dx
C IFUNC(J): FUNCTION INDEX
C J : FIRST(J=1), SECOND(J=2) .. FUNCTION USED FOR THIS LAW
C NPF,TF : FUNCTION PARAMETER
C-----------------------------------------------
C L o c a l V a r i a b l e s
C-----------------------------------------------
INTEGER I
DOUBLE PRECISION PLAMAX
C--------------------------------------------------------------
C ex : element is off if pla > plamax
C
PLAMAX = UPARAM(1)
C-----------------------------------------------
C USER VARIABLES INITIALIZATION
C-----------------------------------------------
IF(TIME.EQ.ZERO)THEN
DO I=1,NEL
DO J=1,NUVAR
UVAR(I,J)= ZERO
ENDDO
ENDDO
ENDIF
C...
DO I=1,NEL
IF(OFF(I).LT.0.1) OFF(I)=0.0
IF(OFF(I).LT.1.0) OFF(I)=OFF(I)*0.8
END DO
C
DO I=1,NEL
IF(OFF(I).EQ.1..AND.PLA(I).GE.PLAMAX)THEN
OFF(I)=0.8
ENDIF
ENDDO
C
ENDIF
RETURN
END

6.4.2 Engine user’s subroutine for SHELL elements

SUBROUTINE F04LAWC(
1 NEL ,NUPARAM ,NUVAR ,NFUNC ,IFUNC,NPF,
2 TF ,TIME ,TIMESTEP ,UPARAM ,NGL ,IPT,
3 NPT0 ,NOT_USE_I1,NOT_USE_I2 ,NOT_USE_I3,
4 SIGNXX ,SIGNYY ,SIGNXY ,SIGNYZ ,SIGNZX ,
4 EPSPXX ,EPSPYY ,EPSPXY ,EPSPYZ ,EPSPZX ,

October, 2011 120


RADIOSS USER’S CODE USER’S SENSORS

6 EPSXX ,EPSYY ,EPSXY ,EPSYZ ,EPSZX ,


7 PLA ,DPLA ,EPSP ,UVAR ,UEL ,
8 OFF ,NOT_USED1 ,NOT_USED2,NOT_USED3,NOT_USED4,NOT_USED5 )
C-----------------------------------------------
C I m p l i c i t T y p e s
C-----------------------------------------------
IMPLICIT NONE
C---------+--------+--+--+-------------------------------------------
C VAR | SIZE |TYP| RW| DEFINITION
C---------+--------+--+--+-------------------------------------------
C NEL | 1 | I | R | SIZE OF THE ELEMENT GROUP NEL
C NUPARAM | 1 | I | R | SIZE OF THE USER PARAMETER ARRAY
C NUVAR | 1 | I | R | NUMBER OF USER ELEMENT VARIABLES
C---------+--------+--+--+-------------------------------------------
C NFUNC | 1 | I | R | NUMBER FUNCTION USED FOR THIS USER LAW
C IFUNC | NFUNC | I | R | FUNCTION INDEX
C NPF | * | I | R | FUNCTION ARRAY
C NPT0 | 1 | I | R | NUMBER OF LAYERS OR INTEGRATION POINTS
C IPT | 1 | I | R | LAYER OR INTEGRATION POINT NUMBER
C TF | * | F | R | FUNCTION ARRAY
C NGL | NEL | I | R | ELEMEMT NUMBER
C---------+--------+--+--+-------------------------------------------
C TIME | 1 | F | R | CURRENT TIME
C TIMESTEP| 1 | F | R | CURRENT TIME STEP
C UPARAM | NUPARAM | F | R | USER MATERIAL PARAMETER ARRAY
C EPSPXX | NEL | F | R | STRAIN RATE XX
C EPSPYY | NEL | F | R | STRAIN RATE YY
C ... | | | |
C EPSXX | NEL | F | R | STRAIN XX
C EPSYY | NEL | F | R | STRAIN YY
C---------+--------+--+--+-------------------------------------------
C SIGNXX | NEL | F |R/W| NEW ELASTO PLASTIC STRESS XX
C SIGNYY | NEL | F |R/W| NEW ELASTO PLASTIC STRESS YY
C ... | | | |
C---------+--------+--+--+-------------------------------------------
C PLA | NEL | F | R | PLASTIC STRAIN
C DPLA | NEL | F | R | INCREMENTAL PLASTIC STRAIN
C EPSP | NEL | F | R | EQUIVALENT STRAIN RATE
C UVAR |NEL*NUVAR| F |R/W| USER ELEMENT VARIABLE ARRAY
C OFF | NEL | F |R/W| DELETED ELEMENT FLAG (=1. ON, =0. OFF)
C---------+--------+--+--+-------------------------------------------
C I N P U T A r g u m e n t s
C-----------------------------------------------
INTEGER NEL, NUPARAM, NUVAR, NGL(NEL),MAT(NEL),
. IPT,NPT0,,NOT_USE_I1,NOT_USE_I2,NOT_USE_I3
DOUBLE PRECISION TIME,TIMESTEP(NEL),UPARAM(NUPARAM),DPLA(NEL),
. EPSP(NEL), PLA(NEL)EPSPXX(NEL),EPSPYY(NEL),EPSPXY(NEL),
. EPSPYZ(NEL),EPSPZX(NEL),EPSXX(NEL) ,EPSYY(NEL) ,EPSXY(NEL),
. EPSYZ(NEL) ,EPSZX(NEL),
. NOT_USED1,NOT_USED2,NOT_USED3,NOT_USED4,NOT_USED5
C
C-----------------------------------------------
C I N P U T O U T P U T A r g u m e n t s
C-----------------------------------------------
DOUBLE PRECISION UVAR(NEL,NUVAR), OFF(NEL),
. SIGNXX(NEL),SIGNYY(NEL),UEL(NEL),
. SIGNXY(NEL),SIGNYZ(NEL),SIGNZX(NEL)
C-----------------------------------------------
C VARIABLES FOR FUNCTION INTERPOLATION
C-----------------------------------------------
INTEGER NPF(*), NFUNC, IFUNC(NFUNC)
DOUBLE PRECISION FINTER ,TF(*)
EXTERNAL FINTER
C Y = FINTER(IFUNC(J),X,NPF,TF,DYDX)
C Y : y = f(x)
C X : x

October, 2011 121


RADIOSS USER’S CODE USER’S SENSORS

C DYDX : f'(x) = dy/dx


C IFUNC(J): FUNCTION INDEX
C J : FIRST(J=1), SECOND(J=2) .. FUNCTION USED FOR THIS LAW
C NPF,TF : FUNCTION PARAMETER
C-----------------------------------------------
C L o c a l V a r i a b l e s
C-----------------------------------------------
INTEGER I,IFLAG(MVSIZ),INDX(MVSIZ),IADBUF,NINDX,
DOUBLE PRECISION PLAMAX
C-----------------------------------------------
C Ex : ELEMENT IS OFF iF PLA > PLAMAX
C-----------------------------------------------
PLAMAX = UPARAM(1)
C-----------------------------------------------
C USER VARIABLES INITIALIZATION
C-----------------------------------------------
IF(TIME.EQ.ZERO)THEN
DO I=1,NEL
DO J=1,NUVAR
UVAR(I,1)=ZERO
ENDDO
ENDIF
C
C-----------------------------------------------
DO I =1,NEL
IF(OFF(I).EQ.1..AND.PLA(I).GE.PLAMAX) THEN
SIGNXX(I) = 0.
SIGNYY(I) = 0.
SIGNXY(I) = 0.
SIGNYZ(I) = 0.
SIGNZX(I) = 0.
ENDIF
ENDDO
C
RETURN
END

October, 2011 122


RADIOSS USER’S CODE APPENDIX

APPENDIX APPENDIX

October, 2011 123


RADIOSS USER’S CODE APPENDIX 2 – Available arguments

APPENDIX 1 – Creating user’s executables

In order to create a new RADIOSS executable with your user property law, it is necessary
to get from Altair an object library for the RADIOSS STARTER and another for the
RADIOSS ENGINE. The same type of machine must be used for compiling with the same
compiler version as the given libraries.

To generate new RADIOSS STARTER executable which includes the user’s option, follow
these steps:
- compile the user’s Starter subroutine to get an object file.
- link to get a new RADIOSS STARTER executable.

For RADIOSS ENGINE the procedure is:


- compile the user’s Engine subroutine to get an object file.
- link to get a new RADIOSS ENGINE executable.

Procedure flags for usual versions are given as examples.

Please contact Altair support to get the updated compilation options for a given machine.

1. Procedure for linux64_impi :

With compiler Intel Fortran Version 11.0, Build 20090609


(Math Kernel Libraries installation is required)

With INTEL MPI version : 3.2.2

Compilation for starter:


ifort -axsse3 -O2 -fp-model precise -heap-arrays -c [starter_user_routine].f

Links edition for starter:


• If the user law is an extendend user law (See Chapter 3)
ar –xv [starter_library].a law_user.mod
ar -xv [starter_library].a starter.o
ifort -axsse3 -O2 -fp-model precise -heap-arrays -i-static -o [user_starter_executable]
starter.o [starter_user_routine].o [starter_library].a
Since version 11.0.201 -openmp is resquested :
ifort -axsse3 -O2 -fp-model precise -heap-arrays -i-static -openmp -o
[user_starter_executable] starter.o [starter_user_routine].o [starter_library].a

Compilation for engine:

October, 2011 124


RADIOSS USER’S CODE APPENDIX 2 – Available arguments

• If the user law is a 29-30-31 user law type (See Chapter2)


ifort -axsse3 –O3 -fp-model precise -heap-arrays -c [engine_user_routine].f
• If the user law is an extendend user law (See Chapter 3)
ar –xv [engine_library].a law_usersh.mod law_userso.mod
ifort -axsse3 –O3 -fp-model precise -heap-arrays -c [engine_user_routine].f

Links edition for engine:


ar -xv [engine_library].a RADIOSS.o
ifort -axsse3 –O3 -fp-model precise -heap-arrays -i-static -DMPI
-L/opt/intel/mpi/3.2.2/lib64/ -o [user_engine_executable] RADIOSS.o
[engine_user_routine].o [engine_library].a -L[path_to_intel_compiler]/mkl/lib/em64t
-I[path_to_intel_compiler]/mkl/includes -Wl,--start-group
[path_to_intel_compiler]/mkl/lib/em64t/libmkl_intel_lp64.a
[path_to_intel_compiler]/mkl/lib/em64t/libmkl_sequential.a
[path_to_intel_compiler]/mkl/lib/em64t/libmkl_core.a -Wl,--end-group
-lm -lmpiif -lmpi -lrt -ldl

2. Procedure for linux64_plmpi:

With compiler Intel Fortran Version 11.0, Build 20090609


(Math Kernel Libraries installation is required)

With HP-MPI version : HPMPI 2.2.7 or higher.

Compilation for starter:


• If the user law is an extendend user law (See Chapter 3)
ar –xv [starter_library].a law_user.mod
ifort -axsse3 -O2 -fp-model precise -heap-arrays -c [starter_user_routine].f

Links edition for starter:


ar -xv [starter_library].a starter.o
ifort -axsse3 -O2 -fp-model precise -heap-arrays -i-static -o [user_starter_executable]
starter.o [starter_user_routine].o [starter_library].a
Since version 11.0.201 -openmp is resquested :
ifort -axsse3 -O2 -fp-model precise -heap-arrays -i-static -openmp -o
[user_starter_executable] starter.o [starter_user_routine].o [starter_library].a

Compilation for engine:


• If the user law is a 29-30-31 user law type (See Chapter2)
ifort -axsse3 –O3 -fp-model precise -c [engine_user_routine].f
• If the user law is an extendend user law (See Chapter 3)
ar –xv [engine_library].a law_usersh.mod law_userso.mod
ifort -axsse3 –O3 -fp-model precise -c [engine_user_routine].f

Links edition for engine:


ar -xv [engine_library].a RADIOSS.o

October, 2011 125


RADIOSS USER’S CODE APPENDIX 2 – Available arguments

ifort -axsse3 –O3 -fp-model precise -i-static -DMPI -L/opt/intel/mpi/2.0/lib64/ -o


[user_engine_executable] RADIOSS.o [engine_user_routine].o [engine_library].a
-L[path_to_intel_compiler]/mkl/lib/em64t -I[path_to_intel_compiler]/mkl/includes
-Wl,--start-group [path_to_intel_compiler]/mkl/lib/em64t/libmkl_intel_lp64.a
[path_to_intel_compiler]/mkl/lib/em64t/libmkl_sequential.a
[path_to_intel_compiler]/mkl/lib/em64t/libmkl_core.a -Wl,--end-group -lm -lmpi -lpmpi -
ldl -lrt

3. Procedure for linux64:

With compiler Intel Fortran Version 11.0, Build 20090609


(Math Kernel Libraries installation is required)

Compilation for starter:


• If the user law is an extendend user law (See Chapter 3)
ar –xv [starter_library].a law_user.mod
ifort -axsse3 -O2 -fp-model precise -heap-arrays -c [starter_user_routine].f

Links edition for starter:


ar -xv [starter_library].a starter.o
ifort -axsse3 -O2 -fp-model precise -heap-arrays -o [user_starter_executable] starter.o
[starter_user_routine].o [starter_library].a
Since version 11.0.201 -openmp is resquested :
ifort -axsse3 -O2 -fp-model precise -heap-arrays -openmp -o [user_starter_executable]
starter.o [starter_user_routine].o [starter_library].a

Compilation for engine:


• If the user law is a 29-30-31 user law type (See Chapter2)
ifort -axsse3 –O3 -fp-model precise -heap-arrays -openmp -c [engine_user_routine].f
• If the user law is an extendend user law (See Chapter 3)
ar –xv [engine_library].a law_usersh.mod law_userso.mod
ifort -axsse3 –O3 -fp-model precise -heap-arrays -openmp -c [engine_user_routine].f

Links edition for engine:


ar -xv [engine_library].a RADIOSS.o
ifort -axsse3 –O3 -fp-model precise -heap-arrays -openmp -i-static -o
[user_engine_executable] RADIOSS.o [engine_user_routine].o [engine_library].a
-L[path_to_intel_compiler]/mkl/lib/em64t -I[path_to_intel_compiler]/mkl/includes
-Wl,--start-group [path_to_intel_compiler]/mkl/lib/em64t/libmkl_intel_lp64.a
[path_to_intel_compiler]/mkl/lib/em64t/libmkl_sequential.a
[path_to_intel_compiler]/mkl/lib/em64t/libmkl_core.a -Wl,--end-group

4. Procedure for Windows 32 bit:

With compiler INTEL Fortran compiler 11.0, build 20090609 :

October, 2011 126


RADIOSS USER’S CODE APPENDIX 2 – Available arguments

(Math Kernel Libraries installation is required)

Extended user law requires additional Radioss packages :


[starter]_fortran_usermodules.zip
[engine]_fortran_usermodules.zip

Compilation for starter:


• If the user law is an extendend user law (See Chapter 3)
unzip [starter]_fortran_usermodules.zip
ifort /nologo /Qcpp /Qaxsse2 /O2 /fp:precise /heap-arrays –c [starter_user_routine].f

Links edition for starter:


LIB /EXTRACT:_obj_win32/starter.obj [starter_library].a
ifort /nologo /Qaxsse2 /O2 /fp:precise /heap-arrays -o [user_starter_executable] starter.o
[starter_user_routine].o [starter_library].a advapi32.lib Psapi.lib

Compilation for engine:


• If the user law is a 29-30-31 user law type (See Chapter2)
ifort /nologo /Qcpp /Qaxsse2 /Qopenmp /O3 /fp:precise /heap-arrays -c
[engine_user_routine].f
• If the user law is an extendend user law (See Chapter 3)
unzip [engine]_fortran_usermodules.zip
ifort /nologo /Qcpp /Qaxsse2 /Qopenmp /O3 /fp:precise /heap-arrays -c
[engine_user_routine].f

Links edition for engine:


LIB /EXTRACT:_obj_win32/radioss.obj [engine_library].a
ifort /nologo /Qaxsse2 /Qopenmp /O3 /fp:precise /heap-arrays /F150000000 -o
[user_engine_executable] radioss.obj [engine_user_routine].obj [engine_library].a
mkl_intel_c.lib mkl_sequential.lib mkl_core.lib /MT /Qopenmp-link:static libiomp5mt.lib
advapi32.lib Psapi.lib

5. Procedure for Windows 64 Bit

With compiler INTEL Fortran compiler 11.0, build 20090609 :


(Math Kernel Libraries installation is required)

Extended user law requires additional Radioss packages :


[starter]_fortran_usermodules.zip
[engine]_fortran_usermodules.zip

Compilation for starter:


• If the user law is an extendend user law (See Chapter 3)
unzip [starter]_fortran_usermodules.zip
ifort /nologo /Qcpp /Qaxsse3 /O2 /fp:precise /heap-arrays –c [starter_user_routine].f

Links edition for starter:

October, 2011 127


RADIOSS USER’S CODE APPENDIX 2 – Available arguments

LIB /EXTRACT:_obj_win64/starter.obj [starter_library].a


ifort /nologo /Qaxsse3 /O2 /fp:precise /heap-arrays -o [user_starter_executable] starter.o
[starter_user_routine].o [starter_library].a advapi32.lib Psapi.lib

Compilation for engine:


• If the user law is a 29-30-31 user law type (See Chapter2)
ifort /nologo /Qcpp /Qaxsse3 /Qopenmp /O3 /fp:precise /heap-arrays -c
[engine_user_routine].f
• If the user law is an extendend user law (See Chapter 3)
unzip [engine]_fortran_usermodules.zip
ifort /nologo /Qcpp /Qaxsse3 /Qopenmp /O3 /fp:precise /heap-arrays -c
[engine_user_routine].f

Links edition for engine:


LIB /EXTRACT:_obj_win64/radioss.obj [engine_library].a
ifort /Qaxsse3 /Qopenmp /O3 /fp:precise /heap-arrays /F150000000 -o
[user_engine_executable] radioss.obj [engine_user_routine].obj [engine_library].a
/Qopenmp-link:static advapi32.lib Psapi.lib mkl_intel_lp64.lib mkl_sequential.lib
mkl_core.lib

APPENDIX 2 – Available user’s arguments

1. Available starter user’s arguments


(defined in the headers of subroutines)

STARTER USER’S ARGUMENTS – MATERIAL LAW FOR SHELLS


Variable Size Type Write /read Definition
IIN 1 Integer R Input file unit (starter input file)
IOUT 1 Integer R Output file unit (starter listing file)
UPARAM NUPARAM Float W User’s parameter
MAXNUPARAM 1 Integer R Maximum size of UPARAM
NUPARAM 1 Integer W Size of UPARAM
NUVAR 1 Integer W Number of user’s variables
IFUNC NFUNCT Integer W Function number array
MAXNFUNC 1 Integer R Maximum size of IFUNC
NFUNCT 1 Integer W Size of IFUNC
(1) Stifness modulus for interface
PARMAT 3 Float W (2)Young modulus (for shell)
(3)Poissson’s ratio (for shell)

October, 2011 128


RADIOSS USER’S CODE APPENDIX 2 – Available arguments

STARTER USER’S ARGUMENTS – MATERIAL LAW FOR BRICKS


Variable Size Type Write /read Definition
IIN 1 Integer R Input file unit (starter input file)
IOUT 1 Integer R Output file unit (starter listing file)
UPARAM NUPARAM Float W User’s parameter
MAXNUPARAM 1 Integer R Maximum size of UPARAM
NUPARAM 1 Integer W Size of UPARAM
NUVAR 1 Integer W Number of user’s variables
IFUNC NFUNCT Integer W Function number array
MAXNFUNC 1 Integer R Maximum size of IFUNC
NFUNCT 1 Integer W Size of IFUNC
STIFINT 1 Integer W Stifness modulus for interface

STARTER USER’S ARGUMENTS – SPING PROPERTY


Variable Size Type Write /read Definition
IIN 1 Integer R Input file unit (starter input file)
IOUT 1 Integer R Output file unit (starter listing file)
NUVAR 1 Integer W Number of user’s variables
UVAR NUVAR* NEL Float R/W User’s variable
(1) Skew number
PARGEO * Float W (2) Stifness for interface
(3) Front wave option
NEL 1 Integer R Number of elements
IPROP 1 Integer R Property number
IX 3* NEL Float R Spring connectivity
XL NEL Float R Element length
MASS NEL Float W Element mass
XINER NEL Float W Element inertia (spherical)
STIFM NEL Float W Element stifness (time step)
STIFR NEL Float W Element rotation stifness (time step)
VISCM NEL Float W Element viscosity (time step)
VISCR NEL Float W Element rotation viscosity (time step)

STARTER USER’S ARGUMENTS – SOLID PROPERTY


Variable Size Type Write /read Definition
NEL 1 Integer R Number of elements
IIN 1 Integer R Input file unit (starter input file)
IOUT 1 Integer R Output file unit (starter listing file)
NUVAR 1 Integer W Number of user’s variables
UVAR NUVAR* NEL Float R/W User’s variable
(1) Skew number
PARGEO * Float W (2) Stifness for interface
(3) Front wave option
IPROP 1 Integer R Property number
IMAT 1 Integer R Material number

October, 2011 129


RADIOSS USER’S CODE APPENDIX 2 – Available arguments

SOLID_ID NEL Integer R Solid Element id t=0


EINT NEL Float W Total internal energy t=0
VOL NEL Float R/W Initial volume
OFF NEL Float R/W Delete flag
RHO NEL Float R/W Density
SIG 6* NEL Float R/W Stress tensor
XX1 NEL Float R X coordinate node 1
YY1 NEL Float R Y coordinate node 1
ZZ1 NEL Float R Z coordinate node 1
XX2 . . ZZ8 NEL Float R Same for node 2 to 8
VX1 NEL Float R X velocity node 1
VY1 NEL Float R Y velocity node 1
VZ1 NEL Float R Z velocity node 1
VRX1 NEL Float R X rotational velocity node 1
VRY1 NEL Float R Y rotational velocity node 1
VRZ1 NEL Float R Z rotational velocity node 1
MAS1 NEL Float W Mass node 1
MAS2 . . MAS8 NEL Float W Same for node 2 to 8
INN1 NEL Float W Inertia node 1
INN2 . . INN8 NEL Float W Same for node 2 to 8
STIFM NEL Float W Element stifness (time step)
STIFR NEL Float W Element rotation stifness (time step)
VISCM NEL Float W Element viscosity (time step)
VISCR NEL Float W Element rotation viscosity (time step)

STARTER USER’S ARGUMENTS – SENSOR


Variable Size Type Write /read Definition
IIN 1 Integer R Input file unit (starter input file)
IOUT 1 Integer R Output file unit (starter listing file)

2. Available engine user’s arguments


a. of subroutines)
(defined in the headers
ENGINE USER’S ARGUMENTS – MATERIAL LAW FOR SHELLS
Variable Size Type Write /read Definition
NEL 1 Integer R Number of elements
UVAR NUVAR* NEL Float R/W User’s variable
UPARAM NUPARAM Float W User’s parameter
NUPARAM 1 Integer W Size of UPARAM
NUVAR 1 Integer W Number of user’s variables
NFUNCT 1 Integer W Size of IFUNC
IFUNC NFUNCT Integer W Function number array
NPF * Integer R Function array
NPT 1 Integer R Number of layers or integration points

October, 2011 130


RADIOSS USER’S CODE APPENDIX 2 – Available arguments

IPT 1 Integer R Layer or integration point number


IFLAG * Integer R Geometrical flags
TF * Float R Function array
NGL NEL Integer R Element number
TIME 1 Float R Current time
TIMESTEP 1 Float R Current time step
RHO0 NEL Float R Initial density
AREA NEL Float R Area
EINT NEL Float R Total internal energy
THKLY NEL Float R Layer thickness
EPSPXX NEL Float W Strain rate XX
DEPSXX NEL Float W Strain increment XX
EPSXX NEL Float W Strain XX
SIGOXX NEL Float W Old elasto-plastic stress XX
SIGNXX NEL Float W New elasto-plastic stress XX
SIGVXX NEL Float W Viscous stress XX
SOUNDSP NEL Float W Sound speed (time step)
VISCMAX NEL Float W Max damping modulus (time step)
THK NEL Float R/W Thickness
PLA NEL Float R/W Plastic strain
OFF NEL Float R/W Delete flag

ENGINE USER’S ARGUMENTS – MATERIAL LAW FOR BRICKS


Variable Size Type Write /read Definition
NEL 1 Integer R Number of elements
UVAR NUVAR* NEL Float R/W User’s variable
UPARAM NUPARAM Float W User’s parameter
NUPARAM 1 Integer W Size of UPARAM
NUVAR 1 Integer W Number of user’s variables
NFUNCT 1 Integer W Size of IFUNC
IFUNC NFUNCT Integer W Function number array
NPF * Integer R Function array
TF * Float R Function array
NGL NEL Integer R Element number
TIME 1 Float R Current time
TIMESTEP 1 Float R Current time step
RHO0 NEL Float R Initial density
RHO NEL Float R Density
VOLUME NEL Float R Volume
EINT NEL Float R Total internal energy
EPSPXX NEL Float W Strain rate XX
DEPSXX NEL Float W Strain increment XX
EPSXX NEL Float W Strain XX
SIGOXX NEL Float W Old elasto-plastic stress XX
SIGNXX NEL Float W New elasto-plastic stress XX

October, 2011 131


RADIOSS USER’S CODE APPENDIX 2 – Available arguments

SIGVXX NEL Float W Viscous stress XX


SOUNDSP NEL Float W Sound speed (time step)
VISCMAX NEL Float W Max damping modulus (time step)
OFF NEL Float R/W Delete flag

ENGINE USER’S ARGUMENTS – SPING PROPERTY


Variable Size Type Write /read Definition
NEL 1 Integer R Number of elements
IPROP 1 Integer R Property number
UVAR NUVAR* NEL Float R/W User’s variable
NUVAR 1 Integer W Number of user’s variables
FX NEL Float R/W Tension force
FY NEL Float R/W Y shear force
FZ NEL Float R/W Z shear force
XMOM NEL Float R/W Torsion moment
YMOM NEL Float R/W Y bending moment
ZMOM NEL Float R/W Z bending moment
EINT NEL Float R/W Total internal energy
OFF NEL Float R/W Delete flag
STIFM NEL Float W Element stifness (time step)
STIFR NEL Float W Element rotation stifness (time step)
VISCM NEL Float W Element viscosity (time step)
VISCR NEL Float W Element rotation viscosity (time step)
MASS NEL Float W Element mass
XINER NEL Float W Element inertia (spherical)
DT 1 Integer R Time step
XL NEL Float R Element length
XL NEL Float R Element length
VX NEL Float R Tension velocity
RY1 NEL Float R Node 1 Y bending rotational velocity
RZ1 NEL Float R Node 1 Z bending rotational velocity
RX NEL Float R Torsional velocity
RY2 NEL Float R Node 2 Y bending rotational velocity
RZ2 NEL Float R Node 2 Z bending rotational velocity

ENGINE USER’S ARGUMENTS


Variable Size Type Write /read Definition
NEL 1 Integer R Number of elements
IOUT 1 Integer R Output file unit (engine listing file)
UVAR NUVAR* NEL Float R/W User’s variable
IPROP 1 Integer R Property number
IMAT 1 Integer R Material number
SOLID_ID NEL Integer R Solid Element id
EINT NEL Float R Total internal energy

October, 2011 132


RADIOSS USER’S CODE APPENDIX 2 – Available arguments

VOL NEL Float R Initial volume


OFF NEL Float R/W Delete flag
RHO NEL Float R/W Density
SIG 6* NEL Float R/W Stress tensor
XX1 NEL Float R X coordinate node 1
YY1 NEL Float R Y coordinate node 1
ZZ1 NEL Float R Z coordinate node 1
XX2 . . ZZ8 NEL Float R Same for node 2 to 8
VX1 NEL Float R X velocity node 1
VY1 NEL Float R Y velocity node 1
VZ1 NEL Float R Z velocity node 1
VRX1 NEL Float R X rotational velocity node 1
VRY1 NEL Float R Y rotational velocity node 1
VRZ1 NEL Float R Z rotational velocity node 1
FX1 NEL Float W X force node 1
FY1 NEL Float W Y force node 1
FZ1 NEL Float W Z force node 1
MX1 NEL Float W X moment node 1
MY1 NEL Float W Y moment node 1
MZ1 NEL Float W Z moment node 1
STIFM NEL Float W Element stifness (time step)
STIFR NEL Float W Element rotation stifness (time step)
VISCM NEL Float W Element viscosity (time step)
VISCR NEL Float W Element rotation viscosity (time step)

ENGINE USER’S ARGUMENTS – SENSOR


Variable Size Type Write /read Definition
ID NEL Integer R Sensor id

October, 2011 133


RADIOSS USER’S CODE APPENDIX 3 – Access functions

APPENDIX 3 – Communication between user’s subroutines and


RADIOSS code
The main functions to access user’s properties and materials are:

Storage functions:

INTEGER ierror = SET_U_PNU(func_index, fun_id, KFUNC)


This function stores a RADIOSS function fun_id in current user property buffer at a
position referenced by func_index.

INTEGER ierror = SET_U_PNU(mat_index, mid, KMAT)


This function stores a RADIOSS material mid in current user property buffer at a
position referenced by mat_index.

INTEGER ierror = SET_U_PNU(prop_index, pid, KPROP)


This function stores a RADIOSS property pid in current user property buffer at a
position referenced by prop_index.

INTEGER ierror = SET_U_GEO(value_index, value)


This function stores a value in current user property buffer at a position referenced by
value_index.

Return functions:

INTEGER IP = GET_U_P(PID)
PID : integer property ID
This function return property number.

INTEGER PID = GET_U_PID(IP)


IP : property number
This function return the user property ID corresponding to user property number IP.

FLOAT PARAMI = GET_U_GEO(I,IP)


I : parameter index (1 for first parameter,...)
IP : property number
This function return the user geometry parameters.

INTEGER II = GET_U_PNU(I,IP,KK)
IFUNCI = GET_U_PNU(I,IP,KFUNC)
IPROPI = GET_U_PNU(I,IP,KPROP)
IMATI = GET_U_PNU(I,IP,KMAT)
I : varible index (1 for first variable,...)
IP : property number

October, 2011 134


RADIOSS USER’S CODE APPENDIX 3 – Access functions

KK : parameter KFUNC,KMAT,KPROP
This function return the user stored function (if KK=KFUNC), material (if
KK=KMAT) or property (if KK=KPROP) numbers. See starter subroutine for
corresponding ID storage.
INTEGER IM = GET_U_M(MID)
MID : material ID
This function return material number

INTEGER MID = GET_U_MID(IM)


IM : material number
This function return the user material ID corresponding to user material number IM.

FLOAT PARAMI = GET_U_MAT(I,IM)


I : parameter index (1 for first parameter,...)
IM : material number
This function return the user material parameters.
NOTE: GET_U_MAT(0,IMAT) return the density

INTEGER IFUNCI = GET_U_MNU(I,IM,KFUNC)


I : variable index (1 for first function)
IM : material number
KFUNC : only functions are yet available.
This function return the user stored function numbers (function refered by users
materials).

INTEGER IFUNCI = GET_U_MNU(I,IM,KFUNC)


I : variable index (1 for first function)
IM : material number
KFUNC : only functions are yet available.
This function return the user stored function numbers (function refered by users
materials).
See starter material user’s subroutine for corresponding ID storage.

FLOAT Y = GET_U_FUNC(IFUNC,X,DYDX)
IFUNC : function number obtained by
IFUNC = GET_U_MNU(I,IM,KFUNC) or
IFUNC = GET_U_PNU(I,IP,KFUNC)
X : X value
DYDX : slope dY/dX
This function return Y(X).

The geometry datas (property) has to bee stored in RADIOSS storage with the function
SET_U_GEO(value_index,value).

October, 2011 135


RADIOSS USER’S CODE APPENDIX 3 – Access functions

If some standard RADIOSS functions (time function or x,y function) are used, this function IDs
has to bee stored with the function SET_U_PNU(func_index,func_id,KFUNC).

If the property refers to a user material, this material IDs has to bee stored with the function
SET_U_PNU(mat_index,mat_id,KMAT).

If the property refers to a user property, this sub-property IDs has to bee stored with the function
SET_U_PNU(sub_prop_index,sub_prop_id,KPROP).

SET_U_GEO and SET_U_PNU return 0 if no error.


SET_U_GEO and SET_U_PNU return the maximum allowed index if index is larger than this
maximum.

The specific functions for user’s subroutines type sensor are:


INTEGER NUM = GET_U_NUMSENS(ID)
ID : sensor ID
NUM : sensor number
This function allows user to get a sensor number.

INTEGER ierror = GET_U_SENS_FPAR(IVAR, VAR)


IVAR : float variable index
VAR : integer value
This function allows user to retrieve a float sensor parameter.
INTEGER ierror = GET_U_SENS_IPAR(IVAR, VAR)
IVAR : integer variable index
VAR : integer value
This function allows user to retrieve an intenger sensor parameter.

INTEGER ierror = SET_U_SENS_VALUE(NSENS,IVAR,VAR)


NSENS : integer sensor number
IVAR : integer buffer index
VAR : float value
This function allows user to write a variable to a sensor buffer (float).

INTEGER ierror = GET_U_SENS_VALUE(NSENS,IVAR,VAR)


NSENS : integer sensor number
IVAR : integer buffer index
VAR : float value
This function allows user to read a variable from a sensor buffer (float).

INTEGER ierror = SET_U_SENS_ACTI(NSENS)


NSENS : integer sensor number
This function allows user to activate a sensor using RADIOSS flag.

FLOAT DTIME = GET_U_SENS_ACTI(NSENS)


DTIME : float time delay since first activation

October, 2011 136


RADIOSS USER’S CODE APPENDIX 3 – Access functions

(actif <=> DTIME > 0)


NSENS : integer sensor number
This function allows user to check RADIOSS activation status of a sensor.

FLOAT TIME = GET_U_TIME()


This function allows user to check current time.

INTEGER NCYC = GET_U_CYCLE()


This function allows user to check current cycle.

INTEGER IERR = GET_U_ACCEL(NACC, AX,AY,AZ)


AX,AY,AZ : float acceleration components
NACC : integer accelerator number,
IDACC : integer accelerator ID, and
NACC : GET_U_NUMACC(IDACC)
This function allows user to access accelerometer values

INTEGER IERR = GET_U_NOD_X(NOD, X,Y,Z)


INTEGER IERR = GET_U_NOD_D(NOD, DX,DY,DZ)
INTEGER IERR = GET_U_NOD_V(NOD, VX,VY,VZ)
INTEGER IERR = GET_U_NOD_A(NOD, AX,AY,AZ)
X, Y, Z : float nodal coordinates
DX,DY,DZ : float nodal displacements
AX,AY,AZ : float nodal velocities
AX,AY,AZ : float nodal accelerations
NOD : integer node number
NID : integer node ID, and
NOD : GET_U_NUMNOD(ID)
This function allows user to access nodal values

FLOAT Y = GET_U_FUNC(IFUNC, X, DERI)


Y : float ordinate
X : float abscissa
DERI : float Y/X
IFUNC : integer function number
IDFUN : integer function ID, where
INTEGER IFUNC = GET_U_NUMFUN(IDFUN)
This function allows user to access RADIOSS functions.

Refer to the user’s subroutines descriptions for more explanation about access functions.

October, 2011 137


RADIOSS USER’S CODE APPENDIX 3 – Access functions

STARTER USER’S SUBROUTINE STARTER USER’S SUBROUTINE


PROPERTY (pid) INITIALIZATION PROPERTY RADIOSS STARTER
User’s arguments list User’s arguments list
GENERAL OPTIONS
STARTER USER’S SUBROUTINE
MATERIAL LAW (mid) FUNCTIONS (fun_id)
User’s arguments list

STARTER USER’S SUBROUTINE RADIOSS arguments lists


WINDOWS
User’s arguments list

STARTER USER’S SUBROUTINE


SENSOR (sens_id)
User’s arguments list

Storage functions (SET_U)

PROPERTY BUFFER (iprop) USER’S ARRAY


Property parameters stored in the User’s parameters stored
values_index (prop_index) in
UPARAM(value_index)
MATERIAL BUFFER (imat)
Material parameters stored in the Shared arguments
values_index (mat_index)

FUNCTION BUFFER (ifunc)


Function values stored in the
values_index (func_index)
RADIOSS storage
Return functions (GET_U)

ENGINE USER’S SUBROUTINE


PROPERTY (pid) RADIOSS ENGINE
User’s arguments list
Shared arguments
GENERAL OPTIONS
ENGINE USER’S SUBROUTINE
and/or
MATERIAL LAW (mid)
RADIOSS arguments lists
User’s arguments list Subroutne(s) CALL

ENGINE USER’S SUBROUTINE


SENSOR (sens_id)
User’s arguments list

Figure 2: Communication between user’s modules and RADIOSS database

October, 2011 138


RADIOSS USER’S CODE APPENDIX 4 – General subroutine format

APPENDIX 4 – General user’s subroutine format with material


laws 29, 30, 31

1. Starter format (example)


SUBROUTINE LECM29(IIN ,IOUT ,UPARAM ,MAXUPARAM,NUPARAM, Standarized headers:
. NUVAR,IFUNC,MAXFUNC,NFUNC ,PARMAT) User’s arguments list
C (read, written or read/written)
C-----------------------------------------------
C Dummy Arguments Arguments definition (size, type)
C-----------------------------------------------
INTEGER IIN,IOUT,MAXUPARAM,NUPARAM,NUVAR,MAXFUNC,NFUNC, Used in communications between
. IFUNC(MAXFUNC)
RADIOSS database and user’s
DOUBLE PRECISION UPARAM(MAXUPARAM),PARMAT(*)
subroutines
C
C-----------------------------------------------
C Local Variables
C-----------------------------------------------
Local variables definition
DOUBLE PRECISION E,NU,G,A11 Used in current user’s subroutine
C
C-----------------------------------------------
C U s e r’ s D a t a R e a d i n g
C----------------------------------------------- Read input user’s data specified
READ(IIN,'(2F16.0)')E,NU in RADIOSS starter input file
A11 = E * (1.-NU) / (1.+NU) / (1.-2.*NU) (user’s options: /MAT/USER1/)
A12 = E * NU / (1.+NU) / (1.-2.*NU)
C
C-----------------------------------------------
C Check
C-----------------------------------------------
IF(NU.LT.0.0.OR.NU.GE.0.5)THEN Write message
WRITE(IOUT,*)' ** ERROR : WRONG NU VALUE'
ENDIF
C
C-----------------------------------------------
C U s e r’s A r g u m e n e n t s D e f i n i t i o n
C-----------------------------------------------
NUVAR = 2 Store user’s arguments values as
NFUNC = 0 user’s parameters (can be returned
NUPARAM = 3 by a restore function in the engine
UPARAM(1) = E user’s subroutine)
UPARAM(2) = A11
UPARAM(3) = A12
C
C-------------------------------------------------
C Output File Print
C-------------------------------------------------
WRITE(IOUT,1000)
WRITE(IOUT,1100)E,NU
1000 FORMAT( User’s values print in starter
& 5X,' MATERIAL LAW 29',/, listing
1100 FORMAT(
& 5X,'E . . . . . . . . . . . . . . . . . . .=',E12.4/
& 5X,'NU. . . . . . . . . . . . . . . . . . .=',E12.4//)
C

October, 2011 139


RADIOSS USER’S CODE APPENDIX 4 – General subroutine format

RETURN
END
2. Engine format (example)

SUBROUTINE SIGEPS29C(
1 NEL ,NUPARAM,NUVAR ,NFUNC ,IFUNC ,
2 NPF ,NPT ,IPT ,IFLAG ,
2 TF ,TIME ,TIMESTEP,UPARAM ,RHO0 ,
3 AREA ,EINT ,THKLY ,
4 EPSPXX ,EPSPYY ,EPSPXY ,EPSPYZ ,EPSPZX , Standarized headers:
5 DEPSXX ,DEPSYY ,DEPSXY ,DEPSYZ ,DEPSZX , User’s arguments list
6 EPSXX ,EPSYY ,EPSXY ,EPSYZ ,EPSZX , (read, written or read/written)
7 SIGOXX ,SIGOYY ,SIGOXY ,SIGOYZ ,SIGOZX ,
8 SIGNXX ,SIGNYY ,SIGNXY ,SIGNYZ ,SIGNZX ,
9 SIGVXX ,SIGVYY ,SIGVXY ,SIGVYZ ,SIGVZX ,
A SOUNDSP,VISCMAX,THK ,PLA ,UVAR ,
B OFF ,NGL ,SHF)
C
C-----------------------------------------------
C INPUT Arguments
C-----------------------------------------------
Input arguments definition.
INTEGER NEL,NUPARAM,NUVAR
DOUBLE PRECISION UPARAM(NUPARAM),
Used in current routine (user’s
. DEPSXX(NEL),DEPSYY(NEL), program)
. SIGOXX(NEL),SIGOYY(NEL)
C
C-----------------------------------------------
C OUTPUT Arguments
C----------------------------------------------- Output arguments definition.
DOUBLE PRECISION SIGNXX(NEL),SIGNYY(NEL) Computed in current routine
C
C-----------------------------------------------
C INPUT OUTPUT Arguments User’s variable definition.
C----------------------------------------------- Used in communications between
DOUBLE PRECISION UVAR(NEL,NUVAR) user’s subroutines.
C
C-----------------------------------------------
C Local Variables
C----------------------------------------------- Local variables definition
INTEGER I Used in current user’s subroutine
DOUBLE PRECISION A1,A2
C
C-----------------------------------------------
C U s e r ’s P r o g r a m
C----------------------------------------------- User’s program (on elements: NEL)
DO I=1,NEL Read input arguments and write
A1 = UPARAM(2) output arguments
A2 = UPARAM(3)
SIGNXX(I)=SIGOXX(I)+A1*DEPSXX(I)+A2*DEPSYY(I) The user’s variables UVAR can be saved
SIGNYY(I)=SIGOYY(I)+A2*DEPSXX(I)+A1*DEPSYY(I) in animations file:
UVAR(I,1) = SIGNXX(I) UVAR(I,1) saved as User Var 1 in animations
UVAR(I,2) = SIGNYY(I)
using /ANIM/ELEM/USER1 option in D01.
ENDDO
C
RETURN
END

October, 2011 140


RADIOSS USER’S CODE APPENDIX 4 – General subroutine format

APPENDIX 5 – General user’s subroutine format with extended


user material laws

1. Starter format (example)


SUBROUTINE LECMUSERnn(IIN ,IOUT ,UPARAM ,MAXUPARAM,NUPARAM, Standarized headers:
.NUVAR,IFUNC,MAXFUNC,NFUNC ,PARMAT) User’s arguments list
C (read, written or read/written)
C-----------------------------------------------
C Dummy Arguments Arguments definition (size, type)
C-----------------------------------------------
INTEGER IIN,IOUT,MAXUPARAM,NUPARAM,NUVAR,MAXFUNC,NFUNC, Used in communications between
. IFUNC(MAXFUNC)
RADIOSS database and user’s
DOUBLE PRECISION UPARAM(MAXUPARAM),PARMAT(*)
subroutines
C
C-----------------------------------------------
C Local Variables
C-----------------------------------------------
Local variables definition
DOUBLE PRECISION E,NU,G,A11 Used in current user’s subroutine
C
C-----------------------------------------------
C U s e r’ s D a t a R e a d i n g
C----------------------------------------------- Read input user’s data specified
READ(IIN,'(2F16.0)')E,NU in RADIOSS starter input file
A11 = E * (1.-NU) / (1.+NU) / (1.-2.*NU) (user’s options: /MAT/USER1/)
A12 = E * NU / (1.+NU) / (1.-2.*NU)
C
C-----------------------------------------------
C Check
C-----------------------------------------------
IF(NU.LT.0.0.OR.NU.GE.0.5)THEN Write message
WRITE(IOUT,*)' ** ERROR : WRONG NU VALUE'
ENDIF
C
C-----------------------------------------------
C U s e r’s A r g u m e n e n t s D e f i n i t i o n
C-----------------------------------------------
NUVAR = 2 Store user’s arguments values as
NFUNC = 0 user’s parameters (can be returned
NUPARAM = 3 by a restore function in the engine
UPARAM(1) = E user’s subroutine)
UPARAM(2) = A11
UPARAM(3) = A12
C
C-------------------------------------------------
C Output File Print
C-------------------------------------------------
WRITE(IOUT,1000)
WRITE(IOUT,1100)E,NU
1000 FORMAT( User’s values print in starter
& 5X,' MATERIAL LAW 12',/, listing
1100 FORMAT(
& 5X,'E . . . . . . . . . . . . . . . . . . .=',E12.4/
& 5X,'NU. . . . . . . . . . . . . . . . . . .=',E12.4//)C
RETURN
END

October, 2011 141


RADIOSS USER’S CODE APPENDIX 4 – General subroutine format

2. Engine format (example)

SUBROUTINE LUSERnnC(
1 NEL ,NUPARAM,NUVAR ,NFUNC ,IFUNC ,
2 NPF ,NGL
2 TF ,TIME ,TIMESTEP,UPARAM ,RHO0 ,
3 AREA ,EINT ,SHF ,
4 SOUNDSP,VISCMAX ,PLA ,UVAR , Standarized headers:
5 OFF ,SIGY ,USERBUF) User’s arguments list
C (read, written or read/written)
C-----------------------------------------------
C INPUT Arguments
C-----------------------------------------------
Input arguments definition.
INTEGER NEL,NUPARAM,NUVAR
DOUBLE PRECISION UPARAM(NUPARAM),
Used in current routine (user’s
. DEPSXX(NEL),DEPSYY(NEL), program)
. SIGOXX(NEL),SIGOYY(NEL)
C
C-----------------------------------------------
C OUTPUT Arguments
C----------------------------------------------- Output arguments definition.
DOUBLE PRECISION SIGNXX(NEL),SIGNYY(NEL) Computed in current routine
C
C-----------------------------------------------
C INPUT OUTPUT Arguments User’s variable definition.
C----------------------------------------------- Used in communications between
DOUBLE PRECISION UVAR(NEL,NUVAR) user’s subroutines.
C
C-----------------------------------------------
C Local Variables
C----------------------------------------------- Local variables definition
INTEGER I Used in current user’s subroutine
DOUBLE PRECISION A1,A2
C
C-----------------------------------------------
C U s e r ’s P r o g r a m
C----------------------------------------------- User’s program (on elements: NEL)
DO I=1,NEL Read input arguments and write
A1 = UPARAM(2) output arguments
A2 = UPARAM(3)
SIGNXX(I)=SIGOXX(I)+A1*DEPSXX(I)+A2*DEPSYY(I) The user’s variables UVAR can be saved
SIGNYY(I)=SIGOYY(I)+A2*DEPSXX(I)+A1*DEPSYY(I) in animations file:
UVAR(I,1) = SIGNXX(I) UVAR(I,1) saved as User Var 1 in animations
UVAR(I,2) = SIGNYY(I)
using /ANIM/ELEM/USER1 option in
ENDDO
0001.rad.
C
RETURN
END

October, 2011 142

Anda mungkin juga menyukai