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