35 SUBROUTINE ruser44(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 ,
40 6 RY2 ,RZ2 ,FR_WAVE_E)
105#include "implicit_f.inc"
109 INTEGER ,NEL,NUVAR,IPROP,ICO,
110 . GET_U_PNU,GET_U_PID,GET_U_MID,GET_U_MNU,
114 . fx(*), fy(*), fz(*), e(*), vx(*),mass(*) ,xiner(*),
115 . ry1(*), rz1(*), off(*), xmom(*), ymom(*),
116 . zmom(*), rx(*), ry2(*), rz2(*),xl(*),
117 . stifm(*) ,stifr(*) , viscm(*) ,viscr(*) ,fr_wave_e(*) ,
118 . get_u_mat, get_u_geo, get_u_func
119 EXTERNAL get_u_mnu,get_u_pnu
120 . get_u_mat,get_u_geo, get_u_func
127 INTEGER ,ID1,ID2,ID10,ID20,
128 . ifun_xp,ifun_xmi,ifun_xxpi,ifun_xxmi,ifun_yy1pi,
129 . ifun_yy1mi,ifun_yy2pi,ifun_yy2mi,ifun_zz1pi,
130 . ifun_zz1mi,ifun_zz2pi,ifun_zz2mi,
131 . ifun_xmr,ifun_xxpr,ifun_xxmr,ifun_yy1pr,
132 . ifun_yy1mr,ifun_yy2pr,ifun_yy2mr,ifun_zz1pr,
133 . ifun_zz1mr,ifun_zz2pr,ifun_zz2mr,
134 . ifun_damp_xi,ifun_damp_yi,ifun_damp_zi,
135 . ifun_damp_xxi,ifun_damp_yyi,ifun_damp_zzi
136 INTEGER (NEL),IFUNXXM(NEL),IFUNYY1M(NEL),
137 . IFUNZZ1M(NEL),IFUNYY2M(NEL),IFUNZZ2M(NEL),
138 . IFUNXP(NEL),(NEL),IFUNYY1P(NEL),
139 . IFUNZZ1P(NEL),IFUNYY2P(NEL),IFUNZZ2P(NEL),
140 . JPOSXM(NEL),JPOSXXM(NEL),JPOSYY1M(NEL),
141 . jposzz1m(nel),jposyy2m(nel),jposzz2m(nel),
142 . jposxp(nel),jposxxp(nel),jposyy1p(nel),
143 . jposzz1p(nel),jposyy2p(nel),jposzz2p(nel),
144 . jpos_damp_x(nel),jpos_damp_y(nel),jpos_damp_z(nel),
145 . jpos_damp_xx(nel),jpos_damp_yy(nel),jpos_damp_zz(nel),
146 . ifun_damp_x(nel),ifun_damp_y(nel),ifun_damp_z(nel),
147 . ifun_damp_xx(nel),ifun_damp_yy(nel),ifun_damp_zz(nel)
149 . xlimg,xlim,xxlim,yy1lim,yy2lim,zz1lim,zz2lim,
150 . k11,k44,k55,k66,k5b,k6c,leng2,leng,uleng0,r,ax,ay,az,
151 . fscal_x,fscal_rx,fscal_ry1,fscal_ry2,fscal_rz1,fscal_rz2,
152 . a,b,d,ff1,ff2,r1,mm,ff
153 . fscal_damp_z,fscal_damp_xx,fscal_damp_yy,
154 . fscal_damp_zz,f_x,f_y,f_z,f_xx,f_yy,f_zz,
alpha,ncf,
156 my_real ,
DIMENSION(NEL) ::
157 . dydx,x,fxm,fxp,xx,fxxm,fxxp,yy1,fyy1m,fyy1p,
158 . zz1,fzz1m,fzz1p,yy2,fyy2m,fyy2p,zz2,fzz2m,fzz2p,
159 . uleng,my1,my2,mz1,mz2,fx_damp,fy_damp,fz_damp,
160 . fxx_damp,fyy_damp,fzz_damp,xdot,xxdot,yy1dot,zz1dot,yy2dot,zz2dot,
161 . xdot_old,xxdot_old,yy1dot_old,zz1dot_old,yy2dot_old,zz2dot_old,
162 . elodotx,elodoty,elodotz,elodotxx,elodotyy,elodotzz
164 xlimg = get_u_geo(1,iprop)
165 xlim = get_u_geo(2,iprop)
166 xxlim = get_u_geo(3,iprop)
167 yy1lim = get_u_geo(4,iprop)
168 zz1lim = get_u_geo(5,iprop)
169 yy2lim = get_u_geo(6,iprop)
170 zz2lim = get_u_geo(7,iprop)
171 ico = nint(get_u_geo(16,iprop))
172 fscal_x = get_u_geo(17,iprop)
173 fscal_rx = get_u_geo(18,iprop)
174 fscal_ry1 = get_u_geo(19,iprop)
175 fscal_ry2 = get_u_geo(20,iprop)
176 fscal_rz1 = get_u_geo(21,iprop)
177 fscal_rz2 = get_u_geo(22,iprop)
179 ifun_xmi = get_u_pnu(1,iprop,kfunc)
180 ifun_xxmi = get_u_pnu(2,iprop,kfunc)
181 ifun_yy1mi= get_u_pnu(3,iprop,kfunc)
182 ifun_zz1mi= get_u_pnu(4,iprop,kfunc)
183 ifun_yy2mi= get_u_pnu(5,iprop,kfunc)
184 ifun_zz2mi= get_u_pnu(6,iprop,kfunc)
185 ifun_xp = get_u_pnu(7,iprop,kfunc)
186 ifun_xxpi = get_u_pnu(8,iprop,kfunc)
187 ifun_yy1pi= get_u_pnu(9,iprop,kfunc)
188 ifun_zz1pi= get_u_pnu(10,iprop,kfunc)
189 ifun_yy2pi= get_u_pnu(11,iprop,kfunc)
190 ifun_zz2pi= get_u_pnu(12,iprop,kfunc)
191 ifun_xmr = get_u_pnu(13,iprop,kfunc)
192 ifun_xxmr = get_u_pnu(14,iprop,kfunc)
193 ifun_yy1mr= get_u_pnu(15,iprop,kfunc)
194 ifun_zz1mr= get_u_pnu(16,iprop,kfunc)
195 ifun_yy2mr= get_u_pnu(17,iprop,kfunc)
196 ifun_zz2mr= get_u_pnu(18,iprop,kfunc)
197 ifun_xxpr = get_u_pnu(19,iprop,kfunc)
198 ifun_yy1pr= get_u_pnu(20,iprop,kfunc)
199 ifun_zz1pr= get_u_pnu(21,iprop,kfunc)
200 ifun_yy2pr= get_u_pnu(22,iprop,kfunc)
201 ifun_zz2pr= get_u_pnu(23,iprop,kfunc)
204 ncf = get_u_geo(35,iprop)
206 idamping = get_u_geo(36,iprop)
210 IF (idamping > zero)
THEN
211 ifun_damp_xi = get_u_pnu(24,iprop,kfunc)
212 ifun_damp_yi = get_u_pnu(25,iprop,kfunc)
213 ifun_damp_zi = get_u_pnu(26,iprop,kfunc)
214 ifun_damp_xxi = get_u_pnu(27,iprop,kfunc)
215 ifun_damp_yyi = get_u_pnu(28,iprop,kfunc)
216 ifun_damp_zzi = get_u_pnu(29,iprop,kfunc)
218 fscal_damp_x = get_u_geo(23,iprop)
219 fscal_damp_y = get_u_geo(24,iprop)
220 fscal_damp_z = get_u_geo(25,iprop)
221 fscal_damp_xx = get_u_geo(26,iprop)
222 fscal_damp_yy = get_u_geo(27,iprop)
223 fscal_damp_zz = get_u_geo(28,iprop)
225 f_x = get_u_geo(29,iprop)
226 f_y = get_u_geo(30,iprop)
227 f_z = get_u_geo(31,iprop)
228 f_xx = get_u_geo(32,iprop)
229 f_yy = get_u_geo(33,iprop)
230 f_zz = get_u_geo(34,iprop)
236 alpha = two/(ncf+one)
239 xdot_old(i) = uvar(37,i)
240 xxdot_old(i) = uvar(38,i)
241 yy1dot_old(i) = uvar(39,i)
242 zz1dot_old(i) = uvar(40,i)
243 yy2dot_old(i) = uvar(41,i)
244 zz2dot_old(i) = uvar(42,i)
249 xdot(i) = vx(i) * uleng0
258 xdot(i) =
alpha * xdot(i) + (one-
alpha) * xdot_old(i)
259 xxdot(i) =
alpha * xxdot(i) + (one-
alpha) * xxdot_old(i)
260 yy1dot(i) =
alpha * yy1dot(i) + (one-
alpha) * yy1dot_old(i)
261 zz1dot(i) =
alpha * zz1dot(i) + (one-
alpha) * zz1dot_old(i)
262 yy2dot(i) =
alpha * yy2dot(i) + (one-
alpha) * yy2dot_old(i)
263 zz2dot(i) =
alpha * zz2dot(i) + (one-
alpha) * zz2dot_old(i)
268 uvar(38,i) = xxdot(i)
269 uvar(39,i) = yy1dot(i)
270 uvar(40,i) = zz1dot(i)
271 uvar(41,i) = yy2dot(i)
272 uvar(42,i) = zz2dot(i)
278 x(i) = uvar(1,i) + dt * xdot(i)
279 xx(i) = uvar(2,i) + dt * xxdot(i)
280 yy1(i) = uvar(3,i) + dt * yy1dot(i)
281 zz1(i) = uvar(4,i) + dt * zz1dot(i)
282 yy2(i) = uvar(5,i) + dt * yy2dot(i)
283 zz2(i) = uvar(6,i) + dt * zz2dot(i)
290 my1(i) = -ymom(i)+half*xl(i)*fz(i)
291 my2(i) = ymom(i)+half*xl(i)*fz(i)
292 mz1(i) = -zmom(i)-half*xl(i)*fy(i)
293 mz2(i) = zmom(i)-half*xl(i)*fy(i)
295 leng =
max(xl(i),em20)
301 k55 = uvar(21,i)*leng2
302 k66 = uvar(22,i)*leng2
303 k5b = uvar(23,i)*leng2
304 k6c = uvar(24,i)*leng2
306 fx(i) = fx(i) + dt * k11 * vx(i)
307 xmom(i)= xmom(i)+ dt * k44 * rx(i)
308 my1(i) = my1(i) + dt * (k55 * ry1(i) + k5b * ry2(i))
309 my2(i) = my2(i) + dt * (k5b * ry1(i) + k55 * ry2(i))
310 mz1(i) = mz1(i) + dt * (k66 * rz1(i) + k6c * rz2(i))
311 mz2(i) = mz2(i) + dt * (k6c * rz1(i) + k66 * rz2(i))
315 IF (ncf == zero)
THEN
316 x(i) = uvar(1,i) + dt * vx(i) * uleng0
317 xx(i) = uvar(2,i) + dt * rx(i)
318 yy1(i) = uvar(3,i) + dt * ry1(i)
319 zz1(i) = uvar(4,i) + dt * rz1(i)
320 yy2(i) = uvar(5,i) + dt * ry2(i)
321 zz2(i) = uvar(6,i) + dt * rz2(i)
324 jposxm(i) = nint(uvar(7,i))
325 jposxxm(i) = nint(uvar(8,i))
326 jposyy1m(i) = nint(uvar(9,i))
327 jposzz1m(i) = nint(uvar(10,i))
328 jposyy2m(i) = nint(uvar(11,i))
329 jposzz2m(i) = nint(uvar(12,i))
330 jposxp(i) = nint(uvar(13,i))
331 jposxxp(i) = nint(uvar(14,i))
332 jposyy1p(i) = nint(uvar(15,i))
333 jposzz1p(i) = nint(uvar(16,i))
334 jposyy2p(i) = nint(uvar(17,i))
335 jposzz2p(i) = nint(uvar(18,i))
339 ifunxxm(i) = ifun_xxmi
340 ifunxxp(i) = ifun_xxpi
341 ifunyy1m(i) = ifun_yy1mi
342 ifunyy1p(i) = ifun_yy1pi
343 ifunyy2m(i) = ifun_yy2mi
344 ifunyy2p(i) = ifun_yy2pi
345 ifunzz1m(i) = ifun_zz1mi
346 ifunzz1p(i) = ifun_zz1pi
347 ifunzz2m(i) = ifun_zz2mi
348 ifunzz2p(i) = ifun_zz2pi
352 IF (idamping > zero)
THEN
353 ifun_damp_x(i) = ifun_damp_xi
354 ifun_damp_y(i) = ifun_damp_yi
355 ifun_damp_z(i) = ifun_damp_zi
356 ifun_damp_xx(i) = ifun_damp_xxi
357 ifun_damp_yy(i) = ifun_damp_yyi
358 ifun_damp_zz(i) = ifun_damp_zzi
360 jpos_damp_x(i) = nint(uvar(31,i))
361 jpos_damp_y(i) = nint(uvar(32,i))
362 jpos_damp_z(i) = nint(uvar(33,i))
363 jpos_damp_xx(i) = nint(uvar(34,i))
364 jpos_damp_yy(i) = nint(uvar(35,i))
365 jpos_damp_zz(i) = nint(uvar(36,i))
369 IF (idamping > zero)
THEN
373 elodoty(i) = - half * (rz2(i) + rz1(i)) * xl(i)
374 elodotz(i) = half * (ry2(i) + ry1(i)) * xl(i)
376 elodotyy(i) = ry2(i) - ry1(i)
377 elodotzz(i) = rz2(i) - rz1(i)
384 id1 = nint(uvar(29,i))/2
385 id2 = nint(uvar(29,i)) - 2*id1
388 IF (fr_wave_e(i) == one)
THEN
392 IF (x(i) < xlimg)
THEN
398 IF (x(i) < xlim .OR. abs(xx(i)) > xxlim)
THEN
402 IF (abs(yy1(i)) > yy1lim .OR. abs(zz1(i)) > zz1lim) id1 = 1
403 IF (abs(yy2(i)) > yy2lim .OR. abs(zz2(i)) > zz2lim) id2 = 1
407 ifunxxm(i) = ifun_xxmr
408 ifunxxp(i) = ifun_xxpr
409 ifunyy1m(i) = ifun_yy1mr
410 ifunyy1p(i) = ifun_yy1pr
411 ifunzz1m(i) = ifun_zz1mr
412 ifunzz1p(i) = ifun_zz1pr
425 ifunxxm(i) = ifun_xxmr
426 ifunxxp(i) = ifun_xxpr
427 ifunyy2m(i) = ifun_yy2mr
428 ifunyy2p(i) = ifun_yy2pr
429 ifunzz2m(i) = ifun_zz2mr
430 ifunzz2p(i) = ifun_zz2pr
441 uvar(29,i) = 2*id1 + id2
446 CALL get_v_func(ifunxxm,nel,xx,dydx,fxxm,jposxxm)
447 CALL get_v_func(ifunxxp,nel,xx,dydx,fxxp,jposxxp)
448 CALL get_v_func(ifunyy1m,nel,yy1,dydx,fyy1m,jposyy1m)
449 CALL get_v_func(ifunyy1p,nel,yy1,dydx,fyy1p,jposyy1p)
450 CALL get_v_func(ifunzz1m,nel,zz1,dydx,fzz1m,jposzz1m)
451 CALL get_v_func(ifunzz1p,nel,zz1,dydx,fzz1p,jposzz1p)
452 CALL get_v_func(ifunyy2m,nel,yy2,dydx,fyy2m,jposyy2m)
453 CALL get_v_func(ifunyy2p,nel,yy2,dydx,fyy2p,jposyy2p)
454 CALL get_v_func(ifunzz2m,nel,zz2,dydx,fzz2m,jposzz2m)
455 CALL get_v_func(ifunzz2p,nel,zz2,dydx,fzz2p,jposzz2p)
460 IF (idamping > zero)
THEN
461 IF (ifun_damp_xi > 0)
THEN
463 elodotx(i) = elodotx(i) / f_x
465 CALL get_v_func(ifun_damp_x,nel,elodotx,dydx,fx_damp,jpos_damp_x)
468 IF (ifun_damp_yi > 0)
THEN
470 elodoty(i) = elodoty(i) / f_y
472 CALL get_v_func(ifun_damp_y,nel,elodoty,dydx,fy_damp,jpos_damp_y)
475 IF (ifun_damp_zi > 0)
THEN
477 elodotz(i) = elodotz(i) / f_z
479 CALL get_v_func(ifun_damp_z,nel,elodotz,dydx,fz_damp,jpos_damp_z)
482 IF (ifun_damp_xxi > 0)
THEN
484 elodotxx(i) = elodotxx(i) / f_xx
486 CALL get_v_func(ifun_damp_xx,nel,elodotxx,dydx,fxx_damp,jpos_damp_xx)
489 IF (ifun_damp_yyi > 0)
THEN
491 elodotyy(i) = elodotyy(i) / f_yy
493 CALL get_v_func(ifun_damp_yy,nel,elodotyy,dydx,fyy_damp,jpos_damp_yy)
496 IF (ifun_damp_zzi > 0)
THEN
498 elodotzz(i) = elodotzz(i) / f_zz
500 CALL get_v_func(ifun_damp_zz,nel,elodotzz,dydx,fzz_damp,jpos_damp_zz)
506 fxm(i) = fxm(i) * fscal_x
507 fxxp(i) = fxxp(i) * fscal_rx
509 fyy1m(i) = fyy1m(i)* fscal_ry1
510 fyy1p(i) = fyy1p(i)* fscal_ry1
511 fzz1m(i) = fzz1m(i)* fscal_rz1
512 fzz1p(i) = fzz1p(i)* fscal_rz1
513 fyy2m(i) = fyy2m(i)* fscal_ry2
514 fyy2p(i) = fyy2p(i)* fscal_ry2
515 fzz2m(i) = fzz2m(i)* fscal_rz2
526 uvar(7,i) = jposxm(i)
527 uvar(8,i) = jposxxm(i)
528 uvar(9,i) = jposyy1m(i)
529 uvar(10,i) = jposzz1m(i)
530 uvar(11,i) = jposyy2m(i)
531 uvar(12,i) = jposzz2m(i)
532 uvar(13,i) = jposxp(i)
533 uvar(14,i) = jposxxp(i)
534 uvar(15,i) = jposyy1p(i)
535 uvar(16,i) = jposzz1p(i)
536 uvar(17,i) = jposyy2p(i)
537 uvar(18,i) = jposzz2p(i)
541 IF (idamping > zero)
THEN
542 uvar(31,i) = jpos_damp_x(i)
543 uvar(32,i) = jpos_damp_y(i)
544 uvar(33,i) = jpos_damp_z(i)
545 uvar(34,i) = jpos_damp_xx(i)
546 uvar(35,i) = jpos_damp_yy(i)
547 uvar(36,i) = jpos_damp_zz(i)
550 fx(i) =
max(
min(fx(i) ,fxp(i)),fxm(i) )
551 xmom(i) =
max(
min(xmom(i),fxxp(i)),fxxm(i))
552 my1(i) =
max(
min(my1(i),fyy1p(i)),fyy1m(i))
553 mz1(i) =
max(
min(mz1(i),fzz1p(i)),fzz1m(i))
554 my2(i) =
max(
min(my2(i),fyy2p(i)),fyy2m(i))
555 mz2(i) =
max(
min(mz2(i),fzz2p(i)),fzz2m(i))
556 fz(i) = (my1(i)+my2(i)) * uleng(i)
557 fy(i) = -(mz1(i)+mz2(i)) * uleng(i)
558 ymom(i) = -half*(my1(i)-my2(i))
559 zmom(i) = -half*(mz1(i)-mz2(i))
563 stifm(i) = uvar(25,i)
564 stifr(i) = uvar(26,i)
566 xiner(i) = uvar(28,i)
570 IF (idamping > zero)
THEN
571 IF (ifun_damp_x(i) == 0)
THEN
572 fx(i) = fx(i) + fscal_damp_x * elodotx(i)
574 fx(i) = fx(i) + fscal_damp_x * fx_damp(i)
577 IF (ifun_damp_y(i) == 0)
THEN
578 fy(i) = fy(i) + fscal_damp_y * elodoty(i)
580 fy(i) = fy(i) + fscal_damp_y * fy_damp(i)
583 IF (ifun_damp_z(i) == 0)
THEN
584 fz(i) = fz(i) + fscal_damp_z * elodotz(i)
586 fz(i) = fz(i) + fscal_damp_z * fz_damp(i)
589 IF (ifun_damp_xx(i) == 0)
THEN
590 xmom(i) = xmom(i) + fscal_damp_xx * elodotxx(i)
592 xmom(i) = xmom(i) + fscal_damp_xx * fxx_damp(i)
595 IF (ifun_damp_yy(i) == 0)
THEN
596 ymom(i) = ymom(i) + fscal_damp_yy * elodotyy(i)
598 ymom(i) = ymom(i) + fscal_damp_yy * fyy_damp(i)
601 IF (ifun_damp_zz(i) == 0)
THEN
602 zmom(i) = zmom(i) + fscal_damp_zz * elodotzz(i)
604 zmom(i) = zmom(i) + fscal_damp_zz * fzz_damp(i)
613 id1 = nint(uvar(29,i))/2
614 id2 = nint(uvar(29,i)) - 2*id1
617 IF (fr_wave_e(i) == one)
THEN
621 IF (x(i) < xlimg)
THEN
627 IF (x(i) < xlim .OR. abs(xx(i)) > xxlim)
THEN
631 IF (abs(yy1(i)) > yy1lim .OR. abs(zz1(i)) > zz1lim) id1 = 1
632 IF (abs(yy2(i)) > yy2lim .OR. abs(zz2(i)) > zz2lim) id2 = 1
636 ifunxxm(i) = ifun_xxmr
637 ifunxxp(i) = ifun_xxpr
638 ifunyy1m(i) = ifun_yy1mr
639 ifunyy1p(i) = ifun_yy1pr
640 ifunzz1m(i) = ifun_zz1mr
641 ifunzz1p(i) = ifun_zz1pr
654 ifunxxm(i) = ifun_xxmr
655 ifunxxp(i) = ifun_xxpr
656 ifunyy2m(i) = ifun_yy2mr
657 ifunyy2p(i) = ifun_yy2pr
658 ifunzz2m(i) = ifun_zz2mr
659 ifunzz2p(i) = ifun_zz2pr
670 uvar(29,i) = 2*id1 + id2
675 CALL get_v_func(ifunxxm,nel,xx,dydx,fxxm,jposxxm)
676 CALL get_v_func(ifunxxp,nel,xx,dydx,fxxp,jposxxp)
677 CALL get_v_func(ifunyy1m,nel,yy1,dydx,fyy1m,jposyy1m)
678 CALL get_v_func(ifunyy1p,nel,yy1,dydx,fyy1p,jposyy1p)
679 CALL get_v_func(ifunzz1m,nel,zz1,dydx,fzz1m,jposzz1m)
680 CALL get_v_func(ifunzz1p,nel,zz1,dydx,fzz1p,jposzz1p)
681 CALL get_v_func(ifunyy2m,nel,yy2,dydx,fyy2m,jposyy2m)
682 CALL get_v_func(ifunyy2p,nel,yy2,dydx,fyy2p,jposyy2p)
683 CALL get_v_func(ifunzz2m,nel,zz2,dydx,fzz2m,jposzz2m)
684 CALL get_v_func(ifunzz2p,nel,zz2,dydx,fzz2p,jposzz2p)
688 IF (idamping > zero)
THEN
689 IF (ifun_damp_xi > 0)
THEN
691 elodotx(i) = elodotx(i) / f_x
693 CALL get_v_func(ifun_damp_x,nel,elodotx,dydx,fx_damp
696 IF (ifun_damp_yi > 0)
THEN
698 elodoty(i) = elodoty(i) / f_y
703 IF (ifun_damp_zi > 0)
THEN
705 elodotz(i) = elodotz(i) / f_z
707 CALL get_v_func(ifun_damp_z,nel,elodotz,dydx,fz_damp,jpos_damp_z)
710 IF (ifun_damp_xxi > 0)
THEN
712 elodotxx(i) = elodotxx(i) / f_xx
714 CALL get_v_func(ifun_damp_xx,nel,elodotxx,dydx,fxx_damp,jpos_damp_xx)
717 IF (ifun_damp_yyi > 0)
THEN
719 elodotyy(i) = elodotyy(i) / f_yy
721 CALL get_v_func(ifun_damp_yy,nel,elodotyy,dydx,fyy_damp,jpos_damp_yy)
724 IF (ifun_damp_zzi > 0)
THEN
726 elodotzz(i) = elodotzz(i) / f_zz
728 CALL get_v_func(ifun_damp_zz,nel,elodotzz,dydx,fzz_damp,jpos_damp_zz)
733 fxp(i) = fxp(i) * fscal_x
734 fxm(i) = fxm(i) * fscal_x
735 fxxp(i) = fxxp(i) * fscal_rx
736 fxxm(i) = fxxm(i) * fscal_rx
737 fyy1m(i) = fyy1m(i)* fscal_ry1
739 fzz1m(i) = fzz1m(i)* fscal_rz1
740 fzz1p(i) = fzz1p(i)* fscal_rz1
741 fyy2m(i) = fyy2m(i)* fscal_ry2
742 fyy2p(i) = fyy2p(i)* fscal_ry2
743 fzz2m(i) = fzz2m(i)* fscal_rz2
744 fzz2p(i) = fzz2p(i)* fscal_rz2
754 uvar(7,i) = jposxm(i)
755 uvar(8,i) = jposxxm(i)
756 uvar(9,i) = jposyy1m(i)
757 uvar(10,i) = jposzz1m(i)
758 uvar(11,i) = jposyy2m(i)
759 uvar(12,i) = jposzz2m(i)
760 uvar(13,i) = jposxp(i)
761 uvar(14,i) = jposxxp(i)
762 uvar(15,i) = jposyy1p(i)
763 uvar(16,i) = jposzz1p(i)
764 uvar(17,i) = jposyy2p(i)
765 uvar(18,i) = jposzz2p(i)
769 IF (idamping > zero)
THEN
770 uvar(31,i) = jpos_damp_x(i)
771 uvar(32,i) = jpos_damp_y(i)
772 uvar(33,i) = jpos_damp_z(i)
773 uvar(34,i) = jpos_damp_xx(i)
774 uvar(35,i) = jpos_damp_yy(i)
775 uvar(36,i) = jpos_damp_zz(i)
778 my1(i) =
max(
min(my1(i),fyy1p(i)),fyy1m(i))
779 mz1(i) =
max(
min(mz1(i),fzz1p(i)),fzz1m(i))
780 my2(i) =
max(
min(my2(i),fyy2p(i)),fyy2m(i))
781 mz2(i) =
max(
min(mz2(i),fzz2p(i)),fzz2m(i))
783 xmom(i) =
max(
min(xmom(i),fxxp(i)),fxxm(i))
785 fyy1p(i) =
max(em20, fyy1p(i))
786 fyy1m(i) = -
max(em20,-fyy1m(i))
787 fyy2p(i) =
max(em20, fyy2p(i))
788 fyy2m(i) = -
max(em20,-fyy2m(i))
790 fzz1p(i) =
max(em20, fzz1p(i))
791 fzz1m(i) = -
max(em20,-fzz1m(i))
792 fzz2p(i) =
max(em20, fzz2p(i))
793 fzz2m(i) = -
max(em20,-fzz2m(i))
795 fxxp(i) =
max(em20, fxxp(i))
796 fxxm(i) = -
max(em20,-fxxm(i))
816 ax =
max(xmom(i)/fxxp(i),xmom(i)/fxxm(i))
817 ay =
max(my1(i)/fyy1p(i),my1(i)/fyy1m(i))
818 az =
max(mz1(i)/fzz1p(i),mz1(i)/fzz1m(i))
820 mm = sqrt(ax*ax+ay*ay+az*az)
822 ff = fx(i)/
min(-em20,fxm(i))
823 r = (one+mm-ff)/
max(em20,two*mm)
824 IF (r > zero .AND. r < one)
THEN
825 ff1 = half*(one-mm+ff)*fxm(i)
834 ay =
max(my2(i)/fyy2p(i),my2(i)/fyy2m(i))
835 az =
max(mz2(i)/fzz2p(i),mz2(i)/fzz2m(i))
836 mm = sqrt(ax*ax+ay*ay+az*az)
837 r = (one+mm-ff)/
max(em20,two*mm)
838 IF (r > zero .AND. r < one)
THEN
839 ff2 = half*(one-mm+ff)*fxm(i)
849 xmom(i) =
min(r,r1)*xmom(i)
851 fx(i) =
max(
min(fx(i),fxp(i)), ff1, ff2)
853 fz(i) = (my1(i)+my2(i)) * uleng(i)
854 fy(i) = -(mz1(i)+mz2(i)) * uleng(i)
855 ymom(i) = -half*(my1(i)-my2(i))
856 zmom(i) = -half*(mz1(i)-mz2(i))
860 stifm(i) = uvar(25,i)
861 stifr(i) = uvar(26,i)
863 xiner(i) = uvar(28,i)
867 IF (idamping > zero)
THEN
868 IF (ifun_damp_x(i) == 0)
THEN
869 fx(i) = fx(i) + fscal_damp_x * elodotx(i)
871 fx(i) = fx(i) + fscal_damp_x * fx_damp(i)
874 IF (ifun_damp_y(i) == 0)
THEN
875 fy(i) = fy(i) + fscal_damp_y * elodoty(i)
877 fy(i) = fy(i) + fscal_damp_y * fy_damp(i)
880 IF (ifun_damp_z(i) == 0)
THEN
881 fz(i) = fz(i) + fscal_damp_z * elodotz(i)
883 fz(i) = fz(i) + fscal_damp_z * fz_damp(i)
886 IF (ifun_damp_xx(i) == 0)
THEN
887 xmom(i) = xmom(i) + fscal_damp_xx * elodotxx(i)
889 xmom(i) = xmom(i) + fscal_damp_xx * fxx_damp(i)
892 IF (ifun_damp_yy(i) == 0)
THEN
893 ymom(i) = ymom(i) + fscal_damp_yy * elodotyy(i)
895 ymom(i) = ymom(i) + fscal_damp_yy * fyy_damp(i)
898 IF (ifun_damp_zz(i) == 0)
THEN
899 zmom(i) = zmom(i) + fscal_damp_zz * elodotzz(i)
901 zmom(i) = zmom(i) + fscal_damp_zz * fzz_damp(i)