39 2 XEL ,VEL ,VREL ,UIX ,UID ,
40 3 IOUT ,IPROP ,IMAT ,OFF ,KEINT ,
41 4 EINT ,MASS ,XINER ,STIFM ,STIFR ,
42 5 VISCM ,VISCR ,FORC ,TORQ ,
43 6 NUVAR ,UVAR ,NUVARN ,UVARN ,
152#include "implicit_f.inc"
153#include "comlock.inc"
157 INTEGER IOUT,NUVAR,NUVARN,IPROP,IMAT,
158 . NX ,UIX(NX) ,UID, KEINT,
159 . GET_U_PNU,GET_U_PID,GET_U_MID,GET_U_MNU,
162 . OFF, EINT, XEL(3,NX), VEL(3,NX) ,VREL(3,NX),
163 . mass(nx) , xiner(nx) ,stifm(nx) ,
164 . stifr(nx), viscm(nx) ,viscr(nx) ,
165 . forc(3,nx), torq(3,nx),
166 . uvar(nuvar),uvarn(nuvarn*nx),dt ,dte ,
alpha,
167 . get_u_mat, get_u_geo, get_u_func
168 EXTERNAL get_u_mnu,get_u_pnu,get_u_mid,get_u_pid,
169 . get_u_mat,get_u_geo, get_u_func
177 INTEGER NB1, NB2, NB3, MB1, MB2, MB3, MB4, MB5,
178 . k, ifunct, ifv, nit, echange
180 . lprev, lnext, vprev(3), vnext(3), vv,xk, xc,
181 . l0, l, dx, dxold, ddx, dt11, dvx, fx, g, y, dfdx, dgdx, f,
182 . stif, mu1, mu2, fric, mu, beta, fmax, dfs, df, ff,
183 . epsmoy, df1, df2, xn, fxold, epstot, epsmin, epsmax, deps,
184 . rho, xm, xkm, xks, xcm, dtc, dtk, fact, ffac,xfac
208 IF (off==zero)
GOTO 200
216 . sqrt((xel(1,k+1)-xel(1,k))*(xel(1,k+1)-xel(1,k))
217 . +(xel(2,k+1)-xel(2,k))*(xel(2,k+1)-xel(2,k))
218 . +(xel(3,k+1)-xel(3,k))*(xel(3,k+1)-xel(3,k)))
223 xk =get_u_geo(4,iprop)
224 ifunct =get_u_pnu(1,iprop,kfunc)
225 ifv =get_u_pnu(2,iprop,kfunc)
226 ffac=get_u_geo(12,iprop)
227 xfac=get_u_geo(13,iprop)
230 IF (ifunct==0.AND.ifv==0)
THEN
239 ELSEIF (ifunct==0.AND.ifv/=0)
THEN
254 f =get_u_func(ifunct,epstot,dfdx)
262 IF(dt11==zero)dt11 = ep30
268 deps =(epstot-dxold/l0)/dt11
272 xc =get_u_geo(5,iprop)
275 g = get_u_func(ifv,deps*xfac,dgdx)
291 vnext(1)=xel(1,k+1)-xel(1,k)
292 vnext(2)=xel(2,k+1)-xel(2,k)
293 vnext(3)=xel(3,k+1)-xel(3,k)
294 vv=1./
max(em15,mass(k))
305 viscr(k)=uvarn(mb2+k-1)
306 xiner(k)=uvarn(mb4+k-1)
311 epsmin=get_u_geo(8,iprop)
312 epsmax=get_u_geo(9,iprop)
313 IF (epstot<epsmin.OR.epstot>epsmax)
THEN
317 WRITE(iout, 1000) uid
318#include "lockoff.inc"
322 mu1 = get_u_geo(10,iprop)
323 mu2 = get_u_geo(11,iprop)
325 epsmoy=(dx-dxold)/
max(em15,l)
332 ddx = vprev(1) * (vel(1,k+1) - vel(1,k))
333 . + vprev(2) * (vel(2,k+1) - vel(2,k))
334 . + vprev(3) * (vel(3,k+1) - vel(3,k))
335 uvarn(mb2+k-1)=uvarn(mb2+k-1)
337 . +stif*(dt*ddx*(xn-one)/
max(em15,l)-epsmoy)
343 DO WHILE(echange==1.AND.nit<10)
348 stifr(k)=uvarn(mb2+k-1)
353 mu = get_u_geo(50+k,iprop)
354 IF (mu>=zero) fric=mu
355 mu = get_u_geo(525+k-1,iprop)
361 mu = get_u_geo(525+k,iprop)
374 alpha=vprev(1)*vnext(1)+vprev(2)*vnext(2)+vprev(3)*vnext(3)
377 beta = pi-acos(
alpha)
379 ff = two*fx+stifr(k-1)+stifr(k)
380 fmax =
max(zero,ff*tanh(half*fric*beta))
381 dfs = stifr(k-1)-stifr(k)
382 IF(abs(dfs)>fmax)
THEN
383 df =sign(abs(dfs)-fmax,dfs)
385 uvarn(mb2+k-2)=uvarn(mb2+k-2)-half*df
386 uvarn(mb2+k-1)=uvarn(mb2+k-1)+half*df
397 forc(1,1)=fx*vprev(1)
398 forc(2,1)=fx*vprev(2)
399 forc(3,1)=fx*vprev(3)
404 forc(1,k)=fx*(vnext(1)-vprev(1))
405 forc(2,k)=fx*(vnext(2)-vprev(2))
406 forc(3,k)=fx*(vnext(3)-vprev(3))
411 forc(1,nx)=-fx*vprev(1)
412 forc(2,nx)=-fx*vprev(2)
413 forc(3,nx)=-fx*vprev(3)
417 vprev(1)=dfs*torq(1,k)
418 vprev(2)=dfs*torq(2,k)
419 vprev(3)=dfs*torq(3,k)
420 forc(1,k) =forc(1,k) +vprev(1)
421 forc(2,k) =forc(2,k) +vprev(2)
422 forc(3,k) =forc(3,k) +vprev(3)
423 forc(1,k+1)=forc(1,k+1)-vprev(1)
424 forc(2,k+1)=forc(2,k+1)-vprev(2)
425 forc(3,k+1)=forc(3,k+1)-vprev(3)
439 uvarn(mb4+k-1)=mass(k)-uvarn(mb3+k-1)
440 uvarn(mb5+k-1)=uvarn(mb5+k-1)
441 . + half*(uvarn(mb4+k-1)-xiner(k))
442 . *(fx+fxold+uvarn(mb2+k-1)+viscr(k))
448 eint=eint+uvarn(mb5+k-1)
462 rho = get_u_geo(3,iprop)
467 IF(mass(k)<=em15)
THEN
470 .
' ** ERROR NSTRAND : NULL STRAND LENGTH, ELEMENT=',
472#include "lockoff.inc"
476 xm = rho*uvarn(mb3+k-1)
478 xkm =stif*(nx-1)/
max(em15,l)
479 xcm = (f*dgdx+xc)*l/(
max(em15,mass(k))*l0)
482 IF(xkm<=em15.AND.xcm<=em15)
THEN
485 .
' ** ERROR NSTRAND : NULL STRAND STIFFNESS & DAMPING, ELEMENT=',
487#include "lockoff.inc"
493 dtk=(sqrt(xcm*xcm+xm*xkm)-xcm)/
max(em15,xkm)
519 viscm(1) =(f*dgdx+xc)*l/(
max(em15,mass(1))*l0)
520 stifm(1) =stif*(nx-1)/
max(em15,l)
522 fact =one/
max(em15,mass(k-1))+one/
max(em15,mass(k))
523 viscm(k) =fact*(f*dgdx+xc)*l/l0
524 stifm(k) =2.*stif*(nx-1)/
max(em15,l)
526 viscm(nx) =(f*dgdx+xc)*l/(
max(em15,mass(nx-1))*l0)
527 stifm(nx) =stif*(nx-1)/
max(em15,l)
531 mass(k)=uvarn(mb1+k-1)
534 1000
FORMAT(1x,
'-- RUPTURE OF NSTRAND ELEMENT NUMBER ',i10)
538 CALL ancmsg(msgid=217,anmode=aninfo)
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)