29 1 JFT, JLT, OFF, DT2T,
30 2 NELTST, ITYPTST, STI, STIR,
31 3 MS, IN, USTI, USTIR,
32 4 VISI, VISIR, UMAS, UINER,
33 5 FR_WAVE, FR_W_E, EINT, FX,
34 6 XMOM, YMOM, ZMOM, VX,
37 9 PARTSAV, IPARTR, MSRT, DMELRT,
38 A G_DT, DTEL, NGL, NC1,
43#include "implicit_f.inc"
64 INTEGER,
INTENT(IN) :: JSMS
65 my_real,
INTENT(INOUT) :: DTEL(JFT:JLT)
66 INTEGER,
INTENT(IN) :: G_DT
67 INTEGER JFT,JLT,NELTST ,ITYPTST
68 INTEGER IPARTR(*),NGL(*),NC1(*),NC2(*)
70 . OFF(*), STI(3,*), STIR(3,*), MS(*), IN(*),
71 . USTI(*) ,USTIR(*), VISI(*) ,VISIR(*) ,UMAS(*) ,
72 . UINER(*),FR_WAVE(*) ,FR_W_E(*) ,EINT(*) ,
73 . FX(*), FY(*), FZ(*), XMOM(*), YMOM(*),ZMOM(*),XL(*),
74 . (*), RY1(*), RZ1(*), RX(*), RY2(*), RZ2(*),PARTSAV(NPSAV,*),
81 . dt(mvsiz), dtc(mvsiz),
82 . dtinv, a, mass2, in2, dta, dtb, mx2
90 xmom(i) = xmom(i)*off(i)
91 ymom(i) = ymom(i)*off(i)
92 zmom(i) = zmom(i)*off(i)
99 .+ half*dt1 * (vx(i) * fx(i) + rx(i) * xmom(i)
100 . + (ry2(i) - ry1(i)) * ymom(i)
101 . + (rz2(i) - rz1(i)) * zmom(i)
102 . + half * (ry2(i) + ry1(i)) * fz(i) * xl(i)
103 . - half * (rz2(i) + rz1(i)) * fy(i) * xl(i) )
105 IF (npsav >= 21)
THEN
108 partsav(23,mx)=partsav(23,mx)
109 . + half*dt1 * (rx(i) * xmom(i)
110 . + (ry2(i) - ry1(i)) * ymom(i)
111 . + (rz2(i) - rz1(i)) * zmom(i)
112 . + half * (ry2(i) + ry1(i)) * fz(i) * xl(i)
113 . - half * (rz2(i) + rz1(i)) * fy(i) * xl(i) )
122 IF (fr_wave(nc1(i)) == zero)fr_wave(nc1(i))=-fr_w_e(i)
123 IF (fr_wave(nc2(i)) == zero)fr_wave(nc2(i))=-fr_w_e(i)
125#include "lockoff.inc"
130 IF (nodadt /= 0 .OR. idtmins == 2)
THEN
132 usti(i) =usti(i) *
max(zero,off(i))
133 ustir(i)=ustir(i)*
max(zero,off(i))
134 visi(i) =visi(i) *
max(zero,off(i))
135 visir(i)=visir(i)*
max(zero,off(i))
143 . sti(1,i) = sti(1,i) + four*visi(i)**2 / umas(i)
145 . stir(1,i) = stir(1,i) + four*visir(i)**2 / uiner(i)
147 stir(2,i) = stir(1,i)
151 sti(1,i) = usti(i) + two*visi(i)/dt1
152 stir(1,i) = ustir(i)+ two*visir(i)/dt1
154 stir(2,i) = stir(1,i)
158 IF (idtmins == 2 .AND. jsms /= 0)
THEN
162 IF (off(i) <= zero) cycle
164 IF (visi(i)+usti(i) >= em15)
THEN
165 usti(i)=
max(em15,usti(i))
166 dmelrt(i)=
max(dmelrt(i),
167 . visi(i)*dta+half*usti(i)*dtb-half*msrt(i))
169 mx2 =msrt(i)+two*dmelrt(i)
171 . mx2 /
max(em15,sqrt(visi(i)*visi(i)+mx2*usti(i))+visi(i))
176 IF (off(i) <= zero) cycle
177 IF (dt(i) < dt2t)
THEN
186 IF (nodadt /= 0 .OR. (idtmins == 2. and. jsms /= 0))
RETURN
189 IF (visi(i)+usti(i) < em15) umas(i) =one
193 usti(i)=
max(em15,usti(i))
194 dt(i)=(sqrt(visi(i)*visi(i)+umas(i)*usti(i))-visi(i))/usti(i)
195 dtc(i)=half*umas(i)/
max(em15,visi(i))
196 dt(i)=
min(dt(i),dtc(i))
199 IF (idtmins /= 2)
THEN
205 IF (dt(i) == zero) dt(i)=dtc(i)
206 IF (off(i) <= zero) cycle
207 sti(1,i) = umas(i) / dt(i)**2
213 IF (visir(i)+ustir(i) < em15) uiner(i)=one
217 ustir(i)=
max(em15,ustir(i))
218 dtc(i)=(sqrt(visir(i)*visir(i)+uiner(i)*ustir(i))-visir(i))
220 dt(i)=
min(dt(i),dtc(i))
221 dtc(i)=half*uiner(i)/
max(em15,visir(i))
222 dt(i)=
min(dt(i),dtc(i))
226 IF (off(i) <= zero) cycle
227 IF (dt(i) == zero) dt(i)=dtc(i)
228 dt(i)=dtfac1(6)*dt(i)
229 IF (idtmin(6) == 1 .AND. dt(i) < dtmin1(6))
THEN
233 .
' **ERROR : TIME STEP LESS OR EQUAL DTMIN FOR SPRING ELEMENT'
235 .
' **ERROR : TIME STEP LESS OR EQUAL DTMIN FOR SPRING ELEMENT'
236#include "lockoff.inc"
237 ELSEIF (idtmin(6) == 5 .AND. dt(i) < dtmin1(6))
THEN
241 .
' **ERROR : TIME STEP LESS OR EQUAL DTMIN FOR SPRING ELEMENT'
243 .
' **ERROR : TIME STEP LESS OR EQUAL DTMIN FOR SPRING ELEMENT'
244#include "lockoff.inc"
245 ELSEIF (idtmin(6) == 2 .AND. dt(i) < dtmin1(6))
THEN
248 WRITE(iout,*)
'-- DELETE OF SPRING ELEMENT NUMBER',ngl(i)
249#include "lockoff.inc"
252 IF (dt(i) >= dt2t) cycle
subroutine r5len3(jft, jlt, off, dt2t, neltst, ityptst, sti, stir, ms, in, usti, ustir, visi, visir, umas, uiner, fr_wave, fr_w_e, eint, fx, xmom, ymom, zmom, vx, ry1, rz1, rx, ry2, rz2, xl, fy, fz, partsav, ipartr, msrt, dmelrt, g_dt, dtel, ngl, nc1, nc2, jsms)