37
38
39
42 use element_mod , only : nixr
43
44
45
46#include "implicit_f.inc"
47
48
49
50#include "param_c.inc"
51#include "com04_c.inc"
52
53
54
55 INTEGER IXR(NIXR,*),ITAB(*),KNOD2EL1D(*),NOD2EL1D(*),NOD_START,TAG_RES(*),TAG_NOD(*),
56 . ELEM_CUR,ID,FLAG,NNOD,IPM(NPROPMI,*)
57 INTEGER, INTENT(IN) :: NB_ELEM_1D
58 INTEGER, INTENT(INOUT) :: NB_BRANCH,BRANCH_TAB(2*NB_ELEM_1D),BRANCH_CPT
59
60
61
62 INTEGER K,NODE_CUR,NRES_FOUND,NODE_NEXT,ELEM_NEXT,ID_PREV,MTYP,MID,ELEM_TEST
63
64
65
66
67
68
69 node_cur = nod_start
70 elem_next = 0
71 IF (flag == 0) tag_res(elem_cur) =
id
72 tag_nod(ixr(2,elem_cur)) =
id
73 tag_nod(ixr(3,elem_cur)) =
id
74 nnod = nnod + 1
75 nres_found = 1
76
77 DO WHILE (nres_found > 0)
78 nres_found = 0
79
80 IF (ixr(2,elem_cur) == node_cur) THEN
81 node_next = ixr(3,elem_cur)
82 ELSE
83 node_next = ixr(2,elem_cur)
84 ENDIF
85
86 DO k=knod2el1d(node_next)+1,knod2el1d(node_next+1)
87 IF ((nod2el1d(k) > numelt+numelp).AND.(nod2el1d(k) /= elem_cur+numelt+numelp)) THEN
88 elem_test = nod2el1d(k)-numelt-numelp
89 mid = ixr(5,elem_test)
90 IF (mid > 0) THEN
91 mtyp = ipm(2,mid)
92 IF ((mtyp == 114).AND.(tag_res(elem_test) == 0)) THEN
93 nres_found = nres_found + 1
94 IF(nres_found > 1) THEN
95 IF (flag > 0) THEN
96
98 . msgtype=msgerror,
99 . anmode=aninfo,
100 . i1=itab(node_next))
101 nres_found = 0
102 ELSE
103
104 nb_branch = nb_branch + 1
105 branch_cpt = branch_cpt + 1
107 . msgtype=msgwarning,
108 . anmode=aninfo,
109 . i1=itab(node_next))
110 branch_tab(2*(branch_cpt-1)+1) = node_next
111 branch_tab(2*(branch_cpt-1)+2) = elem_test
112 ENDIF
113 ELSE
114 elem_next = elem_test
115 ENDIF
116 ENDIF
117 ENDIF
118 ENDIF
119 ENDDO
120
121 IF (nres_found > 0) THEN
123 IF (node_next ==
comn_1d2d(k)) nres_found=0
124 ENDDO
125 ENDIF
126
127 IF (nres_found > 0) THEN
128 IF (flag == 0) THEN
129 tag_res(elem_next) =
id
130 tag_nod(ixr(2,elem_next)) =
id
131 tag_nod(ixr(3,elem_next)) =
id
132 nnod = nnod + 1
133 ELSE
134 IF (tag_res(elem_next) > 0) THEN
135 id_prev =
retractor(tag_res(elem_next))%ID
136 IF ((id_prev > 0).AND.(nres_found > 0))
CALL ancmsg(msgid=2010,
137 . msgtype=msgerror,
138 . anmode=aninfo,
139 . i1=id_prev,i2=ixr(nixr,elem_next),i3=
retractor(
id)%ID)
140 ENDIF
141 tag_res(elem_next) =
id
142 tag_nod(ixr(2,elem_next)) =
id
143 tag_nod(ixr(3,elem_next)) =
id
144 ENDIF
145 ENDIF
146
147 elem_cur = elem_next
148 node_cur = node_next
149 ENDDO
150
type(retractor_struct), dimension(:), allocatable retractor
integer, dimension(:), allocatable comn_1d2d
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)