34 2 IPOS, GEO, IGEO, NPF,
36 4 AL0_ERR, X1DP, X2DP, NGL,
44#include "implicit_f.inc"
61 type(python_),
intent(inout) :: PYTHON
62 INTEGER,
INTENT(IN) :: NEL
63 INTEGER,
INTENT(IN) :: NFT
64 INTEGER (*),IGEO(NPROPGI,*),NGL(*),MGN(*)
67 . GEO(NPROPG,*),F(*),AL0(*),E(*),DL(*),TF(*),OFF(*),
68 . anim(*),ipos(*),v(3,*),
69 . al0_err(*),ex(mvsiz),ey(mvsiz),ez(mvsiz),xk(mvsiz),
70 . xm(mvsiz),xc(mvsiz),fscale(mvsiz)
71 DOUBLE PRECISION X1DP(3,*),X2DP(3,*)
72 my_real,
DIMENSION(NEL),
INTENT(INOUT) ::
78 INTEGER NC1(MVSIZ), NC2(MVSIZ),INDX(MVSIZ),IFUNC(MVSIZ),
79 . ifunc2(mvsiz),ifail(mvsiz),ileng(mvsiz),itens(mvsiz),
83 . dlold(mvsiz),dmn(mvsiz),dmx(mvsiz),xl0(mvsiz),df1,df2,
84 . dvl(mvsiz),fk(mvsiz),fd(mvsiz),ddl(mvsiz),gap(mvsiz),
85 . fscale2(mvsiz),ascale(mvsiz),ascale2(mvsiz),fold(mvsiz),
86 . nexp(mvsiz),fcut(mvsiz),
alpha(mvsiz),fkold(mvsiz)
89 DOUBLE PRECISION EXDP(MVSIZ),EYDP(MVSIZ),EZDP(MVSIZ),ALDP(MVSIZ),
91 LOGICAL :: ANY_PYTHON_FUNCTION
104 any_python_function = .false.
105 nfunct = python%FUNCT_OFFSET + python%nb_functs - python%nb_sensors
112 fscale(i) = geo(10,pid)
115 ascale2(i) = geo(18,pid)
117 ascale(i) = geo(39,pid)
118 ifail(i) = nint(geo(43,pid))
119 ileng(i) = nint(geo(93,pid))
120 fscale2(i) = geo(132,pid)
121 itens(i) = nint(geo(133,pid))
122 nexp(i) = geo(134,pid)
123 fsmooth(i) = nint(geo(135,pid))
124 fcut(i) = geo(136,pid
125 ifunc(i) = igeo(101,pid)
126 ifunc2(i) = igeo(102,pid)
127 IF (ifunc2(i) /= 0) xc(i) = geo(141,pid)
128 pyid = python_funct_id
130 any_python_function = .true.
133 pyid = python_funct_id(nfunct, ifunc2(i),npf)
135 any_python_function = .true.
145 exdp(i) = x2dp(1,i)-x1dp
146 eydp(i) = x2dp(2,i)-x1dp(2,i)
147 ezdp(i) = x2dp(3,i)-x1dp(3,i)
149 aldp(i) = sqrt(exdp(i)*exdp(i)+eydp(i)*eydp(i)+ezdp(i)*ezdp(i))
156 al0_err(i) = aldp(i)-al0(i)
162 al0dp(i) = al0dp(i) + al0_err(i)
166 sum =
max(aldp(i),em15)
167 exdp(i) = exdp(i)/sum
168 eydp(i) = eydp(i)/sum
169 ezdp(i) = ezdp(i)/sum
177 dl(i) = aldp(i) - al0dp(i)
183 IF (ileng(i) /= 0)
THEN
197 IF (dt11 == zero) dt11 = ep30
204 dlold(i) = dlold(i)/xl0(i)
206 ddl(i) = (dl(i)-dlold(i))
221 IF ((off(i) == one).AND.(dl(i) < gap(i) .OR. itens(i) > 0))
THEN
224 IF (ifunc(i) > 0)
THEN
225 fk(i) = fscale(i)*finter(ifunc(i),(dl(i)-gap(i))/ascale(i),npf,tf,df1)
226 ELSEIF(ifunc(i) < 0)
THEN
227 CALL python_call_funct1d(python, -ifunc(i),(dl(i)-gap(i))/ascale(i), fk(i))
229 IF (abs(dl(i)-gap(i)) > zero)
THEN
230 fk(i) = sign(one,(dl(i)-gap(i)))*xk(i)*exp(nexp(i)*log(abs(dl(i)-gap(i))))
235 IF (nexp(i) > one)
THEN
237 IF (abs(dlold(i)-gap(i)) > zero)
THEN
238 fkold(i) = sign(one,(dlold(i)-gap(i)))*xk(i)*exp(nexp(i)*log(abs(dlold(i)-gap(i))))
243 xk(i) =
max(abs((fk(i)-fkold(i))/sign(
max(abs(ddl(i)),em20),ddl(i))),xk(i))
249 IF (ifunc2(i) > 0)
THEN
250 fd(i) = fscale2(i)*finter(ifunc2(i),dvl(i)/ascale2(i),npf,tf,df2)
252 ELSEIF(ifunc2(i) < 0)
THEN
253 CALL python_call_funct1d(python, -ifunc2(i),dvl(i)/ascale2(i), fd(i))
259 IF (abs(fk(i)) > abs(fd(i)))
THEN
272 IF (fsmooth(i) > 0)
THEN
273 alpha(i) = (two*pi*dt11*fcut(i))/(two*pi*dt11*fcut(i) + one)
274 f(i) =
alpha(i)*f(i) + (one -
alpha(i))*fold(i)
280 IF (anim_fe(11) /= 0)
THEN
283 IF (ifail(i) == 1)
THEN
284 IF (itens(i) > 0)
THEN
285 damp = dl(i)/
max(dmx(i),em15)
289 damm = dl(i)/
min(dmn(i),-em15)
290 ELSEIF (ifail(i) == 2)
THEN
291 IF (itens(i) > 0)
THEN
292 damp = f(i)/
max(dmx(i),em15)
296 damm = f(i)/
min(dmn(i),-em15)
302 anim(j) =
min(anim(j),one)
308 e(i) = e(i) + (dl(i)-dlold(i))*(f(i)+fold(i)) * half
311 dlold(i) = dlold(i)*xl0(i)
323 IF (off(i) == one .AND. ifail(i) /= 0)
THEN
324 IF (ifail(i) == 1)
THEN
325 IF (itens(i) > 0)
THEN
326 crit(i) =
max(dl(i)/(dmx(i)*xl0(i)),dl(i)/(dmn(i)*xl0(i)))
327 crit(i) =
min(crit(i),one)
329 IF (dl(i) > dmx(i)*xl0(i) .OR. dl(i) < dmn(i)*xl0(i))
THEN
337 crit(i) = dl(i)/(dmn(i)*xl0(i))
338 crit(i) =
min(crit(i),one)
339 crit(i) =
max(crit(i),zero)
340 IF (dl(i) < dmn(i)*xl0(i))
THEN
348 ELSEIF (ifail(i) == 2)
THEN
349 IF (itens(i) > 0)
THEN
350 crit(i) =
max(f(i)/dmx(i),f(i)/dmn(i))
351 crit(i) =
min(crit(i),one)
352 crit(i) =
max(crit(i),zero)
353 IF (f(i) > dmx(i) .OR. f(i) < dmn(i))
THEN
361 crit(i) = f(i)/dmn(i)
362 crit(i) =
min(crit(i),one)
363 crit(i) =
max(crit(i),zero)
364 IF (f(i) < dmn(i))
THEN
378 WRITE(iout, 1000) ngl(i)
379 WRITE(istdo,1100) ngl(i),tt
380#include "lockoff.inc"
383 1000
FORMAT(1x,
'-- RUPTURE OF SPRING ELEMENT NUMBER ',i10)
384 1100
FORMAT(1x,
'-- RUPTURE OF SPRING ELEMENT :',i10,
' AT TIME :',g11.4)
subroutine r27def3(python, f, e, dl, al0, ipos, geo, igeo, npf, tf, v, off, anim, al0_err, x1dp, x2dp, ngl, mgn, ex, ey, ez, xk, xm, xc, fscale, nel, nft, crit)