35 1 NEL ,IOUT ,IPROP ,UVAR ,NUVAR ,
36 2 FX ,FY ,FZ ,XMOM ,YMOM ,
37 3 ZMOM ,E ,OFF ,STIFM ,STIFR ,
38 4 VISCM ,VISCR ,MASS ,XINER ,DT ,
39 5 XL ,VX ,RY1 ,RZ1 ,RX ,
116#include "implicit_f.inc"
120 INTEGER IOUT,NEL,NUVAR,IPROP,
121 . GET_U_PNU,GET_U_PID,GET_U_MID,GET_U_MNU,
125 . FX(*), FY(*), FZ(*), E(*), VX(*),MASS(*) ,XINER(*),
126 . ry1(*), rz1(*), off(*), xmom(*), ymom(*),
127 . zmom(*), rx(*), ry2(*), rz2(*),xl(*),
128 . stifm(*) ,stifr(*) , viscm(*) ,viscr(*) ,fr_wave(*) ,
129 . get_u_mat, get_u_geo, get_u_func
130 EXTERNAL get_u_mnu,get_u_pnu,get_u_mid,get_u_pid,
131 . get_u_mat,get_u_geo, get_u_func
138 INTEGER I,IFUNC1,IFUNC2,IFUNC3,IFUNC4,ILOAD
140 . elastif,x,dxdy,xlim1,xlim2,fmx,fmn,dx,amas,d1,d2,fscal
143 amas = get_u_geo(1,iprop)
144 elastif= get_u_geo(2,iprop)
145 xlim1 = get_u_geo(3,iprop)
146 xlim2 = get_u_geo(4,iprop)
147 d1 = get_u_geo(5,iprop)
148 d2 = get_u_geo(6,iprop)
149 fscal = get_u_geo(8,iprop)
150 iload = nint(get_u_geo(7,iprop))
151 ifunc1= get_u_pnu(1,iprop,kfunc)
152 ifunc2= get_u_pnu(2,iprop,kfunc)
153 ifunc3= get_u_pnu(3,iprop,kfunc)
154 ifunc4= get_u_pnu(4,iprop,kfunc
158 dx = dt * vx(i) / xl(i)
161 IF (uvar(3,i) == zero)
THEN
162 fmx = fscal*get_u_func(ifunc1,x,dxdy)
163 fmn = fscal*get_u_func(ifunc2,x,dxdy)
165 fmx = uvar(2,i)*fscal*get_u_func(ifunc3,x,dxdy)
166 fmn = uvar(2,i)*fscal*get_u_func(ifunc4,x,dxdy)
169 IF (uvar(3,i) >= one)
THEN
173 IF (iload == 0 .OR. dx > zero) uvar(2,i)=uvar(2,i)*(one-d1)
174 ELSEIF (fr_wave(i) == one)
THEN
175 IF (iload == 0 .OR. dx > zero) uvar(3,i)=uvar(3,i)+d2
181 IF (uvar(3,i) >= one .AND. off(i) == one)
THEN
183 WRITE(iout,*)
'SPRING',i,
'REACHES LIMIT IN X : ',x
191 fx(i) = fx(i) + elastif * dx * uvar(2,i)
192 fx(i) =
min(fx(i),fmx)
193 fx(i) =
max(fx(i),fmn)
194 fx(i) = fx(i) * off(i)
198 stifm(i) = elastif / xl(i)
subroutine ruser35(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)