42 1 OFF,AL0,AL02,LMIN,UPDATE_FLAG,
43 2 RING_SLIP,SLIPRING_ID,XL0,DL,DLOLD,
44 3 EXDP,EYDP,EZDP,X1DP,X2DP,
45 4 X3DP,ADHER,NC1,NC2,NC3,
46 5 FLAG_SLIPRING_UPDATE,ADD_NODE1,ADD_NODE2,VX1,VY1,
47 6 VZ1,VX2,VY2,VZ2,VX3,
48 7 VY3,VZ3,XC,RETRACTOR_ID,FLAG_RETRACTOR_UPDATE,
49 8 SENSOR_TAB,AL0DP,FR_ID,DDF,FX,FX2,
50 9 ALDP2,AL0DP2,EX2DP,EY2DP,EZ2DP,
51 A XL02,XK2,COMPT,INDEX2,NSENSOR)
58 USE retractor_table_inv_mod
59 USE retractor_table_inv2_mod
63#include "implicit_f.inc"
76 INTEGER ,
INTENT(IN) :: NSENSOR
77 INTEGER UPDATE_FLAG(*),SLIPRING_ID(*),NC1(*),NC2(*),NC3(*),SLIPRING_STRAND(*),
78 . (*),FLAG_SLIPRING_UPDATE,ADD_NODE1(*),ADD_NODE2(*),RETRACTOR_ID(*),
79 . FLAG_RETRACTOR_UPDATE,FR_ID(*)
80 my_real DFS(*),DFS_OLD(*),AL0(*),AL02(*),LMIN(*),RING_SLIP(*),
81 . XL0(*),DL(*),DLOLD(*),EXDP(*),EYDP(*),EZDP(*),
82 . XK(*),VX1(*),VY1(*),VZ1(*),VX2(*),VY2(*),VZ2(*),VX3(*),VY3(*),VZ3(*),XC(*),
84 INTEGER,
INTENT(IN) :: COMPT,INDEX2(MVSIZ)
85 DOUBLE PRECISION ALDP(*),X1DP(3,*),X2DP(3,*),X3DP(3,*),AL0DP(*)
86 my_real,
INTENT(IN) :: fx(mvsiz),fx2(mvsiz),xk2(mvsiz)
87 my_real,
INTENT(OUT) :: ddf(mvsiz),xl02(mvsiz)
88 DOUBLE PRECISION,
INTENT(IN) :: ALDP2(MVSIZ),EX2DP(MVSIZ),EY2DP(MVSIZ),EZ2DP(MVSIZ)
89 DOUBLE PRECISION,
INTENT(INOUT) :: AL0DP2(MVSIZ)
90 TYPE (SENSOR_STR_) ,
DIMENSION(NSENSOR) :: SENSOR_TAB
94 INTEGER I,J,FLAG_SENSOR_LOCK
95 INTEGER FLAG,NEW_NODE2,NEW_NODE1,FORCE_TENS_TYP,FLAG_NO_COUNT_PULL
96 my_real ddfs,beta,hh,hh2,fric,deltaf,dt11,fb
97 my_real tens,xscal,
norm,pres,vrel,vec1(3)
98 my_real fricd,frics,xx,dxdy,yy,get_u_func,fb2,angle
99 my_real ddx,ddx2,f_lock,f_unlock,pretens,xx1,xx2,cos_beta
100 my_real omega,eps1,eps2,epsn,fact
101 DOUBLE PRECISION DELTA_LO
107 IF(dt11==zero) dt11 = ep30
117 IF (off(i) == one)
THEN
119 IF (slipring_strand(i) == 1)
THEN
126 ddx = exdp(i) * (vx2(i) - vx1(i))
127 . + eydp(i) * (vy2(i) - vy1(i))
128 . + ezdp(i) * (vz2(i) - vz1(i))
130 IF (
slipring(slipring_id(i))%FRAM(fr_id(i))%STRAND_DIRECTION(1) == 1)
THEN
131 ddx2 = ex2dp(i)* (vx3(i) - vx2(i))
132 . + ey2dp(i)* (vy3(i) - vy2(i))
133 . + ez2dp(i)* (vz3(i) - vz2(i))
135 ddx2 = ex2dp(i)* (vx1(i) - vx3(i))
136 . + ey2dp(i)* (vy1(i) - vy3(i))
137 . + ez2dp(i)* (vz1(i) - vz3(i))
145 vrel = abs(
slipring(slipring_id(i))%FRAM(fr_id(i
147 IF (
slipring(slipring_id(i))%IFUNC(1) == 0)
THEN
148 fricd =
slipring(slipring_id(i))%FRIC
150 fricd =
slipring(slipring_id(i))%FRIC
151 xx = tt /
slipring(slipring_id(i))%FAC_D(1)
152 fricd = fricd*get_u_func(
slipring(slipring_id(i))%IFUNC(1),xx,dxdy)
155 IF (
slipring(slipring_id(i))%IFUNC(3) == 0)
THEN
156 frics =
slipring(slipring_id(i))%FRICS
158 frics =
slipring(slipring_id(i))%FRICS
159 xx = tt /
slipring(slipring_id(i))%FAC_S(1)
160 frics = frics*get_u_func(
slipring(slipring_id(i))%IFUNC(3),xx,dxdy)
166 vec1(1) = exdp(i) + ex2dp(i)
167 vec1(2) = eydp(i) + ey2dp(i)
168 vec1(3) = ezdp(i) + ez2dp(i)
169 norm =
max(em20,vec1(1)*vec1(1)+vec1(2)*vec1(2)+vec1(3)*vec1(3))
171 vec1(1) = vec1(1)/
norm
172 vec1(2) = vec1(2)/
norm
173 vec1(3) = vec1(3)/
norm
175 eps1 = (aldp(i)-al0dp(i))/
max(lmin(i),al0(i))
176 eps2 = (aldp2(i)-al0dp2(i))/
max(lmin(i),al02(i))
180 pres = fb*(exdp(i)*vec1(1)+eydp(i)*vec1(2)+ezdp(i)*vec1(3))
181 pres = pres + fb2*(ex2dp(i)*vec1(1)+ey2dp(i)*vec1(2)+ez2dp(i)*vec1(3))
184 IF (
slipring(slipring_id(i))%IFUNC(2) > 0)
THEN
185 xx = pres /
slipring(slipring_id(i))%FAC_D(2)
186 fricd = fricd +
slipring(slipring_id(i))%FAC_D(3)*get_u_func(
slipring(slipring_id(i))%IFUNC(2),xx,dxdy)
189 IF (
slipring(slipring_id(i))%IFUNC(4) > 0)
THEN
190 xx = pres /
slipring(slipring_id(i))%FAC_S(2)
191 frics = frics +
slipring(slipring_id(i))%FAC_S(3)*get_u_func(
slipring(slipring_id(i))%IFUNC(4),xx,dxdy)
194 IF (frics == zero)
THEN
197 fric = fricd + (frics - fricd)*exp(-
slipring(slipring_id(i))%DC*vrel)
202 IF (
slipring(slipring_id(i))%FRAM(fr_id(i))%ORIENTATION_NODE > 0)
THEN
203 angle =
slipring(slipring_id(i))%FRAM(fr_id(i))%ORIENTATION_ANGLE
204 fric = fric*(one +
slipring(slipring_id(i))%A*angle*angle)
210 ddfs = ddx*dt1*xk(i)/al0(i) + ddx2*dt1*xk2(i)/al02(i)
212 cos_beta = exdp(i)*ex2dp(i)+eydp(i)*ey2dp(i)+ ezdp(i)*ez2dp(i)
213 cos_beta = sign(
min(one,abs(cos_beta)),cos_beta)
214 beta = pi - acos(cos_beta)
216 IF (dfs(i) == zero)
THEN
217 hh = exp(beta*sign(fric,ddfs))
219 hh = exp(beta*sign(fric,dfs(i)))
223 omega = (hh*fb2-fb+xk(i)*eps1-hh*xk2(i)*eps2)/xk(i)
224 hh2 = hh*(xk2(i)/xk(i))
225 CALL solve_delta_l0(flag,delta_lo,hh2,aldp(i),aldp2(i),al0dp(i),al0dp2(i),lmin(i),omega)
227 fb = fx(i) + xk(i)*(aldp(i)-al0dp(i)-delta_lo)/(al0dp(i)+delta_lo) - xk(i)*eps1
229 IF (al0dp2(i) - delta_lo < lmin(i))
THEN
230 lmin(i) =
max(lmin(i),al02(i))
232 CALL solve_delta_l0(flag,delta_lo,hh2,aldp(i),aldp2(i),al0dp(i),al0dp2(i),lmin(i),omega)
233 ddfs = ddx*dt1*xk(i)/al0dp(i) + ddx2*dt1*xk2(i)/lmin(i)
234 fb = fx(i) + xk(i)*(aldp(i)-al0dp(i)-delta_lo)/(al0dp(i)+delta_lo) - xk(i)*eps1
235 ELSEIF (al0dp(i) + delta_lo < lmin(i))
THEN
236 lmin(i) =
max(lmin(i),al0(i))
238 CALL solve_delta_l0(flag,delta_lo,hh2,aldp(i),aldp2(i),al0dp(i),al0dp2(i),lmin(i),omega)
239 ddfs = ddx*dt1*xk(i)/lmin(i) + ddx2*dt1*xk2(i)/al0dp2(i)
240 fb = fx(i) + xk(i)*(aldp(i)-al0dp(i)-delta_lo)/lmin(i) - xk(i)*eps1
243 dfs(i) = dfs(i) + ddfs
244 deltaf = fb*(one-one/
max(em15,hh))
248 IF (
slipring(slipring_id(i))%SENSID > 0)
THEN
249 IF (tt > sensor_tab(
slipring(slipring_id(i))%SENSID)%TSTART) flag_sensor_lock = 1
252 IF ((abs(deltaf) >= abs(dfs(i))).OR.
253 . ((
slipring(slipring_id(i))%FL_FLAG==1).AND.(delta_lo > 0)).OR.
254 . ((
slipring(slipring_id(i))%FL_FLAG==2).AND.(delta_lo < 0)).OR.
255 . ((
slipring(slipring_id(i))%FRAM(fr_id(i))%LOCKED==1).AND.(delta_lo > 0)).OR.
256 . ((
slipring(slipring_id(i))%FRAM(fr_id(i))%LOCKED==2).AND.(delta_lo < 0)).OR.
257 . (flag_sensor_lock == 1))
THEN
266 al0dp(i) = al0dp(i) + delta_lo
267 al0dp2(i) = al0dp2(i) - delta_lo
271 epsn = (aldp(i)-al0dp(i))/
max(al0(i),lmin(i))
272 ddf(i) = xk(i)*(epsn-eps1)
273 IF (adher(i) == 1) ddf(i) = ddf(i) + dfs(i) - dfs_old(i)
274 xl0(i) =
max(al0(i),lmin(i))
275 xl02(i)=
max(al02(i),lmin(i))
278 slipring(slipring_id(i))%FRAM(fr_id(i))%VECTOR(1) = exdp(i)*
slipring(slipring_id(i))%FRAM(fr_id(i))%STRAND_DIRECTION(1)
279 slipring(slipring_id(i))%FRAM(fr_id(i))%VECTOR(2) = eydp(i)*
slipring(slipring_id(i))%FRAM(fr_id(i))%STRAND_DIRECTION(1)
280 slipring(slipring_id(i))%FRAM(fr_id(i))%VECTOR(3) = ezdp(i)*
slipring(slipring_id(i))%FRAM(fr_id(i))%STRAND_DIRECTION(1)
283 ring_slip(i) = ring_slip(i) + delta_lo
284 slipring(slipring_id(i))%FRAM(fr_id(i))%RINGSLIP =
slipring(slipring_id(i))%FRAM(fr_id(i))%RINGSLIP - delta_lo
285 slipring(slipring_id(i))%FRAM(fr_id(i))%MATERIAL_FLOW = delta_lo/dt11
286 slipring(slipring_id(i))%FRAM(fr_id(i))%BETA = beta
287 slipring(slipring_id(i))%FRAM(fr_id(i))%SLIP_FORCE(3) = pres
291 IF (
slipring(slipring_id(i))%NFRAM > 1)
THEN
297 IF (aldp(i) + fact*ddx*dt11 < zero)
THEN
298 IF (nc1(i)==
slipring(slipring_id(i))%FRAM(fr_id(i))%NODE(1))
THEN
299 IF (add_node1(i) > 0)
THEN
300 slipring(slipring_id(i))%FRAM(fr_id(i))%NODE_NEXT(1) = add_node1(i)
301 slipring(slipring_id(i))%FRAM(fr_id(i))%NODE_NEXT(2) = nc1(i)
302 slipring(slipring_id(i))%FRAM(fr_id(i))%NODE_NEXT(3) = nc2(i)
303 slipring(slipring_id(i))%FRAM(fr_id(i))%DFS = dfs(i)
304 slipring(slipring_id(i))%FRAM(fr_id(i))%UPDATE = 2
305 slipring(slipring_id(i))%FRAM(fr_id(i))%LOCKED = 0
307 slipring(slipring_id(i))%FRAM(fr_id(i))%LOCKED = 2
310 IF (add_node2(i) > 0)
THEN
311 slipring(slipring_id(i))%FRAM(fr_id(i))%NODE_NEXT(1) = add_node2(i)
312 slipring(slipring_id(i))%FRAM(fr_id(i))%NODE_NEXT(2) = nc2(i)
313 slipring(slipring_id(i))%FRAM(fr_id(i))%NODE_NEXT(3) = nc1(i)
314 slipring(slipring_id(i))%FRAM(fr_id(i))%DFS = dfs(i)
315 slipring(slipring_id(i))%FRAM(fr_id(i))%UPDATE = 2
316 slipring(slipring_id(i))%FRAM(fr_id(i))%LOCKED = 0
318 slipring(slipring_id(i))%FRAM(fr_id(i))%LOCKED = 1
323 ELSEIF (slipring_strand(i) == 2)
THEN
330 fric =
slipring(slipring_id(i))%FRIC
332 ddx = exdp(i) * (vx1(i) - vx2(i))
333 . + eydp(i) * (vy1(i) - vy2(i))
334 . + ezdp(i) * (vz1(i) - vz2(i))
336 IF (
slipring(slipring_id(i))%FRAM(fr_id(i))%STRAND_DIRECTION(2) == 1)
THEN
337 ddx2 = ex2dp(i)* (vx3(i) - vx1(i))
338 . + ey2dp(i)* (vy3(i) - vy1(i))
339 . + ez2dp(i)* (vz3(i) - vz1(i))
341 ddx2 = ex2dp(i)* (vx2(i) - vx3(i))
342 . + ey2dp(i)* (vy2(i) - vy3(i))
343 . + ez2dp(i)* (vz2(i) - vz3(i))
349 vrel = abs(
slipring(slipring_id(i))%FRAM(fr_id(i))%MATERIAL_FLOW_OLD)
351 IF (
slipring(slipring_id(i))%IFUNC(1) == 0)
THEN
352 fricd =
slipring(slipring_id(i))%FRIC
354 fricd =
slipring(slipring_id(i))%FRIC
355 xx = tt /
slipring(slipring_id(i))%FAC_D(1)
359 IF (
slipring(slipring_id(i))%IFUNC(3) == 0)
THEN
360 frics =
slipring(slipring_id(i))%FRICS
362 frics =
slipring(slipring_id(i))%FRICS
363 xx = tt /
slipring(slipring_id(i))%FAC_S(1)
364 frics = frics*get_u_func(
slipring(slipring_id(i))%IFUNC(3),xx,dxdy)
370 vec1(1) = exdp(i) + ex2dp(i)
371 vec1(2) = eydp(i) + ey2dp(i)
372 vec1(3) = ezdp(i) + ez2dp(i)
373 norm =
max(em20,vec1(1)*vec1(1)+vec1(2)*vec1(2)+vec1(3)*vec1(3))
375 vec1(1) = vec1(1)/
norm
376 vec1(2) = vec1(2)/
norm
377 vec1(3) = vec1(3)/
norm
379 eps1 = (aldp(i)-al0dp(i))/
max(lmin(i),al0(i))
380 eps2 = (aldp2(i)-al0dp2(i))/
max(lmin(i),al02(i))
384 pres = fb*(exdp(i)*vec1(1)+eydp(i)*vec1(2)+ezdp(i)*vec1(3))
385 pres = pres + fb2*(ex2dp(i)*vec1(1)+ey2dp(i)*vec1(2)+ez2dp(i)*vec1(3))
388 IF (
slipring(slipring_id(i))%IFUNC(2) > 0)
THEN
389 xx = pres /
slipring(slipring_id(i))%FAC_D(2)
390 fricd = fricd+
slipring(slipring_id(i))%FAC_D(3)*get_u_func(
slipring(slipring_id(i))%IFUNC(2),xx,dxdy)
393 IF (
slipring(slipring_id(i))%IFUNC(4) > 0)
THEN
394 xx = pres /
slipring(slipring_id(i))%FAC_S(2)
395 frics = frics+
slipring(slipring_id(i))%FAC_S(3)*get_u_func(
slipring(slipring_id(i))%IFUNC(4),xx,dxdy)
398 IF (frics == zero)
THEN
401 fric = fricd + (frics - fricd)*exp(-
slipring(slipring_id(i))%DC*vrel)
406 IF (
slipring(slipring_id(i))%FRAM(fr_id(i))%ORIENTATION_NODE > 0)
THEN
407 angle =
slipring(slipring_id(i))%FRAM(fr_id(i))%ORIENTATION_ANGLE
408 fric = fric*(one +
slipring(slipring_id(i))%A*angle*angle)
414 ddfs = ddx*dt1*xk(i)/al0(i) + ddx2*dt1*xk2(i)/al02(i)
416 cos_beta = exdp(i)*ex2dp(i)+eydp(i)*ey2dp(i)+ ezdp(i)*ez2dp(i)
417 cos_beta = sign(
min(one,abs(cos_beta)),cos_beta)
418 beta = pi - acos(cos_beta)
420 IF (dfs(i) == zero)
THEN
421 hh = exp(beta*sign(fric,ddfs))
423 hh = exp(beta*sign(fric,dfs(i)))
427 omega = (hh*fb-fb2+xk2(i)*eps2-hh*xk(i)*eps1)/xk2(i)
428 hh2 = hh*(xk(i)/xk2(i))
429 CALL solve_delta_l0(flag,delta_lo,hh2,aldp2(i),aldp(i),al0dp2(i),al0dp(i),lmin(i),omega)
431 fb = fx(i) + xk(i)*(aldp(i)-al0dp(i)+delta_lo)/(al0dp(i)-delta_lo) - xk(i)*eps1
433 IF (al0dp(i) - delta_lo < lmin(i))
THEN
434 lmin(i) =
max(lmin(i),al0(i))
436 CALL solve_delta_l0(flag,delta_lo,hh2,aldp2(i),aldp(i),al0dp2(i),al0dp(i),lmin(i),omega)
437 ddfs = ddx*dt1*xk(i)/lmin(i) + ddx2*dt1*xk2(i)/al0dp2(i)
438 fb = fx(i) + xk(i)*(aldp(i)-al0dp(i)+delta_lo)/lmin(i) - xk(i)*eps1
439 ELSEIF (al0dp2(i) + delta_lo < lmin(i))
THEN
440 lmin(i) =
max(lmin(i),al02(i))
442 CALL solve_delta_l0(flag,delta_lo,hh2,aldp2(i),aldp(i),al0dp2(i),al0dp(i),lmin(i),omega)
443 ddfs = ddx*dt1*xk(i)/al0(i) + ddx2*dt1*xk2(i)/lmin(i)
444 fb = fx(i) + xk(i)*(aldp(i)-al0dp(i)+delta_lo)/(al0dp(i)-delta_lo) - xk(i)*eps1
447 dfs(i) = dfs(i) + ddfs
452 IF (
slipring(slipring_id(i))%SENSID > 0)
THEN
453 IF (tt > sensor_tab(
slipring(slipring_id(i))%SENSID)%TSTART) flag_sensor_lock = 1
456 IF ((abs(deltaf) >= abs(dfs(i))).OR.
457 . ((
slipring(slipring_id(i))%FL_FLAG==1).AND.(delta_lo > 0)).OR.
458 . ((
slipring(slipring_id(i))%FL_FLAG==2).AND.(delta_lo < 0)).OR.
459 . ((
slipring(slipring_id(i))%FRAM(fr_id(i))%LOCKED==1).AND.(delta_lo > 0)).OR.
460 . ((
slipring(slipring_id(i))%FRAM(fr_id(i))%LOCKED==2).AND.(delta_lo < 0)).OR.
461 . (flag_sensor_lock ==1))
THEN
469 al0dp2(i) = al0dp2(i) + delta_lo
470 al0dp(i) = al0dp(i) - delta_lo
474 epsn = (aldp(i)-al0dp(i))/
max(al0(i),lmin(i))
475 ddf(i) = xk(i)*(epsn-eps1)
476 IF (adher(i) == 1) ddf(i) = ddf(i) - dfs(i) + dfs_old(i)
477 xl0(i) =
max(al0(i),lmin(i))
478 xl02(i)=
max(al02(i),lmin(i))
482 slipring(slipring_id(i))%FRAM(fr_id(i))%VECTOR(4) = exdp(i)*
slipring(slipring_id(i))%FRAM(fr_id(i))%STRAND_DIRECTION(2)
483 slipring(slipring_id(i))%FRAM(fr_id(i))%VECTOR(5) = eydp(i)*
slipring(slipring_id(i))%FRAM(fr_id(i))%STRAND_DIRECTION(2)
484 slipring(slipring_id(i))%FRAM(fr_id(i))%VECTOR(6) = ezdp(i)*
slipring(slipring_id(i))%FRAM(fr_id(i))%STRAND_DIRECTION(2)
488 IF (
slipring(slipring_id(i))%NFRAM > 1)
THEN
494 IF (aldp(i) - fact*ddx*dt1 < zero)
THEN
495 IF (nc1(i)==
slipring(slipring_id(i))%FRAM(fr_id(i))%NODE(2))
THEN
496 IF (add_node2(i) > 0)
THEN
497 slipring(slipring_id(i))%FRAM(fr_id(i))%NODE_NEXT(1) = nc1(i)
498 slipring(slipring_id(i))%FRAM(fr_id(i))%NODE_NEXT(2) = nc2(i)
499 slipring(slipring_id(i))%FRAM(fr_id(i))%NODE_NEXT(3) = add_node2(i)
500 slipring(slipring_id(i))%FRAM(fr_id(i))%DFS = dfs(i)
501 slipring(slipring_id(i))%FRAM(fr_id(i))%UPDATE = -2
502 slipring(slipring_id(i))%FRAM(fr_id(i))%LOCKED = 0
504 slipring(slipring_id(i))%FRAM(fr_id(i))%LOCKED = 1
507 IF (add_node1(i) > 0)
THEN
508 slipring(slipring_id(i))%FRAM(fr_id(i))%NODE_NEXT(1) = nc2(i)
509 slipring(slipring_id(i))%FRAM(fr_id(i))%NODE_NEXT(2) = nc1(i)
510 slipring(slipring_id(i))%FRAM(fr_id(i))%NODE_NEXT(3) = add_node1(i)
512 slipring(slipring_id(i))%FRAM(fr_id(i))%UPDATE = -2
513 slipring(slipring_id(i))%FRAM(fr_id(i))%LOCKED = 0
515 slipring(slipring_id(i))%FRAM(fr_id(i))%LOCKED = 2
520 ELSEIF (slipring_strand(i) == -1)
THEN
525 eps1 = (aldp(i)-al0dp(i))/
max(em20,
max(al0(i),lmin(i)))
528 f_unlock =
retractor(retractor_id(i))%UNLOCK_FORCE
531 IF ((
retractor(retractor_id(i))%ISENS(2) > 0).AND.
532 . (
retractor(retractor_id(i))%PRETENS_ACTIV == 0))
THEN
533 IF (tt > sensor_tab(
retractor(retractor_id(i))%ISENS(2))%TSTART)
THEN
534 retractor(retractor_id(i))%PRETENS_ACTIV = 1
535 retractor(retractor_id(i))%PRETENS_TIME = tt
541 IF (
retractor(retractor_id(i))%PRETENS_ACTIV == 1)
THEN
542 xx = (tt -
retractor(retractor_id(i))%PRETENS_TIME) /
retractor(retractor_id(i))%FAC(4)
543 pretens =
retractor(retractor_id(i))%FAC(3)*get_u_func(
retractor(retractor_id(i))%IFUNC(3),xx,dxdy)
544 IF (
retractor(retractor_id(i))%TENS_TYP == 1)
THEN
546 IF (
retractor(retractor_id(i))%FORCE > zero)
THEN
548 IF (f_lock >
retractor(retractor_id(i))%FORCE)
THEN
550 yy = f_lock/
retractor(retractor_id(i))%FAC(1)
551 CALL retractor_table_inv(
retractor(retractor_id(i))%TABLE(1),xx,yy)
552 xx = xx*
retractor(retractor_id(i))%FAC(2)
554 retractor(retractor_id(i))%PRETENS_ACTIV = -1
555 retractor(retractor_id(i))%PRETENS_PULL = zero
558 ELSEIF (
retractor(retractor_id(i))%TENS_TYP == 2)
THEN
561 f_unlock =
max(
retractor(retractor_id(i))%UNLOCK_FORCE,pretens)
562 ELSEIF (
retractor(retractor_id(i))%TENS_TYP == 3)
THEN
565 IF (
retractor(retractor_id(i))%PRETENS_PULL >
retractor(retractor_id(i))%PULLOUT)
THEN
568 yy = f_lock/
retractor(retractor_id(i))%FAC(1)
569 CALL retractor_table_inv(
retractor(retractor_id(i))%TABLE(1),xx,yy)
570 xx = xx*
retractor(retractor_id(i))%FAC(2)
572 retractor(retractor_id(i))%PRETENS_ACTIV = -1
573 retractor(retractor_id(i))%PRETENS_PULL = zero
575 f_unlock =
max(
retractor(retractor_id(i))%UNLOCK_FORCE,pretens)
576 ELSEIF (
retractor(retractor_id(i))%TENS_TYP == 4)
THEN
579 IF (
retractor(retractor_id(i))%LOCKED == 1) f_lock = f_lock - pretens
580 f_unlock =
retractor(retractor_id(i))%UNLOCK_FORCE + pretens
581 ELSEIF (
retractor(retractor_id(i))%TENS_TYP == 5)
THEN
583 IF (
retractor(retractor_id(i))%FORCE > zero)
THEN
585 IF (f_lock >
retractor(retractor_id(i))%FORCE)
THEN
587 yy = f_lock/
retractor(retractor_id(i))%FAC(1)
588 CALL retractor_table_inv(
retractor(retractor_id(i))%TABLE(1),xx,yy)
589 xx = xx*
retractor(retractor_id(i))%FAC(2)
590 retractor(retractor_id(i))%LOCK_PULL = xx
591 retractor(retractor_id(i))%PRETENS_ACTIV = -1
592 retractor(retractor_id(i))%PRETENS_PULL = zero
599 flag_no_count_pull = 0
600 IF (
retractor(retractor_id(i))%LOCKED == 1)
THEN
602 IF ((f_lock <=
retractor(retractor_id(i))%UNLOCK_FORCE).AND.
603 . (
retractor(retractor_id(i))%LOCKED_FREEZE == 0))
THEN
604 retractor(retractor_id(i))%LOCKED_FREEZE = 1
606 ELSEIF ((
retractor(retractor_id(i))%LOCKED_FREEZE == 1).AND.
607 . (
retractor(retractor_id(i))%RINGSLIP >
retractor(retractor_id(i))%LOCK_PULL_SAV))
THEN
608 retractor(retractor_id(i))%LOCKED_FREEZE = 0
609 retractor(retractor_id(i))%LOCK_PULL_SAV = zero
611 IF (
retractor(retractor_id(i))%LOCKED_FREEZE == 1)
THEN
612 flag_no_count_pull = 1
613 ELSEIF (f_lock >
retractor(retractor_id(i))%LOCK_YIELD_FORCE)
THEN
617 yy = yy*
retractor(retractor_id(i))%FAC(1)
619 IF ((force_tens_typ == 2).AND.(pretens > yy))
THEN
622 ELSEIF (force_tens_typ == 4)
THEN
625 CALL solve_delta_l02(delta_lo,dxdy,yy,xk(i),aldp(i),al0dp(i),lmin(i),fb)
626 epsn = (aldp(i)-al0dp(i)-delta_lo)/
max(lmin(i),al0dp(i)+delta_lo)
627 fb = fx(i) + xk(i)*(epsn-eps1)
628 retractor(retractor_id(i))%LOCK_YIELD_FORCE = fb
629 retractor(retractor_id(i))%LOCK_OFFSET = zero
632 IF (
retractor(retractor_id(i))%LOCK_OFFSET == zero)
THEN
634 CALL retractor_table_inv2(
retractor(retractor_id(i))%TABLE(1),xx1,yy,
retractor(retractor_id(i))%LOCK_PULL)
635 CALL retractor_table_inv(
retractor(retractor_id(i))%TABLE(2),xx2,yy)
640 yy = yy*
retractor(retractor_id(i))%FAC(1)
642 IF ((force_tens_typ == 2).AND.(pretens > yy))
THEN
645 ELSEIF (force_tens_typ == 4)
THEN
648 CALL solve_delta_l02(delta_lo,dxdy,yy,xk(i),aldp(i),al0dp(i),lmin(i),fb)
649 epsn = (aldp(i)-al0dp(i)-delta_lo)/
max(lmin(i),al0dp(i)+delta_lo)
650 fb = fx(i) + xk(i)*(epsn-eps1)
656 . (
retractor(retractor_id(i))%LOCKED_FREEZE == 1))
THEN
658 tens = (f_unlock - fb) / xk(i) + eps1
659 delta_lo = (aldp(i)-al0dp(i)*(tens + one))/(tens + one)
661 IF (al0dp(i) + delta_lo < lmin(i))
THEN
662 lmin(i) =
max(lmin(i),al0(i))
663 delta_lo = aldp(i)-al0dp(i)-xl0(i)*tens
669 IF (
retractor(retractor_id(i))%PRETENS_ACTIV == 1)
THEN
670 IF (
retractor(retractor_id(i))%TENS_TYP == 1)
THEN
671 IF (
retractor(retractor_id(i))%FORCE > zero)
THEN
672 delta_lo = -pretens +
retractor(retractor_id(i))%PRETENS_PULL
673 retractor(retractor_id(i))%PRETENS_PULL = pretens
675 ELSEIF (
retractor(retractor_id(i))%TENS_TYP == 5)
THEN
676 IF (
retractor(retractor_id(i))%FORCE > zero)
THEN
677 delta_lo = (-pretens +
retractor(retractor_id(i))%PRETENS_PULL)/fb
678 retractor(retractor_id(i))%PRETENS_PULL = pretens
685 IF (delta_lo > zero)
THEN
686 delta_lo =
min(delta_lo,0.01*
retractor(retractor_id(i))%ELEMENT_SIZE)
687 ELSEIF (delta_lo < zero)
THEN
688 delta_lo =
max(delta_lo,-0.01*
retractor(retractor_id(i))%ELEMENT_SIZE)
694 IF (
retractor(retractor_id(i))%ISENS(1) > 0)
THEN
695 IF (tt > sensor_tab(
retractor(retractor_id(i))%ISENS(1))%TSTART)
THEN
698 IF (
retractor(retractor_id(i))%LOCKED == 0)
THEN
702 retractor(retractor_id(i))%LOCK_PULL = zero
708 IF (flag_no_count_pull == 0)
THEN
709 IF ((
retractor(retractor_id(i))%LOCKED == 0).AND.(flag_sensor_lock == 1))
THEN
712 ELSEIF ((
retractor(retractor_id(i))%LOCKED == 1).OR.(flag_sensor_lock == 1))
THEN
713 retractor(retractor_id(i))%LOCK_PULL =
retractor(retractor_id(i))%LOCK_PULL + delta_lo
715 retractor(retractor_id(i))%LOCK_PULL = zero
720 IF (
retractor(retractor_id(i))%PRETENS_ACTIV == 1)
THEN
721 IF (
retractor(retractor_id(i))%TENS_TYP == 3)
THEN
722 retractor(retractor_id(i))%PRETENS_PULL =
retractor(retractor_id(i))%PRETENS_PULL + delta_lo
728 IF (abs(delta_lo) > zero)
THEN
730 ddx = exdp(i) * (vx2(i) - vx1(i))
731 . + eydp(i) * (vy2(i) - vy1(i))
732 . + ezdp(i) * (vz2(i) - vz1(i))
735 xscal = -exdp(i)*
retractor(retractor_id(i))%VECTOR(1)*
retractor(retractor_id(i))%STRAND_DIRECTION
736 . -eydp(i)*
retractor(retractor_id(i))%VECTOR(2)*
retractor(retractor_id(i))%STRAND_DIRECTION
737 . -ezdp(i)*
retractor(retractor_id(i))%VECTOR(3)*
retractor(retractor_id(i))%STRAND_DIRECTION
739 retractor(retractor_id(i))%VECTOR(1) = -exdp(i)*
retractor(retractor_id(i))%STRAND_DIRECTION
740 retractor(retractor_id(i))%VECTOR(2) = -eydp(i)*
retractor(retractor_id(i))%STRAND_DIRECTION
741 retractor(retractor_id(i))%VECTOR(3) = -ezdp(i)*
retractor(retractor_id(i))%STRAND_DIRECTION
745 IF (
retractor(retractor_id(i))%STRAND_DIRECTION == 1)
THEN
746 new_node2 = add_node2(i)
747 new_node1 = add_node1(i)
749 new_node2 = add_node1(i)
750 new_node1 = add_node2(i)
753 IF (update_flag(i) == 0)
THEN
754 IF ((ring_slip(i)+delta_lo>
retractor(retractor_id(i))%ELEMENT_SIZE).AND.(new_node2 > 0))
THEN
757 retractor(retractor_id(i))%MATERIAL_FLOW = delta_lo/dt11
758 IF (
retractor(retractor_id(i))%STRAND_DIRECTION == 1)
THEN
759 retractor(retractor_id(i))%NODE_NEXT(1) = nc2(i)
760 retractor(retractor_id(i))%NODE_NEXT(2) = add_node2(i)
762 retractor(retractor_id(i))%NODE_NEXT(1) = nc1(i)
763 retractor(retractor_id(i))%NODE_NEXT(2) = add_node1(i)
765 ELSEIF ((aldp(i) + 1.3*ddx*dt1 < zero).OR.(xscal < 0.5))
THEN
766 IF (new_node1 > 0)
THEN
769 retractor(retractor_id(i))%MATERIAL_FLOW = delta_lo/dt11
770 IF (
retractor(retractor_id(i))%STRAND_DIRECTION == 1)
THEN
771 retractor(retractor_id(i))%NODE_NEXT(1) = add_node1(i)
772 retractor(retractor_id(i))%NODE_NEXT(2) = nc1(i)
774 retractor(retractor_id(i))%NODE_NEXT(1) = add_node2(i)
775 retractor(retractor_id(i))%NODE_NEXT(2) = nc2(i)
784 al0dp(i) = al0dp(i) + delta_lo
786 xl0(i)=
max(lmin(i),al0(i))
788 epsn = (aldp(i)-al0dp(i))/
max(al0(i),lmin(i))
789 ddf(i) = xk(i)*(epsn-eps1)
790 ring_slip(i) =ring_slip(i) + delta_lo
subroutine r23l114def3(python, skew, ipm, igeo, mid, pid, geo, uparam, fx, fy, fz, e, dx, dy, dz, npf, tf, off, dpx, dpy, dpz, dpx2, dpy2, dpz2, fxep, fyep, fzep, x0, y0, z0, xmom, ymom, zmom, rx, ry, rz, rpx, rpy, rpz, xmep, ymep, zmep, rpx2, rpy2, rpz2, anim, posx, posy, posz, posxx, posyy, poszz, fr_wave, e6, nel, exx2, eyx2, ezx2, exy2, eyy2, ezy2, exz2, eyz2, ezz2, al2dp, ngl, crit_new, x0_err, aldp, yieldx, yieldy, yieldz, yieldx2, yieldy2, yieldz2, exx, eyx, ezx, exy, eyy, ezy, exz, eyz, ezz, xcr, rx1, ry1, rz1, rx2, ry2, rz2, xin, ak, xm, xkm, xcm, xkr, vx1, vx2, vy1, vy2, vz1, vz2, nuvar, uvar, mass, dx0, dy0, dz0, rx0, ry0, rz0, slipring_strand, dfs, ring_slip, x02, lmin, slipring_id, update_flag, retractor_id, add_node1, add_node2, nc1, nc2, nc3, x1dp, x2dp, x3dp, vx3, vy3, vz3, flag_slipring_update, flag_retractor_update, sensor_tab, uiner, fr_id, fram_factor, eps_old, fx_b2, dpx_b2, yieldx_b2, xx_old_b2, fxep_b2, posx_b2, eps_old_b2, nft, nsensor, stf, sanin, iresp, snpc)