40 SUBROUTINE prerafig3d(KNOT,KNOTLOCPC,KNOTLOCEL,KXIG3D,IXIG3D,
41 . IGEO,IPARTIG3D,X ,V ,D ,
42 . MS ,WIGE ,TABCONPATCH,FLAG_PRE)
50#include "implicit_f.inc"
60 INTEGER IXIG3D(*),KXIG3D(NIXIG3D,*),IGEO(NPROPGI,*),
63 TYPE(),
DIMENSION(*) :: TABCONPATCH
64 my_real knot(*),knotlocpc(deg_max,3,*),knotlocel(2,3,*)
65 my_real x(*),v(*),d(*),ms(*),wige(*)
69 TYPE(
meshsurfig3d_),
DIMENSION(:),
ALLOCATABLE,
TARGET :: MESHSURF
70 TYPE(MESHSURFIG3D_),
POINTER :: PMESHSURF, P2MESHSURF
71 INTEGER I,J,K,L,M,N,P,ITNCTRL,INCTRL,ITKSI,ITETA,ITZETA,
72 . ipid,iad_knot,ittest,itel,offset_knot,
73 . px,py,pz,idx,idy,idz,iel,
74 . n1,n2,n3,nknot1,nknot2,nknot3,nelx,nely,nelz,
75 . dir,decalgeo_tmp,decalgeofinal,nbcut,idnbcut,
76 . idknot1,idknot2,pdir,ptang1,ptang2,
77 . neldir,neltang1,neltang2,
78 . p2dir,p2tang1,p2tang2,l_tab_newfctcut,itpatch,
79 . nbpatch_ig3d,flag_debug
80 my_real,
DIMENSION(:),
ALLOCATABLE :: gama
84 INTEGER,
DIMENSION(:,:,:),
POINTER :: MESHIGE
85 INTEGER,
DIMENSION(:,:,:),
ALLOCATABLE,
TARGET :: MESHIGEX,MESHIGEY,MESHIGEZ
86 INTEGER,
DIMENSION(:),
ALLOCATABLE,
TARGET :: IDXEL,IDYEL,IDZEL
87 INTEGER,
DIMENSION(:),
POINTER :: IDDIR,IDTANG1,IDTANG2
91 INTEGER,
DIMENSION(:,:),
ALLOCATABLE :: IDFILS,TAB_INITIAL_CUT
92 INTEGER,
DIMENSION(:),
ALLOCATABLE :: TAB_REMOVE,TAB_STAY,TAB_NEWFCT,
93 . tab_newfctcut,el_connect
97 my_real,
DIMENSION(:),
ALLOCATABLE :: x_tmp,v_tmp,d_tmp,ms_tmp,wige_tmp
107 nbnewx_tmp = addelig3d*20
109 ALLOCATE (tab_initial_cut(3,numelig3d0))
110 ALLOCATE (idfils(nbfilsmax,numelig3d0))
111 ALLOCATE (tab_remove(addelig3d*27))
112 ALLOCATE (tab_stay(nint(addelig3d*27*0.5)))
113 ALLOCATE (tab_newfct(nint(addelig3d*27*1.2)))
114 ALLOCATE (meshsurf(nbmeshsurf))
115 ALLOCATE (gama(numnodige0+2*addelig3d*27))
117 nbnewx_tmp = l_tab_newfct
118 ALLOCATE (tab_initial_cut(3,numelig3d))
119 ALLOCATE (idfils(nbfilsmax,numelig3d))
120 ALLOCATE (tab_remove(l_tab_remove))
121 ALLOCATE (tab_stay(l_tab_stay))
122 ALLOCATE (tab_newfct(l_tab_newfct))
123 ALLOCATE (meshsurf(nbmeshsurf))
124 ALLOCATE (x_tmp(3*(numnodige0+l_tab_newfct)))
125 ALLOCATE (d_tmp(3*(numnodige0+l_tab_newfct)))
126 ALLOCATE (v_tmp(3*(numnodige0+l_tab_newfct)))
127 ALLOCATE (ms_tmp(numnodige0+l_tab_newfct))
128 ALLOCATE (wige_tmp(numnodige0+l_tab_newfct))
129 ALLOCATE (gama(numnodige0+l_tab_newfct))
132 x_tmp((i-1)*3+j) = x((i-1)*3+j)
133 v_tmp((i-1)*3+j) = v((i-1)*3+j)
134 d_tmp((i-1)*3+j) = d((i-1)*3+j)
137 wige_tmp(i) = wige(i)
139 DO i=numnodige0+1,numnodige0+l_tab_newfct
149 ALLOCATE (el_connect(numelig3d0+addelig3d))
180 ipid=tabconpatch(p)%PID
181 iad_knot = igeo(40,ipid)
191 decalgeo_tmp=(ipid-1)*(numnod+nbnewx_tmp)
192 DO i=1,tabconpatch(p)%L_TAB_IG3D
193 iel=tabconpatch(p)%TAB_IG3D(i)
202 inctrl = ixig3d(kxig3d(4,iel)+itnctrl-1)
204 knotlocpc(l+1,1,decalgeo_tmp+inctrl)=knot(iad_knot+idx-itksi+l+1)
207 knotlocpc(m+1,2,decalgeo_tmp+inctrl)=knot(iad_knot+nknot1+idy-iteta+m+1)
210 knotlocpc(n+1,3,decalgeo_tmp+inctrl)=knot(iad_knot+nknot1+nknot2+idz-itzeta+n+1)
219 DO WHILE (knot(iad_knot+kxig3d(9,iel))==knot(iad_knot+kxig3d(9,iel)+1))
220 kxig3d(9,iel)=kxig3d(9,iel)+1
222 DO WHILE (knot(iad_knot+nknot1+kxig3d(10,iel))==knot(iad_knot+nknot1+kxig3d(10,iel)+1))
223 kxig3d(10,iel)=kxig3d(10,iel)+1
225 DO WHILE (knot(iad_knot+nknot1+nknot2+kxig3d(11,iel))==knot(iad_knot+nknot1+nknot2+kxig3d(11,iel)+1))
226 kxig3d(11,iel)=kxig3d(11,iel)+1
229 knotlocel(1,1,iel) = knot(iad_knot+kxig3d(6,iel))
230 knotlocel(2,1,iel) = knot(iad_knot+kxig3d(9,iel))
231 knotlocel(1,2,iel) = knot(iad_knot+nknot1+kxig3d(7,iel))
232 knotlocel(2,2,iel) = knot(iad_knot+nknot1+kxig3d(10,iel))
233 knotlocel(1,3,iel) = knot(iad_knot+nknot1+nknot2+kxig3d(8,iel))
234 knotlocel(2,3,iel) = knot(iad_knot+nknot1+nknot2+kxig3d(11,iel))
241 tab_initial_cut(1,iel) = kxig3d(12,iel)
242 tab_initial_cut(2,iel) = kxig3d(13,iel)
243 tab_initial_cut(3,iel) = kxig3d(14,iel)
259 ipid=tabconpatch(p)%PID
260 iad_knot = igeo(40,ipid)
273 ALLOCATE(idxel(nknot1))
274 ALLOCATE(idyel(nknot2))
275 ALLOCATE(idzel(nknot3))
280 IF(knot(iad_knot+i)/=knot(iad_knot+i+1))
THEN
286 IF(knot(iad_knot+nknot1+i)/=knot(iad_knot+nknot1+i+1))
THEN
292 IF(knot(iad_knot+nknot1+nknot2+i)/=knot(iad_knot+nknot1+nknot2+i+1))
THEN
302 ALLOCATE(meshigex(nely,nelz,nelx))
303 ALLOCATE(meshigey(nelz,nelx,nely))
304 ALLOCATE(meshigez(nelx,nely,nelz))
309 DO l=1,tabconpatch(p)%L_TAB_IG3D
310 iel = tabconpatch(p)%TAB_IG3D(l)
311 meshigex(idyel(kxig3d(7,iel)),idzel(kxig3d(8,iel)),idxel(kxig3d(6,iel)))=iel
312 meshigey(idzel(kxig3d(8,iel)),idxel(kxig3d(6,iel)),idyel(kxig3d(7,iel)))=iel
313 meshigez(idxel(kxig3d(6,iel)),idyel(kxig3d(7,iel)),idzel(kxig3d(8,iel)))=iel
342 offset_knot=iad_knot+nknot1
357 offset_knot=iad_knot+nknot1+nknot2
369 idnbcut= -huge(idnbcut)
370 idknot1=-huge(idknot1)
371 idknot2=-huge(idknot2)
372 offset_knot=-huge(offset_knot)
377 neltang1=-huge(neltang1)
378 neltang2=-huge(neltang2)
390 iel = tabconpatch(p)%TAB_IG3D(l)
391 decalgeo_tmp=(kxig3d(2,iel)-1)*(numnod+nbnewx_tmp)
392 IF(kxig3d(idnbcut,iel)>1)
THEN
393 nbcut=tab_initial_cut(dir,iel)
395 DO i=(tab_initial_cut(dir,iel)-kxig3d(idnbcut,iel))+1,tab_initial_cut(dir,iel)-1
397 nbmeshsurf = nbmeshsurf + 1
399 pmeshsurf => meshsurf(nbmeshsurf)
401 pmeshsurf%ID_MESHSURF=nbmeshsurf
402 pmeshsurf%ID_PID=ipid
405 . nknot1,nknot2,nknot3,i,pmeshsurf%KNOT_INSERE)
408 . iddir ,idtang1 ,idtang2 ,
409 . neldir ,neltang1 ,neltang2 ,pmeshsurf%DIR ,
410 . pmeshsurf%TAB_COINKNOT,pmeshsurf%L_TAB_COINKNOT,
411 . pmeshsurf%TAB_ELCUT,pmeshsurf%L_TAB_ELCUT,
412 . pmeshsurf%TAB_NEWEL,pmeshsurf%L_TAB_NEWEL,
413 . knot,iad_knot,nknot1,nknot2,nknot3,idfils,
414 . knotlocel,pmeshsurf%KNOT_INSERE,ipartig3d,tab_initial_cut,i,0)
416 ALLOCATE(pmeshsurf%TAB_COINKNOT(2,pmeshsurf%L_TAB_COINKNOT))
417 ALLOCATE(pmeshsurf%TAB_ELCUT(pmeshsurf%L_TAB_ELCUT))
418 ALLOCATE(pmeshsurf%TAB_NEWEL(pmeshsurf%L_TAB_NEWEL))
421 . iddir ,idtang1 ,idtang2 ,
422 . neldir ,neltang1 ,neltang2 ,pmeshsurf%DIR ,
423 . pmeshsurf%TAB_COINKNOT,pmeshsurf%L_TAB_COINKNOT,
424 . pmeshsurf%TAB_ELCUT,pmeshsurf%L_TAB_ELCUT,
425 . pmeshsurf%TAB_NEWEL,pmeshsurf%L_TAB_NEWEL,
426 . knot,iad_knot,nknot1,nknot2,nknot3,idfils,
427 . knotlocel,pmeshsurf%KNOT_INSERE,ipartig3d,tab_initial_cut,i,1)
429 pmeshsurf%L_TAB_MESHSURFCUT = 0
431 DO ittest=1,nbmeshsurf-1
432 p2meshsurf => meshsurf(ittest)
434 . pmeshsurf%ID_PID, p2meshsurf%ID_PID, p2meshsurf%ID_MESHSURF,
435 . pmeshsurf%TAB_COINKNOT,pmeshsurf%L_TAB_COINKNOT,
437 . pmeshsurf%KNOT_INSERE,p2meshsurf%KNOT_INSERE,
438 . pmeshsurf%TAB_MESHSURFCUT,pmeshsurf%L_TAB_MESHSURFCUT,
439 . p2meshsurf%TAB_MESHSURFCUT,p2meshsurf%L_TAB_MESHSURFCUT,0)
443 pmeshsurf%L_TAB_MESHSURFCUT = 0
445 DO ittest=1,nbmeshsurf-1
446 p2meshsurf => meshsurf(ittest)
448 . pmeshsurf%ID_PID, p2meshsurf%ID_PID, p2meshsurf%ID_MESHSURF
449 . pmeshsurf%TAB_COINKNOT,pmeshsurf%L_TAB_COINKNOT,
450 . p2meshsurf%TAB_COINKNOT,p2meshsurf%L_TAB_COINKNOT,
451 . pmeshsurf%KNOT_INSERE,p2meshsurf%KNOT_INSERE,
452 . pmeshsurf%TAB_MESHSURFCUT,pmeshsurf%L_TAB_MESHSURFCUT,
453 . p2meshsurf%TAB_MESHSURFCUT,p2meshsurf%L_TAB_MESHSURFCUT,1)
456 CALL test_support_fct(ixig3d, kxig3d, knotlocpc, ptang1, ptang2, pmeshsurf%DIR,
457 . pmeshsurf%TAB_ELCUT,pmeshsurf%L_TAB_ELCUT,
458 . pmeshsurf%TAB_COINKNOT,pmeshsurf%L_TAB_COINKNOT,
459 . pmeshsurf%TAB_FCTCUT,pmeshsurf%L_TAB_FCTCUT,decalgeo_tmp,0)
461 ALLOCATE(pmeshsurf%TAB_FCTCUT(pmeshsurf%L_TAB_FCTCUT))
463 CALL test_support_fct(ixig3d, kxig3d, knotlocpc, ptang1, ptang2, pmeshsurf%DIR,
464 . pmeshsurf%TAB_ELCUT,pmeshsurf%L_TAB_ELCUT,
465 . pmeshsurf%TAB_COINKNOT,pmeshsurf%L_TAB_COINKNOT,
466 . pmeshsurf%TAB_FCTCUT,pmeshsurf%L_TAB_FCTCUT,decalgeo_tmp,1)
469 . pdir,ptang1,ptang2,iad_knot
470 . gama,pmeshsurf%DIR,pmeshsurf%KNOT_INSERE,
471 . x_tmp,d_tmp,v_tmp,ms_tmp,wige_tmp,
472 . pmeshsurf%TAB_FCTCUT,pmeshsurf%L_TAB_FCTCUT,
473 . tab_remove,tab_newfct,decalgeo_tmp,tabconpatch,p,
474 . kxig3d,ixig3d,tab_stay,flag_pre)
476 DO ittest=1,pmeshsurf%L_TAB_MESHSURFCUT
477 p2meshsurf => meshsurf(pmeshsurf%TAB_MESHSURFCUT(ittest))
478 IF(p2meshsurf%DIR==2)
THEN
482 ELSEIF(p2meshsurf%DIR==1)
THEN
489 . p2meshsurf%DIR, p2meshsurf%KNOT_INSERE,
490 . p2meshsurf%TAB_COINKNOT,p2meshsurf%L_TAB_COINKNOT
491 . tab_newfctcut,l_tab_newfctcut,decalgeo_tmp,tab_remove,0)
492 IF(l_tab_newfctcut>0)
THEN
493 ALLOCATE(tab_newfctcut(l_tab_newfctcut))
495 . p2meshsurf%DIR, p2meshsurf%KNOT_INSERE,
496 . p2meshsurf%TAB_COINKNOT,p2meshsurf%L_TAB_COINKNOT, tab_newfct,
497 . tab_newfctcut,l_tab_newfctcut,decalgeo_tmp
499 . p2dir,p2tang1,p2tang2,iad_knot,nknot1,nknot2,nknot3,
500 . gama,p2meshsurf%DIR,p2meshsurf%KNOT_INSERE,
501 . x_tmp,d_tmp,v_tmp,ms_tmp,wige_tmp,
502 . tab_newfctcut,l_tab_newfctcut,
503 . tab_remove,tab_newfct,decalgeo_tmp,tabconpatch,p,
504 . kxig3d,ixig3d,tab_stay,flag_pre)
506 DEALLOCATE(tab_newfctcut)
512 . knotlocpc,knotlocel,
513 . pmeshsurf%TAB_ELCUT,pmeshsurf%L_TAB_ELCUT,
514 . pmeshsurf%TAB_NEWEL,pmeshsurf%L_TAB_NEWEL,
515 . pmeshsurf%TAB_FCTCUT,pmeshsurf%L_TAB_FCTCUT,
516 . tab_remove,tab_newfct,el_connect,tabconpatch(p),
517 . idfils,flag_pre,flag_debug)
519 offset_newfct = offset_newfct + newfct
525 DEALLOCATE(idxel,idyel,idzel)
526 DEALLOCATE(meshigex,meshigey,meshigez)
534 IF(meshsurf(i)%L_TAB_COINKNOT/=0)
DEALLOCATE(meshsurf(i)%TAB_COINKNOT)
535 IF(meshsurf(i)%L_TAB_ELCUT/=0)
DEALLOCATE(meshsurf(i)%TAB_ELCUT)
536 IF(meshsurf(i)%L_TAB_FCTCUT/=0)
DEALLOCATE(meshsurf(i)%TAB_FCTCUT)
537 IF(meshsurf(i)%L_TAB_NEWEL/=0)
DEALLOCATE(meshsurf(i)%TAB_NEWEL)
538 IF(meshsurf(i)%L_TAB_MESHSURFCUT/=0)
DEALLOCATE(meshsurf(i)%TAB_MESHSURFCUT)
547 IF(flag_debug==1)
THEN
548 DO i=1,numelig3d0+addelig3d
550 decalgeo_tmp=(kxig3d(2,i)-1)*(numnod+nbnewx_tmp)
552 inctrl=ixig3d(kxig3d(4,i)+j-1)
554 print*,
'ELEMENT',i,
'point',inctrl
555 ELSEIF(knotlocel(1,1,i)<knotlocpc(1,1,decalgeo_tmp+inctrl)-em06 .OR.
556 . knotlocel(2,1,i)>knotlocpc(4,1,decalgeo_tmp+inctrl)+em06 .OR.
557 . knotlocel(1,2,i)<knotlocpc(1,2,decalgeo_tmp+inctrl)-em06 .OR.
558 . knotlocel(2,2,i)>knotlocpc(4,2,decalgeo_tmp+inctrl)+em06 .OR.
559 . knotlocel(1,3,i)<knotlocpc(1,3,decalgeo_tmp+inctrl)-em06 .OR.
560 . knotlocel(2,3,i)>knotlocpc(4,3,decalgeo_tmp+inctrl)+em06)
THEN
561 print*,
'ELEMENT',i,
'point',inctrl
562 print*,knotlocel(1,1,i),
'<',knotlocpc(1,1,decalgeo_tmp+inctrl)
563 print*,knotlocel(2,1,i),
'>',knotlocpc(4,1,decalgeo_tmp+inctrl)
564 print*,knotlocel(1,2,i),
'<',knotlocpc(1,2,decalgeo_tmp+inctrl)
565 print*,knotlocel(2,2,i),
'>',knotlocpc(
566 print*,knotlocel(1,3,i),
'<',knotlocpc(1,3,decalgeo_tmp+inctrl)
567 print*,knotlocel(2,3,i),
'>',knotlocpc(4,3,decalgeo_tmp+inctrl)
573 IF(nbmeshsurf/=0)
THEN
580 . x_tmp,d_tmp,v_tmp,ms_tmp,wige_tmp,
581 . tab_remove,tab_newfct,el_connect,
582 . ipartig3d,igeo,tab_stay,flag_pre,flag_debug)
591 x((i-1)*3+j) = x_tmp((i-1)*3+j)
592 v((i-1)*3+j) = v_tmp((i-1)*3+j)
593 d((i-1)*3+j) = d_tmp((i-1)*3+j)
596 wige(i) = wige_tmp(i)
599 ipid=tabconpatch(p)%PID
600 decalgeofinal=(ipid-1)*numnod
601 decalgeo_tmp=(ipid-1)*(numnod+nbnewx_tmp)
603 knotlocpc(:,1,decalgeofinal+i) = knotlocpc(:,1,decalgeo_tmp+i)
604 knotlocpc(:,2,decalgeofinal+i) = knotlocpc(:,2,decalgeo_tmp+i)
605 knotlocpc(:,3,decalgeofinal+i) = knotlocpc(:,3,decalgeo_tmp+i)
608 DEALLOCATE(x_tmp,v_tmp,d_tmp,ms_tmp,wige_tmp)
610 IF(flag_debug==1)
THEN
611 DO i=1,numelig3d0+addelig3d
613 decalgeofinal=(kxig3d(2,i)-1)*(numnod)
615 inctrl=ixig3d(kxig3d(4,i)+j-1)
617 print*,
'ELEMENT',i,
'point',inctrl
618 ELSEIF(knotlocel(1,1,i)<knotlocpc(1,1,decalgeofinal+inctrl)-em06 .OR.
619 . knotlocel(2,1,i)>knotlocpc(4,1,decalgeofinal+inctrl)+em06 .OR.
620 . knotlocel(1,2,i)<knotlocpc(1,2,decalgeofinal+inctrl)-em06 .OR.
621 . knotlocel(2,2,i)>knotlocpc(4,2,decalgeofinal+inctrl)+em06 .OR.
622 . knotlocel(1,3,i)<knotlocpc(1,3,decalgeofinal+inctrl)-em06 .OR.
623 . knotlocel(2,3,i)>knotlocpc(4,3,decalgeofinal+inctrl)+em06)
THEN
624 print*,
'ELEMENT',i,
'point',inctrl
625 print*,knotlocel(1,1,i),
'<',knotlocpc(1,1,decalgeofinal+inctrl)
626 print*,knotlocel(2,1,i),
'>',knotlocpc(4,1,decalgeofinal+inctrl)
627 print*,knotlocel(1,2,i),
'<',knotlocpc(1,2,decalgeofinal+inctrl)
628 print*,knotlocel(2,2,i),
'>',knotlocpc(4,2,decalgeofinal+inctrl)
629 print*,knotlocel(1,3,i),
'<',knotlocpc(1,3,decalgeofinal+inctrl)
630 print*,knotlocel(2,3,i),
'>',knotlocpc(4,3,decalgeofinal+inctrl)
642 DEALLOCATE(tab_remove)
644 DEALLOCATE(tab_newfct)
647 DEALLOCATE(el_connect)
648 DEALLOCATE(tab_initial_cut)