38
39
40
41 USE my_alloc_mod
44 USE elbufdef_mod
45
46
47
48#include "implicit_f.inc"
49
50
51
52#include "param_c.inc"
53#include "com01_c.inc"
54#include "com04_c.inc"
55#include "random_c.inc"
56#include "tabsiz_c.inc"
57
58
59
60 INTEGER IPARG(NPARG,NGROUP),KNOD2EL1D(*),NOD2EL1D(*),IXR(NIXR,*),ITAB(*),IPM(NPROPMI,*),
61 . KNOD2ELC(*),NOD2ELC(*),IXC(NIXC,*)
63 TYPE (ELBUF_STRUCT_), TARGET, DIMENSION(NGROUP) :: ELBUF_TAB
64
65
66
67 INTEGER NLOCAL
69
70
71
72 INTEGER I,J,K,L,M,N,NG,NEL,ITY,IAD,LFT,LLT,NFT,MTN,NODE,NODE_NEXT,
73 . ELEM_NEXT,N1,N2,NTOOL,,NOT_USED,FLAG,ELEM_CUR,NN,ID,NNOD,
74 . MID,MTYP,P,NB_SHELL,NFRAM,N3,N4,MS,NODES,ISEATBELT,NSL,IDRB,
75 . NOD,NFOUND_RBY,NFOUND_BCS,BCS_X,BCS_Y,BCS_Z,IC,IC1,IC2,N1SP,
76 . N2SP,ELEM,ORIENT
77
78 my_real dist1,dist2,alea_max,tole_2
79
80 INTEGER , DIMENSION(:), ALLOCATABLE:: TAG_RETRACTOR,TAGN_RETRACTOR,TAG_RES
81
82 TYPE(G_BUFEL_),POINTER :: GBUF
83
84
85
86
87
88 CALL my_alloc(tag_res,numelr)
89 tag_res(1:numelr) = 0
90 DO i=1,n_seatbelt
93 ENDDO
94 ENDDO
95
96
97 IF (nspmd > 1) THEN
98
99 DO i=1,nslipring
102 DO p=1,nspmd
104
106 IF (
slipring(i)%FRAM(j)%ORIENTATION_NODE > 0)
108 ENDIF
109 ENDDO
110 ENDDO
111 ENDDO
112
113 DO i=1,nretractor
115 DO p=1,nspmd
117
119 ENDIF
120 ENDDO
121 ENDDO
122
123 ENDIF
124
125
126
127 CALL my_alloc(tag_retractor,numelr)
128 CALL my_alloc(tagn_retractor,numnod)
129 tag_retractor(1:numelr) = 0
130 tagn_retractor(1:numnod) = 0
131 flag = 1
132 not_used = 0
133
134
135
136 DO i=1,nretractor
137
140
141
142
143 nnod = 2
144
145 DO k=knod2el1d(n1)+1,knod2el1d(n1+1)
146 IF (nod2el1d(k) > numelt+numelp) THEN
147 elem_cur = nod2el1d(k)-numelt-numelp
148 mid = ixr(5,elem_cur)
149 IF (mid > 0) THEN
150 mtyp = ipm(2,mid)
151 IF (((ixr(2,elem_cur)==n2).OR.(ixr(3,elem_cur)==n2)).AND.(mtyp == 114)) THEN
152
154 . elem_cur,tag_retractor,tagn_retractor,i,flag,
155 . not_used,ipm,not_used,not_used,not_used,
156 . not_used)
157 ENDIF
158 ENDIF
159 ENDIF
160 ENDDO
161
162 ENDDO
163
164
165
166 DO ng=1,ngroup
167
168 mtn = iparg(1,ng)
169 nel = iparg(2,ng)
170 ity = iparg(5,ng)
171 nft = iparg(3,ng)
172 iad = iparg(4,ng)
173 iseatbelt = iparg(91,ng)
174 lft = 1
175 llt = nel
176
177 IF ((ity==6).AND.(mtn==114)) THEN
178
179
180
181 gbuf => elbuf_tab(ng)%GBUF
182
183 DO i=1,nel
184
185 j = nft + i
186 n1 = ixr(2,j)
187 n2 = ixr(3,j)
188 ntool = 0
189
190
191
192
193
194 DO k=1,nslipring
196 IF (((n1==
slipring(k)%FRAM(l)%NODE(1)).AND.(n2==
slipring(k)%FRAM(l)%NODE(2))).OR.
197 . ((n1==
slipring(k)%FRAM(l)%NODE(2)).AND.(n2==
slipring(k)%FRAM(l)%NODE(1))))
THEN
198
199 ntool = ntool + 1
200 gbuf%SLIPRING_ID(i) = k
201 gbuf%SLIPRING_FRAM_ID(i) = l
202 gbuf%SLIPRING_STRAND(i) = 1
203
204
205 IF (n1==
slipring(k)%FRAM(l)%NODE(1))
THEN
206 slipring(k)%FRAM(l)%STRAND_DIRECTION(1) = 1
207 ELSE
208 slipring(k)%FRAM(l)%STRAND_DIRECTION(1) = -1
209 ENDIF
210
211 ELSEIF (((n1==
slipring(k)%FRAM(l)%NODE(2)).AND.(n2==
slipring(k)%FRAM(l)%NODE(3))).OR.
212 . ((n1==
slipring(k)%FRAM(l)%NODE(3)).AND.(n2==
slipring(k)%FRAM(l)%NODE(2))))
THEN
213
214 ntool = ntool + 1
215 gbuf%SLIPRING_ID(i) = k
216 gbuf%SLIPRING_FRAM_ID(i) = l
217 gbuf%SLIPRING_STRAND(i) = 2
218
219
220 IF (n1==
slipring(k)%FRAM(l)%NODE(2))
THEN
221 slipring(k)%FRAM(l)%STRAND_DIRECTION(2) = 1
222 ELSE
223 slipring(k)%FRAM(l)%STRAND_DIRECTION(2) = -1
224 ENDIF
225
226 ENDIF
227 ENDDO
228 ENDDO
229
230
231
232
233
234 DO k=1,nretractor
237
238 ntool = ntool + 1
239 gbuf%RETRACTOR_ID(i) = k
240 gbuf%SLIPRING_STRAND(i) = -1
241 ENDIF
242 ENDDO
243
244 IF (tag_retractor(j) > 0) THEN
245
246 gbuf%OFF(i) = zero
247 gbuf%RETRACTOR_ID(i) = -k
248 k = tag_retractor(j)
251 dist1 = (x(1,nn)-x(1,n1))**2+(x(2,nn)-x(2,n1))**2+(x(3,nn)-x(3,n1))**2
252 dist2 = (x(1,nn)-x(1,n2))**2+(x(2,nn)-x(2,n2))**2+(x(3,nn)-x(3,n2))**2
253
254
256
257 IF (nrand > 0) THEN
258 alea_max = zero
259 DO j=1,nrand
260 alea_max =
max(alea_max,alea(j))
261 ENDDO
262 tole_2 =
max(tole_2,ten*alea_max*alea_max)
263 ENDIF
264
265
266 IF (dist1 <= tole_2) THEN
267 x(1,n1) = x(1,nn)
268 x(2,n1) = x(2,nn)
269 x(3,n1) = x(3,nn)
270 dist1 = zero
271 ENDIF
272 IF (dist2 <= tole_2) THEN
273 x(1,n2) = x(1,nn)
274 x(2,n2) = x(2,nn)
275 x(3,n2) = x(3,nn)
276 dist2 = zero
277 ENDIF
278
279 IF(dist2 + dist1 > em30)
CALL ancmsg(msgid=2011,
280 . msgtype=msgerror,
281 . anmode=aninfo,
282 . i1=
id,i2=ixr(nixr,j),i3=
id)
283
284 IF (tagn_retractor(n1) > 0) THEN
287 tagn_retractor(n1) = 0
288 ENDIF
289
290 IF (tagn_retractor(n2) > 0) THEN
293 tagn_retractor(n2) = 0
294 ENDIF
295
296 ENDIF
297
298
299
300 IF(ntool > 1)
CALL ancmsg(msgid=2006,
301 . msgtype=msgerror,
302 . anmode=aninfo,
303 . i1=ixr(nixr,j))
304
305
306 node = n1
307 node_next = 0
308 DO k=knod2el1d(node)+1,knod2el1d(node+1)
309 IF ((nod2el1d(k) /= j + numelt+numelp).AND.(nod2el1d(k) > numelt+numelp)) THEN
310 elem_next = nod2el1d(k)-numelt-numelp
311 mid = ixr(5,elem_next)
312 IF (mid > 0) THEN
313 mtyp = ipm(2,mid)
314 IF (mtyp == 114) THEN
315 IF (ixr(2,elem_next) == node) THEN
316 node_next = ixr(3,elem_next)
317 ELSE
318 node_next = ixr(2,elem_next)
319 ENDIF
320 ENDIF
321 ENDIF
322 ENDIF
323 ENDDO
324 gbuf%ADD_NODE(i) = node_next
325
326
327 node = n2
328 node_next = 0
329 DO k=knod2el1d(node)+1,knod2el1d(node+1)
330 IF ((nod2el1d(k) /= j + numelt+numelp).AND.(nod2el1d(k) > numelt+numelp)) THEN
331 elem_next = nod2el1d(k)-numelt-numelp
332 mid = ixr(5,elem_next)
333 IF (mid > 0) THEN
334 mtyp = ipm(2,mid)
335 IF (mtyp == 114) THEN
336 IF (ixr(2,elem_next) == node) THEN
337 node_next = ixr(3,elem_next)
338 ELSE
339 node_next = ixr(2,elem_next)
340 ENDIF
341 ENDIF
342 ENDIF
343 ENDIF
344 ENDDO
345 gbuf%ADD_NODE(nel+i) = node_next
346
347
348
349 nb_shell = 0
350 IF (gbuf%ADD_NODE(i) > 0) THEN
351 node = n1
352 ELSE
353 node = n2
354 ENDIF
355 DO k=knod2elc(node)+1,knod2elc(node+1)
356 elem_cur = nod2elc(k)
357 mid = ixc(1,elem_cur)
358 mtyp = ipm(2,mid)
359 IF (mtyp == 119) nb_shell = nb_shell + 1
360 ENDDO
361
363 IF ((nfram > 1).AND.(nb_shell==4)) THEN
364
365 gbuf%FRAM_FACTOR(i) = one/(nfram-1)
366 ELSEIF ((nfram > 1).AND.(nb_shell==2)) THEN
367
368 gbuf%FRAM_FACTOR(i) = half/(nfram-1)
369 ELSE
370
371 gbuf%FRAM_FACTOR(i) = one
372 ENDIF
373
374 gbuf%MASS(i) = gbuf%MASS(i)*gbuf%FRAM_FACTOR(i)
375 gbuf%INTVAR(i) = gbuf%INTVAR(i)*gbuf%FRAM_FACTOR(i)
376
377 ENDDO
378
379 ELSEIF ((ity==3).AND.(iseatbelt==1)) THEN
380
381
382
383 gbuf => elbuf_tab(ng)%GBUF
384
385 DO i=1,nel
386
387 j = nft + i
388
389 n1 = ixc(2,j)
390 n2 = ixc(3,j)
391 n3 = ixc(4,j)
392 n4 = ixc(5,j)
393
394
395 gbuf%INTVAR(i) = one
396
397
398 dist1 = (x(1,n2)-x(1,n1))**2+(x(2,n2)-x(2,n1))**2+(x(3,n2)-x(3,n1))**2
399 dist2 = (x(1,n3)-x(1,n4))**2+(x(2,n3)-x(2,n4))**2+(x(3,n3)-x(3,n4))**2
400 gbuf%INTVAR(i+2*nel) = sqrt(dist1)
401 gbuf%INTVAR(i+3*nel) = sqrt(dist2)
402
403
404 gbuf%ADD_NODE(i) = n2
405 DO k=knod2el1d(n1)+1,knod2el1d(n1+1)
406 IF (nod2el1d(k) > numelt+numelp) THEN
407 elem = nod2el1d(k)-numelt-numelp
408 mid = ixr(5,elem)
409 IF (mid > 0) THEN
410 mtyp = ipm(2,mid)
411 IF ((mtyp==114).AND.((ixr(2,elem)==n1).AND.(ixr(3,elem) == n4))
412 . .OR.((ixr(3,elem)==n1).AND.(ixr(2,elem) == n4))) THEN
413 gbuf%ADD_NODE(i) = n4
414 ENDIF
415 ENDIF
416 ENDIF
417 ENDDO
418
419
420 DO m=2,5
421 node = ixc(m,j)
422 node_next = 0
423 DO k=knod2el1d(node)+1,knod2el1d(node+1)
424 IF (nod2el1d(k) > numelt+numelp) THEN
425 elem_next = nod2el1d(k)-numelt-numelp
426 mid = ixr(5,elem_next)
427 IF (mid > 0) THEN
428 mtyp = ipm(2,mid)
429 IF (mtyp==114) THEN
430 n1sp=ixr(2,elem_next)
431 n2sp=ixr(3,elem_next)
432 IF ((n1sp==node).AND.(n2sp/=n1).AND.(n2sp/=n2).AND.(n2sp/=n3).AND.(n2sp/=n4)) THEN
433 node_next = n2sp
434 ELSEIF ((n2sp==node).AND.(n1sp/=n1).AND.(n1sp/=n2).AND.(n1sp/=n3).AND.(n1sp/=n4)) THEN
435 node_next = n1sp
436 ENDIF
437 ENDIF
438 ENDIF
439 ENDIF
440 ENDDO
441 gbuf%ADD_NODE((m-1)*nel+i) = node_next
442
443 ENDDO
444
445 ENDDO
446
447 ENDIF
448
449 ENDDO
450
451 DEALLOCATE(tag_res,tag_retractor,tagn_retractor)
452
subroutine ifrontplus(n, p)
type(retractor_struct), dimension(:), allocatable retractor
type(seatbelt_struct), dimension(:), allocatable seatbelt_tab
type(slipring_struct), dimension(:), allocatable slipring
subroutine new_seatbelt(ixr, itab, knod2el1d, nod2el1d, nod_start, elem_cur, tag_res, tag_nod, id, flag, nnod, ipm, nb_elem_1d, nb_branch, branch_tab, branch_cpt)
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)