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)
117 INTEGER I_ADD,MAXSIZ,I_MEM,ESHIFT,NSN,NRTM,
118 . MULNSN,NB_N_B,NOINT,I_ADD_MAX,INACTI,IGAP,
119 . ADD(2,*),IRECT(4,*),
120 . CAND_N(*),CAND_E(*),II_STOK
123 . XLOC(3,*),XYZM(6,*),STF(*),STFN(*),GAP_S(*),
124 . xm0(3,*), nod_normal(3,*),
125 . tzinf,maxbox,minbox,marge,gap,gapmin,gapmax,
127 my_real ,
INTENT(IN) :: dgapload,drad
132 INTEGER NB_NCN,NB_NCN1,NB_ECN,ADDNN,ADDNE,I,J,DIR,NB_NC,NB_EC,
133 . N1,N2,N3,N4,NN,NE,K,L,NCAND_PROV,J_STOK,II,JJ
136 . dx,dy,dz,dsup,seuil,seuils,seuili, xx1, xx2, xx3, xx4,
137 . xmin, xmax,ymin,
ymax,zmin, zmax, tz, gapsmx, bgapsmx, gapl
139 INTEGER,
DIMENSION(:),
ALLOCATABLE :: PROV_N
140 INTEGER,
DIMENSION(:),
ALLOCATABLE :: PROV_E
141 INTEGER,
DIMENSION(:),
ALLOCATABLE :: TN1
142 INTEGER,
DIMENSION(:),
ALLOCATABLE :: TN2
143 INTEGER,
DIMENSION(:),
ALLOCATABLE :: TN3
144 INTEGER,
DIMENSION(:),
ALLOCATABLE :: TN4
145 INTEGER,
DIMENSION(:),
ALLOCATABLE :: BPE
146 INTEGER,
DIMENSION(:),
ALLOCATABLE :: PE
147 INTEGER,
DIMENSION(:),
ALLOCATABLE :: BPN
148 INTEGER,
DIMENSION(:),
ALLOCATABLE :: PN
150 my_real,
DIMENSION(:,:),
ALLOCATABLE :: txx1
151 my_real,
DIMENSION(:,:),
ALLOCATABLE :: txx2
152 my_real,
DIMENSION(:,:),
ALLOCATABLE :: txx3
153 my_real,
DIMENSION(:,:),
ALLOCATABLE :: txx4
154 my_real,
DIMENSION(:),
ALLOCATABLE :: txmax
155 my_real,
DIMENSION(:),
ALLOCATABLE :: txmin
156 my_real,
DIMENSION(:),
ALLOCATABLE :: tymax
157 my_real,
DIMENSION(:),
ALLOCATABLE :: tymin
158 my_real,
DIMENSION(:),
ALLOCATABLE :: tzmax
159 my_real,
DIMENSION(:),
ALLOCATABLE :: tzmin
161 CALL my_alloc(prov_n,2*mvsiz)
162 CALL my_alloc(prov_e,2*mvsiz)
163 CALL my_alloc(tn1,nvecsz)
164 CALL my_alloc(tn2,nvecsz)
165 CALL my_alloc(tn3,nvecsz)
166 CALL my_alloc(tn4,nvecsz)
167 CALL my_alloc(bpe,maxsiz/3)
168 CALL my_alloc(pe,maxsiz)
169 CALL my_alloc(bpn,nsn)
170 CALL my_alloc(pn,nsn)
171 CALL my_alloc(txx1,3,nvecsz)
172 CALL my_alloc(txx2,3,nvecsz)
173 CALL my_alloc(txx3,3,nvecsz)
174 CALL my_alloc(txx4,3,nvecsz)
175 CALL my_alloc(txmax,nvecsz)
176 CALL my_alloc(txmin,nvecsz)
177 CALL my_alloc(tymax,nvecsz)
178 CALL my_alloc(tymin,nvecsz)
179 CALL my_alloc(tzmax,nvecsz)
180 CALL my_alloc(tzmin,nvecsz)
208 IF(stfn(i)/=zero)
THEN
209 IF(xloc(1,i)>=xmin.AND.xloc(1,i)<=xmax.AND.
210 . xloc(2,i)>=ymin.AND.xloc(2,i)<=
ymax.AND.
211 . xloc(3,i)>=zmin.AND.xloc(3,i)<=zmax)
THEN
236 ELSE IF(dz==dsup)
THEN
239 seuil =(xyzm(dir+3,i_add)+xyzm(dir,i_add))*0.5
248 IF(xloc(dir,bpn(i))<seuil)
THEN
250 nb_ncn1 = nb_ncn1 + 1
257 IF(xloc(dir,bpn(i))>=seuil)
THEN
266 IF(xloc(dir,bpn(i))<seuil)
THEN
268 nb_ncn1 = nb_ncn1 + 1
271 gapsmx =
max(gapsmx,
max(gap_s(bpn(i))+dgapload,depth,drad))
277 IF(xloc(dir,bpn(i))>=seuil)
THEN
281 bgapsmx =
max(bgapsmx,
max(gap_s(bpn(i))+dgapload,depth,drad))
294 xx1=xm0(dir, irect(1,ne))
295 xx2=xm0(dir, irect(2,ne))
296 xx3=xm0(dir, irect(3,ne))
297 xx4=xm0(dir, irect(4,ne))
298 xmax=
max(xx1,xx2,xx3,xx4)+tzinf
305 ELSEIF(nb_ncn==0)
THEN
308 xx1=xm0(dir, irect(1,ne))
309 xx2=xm0(dir, irect(2,ne))
310 xx3=xm0(dir, irect(3,ne))
311 xx4=xm0(dir, irect(4,ne))
312 xmin=
min(xx1,xx2,xx3,xx4)-tzinf
322 xx1=xm0(dir, irect(1,ne))
323 xx2=xm0(dir, irect(2,ne))
324 xx3=xm0(dir, irect(3,ne))
325 xx4=xm0(dir, irect(4,ne))
326 xmin=
min(xx1,xx2,xx3,xx4)-tzinf
336 xx1=xm0(dir, irect(1,ne))
337 xx2=xm0(dir, irect(2,ne))
338 xx3=xm0(dir, irect(3,ne))
339 xx4=xm0(dir, irect(4,ne))
340 xmax=
max(xx1,xx2,xx3,xx4)+tzinf
355 xx1=xm0(dir, irect(1,ne))
356 xx2=xm0(dir, irect(2,ne))
357 xx3=xm0(dir, irect(3,ne))
358 xx4=xm0(dir, irect(4,ne))
359 xmax=
max(xx1,xx2,xx3,xx4)
360 + +
max(
min(
max(bgapsmx,gapmin),gapmax)+dgapload,depth,drad)
368 ELSEIF(nb_ncn==0)
THEN
371 xx1=xm0(dir, irect(1,ne))
372 xx2=xm0(dir, irect(2,ne))
373 xx3=xm0(dir, irect(3,ne))
374 xx4=xm0(dir, irect(4,ne))
375 xmin=
min(xx1,xx2,xx3,xx4)
376 - -
max(
min(
max(gapsmx,gapmin),gapmax)+dgapload,depth,drad)
387 xx1=xm0(dir, irect(1,ne))
388 xx2=xm0(dir, irect(2,ne))
389 xx3=xm0(dir, irect(3,ne))
390 xx4=xm0(dir, irect(4,ne))
391 xmin=
min(xx1,xx2,xx3,xx4)
392 - -
max(
min(
max(gapsmx,gapmin),gapmax)+dgapload,depth,drad)
403 xx1=xm0(dir, irect(1,ne))
404 xx2=xm0(dir, irect(2,ne))
405 xx3=xm0(dir, irect(3,ne))
406 xx4=xm0(dir, irect(4,ne))
407 xmax=
max(xx1,xx2,xx3,xx4)
408 + +
max(
min(
max(bgapsmx,gapmin),gapmax)+dgapload,depth,drad)
421 add(1,i_add+1) = addnn
422 add(2,i_add+1) = addne
429 xyzm(1,i_add+1) = xyzm(1,i_add)
430 xyzm(2,i_add+1) = xyzm(2,i_add)
431 xyzm(3,i_add+1) = xyzm(3,i_add)
432 xyzm(4,i_add+1) = xyzm(4,i_add)
433 xyzm(5,i_add+1) = xyzm(5,i_add)
434 xyzm(6,i_add+1) = xyzm(6,i_add)
435 xyzm(dir,i_add+1) = seuil
436 xyzm(dir+3,i_add) = seuil
442 IF(i_add+1>=i_add_max)
THEN
459 IF(add(2,i_add)+nb_ec>maxsiz)
THEN
467 IF(nb_ec/=0.AND.nb_nc/=0)
THEN
469 dx = xyzm(4,i_add) - xyzm(1,i_add)
470 dy = xyzm(5,i_add) - xyzm(2,i_add)
471 dz = xyzm(6,i_add) - xyzm(3,i_add)
481 IF(nb_ec+nb_nc<=nvecsz)
THEN
482 ncand_prov = nb_ec*nb_nc
484 ncand_prov = nvecsz+1
487 IF(dsup<minbox.OR.(nb_nc<=nb_n_b)
488 & .OR.(ncand_prov<=nvecsz))
THEN
490 ncand_prov = nb_ec*nb_nc
491 IF(ivector==1.AND.ncand_prov<=nvecsz)
THEN
499 txx1(1,i)=xm0(1, tn1(i))
500 txx2(1,i)=xm0(1, tn2(i))
501 txx3(1,i)=xm0(1, tn3(i))
502 txx4(1,i)=xm0(1, tn4(i))
503 txmax(i)=
max(txx1(1,i),txx2(1,i),txx3(1,i),txx4(1,i))
505 txmin(i)=
min(txx1(1,i),txx2(1,i),txx3(1,i),txx4(1,i))
507 txx1(2,i)=xm0(2, tn1(i))
508 txx2(2,i)=xm0(2, tn2(i))
509 txx3(2,i)=xm0(2, tn3(i))
510 txx4(2,i)=xm0(2, tn4(i))
511 tymax(i)=
max(txx1(2,i),txx2(2,i),txx3(2,i),txx4(2,i))
513 tymin(i)=
min(txx1(2,i),txx2(2,i),txx3(2,i),txx4(2,i))
515 txx1(3,i)=xm0(3, tn1(i))
516 txx2(3,i)=xm0(3, tn2(i))
517 txx3(3,i)=xm0(3, tn3(i))
518 txx4(3,i)=xm0(3, tn4(i))
519 tzmax(i)=
max(txx1(3,i),txx2(3,i),txx3(3,i),txx4(3,i))
521 tzmin(i)=
min(txx1(3,i),txx2(3,i),txx3(3,i),txx4(3,i))
524 DO k=1,ncand_prov,nvsiz
525 DO l=k,
min(k-1+nvsiz,ncand_prov)
529 IF(xloc(1,nn)>txmin(i).AND.xloc(1,nn)<txmax(i).AND.
530 & xloc(2,nn)>tymin(i).AND.xloc(2,nn)<tymax(i).AND.
531 & xloc(3,nn)>tzmin(i).AND.xloc(3,nn)<tzmax(i) )
THEN
533 prov_n(j_stok) = bpn(j)
534 prov_e(j_stok) = bpe(i)
537 IF(j_stok>=nvsiz)
THEN
539 1 nvsiz ,irect ,xloc ,ii_stok,cand_n,
540 2 cand_e ,mulnsn,noint ,marge ,i_mem ,
541 3 prov_n ,prov_e,eshift,inacti ,nsn ,
542 4 igap ,gap ,gap_s ,gapmin ,gapmax,
543 5 curv_max ,xm0 ,nod_normal,depth ,drad,
546 j_stok = j_stok-nvsiz
547#include "vectorize.inc"
549 prov_n(j) = prov_n(j+nvsiz)
550 prov_e(j) = prov_e(j+nvsiz)
561 txx1(1,i)=xm0(1, tn1(i))
562 txx2(1,i)=xm0(1, tn2(i))
563 txx3(1,i)=xm0(1, tn3(i))
564 txx4(1,i)=xm0(1, tn4(i))
565 txmax(i)=
max(txx1(1,i),txx2(1,i),txx3(1,i),txx4(1,i))
567 txmin(i)=
min(txx1(1,i),txx2(1,i),txx3(1,i),txx4(1,i))
569 txx1(2,i)=xm0(2, tn1(i))
570 txx2(2,i)=xm0(2, tn2(i))
571 txx3(2,i)=xm0(2, tn3(i))
572 txx4(2,i)=xm0(2, tn4(i))
573 tymax(i)=
max(txx1(2,i),txx2(2,i),txx3(2,i),txx4(2,i))
575 tymin(i)=
min(txx1(2,i),txx2(2,i),txx3(2,i),txx4(2,i))
577 txx1(3,i)=xm0(3, tn1(i))
578 txx2(3,i)=xm0(3, tn2(i))
579 txx3(3,i)=xm0(3, tn3(i))
580 txx4(3,i)=xm0(3, tn4(i))
581 tzmax(i)=
max(txx1(3,i),txx2(3,i),txx3(3,i),txx4(3,i))
583 tzmin(i)=
min(txx1(3,i),txx2(3,i),txx3(3,i),txx4(3,i))
586 DO k=1,ncand_prov,nvsiz
587 DO l=k,
min(k-1+nvsiz,ncand_prov)
591 gapl=
max(
max(
min(gap_s(bpn(j)),gapmax),gapmin)+dgapload,depth,drad)
592 IF(xloc(1,nn)>txmin(i)-gapl.AND.
593 & xloc(1,nn)<txmax(i)+gapl.AND.
594 & xloc(2,nn)>tymin(i)-gapl.AND.
595 & xloc(2,nn)<tymax(i)+gapl.AND.
596 & xloc(3,nn)>tzmin(i)-gapl.AND.
597 & xloc(3,nn)<tzmax(i)+gapl )
THEN
599 prov_n(j_stok) = bpn(j)
600 prov_e(j_stok) = bpe(i)
603 IF(j_stok>=nvsiz)
THEN
605 1 nvsiz ,irect ,xloc ,ii_stok,cand_n,
606 2 cand_e ,mulnsn,noint ,marge ,i_mem ,
607 3 prov_n ,prov_e,eshift,inacti ,nsn ,
608 4 igap ,gap ,gap_s ,gapmin ,gapmax,
609 5 curv_max ,xm0 ,nod_normal,depth,drad,
612 j_stok = j_stok-nvsiz
613#include "vectorize.inc"
615 prov_n(j) = prov_n(j+nvsiz)
616 prov_e(j) = prov_e(j+nvsiz)
622 DO k=1,ncand_prov,nvsiz
624 DO l=k,
min(k-1+nvsiz,ncand_prov)
636 xmax=
max(xx1,xx2,xx3,xx4)+tzinf
637 xmin=
min(xx1,xx2,xx3,xx4)-tzinf
642 ymax=
max(xx1,xx2,xx3,xx4)+tzinf
643 ymin=
min(xx1,xx2,xx3,xx4)-tzinf
648 zmax=
max(xx1,xx2,xx3,xx4)+tzinf
649 zmin=
min(xx1,xx2,xx3,xx4)-tzinf
652 IF(xloc(1,nn)>xmin.AND.xloc(1,nn)<xmax.AND.
653 & xloc(2,nn)>ymin.AND.xloc(2,nn)<
ymax.AND.
654 & xloc(3,nn)>zmin.AND.xloc(3,nn)<zmax )
THEN
656 prov_n(j_stok) = bpn(j)
661 DO l=k,
min(k-1+nvsiz,ncand_prov)
673 tz=
max(
max(
min(gap_s(bpn(j)),gapmax),gapmin)+dgapload,depth,drad)
675 xmax=
max(xx1,xx2,xx3,xx4)+tz
676 xmin=
min(xx1,xx2,xx3,xx4)-tz
682 ymin=
min(xx1,xx2,xx3,xx4)-tz
687 zmax=
max(xx1,xx2,xx3,xx4)+tz
688 zmin=
min(xx1,xx2,xx3,xx4)-tz
691 IF(xloc(1,nn)>xmin.AND.xloc(1,nn)<xmax.AND.
692 & xloc(2,nn)>ymin.AND.xloc(2,nn)<
ymax.AND.
693 & xloc(3,nn)>zmin.AND.xloc(3,nn)<zmax )
THEN
695 prov_n(j_stok) = bpn(j)
700 IF(j_stok>=nvsiz)
THEN
702 1 nvsiz,irect ,xloc ,ii_stok,cand_n,
703 2 cand_e ,mulnsn,noint ,marge ,i_mem ,
704 3 prov_n ,prov_e,eshift,inacti ,nsn ,
705 4 igap ,gap ,gap_s ,gapmin ,gapmax ,
706 5 curv_max ,xm0 ,nod_normal,depth,drad ,
709 j_stok = j_stok-nvsiz
710#include "vectorize.inc"
712 prov_n(j) = prov_n(j+nvsiz)
713 prov_e(j) = prov_e(j+nvsiz)
735 CALL i7dstk(nb_nc,nb_ec,add(1,i_add),bpn,pn,bpe,pe)
744 1 j_stok,irect ,xloc ,ii_stok,cand_n,
745 2 cand_e ,mulnsn,noint ,marge ,i_mem ,
746 3 prov_n ,prov_e,eshift,inacti ,nsn ,
747 4 igap ,gap ,gap_s ,gapmin ,gapmax,
748 5 curv_max ,xm0,nod_normal,depth,drad ,