36 . X,ITAB,IPM,ALEA,KNOD2ELC,
45 use element_mod ,
only : nixc,nixr
49#include "implicit_f.inc"
56#include "random_c.inc"
57#include "tabsiz_c.inc"
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
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
84 CALL my_alloc(tag_res,numelr)
99 IF ((nlocal(n2,p)==1).AND.(nlocal(
slipring(i)%FRAM(j)%ANCHOR_NODE,p)==0))
THEN
102 IF (
slipring(i)%FRAM(j)%ORIENTATION_NODE > 0)
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
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)
147 IF (((ixr(2,elem_cur)==n2).OR.(ixr(3,elem_cur)==n2)).AND.(mtyp == 114))
THEN
150 . elem_cur,tag_retractor,tagn_retractor,i,flag,
151 . not_used,ipm,not_used,not_used,not_used,
169 iseatbelt = iparg(91,ng)
173 IF ((ity==6).AND.(mtn==114))
THEN
177 gbuf => elbuf_tab(ng)%GBUF
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
196 gbuf%SLIPRING_ID(i) = k
197 gbuf%SLIPRING_FRAM_ID(i) = l
198 gbuf%SLIPRING_STRAND(i) = 1
201 IF (n1==
slipring(k)%FRAM(l)%NODE(1))
THEN
202 slipring(k)%FRAM(l)%STRAND_DIRECTION(1) = 1
204 slipring(k)%FRAM(l)%STRAND_DIRECTION(1) = -1
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
211 gbuf%SLIPRING_ID(i) = k
212 gbuf%SLIPRING_FRAM_ID(i) = l
213 gbuf%SLIPRING_STRAND(i) = 2
216 IF (n1==
slipring(k)%FRAM(l)%NODE(2))
THEN
217 slipring(k)%FRAM(l)%STRAND_DIRECTION(2) = 1
219 slipring(k)%FRAM(l)%STRAND_DIRECTION(2) = -1
232 . ((n2==
retractor(k)%NODE(1)).AND.(n1
THEN
235 gbuf%RETRACTOR_ID(i) = k
236 gbuf%SLIPRING_STRAND(i) = -1
240 IF (tag_retractor(j) > 0)
THEN
243 gbuf%RETRACTOR_ID(i) = -k
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(1,n2))**2+(x(2,nn)-x(2,n2))**2+(x(3,nn)-x(3,n2))**2
256 alea_max =
max(alea_max,alea(j))
258 tole_2 =
max(tole_2,ten*alea_max*alea_max)
262 IF (dist1 <= tole_2)
THEN
268 IF (dist2 <= tole_2
THEN
275 IF(dist2 + dist1 > em30)
CALL ancmsg(msgid=2011,
278 . i1=id,i2=ixr(nixr,j),i3=id)
280 IF (tagn_retractor(n1) > 0)
THEN
286 IF (tagn_retractor(n2) > 0)
THEN
289 tagn_retractor(n2) = 0
296 IF(ntool > 1)
CALL ancmsg(msgid=2006,
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)
310 IF (mtyp == 114)
THEN
311 IF (ixr(2,elem_next) == node)
THEN
312 node_next = ixr(3,elem_next)
314 node_next = ixr(2,elem_next)
320 gbuf%ADD_NODE(i) = node_next
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)
331 IF (mtyp == 114)
THEN
332 IF (ixr(2,elem_next) == node)
THEN
333 node_next = ixr(3,elem_next)
335 node_next = ixr(2,elem_next)
341 gbuf%ADD_NODE(nel+i) = node_next
346 IF (gbuf%ADD_NODE(i) > 0)
THEN
351 DO k=knod2elc(node)+1,knod2elc(node+1)
352 elem_cur = nod2elc(k)
353 mid = ixc(1,elem_cur)
355 IF (mtyp == 119) nb_shell = nb_shell + 1
359 IF ((nfram > 1).AND.(nb_shell==4))
THEN
361 gbuf%FRAM_FACTOR(i) = one/(nfram-1)
362 ELSEIF ((nfram > 1).AND.(nb_shell==2))
THEN
364 gbuf%FRAM_FACTOR(i) = half/(nfram-1)
367 gbuf%FRAM_FACTOR(i) = one
370 gbuf%MASS(i) = gbuf%MASS(i)*gbuf%FRAM_FACTOR(i)
371 gbuf%INTVAR(i) = gbuf%INTVAR(i)*gbuf%FRAM_FACTOR(i)
375 ELSEIF ((ity==3).AND.(iseatbelt==1))
THEN
379 gbuf => elbuf_tab(ng)%GBUF
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)
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
407 IF ((mtyp==114).AND.((ixr(2,elem)==n1).AND.(ixr(3,elem) == n4))
408 . .OR.((ixr(3,elem)==n1).AND.(ixr(2,elem) == n4)))
THEN
409 gbuf%ADD_NODE(i) = n4
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)
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
430 ELSEIF ((n2sp==node).AND.(n1sp/=n1).AND.(n1sp/=n2).AND.(n1sp/=n3).AND.(n1sp/=n4))
THEN
437 gbuf%ADD_NODE((m-1)*nel+i) = node_next
447 DEALLOCATE(tag_res,tag_retractor,tagn_retractor)
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)