30 SUBROUTINE rafig3d(KNOTLOCPC,DEG,DEGTANG1,DEGTANG2,IAD_KNOT,
31 . NKNOT1,NKNOT2,NKNOT3,GAMA,DIR,
33 . WIGE,TAB_FCTCUT,L_TAB_FCTCUT,TAB_REMOVE,TAB_NEWFCT,
34 . DECALGEO,TABCONPATCH,NUMPATCH,KXIG3D,
35 . IXIG3D,TAB_STAY,FLAG_PRE)
49#include "implicit_f.inc"
59 INTEGER IXIG3D(*),KXIG3D(NIXIG3D,*),IAD_KNOT,NKNOT1,NKNOT2,NKNOT3,
60 . ,DEGTANG1,DEGTANG2,IEL,DIR,
61 . TAB_REMOVE(*),TAB_STAY(*),TAB_FCTCUT(*),
62 . L_TAB_FCTCUT,DECALGEO,TAB_NEWFCT(*),
65 my_real KNOTLOCPC(DEG_MAX,3,*),GAMA(*),NEWKNOT
66 my_real X(3,*),V(3,*),D(3,*),MS(*),WIGE(*)
70 INTEGER I,J,ITFCT,OFFSET_KNOT,DIRTANG1,DIRTANG2,
71 . idfctcoupee,idfctcoupee1,idfctcoupee2,flag_remove,itnctrl
72 my_real alpha1,
alpha2,newknotloc(deg+1,2),tol
81 offset_knot = iad_knot
85 offset_knot = iad_knot+nknot1
89 offset_knot = iad_knot+nknot1+nknot2
92 DO itfct=1,l_tab_fctcut
94 idfctcoupee = tab_fctcut(itfct)
96 IF(newknot<knotlocpc(1,dir,decalgeo+idfctcoupee).OR.
97 . newknot>knotlocpc(deg+1,dir,decalgeo+idfctcoupee)) cycle
101 IF(newknot>=knotlocpc(deg,dir,decalgeo+idfctcoupee))
THEN
104 alpha1=(newknot-knotlocpc(1,dir,decalgeo+idfctcoupee))/
105 / (knotlocpc(deg,dir,decalgeo+idfctcoupee)-knotlocpc(1,dir,decalgeo+idfctcoupee))
107 IF(newknot<=knotlocpc(2,dir,decalgeo+idfctcoupee))
THEN
110 alpha2=(knotlocpc(deg+1,dir,decalgeo+idfctcoupee)-newknot)/
111 / (knotlocpc(deg+1,dir,decalgeo+idfctcoupee)-knotlocpc
117 DO WHILE (knotlocpc(i-1,dir,decalgeo+idfctcoupee)>=newknot)
118 newknotloc(i,1)=knotlocpc(i-1,dir,decalgeo+idfctcoupee)
119 newknotloc(i,2)=knotlocpc(i,dir,decalgeo+idfctcoupee)
122 newknotloc(i,1)=newknot
123 newknotloc(i,2)=knotlocpc(i,dir,decalgeo+idfctcoupee)
125 newknotloc(i,1)=knotlocpc(i,dir,decalgeo+idfctcoupee)
126 newknotloc(i,2)=newknot
129 newknotloc(i,1)=knotlocpc(i-1,dir,decalgeo+idfctcoupee)
130 newknotloc(i,2)=knotlocpc(i,dir,decalgeo+idfctcoupee)
134 newknotloc(i,1)=knotlocpc(i,dir,decalgeo+idfctcoupee)
135 newknotloc(i,2)=knotlocpc(i+1,dir,decalgeo+idfctcoupee)
142 idfctcoupee1 = tab_fctcut(j)
144 IF(abs(knotlocpc(i,dirtang1,decalgeo+idfctcoupee)-knotlocpc(i,dirtang1,decalgeo+idfctcoupee1))>tol)
EXIT
146 IF(i>degtang1+1)
THEN
148 IF(abs(knotlocpc(i,dirtang2,decalgeo+idfctcoupee)-knotlocpc(i,dirtang2,decalgeo+idfctcoupee1))>tol)
EXIT
151 IF(i>degtang2+1)
THEN
153 IF(abs(newknotloc(i,1)-knotlocpc(i,dir,decalgeo+idfctcoupee1))>tol)
EXIT
163 x(:,idfctcoupee1)=(x(:,idfctcoupee1)*gama(idfctcoupee1)+
164 . x(:,idfctcoupee)*gama(idfctcoupee)*alpha1)/
165 . (gama(idfctcoupee1)+alpha1*gama(idfctcoupee))
166 d(:,idfctcoupee1)=(d(:,idfctcoupee1)*gama(idfctcoupee1)+
167 . d(:,idfctcoupee)*gama(idfctcoupee)*alpha1)/
168 . (gama(idfctcoupee1)+alpha1*gama(idfctcoupee))
169 v(:,idfctcoupee1)=(v(:,idfctcoupee1)*gama(idfctcoupee1)+
170 . v(:,idfctcoupee)*gama(idfctcoupee)*alpha1)/
172 ms(idfctcoupee1)=(ms(idfctcoupee1)*gama(idfctcoupee1)+
173 . ms(idfctcoupee)*gama(idfctcoupee)*alpha1)/
174 . (gama(idfctcoupee1)+alpha1*gama(idfctcoupee))
175 wige(idfctcoupee1)=(wige(idfctcoupee1)*gama(idfctcoupee1)+
176 . wige(idfctcoupee)*gama(idfctcoupee)*alpha1)/
177 . (gama(idfctcoupee1)+alpha1*gama(idfctcoupee))
180 knotlocpc(:,dir,decalgeo+idfctcoupee1) = newknotloc(:,1)
181 ELSEIF(i<=deg+1)
THEN
183 idfctcoupee1 = numnodige0+offset_newfct+j
185 IF(abs(knotlocpc(i,dirtang1,decalgeo+idfctcoupee)-knotlocpc(i,dirtang1,decalgeo+idfctcoupee1))>tol)
EXIT
189 IF(abs(knotlocpc(i,dirtang2,decalgeo+idfctcoupee)-knotlocpc(i,dirtang2,decalgeo+idfctcoupee1))>tol)
EXIT
192 IF(i>degtang2+1)
THEN
194 IF(abs(newknotloc(i,1)-knotlocpc(i,dir,decalgeo+idfctcoupee1))>tol)
EXIT
205 x(:,numnodige0+offset_newfct+j)=(x(:,numnodige0+offset_newfct+j)*gama(idfctcoupee1)+
206 . x(:,idfctcoupee)*gama(idfctcoupee)*alpha1)/
207 . (gama(idfctcoupee1)+alpha1*gama
208 d(:,numnodige0+offset_newfct+j)=(d(:,numnodige0+offset_newfct+j)*gama(idfctcoupee1)+
209 . d(:,idfctcoupee)*gama(idfctcoupee)*alpha1)/
210 . (gama(idfctcoupee1)+alpha1*gama(idfctcoupee))
211 v(:,numnodige0+offset_newfct+j)=(v(:,numnodige0+offset_newfct+j)*gama(idfctcoupee1)+
212 . v(:,idfctcoupee)*gama(idfctcoupee)*alpha1)/
213 . (gama(idfctcoupee1)+alpha1*gama(idfctcoupee))
214 ms(numnodige0+offset_newfct+j)=(ms(numnodige0+offset_newfct+j)*gama(idfctcoupee1)+
215 . ms(idfctcoupee)*gama(idfctcoupee)*alpha1)/
216 . (gama(idfctcoupee1)+alpha1*gama(idfctcoupee))
217 wige(numnodige0+offset_newfct+j)=(wige(numnodige0+offset_newfct+j)*gama(idfctcoupee1)+
218 . wige(idfctcoupee)*gama(idfctcoupee)*alpha1)/
219 . (gama(idfctcoupee1)+alpha1*gama(idfctcoupee))
221 gama(idfctcoupee1) = gama(idfctcoupee1)+alpha1*gama(idfctcoupee)
222 knotlocpc(:,dir,decalgeo+idfctcoupee1) = newknotloc(:,1)
225 l_tab_newfct = l_tab_newfct+1
227 x(:,numnodige0+offset_newfct+newfct) = x(:,idfctcoupee)
228 d(:,numnodige0+offset_newfct+newfct) = d(:,idfctcoupee)
229 v(:,numnodige0+offset_newfct+newfct) = v(:,idfctcoupee)
230 ms(numnodige0+offset_newfct+newfct) = ms(idfctcoupee)
231 wige(numnodige0+offset_newfct+newfct
233 gama(numnodige0+offset_newfct+newfct) = alpha1*gama(idfctcoupee)
234 knotlocpc(:,dir,decalgeo+numnodige0+offset_newfct+newfct) = newknotloc(:,1)
235 knotlocpc(:,dirtang1,decalgeo+numnodige0+offset_newfct+newfct) = knotlocpc(:,dirtang1,decalgeo+idfctcoupee)
236 knotlocpc(:,dirtang2,decalgeo
237 tab_newfct(l_tab_newfct) = numnodige0+offset_newfct+newfct
241 idfctcoupee2 = tab_fctcut(j)
243 IF(abs(knotlocpc(i,dirtang1,decalgeo+idfctcoupee)-knotlocpc(i,dirtang1,decalgeo+idfctcoupee2))>tol)
EXIT
245 IF(i>degtang1+1)
THEN
247 IF(abs(knotlocpc(i,dirtang2,decalgeo+idfctcoupee)-knotlocpc(i,dirtang2,decalgeo+idfctcoupee2))>tol)
EXIT
250 IF(i>degtang2+1)
THEN
252 IF(abs(newknotloc(i,2)-knotlocpc(i,dir,decalgeo+idfctcoupee2))>tol)
EXIT
262 x(:,idfctcoupee2)=(x(:,idfctcoupee2)*gama(idfctcoupee2)+
263 . x(:,idfctcoupee)*gama(idfctcoupee)*
alpha2)/
264 . (gama(idfctcoupee2)+
alpha2*gama(idfctcoupee))
267 . (gama(idfctcoupee2)+
alpha2*gama(idfctcoupee))
268 v(:,idfctcoupee2)=(v(:,idfctcoupee2)*gama(idfctcoupee2)+
269 . v(:,idfctcoupee)*gama(idfctcoupee)*
alpha2)/
270 . (gama(idfctcoupee2)+
alpha2*gama(idfctcoupee))
271 ms(idfctcoupee2)=(ms(idfctcoupee2)*gama(idfctcoupee2)
272 . ms(idfctcoupee)*gama(idfctcoupee)*
alpha2)/
273 . (gama(idfctcoupee2)+
alpha2*gama(idfctcoupee))
274 wige(idfctcoupee2)=(wige(idfctcoupee2)*gama(idfctcoupee2)+
276 . (gama(idfctcoupee2)+
alpha2*gama(idfctcoupee))
278 gama(idfctcoupee2) = gama(idfctcoupee2)+
alpha2*gama(idfctcoupee)
279 knotlocpc(:,dir,decalgeo+idfctcoupee2) = newknotloc(:,2)
280 ELSEIF(i<=deg+1)
THEN
282 idfctcoupee2 = numnodige0+offset_newfct+j
284 IF(abs(knotlocpc(i,dirtang1,decalgeo+idfctcoupee)-knotlocpc(i,dirtang1,decalgeo+idfctcoupee2))>tol)
EXIT
286 IF(i>degtang1+1)
THEN
291 IF(i>degtang2+1)
THEN
293 IF(abs(newknotloc
EXIT
304 x(:,numnodige0+offset_newfct+j)=(x(:,numnodige0+offset_newfct+j)*gama(idfctcoupee2)+
305 . x(:,idfctcoupee)*gama(idfctcoupee)*
alpha2)/
306 . (gama(idfctcoupee2)+
alpha2*gama(idfctcoupee))
307 d(:,numnodige0+offset_newfct+j)=(d(:,numnodige0+offset_newfct+j)*gama(idfctcoupee2)+
308 . d(:,idfctcoupee)*gama(idfctcoupee)*
alpha2)/
309 . (gama(idfctcoupee2)+
alpha2*gama(idfctcoupee))
310 v(:,numnodige0+offset_newfct+j)=(v(:,numnodige0+offset_newfct+j)*gama(idfctcoupee2)+
311 . v(:,idfctcoupee)*gama(idfctcoupee)*
alpha2)/
312 . (gama(idfctcoupee2)+
alpha2*gama(idfctcoupee))
313 ms(numnodige0+offset_newfct+j)=(ms(numnodige0+offset_newfct+j)*gama(idfctcoupee2)+
314 . ms(idfctcoupee)*gama(idfctcoupee)*
alpha2)/
315 . (gama(idfctcoupee2)+
alpha2*gama(idfctcoupee))
316 wige(numnodige0+offset_newfct+j)=(wige(numnodige0+offset_newfct+j)*gama(idfctcoupee2)+
317 . wige(idfctcoupee)*gama(idfctcoupee)*
alpha2)/
318 . (gama(idfctcoupee2)+
alpha2*gama(idfctcoupee))
320 gama(idfctcoupee2) = gama(idfctcoupee2)+
alpha2*gama(idfctcoupee)
321 knotlocpc(:,dir,decalgeo+idfctcoupee2) = newknotloc(:,2)
324 l_tab_newfct = l_tab_newfct+1
326 x(:,numnodige0+offset_newfct+newfct) = x(:
327 d(:,numnodige0+offset_newfct
328 v(:,numnodige0+offset_newfct+newfct) = v(:,idfctcoupee)
330 wige(numnodige0+offset_newfct+newfct) = wige(idfctcoupee)
332 gama(numnodige0+offset_newfct+newfct) =
alpha2*gama(idfctcoupee)
333 knotlocpc(:,dir,decalgeo+numnodige0+offset_newfct+newfct) = newknotloc(:,2)
334 knotlocpc(:,dirtang1,decalgeo+numnodige0+offset_newfct+newfct) = knotlocpc(:,dirtang1,decalgeo+idfctcoupee)
335 knotlocpc(:,dirtang2,decalgeo+numnodige0+offset_newfct+newfct) = knotlocpc(:,dirtang2,decalgeo+idfctcoupee)
336 tab_newfct(l_tab_newfct) = numnodige0+offset_newfct+newfct
345 IF(i==numpatch) cycle
346 DO j=1,tabconpatch(i)%L_TAB_IG3D
347 DO itnctrl=1,kxig3d(3,tabconpatch(i)%TAB_IG3D(j))
348 IF(ixig3d(kxig3d(4,tabconpatch(i)%TAB_IG3D(j))+itnctrl-1)==idfctcoupee)
THEN
356 IF(flag_remove==1)
THEN
357 l_tab_remove = l_tab_remove+1
358 tab_remove(l_tab_remove) = idfctcoupee
360 l_tab_stay = l_tab_stay+1
361 tab_stay(l_tab_stay) = idfctcoupee