38 1 NEL ,IOUT ,IPROP ,UVAR ,NUVAR ,
39 2 FX ,FY ,FZ ,XMOM ,YMOM ,
40 3 ZMOM ,E ,OFF ,STIFM ,STIFR ,
41 4 VISCM ,VISCR ,MASS ,XINER ,DT ,
42 5 XL ,VX ,RY1 ,RZ1 ,RX ,
43 6 RY2 ,RZ2 ,FR_WAVE,NSENSOR,SENSOR_TAB)
121#include "implicit_f.inc"
122#include "impl1_c.inc"
123#include "com04_c.inc"
127 INTEGER IOUT,NEL,NUVAR,IPROP,NSENSOR,
128 . GET_U_PNU,GET_U_PID,GET_U_MID,GET_U_MNU,
132 . FX(*), FY(*), FZ(*), E(*), VX(*),MASS(*) ,XINER(*),
133 . ry1(*), rz1(*), off(*), xmom(*), ymom(*),
134 . zmom(*), rx(*), ry2(*), rz2(*),xl(*),
135 . stifm(*) ,stifr(*) , viscm(*) ,viscr(*) ,fr_wave(*) ,
136 . get_u_mat, get_u_geo, get_u_func, get_u_sens
137 EXTERNAL get_u_mnu,get_u_pnu,get_u_mid,get_u_pid,
138 . get_u_mat,get_u_geo, get_u_func
142 TYPE (SENSOR_STR_) ,
DIMENSION(NSENSOR) :: SENSOR_TAB
146 INTEGER I,IFUNC1,IFUNC2,ISENS,ITYP,IACT,ILOCK
148 . stif0,stif1,
dscal,fscal,tscal,x,dxdy,dx,tacti,f0,ff,d1,
151 stif0 = get_u_geo(2,iprop)
152 stif1 = get_u_geo(3,iprop)
153 tscal = get_u_geo(7,iprop)
154 dscal = get_u_geo(8,iprop)
155 fscal = get_u_geo(9,iprop)
156 d1 = get_u_geo(11,iprop)
157 isens = nint(get_u_geo(5,iprop))
158 ityp = nint(get_u_geo(6,iprop))
159 ilock = nint(get_u_geo(10,iprop))
160 tacti = get_u_sens(isens)
162 IF (tacti == zero .AND. isens /= zero)
THEN
165 IF (uvar(2,i) == one)
THEN
168 fx(i) = fx(i) + stif0 * dt * vx(i)
175 IF (uvar(2,i) == zero)
THEN
179 uvar(1,i) = uvar(1,i) + dt * vx(i)
180 fx(i) = fx(i) + stif0 * dt * vx(i)
187 ELSEIF (ityp == 1)
THEN
188 f0 = get_u_geo(4,iprop)
192 IF (fx(i) > ff .AND. ilock == 2) uvar(3,i) = one
193 IF (ff > zero .AND. uvar(3,i) == zero)
THEN
194 fx(i) =
max(ff,fx(i))
195 IF (impl_s > zero)
THEN
196 ff2 = f0 + stif1 * (x-dt * vx(i))
198 uvar(4,i) =
min(stif0,stif1)
203 ELSEIF (ityp == 2)
THEN
204 ifunc1 = get_u_pnu(1,iprop,kfunc)
207 ff = fscal*get_u_func(ifunc1,x*
dscal,dxdy)
208 IF (x < d1 .AND. d1 /= zero) uvar(3,i) = one
209 IF (fx(i) > ff .AND. ilock == 2) uvar(3,i) = one
210 IF (ff > zero .AND. uvar(3,i) == zero)
THEN
211 fx(i) =
max(ff,fx(i))
212 IF (impl_s > zero)
THEN
213 ff2 = fscal*get_u_func(ifunc1,(x-dt * vx(i))*
dscal,dxdy2)
215 uvar(4,i) =
min(stif0,abs(dxdy))
220 ELSEIF (ityp == 3)
THEN
221 ifunc2 = get_u_pnu(2,iprop,kfunc)
222 f0 = fscal*get_u_func(ifunc2,tacti*tscal,dxdy)
225 IF (x < d1 .AND. d1 /= zero) uvar(3,i) = one
226 IF (fx(i) > f0 .AND. ilock == 2) uvar(3,i) = one
227 IF (f0 > zero .AND. uvar(3,i) == zero)
THEN
228 fx(i) =
max(f0,fx(i))
231 ELSEIF (ityp == 4)
THEN
232 ifunc1 = get_u_pnu(1,iprop,kfunc)
233 ifunc2 = get_u_pnu(2,iprop,kfunc)
234 f0 = fscal*get_u_func(ifunc2,tacti*tscal,dxdy)
237 ff = f0*get_u_func(ifunc1,x*
dscal,dxdy)
238 IF (x < d1 .AND. d1 /= zero) uvar(3,i) = one
239 IF (fx(i) > ff .AND. ilock == 2) uvar(3,i) = one
240 IF (ff > zero .AND. uvar(3,i) == zero)
THEN
241 fx(i) =
max(ff,fx(i))
242 IF (impl_s > zero)
THEN
243 ff2 = get_u_func(ifunc1,(x-dt * vx(i))*
dscal,dxdy2)
245 uvar(4,i) =
min(stif0,abs(dxdy))
subroutine ruser32(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, nsensor, sensor_tab)