33
34
35
37
38
39
40#include "implicit_f.inc"
41
42
43
44#include "com04_c.inc"
45#include "comlock.inc"
46
47
48
49 INTEGER NEL,IXTG(NIXTG,*)
50 INTEGER, DIMENSION(NEL) , INTENT(IN) :: NGL,OFFLY
51 INTEGER, DIMENSION(NUMNOD), INTENT(IN ) :: ITAB
52 my_real ,
DIMENSION(NEL) ,
INTENT(IN) :: dadv
53 INTEGER, DIMENSION(NEL) , INTENT(OUT) :: FWAVE_EL
54 TYPE (FAILWAVE_STR_) :: FAILWAVE
55
56
57
58 INTEGER I,II,K,N1,N2,N3,FOUND,LEVEL,IDN,NINDX,NFAIL,FNOD1,FNOD2,
59 . KNEXT,KPREV,NCURR
60 INTEGER ,DIMENSION(NEL) :: INDX
61 INTEGER ,DIMENSION(3) :: NDL,NDR,NOD_ID,NOD_NN
62
63 DATA ndr/2,3,1/
64 DATA ndl/1,2,3/
65
66
67
68
69
70 SELECT CASE (failwave%WAVE_MOD)
71
72 CASE (1)
73
74 DO i=1,nel
75 IF (offly(i) == 1 .and. dadv(i) == one) THEN
76 n1 = failwave%IDXI(ixtg(2,i))
77 n2 = failwave%IDXI(ixtg(3,i))
78 n3 = failwave%IDXI(ixtg(4,i))
79 nfail = failwave%FWAVE_NOD(1,n1,1)
80 . + failwave%FWAVE_NOD(1,n2,1)
81 . + failwave%FWAVE_NOD(1,n3,1)
82 IF (nfail > 0) THEN
83 fwave_el(i) = 1
84 ENDIF
85 ENDIF
86 ENDDO
87
88 CASE (2,3)
89
90 nindx = 0
91 DO i=1,nel
92 IF (offly(i) == 1 .and. dadv(i) == one) THEN
93 nindx = nindx + 1
94 indx(nindx) = i
95 ENDIF
96 ENDDO
97
98 DO ii=1,nindx
99 i = indx(ii)
100 n1 = ixtg(2,i)
101 n2 = ixtg(3,i)
102 n3 = ixtg(4,i)
103 nod_nn(1) = failwave%IDXI(n1)
104 nod_nn(2) = failwave%IDXI(n2)
105 nod_nn(3) = failwave%IDXI(n3)
106 nod_id(1) = itab(n1)
107 nod_id(2) = itab(n2)
108 nod_id(3) = itab(n3)
109 found = 0
110
111 DO k=1,3
112 ncurr = nod_nn(k)
113 IF (failwave%MAXLEV(ncurr) > 0) THEN
114 knext = ndr(k)
115 kprev = ndl(k)
116
117 DO level = 1,failwave%MAXLEV(ncurr)
118 fnod1 = failwave%FWAVE_NOD(1,ncurr,level)
119 fnod2 = failwave%FWAVE_NOD(2,ncurr,level)
120
121 IF ((fnod2 == 0 .and.
122 . (fnod1 == nod_id(knext) .or. fnod1 == nod_id(kprev)))
123 . .or.
124 . (fnod1 > 0 .and. fnod2 > 0 .and.
125 . fnod1 /= nod_id(kprev) .and. fnod1 /= nod_id(knext) .and.
126 . fnod2 /= nod_id(kprev) .and. fnod2 /= nod_id(knext)) ) THEN
127 found = 1
128 fwave_el(i) = 1
129 EXIT
130 ENDIF
131 ENDDO
132 IF (found == 1) EXIT
133
134 ENDIF
135 ENDDO
136
137
138
139
140
141
142
143 ENDDO
144
145 END SELECT
146
147 RETURN