33
34
35
36
37
38
39
40
41
42
43#include "implicit_f.inc"
44
45
46
47#include "param_c.inc"
48#include "ige3d_c.inc"
49
50
51
52 INTEGER IXIG3D(*),KXIG3D(NIXIG3D,*),DEGTANG1,DEGTANG2,DIR,DECALGEO,
53 . TAB_ELCUT(L_TAB_ELCUT),L_TAB_ELCUT,L_TAB_COINKNOT,
54 . (L_TAB_FCTCUT),L_TAB_FCTCUT,FLAG
55 my_real knotlocpc(deg_max,3,*),tab_coinknot(2,*)
56
57
58
59 INTEGER ,J,K,DIRTANG1,DIRTANG2,
60 . IEL,INTERSEC,
61 . WORK(70000),SIZ_LIST_FCTTOT,IDFCT,IOUT
62 my_real det, t1, t2, xa(5),ya(5),coin(2,2),
63 . xb, yb
64 INTEGER, DIMENSION(:), ALLOCATABLE :: INDEX, LIST_FCTTOT
65
66
67 l_tab_fctcut = 0
68 tol = em06
69
70 IF(dir==1) THEN
71 dirtang1 = 2
72 dirtang2 = 3
73 ELSEIF(dir==2) THEN
74 dirtang1 = 3
75 dirtang2 = 1
76 ELSEIF(dir==3) THEN
77 dirtang1 = 1
78 dirtang2 = 2
79 ELSE
80 dirtang1 = -huge(dirtang1)
81 dirtang2 = -huge(dirtang2)
82 ENDIF
83
84
85
86
87
88
89 siz_list_fcttot = l_tab_elcut*kxig3d(3,tab_elcut(1))
90 ALLOCATE(list_fcttot(siz_list_fcttot))
91 ALLOCATE(list_fcttri(siz_list_fcttot))
92 list_fcttot(:) = ep06
93
94 DO i=1,l_tab_elcut
95 iel=tab_elcut(i)
96 DO j=1,kxig3d(3,iel)
97 list_fcttot((i-1)*kxig3d(3,iel)+j) = ixig3d(kxig3d(4,iel)+j-1)
98 ENDDO
99 ENDDO
100
101 ALLOCATE(index(2*siz_list_fcttot))
102 CALL my_orders(0, work, list_fcttot, index, siz_list_fcttot , 1)
103
104 DO i=1,siz_list_fcttot
105 list_fcttri(i)=list_fcttot(index(i))
106 ENDDO
107
108 DEALLOCATE(list_fcttot)
109 DEALLOCATE(index)
110
111 coin(1,1) = minval(tab_coinknot(1,1:(l_tab_coinknot)))
112 coin(2,1) = minval(tab_coinknot(2,1:(l_tab_coinknot)))
113 coin(1,2) = maxval(tab_coinknot(1,1:(l_tab_coinknot)))
114 coin(2,2) = maxval(tab_coinknot(2,1:(l_tab_coinknot)))
115
116 DO i=1,siz_list_fcttot
117
118 IF(i/=1) THEN
119 IF(list_fcttri(i-1)==list_fcttri(i)) cycle
120 ENDIF
121
122 idfct = list_fcttri(i)
123 iout=0
124
125
126
127
128
129
130 xa(1) = knotlocpc(1,dirtang1,decalgeo+idfct) + tol
131 xa(2) = knotlocpc(degtang1+1,dirtang1,decalgeo+idfct) - tol
132 xa(3) = knotlocpc(degtang1+1,dirtang1,decalgeo+idfct) - tol
133 xa(4) = knotlocpc(1,dirtang1,decalgeo+idfct) + tol
134 xa(5) = xa(1)
135
136 ya(1) = knotlocpc(1,dirtang2,decalgeo+idfct) + tol
137 ya(2) = knotlocpc(1,dirtang2,decalgeo+idfct) + tol
138 ya(3) = knotlocpc(degtang2+1,dirtang2,decalgeo+idfct) - tol
139 ya(4) = knotlocpc(degtang2+1,dirtang2,decalgeo+idfct) - tol
140 ya(5) = ya(1)
141
142
143
144
145
146 IF(xa(1)<coin(1,1).OR.ya(1)<coin(2,1)) cycle
147 IF(xa(3)>coin(1,2).OR.ya(3)>coin(2,2)) cycle
148
149
150
151
152
153 xb=coin(1,1)-1000
154 yb=coin(2,1)-2000
155 DO j=1,4
156 intersec=0
157 DO k=1,l_tab_coinknot-1
158 xc=tab_coinknot(1,k)
159 yc=tab_coinknot(2,k)
160 xd=tab_coinknot(1,k+1)
161 yd=tab_coinknot(2,k+1)
162 det = (xb-xa(j))*(yc-yd) - (xc-xd)*(yb-ya(j))
163 IF(det==0) THEN
164
165 ELSE
166 t1 = ((xc-xa(j))*(yc-yd)-(xc-xd)*(yc-ya(j)))/det
167 t2 = ((xb-xa(j))*(yc-ya(j))-(xc-xa(j))*(yb-ya(j)))/det
168 IF(t1>1.OR.t1<0.OR.t2>1.OR.t2<=0) THEN
169
170 ELSE
171 intersec = intersec + 1
172
173 ENDIF
174 ENDIF
175 ENDDO
176 IF(mod(intersec,2)==0) iout=1
177 ENDDO
178
179 IF(iout==1) cycle
180
181
182
183
184
185 DO j=1,4
186 DO k=1,l_tab_coinknot-1
187 xc=tab_coinknot(1,k)
188 yc=tab_coinknot(2,k)
189 xd=tab_coinknot(1,k+1)
190 yd=tab_coinknot(2,k+1)
191 det = (xa(j+1)-xa(j))*(yc-yd) - (xc-xd)*(ya(j+1)-ya(j))
192 IF(det==0) THEN
193
194 ELSE
195 t1 = ((xc-xa(j))*(yc-yd)-(xc-xd)*(yc-ya(j)))/det
196 t2 = ((xa(j+1)-xa(j))*(yc-ya(j))-(xc-xa(j))*(ya(j+1)-ya(j)))/det
197 IF(t1>1.OR.t1<0.OR.t2>1.OR.t2<=0) THEN
198
199 ELSE
200 iout=1
201 cycle
202 ENDIF
203 ENDIF
204 ENDDO
205 ENDDO
206
207
208
209
210
211 IF(iout==0) THEN
212 IF(flag==0) THEN
213 l_tab_fctcut = l_tab_fctcut + 1
214 ELSE
215 l_tab_fctcut = l_tab_fctcut + 1
216 tab_fctcut(l_tab_fctcut) = idfct
217 ENDIF
218 ENDIF
219
220 ENDDO
221
222 DEALLOCATE(list_fcttri)
223
224 RETURN
void my_orders(int *mode, int *iwork, int *data, int *index, int *n, int *irecl)