35
36
37
39 use element_mod , only : nixc
40
41
42
43#include "implicit_f.inc"
44
45
46
47#include "com04_c.inc"
48#include "comlock.inc"
49
50
51
52 INTEGER NEL
53 INTEGER IXC(NIXC,*)
54 INTEGER, DIMENSION(NEL) , INTENT(IN) :: NGL,OFFLY
55 INTEGER, DIMENSION(NUMNOD), INTENT(IN) :: ITAB
56 my_real ,
DIMENSION(NEL) ,
INTENT(IN) :: dadv
57 INTEGER, DIMENSION(NEL) , INTENT(OUT) :: FWAVE_EL
58 TYPE (FAILWAVE_STR_) :: FAILWAVE
59
60
61
62 INTEGER I,II,K,N1,N2,N3,N4,FOUND,LEVEL,NINDX,NFAIL,FNOD1,FNOD2,
63 . KNEXT,KPREV,NCURR
64 INTEGER ,DIMENSION(NEL) :: INDX
65 INTEGER ,DIMENSION(4) :: NDL,NDR,NOD_ID,NOD_NN
66
67 DATA ndr/2,3,4,1/
68 DATA ndl/4,1,2,3/
69
70
71
72
73
74 SELECT CASE (failwave%WAVE_MOD)
75
76 CASE (1)
77
78 DO i=1,nel
79 IF (offly(i) == 1 .and. dadv(i) == one) THEN
80 n1 = failwave%IDXI(ixc(2,i))
81 n2 = failwave%IDXI(ixc(3,i))
82 n3 = failwave%IDXI(ixc(4,i))
83 n4 = failwave%IDXI(ixc(5,i))
84 nfail = failwave%FWAVE_NOD(1,n1,1)
85 . + failwave%FWAVE_NOD(1,n2,1)
86 . + failwave%FWAVE_NOD(1,n3,1)
87 . + failwave%FWAVE_NOD(1,n4,1)
88 IF (nfail > 0) fwave_el(i) = 1
89 ENDIF
90 ENDDO
91
92 CASE (2)
93
94 nindx = 0
95 DO i=1,nel
96 IF (offly(i) == 1 .and. dadv(i) == one) THEN
97 nindx = nindx + 1
98 indx(nindx) = i
99 ENDIF
100 ENDDO
101
102 DO ii=1,nindx
103 i = indx(ii)
104 n1 = ixc(2,i)
105 n2 = ixc(3,i)
106 n3 = ixc(4,i)
107 n4 = ixc(5,i)
108 nod_nn(1) = failwave%IDXI(n1)
109 nod_nn(2) = failwave%IDXI(n2)
110 nod_nn(3) = failwave%IDXI(n3)
111 nod_nn(4) = failwave%IDXI(n4)
112 nod_id(1) = itab(n1)
113 nod_id(2) = itab(n2)
114 nod_id(3) = itab(n3)
115 nod_id(4) = itab(n4)
116 found = 0
117
118 DO k=1,4
119 ncurr = nod_nn(k)
120 IF (failwave%MAXLEV(ncurr) > 0) THEN
121 knext = ndr(k)
122 kprev = ndl(k)
123
124 DO level = 1,failwave%MAXLEV(ncurr)
125 fnod1 = failwave%FWAVE_NOD(1,ncurr,level)
126 fnod2 = failwave%FWAVE_NOD(2,ncurr,level)
127
128 IF (fnod1 == nod_id(knext) .and. fnod2 == 0) THEN
129 found = 1
130 fwave_el(i) = 1
131 EXIT
132 ENDIF
133 ENDDO
134 IF (found == 1) EXIT
135 ENDIF
136 ENDDO
137
138
139
140
141
142
143
144 ENDDO
145
146
147 CASE (3)
148
149
150 nindx = 0
151 DO i=1,nel
152 IF (offly(i) == 1 .and. dadv(i) == one) THEN
153 nindx = nindx + 1
154 indx(nindx) = i
155 ENDIF
156 ENDDO
157
158 DO ii=1,nindx
159 i = indx(ii)
160 n1 = ixc(2,i)
161 n2 = ixc(3,i)
162 n3 = ixc(4,i)
163 n4 = ixc(5,i)
164 nod_nn(1) = failwave%IDXI(n1)
165 nod_nn(2) = failwave%IDXI(n2)
166 nod_nn(3) = failwave%IDXI(n3)
167 nod_nn(4) = failwave%IDXI(n4)
168 nod_id(1) = itab(n1)
169 nod_id(2) = itab(n2)
170 nod_id(3) = itab(n3)
171 nod_id(4) = itab(n4)
172 found = 0
173
174 DO k=1,4
175 ncurr = nod_nn(k)
176 IF (failwave%MAXLEV(ncurr) > 0) THEN
177 knext = ndr(k)
178 kprev = ndl(k)
179
180 DO level = 1,failwave%MAXLEV(ncurr)
181 fnod1 = failwave%FWAVE_NOD(1,ncurr,level)
182 fnod2 = failwave%FWAVE_NOD(2,ncurr,level)
183
184 IF (fnod2 == 0 .and.
185 . (fnod1 == nod_id(knext) .or. fnod1 == nod_id(kprev))) THEN
186 found = 1
187 EXIT
188 ELSE IF (fnod1 > 0 .and. fnod2 > 0 .and.
189 . fnod1 /= nod_id(kprev) .and. fnod1 /= nod_id(knext) .and.
190 . fnod2 /= nod_id(kprev) .and. fnod2 /= nod_id(knext)) THEN
191 found = 2
192 EXIT
193 ENDIF
194 ENDDO
195 IF (found > 0) THEN
196 fwave_el(i) = 1
197 EXIT
198 ENDIF
199
200 ENDIF
201 ENDDO
202
203
204
205
206
207
208
209
210
211
212
213 ENDDO
214
215 END SELECT
216
217 RETURN