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