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 . ADHER(*),FLAG_SLIPRING_UPDATE,ADD_NODE1(*),ADD_NODE2(*),RETRACTOR_ID(*),
79 . FLAG_RETRACTOR_UPDATE,FR_ID(*)
80 my_real DFS(*),DFS_OLD(*),(*),AL02(*),LMIN(*),RING_SLIP(*),
81 . XL0(*),DL(*),DLOLD(*),EXDP(*),EYDP(*),(*),
82 . XK(*),VX1(*),VY1(*),VZ1(*),VX2(*),VY2(*),(*),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(),EZ2DP(MVSIZ)
89 DOUBLE PRECISION,
INTENT(INOUT) :: AL0DP2(MVSIZ)
90 TYPE (SENSOR_STR_) ,
DIMENSION(NSENSOR) :: SENSOR_TAB
94 INTEGER I,J,,NODE2,NODE3,ANCHOR_NODE,FUNC,ISENS,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,ddv,dt11,fb,f1,f2,df
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))%MATERIAL_FLOW_OLD)
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
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)
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
297 IF (aldp(i) + fact*ddx*dt11 <
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)
356 fricd = fricd*get_u_func(
slipring(slipring_id(i))%IFUNC(1),xx,dxdy)
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)
511 slipring(slipring_id(i))%FRAM(fr_id(i))%DFS = dfs(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
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)
655 IF ((
retractor(retractor_id(i))%LOCKED == 0).OR.
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
789 ddf(i) = xk(i)*(epsn-eps1)
790 ring_slip(i) =ring_slip(i) + delta_lo