35 SUBROUTINE rgbodv(V ,VR ,X ,RBY ,NOD ,
36 2 NBY ,SKEW ,ISKEW ,FS ,ITAB ,
37 3 WEIGHT,A ,AR ,MS ,IN ,
38 4 ISENS ,ID ,IFAIL ,FNY ,EXPN ,
39 5 FTY ,EXPT ,CRIT ,NODREAC,FTHREAC ,
45 USE velrot_explicit_mod,
ONLY : velrot_explicit
49#include "implicit_f.inc"
54 INTEGER NOD(*), NBY(*), ISKEW(*),ITAB(*), WEIGHT(*),ID, NODREAC(*)
55 INTEGER,
INTENT(IN) :: IFAIL
58 . V(3,*), VR(3,*), X(3,*), RBY(*), SKEW(LSKEW,*), FS(*),
59 . a(3,*),ar(3,*),in(*),ms(*),freac(6,*)
60 my_real,
INTENT(IN) ::
62 my_real,
INTENT(INOUT) ::
74 INTEGER M, NSN, ICODR, ISK, I, N,ISENS, J, ,NSN_G
77 . XDUM(3), VG(3), VI(3),
78 . V1X2, V2X1, V2X3, V3X2, V3X1, V1X3,,DT05,
81 . ux, uy, uz, nn, fn, ft,lsm(3),vs(3),as(3)
82 my_real,
DIMENSION(:,:),
ALLOCATABLE ::
92 fs(8)=fs(8)+vr(2,m)*dt2*weight(m)
93 fs(9)=fs(9)+vr(3,m)*dt2*weight(m)
95 IF(dt2*dt2*(vr(1,m)**2+vr(2,m)**2+vr(3,m)**2)>1.0.AND.nsn_g>2)
THEN
96 CALL ancmsg(msgid=110,anmode=aninfo,
103 vg(1)=vr(1,m)+ar(1,m)*dt12
104 vg(2)=vr(2,m)+ar(2,m)*dt12
105 vg(3)=vr(3,m)+ar(3,m)*dt12
115 ar(1:3,n)= (vg(1:3)-vr(1
116 a(1:3,n)= a(1:3,m)+(v(1:3,m)-v(1:3,n))*usdt
118 lsm(1:3) = x(1:3,n)-x(1:3,m)
119 CALL velrot_explicit(vg, lsm,vs,dt12)
126 . (vx1+half*dt2*(vg(2)*vx3-vg(3)*vx2))*usdt
128 . (vx2+half*dt2*(vg(3)*vx1-vg(1)*vx3))*usdt
130 . (vx3+half*dt2*(vg(1)*vx2-vg(2)*vx1))*usdt
135 ar(1,n)= (vg(1)-vr(1,n)) * usdt
136 ar(2,n)= (vg(2)-vr(2,n)) * usdt
137 ar(3,n)= (vg(3)-vr(3,n)) * usdt
139 v1x2=vg(1)*(x(2,n)-x(2,m))
140 v2x1=vg(2)*(x(1,n)-x(1,m))
141 v2x3=vg(2)*(x(3,n)-x(3,m))
142 v3x2=vg(3)*(x(2,n)-x(2,m))
143 v3x1=vg(3)*(x(1,n)-x(1,m))
144 v1x3=vg(1)*(x(3,n)-x(3,m))
151 . (v(1,m)+vx1+half*dt2*(vg(2)*vx3-vg(3)*vx2)-v(1,n))*usdt
153 . (v(2,m)+vx2+half*dt2*(vg(3)*vx1-vg(1)*vx3)-v(2,n))*usdt
155 . (v(3,m)+vx3+half*dt2*(vg(1)*vx2-vg(2)*vx1)-v(3,n))*usdt
161 vg(3)=vr(3,m)+ar(3,m)*dt12
172 ar(3,n)= (vg(3)-vr(3,n)) * usdt
174 vx1= vg(3)*(x(1,n)-x(1,m))
177 a(1,n)= am1 + (v(1,m)+vy1-half*dt2*vg(3)*vx1-v(1,n))*usdt
178 a(2,n)= am2 + (v(2,m)+vx1+half*dt2*vg(3)*vy1-v(2,n))*usdt
179 a(3,n)= am3 + (v(3,m)-v(3,n))*usdt
182 vg(1)=vr(1,m)+ar(1,m)*dt12
193 ar(1,n)= (vg(1)-vr(1,n
198 vx2=-vg(1)*(x(3,n)-x(3,m))
199 vx3=vg(1)*(x(2,n)-x(2,m))
201 vxx2=-vg(1)*vg(1)*(x(2,n)-x(2,m))
202 vxx3=-vg(1)*vg(1)*(x(3,n)-x(3,m))
205 . (v(2,m)+vx2+half*dt2*vxx2-v(2,n))*usdt
207 . (v(3,m)+vx3+half*dt2*vxx3-v(3,n))*usdt
211 IF (ireac == 0 .AND. ifail /= 1)
RETURN
223 r(1,i) = ms(n)*a(1,n) - freac(1,n)
224 r(2,i) = ms(n)*a(2,n) - freac(2,n)
225 r(3,i) = ms(n)*a(3,n) - freac(3,n)
227 rr(1,i) = in(n)*ar(1,n) - freac(4,n)
228 rr(2,i) = in(n)*ar(2,n) - freac(5,n)
229 rr(3,i) = in(n)*ar(3,n) - freac(6,n)
238 fthreac(1,l)=fthreac(1,l)+r(1,i)*dt12*weight(n)
239 fthreac(2,l)=fthreac(2,l)+r(2,i)*dt12
240 fthreac(3,l)=fthreac(3,l)+r(3,i)*dt12*weight(n)
241 fthreac(4,l)=fthreac(4,l)+rr(1,i)*dt12*weight(n
242 fthreac(5,l)=fthreac(5,l)+rr(2,i)*dt12*weight(n)
243 fthreac(6,l)=fthreac(6,l)+rr(3,i)*dt12*weight
254 nn = one/
max(em20,sqrt(ux*ux+uy*uy+uz*uz))
259 fn = r(1,i)*ux+r(2,i)*uy+r(3,i)*uz
260 r(1,i) = r(1,i)-fn*ux
261 r(2,i) = r(2,i)-fn*uy
262 r(3,i) = r(3,i)-fn*uz
264 fn = abs(
min(fn,zero))
265 ft = sqrt(r(1,i)*r(1,i)+r(2,i)*r(2,i)+r(3,i)*r(3,i))
267 crit =
max(crit,exp(expn*log(
max(em20,fn/fny)))+exp(expt*log(
max(em20,ft/fty))))
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)