39 3 DPL, FEP, DPX2, DFS,
41 5 IPOS, IGEO, AL0_ERR,
42 6 X1DP, X2DP, X3DP, YIELD,
43 7 TABLE, INIFRIC, NGL, MGN,
47 B NC3, NUVAR, UVAR, DL0,
48 C NEL, NFT, STF, SANIN,
60#include "implicit_f.inc"
80 type(python_),
intent(inout) :: PYTHON
81 INTEGER,
INTENT(IN) :: SANIN
82 INTEGER,
INTENT(IN) :: STF
83 INTEGER,
INTENT(IN) :: NFT
84 INTEGER,
INTENT(IN) :: NEL
85 INTEGER,
INTENT(IN) :: IRESP
86 INTEGER,
INTENT(IN) :: SNPC
87 INTEGER NPF(SNPC),IXR(NIXR,*),IGEO(NPROPGI,*),NGL(*),MGN(*),
88 . NC1(*),NC2(*),NC3(*),NUVAR
91 . GEO(NPROPG,*), F(*), AL0(*), E(*), DL(*), TF(STF), OFF(*),
92 . DPL(*), FEP(*), DPX2(*),DFS(*),V(3,*),DF(*),ANIM(*),
93 . ipos(*),al0_err(*),yield(*),inifric(*),
94 . ex(mvsiz),ey(mvsiz),ez(mvsiz),xk(mvsiz),
95 . xm(mvsiz),xc(mvsiz),ak(mvsiz),ex2(mvsiz),ey2(mvsiz),ez2(mvsiz),
96 . uvar(nuvar,*),dl0(*)
97 DOUBLE PRECISION X1DP(3,*),X2DP(3,*),X3DP(3,*)
103 INTEGER IFUNC2(MVSIZ),
104 . IECROU(MVSIZ), IFUNC(MVSIZ), IFV(),
105 . NINDX, INDX(MVSIZ),I,ILENG,IPID,J,
106 . IFUNC3(MVSIZ),ITABF(MVSIZ),IFRIC(MVSIZ)
109 . XL0(MVSIZ),DMN(MVSIZ),DMX(MVSIZ),
110 . dlold(mvsiz),b(mvsiz), d(mvsiz), dv(mvsiz),
111 . ff(mvsiz),lscale(mvsiz),ee(mvsiz),
112 . gf3(mvsiz),fric(mvsiz),xscalf(mvsiz),gx(mvsiz),yscalf(mvsiz),
113 . f_min(mvsiz),f_max(mvsiz),epla(mvsiz)
115 . beta, mu,fmax, ddx ,vx21,vy21,vz21,vl21,
116 . vx32,vy32,vz32,vl32,not_used,not_used2(2)
119 DOUBLE PRECISION EXDP(MVSIZ) ,EYDP(MVSIZ) ,EZDP(MVSIZ),
120 . EX2DP(MVSIZ),EY2DP(MVSIZ),EZ2DP(MVSIZ),
121 . al1dp(mvsiz),al2dp(mvsiz),aldp(mvsiz),
123 my_real :: max_slope(mvsiz)
124 my_real ,
DIMENSION(:),
POINTER :: xx_old
137 iecrou(i)=nint(geo(7,ipid))
142 gf3(i) = geo(132,ipid)
144 dmn(i) = geo(15,ipid)
145 dmx(i) = geo(16,ipid)
146 fric(i) = geo(17,ipid)
147 xscalf(i)= geo(20,ipid)
148 lscale(i)= geo(39,ipid)
149 ifunc(i) = igeo(101,ipid)
150 ifv(i) = igeo(102,ipid)
151 ifunc2(i)= igeo(103,ipid)
152 ifunc3(i)= igeo(119,ipid)
153 itabf(i) = igeo(201,ipid)
154 ifric(i) = igeo(202,ipid)
155 f_min(i) = geo(138,ipid)
156 f_max(i) = geo(139,ipid)
157 yscalf(i)= geo(140,ipid
162 exdp(i)=x2dp(1,i)-x1dp(1,i)
163 eydp(i)=x2dp(2,i)-x1dp(2,i)
164 ezdp(i)=x2dp(3,i)-x1dp(3,i)
165 ex2dp(i)=x2dp(1,i)-x3dp(1,i)
166 ey2dp(i)=x2dp(2,i)-x3dp(2,i)
167 ez2dp(i)=x2dp(3,i)-x3dp(3,i)
171 IF (inispri /= 0 .and. tt == zero)
THEN
178 al1dp(i)=sqrt(exdp(i)*exdp(i)+eydp(i)*eydp(i)+ezdp(i)*ezdp(i))
179 al2dp(i)=sqrt(ex2dp(i)*ex2dp(i)+ey2dp(i)*ey2dp(i)+
181 aldp(i) =al1dp(i) + al2dp(i)
182 al1dp(i)=
max(al1dp(i),em15)
183 exdp(i) = exdp(i)/al1dp(i)
184 eydp(i) = eydp(i)/al1dp(i)
185 ezdp(i) = ezdp(i)/al1dp(i)
186 al2dp(i)=
max(al2dp(i),em15)
187 ex2dp(i)= ex2dp(i)/al2dp(i)
188 ey2dp(i)= ey2dp(i)/al2dp(i)
189 ez2dp(i)= ez2dp(i)/al2dp(i)
201 IF (inispri /= 0 .and. tt == zero)
THEN
205 IF (xl0(i) == zero) xl0(i) = aldp(i)
215 IF (scodver >= 101)
THEN
218 al0_err(i)=aldp(i)-al0(i)
223 IF ( inispri /= 0 .and. tt == zero)
THEN
233 IF (scodver >= 101)
THEN
235 al0dp(i)= al0dp(i)+al0_err(i)
239 IF (ismdisp > 0)
THEN
241 vx21= v(1,nc2(i)) - v(1,nc1(i))
242 vy21= v(2,nc2(i)) - v(2,nc1(i))
243 vz21= v(3,nc2(i)) - v(3,nc1(i))
244 vl21 = vx21*ex(i)+vy21*ey(i)+vz21*ez(i)
245 vx32= v(1,nc2(i)) - v(1,nc3(i))
246 vy32= v(2,nc2(i)) - v(2,nc3(i))
247 vz32= v(3,nc2(i)) - v(3,nc3(i))
248 vl32 = vx32*ex2(i)+vy32*ey2(i)+vz32*ez2(i)
249 dl(i)= dlold(i)+(vl21+vl32)*dt1
253 dl(i)= (aldp(i)-al0dp(i))
258 ileng=nint(geo(93,mgn(i)))
267 xx_old => uvar(1,1:nel)
273 2 dlold, dpl, tf, npf,
275 4 anim, anim_fe(11),ipos,
277 6 ff, lscale, ee, gf3,
278 7 ifunc3, yield, aldp, ak,
279 8 b, d, iecrou, ifunc,
280 9 ifv, ifunc2, epla, xx_old,
281 a nel, nft, stf, sanin, dt1,
282 b iresp, impl_s, idyna, snpc,
283 c max_slope=max_slope)
286 IF (off(i) == one .AND. dmx(i) /= zero .AND. dmn(i) /= zero)
THEN
287 IF (dl(i) > dmx(i) .OR. dl(i) < dmn(i))
THEN
299 WRITE(iout, 1000) ngl(i)
300 WRITE(istdo,1100) ngl(i),tt
301#include "lockoff.inc"
310 xc(i) = (xc(i) + max_slope(i)) / xl0(i)
314 IF (ifric(i) == 0)
THEN
315 IF (itabf(i) > zero)
THEN
316 ddx = exdp(i) * (v(1,nc2(i)) - v(1,nc1(i)))
317 . + eydp(i) * (v(2,nc2(i)) - v(2,nc1(i)))
318 . + ezdp(i) * (v(3,nc2(i)) - v(3,nc1(i)))
319 . + ex2dp(i)* (v(1,nc3(i)) - v(1,nc2(i)))
320 . + ey2dp(i)* (v(2,nc3(i)) - v(2,nc2(i)))
321 . + ez2dp(i)* (v(3,nc3(i)) - v(3,nc2(i)))
322 dfs(i)= dfs(i) + ddx * dt1 * xk(i)
323 beta = pi - acos(exdp(i)*ex2dp(i)+eydp(i)*ey2dp(i)+
325 xx(1) = abs(dfs(i)*xscalf(i))
328 fmax =
max(zero,f(i) * tanh(half*mu*beta))
329 fmax =
min(fmax,abs(dfs(i)))
330 dfs(i)= sign(fmax,dfs(i))
332 ELSEIF (fric(i) > zero)
THEN
333 ddx = exdp(i) * (v(1,nc2(i)) - v(1,nc1(i)))
334 . + eydp(i) * (v(2,nc2(i)) - v(2,nc1(i)))
335 . + ezdp(i) * (v(3,nc2(i)) - v(3,nc1(i)))
336 . + ex2dp(i)* (v(1,nc3(i)) - v(1,nc2(i)))
337 . + ey2dp(i)* (v(2,nc3(i)) - v(2,nc2(i)))
338 . + ez2dp(i)* (v(3,nc3(i)) - v(3,nc2(i)))
339 dfs(i)= dfs(i) + ddx * dt1 * xk(i)
340 beta = pi - acos(exdp(i)*ex2dp(i)+eydp(i)*ey2dp(i)+
342 fmax =
max(zero,f(i) * tanh(half*fric(i)*beta))
343 fmax =
min(fmax,abs(dfs(i)))
344 dfs(i)= sign(fmax,dfs(i))
351 ELSEIF (ifric(i) > 0)
THEN
352 IF (itabf(i) > zero)
THEN
353 ddx = exdp(i) * (v(1,nc2(i)) - v(1,nc1(i)))
354 . + eydp(i) * (v(2,nc2(i)) - v(2,nc1(i)))
355 . + ezdp(i) * (v(3,nc2(i)) - v(3,nc1(i)))
356 . + ex2dp(i)* (v(1,nc3(i)) - v(1,nc2(i)))
357 . + ey2dp(i)* (v(2,nc3(i)) - v(2,nc2(i)))
358 . + ez2dp(i)* (v(3,nc3(i)) - v(3,nc2(i)))
359 dfs(i)= dfs(i) + ddx * dt1 * xk(i)
360 beta = pi - acos(exdp(i)*ex2dp(i)+eydp(i)*ey2dp(i)+
363 xx(1) = dfs(i)*xscalf(i)
373 IF (dfs(i) <= f_min(i) .OR. dfs(i) >= f_max(i)) inifric(i) = one
374 IF (inifric(i) == one) mu = fric(i)
376 fmax =
max(zero,f(i) * tanh(half
377 fmax =
min(fmax,abs(dfs(i)))
378 dfs(i)= sign(fmax,dfs(i))
380 ELSEIF (fric(i) > zero .AND. itabf(i) == 0)
THEN
381 ddx = exdp(i) * (v(1,nc2(i)) - v(1,nc1(i)))
382 . + eydp(i) * (v(2,nc2(i)) - v(2,nc1(i)))
383 . + ezdp(i) * (v(3,nc2(i)) - v(3,nc1(i)))
384 . + ex2dp(i)* (v(1,nc3(i)) - v(1,nc2(i)))
385 . + ey2dp(i)* (v(2,nc3(i)) - v(2,nc2(i)))
386 . + ez2dp(i)* (v(3,nc3(i)) - v(3,nc2(i)))
387 dfs(i)= dfs(i) + ddx * dt1 * xk(i)
388 beta = pi - acos(exdp(i)*ex2dp(i)+eydp(i)*ey2dp(i)+
390 fmax =
max(zero,f(i) * tanh(half*fric(i)*beta))
391 fmax =
min(fmax,abs(dfs(i)))
392 dfs(i)= sign(fmax,dfs(i))
400 1000
FORMAT(1x,
'-- RUPTURE OF SPRING ELEMENT NUMBER ',i10)
401 1100
FORMAT(1x,
'-- RUPTURE OF SPRING ELEMENT :',i10,
' AT TIME :',g11.4)
subroutine r3def3(python, geo, f, al0, e, dl, npf, tf, off, dpl, fep, dpx2, dfs, v, ixr, df, anim, ipos, igeo, al0_err, x1dp, x2dp, x3dp, yield, table, inifric, ngl, mgn, ex, ey, ez, xk, xm, xc, ak, ex2, ey2, ez2, nc1, nc2, nc3, nuvar, uvar, dl0, nel, nft, stf, sanin, iresp, snpc)