OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
ruser46.F File Reference
#include "implicit_f.inc"

Go to the source code of this file.

Functions/Subroutines

subroutine ruser46 (nel, iout, iprop, uvar, nuvar, fx, fy, fz, xmom, ymom, zmom, e, off, stifm, stifr, viscm, viscr, mass, xiner, dt, xl, vx, ry1, rz1, rx, ry2, rz2, fr_wave)

Function/Subroutine Documentation

◆ ruser46()

subroutine ruser46 ( integer nel,
integer iout,
integer iprop,
uvar,
integer nuvar,
fx,
fy,
fz,
xmom,
ymom,
zmom,
e,
off,
stifm,
stifr,
viscm,
viscr,
mass,
xiner,
dt,
xl,
vx,
ry1,
rz1,
rx,
ry2,
rz2,
fr_wave )

Definition at line 35 of file ruser46.F.

41C-------------------------------------------------------------------------
42C This subroutine compute springs forces and moments.
43C-------------------------------------------------------------------------
44C----------+---------+---+---+--------------------------------------------
45C VAR | SIZE |TYP| RW| DEFINITION
46C----------+---------+---+---+--------------------------------------------
47C IOUT | 1 | I | R | OUTPUT FILE UNIT (L00 file)
48C IPROP | 1 | I | R | PROPERTY NUMBER
49C----------+---------+---+---+--------------------------------------------
50C XL | NEL | F | R | ELEMENT LENGTH
51C----------+---------+---+---+--------------------------------------------
52C UVAR |NUVAR*NEL| F |R/W| USER ELEMENT VARIABLES
53C NUVAR | 1 | I | R | NUMBER OF USER ELEMENT VARIABLES
54C----------+---------+---+---+--------------------------------------------
55C The user routine does not need to return elements mass in vector MASS :
56C this vector is not used by RADIOSS since version 4.1E.
57C The mass which is used by RADIOSS for time step (and output) is the
58C initial mass which was returned by user routine RINI29 into starter.
59C-------------------------------------------------------------------------
60C FUNCTION
61C-------------------------------------------------------------------------
62C INTEGER II = GET_U_PNU(I,IP,KK)
63C IFUNCI = GET_U_PNU(I,IP,KFUNC)
64C IPROPI = GET_U_PNU(I,IP,KFUNC)
65C IMATI = GET_U_PNU(I,IP,KMAT)
66C I : VARIABLE INDEX(1 for first variable,...)
67C IP : PROPERTY NUMBER
68C KK : PARAMETER KFUNC,KMAT,KPROP
69C THIS FUNCTION RETURN THE USER STORED FUNCTION(IF KK=KFUNC),
70C MATERIAL(IF KK=KMAT) OR PROPERTY(IF KK=KPROP) NUMBER.
71C SEE LECG29 FOR CORRESPONDING ID STORAGE.
72C-------------------------------------------------------------------------
73C INTEGER IFUNCI = GET_U_MNU(I,IM,KFUNC)
74C I : VARIABLE INDEX(1 for first function)
75C IM : MATERIAL NUMBER
76C KFUNC : ONLY FUNCTION ARE YET AVAILABLE.
77C THIS FUNCTION RETURN THE USER STORED FUNCTION NUMBER(function
78C referred by users materials).
79C SEE LECM29 FOR CORRESPONDING ID STORAGE.
80C-------------------------------------------------------------------------
81C my_real PARAMI = GET_U_GEO(I,IP)
82C I : PARAMETER INDEX(1 for first parameter,...)
83C IP : PROPERTY NUMBER
84C THIS FUNCTION RETURN THE USER GEOMETRY PARAMETERS
85C NOTE: IF(IP==IPROP) UPARAG(I) == GET_U_GEO(I,IPROP)
86C see lecg30 for storage
87C-------------------------------------------------------------------------
88C my_real PARAMI = GET_U_MAT(I,IM)
89C I : PARAMETER INDEX(1 for first parameter,...)
90C IM : MATERIAL NUMBER
91C THIS FUNCTION RETURN THE USER MATERIAL PARAMETERS
92C NOTE: GET_U_MAT(0,IMAT) RETURN THE DENSITY
93C see lecm29,30,31 for storage
94C-------------------------------------------------------------------------
95C INTEGER PID = GET_U_PID(IP)
96C IP : PROPERTY NUMBER
97C THIS FUNCTION RETURN THE USER PROPERTY ID CORRESPONDING TO
98C USER PROPERTY NUMBER IP.
99C-------------------------------------------------------------------------
100C INTEGER MID = GET_U_MID(IM)
101C IM : MATERIAL NUMBER
102C THIS FUNCTION RETURN THE USER MATERIAL ID CORRESPONDING TO
103C USER MATERIAL NUMBER IM.
104C-------------------------------------------------------------------------
105C my_real Y = GET_U_FUNC(IFUNC,X,DXDY)
106C IFUNC : function number obtained by
107C IFUNC = GET_U_MNU(I,IM,KFUNC) or IFUNC = GET_U_PNU(I,IP,KFUNC)
108C X : X value
109C DXDY : slope dX/dY
110C THIS FUNCTION RETURN Y(X)
111C-------------------------------------------------------------------------
112C-----------------------------------------------
113C I m p l i c i t T y p e s
114C-----------------------------------------------
115#include "implicit_f.inc"
116C----------------------------------------------------------
117C 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
118C----------------------------------------------------------
119 INTEGER IOUT,NEL,NUVAR,IPROP,
120 . GET_U_PNU,GET_U_PID,GET_U_MID,GET_U_MNU,
121 . KFUNC,KMAT,KPROP
122 my_real
123 . uvar(nuvar,*),dt ,
124 . fx(*), fy(*), fz(*), e(*), vx(*),mass(*) ,xiner(*),
125 . ry1(*), rz1(*), off(*), xmom(*), ymom(*),
126 . zmom(*), rx(*), ry2(*), rz2(*),xl(*),
127 . stifm(*) ,stifr(*) , viscm(*) ,viscr(*) ,fr_wave(*) ,
128 . get_u_mat, get_u_geo, get_u_func, get_u_time
130 . get_u_mat,get_u_geo, get_u_func, get_u_time
131 parameter(kfunc=29)
132! PARAMETER (KMAT=31)
133! PARAMETER (KPROP=33)
134C=======================================================================
135C
136C EXAMPLE 2 : Elastoplastic truss defined with 1 user property.
137C
138C
139C=======================================================================
140C-----------------------------------------------
141C L o c a l V a r i a b l e s
142C-----------------------------------------------
143 INTEGER I,IFUNC1,IFUNC2,IFUNC3,IFUNC4,IFUNC5,EPSI
144 my_real
145 . elastif,x,dxdy,xlim1,xlim2,fmx,fmn,dx,damp,
146 . fux1,fux2,fux3,fux4,debug,slope
147 my_real
148 . tt,newlen,deltalen,deltalendot,scalet,scalex,scalev,scalef
149C-----------------------------------------------
150C
151 elastif= get_u_geo(2,iprop)
152 xlim1 = get_u_geo(3,iprop) !vmax
153 xlim2 = get_u_geo(4,iprop) !fmax
154 damp = get_u_geo(6,iprop)
155 scalet = get_u_geo(8,iprop)
156 scalex = get_u_geo(9,iprop)
157 scalev = get_u_geo(10,iprop)
158 scalef = get_u_geo(11,iprop)
159
160 epsi = int(get_u_geo(7,iprop))
161 ifunc1= get_u_pnu(1,iprop,kfunc)
162 ifunc2= get_u_pnu(2,iprop,kfunc)
163 ifunc3= get_u_pnu(3,iprop,kfunc)
164 ifunc4= get_u_pnu(4,iprop,kfunc)
165 ifunc5= get_u_pnu(5,iprop,kfunc)
166C
167 tt= get_u_time()
168 tt = tt / scalet
169C
170 deltalendot = zero
171C
172C DEBUG = GET_U_FUNC(IFUNC5,TT,DXDY)
173C Loop over elements
174 DO i=1,nel
175 dx = dt * vx(i)
176 x = uvar(1,i) + dx
177 uvar(1,i) = x
178 newlen = uvar(3,i) + uvar(1,i)!UVAR(3,I)=initial length of the spring at time=0
179C
180 IF (epsi == 0) THEN
181 deltalen = newlen/uvar(3,i) - one
182 IF (dt == zero) THEN
183 deltalen = zero
184 ELSE
185 deltalendot = newlen/uvar(3,i)*vx(i)/xlim1
186 ENDIF
187 ELSE
188 deltalen = x
189 deltalendot = vx(i)
190 ENDIF
191C
192C Active force vs. time
193 fux1 = get_u_func(ifunc1,tt,dxdy)
194C Active force vs. elongation
195 IF(epsi/= 0)deltalen = deltalen / scalex
196 fux2 = get_u_func(ifunc2,deltalen,dxdy)
197C Active force vs. velocity
198C FUX3 = GET_U_FUNC(IFUNC3,VX(I),DXDY)
199 deltalendot = deltalendot / scalev
200 fux3 = get_u_func(ifunc3,deltalendot,dxdy)
201C Passive force vs. elongation
202 fux4 = get_u_func(ifunc4,deltalen,dxdy)
203 fux4 = fux4 * scalef
204C Check if velocity > limit1 ...if YES, then use XLIM1 = max_vel
205C Sum FX + damping*velocity
206 IF (vx(i)>xlim1)THEN
207 fx(i) = xlim2 * fux1 * fux2 * fux3 + fux4 + damp*xlim1
208 ELSEIF (vx(i)<-xlim1)THEN
209 fx(i) = xlim2 * fux1 * fux2 * fux3 + fux4 - damp*xlim1
210 ELSE
211 fx(i) = xlim2 * fux1 * fux2 * fux3 + fux4 + damp*vx(i)
212 ENDIF
213C
214C *** TIMESTEP ***
215C=======================================================================
216C TIME STEP
217C=======================================================================
218C STIFM(I) = ELASTIF / XL(I)
219 IF(deltalen /= zero)THEN
220 slope = abs(fx(i)-uvar(4,i))/abs(dx)
221C WRITE(IOUT,*) 'Slope: FR_WAVE = ZERO'
222 ELSE
223 slope = elastif
224 ENDIF
225C
226
227C
228 stifm(i) = slope
229 stifr(i) = zero
230 viscm(i) = zero
231 viscr(i) = zero
232 xiner(i) = zero
233 uvar(4,i)= fx(i)
234 ENDDO
235C-------------------------------
236 RETURN
#define my_real
Definition cppsort.cpp:32
integer function get_u_pid(ip)
Definition uaccess.F:626
integer function get_u_pnu(ivar, ip, k)
Definition uaccess.F:482
integer function get_u_mid(im)
Definition uaccess.F:668
integer function get_u_mnu(ivar, im, k)
Definition uaccess.F:565