40 3 DPL, FEP, DPX2, DFS,
42 5 IPOS, IGEO, AL0_ERR,
43 6 X1DP, X2DP, X3DP, YIELD,
44 7 TABLE, INIFRIC, NGL, MGN,
48 B NC3, NUVAR, UVAR, DL0,
49 C NEL, NFT, STF, SANIN,
58 use element_mod ,
only : nixr
62#include "implicit_f.inc"
82 type(python_),
intent(inout) :: PYTHON
83 INTEGER,
INTENT(IN) :: SANIN
84 INTEGER,
INTENT(IN) :: STF
85 INTEGER,
INTENT(IN) :: NFT
86 INTEGER,
INTENT(IN) :: NEL
87 INTEGER,
INTENT(IN) :: IRESP
88 INTEGER,
INTENT(IN) ::
89 INTEGER NPF(SNPC),IXR(NIXR,*),IGEO(NPROPGI,*),NGL(*),MGN(*),
90 . NC1(*),NC2(*),NC3(*),NUVAR
93 . GEO(NPROPG,*), F(*), AL0(*), E(*), DL(*), TF(STF), OFF(*),
94 . DPL(*), FEP(*), DPX2(*),DFS(*),V(3,*),DF(*),ANIM(*),
95 . ipos(*),al0_err(*),yield(*),inifric(*),
96 . ex(mvsiz),ey(mvsiz),ez(mvsiz),xk(mvsiz),
97 . xm(mvsiz),xc(mvsiz),ak(mvsiz),ex2(mvsiz),ey2
98 . uvar(nuvar,*),dl0(*)
99 DOUBLE PRECISION X1DP(3,*),X2DP(3,*),X3DP(3,*)
105 INTEGER IFUNC2(MVSIZ),
106 . IECROU(MVSIZ), IFUNC(MVSIZ), IFV(MVSIZ),
107 . NINDX, INDX(MVSIZ),I,ILENG,IPID,J,
108 . IFUNC3(MVSIZ),ITABF(MVSIZ),IFRIC(MVSIZ)
111 . XL0(MVSIZ),DMN(MVSIZ),DMX(MVSIZ),
112 . dlold(mvsiz),b(mvsiz), d(mvsiz), dv(mvsiz),
114 . gf3(mvsiz),fric(mvsiz),xscalf(mvsiz),yscalf(mvsiz),
115 . f_min(mvsiz),f_max(mvsiz),epla(mvsiz)
117 . beta, mu,fmax, ddx ,vx21,vy21,vz21
118 . vx32,vy32,vz32,vl32,not_used,not_used2(2)
121 DOUBLE PRECISION EXDP(MVSIZ) ,EYDP(MVSIZ) ,EZDP(MVSIZ),
122 . EX2DP(MVSIZ),EY2DP(MVSIZ),(MVSIZ),
123 . al1dp(mvsiz),al2dp(mvsiz),aldp(mvsiz),
125 my_real :: max_slope(mvsiz)
126 my_real ,
DIMENSION(:),
POINTER :: xx_old
139 iecrou(i)=nint(geo(7,ipid))
144 gf3(i) = geo(132,ipid)
146 dmn(i) = geo(15,ipid)
147 dmx(i) = geo(16,ipid)
148 fric(i) = geo(17,ipid)
149 xscalf(i)= geo(20,ipid)
150 lscale(i)= geo(39,ipid)
151 ifunc(i) = igeo(101,ipid)
152 ifv(i) = igeo(102,ipid)
153 ifunc2(i)= igeo(103,ipid)
154 ifunc3(i)= igeo(119,ipid)
155 itabf(i) = igeo(201,ipid)
156 ifric(i) = igeo(202,ipid)
157 f_min(i) = geo(138,ipid)
158 f_max(i) = geo(139,ipid)
159 yscalf(i)= geo(140,ipid)
160 max_slope(i) = geo(141,ipid)
164 exdp(i)=x2dp(1,i)-x1dp(1,i)
165 eydp(i)=x2dp(2,i)-x1dp(2,i)
166 ezdp(i)=x2dp(3,i)-x1dp(3,i)
167 ex2dp(i)=x2dp(1,i)-x3dp(1,i)
168 ey2dp(i)=x2dp(2,i)-x3dp(2,i)
169 ez2dp(i)=x2dp(3,i)-x3dp(3,i)
173 IF (inispri /= 0 .and. tt == zero)
THEN
180 al1dp(i)=sqrt(exdp(i)*exdp(i)+eydp(i)*eydp(i)+ezdp(i)*ezdp(i))
181 al2dp(i)=sqrt(ex2dp(i)*ex2dp(i)+ey2dp(i)*ey2dp(i)+
183 aldp(i) =al1dp(i) + al2dp(i)
184 al1dp(i)=
max(al1dp(i),em15)
185 exdp(i) = exdp(i)/al1dp(i)
186 eydp(i) = eydp(i)/al1dp(i)
187 ezdp(i) = ezdp(i)/al1dp(i)
188 al2dp(i)=
max(al2dp(i),em15)
189 ex2dp(i)= ex2dp(i)/al2dp(i)
190 ey2dp(i)= ey2dp(i)/al2dp(i)
191 ez2dp(i)= ez2dp(i)/al2dp(i)
203 IF (inispri /= 0 .and. tt == zero)
THEN
207 IF (xl0(i) == zero) xl0(i) = aldp(i)
217 IF (scodver >= 101)
THEN
220 al0_err(i)=aldp(i)-al0(i)
225 IF ( inispri /= 0 .and. tt == zero)
THEN
235 IF (scodver >= 101)
THEN
237 al0dp(i)= al0dp(i)+al0_err(i)
241 IF (ismdisp > 0)
THEN
243 vx21= v(1,nc2(i)) - v(1,nc1(i))
244 vy21= v(2,nc2(i)) - v(2,nc1(i))
245 vz21= v(3,nc2(i)) - v(3,nc1(i))
246 vl21 = vx21*ex(i)+vy21*ey(i)+vz21*ez(i)
247 vx32= v(1,nc2(i)) - v(1,nc3(i))
248 vy32= v(2,nc2(i)) - v(2,nc3(i))
249 vz32= v(3,nc2(i)) - v(3,nc3(i))
250 vl32 = vx32*ex2(i)+vy32*ey2(i)+vz32*ez2(i)
251 dl(i)= dlold(i)+(vl21+vl32)*dt1
255 dl(i)= (aldp(i)-al0dp(i))
260 ileng=nint(geo(93,mgn(i)))
269 xx_old => uvar(1,1:nel)
275 2 dlold, dpl, tf, npf,
277 4 anim, anim_fe(11),ipos,
279 6 ff, lscale, ee, gf3,
280 7 ifunc3, yield, aldp, ak,
281 8 b, d, iecrou, ifunc,
282 9 ifv, ifunc2, epla, xx_old,
283 a nel, nft, stf, sanin, dt1,
284 b iresp, impl_s, idyna, snpc,
285 c max_slope=max_slope)
288 IF (off(i) == one .AND. dmx(i) /= zero .AND. dmn(i) /= zero)
THEN
289 IF (dl(i) > dmx(i) .OR. dl(i) < dmn(i))
THEN
301 WRITE(iout, 1000) ngl(i)
302 WRITE(istdo,1100) ngl(i),tt
303#include "lockoff.inc"
312 xc(i) = (xc(i) + max_slope(i)) / xl0(i)
316 IF (ifric(i) == 0)
THEN
317 IF (itabf(i) > zero)
THEN
318 ddx = exdp(i) * (v(1,nc2(i)) - v(1,nc1(i)))
319 . + eydp(i) * (v(2,nc2(i)) - v(2,nc1(i)))
320 . + ezdp(i) * (v(3,nc2(i)) - v(3,nc1(i)))
321 . + ex2dp(i)* (v(1,nc3(i)) - v(1,nc2(i)))
322 . + ey2dp(i)* (v(2,nc3(i)) - v(2,nc2(i)))
323 . + ez2dp(i)* (v(3,nc3(i)) - v(3,nc2(i)))
324 dfs(i)= dfs(i) + ddx * dt1 * xk(i)
325 beta = pi - acos(exdp(i)*ex2dp(i)+eydp(i)*ey2dp(i)+
327 xx(1) = abs(dfs(i)*xscalf(i))
330 fmax =
max(zero,f(i) * tanh(half*mu*beta))
331 fmax =
min(fmax,abs(dfs(i)))
332 dfs(i)= sign(fmax,dfs(i))
334 ELSEIF (fric(i) > zero)
THEN
335 ddx = exdp(i) * (v(1,nc2(i)) - v(1,nc1(i)))
336 . + eydp(i) * (v(2,nc2(i)) - v(2,nc1(i)))
337 . + ezdp(i) * (v(3,nc2(i)) - v(3,nc1(i)))
338 . + ex2dp(i)* (v(1,nc3(i)) - v(1,nc2(i)))
339 . + ey2dp(i)* (v(2,nc3(i)) - v(2,nc2(i)))
340 . + ez2dp(i)* (v(3,nc3(i)) - v(3,nc2(i)))
341 dfs(i)= dfs(i) + ddx * dt1 * xk(i)
342 beta = pi - acos(exdp(i)*ex2dp(i)+eydp(i)*ey2dp(i)+
344 fmax =
max(zero,f(i) * tanh(half*fric(i)*beta))
345 fmax =
min(fmax,abs(dfs(i)))
346 dfs(i)= sign(fmax,dfs(i))
353 ELSEIF (ifric(i) > 0)
THEN
354 IF (itabf(i) > zero)
THEN
355 ddx = exdp(i) * (v(1,nc2(i)) - v(1,nc1(i)))
356 . + eydp(i) * (v(2,nc2(i)) - v(2,nc1(i)))
357 . + ezdp(i) * (v(3,nc2(i)) - v(3,nc1(i)))
358 . + ex2dp(i)* (v(1,nc3(i)) - v(1,nc2(i)))
359 . + ey2dp(i)* (v(2,nc3(i)) - v(2,nc2(i)))
360 . + ez2dp(i)* (v(3,nc3(i)) - v(3,nc2(i)))
361 dfs(i)= dfs(i) + ddx * dt1 * xk(i)
362 beta = pi - acos(exdp(i)*ex2dp(i)+eydp(i)*ey2dp(i)+
365 xx(1) = dfs(i)*xscalf(i)
375 IF (dfs(i) <= f_min(i) .OR. dfs(i) >= f_max(i)) inifric(i) = one
376 IF (inifric(i) == one) mu = fric(i)
378 fmax =
max(zero,f(i) * tanh(half*mu*beta))
379 fmax =
min(fmax,abs(dfs(i)))
380 dfs(i)= sign(fmax,dfs(i))
382 ELSEIF (fric(i) > zero .AND. itabf(i) == 0)
THEN
383 ddx = exdp(i) * (v(1,nc2(i)) - v(1,nc1(i)))
384 . + eydp(i) * (v(2,nc2(i)) - v(2,nc1(i)))
385 . + ezdp(i) * (v(3,nc2(i)) - v(3,nc1(i)))
386 . + ex2dp(i)* (v(1,nc3(i)) - v(1,nc2(i)))
387 . + ey2dp(i)* (v(2,nc3(i)) - v(2,nc2(i)))
388 . + ez2dp(i)* (v(3,nc3(i)) - v(3,nc2(i)))
389 dfs(i)= dfs(i) + ddx * dt1 * xk(i)
390 beta = pi - acos(exdp(i)*ex2dp(i)+eydp(i)*ey2dp(i)+
392 fmax =
max(zero,f(i) * tanh(half*fric(i)*beta))
393 fmax =
min(fmax,abs(dfs(i)))
394 dfs(i)= sign(fmax,dfs(i))
402 1000
FORMAT(1x,
'-- RUPTURE OF SPRING ELEMENT NUMBER ',i10)
403 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)