34 1 ADD ,NSN ,IRECT ,XLOC ,STF ,
35 2 STFN ,XYZM ,I_ADD ,MAXSIZ ,II_STOK ,
36 3 CAND_N ,CAND_E ,MULNSN ,NOINT ,TZINF ,
37 4 MAXBOX ,MINBOX ,I_MEM ,NB_N_B ,I_ADD_MAX,
38 5 ESHIFT ,INACTI ,NRTM ,IGAP ,GAP ,
39 7 GAP_S ,GAPMIN ,GAPMAX ,MARGE ,CURV_MAX ,
40 8 XM0 ,NOD_NORMAL,DEPTH ,DRAD ,DGAPLOAD )
48#include "implicit_f.inc"
55 PARAMETER (NVECSZ = mvsiz)
115 INTEGER ,MAXSIZ,I_MEM,ESHIFT,NSN,NRTM,
116 . MULNSN,NB_N_B,NOINT,I_ADD_MAX,INACTI,IGAP,
117 . ADD(2,*),IRECT(4,*),
118 . CAND_N(*),CAND_E(*),II_STOK
121 . XLOC(3,*),XYZM(6,*),STF(*),STFN(*),GAP_S(*),
122 . xm0(3,*), nod_normal(3,*),
123 . tzinf,maxbox,minbox,marge,gap,gapmin,gapmax,
125 my_real ,
INTENT(IN) :: dgapload,drad
134 . dx,dy,dz,dsup,seuil, xx1, xx2, xx3, xx4,
135 . xmin, xmax,ymin,
ymax,zmin, zmax, tz, gapsmx, bgapsmx, gapl
137 INTEGER,
DIMENSION(:),
ALLOCATABLE :: PROV_N
138 INTEGER,
DIMENSION(:),
ALLOCATABLE :: PROV_E
139 INTEGER,
DIMENSION(:),
ALLOCATABLE :: TN1
140 INTEGER,
DIMENSION(:),
ALLOCATABLE :: TN2
141 INTEGER,
DIMENSION(:),
ALLOCATABLE :: TN3
142 INTEGER,
DIMENSION(:),
ALLOCATABLE :: TN4
143 INTEGER,
DIMENSION(:),
ALLOCATABLE :: BPE
144 INTEGER,
DIMENSION(:),
ALLOCATABLE :: PE
145 INTEGER,
DIMENSION(:),
ALLOCATABLE :: BPN
146 INTEGER,
DIMENSION(:),
ALLOCATABLE :: PN
148 my_real,
DIMENSION(:,:),
ALLOCATABLE :: txx1
149 my_real,
DIMENSION(:,:),
ALLOCATABLE :: txx2
150 my_real,
DIMENSION(:,:),
ALLOCATABLE :: txx3
151 my_real,
DIMENSION(:,:),
ALLOCATABLE :: txx4
152 my_real,
DIMENSION(:),
ALLOCATABLE :: txmax
153 my_real,
DIMENSION(:),
ALLOCATABLE :: txmin
154 my_real,
DIMENSION(:),
ALLOCATABLE :: tymax
155 my_real,
DIMENSION(:),
ALLOCATABLE :: tymin
156 my_real,
DIMENSION(:),
ALLOCATABLE :: tzmax
157 my_real,
DIMENSION(:),
ALLOCATABLE :: tzmin
159 CALL my_alloc(prov_n,2*mvsiz)
160 CALL my_alloc(prov_e,2*mvsiz)
161 CALL my_alloc(tn1,nvecsz)
162 CALL my_alloc(tn2,nvecsz)
163 CALL my_alloc(tn3,nvecsz)
164 CALL my_alloc(tn4,nvecsz)
165 CALL my_alloc(bpe,maxsiz/3)
166 CALL my_alloc(pe,maxsiz)
167 CALL my_alloc(bpn,nsn)
168 CALL my_alloc(pn,nsn)
169 CALL my_alloc(txx1,3,nvecsz)
170 CALL my_alloc(txx2,3,nvecsz)
171 CALL my_alloc(txx3,3,nvecsz)
172 CALL my_alloc(txx4,3,nvecsz)
173 CALL my_alloc(txmax,nvecsz)
174 CALL my_alloc(txmin,nvecsz)
175 CALL my_alloc(tymax,nvecsz)
176 CALL my_alloc(tymin,nvecsz)
177 CALL my_alloc(tzmax,nvecsz)
178 CALL my_alloc(tzmin,nvecsz)
206 IF(stfn(i)/=zero)
THEN
207 IF(xloc(1,i)>=xmin.AND.xloc(1,i)<=xmax.AND.
208 . xloc(2,i)>=ymin.AND.xloc(2,i)<=
ymax.AND.
209 . xloc(3,i)>=zmin.AND.xloc(3,i)<=zmax)
THEN
234 ELSE IF(dz==dsup)
THEN
237 seuil =(xyzm(dir+3,i_add)+xyzm(dir,i_add))*0.5
246 IF(xloc(dir,bpn(i))<seuil)
THEN
248 nb_ncn1 = nb_ncn1 + 1
255 IF(xloc(dir,bpn(i))>=seuil)
THEN
264 IF(xloc(dir,bpn(i))<seuil)
THEN
266 nb_ncn1 = nb_ncn1 + 1
269 gapsmx =
max(gapsmx,
max(gap_s(bpn(i))+dgapload,depth,drad))
275 IF(xloc(dir,bpn(i))>=seuil)
THEN
279 bgapsmx =
max(bgapsmx,
max(gap_s(bpn(i))+dgapload,depth,drad))
292 xx1=xm0(dir, irect(1,ne))
293 xx2=xm0(dir, irect(2,ne))
294 xx3=xm0(dir, irect(3,ne))
295 xx4=xm0(dir, irect(4,ne))
296 xmax=
max(xx1,xx2,xx3,xx4)+tzinf
303 ELSEIF(nb_ncn==0)
THEN
306 xx1=xm0(dir, irect(1,ne))
307 xx2=xm0(dir, irect(2,ne))
308 xx3=xm0(dir, irect(3,ne))
309 xx4=xm0(dir, irect(4,ne))
310 xmin=
min(xx1,xx2,xx3,xx4)-tzinf
320 xx1=xm0(dir, irect(1,ne))
321 xx2=xm0(dir, irect(2,ne))
322 xx3=xm0(dir, irect(3,ne))
323 xx4=xm0(dir, irect(4,ne))
324 xmin=
min(xx1,xx2,xx3,xx4)-tzinf
334 xx1=xm0(dir, irect(1,ne))
335 xx2=xm0(dir, irect(2,ne))
336 xx3=xm0(dir, irect(3,ne))
337 xx4=xm0(dir, irect(4,ne))
338 xmax=
max(xx1,xx2,xx3,xx4)+tzinf
353 xx1=xm0(dir, irect(1,ne))
354 xx2=xm0(dir, irect(2,ne))
355 xx3=xm0(dir, irect(3,ne))
356 xx4=xm0(dir, irect(4,ne))
357 xmax=
max(xx1,xx2,xx3,xx4)
358 + +
max(
min(
max(bgapsmx,gapmin),gapmax)+dgapload,depth,drad)
366 ELSEIF(nb_ncn==0)
THEN
369 xx1=xm0(dir, irect(1,ne))
370 xx2=xm0(dir, irect(2,ne))
371 xx3=xm0(dir, irect(3,ne))
372 xx4=xm0(dir, irect(4,ne))
373 xmin=
min(xx1,xx2,xx3,xx4)
374 - -
max(
min(
max(gapsmx,gapmin),gapmax)+dgapload,depth,drad)
385 xx1=xm0(dir, irect(1,ne))
386 xx2=xm0(dir, irect(2,ne))
387 xx3=xm0(dir, irect(3,ne))
388 xx4=xm0(dir, irect(4,ne))
389 xmin=
min(xx1,xx2,xx3,xx4)
390 - -
max(
min(
max(gapsmx,gapmin),gapmax)+dgapload,depth,drad)
401 xx1=xm0(dir, irect(1,ne))
402 xx2=xm0(dir, irect(2,ne))
403 xx3=xm0(dir, irect(3,ne))
404 xx4=xm0(dir, irect(4,ne))
405 xmax=
max(xx1,xx2,xx3,xx4)
406 + +
max(
min(
max(bgapsmx,gapmin),gapmax)+dgapload,depth,drad)
419 add(1,i_add+1) = addnn
420 add(2,i_add+1) = addne
427 xyzm(1,i_add+1) = xyzm(1,i_add)
428 xyzm(2,i_add+1) = xyzm(2,i_add)
429 xyzm(3,i_add+1) = xyzm(3,i_add)
430 xyzm(4,i_add+1) = xyzm(4,i_add)
431 xyzm(5,i_add+1) = xyzm(5,i_add)
432 xyzm(6,i_add+1) = xyzm(6,i_add)
433 xyzm(dir,i_add+1) = seuil
434 xyzm(dir+3,i_add) = seuil
440 IF(i_add+1>=i_add_max)
THEN
456 IF(add(2,i_add)+nb_ec>maxsiz)
THEN
464 IF(nb_ec/=0.AND.nb_nc/=0)
THEN
466 dx = xyzm(4,i_add) - xyzm(1,i_add)
467 dy = xyzm(5,i_add) - xyzm(2,i_add)
468 dz = xyzm(6,i_add) - xyzm(3,i_add)
478 IF(nb_ec+nb_nc<=nvecsz)
THEN
479 ncand_prov = nb_ec*nb_nc
481 ncand_prov = nvecsz+1
484 IF(dsup<minbox.OR.(nb_nc<=nb_n_b)
485 & .OR.(ncand_prov<=nvecsz))
THEN
487 ncand_prov = nb_ec*nb_nc
488 IF(ivector==1.AND.ncand_prov<=nvecsz)
THEN
496 txx1(1,i)=xm0(1, tn1(i))
497 txx2(1,i)=xm0(1, tn2(i))
498 txx3(1,i)=xm0(1, tn3(i))
499 txx4(1,i)=xm0(1, tn4(i))
500 txmax(i)=
max(txx1(1,i),txx2(1,i),txx3(1,i),txx4(1,i))
502 txmin(i)=
min(txx1(1,i),txx2(1,i),txx3(1,i),txx4(1,i))
504 txx1(2,i)=xm0(2, tn1(i))
505 txx2(2,i)=xm0(2, tn2(i))
506 txx3(2,i)=xm0(2, tn3(i))
507 txx4(2,i)=xm0(2, tn4(i))
508 tymax(i)=
max(txx1(2,i),txx2(2,i),txx3(2,i),txx4(2,i))
510 tymin(i)=
min(txx1(2,i),txx2(2,i),txx3(2,i),txx4(2,i))
512 txx1(3,i)=xm0(3, tn1(i))
513 txx2(3,i)=xm0(3, tn2(i))
514 txx3(3,i)=xm0(3, tn3(i))
515 txx4(3,i)=xm0(3, tn4(i))
516 tzmax(i)=
max(txx1(3,i),txx2(3,i),txx3(3,i),txx4(3,i))
518 tzmin(i)=
min(txx1(3,i),txx2(3,i),txx3(3,i),txx4(3,i))
521 DO k=1,ncand_prov,nvsiz
522 DO l=k,
min(k-1+nvsiz,ncand_prov)
526 IF(xloc(1,nn)>txmin(i).AND.xloc(1,nn)<txmax(i).AND.
527 & xloc(2,nn)>tymin(i).AND.xloc(2,nn)<tymax(i).AND.
528 & xloc(3,nn)>tzmin(i).AND.xloc(3,nn)<tzmax(i) )
THEN
530 prov_n(j_stok) = bpn(j)
531 prov_e(j_stok) = bpe(i)
534 IF(j_stok>=nvsiz)
THEN
536 1 nvsiz ,irect ,xloc ,ii_stok,cand_n,
537 2 cand_e ,mulnsn,noint ,marge ,i_mem ,
538 3 prov_n ,prov_e,eshift,inacti ,nsn ,
539 4 igap ,gap ,gap_s ,gapmin ,gapmax,
540 5 curv_max ,xm0 ,nod_normal,depth ,drad,
543 j_stok = j_stok-nvsiz
544#include "vectorize.inc"
546 prov_n(j) = prov_n(j+nvsiz)
547 prov_e(j) = prov_e(j+nvsiz)
558 txx1(1,i)=xm0(1, tn1(i))
559 txx2(1,i)=xm0(1, tn2(i))
560 txx3(1,i)=xm0(1, tn3(i))
561 txx4(1,i)=xm0(1, tn4(i))
562 txmax(i)=
max(txx1(1,i),txx2(1,i),txx3(1,i),txx4(1,i))
564 txmin(i)=
min(txx1(1,i),txx2(1,i),txx3(1,i),txx4(1,i))
566 txx1(2,i)=xm0(2, tn1(i))
567 txx2(2,i)=xm0(2, tn2(i))
568 txx3(2,i)=xm0(2, tn3(i))
569 txx4(2,i)=xm0(2, tn4(i))
570 tymax(i)=
max(txx1(2,i),txx2(2,i),txx3(2,i),txx4(2,i))
572 tymin(i)=
min(txx1(2,i),txx2(2,i),txx3(2,i),txx4(2,i))
574 txx1(3,i)=xm0(3, tn1(i))
575 txx2(3,i)=xm0(3, tn2(i))
576 txx3(3,i)=xm0(3, tn3(i))
577 txx4(3,i)=xm0(3, tn4(i))
580 tzmin(i)=
min(txx1(3,i),txx2(3,i),txx3(3,i),txx4(3,i))
583 DO k=1,ncand_prov,nvsiz
584 DO l=k,
min(k-1+nvsiz,ncand_prov)
588 gapl=
max(
max(
min(gap_s(bpn(j)),gapmax),gapmin)+dgapload,depth,drad)
589 IF(xloc(1,nn)>txmin(i)-gapl.AND.
590 & xloc(1,nn)<txmax(i)+gapl.AND.
591 & xloc(2,nn)>tymin(i)-gapl.AND.
592 & xloc(2,nn)<tymax(i)+gapl.AND.
593 & xloc(3,nn)>tzmin(i)-gapl.AND.
594 & xloc(3,nn)<tzmax(i)+gapl )
THEN
596 prov_n(j_stok) = bpn(j)
597 prov_e(j_stok) = bpe(i)
600 IF(j_stok>=nvsiz)
THEN
602 1 nvsiz ,irect ,xloc ,ii_stok,cand_n,
603 2 cand_e ,mulnsn,noint ,marge ,i_mem ,
604 3 prov_n ,prov_e,eshift,inacti ,nsn ,
605 4 igap ,gap ,gap_s ,gapmin ,gapmax,
606 5 curv_max ,xm0 ,nod_normal,depth,drad,
609 j_stok = j_stok-nvsiz
610#include
"vectorize.inc"
612 prov_n(j) = prov_n(j+nvsiz)
613 prov_e(j) = prov_e(j+nvsiz)
619 DO k=1,ncand_prov,nvsiz
621 DO l=k,
min(k-1+nvsiz,ncand_prov)
633 xmax=
max(xx1,xx2,xx3,xx4)+tzinf
634 xmin=
min(xx1,xx2,xx3,xx4)-tzinf
639 ymax=
max(xx1,xx2,xx3,xx4)+tzinf
640 ymin=
min(xx1,xx2,xx3,xx4)-tzinf
645 zmax=
max(xx1,xx2,xx3,xx4)+tzinf
646 zmin=
min(xx1,xx2,xx3,xx4)-tzinf
649 IF(xloc(1,nn)>xmin.AND.xloc(1,nn)<xmax.AND.
650 & xloc(2,nn)>ymin.AND.xloc(2,nn)<
ymax.AND.
651 & xloc(3,nn)>zmin.AND.xloc(3,nn)<zmax )
THEN
653 prov_n(j_stok) = bpn(j)
658 DO l=k,
min(k-1+nvsiz,ncand_prov)
670 tz=
max(
max(
min(gap_s(bpn(j)),gapmax),gapmin)+dgapload,depth,drad)
672 xmax=
max(xx1,xx2,xx3,xx4)+tz
673 xmin=
min(xx1,xx2,xx3,xx4)-tz
679 ymin=
min(xx1,xx2,xx3,xx4)-tz
684 zmax=
max(xx1,xx2,xx3,xx4)+tz
685 zmin=
min(xx1,xx2,xx3,xx4)-tz
688 IF(xloc(1,nn)>xmin.AND.xloc(1,nn)<xmax.AND.
689 & xloc(2,nn)>ymin.AND.xloc(2,nn)<
ymax.AND.
690 & xloc(3,nn)>zmin.AND.xloc(3,nn)<zmax )
THEN
692 prov_n(j_stok) = bpn(j)
697 IF(j_stok>=nvsiz)
THEN
699 1 nvsiz,irect ,xloc ,ii_stok,cand_n,
700 2 cand_e ,mulnsn,noint ,marge ,i_mem ,
701 3 prov_n ,prov_e,eshift,inacti ,nsn ,
702 4 igap ,gap ,gap_s ,gapmin ,gapmax ,
703 5 curv_max ,xm0 ,nod_normal,depth,drad ,
706 j_stok = j_stok-nvsiz
707#include "vectorize.inc"
709 prov_n(j) = prov_n(j+nvsiz)
710 prov_e(j) = prov_e(j+nvsiz)
732 CALL i7dstk(nb_nc,nb_ec,add(1,i_add),bpn,pn,bpe,pe)
741 1 j_stok,irect ,xloc ,ii_stok,cand_n,
742 2 cand_e ,mulnsn,noint ,marge ,i_mem ,
743 3 prov_n ,prov_e,eshift,inacti ,nsn ,
744 4 igap ,gap ,gap_s ,gapmin ,gapmax,
745 5 curv_max ,xm0,nod_normal,depth,drad ,