52
53
54
55 USE elbufdef_mod
57 USE sensor_mod
58 USE retractor_table_inv_mod
59 USE retractor_table_inv2_mod
60
61
62
63#include "implicit_f.inc"
64
65
66
67#include "mvsiz_p.inc"
68
69
70
71#include "com04_c.inc"
72#include "com08_c.inc"
73
74
75
76 INTEGER ,INTENT(IN) :: NSENSOR
77 INTEGER (*),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(*),al0(*),al02(*),lmin(*),ring_slip(*),
81 . xl0(*),dl(*),dlold(*),exdp(*),eydp(*),ezdp(*),
82 . xk(*),vx1(*),vy1(*),vz1(*),vx2(*),vy2(*),vz2(*),vx3(*),vy3(*),vz3(*),xc(*),
83 . off(*)
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
91
92
93
94 INTEGER I,J,NODE1,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
102
103 EXTERNAL get_u_func
104
105
106 dt11 = dt1
107 IF(dt11==zero) dt11 = ep30
108
109
110
111
112
113 DO j=1,compt
114
115 i = index2(j)
116
117 IF (off(i) == one) THEN
118
119 IF (slipring_strand(i) == 1) THEN
120
121
122
123
124
125
126 ddx = exdp(i) * (vx2(i) - vx1(i))
127 . + eydp(i) * (vy2(i) - vy1(i))
128 . + ezdp(i) * (vz2(i) - vz1(i))
129
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))
134 ELSE
135 ddx2 = ex2dp(i)* (vx1(i) - vx3(i))
136 . + ey2dp(i)* (vy1(i) - vy3(i))
137 . + ez2dp(i)* (vz1(i) - vz3(i))
138 ENDIF
139
140
141
142
143
144
145 vrel = abs(
slipring(slipring_id(i))%FRAM(fr_id(i))%MATERIAL_FLOW_OLD)
146
147 IF (
slipring(slipring_id(i))%IFUNC(1) == 0)
THEN
148 fricd =
slipring(slipring_id(i))%FRIC
149 ELSE
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)
153 ENDIF
154
155 IF (
slipring(slipring_id(i))%IFUNC(3) == 0)
THEN
156 frics =
slipring(slipring_id(i))%FRICS
157 ELSE
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)
161 ENDIF
162
163
164
165
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
174
175 eps1 = (aldp(i)-al0dp(i))/
max(lmin(i),al0(i))
176 eps2 = (aldp2(i)-al0dp2(i))/
max(lmin(i),al02(i))
177
178 fb = fx(i)
179 fb2 = fx2(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))
182
183
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)
187 ENDIF
188
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)
192 ENDIF
193
194 IF (frics == zero) THEN
195 fric = fricd
196 ELSE
197 fric = fricd + (frics - fricd)*exp(-
slipring(slipring_id(i))%DC*vrel)
198 ENDIF
199
200
201
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)
205 ENDIF
206
207
208
209 dfs_old(i) = dfs(i)
210 ddfs = ddx*dt1*xk(i)/al0(i) + ddx2*dt1*xk2(i)/al02(i)
211
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)
215
216 IF (dfs(i) == zero) THEN
217 hh = exp(beta*sign(fric,ddfs))
218 ELSE
219 hh = exp(beta*sign(fric,dfs(i)))
220 ENDIF
221
222 flag = 0
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)
226
227 fb = fx(i) + xk(i)*(aldp(i)-al0dp(i)-delta_lo)/(al0dp(i)+delta_lo) - xk(i)*eps1
228
229 IF (al0dp2(i) - delta_lo < lmin(i)) THEN
230 lmin(i) =
max(lmin(i),al02(i))
231 flag = 1
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))
237 flag = 2
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
241 ENDIF
242
243 dfs(i) = dfs(i) + ddfs
244 deltaf = fb*(one-one/
max(em15,hh))
245
246
247 flag_sensor_lock = 0
248 IF (
slipring(slipring_id(i))%SENSID > 0)
THEN
249 IF (tt > sensor_tab(
slipring(slipring_id(i))%SENSID)%TSTART) flag_sensor_lock = 1
250 ENDIF
251
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
258
259 adher(i) = 1
260 delta_lo = 0
261 ELSE
262 dfs(i) = deltaf
263 ENDIF
264
265
266 al0dp(i) = al0dp(i) + delta_lo
267 al0dp2(i) = al0dp2(i) - delta_lo
268 al0(i) = al0dp(i)
269 al02(i) = al0dp2(i)
270
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))
276 update_flag(i) = 0
277
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)
281
282
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
288
289
290
291 IF (
slipring(slipring_id(i))%NFRAM > 1)
THEN
292 fact = 6.0
293 ELSE
294 fact = 1.3
295 ENDIF
296
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
306 ELSE
307 slipring(slipring_id(i))%FRAM(fr_id(i))%LOCKED = 2
308 ENDIF
309 ELSE
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
317 ELSE
318 slipring(slipring_id(i))%FRAM(fr_id(i))%LOCKED = 1
319 ENDIF
320 ENDIF
321 ENDIF
322
323 ELSEIF (slipring_strand(i) == 2) THEN
324
325
326
327
328
329
330 fric =
slipring(slipring_id(i))%FRIC
331
332 ddx = exdp(i) * (vx1(i) - vx2(i))
333 . + eydp(i) * (vy1(i) - vy2(i))
334 . + ezdp(i) * (vz1(i) - vz2(i))
335
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))
340 ELSE
341 ddx2 = ex2dp(i)* (vx2(i) - vx3(i))
342 . + ey2dp(i)* (vy2(i) - vy3(i))
343 . + ez2dp(i)* (vz2(i) - vz3(i))
344 ENDIF
345
346
347
348
349 vrel = abs(
slipring(slipring_id(i))%FRAM(fr_id(i))%MATERIAL_FLOW_OLD)
350
351 IF (
slipring(slipring_id(i))%IFUNC(1) == 0)
THEN
352 fricd =
slipring(slipring_id(i))%FRIC
353 ELSE
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)
357 ENDIF
358
359 IF (
slipring(slipring_id(i))%IFUNC(3) == 0)
THEN
360 frics =
slipring(slipring_id(i))%FRICS
361 ELSE
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)
365 ENDIF
366
367
368
369
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
378
379 eps1 = (aldp(i)-al0dp(i))/
max(lmin(i),al0(i))
380 eps2 = (aldp2(i)-al0dp2(i))/
max(lmin(i),al02(i))
381
382 fb = fx(i)
383 fb2 = fx2(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))
386
387
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)
391 ENDIF
392
393 IF (
slipring(slipring_id(i))%IFUNC(4) > 0)
THEN
395 frics = frics+
slipring(slipring_id(i))%FAC_S(3)*get_u_func(
slipring(slipring_id(i))%IFUNC(4),xx,dxdy)
396 ENDIF
397
398 IF (frics == zero) THEN
399 fric = fricd
400 ELSE
401 fric = fricd + (frics - fricd)*exp(-
slipring(slipring_id(i))%DC*vrel)
402 ENDIF
403
404
405
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)
409 ENDIF
410
411
412
413 dfs_old(i) = dfs(i)
414 ddfs = ddx*dt1*xk(i)/al0(i) + ddx2*dt1*xk2(i)/al02(i)
415
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)
419
420 IF (dfs(i) == zero) THEN
421 hh = exp(beta*sign(fric,ddfs))
422 ELSE
423 hh = exp(beta*sign(fric,dfs(i)))
424 ENDIF
425
426 flag = 0
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)
430
431 fb = fx(i) + xk(i)*(aldp(i)-al0dp(i)+delta_lo)/(al0dp(i)-delta_lo) - xk(i)*eps1
432
433 IF (al0dp(i) - delta_lo < lmin(i)) THEN
434 lmin(i) =
max(lmin(i),al0(i))
435 flag = 1
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))
441 flag = 2
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
445 ENDIF
446
447 dfs(i) = dfs(i) + ddfs
448 deltaf = fb*(hh-one)
449
450
451 flag_sensor_lock = 0
452 IF (
slipring(slipring_id(i))%SENSID > 0)
THEN
453 IF (tt > sensor_tab(
slipring(slipring_id(i))%SENSID)%TSTART) flag_sensor_lock = 1
454 ENDIF
455
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
462
463 adher(i) = 1
464 delta_lo = 0
465 ELSE
466 dfs(i) = deltaf
467 ENDIF
468
469 al0dp2(i) = al0dp2(i) + delta_lo
470 al0dp(i) = al0dp(i) - delta_lo
471 al02(i) = al0dp2(i)
472 al0(i) = al0dp(i)
473
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))
479 update_flag(i) = 0
480
481 ring_slip(i) = 0
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)
485
486
487
488 IF (
slipring(slipring_id(i))%NFRAM > 1)
THEN
489 fact = 6.0
490 ELSE
491 fact = 1.3
492 ENDIF
493
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
503 ELSE
504 slipring(slipring_id(i))%FRAM(fr_id(i))%LOCKED = 1
505 ENDIF
506 ELSE
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
514 ELSE
515 slipring(slipring_id(i))%FRAM(fr_id(i))%LOCKED = 2
516 ENDIF
517 ENDIF
518 ENDIF
519
520 ELSEIF (slipring_strand(i) == -1) THEN
521
522
523
524
525 eps1 = (aldp(i)-al0dp(i))/
max(em20,
max(al0(i),lmin(i)))
526 fb = fx(i)
527 f_lock = fb
528 f_unlock =
retractor(retractor_id(i))%UNLOCK_FORCE
529
530
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
536 ENDIF
537 ENDIF
538
539 force_tens_typ = 0
540 pretens = zero
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)
544 IF (
retractor(retractor_id(i))%TENS_TYP == 1)
THEN
545
546 IF (
retractor(retractor_id(i))%FORCE > zero)
THEN
547
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
556 ENDIF
557 ENDIF
558 ELSEIF (
retractor(retractor_id(i))%TENS_TYP == 2)
THEN
559
560 force_tens_typ = 2
561 f_unlock =
max(
retractor(retractor_id(i))%UNLOCK_FORCE,pretens)
562 ELSEIF (
retractor(retractor_id(i))%TENS_TYP == 3)
THEN
563
564 force_tens_typ = 2
565 IF (
retractor(retractor_id(i))%PRETENS_PULL >
retractor(retractor_id(i))%PULLOUT)
THEN
566
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
574 ENDIF
575 f_unlock =
max(
retractor(retractor_id(i))%UNLOCK_FORCE,pretens)
576 ELSEIF (
retractor(retractor_id(i))%TENS_TYP == 4)
THEN
577
578 force_tens_typ = 4
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
582
583 IF (
retractor(retractor_id(i))%FORCE > zero)
THEN
584
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
593 ENDIF
594 ENDIF
595 ENDIF
596 ENDIF
597
598
599 flag_no_count_pull = 0
600 IF (
retractor(retractor_id(i))%LOCKED == 1)
THEN
601
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
610 ENDIF
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
614
617 yy = yy*
retractor(retractor_id(i))%FAC(1)
619 IF ((force_tens_typ == 2).AND.(pretens > yy)) THEN
620 yy = pretens
621 dxdy = zero
622 ELSEIF (force_tens_typ == 4) THEN
623 yy = yy + pretens
624 ENDIF
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
630 ELSE
631
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)
637 ENDIF
638
640 yy = yy*
retractor(retractor_id(i))%FAC(1)
642 IF ((force_tens_typ == 2).AND.(pretens > yy)) THEN
643 yy = pretens
644 dxdy = zero
645 ELSEIF (force_tens_typ == 4) THEN
646 yy = yy + pretens
647 ENDIF
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)
651 ENDIF
652 ENDIF
653
654
655 IF ((
retractor(retractor_id(i))%LOCKED == 0).OR.
656 . (
retractor(retractor_id(i))%LOCKED_FREEZE == 1))
THEN
657
658 tens = (f_unlock - fb) / xk(i) + eps1
659 delta_lo = (aldp(i)-al0dp(i)*(tens + one))/(tens + one)
660
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
664 ENDIF
665
666 ENDIF
667
668
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
674 ENDIF
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
679 ENDIF
680 ENDIF
681 ENDIF
682
683
684
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)
689 ENDIF
690
691
692
693 flag_sensor_lock = 0
694 IF (
retractor(retractor_id(i))%ISENS(1) > 0)
THEN
695 IF (tt > sensor_tab(
retractor(retractor_id(i))%ISENS(1))%TSTART)
THEN
696
697 flag_sensor_lock = 1
698 IF (
retractor(retractor_id(i))%LOCKED == 0)
THEN
701
702 retractor(retractor_id(i))%LOCK_PULL = zero
703 ENDIF
704 ENDIF
705 ENDIF
706 ENDIF
707
708 IF (flag_no_count_pull == 0) THEN
709 IF ((
retractor(retractor_id(i))%LOCKED == 0).AND.(flag_sensor_lock == 1))
THEN
710
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
714 ELSE
715 retractor(retractor_id(i))%LOCK_PULL = zero
716 ENDIF
717 ENDIF
718
719
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
723 ENDIF
724 ENDIF
725
726
727
728 IF (abs(delta_lo) > zero) THEN
729
730 ddx = exdp(i) * (vx2(i) - vx1(i))
731 . + eydp(i) * (vy2(i) - vy1(i))
732 . + ezdp(i) * (vz2(i) - vz1(i))
733
734
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
738
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
742
743
744
745 IF (
retractor(retractor_id(i))%STRAND_DIRECTION == 1)
THEN
746 new_node2 = add_node2(i)
747 new_node1 = add_node1(i)
748 ELSE
749 new_node2 = add_node1(i)
750 new_node1 = add_node2(i)
751 ENDIF
752
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
755
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)
761 ELSE
762 retractor(retractor_id(i))%NODE_NEXT(1) = nc1(i)
763 retractor(retractor_id(i))%NODE_NEXT(2) = add_node1(i)
764 ENDIF
765 ELSEIF ((aldp(i) + 1.3*ddx*dt1 < zero).OR.(xscal < 0.5)) THEN
766 IF (new_node1 > 0) THEN
767
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)
773 ELSE
774 retractor(retractor_id(i))%NODE_NEXT(1) = add_node2(i)
775 retractor(retractor_id(i))%NODE_NEXT(2) = nc2(i)
776 ENDIF
777 ELSE
778
779 delta_lo = zero
780 ENDIF
781 ENDIF
782 ENDIF
783
784 al0dp(i) = al0dp(i) + delta_lo
785 al0(i) = al0dp(i)
786 xl0(i)=
max(lmin(i),al0(i))
787
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
792
793 ENDIF
794
795 ENDIF
796
797 ENDIF
798
799 ENDDO
800
801
802
803
804
805
806 RETURN
807
norm(diag(diag(diag(inv(mat))) -id.SOL), 2) % destroy mumps instance id.JOB
subroutine solve_delta_l02(delta_lo, alpha, beta, xk, l, l0, lmin, fb)
subroutine solve_delta_l0(flag, delta_lo, hh, l1, l2, l01, l02, lmin, omega)
type(retractor_struct), dimension(:), allocatable retractor
type(slipring_struct), dimension(:), allocatable slipring